-
Notifications
You must be signed in to change notification settings - Fork 62
Expand file tree
/
Copy pathWorkflowServerScripts.sql
More file actions
356 lines (302 loc) · 10.9 KB
/
Copy pathWorkflowServerScripts.sql
File metadata and controls
356 lines (302 loc) · 10.9 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
/*
Company: OptimaJet
Project: WorkflowServer Oracle
Version: 9.2
File: WorkflowServerScripts.sql
*/
CREATE TABLE WORKFLOWSERVERSTATS (
ID RAW(16),
TYPE NVARCHAR2(256) NOT NULL,
DATEFROM DATE NOT NULL,
DATETO DATE NOT NULL,
DURATION NUMBER NOT NULL,
ISSUCCESS CHAR(1 BYTE) NOT NULL,
PROCESSID RAW(16) NULL,
CONSTRAINT PK_WORKFLOWSERVERSTATS PRIMARY KEY (ID) USING INDEX STORAGE ( INITIAL 64K NEXT 1M MAXEXTENTS UNLIMITED ))
LOGGING;
--eos
CREATE INDEX IDX_WORKFLOWSERVERSTATS_PROCESSID ON WORKFLOWSERVERSTATS (PROCESSID)
LOGGING;
--eos
CREATE TABLE WORKFLOWSERVERPROCESSHISTORY (
ID RAW(16),
PROCESSID RAW(16) NOT NULL,
IDENTITYID NVARCHAR2(256) NULL,
ALLOWEDTOEMPLOYEENAMES NCLOB NULL,
TRANSITIONTIME DATE NULL,
"Order" NUMBER GENERATED ALWAYS AS IDENTITY,
INITIALSTATE NVARCHAR2(1024) NOT NULL,
DESTINATIONSTATE NVARCHAR2(1024) NOT NULL,
COMMAND NVARCHAR2(1024) NOT NULL,
CONSTRAINT PK_WORKFLOWSERVERPROCESSHISTORY PRIMARY KEY (ID) USING INDEX STORAGE ( INITIAL 64K NEXT 1M MAXEXTENTS UNLIMITED ))
LOGGING;
--eos
CREATE INDEX IDX_WORKFLOWSERVERPROCESSHISTORY_PROCESSID ON WORKFLOWSERVERPROCESSHISTORY (PROCESSID)
LOGGING;
--eos
ALTER TABLE WORKFLOWINBOX MODIFY IDENTITYID NVARCHAR2(1024);
--eos
CREATE OR REPLACE TYPE TREPORTBYSCHEMEENTRY AS OBJECT (
CODE VARCHAR2(1024),
PROCESSCOUNT NUMBER,
TRANSITIONCOUNT NUMBER
);
--eos
CREATE OR REPLACE TYPE TREPORTBYSCHEME AS TABLE OF TREPORTBYSCHEMEENTRY;
--eos
CREATE OR REPLACE FUNCTION WORKFLOWREPORTBYSCHEMES
RETURN TREPORTBYSCHEME
AS
ResultReport TREPORTBYSCHEME;
begin
SELECT
TREPORTBYSCHEMEENTRY(ws.CODE,
(SELECT COUNT(inst.ID) FROM WORKFLOWPROCESSINSTANCE inst
LEFT JOIN WORKFLOWPROCESSSCHEME ps on ps.ID = inst.SCHEMEID
WHERE coalesce(ps.ROOTSCHEMECODE, ps.SCHEMECODE) = ws.CODE),
(SELECT COUNT(history.ID) FROM WORKFLOWPROCESSTRANSITIONH history
LEFT JOIN WORKFLOWPROCESSINSTANCE inst on history.PROCESSID = inst.ID
LEFT JOIN WORKFLOWPROCESSSCHEME ps on ps.ID = inst.SCHEMEID
WHERE coalesce(ps.ROOTSCHEMECODE, ps.SCHEMECODE) = ws.CODE))
BULK COLLECT INTO ResultReport
FROM WORKFLOWSCHEME ws;
RETURN ResultReport;
end;
--eof
CREATE OR REPLACE TYPE TREPORTBYTRANSITIONSENTRY AS OBJECT (
"Date" DATE,
SCHEMECODE VARCHAR2(1024),
COUNT NUMBER
);
--eos
CREATE OR REPLACE TYPE TREPORTBYTRANSITIONS AS TABLE OF TREPORTBYTRANSITIONSENTRY;
--eos
CREATE OR REPLACE TYPE TREPORTENTRY AS OBJECT (df DATE, de DATE);
--eos
CREATE OR REPLACE TYPE TREPORT AS TABLE OF TREPORTENTRY;
--eos
CREATE OR REPLACE FUNCTION WORKFLOWREPORTBYTRANSITIONS(datefrom DATE, dateto DATE, period NUMBER)
RETURN TREPORTBYTRANSITIONS
AS
ResultReport TREPORTBYTRANSITIONS;
ReportTmp TREPORT := TREPORT();
curdate DATE;
dateend DATE;
BEGIN
IF datefrom > dateto THEN
RETURN NULL;
END IF;
curdate := TRUNC(datefrom, 'MM');
if period >= 1 then
curdate := curdate + (EXTRACT(DAY FROM datefrom) - 1);
end if;
if period >= 2 then
curdate := curdate + TO_NUMBER(TO_CHAR(datefrom, 'HH24')) / 24;
end if;
if period >= 3 then
curdate := curdate + TO_NUMBER(TO_CHAR(datefrom, 'MI')) / (24 * 60);
end if;
if period >= 4 then
curdate := curdate + TO_NUMBER(TO_CHAR(datefrom, 'SS')) / (24 * 60 * 60);
end if;
WHILE curdate <= dateto LOOP
dateend := CASE
WHEN period = 0 then ADD_MONTHS(curdate, 1)
WHEN period = 1 THEN curdate + 1
WHEN period = 2 THEN curdate + 1 / 24
WHEN period = 3 THEN curdate + 1 / (24 * 60)
WHEN period = 4 THEN curdate + 1 / (24 * 60 * 60)
end;
ReportTmp.EXTEND(1);
ReportTmp(ReportTmp.LAST) := TREPORTENTRY(curdate, dateend);
curdate := dateend;
END LOOP;
SELECT TREPORTBYTRANSITIONSENTRY(
p.df,
scheme.CODE,
coalesce(COUNT(history.ID), 0))
BULK COLLECT INTO ResultReport
FROM TABLE(ReportTmp) p
LEFT JOIN WORKFLOWSCHEME scheme on 1=1
LEFT JOIN WORKFLOWPROCESSSCHEME ps on scheme.CODE = coalesce(ps.ROOTSCHEMECODE, ps.SCHEMECODE)
LEFT JOIN WORKFLOWPROCESSINSTANCE inst on ps.ID = inst.SCHEMEID
LEFT JOIN WORKFLOWPROCESSTRANSITIONH history on history.PROCESSID = inst.ID AND history.TRANSITIONTIME >= p.df AND history.TRANSITIONTIME < p.de
GROUP BY p.df, scheme.CODE
ORDER BY p.df, scheme.CODE;
RETURN ResultReport;
end;
--eof
CREATE OR REPLACE TYPE TREPORTBYSTATSENTRY AS OBJECT ( "Date" timestamp,
SCHEMECODE NVARCHAR2(1024),
TYPE NVARCHAR2(1024),
ISSUCCESS CHAR(1 BYTE),
COUNT NUMBER,
DURATIONAVG NUMBER,
DURATIONMIN NUMBER,
DURATIONMAX NUMBER
);
--eos
CREATE OR REPLACE TYPE TREPORTBYSTATS AS TABLE OF TREPORTBYSTATSENTRY;
--eos
CREATE OR REPLACE TYPE TCODES AS TABLE OF NVARCHAR2(1024);
--eos
CREATE OR REPLACE TYPE TSTATSUCCESS AS TABLE OF CHAR(1 BYTE);
--eos
CREATE OR REPLACE FUNCTION WORKFLOWREPORTBYSTATS(datefrom DATE, dateto DATE, period NUMBER)
RETURN TREPORTBYSTATS
AS
ResultReport TREPORTBYSTATS;
curdate DATE;
dateend DATE;
ReportTmp TREPORT := TREPORT();
SchemesTmp TCODES;
TypesTmp TCODES;
SuccessesTmp TSTATSUCCESS := TSTATSUCCESS(0, 1);
BEGIN
IF datefrom > dateto THEN
RETURN NULL;
END IF;
curdate := TRUNC(datefrom, 'MM');
if period >= 1 then
curdate := curdate + (EXTRACT(DAY FROM datefrom) - 1);
end if;
if period >= 2 then
curdate := curdate + TO_NUMBER(TO_CHAR(datefrom, 'HH24')) / 24;
end if;
if period >= 3 then
curdate := curdate + TO_NUMBER(TO_CHAR(datefrom, 'MI')) / (24 * 60);
end if;
if period >= 4 then
curdate := curdate + TO_NUMBER(TO_CHAR(datefrom, 'SS')) / (24 * 60 * 60);
end if;
WHILE curdate <= dateto LOOP
dateend := CASE
WHEN period = 0 then ADD_MONTHS(curdate, 1)
WHEN period = 1 THEN curdate + 1
WHEN period = 2 THEN curdate + 1 / 24
WHEN period = 3 THEN curdate + 1 / (24 * 60)
WHEN period = 4 THEN curdate + 1 / (24 * 60 * 60)
end;
ReportTmp.EXTEND(1);
ReportTmp(ReportTmp.LAST) := TREPORTENTRY(curdate, dateend);
curdate := dateend;
END LOOP;
SELECT DISTINCT coalesce(ps.ROOTSCHEMECODE, ps.SCHEMECODE)
BULK COLLECT into SchemesTmp
FROM WORKFLOWSERVERSTATS stats
LEFT JOIN WORKFLOWPROCESSINSTANCE inst on inst.ID = stats.PROCESSID
LEFT JOIN WORKFLOWPROCESSSCHEME ps on inst.SCHEMEID = ps.ID
WHERE DATEFROM >= datefrom AND DATEFROM < dateto;
SELECT DISTINCT stats.TYPE
BULK COLLECT into TypesTmp
FROM WORKFLOWSERVERSTATS stats
WHERE stats.DATEFROM >= datefrom AND stats.DATEFROM < dateto;
SELECT TREPORTBYSTATSENTRY(
p.df,
scheme.column_value,
types.column_value,
success.column_value,
coalesce(COUNT(stats.ID), 0),
coalesce(AVG(stats.DURATION), 0),
coalesce(MIN(stats.DURATION), 0),
coalesce(MAX(stats.DURATION), 0))
BULK COLLECT INTO ResultReport
FROM TABLE(ReportTmp) p
LEFT JOIN TABLE(SchemesTmp) scheme on 1=1
LEFT JOIN TABLE(TypesTmp) types on 1=1
LEFT JOIN TABLE(SuccessesTmp) success on 1=1
LEFT JOIN WORKFLOWSERVERSTATS stats on stats.TYPE = types.column_value AND stats.ISSUCCESS = success.column_value AND stats.DATEFROM >= p.df AND stats.DATEFROM < p.de
LEFT JOIN WORKFLOWPROCESSINSTANCE inst on stats.PROCESSID = inst.ID
LEFT JOIN WORKFLOWPROCESSSCHEME ps on ps.ID = inst.SCHEMEID AND scheme.column_value = coalesce(ps.ROOTSCHEMECODE, ps.SCHEMECODE)
GROUP BY p.df, scheme.column_value, types.column_value, success.column_value
ORDER BY p.df, scheme.column_value, types.column_value, success.column_value;
RETURN ResultReport;
end;
--eof
ALTER TABLE WORKFLOWSCHEME ADD DELETEFINALIZED CHAR(1 BYTE) DEFAULT 0 NOT NULL;
--eos
ALTER TABLE WORKFLOWSCHEME ADD DONTFILLINDOX CHAR(1 BYTE) DEFAULT 0 NOT NULL;
--eos
ALTER TABLE WORKFLOWSCHEME ADD DONTPREEXECUTE CHAR(1 BYTE) DEFAULT 0 NOT NULL;
--eos
ALTER TABLE WORKFLOWSCHEME ADD AUTOSTART CHAR(1 BYTE) DEFAULT 0 NOT NULL;
--eos
ALTER TABLE WORKFLOWSCHEME ADD DEFAULTFORM NVARCHAR2(1024) NULL;
--eos
CREATE TABLE WORKFLOWSERVERLOGS (
ID RAW(16),
MESSAGE NCLOB NOT NULL,
MESSAGETEMPLATE NCLOB NOT NULL,
TIMESTAMP DATE NOT NULL,
EXCEPTION NCLOB NULL,
PROPERTIESJSON NCLOB NULL,
LOGLEVEL NUMBER(3) NOT NULL,
RUNTIMEID NVARCHAR2(900) NOT NULL,
CONSTRAINT PK_WORKFLOWSERVERLOGS PRIMARY KEY (ID) USING INDEX STORAGE ( INITIAL 64K NEXT 1M MAXEXTENTS UNLIMITED ))
LOGGING;
--eos
CREATE INDEX IDX_WORKFLOWSERVERLOGS_TIMESTAMP ON WORKFLOWSERVERLOGS (TIMESTAMP)
LOGGING;
--eos
CREATE INDEX IDX_WORKFLOWSERVERLOGS_LEVEL ON WORKFLOWSERVERLOGS (LOGLEVEL)
LOGGING;
--eos
CREATE INDEX IDX_RUNTIMEID_LEVEL ON WORKFLOWSERVERLOGS (RUNTIMEID)
LOGGING;
--eos
CREATE TABLE WORKFLOWSERVERUSER(
ID RAW(16),
NAME NVARCHAR2(256) NOT NULL,
EMAIL NVARCHAR2(256) NULL,
PHONE NVARCHAR2(256) NULL,
ISLOCKED CHAR(1 BYTE) DEFAULT 0 NOT NULL,
EXTERNALID NVARCHAR2(1024) NULL,
LOCKFLAG RAW(16) NOT NULL,
TENANTID NVARCHAR2(1024) NULL,
ROLES NCLOB NULL,
EXTENSIONS NCLOB NULL,
CONSTRAINT PK_WORKFLOWSERVERUSER PRIMARY KEY (ID) USING INDEX STORAGE ( INITIAL 64 K NEXT 1 M MAXEXTENTS UNLIMITED )
)
LOGGING;
--eos
CREATE TABLE WORKFLOWSERVERUSERCREDENTIAL(
ID RAW(16),
PASSWORDHASH NVARCHAR2(128) NULL,
PASSWORDSALT NVARCHAR2(128) NULL,
USERID RAW(16) NOT NULL,
LOGIN NVARCHAR2(256) NOT NULL,
AUTHTYPE NUMBER(3) NOT NULL,
TENANTID NVARCHAR2(1024) NULL,
EXTERNALPROVIDERNAME NVARCHAR2(128) NULL,
CONSTRAINT FK_WORKFLOWSERVERUSER_WORKFLOWSERVERUSERCREDENTIAL FOREIGN KEY (USERID)
REFERENCES WORKFLOWSERVERUSER (ID) ON DELETE CASCADE,
CONSTRAINT PK_WORKFLOWSERVERUSERCREDENTIAL PRIMARY KEY (ID) USING INDEX STORAGE ( INITIAL 64 K NEXT 1 M MAXEXTENTS UNLIMITED )
)
LOGGING;
--eos
CREATE INDEX IX_WORKFLOWSERVERUSERCREDENTIAL_USERID ON WORKFLOWSERVERUSERCREDENTIAL (USERID);
--eos
CREATE INDEX IX_WORKFLOWSERVERUSERCREDENTIAL_LOGIN ON WORKFLOWSERVERUSERCREDENTIAL (LOGIN);
--eos
CREATE TABLE WORKFLOWSERVERPROCESSLOGS(
ID RAW(16),
PROCESSID RAW(16) NOT NULL,
CREATEDON TIMESTAMP default current_timestamp NOT NULL,
TIMESTAMP TIMESTAMP default current_timestamp NOT NULL,
SCHEMECODE NVARCHAR2(256) NULL,
MESSAGE NCLOB DEFAULT ' ' NOT NULL,
PROPERTIES NCLOB DEFAULT ' ' NOT NULL,
EXCEPTION NCLOB DEFAULT ' ' NOT NULL,
TENANTID NVARCHAR2(1024) NULL,
CONSTRAINT PK_WORKFLOWSERVERPROCESSLOGS PRIMARY KEY (ID) USING INDEX STORAGE ( INITIAL 64 K NEXT 1 M MAXEXTENTS UNLIMITED )
)
LOGGING;
--eos
CREATE INDEX IDX_WORKFLOWSERVERPROCESSLOGS_TIMESTAMP ON WORKFLOWSERVERPROCESSLOGS (TIMESTAMP);
--eos
CREATE INDEX IDX_WORKFLOWSERVERPROCESSLOGS_CREATEDON ON WORKFLOWSERVERPROCESSLOGS (CREATEDON);
--eos
CREATE INDEX IDX_WORKFLOWSERVERPROCESSLOGS_PROCESSID ON WORKFLOWSERVERPROCESSLOGS (PROCESSID);
--eos
COMMIT;
--eos