DBA Data[Home] [Help]

PACKAGE BODY: APPS.JTY_TRANS_USG_PGM_SQL_PKG

Source


1 PACKAGE BODY JTY_TRANS_USG_PGM_SQL_PKG as
2 /* $Header: jtftupsb.pls 120.2 2005/11/21 13:34:02 achanda noship $ */
3 --    Start of Comments
4 --    ---------------------------------------------------
5 --    PACKAGE NAME:   JTY_TRANS_USG_PGM_SQL_PKG
6 --    ---------------------------------------------------
7 --    PURPOSE
8 --      This package is used to create the transaction type SQLs
9 --      and the corresponding TRANS tables.
10 --
11 --      Procedures:
12 --         (see below for specification)
13 --
14 --    NOTES
15 --      This package is publicly available for use
16 --
17 --    HISTORY
18 --      09/08/05    ACHANDA         Created
19 --
20 --    End of Comments
21 --
22 
23 PROCEDURE Insert_Row(
24    p_source_id IN NUMBER
25   ,p_trans_type_id IN NUMBER
26   ,p_program_name IN VARCHAR2
27   ,p_version_name IN VARCHAR2
28   ,p_real_time_sql IN VARCHAR2
29   ,p_batch_total_sql IN VARCHAR2
30   ,p_batch_incr_sql IN VARCHAR2
31   ,p_batch_dea_sql IN VARCHAR2
32   ,p_incr_reassign_sql IN VARCHAR2
33   ,p_use_total_for_dea_flag IN VARCHAR2
34   ,p_enabled_flag IN VARCHAR2
35   ,retcode OUT NOCOPY VARCHAR2
36   ,errbuf OUT NOCOPY VARCHAR2) IS
37 
38   l_enabled_flag           VARCHAR2(1);
39   l_use_total_for_dea_flag VARCHAR2(1);
40 
41   l_param_passing_mechanism     VARCHAR2(3);
42   l_real_time_enable_flag       VARCHAR2(1);
43   l_batch_enable_flag           VARCHAR2(1);
44   l_real_time_trans_table_name  VARCHAR2(30);
45   l_batch_trans_table_name      VARCHAR2(30);
46   l_batch_nm_trans_table_name   VARCHAR2(30);
47   l_batch_dea_trans_table_name  VARCHAR2(30);
48 
49   l_user_id              NUMBER;
50   l_login_id             NUMBER;
51   l_sysdate              DATE;
52   first_time             BOOLEAN;
53   l_trans_usg_pgm_sql_id NUMBER;
54   l_new_line             VARCHAR2(02) := fnd_global.local_chr(10);
55   l_indent               VARCHAR2(30);
56 
57   l_real_time_insert VARCHAR2(32767);
58   l_real_time_select VARCHAR2(32000);
59   l_create_gt_stmt   VARCHAR2(32767);
60   l_drop_gt_stmt     VARCHAR2(1000);
61   l_create_tbl_stmt  VARCHAR2(32767);
62   l_drop_tbl_stmt    VARCHAR2(1000);
63   l_alter_tbl_stmt   VARCHAR2(32767);
64 
65   l_real_time_sql_clob	    CLOB;
66   l_real_time_insert_clob	CLOB;
67   l_batch_total_sql_clob	CLOB;
68   l_batch_incr_sql_clob	    CLOB;
69   l_batch_dea_sql_clob	    CLOB;
70   l_incr_reassign_sql_clob	CLOB;
71 
72   l_status         VARCHAR2(30);
73   l_industry       VARCHAR2(30);
74   l_jtf_schema     VARCHAR2(30);
75 
76   CURSOR c_column_names(p_table_name IN VARCHAR2) is
77   SELECT column_name
78   FROM  user_tab_columns
79   WHERE table_name = p_table_name
80   ORDER BY column_id;
81 
82   CURSOR CUR_REAL_TIME(cl_trans_usg_pgm_sql_id IN NUMBER) IS
83   SELECT REAL_TIME_SQL
84   FROM   JTY_TRANS_USG_PGM_SQL
85   WHERE  TRANS_USG_PGM_SQL_ID = cl_trans_usg_pgm_sql_id
86   FOR UPDATE OF REAL_TIME_SQL NOWAIT;
87 
88   CURSOR CUR_REAL_TIME_INSERT(cl_trans_usg_pgm_sql_id IN NUMBER) IS
89   SELECT REAL_TIME_INSERT
90   FROM   JTY_TRANS_USG_PGM_SQL
91   WHERE  TRANS_USG_PGM_SQL_ID = cl_trans_usg_pgm_sql_id
92   FOR UPDATE OF REAL_TIME_INSERT NOWAIT;
93 
94   CURSOR CUR_BATCH_TOTAL(cl_trans_usg_pgm_sql_id IN NUMBER) IS
95   SELECT BATCH_TOTAL_SQL
96   FROM   JTY_TRANS_USG_PGM_SQL
97   WHERE  TRANS_USG_PGM_SQL_ID = cl_trans_usg_pgm_sql_id
98   FOR UPDATE OF BATCH_TOTAL_SQL NOWAIT;
99 
100   CURSOR CUR_BATCH_INCR(cl_trans_usg_pgm_sql_id IN NUMBER) IS
101   SELECT BATCH_INCR_SQL
102   FROM   JTY_TRANS_USG_PGM_SQL
103   WHERE  TRANS_USG_PGM_SQL_ID = cl_trans_usg_pgm_sql_id
104   FOR UPDATE OF BATCH_INCR_SQL NOWAIT;
105 
106   CURSOR CUR_BATCH_DEA(cl_trans_usg_pgm_sql_id IN NUMBER) IS
107   SELECT BATCH_DEA_SQL
108   FROM   JTY_TRANS_USG_PGM_SQL
109   WHERE  TRANS_USG_PGM_SQL_ID = cl_trans_usg_pgm_sql_id
110   FOR UPDATE OF BATCH_DEA_SQL NOWAIT;
111 
112   CURSOR CUR_INCR_REASSIGN(cl_trans_usg_pgm_sql_id IN NUMBER) IS
113   SELECT INCR_REASSIGN_SQL
114   FROM   JTY_TRANS_USG_PGM_SQL
115   WHERE  TRANS_USG_PGM_SQL_ID = cl_trans_usg_pgm_sql_id
116   FOR UPDATE OF INCR_REASSIGN_SQL NOWAIT;
117 
118 BEGIN
119 
120   retcode := 0;
121   errbuf  := null;
122 
123   /* Version cannot be null or ORACLE (reserved for seeded SQLs) */
124   IF ((p_version_name IS NULL) OR (p_version_name = 'ORACLE')) THEN
125     retcode := 2;
126     errbuf  := 'Version Name cannot be null or oracle';
127     RAISE FND_API.G_EXC_ERROR;
128   END IF;
129 
130   l_enabled_flag := NVL(p_enabled_flag, 'Y');
131   l_use_total_for_dea_flag := NVL(p_use_total_for_dea_flag, 'N');
132 
133   l_user_id  := FND_GLOBAL.USER_ID;
134   l_login_id := FND_GLOBAL.CONC_LOGIN_ID;
135   l_sysdate  := sysdate;
136 
137   BEGIN
138     SELECT
139        param_passing_mechanism
140       ,real_time_enable_flag
141       ,batch_enable_flag
142       ,real_time_trans_table_name
143       ,batch_trans_table_name
144       ,batch_nm_trans_table_name
145       ,batch_dea_trans_table_name
146     INTO
147        l_param_passing_mechanism
148       ,l_real_time_enable_flag
149       ,l_batch_enable_flag
150       ,l_real_time_trans_table_name
151       ,l_batch_trans_table_name
152       ,l_batch_nm_trans_table_name
153       ,l_batch_dea_trans_table_name
154     FROM jty_trans_usg_pgm_details
155     WHERE source_id = p_source_id
156     AND   trans_type_id = p_trans_type_id
157     AND   program_name = p_program_name;
158   EXCEPTION
159     WHEN NO_DATA_FOUND THEN
160       retcode := 2;
161       errbuf  := 'No row in the table jty_trans_usg_pgm_details corr to the source, transaction type and program name passed';
162       RAISE FND_API.G_EXC_ERROR;
163     WHEN OTHERS THEN
164       RAISE;
165   END;
166 
167   /* Custom Qualifier supported for pass by reference only */
168   IF (l_param_passing_mechanism = 'PBV') THEN
169     retcode := 2;
170     errbuf  := 'Custom Qualifier is not supported for transactions having pass by value parameter passing mechanism';
171     RAISE FND_API.G_EXC_ERROR;
172   END IF;
173 
174   /* If this version needs to be enabled, then all other versions need to be disabled */
175   IF (l_enabled_flag = 'Y') THEN
176     UPDATE jty_trans_usg_pgm_sql
177     SET    enabled_flag = 'N'
178     WHERE  SOURCE_ID     = p_source_id
179     AND    TRANS_TYPE_ID = p_trans_type_id
180     AND    PROGRAM_NAME  = p_program_name;
181   END IF;
182 
183   /* If present, delete the old entries from jty_trnas_usg_pgm_sql */
184   BEGIN
185     DELETE FROM JTY_TRANS_USG_PGM_SQL
186     WHERE SOURCE_ID     = p_source_id
187     AND   TRANS_TYPE_ID = p_trans_type_id
188     AND   PROGRAM_NAME  = p_program_name
189     AND   VERSION_NAME  = p_version_name;
190   EXCEPTION
191     WHEN OTHERS THEN
192       NULL;
193   END;
194 
195   /* Get the unique id from sequence */
196   SELECT JTY_TRANS_USG_PGM_SQL_S.nextval
197   INTO   l_trans_usg_pgm_sql_id
198   FROM   DUAL;
199 
200   /* Insert a record with all the SQLs as NULL */
201   INSERT INTO JTY_TRANS_USG_PGM_SQL (
202      TRANS_USG_PGM_SQL_ID
203     ,SOURCE_ID
204     ,TRANS_TYPE_ID
205     ,PROGRAM_NAME
206     ,VERSION_NAME
207     ,USE_TOTAL_FOR_DEA_FLAG
208     ,ENABLED_FLAG
209     ,REAL_TIME_SQL
210     ,REAL_TIME_INSERT
211     ,BATCH_TOTAL_SQL
212     ,BATCH_INCR_SQL
213     ,BATCH_DEA_SQL
214     ,INCR_REASSIGN_SQL
215     ,CREATED_BY
216     ,CREATION_DATE
217     ,LAST_UPDATED_BY
218     ,LAST_UPDATE_DATE
219     ,LAST_UPDATE_LOGIN
220     ,OBJECT_VERSION_NUMBER)
221   VALUES(
222      l_trans_usg_pgm_sql_id
223     ,p_source_id
224     ,p_trans_type_id
225     ,p_program_name
226     ,p_version_name
227     ,l_use_total_for_dea_flag
228     ,l_enabled_flag
229     ,EMPTY_CLOB()
230     ,EMPTY_CLOB()
231     ,EMPTY_CLOB()
232     ,EMPTY_CLOB()
233     ,EMPTY_CLOB()
234     ,EMPTY_CLOB()
235     ,l_user_id
236     ,l_sysdate
237     ,l_user_id
238     ,l_sysdate
239     ,l_login_id
240     ,1);
241 
242   /* Create the real time trans table and real time transaction type SQL */
243   IF ((l_real_time_enable_flag = 'Y') AND (p_real_time_sql IS NOT NULL) AND (l_real_time_trans_table_name IS NOT NULL)) THEN
244     l_real_time_select := p_real_time_sql;
245     l_real_time_select := replace(l_real_time_select, 'l_txn_date', 'sysdate');
246     l_real_time_select := replace(l_real_time_select, 'l_trans_object_id1', '-999');
247     l_real_time_select := replace(l_real_time_select, 'l_trans_object_id2', '-999');
248     l_real_time_select := replace(l_real_time_select, 'l_trans_object_id3', '-999');
249     l_real_time_select := replace(l_real_time_select, 'l_trans_object_id4', '-999');
250     l_real_time_select := replace(l_real_time_select, 'l_trans_object_id5', '-999');
251 
252     BEGIN
253       l_drop_gt_stmt := 'DROP TABLE ' || l_real_time_trans_table_name;
254 
255       EXECUTE IMMEDIATE l_drop_gt_stmt;
256     EXCEPTION
257       WHEN OTHERS THEN
258         NULL;
259     END;
260 
261     l_create_gt_stmt :=
262       'CREATE GLOBAL TEMPORARY TABLE ' || l_real_time_trans_table_name || ' ON COMMIT PRESERVE ROWS AS ' ||
263       l_real_time_select;
264 
265     BEGIN
266       EXECUTE IMMEDIATE l_create_gt_stmt;
267     EXCEPTION
268       when others then
269         retcode := 2;
270         errbuf  := 'Error while trying to create ' || l_real_time_trans_table_name || ' : SQLCODE : ' || SQLCODE ||
271                    ' : SQLERRM : ' || SQLERRM;
272         RAISE;
273     END;
274 
275     first_time := TRUE;
276     l_indent   := '  ';
277 
278     l_real_time_insert := 'INSERT INTO ' || l_real_time_trans_table_name || ' ( ';
279 
280     FOR column_names in c_column_names(l_real_time_trans_table_name) LOOP
281       IF (first_time) THEN
282         l_real_time_insert := l_real_time_insert || l_new_line || l_indent || column_names.column_name;
283         first_time := FALSE;
284       ELSE
285         l_real_time_insert := l_real_time_insert || l_new_line || l_indent || ',' || column_names.column_name;
286       END IF;
287     END LOOP;
288     l_real_time_insert := l_real_time_insert || ')' || l_new_line || p_real_time_sql || ';';
289 
290     BEGIN
291       OPEN CUR_REAL_TIME_INSERT(l_trans_usg_pgm_sql_id);
292       LOOP
293         FETCH CUR_REAL_TIME_INSERT INTO l_real_time_insert_clob;
294         EXIT WHEN CUR_REAL_TIME_INSERT%NOTFOUND;
295         DBMS_LOB.OPEN(l_real_time_insert_clob, DBMS_LOB.LOB_READWRITE);
296         DBMS_LOB.WRITEAPPEND(l_real_time_insert_clob,LENGTH(l_real_time_insert),l_real_time_insert);
297         DBMS_LOB.CLOSE(l_real_time_insert_clob);
298       END LOOP;
299       CLOSE CUR_REAL_TIME_INSERT;
300 
301       OPEN CUR_REAL_TIME(l_trans_usg_pgm_sql_id);
302       LOOP
303         FETCH CUR_REAL_TIME INTO l_real_time_sql_clob;
304         EXIT WHEN CUR_REAL_TIME%NOTFOUND;
305         DBMS_LOB.OPEN(l_real_time_sql_clob, DBMS_LOB.LOB_READWRITE);
306         DBMS_LOB.WRITEAPPEND(l_real_time_sql_clob,LENGTH(p_real_time_sql),p_real_time_sql);
307         DBMS_LOB.CLOSE(l_real_time_sql_clob);
308       END LOOP;
309       CLOSE CUR_REAL_TIME;
310     EXCEPTION
311       when others then
312         retcode := 2;
313         errbuf  := 'Error while trying to update real_time_sql or real_time_insert' || ' : SQLCODE : ' || SQLCODE ||
314                    ' : SQLERRM : ' || SQLERRM;
315         RAISE;
316     END;
317   END IF;
318 
319   IF (FND_INSTALLATION.GET_APP_INFO('JTF', l_status, l_industry, l_jtf_schema)) THEN
320     NULL;
321   END IF;
322 
323   /* Create the batch trans table and batch transaction type SQL */
324   IF ((l_batch_enable_flag = 'Y') AND (l_batch_trans_table_name IS NOT NULL) AND (p_batch_total_sql IS NOT NULL)) THEN
325     l_drop_tbl_stmt := 'DROP TABLE ' || l_jtf_schema || '.' || l_batch_trans_table_name;
326     BEGIN
327       execute immediate l_drop_tbl_stmt;
328     EXCEPTION
329       when others then
330         null;
331     END;
332 
333     l_create_tbl_stmt := 'CREATE TABLE ' || l_jtf_schema || '.' || l_batch_trans_table_name ||
334                            ' PARTITION BY RANGE (worker_id) ' ||
335                              '(PARTITION WORKER1 VALUES LESS THAN (1), ' ||
336                               'PARTITION WORKER2 VALUES LESS THAN (2), ' ||
337                               'PARTITION WORKER3 VALUES LESS THAN (3), ' ||
338                               'PARTITION WORKER4 VALUES LESS THAN (4), ' ||
339                               'PARTITION WORKER5 VALUES LESS THAN (5), ' ||
340                               'PARTITION WORKER6 VALUES LESS THAN (6), ' ||
341                               'PARTITION WORKER7 VALUES LESS THAN (7), ' ||
342                               'PARTITION WORKER8 VALUES LESS THAN (8), ' ||
343                               'PARTITION WORKER9 VALUES LESS THAN (9), ' ||
344                               'PARTITION WORKER10 VALUES LESS THAN (10), ' ||
345                               'PARTITION WORKER11 VALUES LESS THAN (11) ' ||
346                              ') ' ||
347                          ' AS (SELECT A.*, 1 WORKER_ID FROM ( ' || p_batch_total_sql || ' ) A WHERE 1 = 2 )';
348 
349     BEGIN
350       EXECUTE IMMEDIATE l_create_tbl_stmt;
351     EXCEPTION
352       when others then
353         retcode := 2;
354         errbuf  := 'Error while trying to create ' || l_batch_trans_table_name || ' : SQLCODE : ' || SQLCODE ||
355                    ' : SQLERRM : ' || SQLERRM;
356         RAISE;
357     END;
358 
359     l_alter_tbl_stmt := 'ALTER TABLE ' || l_jtf_schema || '.' || l_batch_trans_table_name || ' ADD ( ' ||
360                         'LAST_UPDATE_DATE DATE, ' ||
361                         'LAST_UPDATED_BY NUMBER, ' ||
362                         'CREATION_DATE DATE, ' ||
363                         'CREATED_BY NUMBER, ' ||
364                         'LAST_UPDATE_LOGIN NUMBER, ' ||
365                         'REQUEST_ID NUMBER, ' ||
366                         'PROGRAM_APPLICATION_ID NUMBER, ' ||
367                         'PROGRAM_ID NUMBER, ' ||
368                         'PROGRAM_UPDATE_DATE DATE, ' ||
369                         'TXN_DATE DATE, ' ||
370                         'SECURITY_GROUP_ID NUMBER, ' ||
371                         'OBJECT_VERSION_NUMBER NUMBER) ';
372     BEGIN
373       EXECUTE IMMEDIATE l_alter_tbl_stmt;
374     EXCEPTION
375       when others then
376         retcode := 2;
377         errbuf  := 'Error while trying to alter ' || l_batch_trans_table_name || ' : SQLCODE : ' || SQLCODE ||
378                    ' : SQLERRM : ' || SQLERRM;
379       RAISE;
380     END;
381 
382     BEGIN
383       OPEN CUR_BATCH_TOTAL(l_trans_usg_pgm_sql_id);
384       LOOP
385         FETCH CUR_BATCH_TOTAL INTO l_batch_total_sql_clob;
386         EXIT WHEN CUR_BATCH_TOTAL%NOTFOUND;
387         DBMS_LOB.OPEN(l_batch_total_sql_clob, DBMS_LOB.LOB_READWRITE);
388         DBMS_LOB.WRITEAPPEND(l_batch_total_sql_clob,LENGTH(p_batch_total_sql),p_batch_total_sql);
389         DBMS_LOB.CLOSE(l_batch_total_sql_clob);
390       END LOOP;
391       CLOSE CUR_BATCH_TOTAL;
392     EXCEPTION
393       when others then
394         retcode := 2;
395         errbuf  := 'Error while trying to update batch_total_sql' || ' : SQLCODE : ' || SQLCODE ||
396                    ' : SQLERRM : ' || SQLERRM;
397         RAISE;
398     END;
399   END IF; /* end IF ((l_batch_enable_flag = 'Y') AND ... */
400 
401   /* Create the batch new mode trans table and batch new mode transaction type SQL */
402   IF ((l_batch_enable_flag = 'Y') AND (l_batch_nm_trans_table_name IS NOT NULL) AND (p_batch_incr_sql IS NOT NULL)) THEN
403     l_drop_tbl_stmt := 'DROP TABLE ' || l_jtf_schema || '.' || l_batch_nm_trans_table_name;
404     BEGIN
405       execute immediate l_drop_tbl_stmt;
406     EXCEPTION
407       when others then
408         null;
409     END;
410 
411 
412     l_create_tbl_stmt := 'CREATE TABLE ' || l_jtf_schema || '.' || l_batch_nm_trans_table_name || ' AS (SELECT * FROM ( ' ||
413                     p_batch_total_sql || ' ) WHERE 1 = 2 ) ';
414     BEGIN
415       EXECUTE IMMEDIATE l_create_tbl_stmt;
416     EXCEPTION
417       when others then
418         retcode := 2;
419         errbuf  := 'Error while trying to create ' || l_batch_nm_trans_table_name || ' : SQLCODE : ' || SQLCODE ||
420                    ' : SQLERRM : ' || SQLERRM;
421         RAISE;
422     END;
423 
424 
425     l_alter_tbl_stmt := 'ALTER TABLE ' || l_jtf_schema || '.' || l_batch_nm_trans_table_name || ' ADD ( ' ||
429                         'CREATED_BY NUMBER, ' ||
426                         'LAST_UPDATE_DATE DATE, ' ||
427                         'LAST_UPDATED_BY NUMBER, ' ||
428                         'CREATION_DATE DATE, ' ||
430                         'LAST_UPDATE_LOGIN NUMBER, ' ||
431                         'REQUEST_ID NUMBER, ' ||
432                         'PROGRAM_APPLICATION_ID NUMBER, ' ||
433                         'PROGRAM_ID NUMBER, ' ||
434                         'PROGRAM_UPDATE_DATE DATE, ' ||
435                         'TXN_DATE DATE, ' ||
436                         'SECURITY_GROUP_ID NUMBER, ' ||
437                         'OBJECT_VERSION_NUMBER NUMBER, ' ||
438                         'WORKER_ID NUMBER) ';
439     BEGIN
440       EXECUTE IMMEDIATE l_alter_tbl_stmt;
441     EXCEPTION
442       when others then
443         retcode := 2;
444         errbuf  := 'Error while trying to alter ' || l_batch_nm_trans_table_name || ' : SQLCODE : ' || SQLCODE ||
445                    ' : SQLERRM : ' || SQLERRM;
446         RAISE;
447     END;
448 
449     BEGIN
450       OPEN CUR_BATCH_INCR(l_trans_usg_pgm_sql_id);
451       LOOP
452         FETCH CUR_BATCH_INCR INTO l_batch_incr_sql_clob;
453         EXIT WHEN CUR_BATCH_INCR%NOTFOUND;
454         DBMS_LOB.OPEN(l_batch_incr_sql_clob, DBMS_LOB.LOB_READWRITE);
455         DBMS_LOB.WRITEAPPEND(l_batch_incr_sql_clob,LENGTH(p_batch_incr_sql),p_batch_incr_sql);
456         DBMS_LOB.CLOSE(l_batch_incr_sql_clob);
457       END LOOP;
458       CLOSE CUR_BATCH_INCR;
459     EXCEPTION
460       when others then
461         retcode := 2;
462         errbuf  := 'Error while trying to update batch_incr_sql' || ' : SQLCODE : ' || SQLCODE ||
463                    ' : SQLERRM : ' || SQLERRM;
464         RAISE;
465     END;
466   END IF; /* end IF ((l_batch_enable_flag = 'Y') AND ... */
467 
468   /* Create the batch dea trans table and batch dea transaction type SQL */
469   IF ((l_batch_enable_flag = 'Y') AND (l_batch_dea_trans_table_name IS NOT NULL) AND (p_batch_dea_sql IS NOT NULL)) THEN
470     l_drop_tbl_stmt := 'DROP TABLE ' || l_jtf_schema || '.' || l_batch_dea_trans_table_name;
471     BEGIN
472       execute immediate l_drop_tbl_stmt;
473     EXCEPTION
474       when others then
475         null;
476     END;
477 
478 
479     l_create_tbl_stmt := 'CREATE TABLE ' || l_jtf_schema || '.' || l_batch_dea_trans_table_name ||
480                            ' PARTITION BY RANGE (worker_id) ' ||
481                              '(PARTITION WORKER1 VALUES LESS THAN (1), ' ||
482                               'PARTITION WORKER2 VALUES LESS THAN (2), ' ||
483                               'PARTITION WORKER3 VALUES LESS THAN (3), ' ||
484                               'PARTITION WORKER4 VALUES LESS THAN (4), ' ||
485                               'PARTITION WORKER5 VALUES LESS THAN (5), ' ||
486                               'PARTITION WORKER6 VALUES LESS THAN (6), ' ||
487                               'PARTITION WORKER7 VALUES LESS THAN (7), ' ||
488                               'PARTITION WORKER8 VALUES LESS THAN (8), ' ||
489                               'PARTITION WORKER9 VALUES LESS THAN (9), ' ||
490                               'PARTITION WORKER10 VALUES LESS THAN (10), ' ||
491                               'PARTITION WORKER11 VALUES LESS THAN (11) ' ||
492                              ') ' ||
493                          ' AS (SELECT A.*, 1 WORKER_ID FROM ( ' || p_batch_dea_sql || ' ) A WHERE 1 = 2 )';
494     BEGIN
495       EXECUTE IMMEDIATE l_create_tbl_stmt;
496     EXCEPTION
497       when others then
498         retcode := 2;
499         errbuf  := 'Error while trying to create ' || l_batch_dea_trans_table_name || ' : SQLCODE : ' || SQLCODE ||
500                    ' : SQLERRM : ' || SQLERRM;
501         RAISE;
502     END;
503 
504     l_alter_tbl_stmt := 'ALTER TABLE ' || l_jtf_schema || '.' || l_batch_dea_trans_table_name || ' ADD ( ' ||
505                         'LAST_UPDATE_DATE DATE, ' ||
506                         'LAST_UPDATED_BY NUMBER, ' ||
507                         'CREATION_DATE DATE, ' ||
508                         'CREATED_BY NUMBER, ' ||
509                         'LAST_UPDATE_LOGIN NUMBER, ' ||
510                         'REQUEST_ID NUMBER, ' ||
511                         'PROGRAM_APPLICATION_ID NUMBER, ' ||
512                         'PROGRAM_ID NUMBER, ' ||
513                         'PROGRAM_UPDATE_DATE DATE, ' ||
514                         'SECURITY_GROUP_ID NUMBER, ' ||
515                         'OBJECT_VERSION_NUMBER NUMBER) ';
516     BEGIN
517       EXECUTE IMMEDIATE l_alter_tbl_stmt;
518     EXCEPTION
519       when others then
520         retcode := 2;
521         errbuf  := 'Error while trying to alter ' || l_batch_dea_trans_table_name || ' : SQLCODE : ' || SQLCODE ||
522                    ' : SQLERRM : ' || SQLERRM;
523         RAISE;
524     END;
525 
526     BEGIN
527       OPEN CUR_BATCH_DEA(l_trans_usg_pgm_sql_id);
528       LOOP
529         FETCH CUR_BATCH_DEA INTO l_batch_dea_sql_clob;
530         EXIT WHEN CUR_BATCH_DEA%NOTFOUND;
531         DBMS_LOB.OPEN(l_batch_dea_sql_clob, DBMS_LOB.LOB_READWRITE);
532         DBMS_LOB.WRITEAPPEND(l_batch_dea_sql_clob,LENGTH(p_batch_dea_sql),p_batch_dea_sql);
533         DBMS_LOB.CLOSE(l_batch_dea_sql_clob);
534       END LOOP;
535       CLOSE CUR_BATCH_DEA;
536     EXCEPTION
537       when others then
538         retcode := 2;
539         errbuf  := 'Error while trying to update batch_dea_sql' || ' : SQLCODE : ' || SQLCODE ||
540                    ' : SQLERRM : ' || SQLERRM;
541         RAISE;
542     END;
543   END IF; /* end IF ((l_batch_enable_flag = 'Y') AND ... */
544 
545   IF ((l_batch_enable_flag = 'Y') AND (p_incr_reassign_sql IS NOT NULL)) THEN
546     BEGIN
547       OPEN CUR_INCR_REASSIGN(l_trans_usg_pgm_sql_id);
548       LOOP
549         FETCH CUR_INCR_REASSIGN INTO l_incr_reassign_sql_clob;
550         EXIT WHEN CUR_INCR_REASSIGN%NOTFOUND;
551         DBMS_LOB.OPEN(l_incr_reassign_sql_clob, DBMS_LOB.LOB_READWRITE);
552         DBMS_LOB.WRITEAPPEND(l_incr_reassign_sql_clob,LENGTH(p_incr_reassign_sql),p_incr_reassign_sql);
553         DBMS_LOB.CLOSE(l_incr_reassign_sql_clob);
554       END LOOP;
555       CLOSE CUR_INCR_REASSIGN;
556     EXCEPTION
557       when others then
558         retcode := 2;
559         errbuf  := 'Error while trying to update incr_reassign_sql' || ' : SQLCODE : ' || SQLCODE ||
560                    ' : SQLERRM : ' || SQLERRM;
561         RAISE;
562     END;
563   END IF; /* end IF ((l_batch_enable_flag = 'Y') AND ... */
564 
565   retcode := 0;
566   errbuf  := null;
567 
568 EXCEPTION
569   WHEN FND_API.G_EXC_ERROR THEN
570     NULL;
571 
572   WHEN OTHERS THEN
573     if (retcode = 0) then
574       retcode := 2;
575     end if;
579 End Insert_Row;
576     if (errbuf is null) then
577       errbuf := 'SQLCODE : ' || SQLCODE || ' : SQLERRM : ' || SQLERRM;
578     end if;
580 
581 END JTY_TRANS_USG_PGM_SQL_PKG;