-
Notifications
You must be signed in to change notification settings - Fork 2
/
gfc_nvsion_excel_redirect_triggers.sql
444 lines (409 loc) · 16.5 KB
/
gfc_nvsion_excel_redirect_triggers.sql
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
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
REM gfc_nvsion_excel_redirect_triggers.sql
REM (c)Go-Faster Consultancy 2021
REM Triggers to change process category to nVisionExcel for reports and reportbooks that have to be run on Excel
REM see also https://blogs.oracle.com/oraclemagazine/on-conditional-compilatio
set echo on
spool gfc_nvsion_excel_redirect_triggers
rollback;
ALTER SESSION SET PLSQL_CCFLAGS = 'mydebug:FALSE';
----------------------------------------------------------------------------------------------------
CREATE TABLE sysadm.ps_nvs_redir_excel
(layout_id VARCHAR2(50) NOT NULL
,eff_status VARCHAR2(1) not null
);
ALTER TABLE sysadm.ps_nvs_redir_excel add eff_status VARCHAR2(1);
UPDATE sysadm.ps_nvs_redir_excel SET eff_status = 'A';
ALTER TABLE sysadm.ps_nvs_redir_excel MODIFY eff_status not null;
CREATE UNIQUE INDEX sysadm.ps_nvs_redir_excel ON sysadm.ps_nvs_redir_excel (layout_id);
----------------------------------------------------------------------------------------------------
REM load metadata of layouts that have to run on Excel rather than OpenXML
@@gfc_nvsion_excel_redirect_metadata
----------------------------------------------------------------------------------------------------
spool gfc_nvsion_excel_redirect_triggers app
CREATE OR REPLACE TRIGGER sysadm.gfc_nvision_excel_redirect_rqst
BEFORE INSERT ON sysadm.psprcsrqst
FOR EACH ROW
WHEN (new.prcstype IN('nVision-Report','nVision-ReportBook'))
DECLARE
l_excel INTEGER := 0;
l_maxconcurrent INTEGER := 0;
k_prcscategory CONSTANT VARCHAR2(15) := 'nVisionExcel';
$IF $$mydebug $THEN
l_errc NUMBER;
l_errm VARCHAR2(200);
$END
BEGIN
$IF $$mydebug $THEN dbms_output.put_line('Entering Trigger sysadm.gfc_nvision_excel_redirect_rqst'); $END
IF :new.prcstype = 'nVision-ReportBook' THEN
--check for reportbook running report that uses layout on Excel list
SELECT 1
INTO l_excel
FROM psnvsbookrequst b
, ps_nvs_report n
, ps_nvs_redir_excel e
WHERE b.oprid = :new.oprid
AND b.run_cntl_id = :new.runcntlid
AND b.eff_status = 'A'
AND n.business_unit = b.business_unit
AND n.report_id = b.report_id
AND n.layout_id = e.layout_id
AND e.eff_status = 'A'
AND rownum=1;
ELSE
--look in command line for report running layout on Excel list
SELECT 1
INTO l_excel
FROM psprcsparms p
, ps_nvs_report n
, ps_nvs_redir_excel e
WHERE p.prcsinstance = :new.prcsinstance
AND n.report_id = substr(regexp_substr(p.parmlist,'-NRN[^ ]+'),5)
AND n.layout_id = e.layout_id
AND e.eff_status = 'A'
AND rownum=1;
END IF;
$IF $$mydebug $THEN dbms_output.put_line('found Excel nVision layout for oprid='||:new.oprid||', runcntlid='||:new.runcntlid); $END
--set category of request
:new.prcscategory := k_prcscategory;
SELECT maxconcurrent
INTO l_maxconcurrent
FROM ps_servercategory
WHERE prcscategory = :new.prcscategory
AND servername = :new.servernamerqst;
--if request assigned to server where it cannot run blank out server assignment and allow load balancing to determine it
IF l_maxconcurrent = 0 THEN
:new.servernamerqst := ' ';
END IF;
$IF $$mydebug $THEN dbms_output.put_line('set process name:'||:new.prcsname||', category:'||:new.prcscategory); $END
EXCEPTION
WHEN no_data_found THEN
$IF $$mydebug $THEN dbms_output.put_line('No excel redirect found'); $ELSE NULL; $END
WHEN others THEN
$IF $$mydebug $THEN
l_errc := sqlcode;
l_errm := SUBSTR(sqlerrm,1,200);
dbms_output.put_line('Other Error: ORA-'||l_errc||':'||l_errm);
$ELSE NULL; $END
END gfc_nvision_excel_redirect_rqst ;
/
show errors
----------------------------------------------------------------------------------------------------
CREATE OR REPLACE TRIGGER sysadm.gfc_nvision_excel_redirect_que
BEFORE INSERT ON sysadm.psprcsque
FOR EACH ROW
WHEN (new.prcstype IN('nVision-Report','nVision-ReportBook'))
DECLARE
l_excel INTEGER := 0;
l_maxconcurrent INTEGER := 0;
k_prcscategory CONSTANT VARCHAR2(15) := 'nVisionExcel';
BEGIN
IF :new.prcstype = 'nVision-ReportBook' THEN
SELECT 1
INTO l_excel
FROM psnvsbookrequst b
, ps_nvs_report n
, ps_nvs_redir_excel e
WHERE b.oprid = :new.oprid
AND b.run_cntl_id = :new.runcntlid
AND b.eff_status = 'A'
AND n.business_unit = b.business_unit
AND n.report_id = b.report_id
AND n.layout_id = e.layout_id
AND e.eff_status = 'A'
AND rownum=1;
ELSE
SELECT 1
INTO l_excel
FROM psprcsparms p
, ps_nvs_report n
, ps_nvs_redir_excel e
WHERE p.prcsinstance = :new.prcsinstance
AND n.report_id = substr(regexp_substr(p.parmlist,'-NRN[^ ]+'),5)
AND n.layout_id = e.layout_id
AND e.eff_status = 'A'
AND rownum=1;
END IF;
--set category of request
:new.prcscategory := k_prcscategory;
SELECT maxconcurrent
INTO l_maxconcurrent
FROM ps_servercategory
WHERE prcscategory = :new.prcscategory
AND servername = :new.servernamerqst;
--if request assigned to server where it cannot run blank out server assignment and allow load balancing to determine it
IF l_maxconcurrent = 0 THEN
:new.servernamerqst := ' ';
:new.serverassign := ' ';
END IF;
EXCEPTION
WHEN no_data_found THEN NULL;
WHEN others THEN NULL;
END gfc_nvision_excel_redirect_que;
/
show errors
----------------------------------------------------------------------------------------------------
CREATE OR REPLACE TRIGGER sysadm.gfc_nvision_excel_redirect_jobrqst
BEFORE INSERT ON sysadm.psprcsrqst
FOR EACH ROW
WHEN (new.prcstype IN('PSJob'))
DECLARE
l_excel INTEGER := 0;
l_maxconcurrent INTEGER := 0;
k_prcscategory CONSTANT VARCHAR2(15) := 'nVisionExcel';
$IF $$mydebug $THEN
l_errc NUMBER;
l_errm VARCHAR2(200);
$END
BEGIN
$IF $$mydebug $THEN dbms_output.put_line('Entering Trigger sysadm.gfc_nvision_excel_redirect_jobrqst'); $END
SELECT 1
INTO l_excel
FROM ps_schdlitem i
, psnvsbookrequst b
, ps_nvs_report n
, ps_nvs_redir_excel e
WHERE b.oprid = :new.oprid
AND i.jobnamesrc = :new.prcsjobname
AND i.prcstype IN('nVision-ReportBook')
AND b.run_cntl_id = i.run_cntl_id
AND b.eff_status = 'A'
AND n.business_unit = b.business_unit
AND n.report_id = b.report_id
AND n.layout_id = e.layout_id
AND e.eff_status = 'A'
AND rownum=1;
--set category of request
:new.prcscategory := k_prcscategory;
SELECT maxconcurrent
INTO l_maxconcurrent
FROM ps_servercategory
WHERE prcscategory = :new.prcscategory
AND servername = :new.servernamerqst;
--if request assigned to server where it cannot run blank out server assignment and allow load balancing to determine it
IF l_maxconcurrent = 0 THEN
:new.servernamerqst := ' ';
END IF;
EXCEPTION
WHEN no_data_found THEN
$IF $$mydebug $THEN dbms_output.put_line('No excel redirect found'); $ELSE NULL; $END
WHEN others THEN
$IF $$mydebug $THEN
l_errc := sqlcode;
l_errm := SUBSTR(sqlerrm,1,200);
dbms_output.put_line('Other Error: ORA-'||l_errc||':'||l_errm);
$ELSE NULL; $END
END gfc_nvision_excel_redirect_jobrqst ;
/
show errors
----------------------------------------------------------------------------------------------------
CREATE OR REPLACE TRIGGER sysadm.gfc_nvision_excel_redirect_jobque
BEFORE INSERT ON sysadm.psprcsque
FOR EACH ROW
WHEN (new.prcstype IN('PSJob'))
DECLARE
l_excel INTEGER := 0;
l_maxconcurrent INTEGER := 0;
k_prcscategory CONSTANT VARCHAR2(15) := 'nVisionExcel';
$IF $$mydebug $THEN
l_errc NUMBER;
l_errm VARCHAR2(200);
$END
BEGIN
SELECT 1
INTO l_excel
FROM ps_schdlitem i
, psnvsbookrequst b
, ps_nvs_report n
, ps_nvs_redir_excel e
WHERE b.oprid = :new.oprid
AND i.jobnamesrc = :new.prcsjobname
AND i.prcstype IN('nVision-ReportBook')
AND b.run_cntl_id = i.run_cntl_id
AND b.eff_status = 'A'
AND n.business_unit = b.business_unit
AND n.report_id = b.report_id
AND n.layout_id = e.layout_id
AND e.eff_status = 'A'
AND rownum=1;
--set category of request
:new.prcscategory := k_prcscategory;
SELECT maxconcurrent
INTO l_maxconcurrent
FROM ps_servercategory
WHERE prcscategory = :new.prcscategory
AND servername = :new.servernamerqst;
--if request assigned to server where it cannot run blank out server assignment and allow load balancing to determine it
IF l_maxconcurrent = 0 THEN
:new.servernamerqst := ' ';
:new.serverassign := ' ';
END IF;
EXCEPTION
WHEN no_data_found THEN NULL;
WHEN others THEN NULL;
END gfc_nvision_excel_redirect_jobque;
/
show errors
----------------------------------------------------------------------------------------------------
column trigger_name format a40
column table_name format a30
column triggering_event format a20
select trigger_name, table_name, triggering_event, status
from user_triggers
where table_name IN('PSPRCSRQST','PSPRCSQUE')
and trigger_name like 'GFC_NVISION_EXCEL_REDIRECT%'
;
spool off
----------------------------------------------------------------------------------------------------
--drop TRIGGER sysadm.gfc_nvision_excel_redirect_rqst;
--drop TRIGGER sysadm.gfc_nvision_excel_redirect_que;
--drop TRIGGER sysadm.gfc_nvision_excel_redirect_jobrqst;
--drop TRIGGER sysadm.gfc_nvision_excel_redirect_jobque;
set termout off
/****************************************************************************************************
* Test Script
****************************************************************************************************
REM test
set serveroutput on termout on
delete from psprcsrqst where prcsinstance IN(41,42);
delete from psprcsque where prcsinstance IN(41,42);
insert into psprcsrqst
(PRCSINSTANCE, JOBINSTANCE, MAINJOBINSTANCE, PRCSJOBSEQ, PRCSJOBNAME, PRCSTYPE, PRCSNAME, PRCSITEMLEVEL, MAINJOBNAME, MAINJOBSEQ
, RUNLOCATION, OPSYS, DBTYPE, DBNAME, SERVERNAMERQST, SERVERNAMERUN, RUNDTTM, RECURNAME, OPRID, PRCSVERSION, RUNSTATUS, RQSTDTTM
, LASTUPDDTTM, BEGINDTTM, ENDDTTM, RUNCNTLID, PRCSRTNCD, CONTINUEJOB, USERNOTIFIED, INITIATEDNEXT, OUTDESTTYPE, OUTDESTFORMAT
, ORIGPRCSINSTANCE, GENPRCSTYPE, RESTARTENABLED, TIMEZONE, PSRF_FOLDER_NAME, SCHEDULENAME, RETRYCOUNT, RECURORIGPRCSINST
, P_PRCSINSTANCE, DISTSTATUS, PRCSCATEGORY, PRCSCURREXPIREDTTM, RUNSERVEROPTION, PT_RETENTIONDAYS, CONTENTID, PTNONUNPRCSID)
WITH
o AS (select distinct dbname from ps.psdbowner
where ownerid = 'SYSADM'
), r as (
SELECT DISTINCT b.oprid, b.run_cntl_id runcntlid, i.jobnamesrc
FROM ps_schdlitem i
, PSNVSBOOKREQUST b
, PS_NVS_REPORT n
WHERE b.eff_status = 'A'
and n.business_unit = b.business_unit
and n.report_id = b.report_id
and n.layout_id IN('ZBUVBS64')
and b.oprid = 'BATCH'
and i.prcstype = 'nVision-ReportBook'
and i.prcsname = 'RPTBOOK'
and i.run_cntl_id = b.run_cntl_id
and rownum = 1
)
SELECT 41, 41, 0, 0, jobnamesrc, 'PSJob', jobnamesrc, 0, ' ', 0
, '2', '2', '2', o.DBNAME, ' ', ' ', null, ' ', r.oprid, 0, 5, sysdate
, sysdate, null, null, r.RUNCNTLID, 0, 0, 0, 0, 0, 0
, 0, '7', ' ', 'GMT', 'NVISION', ' ', 0, 0
, 0, ' ', 'Default', sysdate+42, ' ', 42, 0, 0
FROM o, r
/
insert into psprcsrqst
(PRCSINSTANCE, JOBINSTANCE, MAINJOBINSTANCE, PRCSJOBSEQ, PRCSJOBNAME, PRCSTYPE, PRCSNAME, PRCSITEMLEVEL, MAINJOBNAME, MAINJOBSEQ
, RUNLOCATION, OPSYS, DBTYPE, DBNAME, SERVERNAMERQST, SERVERNAMERUN, RUNDTTM, RECURNAME, OPRID, PRCSVERSION, RUNSTATUS, RQSTDTTM
, LASTUPDDTTM, BEGINDTTM, ENDDTTM, RUNCNTLID, PRCSRTNCD, CONTINUEJOB, USERNOTIFIED, INITIATEDNEXT, OUTDESTTYPE, OUTDESTFORMAT
, ORIGPRCSINSTANCE, GENPRCSTYPE, RESTARTENABLED, TIMEZONE, PSRF_FOLDER_NAME, SCHEDULENAME, RETRYCOUNT, RECURORIGPRCSINST
, P_PRCSINSTANCE, DISTSTATUS, PRCSCATEGORY, PRCSCURREXPIREDTTM, RUNSERVEROPTION, PT_RETENTIONDAYS, CONTENTID, PTNONUNPRCSID)
WITH
o AS (select distinct dbname from ps.psdbowner
where ownerid = 'SYSADM'
), r as (
SELECT b.oprid, b.run_cntl_id runcntlid
FROM PSNVSBOOKREQUST b
, PS_NVS_REPORT n
WHERE b.eff_status = 'A'
and n.business_unit = b.business_unit
and n.report_id = b.report_id
and n.layout_id IN('ZBUVBS64')
and b.oprid = 'BATCH'
and rownum = 1
)
SELECT 42, 41, 0, 0, ' ', 'nVision-ReportBook', 'RPTBOOK', 0, ' ', 0
, '2', '2', '2', o.DBNAME, ' ', ' ', null, ' ', r.oprid, 0, 5, sysdate
, sysdate, null, null, r.RUNCNTLID, 0, 0, 0, 0, 0, 0
, 0, '7', ' ', 'GMT', 'NVISION', ' ', 0, 0
, 0, ' ', 'Default', sysdate+42, ' ', 42, 0, 0
FROM o, r
/
insert into psprcsque
(PRCSINSTANCE, JOBINSTANCE, PRCSJOBSEQ, PRCSJOBNAME, MAINJOBINSTANCE, PRCSTYPE, PRCSNAME, MAINJOBNAME, MAINJOBSEQ, PRCSITEMLEVEL
, RUNLOCATION, OPSYS, SERVERNAMERQST, SERVERNAMERUN, SERVERASSIGN, RUNDTTM, RECURNAME, OPRID, PRCSPRTY, SESSIONIDNUM, RUNSTATUS
, RQSTDTTM, RECURDTTM, LASTUPDDTTM, RUNCNTLID, PRCSRTNCD, CONTINUEJOB, USERNOTIFIED, INITIATEDNEXT, OUTDESTTYPE, OUTDESTFORMAT
, ORIGPRCSINSTANCE, GENPRCSTYPE, RESTARTENABLED, TIMEZONE, EMAIL_WEB_RPT, EMAIL_LOG_FLAG, PTEMAILRPTURLTYPE, PSRF_FOLDER_NAME
, SCHEDULENAME, PRCSWINPOP, MCFREN_URL_ID, RETRYCOUNT, RECURORIGPRCSINST, P_PRCSINSTANCE, PRCSCATEGORY, PRCSCURREXPIREDTTM
, DISTSTATUS, PRCSSTARTDTTM, RUNSERVEROPTION, TUXSVCID, PT_RETENTIONDAYS, PRCSRUNNOTIFY, PTNONUNPRCSID, QRYXFORMNAME
, MSGNODENAME, CDM_APPROVAL_FLAG, PT_OVRDFROMEMAILID)
WITH
o AS (select distinct dbname from ps.psdbowner
where ownerid = 'SYSADM'
), r as (
SELECT DISTINCT b.oprid, b.run_cntl_id runcntlid, i.jobnamesrc
FROM ps_schdlitem i
, PSNVSBOOKREQUST b
, PS_NVS_REPORT n
WHERE b.eff_status = 'A'
and n.business_unit = b.business_unit
and n.report_id = b.report_id
and n.layout_id IN('ZBUVBS64')
and b.oprid = 'BATCH'
and i.prcstype = 'nVision-ReportBook'
and i.prcsname = 'RPTBOOK'
and i.run_cntl_id = b.run_cntl_id
and rownum = 1
)
SELECT 41, 41, 0, jobnamesrc, 0, 'PSJob', jobnamesrc, ' ', 0, 0
, '2', '2', ' ', ' ', ' ', sysdate, ' ', r.OPRID, 5, 0, 5
, sysdate, null, sysdate, r.RUNCNTLID, 0, 0, 0, 0, '6', '8'
, 0, '7', '1', 'PST', ' ', ' ', 0, ' '
, ' ', ' ', ' ', 0, 0, 0, 'nVisionOpenXML', null
, ' ', null, '1', 0, 0, 0, ' ', ' '
, ' ', ' ', ' '
FROM o, r
/
insert into psprcsque
(PRCSINSTANCE, JOBINSTANCE, PRCSJOBSEQ, PRCSJOBNAME, MAINJOBINSTANCE, PRCSTYPE, PRCSNAME, MAINJOBNAME, MAINJOBSEQ, PRCSITEMLEVEL
, RUNLOCATION, OPSYS, SERVERNAMERQST, SERVERNAMERUN, SERVERASSIGN, RUNDTTM, RECURNAME, OPRID, PRCSPRTY, SESSIONIDNUM, RUNSTATUS
, RQSTDTTM, RECURDTTM, LASTUPDDTTM, RUNCNTLID, PRCSRTNCD, CONTINUEJOB, USERNOTIFIED, INITIATEDNEXT, OUTDESTTYPE, OUTDESTFORMAT
, ORIGPRCSINSTANCE, GENPRCSTYPE, RESTARTENABLED, TIMEZONE, EMAIL_WEB_RPT, EMAIL_LOG_FLAG, PTEMAILRPTURLTYPE, PSRF_FOLDER_NAME
, SCHEDULENAME, PRCSWINPOP, MCFREN_URL_ID, RETRYCOUNT, RECURORIGPRCSINST, P_PRCSINSTANCE, PRCSCATEGORY, PRCSCURREXPIREDTTM
, DISTSTATUS, PRCSSTARTDTTM, RUNSERVEROPTION, TUXSVCID, PT_RETENTIONDAYS, PRCSRUNNOTIFY, PTNONUNPRCSID, QRYXFORMNAME
, MSGNODENAME, CDM_APPROVAL_FLAG, PT_OVRDFROMEMAILID)
WITH o AS (
select distinct dbname from ps.psdbowner
where ownerid = 'SYSADM'
), r as (
SELECT b.oprid, b.run_cntl_id runcntlid
FROM PSNVSBOOKREQUST b
, PS_NVS_REPORT n
WHERE b.eff_status = 'A'
and n.business_unit = b.business_unit
and n.report_id = b.report_id
and n.layout_id IN('ZBUVBS64')
and b.oprid = 'BATCH'
and rownum = 1
)
SELECT 42, 41, 0, ' ', 0, 'nVision-ReportBook', 'RPTBOOK', ' ', 0, 0
, '2', '2', ' ', ' ', ' ', sysdate, ' ', r.oprid, 5, 0, 5
, sysdate, null, sysdate, r.RUNCNTLID, 0, 0, 0, 0, '6', '8'
, 0, '7', '1', 'PST', ' ', ' ', 0, ' '
, ' ', ' ', ' ', 0, 0, 0, 'nVisionOpenXML', null
, ' ', null, '1', 0, 0, 0, ' ', ' '
, ' ', ' ', ' '
FROM o, r
/
select prcsinstance, jobinstance, prcstype, prcsname, prcscategory, oprid, runcntlid
from psprcsrqst where prcsinstance IN(41,42);
select prcsinstance, prcstype, prcsname, prcscategory, oprid, runcntlid
from psprcsque where prcsinstance IN(41,42);
set lines 200 trimspool on
column text format a180
--select line, text from user_source where name like 'GFC_NVISION_EXCEL_REDIRECT_RQST' order by line;
delete from psprcsrqst where prcsinstance IN(41,42);
delete from psprcsque where prcsinstance IN(41,42);
drop TRIGGER sysadm.gfc_nvision_excel_redirect_rqst;
drop TRIGGER sysadm.gfc_nvision_excel_redirect_que;
drop TRIGGER sysadm.gfc_nvision_excel_redirect_jobrqst;
drop TRIGGER sysadm.gfc_nvision_excel_redirect_jobque;
--exec dbms_preprocessor.print_post_processed_source('TRIGGER',user,'GFC_NVISION_EXCEL_REDIRECT_QUE');
--exec dbms_preprocessor.print_post_processed_source('TRIGGER',user,'GFC_NVISION_EXCEL_REDIRECT_RQST');
****************************************************************************************************/
set termout on