DBA Data[Home] [Help]

PACKAGE BODY: APPS.XLA_CMP_EXTRACT_PKG

Source


1 PACKAGE BODY xla_cmp_extract_pkg AS
2 /* $Header: xlacpext.pkb 120.60.12000000.2 2007/10/12 06:09:08 samejain ship $   */
3 /*===========================================================================+
4 |             Copyright (c) 2001-2002 Oracle Corporation                     |
5 |                       Redwood Shores, CA, USA                              |
6 |                         All rights reserved.                               |
7 +============================================================================+
8 | PACKAGE NAME                                                               |
9 |     xla_cmp_extract_pkg                                                    |
10 |                                                                            |
11 | DESCRIPTION                                                                |
12 |     This is a XLA private package, which contains all the logic required   |
13 |     to generate header and line cursors from AMB specifcations             |
14 |                                                                            |
15 |                                                                            |
16 | HISTORY                                                                    |
17 |     25-JUN-2002 K.Boussema    Created                                      |
18 |     10-MAR-2003 K.Boussema    Made changes for the new bulk approach of the|
19 |                               accounting engine                            |
20 |     19-MAR-2003 K.Boussema    Added amb_context_code                       |
21 |     14-APR-2003 K.Bouusema    Added the error messages                     |
22 |     05-MAI-2003 K.Boussema    Modified to retrieve data base on ledger_id  |
23 |     13-MAI-2003 K.Boussema    Modified the Extract according to bug 2857548|
24 |     24-JUN-2003 K.Boussema    Reviewed the erro messages, bug 3022261      |
25 |     17-JUL-2003 K.Boussema    Reviewed the code                            |
26 |     26-AUG-2003 K.Boussema    Reviewed the generation of the extract to    |
27 |                               handle the use of line_number as source      |
28 |     22-SEP-2003 K.Boussema    Added validation of primary keys columns     |
29 |     29-SEP-2003 K.Boussema    Added Error message XLA_CMP_PK_MISSING       |
30 |     09-OCT-2003 K.Boussema    Changed to accept AADs differents Extract    |
31 |                               specifcations                                |
32 |     12-DEC-2003 K.Boussema    Reviewed for bug bug 3042840                 |
33 |     18-DEC-2003 K.Boussema    Changed to fix bug 3042840,3307761,3268940   |
34 |                               3310291 and 3320689                          |
35 |     22-DEC-2003 K.Boussema    Replaced Extract Validations by a call to    |
36 |                               Extract Integrity Checker routine            |
37 |     30-DEC-2003 K.Boussema    Reviewed  GetExtractObjects procedure        |
38 |     05-JAN-2004 K.Boussema    Changed GenerateLineCursor,                  |
39 |                               GenerateExtractColumns and                   |
40 |                               GenerateHeaderCursor procedures              |
41 |     02-FEB-2004 K.Boussema    Reviewed FlushGtTable procedure              |
42 |     11-FEB-2004 K.Boussema    Revised GenerateHeaderCursor procedure       |
43 |     23-FEB-2004 K.Boussema    Made changes for the FND_LOG.                |
44 |     12-MAR-2004 K.Boussema    Changed to incorporate the select of lookups |
45 |                               from the extract objects                     |
46 |     22-MAR-2004 K.Boussema    Added a parameter p_module to the TRACE calls|
47 |                               and the procedure.                           |
48 |     11-MAY-2004 K.Boussema    Removed the call to XLA trace routine from   |
49 |                               trace() procedure                            |
50 |     20-Sep-2004 S.Singhania   Made chnages for the bulk performance:       |
51 |                                 - Added routines GenerateHdrStructure and  |
52 |                                   GenerateCacheHdrSources                  |
53 |                                 - Modified routines GenerateHdrVariables,  |
54 |                                   GenerateLineStructure,GenerateLineCursor,|
55 |                                   GenerateHeaderCursor, GenerateFetchLineCu|
56 |                                   rsor, GenerateFetchHeaderCursor          |
57 |                                 - Replace the constant C_HDR_CUR with C_HDR|
58 |                                   _CUR_EVENT_TYPE and C_HDR_CUR_EVENT_CLASS|
59 |                                 - Replace the constant C_LINE_CUR with C_LI|
60 |                                   NE_CUR_EVENT_TYPE, C_LINE_CUR_EVENT_CLASS|
61 |     06-Oct-2004 K.Boussema    Made changes for the Accounting Event Extract|
62 |                               Diagnostics feature.                         |
63 |     08-DEC-2004 K.Boussema    Updated to change  xla_extract_sources table |
64 |                               by xla_diag_sources                          |
65 |     03-Mar-2005 W.shen        remove the hint in line cursor               |
66 |     06-Mar-2005 W.shen        Ledger Currency Project.                     |
67 |                                 Remove the ledger currency level extract   |
68 |                                 object. Add ledger_id to ledger line level |
69 |                                 object. join to ledger_id depends on alc   |
70 |                                 setting .                                  |
71 |     08-Jun-2005 K.Boussema   Reviewed C_INSERT_LINE_SOURCES_CLASS constant |
72 |                                 to fix bug 4200257                         |
73 |     21-JUL-2005 K.Boussema   Reviewed to handle the two cases:             |
74 |                                - no header Transaction objects and         |
75 |                                - no line Transaction objects               |
76 |     01-Aug-2005 W. Chan     4458381 - Public Sector Enhancement            |
77 |     11-Sep-2006 V. Swapna    Bug 5478323: Correct an ORA-01400             |
78 |                              error on the table xla_diag_sources.          |
79 +===========================================================================*/
80 --
81 --
82 --+==========================================================================+
83 --|                                                                          |
84 --| GLOBAL CONSTANTS                                                         |
85 --|                                                                          |
86 --|                                                                          |
87 --+==========================================================================+
88 --
89 --+==========================================================================+
90 --|                                                                          |
91 --| Header CURSOR Template                                                   |
92 --|                                                                          |
93 --+==========================================================================+
94 --
95 --
96 C_HDR_CUR_EVENT_TYPE         CONSTANT   VARCHAR2(10000):='
97 --
98 CURSOR header_cur
99 IS
100 SELECT /*+ leading(xet) cardinality(xet,1) */
101 -- Event Type Code: $event_type_code$
102 -- Event Class Code: $event_class_code$
103     xet.entity_id
104   , xet.legal_entity_id
105   , xet.entity_code
106   , xet.transaction_number
107   , xet.event_id
108   , xet.event_class_code
109   , xet.event_type_code
110   , xet.event_number
111   , xet.event_date
112   , xet.transaction_date
113   , xet.reference_num_1
114   , xet.reference_num_2
115   , xet.reference_num_3
116   , xet.reference_num_4
117   , xet.reference_char_1
118   , xet.reference_char_2
119   , xet.reference_char_3
120   , xet.reference_char_4
121   , xet.reference_date_1
122   , xet.reference_date_2
123   , xet.reference_date_3
124   , xet.reference_date_4
125   , xet.event_created_by
126   , xet.budgetary_control_flag $hdr_sources$
127   FROM xla_events_gt     xet $hdr_tabs$
128  WHERE xet.event_date between p_pad_start_date and p_pad_end_date
129    and xet.event_type_code = C_EVENT_TYPE_CODE
130    and xet.event_status_code <> ''N'' $hdr_clauses$
131  ORDER BY event_id
132 ;
133 ';
134 
135 C_HDR_CUR_EVENT_CLASS         CONSTANT   VARCHAR2(10000):='
136 --
137 CURSOR header_cur
138 IS
139 SELECT /*+ leading(xet) cardinality(xet,1) */
140 -- Event Class Code: $event_class_code$
141     xet.entity_id
142    ,xet.legal_entity_id
143    ,xet.entity_code
144    ,xet.transaction_number
145    ,xet.event_id
146    ,xet.event_class_code
147    ,xet.event_type_code
148    ,xet.event_number
149    ,xet.event_date
150    ,xet.transaction_date
151    ,xet.reference_num_1
152    ,xet.reference_num_2
153    ,xet.reference_num_3
154    ,xet.reference_num_4
155    ,xet.reference_char_1
156    ,xet.reference_char_2
157    ,xet.reference_char_3
158    ,xet.reference_char_4
159    ,xet.reference_date_1
160    ,xet.reference_date_2
161    ,xet.reference_date_3
162    ,xet.reference_date_4
163    ,xet.event_created_by
164    ,xet.budgetary_control_flag $hdr_sources$
165   FROM xla_events_gt     xet $hdr_tabs$
166  WHERE xet.event_date between p_pad_start_date and p_pad_end_date
167    and xet.event_class_code = C_EVENT_CLASS_CODE
168    and xet.event_status_code <> ''N'' $hdr_clauses$
169  ORDER BY event_id
170 ;
171 ';
172 --
173 --
174 --+==========================================================================+
175 --|                                                                          |
176 --| Line CURSOR Template                                                     |
177 --|                                                                          |
178 --+==========================================================================+
179 --
180 --
181 C_LINE_CUR_EVENT_TYPE        CONSTANT   VARCHAR2(10000):='
182 --
183 CURSOR line_cur (x_first_event_id    in number, x_last_event_id    in number)
184 IS
185 SELECT /*+ leading(xet) cardinality(xet,1) */
186 -- Event Type Code: $event_type_code$
187 -- Event Class Code: $event_class_code$
188     xet.entity_id
189    ,xet.legal_entity_id
190    ,xet.entity_code
191    ,xet.transaction_number
192    ,xet.event_id
193    ,xet.event_class_code
194    ,xet.event_type_code
195    ,xet.event_number
196    ,xet.event_date
197    ,xet.transaction_date
198    ,xet.reference_num_1
199    ,xet.reference_num_2
200    ,xet.reference_num_3
201    ,xet.reference_num_4
202    ,xet.reference_char_1
203    ,xet.reference_char_2
204    ,xet.reference_char_3
205    ,xet.reference_char_4
206    ,xet.reference_date_1
207    ,xet.reference_date_2
208    ,xet.reference_date_3
209    ,xet.reference_date_4
210    ,xet.event_created_by
211    ,xet.budgetary_control_flag $line_sources$
212   FROM xla_events_gt     xet $line_tabs$
213  WHERE xet.event_id between x_first_event_id and x_last_event_id
214    and xet.event_date between p_pad_start_date and p_pad_end_date
215    and xet.event_type_code = C_EVENT_TYPE_CODE
216    and xet.event_status_code <> ''N'' $line_clauses$;
217 ';
218 
219 C_LINE_CUR_EVENT_CLASS        CONSTANT   VARCHAR2(10000):='
220 --
221 CURSOR line_cur (x_first_event_id    in number, x_last_event_id    in number)
222 IS
223 SELECT  /*+ leading(xet) cardinality(xet,1) */
224 -- Event Class Code: $event_class_code$
225     xet.entity_id
226    ,xet.legal_entity_id
227    ,xet.entity_code
228    ,xet.transaction_number
229    ,xet.event_id
230    ,xet.event_class_code
231    ,xet.event_type_code
232    ,xet.event_number
233    ,xet.event_date
234    ,xet.transaction_date
235    ,xet.reference_num_1
236    ,xet.reference_num_2
237    ,xet.reference_num_3
238    ,xet.reference_num_4
239    ,xet.reference_char_1
240    ,xet.reference_char_2
241    ,xet.reference_char_3
242    ,xet.reference_char_4
243    ,xet.reference_date_1
244    ,xet.reference_date_2
245    ,xet.reference_date_3
246    ,xet.reference_date_4
247    ,xet.event_created_by
248    ,xet.budgetary_control_flag
249 $line_sources$
250   FROM xla_events_gt     xet $line_tabs$
251  WHERE xet.event_id between x_first_event_id and x_last_event_id
252    and xet.event_date between p_pad_start_date and p_pad_end_date
253    and xet.event_class_code = C_EVENT_CLASS_CODE
254    and xet.event_status_code <> ''N'' $line_clauses$;
255 ';
256 
257 --
258 -----------------------------------------------------------------------------
259 --
260 --             Accounting Event Extract Diagnostics Constants/Templates
261 --
262 ------------------------------------------------------------------------------
263 --
264 --+==========================================================================+
265 --|                                                                          |
266 --| Insert header sources Template                                           |
267 --|                                                                          |
268 --+==========================================================================+
269 --
270 --
271 C_INSERT_HDR_SOURCES_EVT         CONSTANT   VARCHAR2(10000):='
272 --
273 INSERT INTO xla_diag_sources --hdr1
274 (
275         event_id
276       , ledger_id
277       , sla_ledger_id
278       , description_language
279       , object_name
280       , object_type_code
281       , line_number
282       , source_application_id
283       , source_type_code
284       , source_code
285       , source_value
286       , source_meaning
287       , created_by
288       , creation_date
289       , last_update_date
290       , last_updated_by
291       , last_update_login
292       , program_update_date
293       , program_application_id
294       , program_id
295       , request_id
296 )
297 SELECT
301       , p_language
298         event_id
299       , p_target_ledger_id
300       , p_sla_ledger_id
302       , object_name
303       , object_type_code
304       , line_number
305       , source_application_id
306       , source_type_code
307       , source_code
308       , SUBSTR(source_value ,1,1996)
309       , SUBSTR(source_meaning,1,200)
310       , xla_environment_pkg.g_Usr_Id
311       , TRUNC(SYSDATE)
312       , TRUNC(SYSDATE)
313       , xla_environment_pkg.g_Usr_Id
314       , xla_environment_pkg.g_Login_Id
315       , TRUNC(SYSDATE)
316       , xla_environment_pkg.g_Prog_Appl_Id
317       , xla_environment_pkg.g_Prog_Id
318       , xla_environment_pkg.g_Req_Id
319   FROM (
320        SELECT xet.event_id                  event_id
321             , 0                             line_number
322             , CASE r
323                $object_name$
324                ELSE null
325               END                           object_name
326             , CASE r
327                 $object_type_code$
328                 ELSE null
329               END                           object_type_code
330             , CASE r
331                 $source_application_id$
332                 ELSE null
333               END                           source_application_id
334             , $source_type_code$            source_type_code
335             , CASE r
336                 $source_code$
337                 ELSE null
338               END                           source_code
339             , CASE r
340                 $source_value$
341                 ELSE null
342               END                           source_value
343             , $source_meaning$              source_meaning
344         FROM xla_events_gt     xet  $hdr_tabs$
345             ,(select rownum r from all_objects where rownum <= $source_number$ and owner = p_apps_owner)
346        WHERE xet.event_date between p_pad_start_date AND p_pad_end_date
347          AND xet.event_type_code = C_EVENT_TYPE_CODE
348          $hdr_clauses$
349 )
350 ;
351 IF (C_LEVEL_STATEMENT >= g_log_level) THEN
352 
353       trace
354          (p_msg      => ''number of header sources inserted = ''||SQL%ROWCOUNT
355          ,p_level    => C_LEVEL_STATEMENT
356          ,p_module   => l_log_module);
357 
358 END IF;
359 --
360 ';
361 --
362 --
363 --+==========================================================================+
364 --|                                                                          |
365 --| Insert header sources Template                                           |
366 --|                                                                          |
367 --+==========================================================================+
368 --
369 --
370 C_INSERT_HDR_SOURCES_CLASS         CONSTANT   VARCHAR2(10000):='
371 --
372 INSERT INTO xla_diag_sources --hdr2
373 (
374         event_id
375       , ledger_id
376       , sla_ledger_id
377       , description_language
378       , object_name
379       , object_type_code
380       , line_number
381       , source_application_id
382       , source_type_code
383       , source_code
384       , source_value
385       , source_meaning
386       , created_by
387       , creation_date
388       , last_update_date
389       , last_updated_by
390       , last_update_login
391       , program_update_date
392       , program_application_id
393       , program_id
394       , request_id
395 )
396 SELECT
397         event_id
398       , p_target_ledger_id
399       , p_sla_ledger_id
400       , p_language
401       , object_name
402       , object_type_code
403       , line_number
404       , source_application_id
405       , source_type_code
406       , source_code
407       , SUBSTR(source_value ,1,1996)
408       , SUBSTR(source_meaning ,1,200)
409       , xla_environment_pkg.g_Usr_Id
410       , TRUNC(SYSDATE)
411       , TRUNC(SYSDATE)
412       , xla_environment_pkg.g_Usr_Id
413       , xla_environment_pkg.g_Login_Id
414       , TRUNC(SYSDATE)
415       , xla_environment_pkg.g_Prog_Appl_Id
416       , xla_environment_pkg.g_Prog_Id
417       , xla_environment_pkg.g_Req_Id
418   FROM (
419        SELECT xet.event_id                  event_id
420             , 0                          line_number
421             , CASE r
422                $object_name$
423                ELSE null
424               END                           object_name
425             , CASE r
426                 $object_type_code$
427                 ELSE null
428               END                           object_type_code
429             , CASE r
430                 $source_application_id$
431                 ELSE null
432               END                           source_application_id
433             , $source_type_code$            source_type_code
434             , CASE r
435                 $source_code$
436                 ELSE null
437               END                           source_code
438             , CASE r
439                 $source_value$
440                 ELSE null
441               END                           source_value
445          WHERE xet.event_date between p_pad_start_date AND p_pad_end_date
442             , $source_meaning$              source_meaning
443          FROM xla_events_gt     xet  $hdr_tabs$
444              ,(select rownum r from all_objects where rownum <= $source_number$ and owner = p_apps_owner)
446            AND xet.event_class_code = C_EVENT_CLASS_CODE
447            $hdr_clauses$
448 )
449 ;
450 --
451 IF (C_LEVEL_STATEMENT >= g_log_level) THEN
452 
453       trace
454          (p_msg      => ''number of header sources inserted = ''||SQL%ROWCOUNT
455          ,p_level    => C_LEVEL_STATEMENT
456          ,p_module   => l_log_module);
457 
458 END IF;
459 --
460 ';
461 --
462 --
463 --+==========================================================================+
464 --|                                                                          |
465 --| Insert Line sources Template                                             |
466 --|                                                                          |
467 --+==========================================================================+
468 --
469 --
470 C_INSERT_LINE_SOURCES_EVT         CONSTANT   VARCHAR2(10000):='
471 --
472 INSERT INTO xla_diag_sources --line1
473 (
474         event_id
475       , ledger_id
476       , sla_ledger_id
477       , description_language
478       , object_name
479       , object_type_code
480       , line_number
481       , source_application_id
482       , source_type_code
483       , source_code
484       , source_value
485       , source_meaning
486       , created_by
487       , creation_date
488       , last_update_date
489       , last_updated_by
490       , last_update_login
491       , program_update_date
492       , program_application_id
493       , program_id
494       , request_id
495 )
496 SELECT  event_id
497       , p_target_ledger_id
498       , p_sla_ledger_id
499       , p_language
500       , object_name
501       , object_type_code
502       , line_number
503       , source_application_id
504       , source_type_code
505       , source_code
506       , SUBSTR(source_value,1,1996)
507       , SUBSTR(source_meaning,1,200)
508       , xla_environment_pkg.g_Usr_Id
509       , TRUNC(SYSDATE)
510       , TRUNC(SYSDATE)
511       , xla_environment_pkg.g_Usr_Id
512       , xla_environment_pkg.g_Login_Id
513       , TRUNC(SYSDATE)
514       , xla_environment_pkg.g_Prog_Appl_Id
515       , xla_environment_pkg.g_Prog_Id
516       , xla_environment_pkg.g_Req_Id
517   FROM (
518        SELECT xet.event_id                  event_id
519             , $line_number$                 line_number
520             , CASE r
521                $object_name$
522                ELSE null
523               END                           object_name
524             , CASE r
525                 $object_type_code$
526                 ELSE null
527               END                           object_type_code
528             , CASE r
529                 $source_application_id$
530                 ELSE null
531               END                           source_application_id
532             , $source_type_code$            source_type_code
533             , CASE r
534                 $source_code$
535                 ELSE null
536               END                           source_code
537             , CASE r
538                 $source_value$
539                 ELSE null
540               END                           source_value
541             , $source_meaning$              source_meaning
542          FROM  xla_events_gt     xet  $line_tabs$
543             ,(select rownum r from all_objects where rownum <= $source_number$ and owner = p_apps_owner)
544         WHERE xet.event_date between p_pad_start_date AND p_pad_end_date
545           AND xet.event_type_code = C_EVENT_TYPE_CODE
546           $line_clauses$
547 )
548 ;
549 --
550 IF (C_LEVEL_STATEMENT >= g_log_level) THEN
551 
552       trace
553          (p_msg      => ''number of line sources inserted = ''||SQL%ROWCOUNT
554          ,p_level    => C_LEVEL_STATEMENT
555          ,p_module   => l_log_module);
556 
557 END IF;
558 ';
559 --
560 --
561 --+==========================================================================+
562 --|                                                                          |
563 --| Insert Line sources Template                                             |
564 --|                                                                          |
565 --+==========================================================================+
566 --
567 --
568 C_INSERT_LINE_SOURCES_CLASS         CONSTANT   VARCHAR2(10000):='
569 --
570 INSERT INTO xla_diag_sources  --line2
571 (
572         event_id
573       , ledger_id
574       , sla_ledger_id
575       , description_language
576       , object_name
577       , object_type_code
578       , line_number
579       , source_application_id
580       , source_type_code
581       , source_code
582       , source_value
583       , source_meaning
584       , created_by
585       , creation_date
586       , last_update_date
587       , last_updated_by
591       , program_id
588       , last_update_login
589       , program_update_date
590       , program_application_id
592       , request_id
593 )
594 SELECT  event_id
595       , p_target_ledger_id
596       , p_sla_ledger_id
597       , p_language
598       , object_name
599       , object_type_code
600       , line_number
601       , source_application_id
602       , source_type_code
603       , source_code
604       , SUBSTR(source_value,1,1996)
605       , SUBSTR(source_meaning ,1,200)
606       , xla_environment_pkg.g_Usr_Id
607       , TRUNC(SYSDATE)
608       , TRUNC(SYSDATE)
609       , xla_environment_pkg.g_Usr_Id
610       , xla_environment_pkg.g_Login_Id
611       , TRUNC(SYSDATE)
612       , xla_environment_pkg.g_Prog_Appl_Id
613       , xla_environment_pkg.g_Prog_Id
614       , xla_environment_pkg.g_Req_Id
615   FROM (
616        SELECT xet.event_id                  event_id
617             , $line_number$                 line_number
618             , CASE r
619                $object_name$
620                ELSE null
621               END                           object_name
622             , CASE r
623                 $object_type_code$
624                 ELSE null
625               END                           object_type_code
626             , CASE r
627                 $source_application_id$
628                 ELSE null
629               END                           source_application_id
630             , $source_type_code$            source_type_code
631             , CASE r
632                 $source_code$
633                 ELSE null
634               END                           source_code
635             , CASE r
636                 $source_value$
637                 ELSE null
638               END                           source_value
639             , $source_meaning$              source_meaning
640          FROM  xla_events_gt     xet  $line_tabs$
641             , (select rownum r from all_objects where rownum <= $source_number$ and owner = p_apps_owner)
642         WHERE xet.event_date between p_pad_start_date AND p_pad_end_date
643           AND xet.event_class_code = C_EVENT_CLASS_CODE
644           $line_clauses$
645 )
646 ;
647 --
648 IF (C_LEVEL_STATEMENT >= g_log_level) THEN
649 
650       trace
651          (p_msg      => ''number of line sources inserted = ''||SQL%ROWCOUNT
652          ,p_level    => C_LEVEL_STATEMENT
653          ,p_module   => l_log_module);
654 
655 END IF;
656 ';
657 --
658 --+==========================================================================+
659 --|                                                                          |
660 --| PRIVATE  CONSTANT                                                        |
661 --|                                                                          |
662 --+==========================================================================+
663 --
664 C_HEADER                     CONSTANT VARCHAR2(30) := 'HEADER'       ;
665 C_MLS_HEADER                 CONSTANT VARCHAR2(30) := 'HEADER_MLS'   ;
666 C_LINE                       CONSTANT VARCHAR2(30) := 'LINE'         ;
667 C_BC_LINE                    CONSTANT VARCHAR2(30) := 'LINE_BASE_CUR';
668 C_MLS_LINE                   CONSTANT VARCHAR2(30) := 'LINE_MLS'     ;
669 --
670 C_DATE                       CONSTANT VARCHAR2(30) := 'DATE';
671 C_NUMBER                     CONSTANT VARCHAR2(30) := 'NUMBER';
672 C_VARCHAR2                   CONSTANT VARCHAR2(30) := 'VARCHAR2';
673 --
674 C_NOT_ALWAYS_POPULATED       CONSTANT VARCHAR2(1)  := 'N';
675 C_ALWAYS_POPULATED           CONSTANT VARCHAR2(1)  := 'Y';
676 --
677 C_NOT_REF_OBJ                CONSTANT VARCHAR2(1)  := 'N';
678 --
679 g_chr_newline      CONSTANT VARCHAR2(10):= xla_environment_pkg.g_chr_newline;
680 g_application_id            XLA_SUBLEDGERS.APPLICATION_ID%TYPE;
681 --
682 --
683 --+==========================================================================+
684 --|                                                                          |
685 --| CALL FND_LOG trace API                                                   |
686 --|                                                                          |
687 --|                                                                          |
688 --|                                                                          |
689 --|                                                                          |
690 --|                                                                          |
691 --|                                                                          |
692 --|                                                                          |
693 --|                                                                          |
694 --|                                                                          |
695 --|                                                                          |
696 --|                                                                          |
697 --|                                                                          |
698 --|                                                                          |
699 --|                                                                          |
700 --|                                                                          |
701 --|                                                                          |
705 --=============================================================================
702 --|                                                                          |
703 --+==========================================================================+
704 --
706 --               *********** Local Trace Routine **********
707 --=============================================================================
708 
709 C_LEVEL_STATEMENT     CONSTANT NUMBER := FND_LOG.LEVEL_STATEMENT;
710 C_LEVEL_PROCEDURE     CONSTANT NUMBER := FND_LOG.LEVEL_PROCEDURE;
711 C_LEVEL_EVENT         CONSTANT NUMBER := FND_LOG.LEVEL_EVENT;
712 C_LEVEL_EXCEPTION     CONSTANT NUMBER := FND_LOG.LEVEL_EXCEPTION;
713 C_LEVEL_ERROR         CONSTANT NUMBER := FND_LOG.LEVEL_ERROR;
714 C_LEVEL_UNEXPECTED    CONSTANT NUMBER := FND_LOG.LEVEL_UNEXPECTED;
715 
716 C_LEVEL_LOG_DISABLED  CONSTANT NUMBER := 99;
717 C_DEFAULT_MODULE      CONSTANT VARCHAR2(240) := 'xla.plsql.xla_cmp_extract_pkg';
718 
719 g_log_level           NUMBER;
720 g_log_enabled         BOOLEAN;
721 
722 PROCEDURE trace
723            (p_msg                        IN VARCHAR2
724            ,p_level                      IN NUMBER
725            ,p_module                     IN VARCHAR2)
726 IS
727 BEGIN
728 ----------------------------------------------------------------------------
729 -- Following is for FND log.
730 ----------------------------------------------------------------------------
731 IF (p_msg IS NULL AND p_level >= g_log_level) THEN
732           fnd_log.message(p_level, p_module);
733 ELSIF p_level >= g_log_level THEN
734           fnd_log.string(p_level, p_module, p_msg);
735 END IF;
736 
737 EXCEPTION
738        WHEN xla_exceptions_pkg.application_exception THEN
739           RAISE;
740        WHEN OTHERS THEN
741           xla_exceptions_pkg.raise_message
742              (p_location   => 'xla_cmp_extract_pkg.trace');
743 END trace;
744 
745 
746 --+==========================================================================+
747 --|                                                                          |
748 --| PRIVATE PROCEDURES AND FUNCTIONS                                         |
749 --|                                                                          |
750 --|                                                                          |
751 --|                                                                          |
752 --+==========================================================================+
753 
754 FUNCTION GenerateFromHdrTabs  (
755 --
756   p_array_table_name             IN xla_cmp_source_pkg.t_array_VL30
757 , p_array_parent_table_index           IN xla_cmp_source_pkg.t_array_ByInt
758 , p_array_table_hash             IN xla_cmp_source_pkg.t_array_VL30
759 , p_array_populated_flag         IN xla_cmp_source_pkg.t_array_VL1
760 , p_array_ref_obj_flag           IN xla_cmp_source_pkg.t_array_VL1
761 --
762 , p_array_h_source_index         IN xla_cmp_source_pkg.t_array_ByInt
763 , p_array_h_table_index          IN xla_cmp_source_pkg.t_array_ByInt
764 --
765 , p_array_h_mls_source_index     IN xla_cmp_source_pkg.t_array_ByInt
766 , p_array_h_mls_table_index      IN xla_cmp_source_pkg.t_array_ByInt
767 --
768 , p_array_source_code            IN xla_cmp_source_pkg.t_array_VL30
769 , p_array_lookup_type            IN xla_cmp_source_pkg.t_array_VL30
770 , p_array_view_application_id    IN xla_cmp_source_pkg.t_array_Num
771 )
772 RETURN VARCHAR2
773 ;
774 
775 FUNCTION GenerateHdrWhereClause  (
776 --
777   p_array_table_name             IN xla_cmp_source_pkg.t_array_VL30
778 , p_array_parent_table_index           IN xla_cmp_source_pkg.t_array_ByInt
779 , p_array_table_hash             IN xla_cmp_source_pkg.t_array_VL30
780 , p_array_populated_flag         IN xla_cmp_source_pkg.t_array_VL1
781 --
782 , p_array_ref_obj_flag           IN xla_cmp_source_pkg.t_array_VL1
783 , p_array_join_condition         IN xla_cmp_source_pkg.t_array_VL2000
784 --
785 , p_array_h_source_index         IN xla_cmp_source_pkg.t_array_ByInt
786 , p_array_h_table_index          IN xla_cmp_source_pkg.t_array_ByInt
787 --
788 , p_array_h_mls_source_index     IN xla_cmp_source_pkg.t_array_ByInt
789 , p_array_h_mls_table_index      IN xla_cmp_source_pkg.t_array_ByInt
790 --
791 , p_array_source_code            IN xla_cmp_source_pkg.t_array_VL30
792 , p_array_lookup_type            IN xla_cmp_source_pkg.t_array_VL30
793 , p_array_view_application_id    IN xla_cmp_source_pkg.t_array_Num
794 )
795 RETURN VARCHAR2
796 ;
797 --
798 FUNCTION GenerateFromLineTabs  (
799 --
800   p_array_table_name             IN xla_cmp_source_pkg.t_array_VL30
801 , p_array_parent_table_index           IN xla_cmp_source_pkg.t_array_ByInt
802 , p_array_table_hash             IN xla_cmp_source_pkg.t_array_VL30
803 , p_array_populated_flag         IN xla_cmp_source_pkg.t_array_VL1
804 --
805 , p_array_ref_obj_flag           IN xla_cmp_source_pkg.t_array_VL1
806 --
807 , p_array_l_source_index         IN xla_cmp_source_pkg.t_array_ByInt
808 , p_array_l_table_index          IN xla_cmp_source_pkg.t_array_ByInt
809 --
810 , p_array_l_mls_source_index     IN xla_cmp_source_pkg.t_array_ByInt
811 , p_array_l_mls_table_index      IN xla_cmp_source_pkg.t_array_ByInt
812 --
813 , p_array_source_code            IN xla_cmp_source_pkg.t_array_VL30
814 , p_array_lookup_type            IN xla_cmp_source_pkg.t_array_VL30
815 , p_array_view_application_id    IN xla_cmp_source_pkg.t_array_Num
816 )
820 --
817 RETURN VARCHAR2
818 ;
819 --
821 FUNCTION GenerateLineWhereClause  (
822 --
823   p_array_table_name             IN xla_cmp_source_pkg.t_array_VL30
824 , p_array_parent_table_index           IN xla_cmp_source_pkg.t_array_ByInt
825 , p_array_table_hash             IN xla_cmp_source_pkg.t_array_VL30
826 , p_array_populated_flag         IN xla_cmp_source_pkg.t_array_VL1
827 --
828 , p_array_ref_obj_flag           IN xla_cmp_source_pkg.t_array_VL1
829 , p_array_join_condition         IN xla_cmp_source_pkg.t_array_VL2000
830 --
831 , p_array_l_source_index         IN xla_cmp_source_pkg.t_array_ByInt
832 , p_array_l_table_index          IN xla_cmp_source_pkg.t_array_ByInt
833 --
834 , p_array_l_mls_source_index     IN xla_cmp_source_pkg.t_array_ByInt
835 , p_array_l_mls_table_index      IN xla_cmp_source_pkg.t_array_ByInt
836 --
837 , p_array_source_code            IN xla_cmp_source_pkg.t_array_VL30
838 , p_array_lookup_type            IN xla_cmp_source_pkg.t_array_VL30
839 , p_array_view_application_id    IN xla_cmp_source_pkg.t_array_Num
840 )
841 RETURN VARCHAR2
842 ;
843 
844 --+==========================================================================+
845 --|                                                                          |
846 --| CALL THE EXTRACT INTEGRITY CHECKER                                       |
847 --|                                                                          |
848 --|                                                                          |
849 --|                                                                          |
850 --|                                                                          |
851 --|                                                                          |
852 --|                                                                          |
853 --|                                                                          |
854 --|                                                                          |
855 --|                                                                          |
856 --|                                                                          |
857 --|                                                                          |
858 --|                                                                          |
859 --|                                                                          |
860 --|                                                                          |
861 --|                                                                          |
862 --|                                                                          |
863 --|                                                                          |
864 --+==========================================================================+
865 --
866 --+==========================================================================+
867 --|                                                                          |
868 --| PRIVATE PROCEDURE                                                        |
869 --|                                                                          |
870 --|                                                                          |
871 --|                                                                          |
872 --+==========================================================================+
873 --
874 PROCEDURE InitSourceArrays  (
875   p_array_evt_source_index       IN OUT NOCOPY xla_cmp_source_pkg.t_array_ByInt
876 , p_array_application_id         IN OUT NOCOPY xla_cmp_source_pkg.t_array_Num
877 , p_array_source_code            IN OUT NOCOPY xla_cmp_source_pkg.t_array_VL30
878 , p_array_source_type_code       IN OUT NOCOPY xla_cmp_source_pkg.t_array_VL1
879 , p_array_datatype_code          IN OUT NOCOPY xla_cmp_source_pkg.t_array_VL1
880 , p_array_translated_flag        IN OUT NOCOPY xla_cmp_source_pkg.t_array_VL1
881 )
882 IS
883 --
884 Jdx                            BINARY_INTEGER;
885 l_array_evt_source_index       xla_cmp_source_pkg.t_array_ByInt;
886 l_array_application_id         xla_cmp_source_pkg.t_array_Num;
887 l_array_source_code            xla_cmp_source_pkg.t_array_VL30;
888 l_array_source_type_code       xla_cmp_source_pkg.t_array_VL1;
889 l_array_datatype_code          xla_cmp_source_pkg.t_array_VL1;
890 l_array_translated_flag        xla_cmp_source_pkg.t_array_VL1;
891 l_log_module                   VARCHAR2(240);
892 --
893 BEGIN
894 --
895 IF g_log_enabled THEN
896       l_log_module := C_DEFAULT_MODULE||'.InitSourceArrays';
897 END IF;
898 --
899 IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
900 
901       trace
902          (p_msg      => 'BEGIN of InitSourceArrays'
903          ,p_level    => C_LEVEL_PROCEDURE
904          ,p_module   => l_log_module);
905 
906 END IF;
907 --
908 -- init PL/SQL arrays
909 --
910 Jdx := 1;
911 --
912 FOR Idx IN p_array_evt_source_index.FIRST .. p_array_evt_source_index.LAST LOOP
913 
914    IF p_array_evt_source_index.EXISTS(Idx) AND
915       p_array_evt_source_index(Idx) IS NOT NULL THEN
916       --
917          --
918          l_array_evt_source_index(Jdx) := Idx;
919          l_array_source_code(Jdx)      := p_array_source_code(p_array_evt_source_index(Idx));
920          l_array_source_type_code(Jdx) := p_array_source_type_code(p_array_evt_source_index(Idx));
921          l_array_application_id(Jdx)   := p_array_application_id(p_array_evt_source_index(Idx));
925          Jdx := Jdx + 1;
922          l_array_datatype_code(Jdx)    := p_array_datatype_code(p_array_evt_source_index(Idx));
923          l_array_translated_flag(Jdx)  := p_array_translated_flag(p_array_evt_source_index(Idx));
924          --
926          --
927    END IF;
928 
929 END LOOP
930 ;
931 --
932 p_array_evt_source_index       := l_array_evt_source_index;
933 p_array_application_id         := l_array_application_id;
934 p_array_source_code            := l_array_source_code;
935 p_array_source_type_code       := l_array_source_type_code;
936 p_array_datatype_code          := l_array_datatype_code;
937 p_array_translated_flag        := l_array_translated_flag;
938 --
939 --
940 IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
941 
942       trace
943          (p_msg      => 'END of InitSourceArrays'
944          ,p_level    => C_LEVEL_PROCEDURE
945          ,p_module   => l_log_module);
946 
947 END IF;
948 --
949 EXCEPTION
950  WHEN xla_exceptions_pkg.application_exception   THEN
951     RAISE;
952  WHEN OTHERS    THEN
953       xla_exceptions_pkg.raise_message
954          (p_location => 'xla_cmp_extract_pkg.InitSourceArrays ');
955 END InitSourceArrays;
956 --
957 --+==========================================================================+
958 --|                                                                          |
959 --| PRIVATE PROCEDURE                                                        |
960 --|                                                                          |
961 --|                                                                          |
962 --|                                                                          |
963 --+==========================================================================+
964 --
965 PROCEDURE FlushGtTable (
966   p_application_id               IN  NUMBER
967 , p_entity_code                  IN  VARCHAR2
968 , p_event_class_code             IN  VARCHAR2
969 )
970 IS
971 l_statement      VARCHAR2(4000);
972 l_log_module     VARCHAR2(240);
973 BEGIN
974 --
975 IF g_log_enabled THEN
976       l_log_module := C_DEFAULT_MODULE||'.FlushGtTable';
977 END IF;
978 --
979 IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
980 
981       trace
982          (p_msg      => 'BEGIN of FlushGtTable'
983          ,p_level    => C_LEVEL_PROCEDURE
984          ,p_module   => l_log_module);
985 
986 END IF;
987 
988 IF (C_LEVEL_STATEMENT >= g_log_level) THEN
989 
990    trace(p_msg      => 'SQL - DELETE FROM xla_evt_class_sources_gt '
991         ,p_level    => C_LEVEL_STATEMENT
992         ,p_module   => l_log_module);
993    trace(p_msg      => 'p_application_id = ' ||p_application_id
994        ,p_level    => C_LEVEL_STATEMENT
995        ,p_module   => l_log_module);
996 
997    trace(p_msg      => 'p_entity_code = ' ||p_entity_code
998        ,p_level    => C_LEVEL_STATEMENT
999        ,p_module   => l_log_module);
1000 
1001    trace(p_msg      => 'p_event_class_code  = ' ||p_event_class_code
1002        ,p_level    => C_LEVEL_STATEMENT
1003        ,p_module   => l_log_module);
1004 
1005 END IF;
1006 
1007 DELETE FROM xla_evt_class_sources_gt gt
1008 WHERE gt.application_id      = p_application_id
1009   AND gt.entity_code         = p_entity_code
1010   AND gt.event_class_code    = p_event_class_code
1011   ;
1012 IF (C_LEVEL_STATEMENT >= g_log_level) THEN
1013 
1014       trace
1015          (p_msg      => '# rows deleted from xla_evt_class_sources_gt = '||SQL%ROWCOUNT
1016          ,p_level    => C_LEVEL_STATEMENT
1017          ,p_module   => l_log_module);
1018 
1019 END IF;
1020 --
1021 IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
1022 
1023       trace
1024          (p_msg      => 'END of FlushGtTable'
1025          ,p_level    => C_LEVEL_PROCEDURE
1026          ,p_module   => l_log_module);
1027 
1028 END IF;
1029 --
1030 END FlushGtTable;
1031 --
1032 --
1033 --+==========================================================================+
1034 --|                                                                          |
1035 --| PRIVATE PROCEDURE                                                        |
1036 --|                                                                          |
1037 --|                                                                          |
1038 --|                                                                          |
1039 --+==========================================================================+
1040 --
1041 PROCEDURE InsertSourcesIntoGtTable  (
1042   p_application_id               IN  NUMBER
1043 , p_entity_code                  IN  VARCHAR2
1044 , p_event_class_code             IN  VARCHAR2
1045 , p_array_evt_source_index       IN xla_cmp_source_pkg.t_array_ByInt
1046 , p_array_application_id         IN xla_cmp_source_pkg.t_array_Num
1047 , p_array_source_code            IN xla_cmp_source_pkg.t_array_VL30
1048 , p_array_source_type_code       IN xla_cmp_source_pkg.t_array_VL1
1049 , p_array_datatype_code          IN xla_cmp_source_pkg.t_array_VL1
1050 , p_array_translated_flag        IN xla_cmp_source_pkg.t_array_VL1
1051 )
1052 IS
1053 --
1054 l_log_module                   VARCHAR2(240);
1055 BEGIN
1056 --
1057 IF g_log_enabled THEN
1061 IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
1058       l_log_module := C_DEFAULT_MODULE||'.InsertSourcesIntoGtTable';
1059 END IF;
1060 --
1062 
1063       trace
1064          (p_msg      => 'BEGIN of InsertSourcesIntoGtTable'
1065          ,p_level    => C_LEVEL_PROCEDURE
1066          ,p_module   => l_log_module);
1067 
1068 END IF;
1069 --
1070 -- flush temporary table
1071 --
1072    FlushGtTable(
1073       p_application_id
1074     , p_entity_code
1075     , p_event_class_code
1076    );
1077 --
1078 -- insert sources in xla_evt_class_sources_gt temporary table
1079 --
1080 IF (C_LEVEL_STATEMENT >= g_log_level) THEN
1081 
1082       trace
1083          (p_msg      => 'SQL- Insert Into xla_evt_class_sources_gt '
1084          ,p_level    => C_LEVEL_STATEMENT
1085          ,p_module   => l_log_module);
1086 
1087 END IF;
1088 
1089  --
1090  FORALL Idx IN p_array_evt_source_index.FIRST .. p_array_evt_source_index.LAST
1091 
1092  INSERT INTO xla_evt_class_sources_gt
1093      (
1094        application_id
1095      , entity_code
1096      , event_class_code
1097      , source_application_id
1098      , source_code
1099      , source_hash_id
1100      , source_datatype_code
1101      , source_level_code
1102      )
1103 
1104     SELECT
1105        p_application_id
1106      , p_entity_code
1107      , p_event_class_code
1108      , xes.source_application_id
1109      , p_array_source_code(Idx)
1110      , p_array_evt_source_index(Idx)
1111 
1112      , CASE p_array_datatype_code(Idx)
1113 
1114          WHEN 'C' THEN C_VARCHAR2
1115 
1116          WHEN 'D' THEN C_DATE
1117 
1118          ELSE C_NUMBER
1119 
1120        END
1121 
1122      , CASE xes.level_code
1123 
1124         WHEN 'C' THEN C_BC_LINE
1125 -- Added an extra decode for language column (Dimple)
1126         WHEN 'L' THEN DECODE(p_array_source_code(Idx),'LANGUAGE',C_MLS_LINE,
1127                              DECODE(p_array_translated_flag(Idx)
1128                              ,'Y',C_MLS_LINE
1129                              ,C_LINE))
1130 
1131         WHEN 'H' THEN DECODE(p_array_source_code(Idx),'LANGUAGE',C_MLS_HEADER,
1132                              DECODE(p_array_translated_flag(Idx)
1133                              ,'Y', C_MLS_HEADER
1134                              , C_HEADER))
1135 
1136        END
1137     --
1138      FROM xla_event_sources   xes
1139    WHERE  xes.application_id        = p_application_id
1140      AND  xes.entity_code           = p_entity_code
1141      AND  xes.event_class_code      = p_event_class_code
1142      AND  xes.source_code           = p_array_source_code(Idx)
1143      AND  xes.source_type_code      = p_array_source_type_code(Idx)
1144      AND  xes.source_application_id = p_array_application_id(Idx)
1145      AND  xes.source_type_code      = 'S'
1146      AND  xes.active_flag           = 'Y'
1147 -- added not exists to prevent inserting sources that are already there in GT table (Dimple)
1148      AND not exists (SELECT 'x'
1149                        FROM xla_evt_class_sources_gt gt
1150                       WHERE gt.application_id        = xes.application_id
1151                         AND gt.entity_code           = xes.entity_code
1152                         AND gt.event_class_code      = xes.event_class_code
1153                         AND gt.source_application_id = xes.source_application_id
1154                         AND gt.source_code           = xes.source_code)
1155    ;
1156 --
1157 IF (C_LEVEL_STATEMENT >= g_log_level) THEN
1158 
1159       trace
1160          (p_msg      => '# rows inserted into xla_evt_class_sources_gt = '||SQL%ROWCOUNT
1161          ,p_level    => C_LEVEL_STATEMENT
1162          ,p_module   => l_log_module);
1163 
1164 END IF;
1165 --
1166 IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
1167 
1168       trace
1169          (p_msg      => 'END of InsertSourcesIntoGtTable'
1170          ,p_level    => C_LEVEL_PROCEDURE
1171          ,p_module   => l_log_module);
1172 
1173 END IF;
1174 --
1175 EXCEPTION
1176  WHEN xla_exceptions_pkg.application_exception   THEN
1177     RAISE;
1178  WHEN OTHERS    THEN
1179       xla_exceptions_pkg.raise_message
1180          (p_location => 'xla_cmp_extract_pkg.InsertSourcesIntoGtTable ');
1181 END InsertSourcesIntoGtTable;
1182 --
1183 --
1184 --+==========================================================================+
1185 --|                                                                          |
1186 --| PRIVATE PROCEDURE                                                        |
1187 --|                                                                          |
1188 --|                                                                          |
1189 --|                                                                          |
1190 --+==========================================================================+
1191 --
1192 PROCEDURE GetSourceLevels  (
1193   p_application_id               IN  NUMBER
1194 , p_entity_code                  IN  VARCHAR2
1195 , p_event_class_code             IN  VARCHAR2
1196 , p_array_evt_source_Level       OUT NOCOPY xla_cmp_source_pkg.t_array_VL1
1197 )
1198 IS
1199 --
1200 l_array_evt_source_index        xla_cmp_source_pkg.t_array_ByInt;
1204 --
1201 l_array_evt_source_Level        xla_cmp_source_pkg.t_array_VL1;
1202 --
1203 l_log_module                    VARCHAR2(240);
1205 BEGIN
1206 --
1207 IF g_log_enabled THEN
1208       l_log_module := C_DEFAULT_MODULE||'.GetSourceLevels';
1209 END IF;
1210 --
1211 IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
1212 
1213       trace
1214          (p_msg      => 'BEGIN of GetSourceLevels'
1215          ,p_level    => C_LEVEL_PROCEDURE
1216          ,p_module   => l_log_module);
1217 
1218 END IF;
1219 --
1220 IF (C_LEVEL_STATEMENT >= g_log_level) THEN
1221 
1222       trace
1223          (p_msg      => 'SQL- SELECT from xla_evt_class_sources_gt '
1224          ,p_level    => C_LEVEL_STATEMENT
1225          ,p_module   => l_log_module);
1226 
1227 END IF;
1228 
1229 --
1230 SELECT  gt.source_hash_id
1231       , CASE gt.source_level_code
1232             WHEN  C_HEADER     THEN 'H'
1233             WHEN  C_MLS_HEADER THEN 'H'
1234             ELSE 'L'
1235         END
1236 BULK COLLECT INTO
1237         l_array_evt_source_index
1238       , l_array_evt_source_Level
1239   FROM xla_evt_class_sources_gt gt
1240 WHERE gt.application_id      = p_application_id
1241   AND gt.entity_code         = p_entity_code
1242   AND gt.event_class_code    = p_event_class_code
1243 ;
1244 --
1245 --
1246 IF (C_LEVEL_STATEMENT >= g_log_level) THEN
1247 
1248       trace
1249          (p_msg      => '# rows inserted into xla_evt_class_sources_gt = '||SQL%ROWCOUNT
1250          ,p_level    => C_LEVEL_STATEMENT
1251          ,p_module   => l_log_module);
1252 
1253 END IF;
1254 
1255 IF l_array_evt_source_index.COUNT > 0 THEN
1256 --
1257  FOR Idx IN l_array_evt_source_index.FIRST .. l_array_evt_source_index.LAST LOOP
1258  --
1259    IF l_array_evt_source_index.EXISTS(Idx) AND
1260       l_array_evt_source_index(Idx) IS NOT NULL
1261    THEN
1262       --
1263       p_array_evt_source_Level(l_array_evt_source_index(Idx)) := l_array_evt_source_Level(Idx);
1264       --
1265    END IF;
1266  --
1267  END LOOP;
1268 END IF;
1269 --
1270 --
1271 IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
1272 
1273       trace
1274          (p_msg      => 'END of GetSourceLevels'
1275          ,p_level    => C_LEVEL_PROCEDURE
1276          ,p_module   => l_log_module);
1277 
1278 END IF;
1279 --
1280 --
1281 EXCEPTION
1282  WHEN xla_exceptions_pkg.application_exception   THEN
1283     RAISE;
1284  WHEN OTHERS    THEN
1285       xla_exceptions_pkg.raise_message
1286          (p_location => 'xla_cmp_extract_pkg.GetSourceLevels ');
1287 END GetSourceLevels;
1288 --
1289 --
1290 --+==========================================================================+
1291 --|                                                                          |
1292 --| PRIVATE PROCEDURE                                                        |
1293 --|                                                                          |
1294 --|                                                                          |
1295 --|                                                                          |
1296 --+==========================================================================+
1297 --
1298 PROCEDURE GetExtractObjects  (
1299   p_application_id               IN  NUMBER
1300 , p_entity_code                  IN  VARCHAR2
1301 , p_event_class_code             IN  VARCHAR2
1302 , p_array_object_name            OUT NOCOPY xla_cmp_source_pkg.t_array_VL30
1303 , p_array_parent_object_index    OUT NOCOPY xla_cmp_source_pkg.t_array_ByInt
1304 , p_array_object_type            OUT NOCOPY xla_cmp_source_pkg.t_array_VL30
1305 , p_array_object_hash_id         OUT NOCOPY xla_cmp_source_pkg.t_array_VL30
1306 , p_array_populated_flag         OUT NOCOPY xla_cmp_source_pkg.t_array_VL1
1307 , p_array_ref_obj_flag           OUT NOCOPY xla_cmp_source_pkg.t_array_VL1
1308 , p_array_join_condition         OUT NOCOPY xla_cmp_Source_pkg.t_array_VL2000
1309 )
1310 IS
1311 --
1312 l_array_object_name            xla_cmp_source_pkg.t_array_VL30;
1313 l_array_parent_name            xla_cmp_source_pkg.t_array_VL30;
1314 l_array_object_type            xla_cmp_source_pkg.t_array_VL30;
1315 l_array_object_hash_id         xla_cmp_source_pkg.t_array_VL30;
1316 l_array_populated_flag         xla_cmp_source_pkg.t_array_VL1;
1317 --
1318 l_array_ref_obj_flag           xla_cmp_source_pkg.t_array_VL1;
1319 l_array_join_condition         xla_cmp_source_pkg.t_array_VL2000;
1320 l_array_parent_object_index    xla_cmp_source_pkg.t_array_ByInt;
1321 TYPE t_array_by_VL30 IS        TABLE OF NUMBER INDEX BY VARCHAR2(30);
1322 l_array_table_index            t_array_by_VL30;
1323 --
1324 CURSOR table_cur(   p_application_id       NUMBER
1325                   , p_entity_code          VARCHAR2
1326                   , p_event_class_code     VARCHAR2
1327                  )
1328 IS
1329 SELECT
1330        gt.extract_object_name
1331      , gt.extract_object_type_code
1332      , nvl(gt.always_populated_flag,C_NOT_ALWAYS_POPULATED)
1333      , nvl(gt.reference_object_flag,C_NOT_REF_OBJ)
1334      , gt.join_condition
1335      , nvl(ro.linked_to_ref_obj_name, ro.object_name)
1336 FROM xla_evt_class_sources_gt gt
1337      , xla_reference_objects ro
1338 WHERE gt.application_id      = p_application_id
1339   AND gt.entity_code         = p_entity_code
1343   AND ro.event_class_code      (+)= p_event_class_code
1340   AND gt.event_class_code    = p_event_class_code
1341   AND ro.application_id        (+)= p_application_id
1342   AND ro.entity_code           (+)= p_entity_code
1344   AND ro.reference_object_name (+)= gt.extract_object_name
1345 UNION
1346 SELECT ro1.reference_object_name
1347          , gt.extract_object_type_code
1348          , nvl(ro1.always_populated_flag,C_NOT_ALWAYS_POPULATED)
1349          , 'Y'
1350          , ro1.join_condition
1351          , nvl(ro1.linked_to_ref_obj_name, ro1.object_name)
1352 FROM xla_evt_class_sources_gt gt
1353          , xla_reference_objects ro
1354          , xla_reference_objects ro1
1355 WHERE gt.application_id      = p_application_id
1356   AND gt.entity_code         = p_entity_code
1357   AND gt.event_class_code    = p_event_class_code
1358   AND ro.application_id =     p_application_id
1359   AND ro.entity_code         = p_entity_code
1360   AND ro.event_class_code    = p_event_class_code
1361   AND ro.reference_object_name = gt.extract_object_name
1362   AND ro1.application_id =     p_application_id
1363   AND ro1.entity_code         = p_entity_code
1364   AND ro1.event_class_code    = p_event_class_code
1365   AND ro1.reference_object_name = ro.linked_to_ref_obj_name
1366 UNION
1367 SELECT eo.object_name
1368      ,gt.extract_object_type_code
1369      ,nvl(eo.always_populated_flag,C_NOT_ALWAYS_POPULATED)
1370      ,'N'
1371      ,null
1372      ,null
1373 FROM xla_evt_class_sources_gt gt
1374      , xla_reference_objects ro
1375      , xla_extract_objects eo
1376 WHERE  gt.application_id      = p_application_id
1377   AND gt.entity_code         = p_entity_code
1378   AND gt.event_class_code    = p_event_class_code
1379   AND ro.application_id =     p_application_id
1380   AND ro.entity_code         = p_entity_code
1381   AND ro.event_class_code    = p_event_class_code
1382   AND ro.reference_object_name = gt.extract_object_name
1383   AND eo.application_id =     p_application_id
1384   AND eo.entity_code         = p_entity_code
1385   AND eo.event_class_code    = p_event_class_code
1386   AND eo.object_name      = ro.object_name
1387 ;
1388 --
1389 l_log_module                   VARCHAR2(240);
1390 BEGIN
1391 --
1392 IF g_log_enabled THEN
1393       l_log_module := C_DEFAULT_MODULE||'.GetExtractObjects';
1394 END IF;
1395 --
1396 IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
1397 
1398       trace
1399          (p_msg      => 'BEGIN of GetExtractObjects'
1400          ,p_level    => C_LEVEL_PROCEDURE
1401          ,p_module   => l_log_module);
1402 
1403 END IF;
1404 --
1405 --
1406 OPEN table_cur(   p_application_id   => p_application_id
1407                 , p_entity_code      => p_entity_code
1408                 , p_event_class_code => p_event_class_code
1409                );
1410 --
1411 IF (C_LEVEL_STATEMENT >= g_log_level) THEN
1412 
1413       trace
1414          (p_msg      => 'SQL - Fetch xla_evt_class_sources_gt '
1415          ,p_level    => C_LEVEL_STATEMENT
1416          ,p_module   => l_log_module);
1417 
1418 END IF;
1419 --
1420 
1421 FETCH table_cur BULK COLLECT INTO  l_array_object_name
1422                                  , l_array_object_type
1423                                  , l_array_populated_flag
1424                                  , l_array_ref_obj_flag
1425                                  , l_array_join_condition
1426                                  , l_array_parent_name
1427                                  ;
1428 --
1429 
1430 IF (C_LEVEL_STATEMENT >= g_log_level) THEN
1431 
1432       trace
1433          (p_msg      => '# rows selected from xla_evt_class_sources_gt = '||table_cur%ROWCOUNT
1434          ,p_level    => C_LEVEL_STATEMENT
1435          ,p_module   => l_log_module);
1436 
1437 END IF;
1438 --
1439 CLOSE table_cur;
1440 
1441 
1442 IF l_array_object_name.COUNT > 0 THEN
1443 
1444   FOR Idx IN l_array_object_name.FIRST .. l_array_object_name.LAST LOOP
1445 
1446     IF l_array_object_name.EXISTS(Idx) AND
1447        l_array_object_name(Idx) IS NOT NULL AND
1448        l_array_object_type(Idx) IS NOT NULL THEN
1449 
1450       l_array_table_index(l_array_object_name(Idx)) := Idx;
1451       CASE l_array_object_type(Idx)
1452 
1453         WHEN C_HEADER      THEN l_array_object_hash_id(Idx)    := CONCAT('h',Idx);
1454 
1455         WHEN C_MLS_HEADER  THEN l_array_object_hash_id(Idx)   := CONCAT('hmls',Idx);
1456 
1457         WHEN C_LINE        THEN l_array_object_hash_id(Idx)   := CONCAT('l',Idx);
1458 
1459         WHEN C_BC_LINE     THEN l_array_object_hash_id(Idx)   := CONCAT('lbc',Idx);
1460 
1461         WHEN C_MLS_LINE    THEN l_array_object_hash_id(Idx)   := CONCAT('lmls',Idx);
1462 
1463         ELSE
1464           null;
1465       END CASE;
1466 
1467     END IF;
1468 
1469   END LOOP;
1470 
1471   FOR Idx IN l_array_object_name.FIRST .. l_array_object_name.LAST LOOP
1472    IF l_array_parent_name.EXISTS(Idx) AND
1473        l_array_parent_name(Idx) IS NOT NULL AND
1474        l_array_table_index.EXISTS(l_array_parent_name(Idx)) AND
1475        l_array_table_index(l_array_parent_name(Idx)) IS NOT NULL THEN
1476      l_array_parent_object_index(Idx):= l_array_table_index(l_array_parent_name(Idx));
1477    END IF;
1478 
1482 --
1479   END LOOP;
1480 
1481 END IF;
1483 p_array_object_name      := l_array_object_name;
1484 p_array_object_type      := l_array_object_type;
1485 p_array_object_hash_id   := l_array_object_hash_id;
1486 p_array_populated_flag   := l_array_populated_flag;
1487 p_array_ref_obj_flag     := l_array_ref_obj_flag;
1488 p_array_join_condition   := l_array_join_condition;
1489 p_array_parent_object_index     := l_array_parent_object_index;
1490 --
1491 --
1492 IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
1493 
1494       trace
1495          (p_msg      => 'END of GetExtractObjects'
1496          ,p_level    => C_LEVEL_PROCEDURE
1497          ,p_module   => l_log_module);
1498 
1499 END IF;
1500 --
1501 --
1502 EXCEPTION
1503  WHEN xla_exceptions_pkg.application_exception   THEN
1504     RAISE;
1505  WHEN OTHERS    THEN
1506       xla_exceptions_pkg.raise_message
1507          (p_location => 'xla_cmp_extract_pkg.GetExtractObjects ');
1508 END GetExtractObjects;
1509 --
1510 --
1511 --+==========================================================================+
1512 --|                                                                          |
1513 --| PRIVATE PROCEDURE                                                        |
1514 --|                                                                          |
1515 --|                                                                          |
1516 --|                                                                          |
1517 --+==========================================================================+
1518 --
1519 FUNCTION  GetObjectIndex (
1520  p_object_name                 IN VARCHAR2
1521 ,p_array_object_name           IN xla_cmp_source_pkg.t_array_VL30
1522 )
1523 RETURN BINARY_INTEGER
1524 IS
1525 objectIndex                    BINARY_INTEGER:=NULL;
1526 l_log_module                   VARCHAR2(240);
1527 BEGIN
1528 --
1529 IF p_array_object_name.COUNT > 0 THEN
1530    --
1531   FOR Idx IN p_array_object_name.FIRST .. p_array_object_name.LAST LOOP
1532     --
1533     IF p_array_object_name.EXISTS(Idx) AND
1534        p_array_object_name(Idx) = p_object_name THEN
1535             --
1536             objectIndex := Idx;
1537             --
1538     END IF;
1539          --
1540    END LOOP;
1541       --
1542 END IF;
1543 --
1544 RETURN objectIndex;
1545 END GetObjectIndex;
1546 --
1547 --+==========================================================================+
1548 --|                                                                          |
1549 --| PRIVATE PROCEDURE                                                        |
1550 --|                                                                          |
1551 --|                                                                          |
1552 --|                                                                          |
1553 --+==========================================================================+
1554 --
1555 PROCEDURE GetSourcesWithExtractObject  (
1556   p_application_id               IN  NUMBER
1557 , p_entity_code                  IN  VARCHAR2
1558 , p_event_class_code             IN  VARCHAR2
1559 , p_array_object_name            IN  xla_cmp_source_pkg.t_array_VL30
1560 --
1561 , p_array_h_source_index         OUT NOCOPY xla_cmp_source_pkg.t_array_ByInt
1562 , p_array_h_table_index          OUT NOCOPY xla_cmp_source_pkg.t_array_ByInt
1563 --
1564 , p_array_h_mls_source_index     OUT NOCOPY xla_cmp_source_pkg.t_array_ByInt
1565 , p_array_h_mls_table_index      OUT NOCOPY xla_cmp_source_pkg.t_array_ByInt
1566 --
1567 , p_array_l_source_index         OUT NOCOPY xla_cmp_source_pkg.t_array_ByInt
1568 , p_array_l_table_index          OUT NOCOPY xla_cmp_source_pkg.t_array_ByInt
1569 --
1570 , p_array_l_mls_source_index     OUT NOCOPY xla_cmp_source_pkg.t_array_ByInt
1571 , p_array_l_mls_table_index      OUT NOCOPY xla_cmp_source_pkg.t_array_ByInt
1572 --
1573 )
1574 IS
1575 --
1576 --
1577 l_array_source_hash_id           xla_cmp_source_pkg.t_array_ByInt;
1578 l_array_object_name              xla_cmp_source_pkg.t_array_VL30;
1579 l_array_object_type              xla_cmp_source_pkg.t_array_VL30;
1580 l_log_module                     VARCHAR2(240);
1581 --
1582 BEGIN
1583 --
1584 IF g_log_enabled THEN
1585       l_log_module := C_DEFAULT_MODULE||'.GetSourcesWithExtractObject';
1586 END IF;
1587 --
1588 IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
1589 
1590       trace
1591          (p_msg      => 'BEGIN of GetSourcesWithExtractObject'
1592          ,p_level    => C_LEVEL_PROCEDURE
1593          ,p_module   => l_log_module);
1594 
1595 END IF;
1596 --
1597 IF (C_LEVEL_STATEMENT >= g_log_level) THEN
1598 
1599       trace
1600          (p_msg      => 'SQL- SELECT from xla_evt_class_sources_gt'
1601          ,p_level    => C_LEVEL_STATEMENT
1602          ,p_module   => l_log_module);
1603 
1604 END IF;
1605 --
1606 --
1607 SELECT  gt.source_hash_id
1608       , gt.extract_object_name
1609       , gt.extract_object_type_code
1610 
1611 BULK COLLECT INTO
1612         l_array_source_hash_id
1613       , l_array_object_name
1614       , l_array_object_type
1615 
1616   FROM xla_evt_class_sources_gt gt
1617 WHERE gt.application_id      = p_application_id
1621 --
1618   AND gt.entity_code         = p_entity_code
1619   AND gt.event_class_code    = p_event_class_code
1620 ;
1622 IF (C_LEVEL_STATEMENT >= g_log_level) THEN
1623 
1624       trace
1625          (p_msg      => '# rows selected from xla_evt_class_sources_gt = '||SQL%ROWCOUNT
1626          ,p_level    => C_LEVEL_STATEMENT
1627          ,p_module   => l_log_module);
1628 
1629 END IF;
1630 
1631 --
1632 IF l_array_source_hash_id.COUNT > 0 THEN
1633 
1634   FOR Idx IN l_array_source_hash_id.FIRST .. l_array_source_hash_id.LAST LOOP
1635 
1636     CASE l_array_object_type(Idx)
1637 
1638           WHEN C_HEADER      THEN
1639 
1640              p_array_h_source_index(l_array_source_hash_id(Idx)) := l_array_source_hash_id(Idx);
1641              p_array_h_table_index(l_array_source_hash_id(Idx))  := GetObjectIndex (
1642                                                                         l_array_object_name(Idx)
1643                                                                       , p_array_object_name
1644                                                                       );
1645           WHEN C_MLS_HEADER  THEN
1646 
1647              p_array_h_mls_source_index(l_array_source_hash_id(Idx)) := l_array_source_hash_id(Idx);
1648              p_array_h_mls_table_index(l_array_source_hash_id(Idx))  := GetObjectIndex (
1649                                                                         l_array_object_name(Idx)
1650                                                                       , p_array_object_name
1651                                                                       );
1652 
1653           WHEN C_LINE        THEN
1654 
1655              p_array_l_source_index(l_array_source_hash_id(Idx)) := l_array_source_hash_id(Idx);
1656              p_array_l_table_index(l_array_source_hash_id(Idx))  := GetObjectIndex (
1657                                                                         l_array_object_name(Idx)
1658                                                                       , p_array_object_name
1659                                                                       );
1660 
1661 
1662           WHEN C_MLS_LINE    THEN
1663 
1664              p_array_l_mls_source_index(l_array_source_hash_id(Idx)) := l_array_source_hash_id(Idx);
1665              p_array_l_mls_table_index(l_array_source_hash_id(Idx))  := GetObjectIndex (
1666                                                                         l_array_object_name(Idx)
1667                                                                       , p_array_object_name
1668                                                                       );
1669 
1670           ELSE
1671             null;
1672     END CASE;
1673 
1674   END LOOP;
1675 
1676 END IF;
1677 
1678 --
1679 IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
1680 
1681       trace
1682          (p_msg      => 'END of GetSourcesWithExtractObject'
1683          ,p_level    => C_LEVEL_PROCEDURE
1684          ,p_module   => l_log_module);
1685 
1686 END IF;
1687 --
1688 --
1689 EXCEPTION
1690  WHEN xla_exceptions_pkg.application_exception   THEN
1691     RAISE;
1692  WHEN OTHERS    THEN
1693       xla_exceptions_pkg.raise_message
1694          (p_location => 'xla_cmp_extract_pkg.GetSourcesWithExtractObject ');
1695 END GetSourcesWithExtractObject;
1696 
1697 --
1698 --
1699 --+==========================================================================+
1700 --|                                                                          |
1701 --| PRIVATE  FUNCTION                                                        |
1702 --|                                                                          |
1703 --|      Add Oracle Join Operator (+) to join conditions                     |
1704 --|                                                                          |
1705 --+==========================================================================+
1706 --
1707 FUNCTION  AddOuterJoinOps (
1708    p_join_condition IN VARCHAR2
1709   ,p_ref_obj_name   IN VARCHAR2)
1710 RETURN VARCHAR2
1711 IS
1712 
1713   l_out_where_clause      VARCHAR2(2000);
1714   l_in_str_lower          VARCHAR2(2000);
1715   l_multiple_flag         VARCHAR2(1);
1716 
1717   l_col_start_pos         PLS_INTEGER;
1718   l_and_pos               PLS_INTEGER;
1719   l_start_pos             PLS_INTEGER;
1720   i                       PLS_INTEGER;
1721   l_array_join_condition  xla_cmp_source_pkg.t_array_VL2000;
1722   l_relation              VARCHAR2(2);
1723 
1724   l_log_module            VARCHAR2(240);
1725 
1726 BEGIN
1727 --
1728 IF g_log_enabled THEN
1729       l_log_module := C_DEFAULT_MODULE||'.AddOuterJoinOps';
1730 END IF;
1731 --
1732 IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
1733 
1734       trace
1735          (p_msg      => 'BEGIN of AddOuterJoinOps'
1736          ,p_level    => C_LEVEL_PROCEDURE
1737          ,p_module   => l_log_module);
1738 
1739 END IF;
1740 --
1741 
1742 l_multiple_flag    := 'N';
1743 l_in_str_lower     := lower(p_join_condition);
1744 
1745 --
1746 -- Assign each join condition into l_array_join_condition (i)
1747 -- For example, for the join contion
1748 --      'ap_inv_dist_ext_s.col1 = pa_projects.col1 AND
1749 --       ap_inv_dist_ext_s.col2 = pa_projects.col2'
1750 --
1754 
1751 -- l_array_join_condition (1) stores  'ap_inv_dist_ext_s.col1 = pa_projects.col1'
1752 -- l_array_join_condition (2) stores  'ap_inv_dist_ext_s.col2 = pa_projects.col2'
1753 --
1755 --
1756 --  Check if ' and ' is found in the input strings, that is. Then assume that
1757 --  there are multiple join conditions
1758 --
1759 IF INSTRB(l_in_str_lower, ' and ') > 0 THEN
1760 
1761    i               := 1;
1762    l_and_pos       := 1;
1763    l_start_pos     := 1; -- Starting Posistion to search ' AND '
1764    l_multiple_flag := 'Y';
1765 
1766 
1767    WHILE l_and_pos > 0 AND i < 20 LOOP  --  i <20 is to avoid inf loop
1768 
1769       l_and_pos := INSTRB(l_in_str_lower, ' and ', l_start_pos);
1770 
1771       --
1772       --  ' AND ' is found. l_and_pos is 0 if ' and ' is not found.
1773       --
1774       IF l_and_pos <> 0 THEN
1775       -- bug6487259 added - l_start_pos + 1
1776          l_array_join_condition(i) := SUBSTRB(p_join_condition,l_start_pos, l_and_pos - l_start_pos + 1);
1777 
1778          l_start_pos := l_and_pos + 5;  -- Move starting posting for the next ' AND '
1779 
1780       --
1781       --  ' AND ' is not found.  Assume this is the last join condition
1782       --
1783       ELSE -- the last join condition
1784       -- bug6487259 added - l_start_pos + 1
1785          l_array_join_condition(i) := SUBSTRB(p_join_condition,l_start_pos,lengthb(p_join_condition) - l_start_pos + 1);
1786 
1787       END IF;
1788 
1789       -- Debug
1790       IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
1791 
1792          trace
1793             (p_msg      => 'Before adding outer join operators - '  ||
1794                            'l_array_join_condition(' || i || ') = ' ||
1795                             l_array_join_condition (i)
1796             ,p_level    => C_LEVEL_PROCEDURE
1797             ,p_module   => l_log_module);
1798 
1799       END IF;
1800 
1801       i := i+1;
1802 
1803    END LOOP;
1804 
1805 ELSE -- Single join condition
1806 
1807    l_multiple_flag := 'N';
1808 
1809 END IF;
1810 
1811 
1812 --
1813 -- Add (+) to the join conditions
1814 --
1815 
1816 IF l_multiple_flag = 'N' THEN
1817 
1818    --
1819    -- Add the outer join operator to reference objects
1820    -- Make no change to trx object conditions
1821    --
1822    IF INSTRB(LOWER(p_join_condition),LOWER(p_ref_obj_name)||'.') > 0 THEN
1823 
1824       --
1825       --  Evaluate two char relations '>=' ,'<>' first.
1826       --
1827       IF INSTRB(p_join_condition,'>=') > 0    THEN
1828          l_relation := '>=';
1829       ELSIF INSTRB(p_join_condition,'=<') > 0 THEN
1830          l_relation := '=<';
1831       ELSIF INSTRB(p_join_condition,'<>') > 0 THEN
1832          l_relation := '<>';
1833       ELSIF INSTRB(p_join_condition,'!=') > 0 THEN
1834          l_relation := '!=';
1835       ELSIF INSTRB(p_join_condition,'>')  > 0 THEN
1836          l_relation := '>';
1837       ELSIF INSTRB(p_join_condition,'<')  > 0 THEN
1838          l_relation := '<';
1839       ELSIF INSTRB(p_join_condition,'=')  > 0 THEN
1840          l_relation := '=';
1841       END IF;
1842 
1843       --
1844       -- Reference Object is located right to the equal sign
1845       -- e.g. ap_inv_dist_ext_s.project_id = pa_projects.project_id
1846       --
1847       IF INSTRB(l_in_str_lower,LOWER(p_ref_obj_name)) > INSTRB(l_in_str_lower,l_relation)
1848       THEN
1849          l_out_where_clause := p_join_condition || ' (+) ';
1850 
1851       --
1852       -- Reference Object is located left to the equal sign
1853       -- e.g. pa_projects.project_id = ap_inv_dist_ext_s.project_id
1854       --
1855       ELSE
1856          l_out_where_clause := REPLACE(p_join_condition, l_relation, ' (+) ' || l_relation);
1857       END IF;
1858 
1859    END IF;
1860 
1861 ELSE  -- l_multipel_flag = 'Y'
1862 
1863    IF l_array_join_condition.COUNT >= 1 THEN
1864       FOR i IN l_array_join_condition.FIRST .. l_array_join_condition.LAST LOOP
1865 
1866          --
1867          -- Add the outer join operator to reference objects
1868          --
1869          IF INSTRB(LOWER(l_array_join_condition(i)),LOWER(p_ref_obj_name)||'.') > 0 THEN
1870 
1871             --
1872             --  Evaluate two char relations '>=' ,'<>' first.
1873             --
1874             IF INSTRB(l_array_join_condition(i),'>=') > 0    THEN
1875                l_relation := '>=';
1876             ELSIF INSTRB(l_array_join_condition(i),'=<') > 0 THEN
1877                l_relation := '=<';
1878             ELSIF INSTRB(l_array_join_condition(i),'<>') > 0 THEN
1879                l_relation := '<>';
1880             ELSIF INSTRB(l_array_join_condition(i),'!=') > 0 THEN
1881                l_relation := '!=';
1882             ELSIF INSTRB(l_array_join_condition(i),'>')  > 0 THEN
1883                l_relation := '>';
1884             ELSIF INSTRB(l_array_join_condition(i),'<')  > 0 THEN
1885                l_relation := '<';
1886             ELSIF INSTRB(l_array_join_condition(i),'=')  > 0 THEN
1887                l_relation := '=';
1888             END IF;
1889 
1890             --
1891             -- Reference Object is located right to the relation '=', '>', or '<'
1892             -- e.g. ap_inv_dist_ext_s.project_id = pa_projects.project_id
1893             -- e.g. 0 < pa_projects.project_id
1897             THEN
1894             --
1895             IF INSTRB(LOWER(l_array_join_condition(i)),LOWER(p_ref_obj_name)) >
1896                INSTRB(LOWER(l_array_join_condition(i)),l_relation)
1898                l_array_join_condition(i) := l_array_join_condition(i) || ' (+) ';
1899 
1900             --
1901             -- Reference Object is located left to the relation '=', '>', or '<'
1902             -- e.g. pa_projects.project_id = ap_inv_dist_ext_s.project_id
1903             -- e.g. pa_projects.project_id > 0
1904             ELSE
1905                l_array_join_condition(i) :=
1906                      REPLACE(l_array_join_condition(i),l_relation,' (+) ' || l_relation);
1907             END IF;
1908 
1909          END IF;
1910 
1911          l_out_where_clause := l_out_where_clause || l_array_join_condition(i);
1912 
1913          IF i < l_array_join_condition.COUNT THEN
1914             l_out_where_clause := l_out_where_clause || ' AND ';
1915          END IF;
1916 
1917          -- Debug
1918          IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
1919 
1920             trace
1921                (p_msg      => 'After adding outer join operators - '   ||
1922                               'l_array_join_condition(' || i || ') = ' ||
1923                                l_array_join_condition (i)
1924                ,p_level    => C_LEVEL_PROCEDURE
1925                ,p_module   => l_log_module);
1926 
1927          END IF;
1928 
1929       END LOOP;
1930    END IF;
1931 END IF;
1932 
1933 --
1934 IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
1935 
1936       trace
1937          (p_msg      => 'END of AddOuterJoinOps'
1938          ,p_level    => C_LEVEL_PROCEDURE
1939          ,p_module   => l_log_module);
1940 
1941 END IF;
1942 
1943   RETURN NVL(l_out_where_clause,p_join_condition);
1944 
1945 END AddOuterJoinOps;
1946 
1947 
1948 --
1949 --+==========================================================================+
1950 --|                                                                          |
1951 --| PUBLIC FUNCTION                                                          |
1952 --|                                                                          |
1953 --|                                                                          |
1954 --|                                                                          |
1955 --+==========================================================================+
1956 --
1957 --
1958 FUNCTION CallExtractIntegrityChecker  (
1959   p_application_id               IN  NUMBER
1960 , p_entity_code                  IN  VARCHAR2
1961 , p_event_class_code             IN  VARCHAR2
1962 , p_amb_context_code             IN  VARCHAR2
1963 , p_product_rule_type_code       IN  VARCHAR2
1964 , p_product_rule_code            IN  VARCHAR2
1965 --
1966 , p_array_evt_source_index       IN xla_cmp_source_pkg.t_array_ByInt
1967 --
1968 , p_array_application_id         IN xla_cmp_source_pkg.t_array_Num
1969 , p_array_source_code            IN xla_cmp_source_pkg.t_array_VL30
1970 , p_array_source_type_code       IN xla_cmp_source_pkg.t_array_VL1
1971 , p_array_datatype_code          IN xla_cmp_source_pkg.t_array_VL1
1972 , p_array_translated_flag        IN xla_cmp_source_pkg.t_array_VL1
1973 --
1974 , p_array_evt_source_Level       OUT NOCOPY xla_cmp_source_pkg.t_array_VL1
1975 --
1976 , p_array_object_name            OUT NOCOPY xla_cmp_source_pkg.t_array_VL30
1977 , p_array_parent_object_index    OUT NOCOPY xla_cmp_source_pkg.t_array_ByInt
1978 , p_array_object_type            OUT NOCOPY xla_cmp_source_pkg.t_array_VL30
1979 , p_array_object_hash_id         OUT NOCOPY xla_cmp_source_pkg.t_array_VL30
1980 , p_array_populated_flag         OUT NOCOPY xla_cmp_source_pkg.t_array_VL1
1981 --
1982 , p_array_ref_obj_flag           OUT NOCOPY xla_cmp_source_pkg.t_array_VL1
1983 , p_array_join_condition         OUT NOCOPY xla_cmp_source_pkg.t_array_VL2000
1984 --
1985 , p_array_h_source_index         OUT NOCOPY xla_cmp_source_pkg.t_array_ByInt
1986 , p_array_h_table_index          OUT NOCOPY xla_cmp_source_pkg.t_array_ByInt
1987 , p_array_h_mls_source_index     OUT NOCOPY xla_cmp_source_pkg.t_array_ByInt
1988 , p_array_h_mls_table_index      OUT NOCOPY xla_cmp_source_pkg.t_array_ByInt
1989 , p_array_l_source_index         OUT NOCOPY xla_cmp_source_pkg.t_array_ByInt
1990 , p_array_l_table_index          OUT NOCOPY xla_cmp_source_pkg.t_array_ByInt
1991 , p_array_l_mls_source_index     OUT NOCOPY xla_cmp_source_pkg.t_array_ByInt
1992 , p_array_l_mls_table_index      OUT NOCOPY xla_cmp_source_pkg.t_array_ByInt
1993 )
1994 RETURN BOOLEAN
1995 IS
1996 --
1997 l_IsExtractValid               BOOLEAN:=TRUE;
1998 --
1999 l_array_evt_source_index       xla_cmp_source_pkg.t_array_ByInt;
2000 l_array_application_id         xla_cmp_source_pkg.t_array_Num;
2001 l_array_source_code            xla_cmp_source_pkg.t_array_VL30;
2002 l_array_source_type_code       xla_cmp_source_pkg.t_array_VL1;
2003 l_array_datatype_code          xla_cmp_source_pkg.t_array_VL1;
2004 l_array_translated_flag        xla_cmp_source_pkg.t_array_VL1;
2005 --
2006 l_array_evt_source_Level       xla_cmp_source_pkg.t_array_VL1;
2007 --
2008 l_array_object_name            xla_cmp_source_pkg.t_array_VL30;
2009 l_array_parent_object_index    xla_cmp_source_pkg.t_array_ByInt;
2010 l_array_object_type            xla_cmp_source_pkg.t_array_VL30;
2011 l_array_object_hash_id         xla_cmp_source_pkg.t_array_VL30;
2012 l_array_populated_flag         xla_cmp_source_pkg.t_array_VL1;
2016 --
2013 --
2014 l_array_ref_obj_flag           xla_cmp_source_pkg.t_array_VL1;
2015 l_array_join_condition         xla_cmp_source_pkg.t_array_VL2000;
2017 l_array_h_source_index         xla_cmp_source_pkg.t_array_ByInt;
2018 l_array_h_table_index          xla_cmp_source_pkg.t_array_ByInt;
2019 l_array_h_mls_source_index     xla_cmp_source_pkg.t_array_ByInt;
2020 l_array_h_mls_table_index      xla_cmp_source_pkg.t_array_ByInt;
2021 l_array_l_source_index         xla_cmp_source_pkg.t_array_ByInt;
2022 l_array_l_table_index          xla_cmp_source_pkg.t_array_ByInt;
2023 l_array_l_mls_source_index     xla_cmp_source_pkg.t_array_ByInt;
2024 l_array_l_mls_table_index      xla_cmp_source_pkg.t_array_ByInt;
2025 l_log_module                   VARCHAR2(240);
2026 --
2027 BEGIN
2028 --
2029 IF g_log_enabled THEN
2030       l_log_module := C_DEFAULT_MODULE||'.CallExtractIntegrityChecker';
2031 END IF;
2032 --
2033 IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
2034 
2035       trace
2036          (p_msg      => 'BEGIN of CallExtractIntegrityChecker'
2037          ,p_level    => C_LEVEL_PROCEDURE
2038          ,p_module   => l_log_module);
2039 
2040 END IF;
2041 
2042 -- Set application ID
2043 
2044    g_application_id := p_application_id;
2045 --
2046 -- init PL/SQL arrays
2047 --
2048 l_array_evt_source_index    := p_array_evt_source_index;
2049 l_array_application_id      := p_array_application_id ;
2050 l_array_source_code         := p_array_source_code ;
2051 l_array_source_type_code    := p_array_source_type_code;
2052 l_array_datatype_code       := p_array_datatype_code;
2053 l_array_translated_flag     := p_array_translated_flag;
2054 --
2055 IF p_array_evt_source_index.COUNT > 0 THEN
2056 --
2057 --
2058     InitSourceArrays  (
2059       l_array_evt_source_index
2060     , l_array_application_id
2061     , l_array_source_code
2062     , l_array_source_type_code
2063     , l_array_datatype_code
2064     , l_array_translated_flag
2065     );
2066 
2067 --
2068 -- Insert sources in xla_evt_class_sources_gt GT table
2069 --
2070     InsertSourcesIntoGtTable  (
2071       p_application_id
2072     , p_entity_code
2073     , p_event_class_code
2074     , l_array_evt_source_index
2075     , l_array_application_id
2076     , l_array_source_code
2077     , l_array_source_type_code
2078     , l_array_datatype_code
2079     , l_array_translated_flag
2080     );
2081 --
2082 IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
2083     trace
2084           (p_msg      => '-> CALL xla_extract_integrity_pkg.Validate_sources_with_extract API'
2085          ,p_level    => C_LEVEL_PROCEDURE
2086          ,p_module   => l_log_module);
2087 
2088 END IF;
2089 --
2090 -- Call Extract Integrity Checker
2091 --
2092 l_IsExtractValid := xla_extract_integrity_pkg.Validate_sources_with_extract
2093           (p_application_id
2094           ,p_entity_code
2095           ,p_event_class_code
2096           ,p_amb_context_code
2097           ,p_product_rule_type_code
2098           ,p_product_rule_code
2099           );
2100 --
2101 IF (C_LEVEL_STATEMENT >= g_log_level) THEN
2102    IF l_IsExtractValid THEN
2103       trace
2104          (p_msg      => 'l_IsExtractValid = TRUE'
2105          ,p_level    => C_LEVEL_STATEMENT
2106          ,p_module   => l_log_module);
2107    ELSE
2108       trace
2109          (p_msg      => 'l_IsExtractValid = FALSE'
2110          ,p_level    => C_LEVEL_STATEMENT
2111          ,p_module   => l_log_module);
2112    END IF;
2113 END IF;
2114 
2115 IF l_IsExtractValid  THEN
2116 --
2117 -- Get source levels
2118 --
2119    GetSourceLevels(
2120       p_application_id
2121     , p_entity_code
2122     , p_event_class_code
2123     , l_array_evt_source_Level
2124     );
2125 --
2126 -- Get Extract Objects
2127 --
2128   GetExtractObjects(
2129     p_application_id
2130   , p_entity_code
2131   , p_event_class_code
2132   , l_array_object_name
2133   , l_array_parent_object_index
2134   , l_array_object_type
2135   , l_array_object_hash_id
2136   , l_array_populated_flag
2137   --
2138   , l_array_ref_obj_flag
2139   , l_array_join_condition
2140   );
2141 --
2142 -- Get Sources with Extract objects
2143 --
2144    GetSourcesWithExtractObject(
2145        p_application_id
2146      , p_entity_code
2147      , p_event_class_code
2148      , l_array_object_name
2149      --
2150      , l_array_h_source_index
2151      , l_array_h_table_index
2152      --
2153      , l_array_h_mls_source_index
2154      , l_array_h_mls_table_index
2155      --
2156      , l_array_l_source_index
2157      , l_array_l_table_index
2158      --
2159      , l_array_l_mls_source_index
2160      , l_array_l_mls_table_index
2161    );
2162 
2163 END IF;
2164 --
2165 --
2166 p_array_evt_source_Level       := l_array_evt_source_Level;
2167 --
2168 p_array_object_name            := l_array_object_name;
2169 p_array_parent_object_index    := l_array_parent_object_index;
2170 p_array_object_type            := l_array_object_type;
2171 p_array_object_hash_id         := l_array_object_hash_id;
2172 p_array_populated_flag         := l_array_populated_flag;
2173 --
2174 p_array_ref_obj_flag           := l_array_ref_obj_flag;
2178 p_array_h_table_index          := l_array_h_table_index;
2175 p_array_join_condition         := l_array_join_condition;
2176 --
2177 p_array_h_source_index         := l_array_h_source_index;
2179 p_array_h_mls_source_index     := l_array_h_mls_source_index;
2180 p_array_h_mls_table_index      := l_array_h_mls_table_index;
2181 p_array_l_source_index         := l_array_l_source_index;
2182 p_array_l_table_index          := l_array_l_table_index;
2183 p_array_l_mls_source_index     := l_array_l_mls_source_index;
2184 p_array_l_mls_table_index      := l_array_l_mls_table_index;
2185 --
2186 --
2187 END IF;
2188 --
2189 
2190 IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
2191    IF l_IsExtractValid THEN
2192       trace
2193          (p_msg      => 'return value (l_IsExtractValid) = TRUE'
2194          ,p_level    => C_LEVEL_PROCEDURE
2195          ,p_module   => l_log_module);
2196    ELSE
2197       trace
2198          (p_msg      => 'return value (l_IsExtractValid) = FALSE'
2199          ,p_level    => C_LEVEL_PROCEDURE
2200          ,p_module   => l_log_module);
2201    END IF;
2202 
2203    trace
2204       (p_msg      => 'END of CallExtractIntegrityChecker'
2205       ,p_level    => C_LEVEL_PROCEDURE
2206       ,p_module   => l_log_module);
2207 END IF;
2208 
2209 RETURN l_IsExtractValid;
2210 --
2211 EXCEPTION
2212 WHEN xla_exceptions_pkg.application_exception   THEN
2213    RETURN FALSE;
2214 WHEN OTHERS    THEN
2215    xla_exceptions_pkg.raise_message
2216       (p_location => 'xla_cmp_extract_pkg.CallExtractIntegrityChecker ');
2217 END CallExtractIntegrityChecker;
2218 --
2219 --
2220 --+==========================================================================+
2221 --|                                                                          |
2222 --| GENERATION of Accounting Event Extract                                   |
2223 --|                                                                          |
2224 --|                                                                          |
2225 --|                                                                          |
2226 --|                                                                          |
2227 --|                                                                          |
2228 --|                                                                          |
2229 --|                                                                          |
2230 --|                                                                          |
2231 --|                                                                          |
2232 --|                                                                          |
2233 --|                                                                          |
2234 --|                                                                          |
2235 --|                                                                          |
2236 --|                                                                          |
2237 --|                                                                          |
2238 --|                                                                          |
2239 --|                                                                          |
2240 --|                                                                          |
2241 --|                                                                          |
2242 --|                                                                          |
2243 --|                                                                          |
2244 --|                                                                          |
2245 --|                                                                          |
2246 --|                                                                          |
2247 --|                                                                          |
2248 --|                                                                          |
2249 --|                                                                          |
2250 --|                                                                          |
2251 --|                                                                          |
2252 --|                                                                          |
2253 --|                                                                          |
2254 --|                                                                          |
2255 --|                                                                          |
2256 --|                                                                          |
2257 --|                                                                          |
2258 --|                                                                          |
2259 --+==========================================================================+
2260 --
2261 --
2262 --+==========================================================================+
2263 --|                                                                          |
2264 --| PRIVATE  function                                                        |
2265 --|                                                                          |
2266 --|   Generate the declaration of the sturcture for the line variables       |
2267 --|                                                                          |
2268 --|                                                                          |
2269 --+==========================================================================+
2270 --
2271 FUNCTION GenerateLineStructure  (
2275 --
2272   p_array_table_name             IN xla_cmp_source_pkg.t_array_VL30
2273 --
2274 , p_array_source_code            IN xla_cmp_source_pkg.t_array_VL30
2276 , p_array_l_source_index         IN xla_cmp_source_pkg.t_array_ByInt
2277 , p_array_l_table_index          IN xla_cmp_source_pkg.t_array_ByInt
2278 --
2279 , p_array_l_mls_source_index     IN xla_cmp_source_pkg.t_array_ByInt
2280 , p_array_l_mls_table_index      IN xla_cmp_source_pkg.t_array_ByInt
2281 --
2282 )
2283 RETURN VARCHAR2
2284 IS
2285 --
2286 
2287 C_LINE_STRUCTURE        CONSTANT VARCHAR2(2000):=
2288 'TYPE t_array_source_$Index$ IS TABLE OF $table$.$column$%TYPE INDEX BY BINARY_INTEGER;';
2289 --
2290 l_LineTypes                     VARCHAR2(32000);
2291 l_LineType                      VARCHAR2(2000);
2292 l_log_module                    VARCHAR2(240);
2293 --
2294 BEGIN
2295 --
2296 IF g_log_enabled THEN
2297       l_log_module := C_DEFAULT_MODULE||'.GenerateLineStructure';
2298 END IF;
2299 --
2300 IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
2301 
2302       trace
2303          (p_msg      => 'BEGIN of GenerateLineStructure'
2304          ,p_level    => C_LEVEL_PROCEDURE
2305          ,p_module   => l_log_module);
2306 
2307 END IF;
2308 
2309 l_LineTypes:= NULL;
2310 
2311 IF p_array_l_source_index. COUNT > 0 THEN
2312 --
2313 FOR Idx IN p_array_l_source_index.FIRST .. p_array_l_source_index.LAST LOOP
2314 --
2315   IF p_array_l_source_index.EXISTS(Idx)  THEN
2316   --
2317       l_LineType := C_LINE_STRUCTURE;
2318       --
2319       l_LineType := REPLACE(l_LineType,'$Index$' , Idx);
2320       l_LineType := REPLACE(l_LineType,'$table$' ,
2321                            p_array_table_name(p_array_l_table_index(Idx)));
2322       l_LineType := REPLACE(l_LineType,'$column$', p_array_source_code(Idx));
2323       --
2324       l_LineTypes := l_LineTypes ||g_chr_newline || l_LineType ;
2325   --
2326   END IF;
2327 --
2328 END LOOP;
2329 --
2330 END IF;
2331 --
2332 -- structure of mls line sources
2333 --
2334 IF p_array_l_mls_source_index.COUNT > 0 THEN
2335 --
2336 FOR Idx IN p_array_l_mls_source_index.FIRST .. p_array_l_mls_source_index.LAST LOOP
2337 --
2338   IF p_array_l_mls_source_index.EXISTS(Idx)  THEN
2339   --
2340       l_LineType := C_LINE_STRUCTURE;
2341       --
2342       l_LineType := REPLACE(l_LineType,'$Index$' , Idx);
2343       l_LineType := REPLACE(l_LineType,'$table$' ,
2344                             p_array_table_name(p_array_l_mls_table_index(Idx)));
2345       l_LineType := REPLACE(l_LineType,'$column$', p_array_source_code(Idx));
2346       --
2347       l_LineTypes := l_LineTypes || g_chr_newline || l_LineType ;
2348   --
2349   END IF;
2350 --
2351 END LOOP;
2352 --
2353 END IF;
2354 --
2355 IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
2356 
2357       trace
2358          (p_msg      => 'END of GenerateLineStructure'
2359          ,p_level    => C_LEVEL_PROCEDURE
2360          ,p_module   => l_log_module);
2361 
2362 END IF;
2363 --
2364 RETURN l_LineTypes;
2365 EXCEPTION
2366  WHEN xla_exceptions_pkg.application_exception   THEN
2367         RETURN NULL;
2368  WHEN OTHERS    THEN
2369       xla_exceptions_pkg.raise_message
2370          (p_location => 'xla_cmp_extract_pkg.GenerateLineStructure ');
2371 END GenerateLineStructure;
2372 --
2373 --
2374 --+==========================================================================+
2375 --|                                                                          |
2376 --| PRIVATE  function                                                        |
2377 --|                                                                          |
2378 --|    Generate the Declaration of header variables                          |
2379 --|                                                                          |
2380 --+==========================================================================+
2381 --
2382 
2383 FUNCTION GenerateHdrVariables
2384        (p_array_h_source_index         IN xla_cmp_source_pkg.t_array_ByInt
2385        ,p_array_h_mls_source_index     IN xla_cmp_source_pkg.t_array_ByInt
2386        ,p_array_source_code            IN xla_cmp_source_pkg.t_array_VL30
2387        ,p_array_lookup_type            IN xla_cmp_source_pkg.t_array_VL30
2388        ,p_array_view_application_id    IN xla_cmp_source_pkg.t_array_Num)
2389 RETURN VARCHAR2 IS
2390 
2391 C_HEADER_VAR     CONSTANT VARCHAR2(2000) :='l_array_source_$Index$              t_array_source_$Index$;';
2392 C_LOOKUP_VAR     CONSTANT VARCHAR2(100)  :='l_array_source_$Index$_meaning      t_array_lookup_meaning;';
2393 
2394 l_HdrVariables              VARCHAR2(32000);
2395 l_one_var                   VARCHAR2(2000);
2396 l_log_module                VARCHAR2(240);
2397 
2398 BEGIN
2399    IF g_log_enabled THEN
2400       l_log_module := C_DEFAULT_MODULE||'.GenerateHdrVariables';
2401    END IF;
2402 
2403    IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
2404       trace
2405          (p_msg      => 'BEGIN of GenerateHdrVariables'
2406          ,p_level    => C_LEVEL_PROCEDURE
2407          ,p_module   => l_log_module);
2408    END IF;
2409 
2410    --
2411    -- declare the standard header variables
2412    --
2413    l_one_var       :=  NULL;
2414    l_HdrVariables  :=  l_one_var ;
2415 
2419             l_one_var       := C_HEADER_VAR;
2416    IF p_array_h_source_index.COUNT > 0 THEN
2417       FOR Idx IN p_array_h_source_index.FIRST .. p_array_h_source_index.LAST LOOP
2418          IF p_array_h_source_index.EXISTS(Idx)  THEN
2420 
2421             IF p_array_lookup_type.EXISTS(Idx) AND
2422                p_array_lookup_type(Idx) IS NOT NULL AND
2423                p_array_view_application_id.EXISTS(Idx) AND
2424                p_array_view_application_id(Idx) IS NOT NULL
2425             THEN
2426                l_one_var := l_one_var|| g_chr_newline ||C_LOOKUP_VAR;
2427             END IF;
2428             l_one_var       := REPLACE(l_one_var,'$Index$' , Idx);
2429             l_HdrVariables  := l_HdrVariables || g_chr_newline || l_one_var ;
2430          END IF;
2431       END LOOP;
2432    END IF;
2433 
2434    --
2435    -- declare the mls line variables
2436    --
2437    IF p_array_h_mls_source_index.COUNT > 0 THEN
2438       FOR Idx IN p_array_h_mls_source_index.FIRST .. p_array_h_mls_source_index.LAST LOOP
2439          IF p_array_h_mls_source_index.EXISTS(Idx)  THEN
2440             l_one_var       := C_HEADER_VAR;
2441 
2442             IF p_array_lookup_type.EXISTS(Idx) AND
2443                p_array_lookup_type(Idx) IS NOT NULL AND
2444                p_array_view_application_id.EXISTS(Idx) AND
2445                p_array_view_application_id(Idx) IS NOT NULL
2446             THEN
2447                l_one_var := l_one_var|| g_chr_newline ||C_LOOKUP_VAR;
2448             END IF;
2449             l_one_var       := REPLACE(l_one_var,'$Index$' , Idx);
2450             l_HdrVariables  := l_HdrVariables || g_chr_newline || l_one_var ;
2451          END IF;
2452       END LOOP;
2453    END IF;
2454 
2455    IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
2456       trace
2457          (p_msg      => 'END of GenerateHdrVariables'
2458          ,p_level    => C_LEVEL_PROCEDURE
2459          ,p_module   => l_log_module);
2460    END IF;
2461 
2462    RETURN l_HdrVariables;
2463 EXCEPTION
2464 WHEN xla_exceptions_pkg.application_exception THEN
2465    RETURN NULL;
2466 WHEN OTHERS    THEN
2467    xla_exceptions_pkg.raise_message
2468       (p_location => 'xla_cmp_extract_pkg.GenerateHdrVariables ');
2469 END GenerateHdrVariables;
2470 --
2471 --
2472 --+==========================================================================+
2473 --|                                                                          |
2474 --| PRIVATE  function                                                        |
2475 --|                                                                          |
2476 --|   Generate Fetch on header cursor into header variables                  |
2477 --|                                                                          |
2478 --+==========================================================================+
2479 --
2480 FUNCTION GenerateFetchHeaderCursor  (
2481   p_array_h_source_index         IN xla_cmp_source_pkg.t_array_ByInt
2482 , p_array_h_mls_source_index     IN xla_cmp_source_pkg.t_array_ByInt
2483 --
2484 , p_array_lookup_type            IN xla_cmp_source_pkg.t_array_VL30
2485 , p_array_view_application_id    IN xla_cmp_source_pkg.t_array_Num
2486 )
2487 RETURN VARCHAR2
2488 IS
2489 --
2490 l_hdr_variables                         VARCHAR2(32000);
2491 l_one_variable                          VARCHAR2(1000);
2492 --
2493 C_HDR_VAR         CONSTANT              VARCHAR2(1000):='      , l_array_source_$Index$';
2494 C_LOOKUP_VAR      CONSTANT              VARCHAR2(100) :='      , l_array_source_$Index$_meaning';
2495 --
2496 l_log_module                            VARCHAR2(240);
2497 BEGIN
2498 --
2499 IF g_log_enabled THEN
2500       l_log_module := C_DEFAULT_MODULE||'.GenerateFetchHeaderCursor';
2501 END IF;
2502 --
2503 IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
2507          ,p_level    => C_LEVEL_PROCEDURE
2504 
2505       trace
2506          (p_msg      => 'BEGIN of GenerateFetchHeaderCursor'
2508          ,p_module   => l_log_module);
2509 
2510 END IF;
2511 --
2512 l_hdr_variables := null;
2513 --
2514 IF p_array_h_source_index.COUNT > 0 THEN
2515 --
2516 FOR Idx IN p_array_h_source_index.FIRST .. p_array_h_source_index.LAST LOOP
2517 
2518   IF p_array_h_source_index.EXISTS(Idx) THEN
2519   --
2520     l_one_variable :=  C_HDR_VAR;
2521      --
2522      IF p_array_lookup_type.EXISTS(Idx) AND
2523         p_array_lookup_type(Idx) IS NOT NULL AND
2524         p_array_view_application_id.EXISTS(Idx) AND
2525         p_array_view_application_id(Idx) IS NOT NULL THEN
2526 
2527         l_one_variable := l_one_variable|| g_chr_newline ||C_LOOKUP_VAR;
2528 
2529      END IF;
2530     --
2531     l_one_variable :=  REPLACE(l_one_variable,'$Index$' , Idx);
2532     l_hdr_variables:=  l_hdr_variables || g_chr_newline || l_one_variable;
2533   --
2534   END IF;
2535 
2536 END LOOP;
2537 --
2538 END IF;
2539 --
2540 IF p_array_h_mls_source_index.COUNT > 0 THEN
2541 --
2542 FOR Idx IN p_array_h_mls_source_index.FIRST .. p_array_h_mls_source_index.LAST LOOP
2543   IF p_array_h_mls_source_index.EXISTS(Idx) THEN
2544   --
2545     l_one_variable :=  C_HDR_VAR;
2546      --
2547      IF p_array_lookup_type.EXISTS(Idx) AND
2548         p_array_lookup_type(Idx) IS NOT NULL AND
2549         p_array_view_application_id.EXISTS(Idx) AND
2550         p_array_view_application_id(Idx) IS NOT NULL THEN
2551 
2552         l_one_variable := l_one_variable|| g_chr_newline ||C_LOOKUP_VAR;
2553 
2554      END IF;
2555     --
2556     l_one_variable :=  REPLACE(l_one_variable,'$Index$' , Idx);
2557     l_hdr_variables:=  l_hdr_variables || g_chr_newline || l_one_variable;
2558   --
2559   END IF;
2560 END LOOP;
2561 --
2562 END IF;
2563 --
2564 --
2565 IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
2566 
2567       trace
2568          (p_msg      => 'END of GenerateFetchHeaderCursor'
2569          ,p_level    => C_LEVEL_PROCEDURE
2570          ,p_module   => l_log_module);
2571 
2572 END IF;
2573 --
2574 RETURN l_hdr_variables;
2575 EXCEPTION
2576  WHEN xla_exceptions_pkg.application_exception   THEN
2577         RETURN NULL;
2578  WHEN OTHERS    THEN
2579       xla_exceptions_pkg.raise_message
2580          (p_location => 'xla_cmp_extract_pkg.GenerateFetchHeaderCursor ');
2581 END GenerateFetchHeaderCursor;
2582 --
2583 --
2584 --+==========================================================================+
2585 --|                                                                          |
2586 --| PRIVATE  function                                                        |
2587 --|                                                                          |
2588 --|    Generate the Declaration of line variables                            |
2589 --|                                                                          |
2590 --+==========================================================================+
2591 --
2592 --
2593 FUNCTION GenerateLineVariables(
2594   p_array_l_source_index         IN xla_cmp_source_pkg.t_array_ByInt
2595 , p_array_l_mls_source_index     IN xla_cmp_source_pkg.t_array_ByInt
2596 --
2597 , p_array_source_code            IN xla_cmp_source_pkg.t_array_VL30
2598 , p_array_lookup_type            IN xla_cmp_source_pkg.t_array_VL30
2599 , p_array_view_application_id    IN xla_cmp_source_pkg.t_array_Num
2600 )
2601 RETURN VARCHAR2
2602 IS
2603 --
2604 C_LINE_VAR       CONSTANT VARCHAR2(2000) :='l_array_source_$Index$      t_array_source_$Index$;';
2605 C_LOOKUP_VAR     CONSTANT VARCHAR2(100)  :='l_array_source_$Index$_meaning      t_array_lookup_meaning;';
2606 --
2607 l_LineVariables             VARCHAR2(32000);
2608 l_one_var                   VARCHAR2(2000);
2609 --
2610 l_log_module                VARCHAR2(240);
2611 --
2612 BEGIN
2613 --
2614 IF g_log_enabled THEN
2615       l_log_module := C_DEFAULT_MODULE||'.GenerateLineVariables';
2616 END IF;
2617 --
2618 IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
2619 
2620       trace
2621          (p_msg      => 'BEGIN of GenerateLineVariables'
2622          ,p_level    => C_LEVEL_PROCEDURE
2623          ,p_module   => l_log_module);
2624 
2625 END IF;
2626 --
2627 -- declare the standard line variables
2628 --
2629 l_one_var       :=  NULL;
2630 l_LineVariables :=  l_one_var ;
2631 --
2632 IF p_array_l_source_index.COUNT > 0 THEN
2633 --
2634 FOR Idx IN p_array_l_source_index.FIRST .. p_array_l_source_index.LAST LOOP
2635 --
2636   IF p_array_l_source_index.EXISTS(Idx)  THEN
2637   --
2638       l_one_var       := C_LINE_VAR;
2639        --
2640        IF p_array_lookup_type.EXISTS(Idx) AND
2641           p_array_lookup_type(Idx) IS NOT NULL AND
2642           p_array_view_application_id.EXISTS(Idx) AND
2643           p_array_view_application_id(Idx) IS NOT NULL THEN
2644 
2645           l_one_var := l_one_var|| g_chr_newline ||C_LOOKUP_VAR;
2646 
2647        END IF;
2648        --
2649       l_one_var       := REPLACE(l_one_var,'$Index$' , Idx);
2650       l_LineVariables := l_LineVariables || g_chr_newline || l_one_var ;
2651   --
2652   END IF;
2653 --
2654 END LOOP;
2655 --
2656 END IF;
2657 --
2661 --
2658 -- declare the mls line variables
2659 --
2660 IF p_array_l_mls_source_index.COUNT > 0 THEN
2662 FOR Idx IN p_array_l_mls_source_index.FIRST .. p_array_l_mls_source_index.LAST LOOP
2663 --
2664   IF p_array_l_mls_source_index.EXISTS(Idx)  THEN
2665   --
2666       l_one_var       := C_LINE_VAR;
2667       --
2668       IF p_array_lookup_type.EXISTS(Idx) AND
2669           p_array_lookup_type(Idx) IS NOT NULL AND
2670           p_array_view_application_id.EXISTS(Idx) AND
2671           p_array_view_application_id(Idx) IS NOT NULL THEN
2672 
2673           l_one_var := l_one_var|| g_chr_newline ||C_LOOKUP_VAR;
2674 
2675       END IF;
2676       --
2677       l_one_var       := REPLACE(l_one_var,'$Index$' , Idx);
2678       l_LineVariables := l_LineVariables || g_chr_newline || l_one_var ;
2679 
2680   END IF;
2681 --
2682 END LOOP;
2683 --
2684 END IF;
2685 --
2686 --
2687 IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
2688 
2689       trace
2690          (p_msg      => 'END of GenerateLineVariables'
2691          ,p_level    => C_LEVEL_PROCEDURE
2692          ,p_module   => l_log_module);
2693 
2694 END IF;
2695 --
2696 RETURN l_LineVariables;
2697 EXCEPTION
2698  WHEN xla_exceptions_pkg.application_exception   THEN
2699         RETURN NULL;
2700  WHEN OTHERS    THEN
2701       xla_exceptions_pkg.raise_message
2702          (p_location => 'xla_cmp_extract_pkg.GenerateLineVariables ');
2703 END GenerateLineVariables;
2704 --
2705 --
2706 --+==========================================================================+
2707 --|                                                                          |
2708 --| PRIVATE  function                                                        |
2709 --|                                                                          |
2710 --|   Generate Fetch on Line cursor into header variables                    |
2711 --|                                                                          |
2712 --+==========================================================================+
2713 --
2714 FUNCTION GenerateFetchLineCursor(
2715   p_array_l_source_index         IN xla_cmp_source_pkg.t_array_ByInt
2716 , p_array_l_mls_source_index     IN xla_cmp_source_pkg.t_array_ByInt
2717 --
2718 , p_array_source_code            IN xla_cmp_source_pkg.t_array_VL30
2719 , p_array_lookup_type            IN xla_cmp_source_pkg.t_array_VL30
2720 , p_array_view_application_id    IN xla_cmp_source_pkg.t_array_Num
2721 )
2722 RETURN VARCHAR2
2723 IS
2724 --
2725 C_LINE_VAR                     CONSTANT VARCHAR2(1000):='      , l_array_source_$Index$';
2726 C_LOOKUP_VAR                   CONSTANT VARCHAR2(1000):='      , l_array_source_$Index$_meaning';
2727 l_LineVariables                VARCHAR2(32000);
2728 l_one_var                      VARCHAR2(1000);
2729 --
2730 l_log_module                   VARCHAR2(240);
2731 --
2732 BEGIN
2733 --
2734 --
2735 IF g_log_enabled THEN
2736       l_log_module := C_DEFAULT_MODULE||'.GenerateFetchLineCursor';
2737 END IF;
2738 --
2739 IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
2740 
2741       trace
2742          (p_msg      => 'BEGIN of GenerateFetchLineCursor'
2743          ,p_level    => C_LEVEL_PROCEDURE
2744          ,p_module   => l_log_module);
2745 
2746 END IF;
2747 --
2748 --
2749 l_one_var       := '      , l_array_extract_line_num ';
2750 l_LineVariables := l_one_var ;
2751 --
2752 -- Fetch standard line variables
2753 --
2754 IF p_array_l_source_index.COUNT > 0 THEN
2755 --
2756 FOR Idx IN p_array_l_source_index.FIRST .. p_array_l_source_index.LAST LOOP
2757 --
2758   IF p_array_l_source_index.EXISTS(Idx)  THEN
2759   --
2760       l_one_var  :=  C_LINE_VAR ;
2761       --
2765           p_array_view_application_id(Idx) IS NOT NULL THEN
2762       IF p_array_lookup_type.EXISTS(Idx) AND
2763           p_array_lookup_type(Idx) IS NOT NULL AND
2764           p_array_view_application_id.EXISTS(Idx) AND
2766 
2767             l_one_var := l_one_var|| g_chr_newline ||C_LOOKUP_VAR;
2768 
2769       END IF;
2770       --
2771       l_one_var  := REPLACE(l_one_var,'$Index$' , Idx);
2772       l_LineVariables := l_LineVariables || g_chr_newline || l_one_var ;
2773   --
2774   END IF;
2775 --
2776 END LOOP;
2777 --
2778 END IF;
2779 --
2780 -- Fetch mls line variables
2781 --
2782 IF p_array_l_mls_source_index.COUNT > 0 THEN
2783 --
2784 FOR Idx IN p_array_l_mls_source_index.FIRST .. p_array_l_mls_source_index.LAST LOOP
2785 --
2786   IF p_array_l_mls_source_index.EXISTS(Idx) THEN
2787   --
2788       l_one_var  :=  C_LINE_VAR;
2789       --
2790       IF p_array_lookup_type.EXISTS(Idx) AND
2791           p_array_lookup_type(Idx) IS NOT NULL AND
2792           p_array_view_application_id.EXISTS(Idx) AND
2793           p_array_view_application_id(Idx) IS NOT NULL THEN
2794 
2795             l_one_var := l_one_var|| g_chr_newline ||C_LOOKUP_VAR;
2796 
2797       END IF;
2798       --
2799       l_one_var  := REPLACE(l_one_var,'$Index$' , Idx);
2800       l_LineVariables := l_LineVariables || g_chr_newline || l_one_var ;
2801   --
2802   END IF;
2803 --
2804 END LOOP;
2805 --
2806 END IF;
2807 --
2808 IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
2809 
2810       trace
2811          (p_msg      => 'END of GenerateFetchLineCursor'
2812          ,p_level    => C_LEVEL_PROCEDURE
2813          ,p_module   => l_log_module);
2814 
2815 END IF;
2816 --
2817 RETURN l_LineVariables;
2818 EXCEPTION
2819  WHEN xla_exceptions_pkg.application_exception   THEN
2820         RETURN NULL;
2821  WHEN OTHERS    THEN
2822       xla_exceptions_pkg.raise_message
2823          (p_location => 'xla_cmp_extract_pkg.GenerateFetchLineCursor ');
2824 END GenerateFetchLineCursor;
2825 --
2826 --+==========================================================================+
2827 --|                                                                          |
2828 --| PRIVATE  Procedure                                                       |
2829 --|                                                                          |
2830 --|      Get Different Extract Object used by header or Line Cursor          |
2831 --|                                                                          |
2832 --+==========================================================================+
2833 --
2834 PROCEDURE GetUsedExtractObject(
2835   p_array_table_index        IN xla_cmp_source_pkg.t_array_ByInt
2836 , p_array_parent_table_index IN xla_cmp_source_pkg.t_array_ByInt
2837 , p_array_diff_table_index   IN OUT NOCOPY  xla_cmp_source_pkg.t_array_ByInt
2838 )
2839 IS
2840 --
2841 l_log_module                   VARCHAR2(240);
2842 i BINARY_INTEGER;
2843 --
2844 BEGIN
2845 --
2846 IF g_log_enabled THEN
2847       l_log_module := C_DEFAULT_MODULE||'.GetUsedExtractObject';
2848 END IF;
2849 --
2850 IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
2851 
2852       trace
2853          (p_msg      => 'BEGIN of GetUsedExtractObject'
2854          ,p_level    => C_LEVEL_PROCEDURE
2855          ,p_module   => l_log_module);
2856 
2857 END IF;
2858 --
2859 IF p_array_table_index.COUNT > 0 THEN
2860 --
2861 --
2862 FOR Idx IN p_array_table_index.FIRST .. p_array_table_index.LAST LOOP
2863    --
2864      IF p_array_table_index.EXISTS(Idx) THEN
2865        i := p_array_table_index(Idx);
2866        --
2867        p_array_diff_table_index(i) := i;
2868        --
2869        WHILE (p_array_parent_table_index.exists(i) and
2870                     p_array_parent_table_index(i)>0) LOOP
2871          i := p_array_parent_table_index(i);
2872          p_array_diff_table_index(i) := i;
2873        END LOOP;
2874 
2875      END IF;
2876    --
2877 END LOOP;
2878 --
2879 END IF;
2880 --
2881 IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
2882 
2883       trace
2884          (p_msg      => 'END of GetUsedExtractObject'
2885          ,p_level    => C_LEVEL_PROCEDURE
2886          ,p_module   => l_log_module);
2887 
2888 END IF;
2889 --
2890 EXCEPTION
2891  WHEN xla_exceptions_pkg.application_exception   THEN
2892         RAISE;
2893  WHEN OTHERS    THEN
2894       xla_exceptions_pkg.raise_message
2895          (p_location => 'xla_cmp_extract_pkg.GetUsedExtractObject ');
2896 END GetUsedExtractObject;
2897 --
2898 --
2899 --+==========================================================================+
2900 --|                                                                          |
2901 --| PRIVATE  FUNCTION                                                        |
2902 --|                                                                          |
2903 --|      Generate the column to extract for the header/line cursor           |
2904 --|      value of ($hdr_sources$ or $line_sources$)                          |
2905 --|                                                                          |
2906 --+==========================================================================+
2907 --
2911 , p_array_source_index           IN xla_cmp_source_pkg.t_array_ByInt
2908 FUNCTION GenerateExtractColumns(
2909   p_array_table_hash             IN xla_cmp_source_pkg.t_array_VL30
2910 , p_array_source_code            IN xla_cmp_source_pkg.t_array_VL30
2912 , p_array_table_index            IN xla_cmp_source_pkg.t_array_ByInt
2913 , p_array_lookup_type            IN xla_cmp_source_pkg.t_array_VL30
2914 , p_array_view_application_id    IN xla_cmp_source_pkg.t_array_Num
2915 )
2916 RETURN VARCHAR2
2917 IS
2918 --
2919 C_COLUMN_TO_EXTRACT  CONSTANT VARCHAR2(1000):= '  , $tab$.$column$    source_$Index$' ;
2920 C_LOOKUP_COLUMN      CONSTANT VARCHAR2(200):=  '  , fvl$Index$.meaning   source_$Index$_meaning' ;
2921 l_ColumnsToExtract   VARCHAR2(32000);
2922 l_OneColumn          VARCHAR2(1000);
2923 --
2924 l_log_module         VARCHAR2(240);
2925 --
2926 BEGIN
2927 --
2928 IF g_log_enabled THEN
2929       l_log_module := C_DEFAULT_MODULE||'.GenerateExtractColumns';
2930 END IF;
2931 --
2932 IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
2933 
2934       trace
2935          (p_msg      => 'BEGIN of GenerateExtractColumns'
2936          ,p_level    => C_LEVEL_PROCEDURE
2937          ,p_module   => l_log_module);
2938 
2939 END IF;
2940 --
2941 l_ColumnsToExtract := NULL;
2942 --
2943 IF p_array_source_index.COUNT > 0 THEN
2944 --
2945 FOR Idx IN p_array_source_index.FIRST .. p_array_source_index.LAST LOOP
2946    --
2947      IF p_array_source_index.EXISTS(Idx)  THEN
2948      --
2949         l_OneColumn := C_COLUMN_TO_EXTRACT ;
2950         --
2951         IF p_array_lookup_type.EXISTS(Idx) AND
2952            p_array_lookup_type(Idx) IS NOT NULL AND
2953            p_array_view_application_id.EXISTS(Idx) AND
2954            p_array_view_application_id(Idx) IS NOT NULL THEN
2955 
2956             l_OneColumn := l_OneColumn|| g_chr_newline ||C_LOOKUP_COLUMN;
2957 
2958          END IF;
2959         --
2960         l_OneColumn := REPLACE(l_OneColumn,'$tab$',
2961                                  p_array_table_hash(p_array_table_index(Idx))
2962                               );
2963                                  --
2964         l_OneColumn := REPLACE(l_OneColumn,'$column$',
2965                                  p_array_source_code(p_array_source_index(Idx))
2966                                );
2967                                  --
2968         l_OneColumn := REPLACE(l_OneColumn,'$Index$',Idx);
2969         --
2970         --
2971         l_ColumnsToExtract := l_ColumnsToExtract || g_chr_newline ;
2972         l_ColumnsToExtract := l_ColumnsToExtract || l_OneColumn   ;
2973         --
2974      END IF;
2975 --
2976 END LOOP;
2977 --
2978 END IF;
2979 --
2980 IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
2981 
2982       trace
2983          (p_msg      => 'END of GenerateExtractColumns'
2984          ,p_level    => C_LEVEL_PROCEDURE
2985          ,p_module   => l_log_module);
2986 
2987 END IF;
2988 --
2989 RETURN l_ColumnsToExtract;
2990 EXCEPTION
2991  WHEN xla_exceptions_pkg.application_exception   THEN
2992         RETURN NULL;
2993  WHEN OTHERS    THEN
2994       xla_exceptions_pkg.raise_message
2995          (p_location => 'xla_cmp_extract_pkg.GenerateExtractColumns ');
2996 END GenerateExtractColumns;
2997 --
2998 --+==========================================================================+
2999 --|                                                                          |
3000 --| PRIVATE  FUNCTION                                                        |
3001 --|                                                                          |
3002 --|                                                                          |
3003 --+==========================================================================+
3004 --
3005 FUNCTION GenerateLookupTables(
3006   p_array_source_index           IN xla_cmp_source_pkg.t_array_ByInt
3007 , p_array_table_index            IN xla_cmp_source_pkg.t_array_ByInt
3008 , p_array_lookup_type            IN xla_cmp_source_pkg.t_array_VL30
3009 , p_array_view_application_id    IN xla_cmp_source_pkg.t_array_Num
3010 )
3011 RETURN VARCHAR2
3012 IS
3013 --
3014 C_LOOKUP_TAB         CONSTANT     VARCHAR2(100) :='  , fnd_lookup_values    fvl$Index$';
3015 l_one_table                       VARCHAR2(1000);
3016 l_tables                          VARCHAR2(32000);
3017 --
3018 l_log_module                      VARCHAR2(240);
3019 --
3020 BEGIN
3021 --
3022 IF g_log_enabled THEN
3023       l_log_module := C_DEFAULT_MODULE||'.GenerateLookupTables';
3024 END IF;
3025 --
3026 IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
3027 
3028       trace
3029          (p_msg      => 'BEGIN of GenerateLookupTables'
3030          ,p_level    => C_LEVEL_PROCEDURE
3031          ,p_module   => l_log_module);
3032 
3033 END IF;
3034 --
3035 l_tables := NULL;
3036 --
3037 IF p_array_source_index.COUNT > 0 THEN
3038 --
3039 FOR Idx IN p_array_source_index.FIRST .. p_array_source_index.LAST LOOP
3040    --
3041      IF p_array_source_index.EXISTS(Idx) AND
3042         p_array_lookup_type.EXISTS(Idx) AND
3043         p_array_lookup_type(Idx) IS NOT NULL AND
3044         p_array_view_application_id.EXISTS(Idx) AND
3045         p_array_view_application_id(Idx) IS NOT NULL THEN
3046 
3050         l_tables  := l_tables|| g_chr_newline || l_one_table ;
3047         l_one_table := C_LOOKUP_TAB;
3048         l_one_table := REPLACE(l_one_table,'$Index$',Idx);
3049         --
3051         --
3052      END IF;
3053 --
3054 END LOOP;
3055 --
3056 END IF;
3057 --
3058 IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
3059 
3060       trace
3061          (p_msg      => 'END of GenerateLookupTables'
3062          ,p_level    => C_LEVEL_PROCEDURE
3063          ,p_module   => l_log_module);
3064 
3065 END IF;
3066 --
3067 RETURN l_tables;
3068 EXCEPTION
3069  WHEN xla_exceptions_pkg.application_exception   THEN
3070         RETURN NULL;
3071  WHEN OTHERS    THEN
3072       xla_exceptions_pkg.raise_message
3073          (p_location => 'xla_cmp_extract_pkg.GenerateLookupTables ');
3074 END GenerateLookupTables;
3075 --
3076 --
3077 --+==========================================================================+
3078 --|                                                                          |
3079 --| PRIVATE  FUNCTION                                                        |
3080 --|                                                                          |
3081 --|                                                                          |
3082 --+==========================================================================+
3083 --
3084 FUNCTION GenerateLookupClauses(
3085   p_array_source_index           IN xla_cmp_source_pkg.t_array_ByInt
3086 , p_array_table_index            IN xla_cmp_source_pkg.t_array_ByInt
3087 , p_array_table_name             IN xla_cmp_source_pkg.t_array_VL30
3088 , p_array_table_hash             IN xla_cmp_source_pkg.t_array_VL30
3089 , p_array_source_code            IN xla_cmp_source_pkg.t_array_VL30
3090 , p_array_lookup_type            IN xla_cmp_source_pkg.t_array_VL30
3091 , p_array_view_application_id    IN xla_cmp_source_pkg.t_array_Num
3092 )
3093 RETURN VARCHAR2
3094 IS
3095 --
3096 --
3097 C_LOOKUP_CLAUSE      CONSTANT     VARCHAR2(1000):='   AND fvl$Index$.lookup_type(+)         = ''$lookup_type$''
3098   AND fvl$Index$.lookup_code(+)         = $tab$.$source$
3099   AND fvl$Index$.view_application_id(+) = $view_application_id$
3100   AND fvl$Index$.language(+)            = USERENV(''LANG'')
3101   '
3102 ;
3103 l_one_clause                     VARCHAR2(1000);
3104 l_clauses                        VARCHAR2(32000);
3105 --
3106 l_log_module                     VARCHAR2(240);
3107 --
3108 BEGIN
3109 --
3110 IF g_log_enabled THEN
3111       l_log_module := C_DEFAULT_MODULE||'.GenerateLookupClauses';
3112 END IF;
3113 --
3114 IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
3115 
3116       trace
3117          (p_msg      => 'BEGIN of GenerateLookupClauses'
3118          ,p_level    => C_LEVEL_PROCEDURE
3119          ,p_module   => l_log_module);
3120 
3121 END IF;
3122 --
3123 l_clauses  := NULL;
3124 --
3125 IF p_array_source_index.COUNT > 0 THEN
3126 --
3127 FOR Idx IN p_array_source_index.FIRST .. p_array_source_index.LAST LOOP
3128    --
3129 
3130      IF p_array_source_index.EXISTS(Idx) AND
3131         p_array_lookup_type.EXISTS(Idx)  AND
3132         p_array_lookup_type(Idx) IS NOT NULL AND
3133         p_array_view_application_id.EXISTS(Idx) AND
3134         p_array_view_application_id(Idx) IS NOT NULL
3135 
3136       THEN
3137 
3138         l_one_clause := C_LOOKUP_CLAUSE;
3139         l_one_clause := REPLACE(l_one_clause,'$Index$',Idx);
3143         l_one_clause := REPLACE(l_one_clause,'$tab$',p_array_table_hash(p_array_table_index(Idx)));
3140         l_one_clause := REPLACE(l_one_clause,'$lookup_type$',p_array_lookup_type(Idx));
3141         l_one_clause := REPLACE(l_one_clause,'$view_application_id$',p_array_view_application_id(Idx));
3142         l_one_clause := REPLACE(l_one_clause,'$source$',p_array_source_code(Idx));
3144         --
3145         l_clauses  := l_clauses||  l_one_clause ;
3146         --
3147      END IF;
3148 --
3149 END LOOP;
3150 --
3151 END IF;
3152 --
3153 IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
3154 
3155       trace
3156          (p_msg      => 'END of GenerateLookupClauses'
3157          ,p_level    => C_LEVEL_PROCEDURE
3158          ,p_module   => l_log_module);
3159 
3160 END IF;
3161 --
3162 RETURN l_clauses;
3163 EXCEPTION
3164  WHEN xla_exceptions_pkg.application_exception   THEN
3165         RETURN NULL;
3166  WHEN OTHERS    THEN
3167       xla_exceptions_pkg.raise_message
3168          (p_location => 'xla_cmp_extract_pkg.GenerateLookupClauses ');
3169 END GenerateLookupClauses;
3170 --
3171 --+==========================================================================+
3172 --|                                                                          |
3173 --| PRIVATE  Procedure                                                       |
3174 --|                                                                          |
3175 --|      Get Different Extract Object used by header or Line Cursor          |
3176 --|                                                                          |
3177 --+==========================================================================+
3178 --
3179 FUNCTION GetAnAlwaysPopulatedObject(
3180   p_array_table_index         IN xla_cmp_source_pkg.t_array_ByInt
3181 , p_array_populated_flag      IN xla_cmp_source_pkg.t_array_VL1
3182 , p_array_ref_obj_flag        IN xla_cmp_source_pkg.t_array_VL1
3183 )
3184 RETURN NUMBER
3185 IS
3186 l_object_index              NUMBER;
3187 l_log_module                VARCHAR2(240);
3188 BEGIN
3189 --
3190 IF g_log_enabled THEN
3191       l_log_module := C_DEFAULT_MODULE||'.GetAnAlwaysPopulatedObject';
3192 END IF;
3193 --
3194 IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
3195 
3196       trace
3197          (p_msg      => 'BEGIN of GetAnAlwaysPopulatedObject'
3198          ,p_level    => C_LEVEL_PROCEDURE
3199          ,p_module   => l_log_module);
3200 
3201 END IF;
3202 --
3203 l_object_index:= NULL;
3204 --
3205 IF p_array_table_index.COUNT > 0 THEN
3206 --
3207 FOR Idx IN p_array_table_index.FIRST .. p_array_table_index.LAST LOOP
3208    --
3209      IF  p_array_table_index.EXISTS(Idx)
3210      AND l_object_index IS NULL
3211      AND p_array_populated_flag.EXISTS (Idx)
3212      AND NVL(p_array_populated_flag(Idx),'N') ='Y'
3213      AND NVL(p_array_ref_obj_flag(Idx),'N') = 'N'  THEN
3214         --
3215          l_object_index := Idx;
3216         --
3217      END IF;
3218    --
3219 END LOOP;
3220 
3221 END IF;
3222 --
3223 IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
3224 
3225       trace
3226          (p_msg      => 'END of GetAnAlwaysPopulatedObject'
3227          ,p_level    => C_LEVEL_PROCEDURE
3228          ,p_module   => l_log_module);
3229 
3230 END IF;
3231 --
3232 RETURN l_object_index;
3233 EXCEPTION
3234  WHEN xla_exceptions_pkg.application_exception   THEN
3235         RAISE;
3236  WHEN OTHERS    THEN
3237       xla_exceptions_pkg.raise_message
3238          (p_location => 'xla_cmp_extract_pkg.GetAnAlwaysPopulatedObject ');
3239 END GetAnAlwaysPopulatedObject;
3240 
3241 --+==========================================================================+
3242 --|                                                                          |
3243 --| PRIVATE  function                                                        |
3244 --|                                                                          |
3245 --|    Generate the declaration of the header Cursor : The Extract of        |
3246 --|    standard and MLS header sources from the Header Extract Object        |
3247 --|                                                                          |
3248 --|                                                                          |
3252        (p_array_table_name             IN xla_cmp_source_pkg.t_array_VL30
3249 --+==========================================================================+
3250 --
3251 FUNCTION GenerateHeaderCursor
3253        ,p_array_parent_table_index     IN xla_cmp_source_pkg.t_array_ByInt
3254        ,p_array_table_hash             IN xla_cmp_source_pkg.t_array_VL30
3255        ,p_array_populated_flag         IN xla_cmp_source_pkg.t_array_VL1
3256        ,p_array_ref_obj_flag           IN xla_cmp_source_pkg.t_array_VL1
3257        ,p_array_join_condition         IN xla_cmp_source_pkg.t_array_vl2000
3258        ,p_array_h_source_index         IN xla_cmp_source_pkg.t_array_ByInt
3259        ,p_array_h_table_index          IN xla_cmp_source_pkg.t_array_ByInt
3260        ,p_array_h_mls_source_index     IN xla_cmp_source_pkg.t_array_ByInt
3261        ,p_array_h_mls_table_index      IN xla_cmp_source_pkg.t_array_ByInt
3262        ,p_array_source_code            IN xla_cmp_source_pkg.t_array_VL30
3263        ,p_array_lookup_type            IN xla_cmp_source_pkg.t_array_VL30
3264        ,p_array_view_application_id    IN xla_cmp_source_pkg.t_array_Num
3265        ,p_procedure                    IN VARCHAR2)
3266 RETURN VARCHAR2 IS
3267 --
3268 l_hdr_cur                         VARCHAR2(32000);
3269 l_hdr_sources                     VARCHAR2(20000);
3270 l_hdr_tabs                        VARCHAR2(32000);
3271 l_hdr_clauses                     VARCHAR2(32000);
3272 --
3273 l_hdr_source                      VARCHAR2(1000);
3274 l_hdr_tab                         VARCHAR2(10000);
3275 l_hdr_clause                      VARCHAR2(10000);
3276 l_hdr_ref_clause                  VARCHAR2(10000);
3277 --
3278 l_h_count                         BINARY_INTEGER;
3279 l_h_mls_count                     BINARY_INTEGER;
3280 --
3281 l_array_h_tab                     xla_cmp_source_pkg.t_array_ByInt;
3282 l_array_h_mls_tab                 xla_cmp_source_pkg.t_array_ByInt;
3283 --
3284 l_first_tab                       BINARY_INTEGER;
3285 l_first_mls_tab                   BINARY_INTEGER;
3286 --
3287 l_log_module                      VARCHAR2(240);
3288 --
3289 BEGIN
3290    IF g_log_enabled THEN
3291       l_log_module := C_DEFAULT_MODULE||'.GenerateHeaderCursor';
3292    END IF;
3293 
3294    IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
3295       trace
3296          (p_msg      => 'BEGIN of GenerateHeaderCursor'
3297          ,p_level    => C_LEVEL_PROCEDURE
3298          ,p_module   => l_log_module);
3299    END IF;
3300 
3301    l_first_tab     := NULL;
3302    l_first_mls_tab := NULL;
3303    --
3304    --
3305    l_h_count       := NVL(p_array_h_source_index.COUNT    ,0);
3306    l_h_mls_count   := NVL(p_array_h_mls_source_index.COUNT,0);
3307    --
3308    l_hdr_clauses   := NULL;
3309    l_hdr_sources   := NULL;
3310    l_hdr_tabs      := NULL;
3311 
3312    IF l_h_count > 0  THEN
3313       --
3314       -- get standard header tables/views
3315       --
3316       GetUsedExtractObject
3317          (p_array_table_index            => p_array_h_table_index
3318          ,p_array_parent_table_index     => p_array_parent_table_index
3319          ,p_array_diff_table_index       => l_array_h_tab);
3320 
3321       --
3322       -- Get the header always populated extract object
3323       --
3324       l_first_tab :=
3325          GetAnAlwaysPopulatedObject
3326             (p_array_table_index         => l_array_h_tab
3327             ,p_array_populated_flag      => p_array_populated_flag
3328             ,p_array_ref_obj_flag        => p_array_ref_obj_flag);
3329 
3330       --
3331       -- extract standard sources
3332       --
3333       l_hdr_sources :=
3334          l_hdr_sources ||
3335          GenerateExtractColumns
3336             (p_array_table_hash           => p_array_table_hash
3337             ,p_array_source_code          => p_array_source_code
3338             ,p_array_source_index         => p_array_h_source_index
3339             ,p_array_table_index          => p_array_h_table_index
3340             ,p_array_lookup_type          => p_array_lookup_type
3341             ,p_array_view_application_id  => p_array_view_application_id);
3342    END IF;
3343 
3344    IF l_h_mls_count > 0 THEN
3345       --
3346       -- get mls header tables/views
3347       --
3348       GetUsedExtractObject
3349          (p_array_table_index            => p_array_h_mls_table_index
3350          ,p_array_parent_table_index     => p_array_parent_table_index
3351          ,p_array_diff_table_index       => l_array_h_mls_tab);
3352 
3353       --
3354       -- Get the header mls always populated extract object
3355       --
3359              ,p_array_populated_flag      => p_array_populated_flag
3356        l_first_mls_tab :=
3357           GetAnAlwaysPopulatedObject
3358              (p_array_table_index         => l_array_h_mls_tab
3360              ,p_array_ref_obj_flag        => p_array_ref_obj_flag);
3361 
3362       --
3363       -- extract mls sources
3364       --
3365       l_hdr_sources :=
3366          l_hdr_sources ||
3367          GenerateExtractColumns
3368             (p_array_table_hash           => p_array_table_hash
3369             ,p_array_source_code          => p_array_source_code
3370             ,p_array_source_index         => p_array_h_mls_source_index
3371             ,p_array_table_index          => p_array_h_mls_table_index
3372             ,p_array_lookup_type          => p_array_lookup_type
3373             ,p_array_view_application_id  => p_array_view_application_id);
3374    END IF;
3375 
3376    --
3377    -- generate first clause
3378    --
3379    IF l_first_tab IS NOT NULL AND l_first_mls_tab IS NOT NULL THEN
3380         l_hdr_clause  :=
3381            '  AND $first_tab$.event_id      = xet.event_id'            ||g_chr_newline||
3382            '  AND $first_tab$.event_id      = $first_mls_tab$.event_id'||g_chr_newline||
3383            '  AND $first_mls_tab$.language  = p_language'              ||g_chr_newline;
3384 
3385         l_hdr_clause  := REPLACE(l_hdr_clause,'$first_tab$',p_array_table_hash(l_first_tab));
3386         l_hdr_clause  := REPLACE(l_hdr_clause,'$first_mls_tab$', p_array_table_hash(l_first_mls_tab));
3387         l_hdr_clauses := l_hdr_clauses || l_hdr_clause;
3388         l_hdr_clause  := NULL;
3389    ELSIF l_first_tab IS NOT NULL AND l_first_mls_tab IS NULL THEN
3390         l_hdr_clause  := ' AND $first_tab$.event_id = xet.event_id' || g_chr_newline
3391                       ;
3392         l_hdr_clause  := REPLACE(l_hdr_clause,'$first_tab$',p_array_table_hash(l_first_tab));
3393         l_hdr_clauses := l_hdr_clauses || l_hdr_clause;
3394         l_hdr_clause  := NULL;
3395    ELSIF l_first_tab IS NULL AND l_first_mls_tab IS NOT NULL THEN
3396         l_hdr_clause :=
3397            '  AND $first_mls_tab$.event_id   = xet.event_id' ||g_chr_newline||
3398            '  AND $first_mls_tab$.language   = p_language'   || g_chr_newline;
3399 
3400         l_hdr_clause  := REPLACE(l_hdr_clause,'$first_mls_tab$', p_array_table_hash(l_first_mls_tab));
3401         l_hdr_clauses := l_hdr_clauses ||l_hdr_clause;
3402         l_hdr_clause  := NULL;
3403    END IF;
3404 
3405    IF l_h_count > 0  THEN
3406       FOR Idx IN l_array_h_tab.FIRST .. l_array_h_tab.LAST LOOP
3407          IF l_array_h_tab.EXISTS(Idx)  THEN
3408             --
3409             -- generate the from experession in the extract
3410             --
3411             l_hdr_tab    := '  , $table_name$  $tab$' ;
3412 
3413             l_hdr_tab     := REPLACE(l_hdr_tab, '$table_name$', p_array_table_name(Idx));
3414             l_hdr_tab     := REPLACE(l_hdr_tab, '$tab$', p_array_table_hash(Idx));
3415             l_hdr_tabs    := l_hdr_tabs    || g_chr_newline || l_hdr_tab;
3416             l_hdr_tab     := NULL;
3417 
3418             IF NVL(p_array_ref_obj_flag(Idx),'N') = 'N' THEN
3419                IF Idx <> NVL(l_first_tab, -1) AND
3420                   nvl(p_array_populated_flag(Idx),'N') = 'Y'
3421                THEN
3422                   l_hdr_clause  := '  AND $tab$.event_id  = $first_tab$.event_id'    || g_chr_newline;
3423                ELSIF Idx <> NVL(l_first_tab,-1) AND
3424                   nvl(p_array_populated_flag(Idx),'N') = 'N'
3425                THEN
3426                   l_hdr_clause  := '  AND $tab$.event_id (+) = $first_tab$.event_id' || g_chr_newline;
3427                END IF;
3428 
3429                IF l_first_tab IS NOT NULL OR l_first_mls_tab IS NOT NULL THEN
3430                   l_hdr_clause  :=
3431                      REPLACE
3432                         (l_hdr_clause,'$first_tab$'
3433                         ,p_array_table_hash(NVL(l_first_tab,l_first_mls_tab)));
3434                ELSE
3435                   l_hdr_clause  :=
3436                      REPLACE
3437                         (l_hdr_clause,'$first_tab$', 'xet');
3438                END IF;
3439 
3440             ELSE -- reference objects
3441 
3442                IF nvl(p_array_populated_flag(Idx),'N') = 'Y' THEN
3443                   l_hdr_ref_clause := p_array_join_condition (Idx);
3444 
3445                   --
3446                   -- Replace object names with aliases
3447                   --
3451                          REGEXP_REPLACE(l_hdr_ref_clause
3448                   FOR j IN p_array_table_name.FIRST .. p_array_table_name.LAST LOOP
3449 
3450                      l_hdr_ref_clause :=
3452                                        ,p_array_table_name(j)
3453                                        ,p_array_table_hash(j)
3454                                        ,1    -- Position
3455                                        ,0    -- All Occurrences
3456                                        ,'im' -- i: case insensitive, m: multiple lines
3457                                        );
3458                   END LOOP;
3459 
3460                   l_hdr_ref_clause := ' AND ' || l_hdr_ref_clause;
3461 
3462                ELSE -- always populated flag = 'N'
3463                   l_hdr_ref_clause := AddOuterJoinOps (
3464                                          p_join_condition => p_array_join_condition(Idx)
3465                                         ,p_ref_obj_name   => p_array_table_name(Idx));
3466                   --
3467                   -- Replace object names with aliases
3468                   --
3469                   FOR j IN p_array_table_name.FIRST .. p_array_table_name.LAST LOOP
3470 
3471                      l_hdr_ref_clause :=
3472                          REGEXP_REPLACE(l_hdr_ref_clause
3473                                        ,p_array_table_name(j)
3474                                        ,p_array_table_hash(j)
3475                                        ,1    -- Position
3476                                        ,0    -- All Occurrences
3477                                        ,'im' -- i: case insensitive, m: multiple lines
3478                                        );
3479                   END LOOP;
3480 
3481                   l_hdr_ref_clause := ' AND ' || l_hdr_ref_clause;
3482 
3483                END IF;
3484             END IF;
3485 
3486             l_hdr_clause     := REPLACE(l_hdr_clause,'$tab$', p_array_table_hash(Idx));
3487             l_hdr_clauses    := l_hdr_clauses || l_hdr_clause || l_hdr_ref_clause;
3488             l_hdr_clause     := NULL;
3489             l_hdr_ref_clause := NULL;
3490          END IF;
3491       END LOOP;
3492    END IF;
3493 
3494    IF l_h_mls_count > 0 THEN
3495       FOR Idx IN l_array_h_mls_tab.FIRST .. l_array_h_mls_tab.LAST LOOP
3496          IF l_array_h_mls_tab.EXISTS(Idx)  THEN
3497             l_hdr_tab    := '  , $table_name$  $tab$' ;
3498 
3499             l_hdr_tab     := REPLACE(l_hdr_tab, '$table_name$', p_array_table_name(Idx));
3503 
3500             l_hdr_tab     := REPLACE(l_hdr_tab, '$tab$', p_array_table_hash(Idx));
3501             l_hdr_tabs    := l_hdr_tabs    ||g_chr_newline || l_hdr_tab;
3502             l_hdr_tab     := NULL;
3504             IF Idx <> NVL(l_first_mls_tab,-1) AND
3505                nvl(p_array_populated_flag(Idx),'N') = 'Y'
3506             THEN
3507                l_hdr_clause  :=
3508                   '  AND $tab$.event_id  = $first_tab$.event_id' || g_chr_newline||
3509                   '  AND $tab$.language  = p_language'           || g_chr_newline;
3510             ELSIF Idx <> NVL(l_first_mls_tab,-1) AND
3511                   nvl(p_array_populated_flag(Idx),'N') = 'N'
3512             THEN
3513                l_hdr_clause  :=
3514                   '  AND $tab$.event_id (+) = $first_tab$.event_id'|| g_chr_newline||
3515                   '  AND $tab$.language (+) = p_language'          || g_chr_newline;
3516             END IF;
3517 
3518             IF l_first_tab IS NOT NULL OR l_first_mls_tab IS NOT NULL THEN
3519                l_hdr_clause  :=
3520                   REPLACE
3521                      (l_hdr_clause,'$first_tab$'
3522                      ,p_array_table_hash(NVL(l_first_tab,l_first_mls_tab)));
3523             ELSE
3524                l_hdr_clause  :=
3525                   REPLACE
3526                      (l_hdr_clause,'$first_tab$', 'xet');
3527             END IF;
3528 
3529             l_hdr_clause     := REPLACE(l_hdr_clause,'$tab$', p_array_table_hash(Idx));
3530             l_hdr_clauses    := l_hdr_clauses || l_hdr_clause;
3531             l_hdr_clause     := NULL;
3532          END IF;
3533       END LOOP;
3534    END IF;
3535 
3536    --
3537    -- generate the extract of lookup sources
3538    --
3539 
3540    l_hdr_tabs    := l_hdr_tabs || GenerateLookupTables(
3541      p_array_source_index           => p_array_h_source_index
3542    , p_array_table_index            => p_array_h_table_index
3543    , p_array_lookup_type            => p_array_lookup_type
3544    , p_array_view_application_id    => p_array_view_application_id
3545    );
3546 
3547 
3548    l_hdr_tabs    := l_hdr_tabs || GenerateLookupTables(
3549      p_array_source_index           => p_array_h_mls_source_index
3550    , p_array_table_index            => p_array_h_mls_table_index
3551    , p_array_lookup_type            => p_array_lookup_type
3552    , p_array_view_application_id    => p_array_view_application_id
3553    );
3554 
3555    l_hdr_clauses := l_hdr_clauses || GenerateLookupClauses(
3556      p_array_source_index          => p_array_h_source_index
3557    , p_array_table_index           => p_array_h_table_index
3558    , p_array_table_name            => p_array_table_name
3559    , p_array_table_hash            => p_array_table_hash
3560    , p_array_source_code           => p_array_source_code
3561    , p_array_lookup_type           => p_array_lookup_type
3562    , p_array_view_application_id   => p_array_view_application_id
3563    );
3564 
3565    l_hdr_clauses := l_hdr_clauses || GenerateLookupClauses(
3566      p_array_source_index          => p_array_h_mls_source_index
3567    , p_array_table_index           => p_array_h_mls_table_index
3568    , p_array_table_name            => p_array_table_name
3569    , p_array_table_hash            => p_array_table_hash
3570    , p_array_source_code           => p_array_source_code
3571    , p_array_lookup_type           => p_array_lookup_type
3572    , p_array_view_application_id   => p_array_view_application_id
3573    );
3574 
3575    --
3576    -- generate the declaration of the header cursor
3577    --
3578    IF p_procedure = 'EVENT_TYPE' THEN
3579          l_hdr_cur     := C_HDR_CUR_EVENT_TYPE;
3580    ELSE
3581          l_hdr_cur     := C_HDR_CUR_EVENT_CLASS;
3582    END IF;
3583 
3587    THEN
3584    IF l_hdr_sources IS NOT NULL AND
3585       l_hdr_tabs    IS NOT NULL AND
3586       l_hdr_clauses IS NOT NULL
3588 
3589       l_hdr_cur     := REPLACE(l_hdr_cur,'$hdr_sources$',l_hdr_sources);
3590       l_hdr_cur     := REPLACE(l_hdr_cur,'$hdr_tabs$'   ,l_hdr_tabs);
3591       l_hdr_cur     := REPLACE(l_hdr_cur,'$hdr_clauses$',l_hdr_clauses);
3592 
3593    ELSE
3594      -- l_hdr_cur := NULL;
3595       l_hdr_cur     := REPLACE(l_hdr_cur,'$hdr_sources$',' ');
3596       l_hdr_cur     := REPLACE(l_hdr_cur,'$hdr_tabs$'   ,' ');
3597       l_hdr_cur     := REPLACE(l_hdr_cur,'$hdr_clauses$',' ');
3598 
3599    END IF;
3600 
3601    l_hdr_sources := NULL;
3602    l_hdr_tabs    := NULL;
3603    l_hdr_clauses := NULL;
3604 
3605    IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
3606       trace
3607          (p_msg      => 'l_hdr_cur: ' || SUBSTRB(l_hdr_cur,1,3989)
3608          ,p_level    => C_LEVEL_PROCEDURE
3609          ,p_module   => l_log_module);
3610    END IF;
3611 
3612    IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
3613       trace
3614          (p_msg      => 'END of GenerateHeaderCursor'
3615          ,p_level    => C_LEVEL_PROCEDURE
3616          ,p_module   => l_log_module);
3617    END IF;
3618 
3619    RETURN l_hdr_cur;
3620 EXCEPTION
3621 WHEN xla_exceptions_pkg.application_exception   THEN
3622    RETURN NULL;
3623 WHEN OTHERS    THEN
3624    xla_exceptions_pkg.raise_message
3625       (p_location => 'xla_cmp_extract_pkg.GenerateHeaderCursor');
3626 END GenerateHeaderCursor;
3627 --
3628 --+==========================================================================+
3629 --|                                                                          |
3630 --| PRIVATE  function                                                        |
3631 --|                                                                          |
3632 --|    Generate the declaration of the Line Cursor : The Extract of          |
3633 --|    standard BC and MLS line sources from the Header Extract Object       |
3634 --|                                                                          |
3635 --|                                                                          |
3636 --+==========================================================================+
3637 --
3638 FUNCTION GenerateLineCursor
3639        (p_application_id               IN NUMBER
3640        ,p_array_table_name             IN xla_cmp_source_pkg.t_array_VL30
3641        ,p_array_parent_table_index           IN xla_cmp_source_pkg.t_array_ByInt
3642        ,p_array_table_hash             IN xla_cmp_source_pkg.t_array_VL30
3643        ,p_array_populated_flag         IN xla_cmp_source_pkg.t_array_VL1
3644        ,p_array_ref_obj_flag           IN xla_cmp_source_pkg.t_array_VL1
3645        ,p_array_join_condition         IN xla_cmp_source_pkg.t_array_VL2000
3646        ,p_array_l_source_index         IN xla_cmp_source_pkg.t_array_ByInt
3647        ,p_array_l_table_index          IN xla_cmp_source_pkg.t_array_ByInt
3648        ,p_array_l_mls_source_index     IN xla_cmp_source_pkg.t_array_ByInt
3649        ,p_array_l_mls_table_index      IN xla_cmp_source_pkg.t_array_ByInt
3650        ,p_array_source_code            IN xla_cmp_source_pkg.t_array_VL30
3651        ,p_array_lookup_type            IN xla_cmp_source_pkg.t_array_VL30
3652        ,p_array_view_application_id    IN xla_cmp_source_pkg.t_array_Num
3653        ,p_procedure                    IN VARCHAR2)
3654 RETURN VARCHAR2 IS
3655 
3656 l_line_cur                         VARCHAR2(32000);
3657 l_line_sources                     VARCHAR2(20000);
3658 l_line_tabs                        VARCHAR2(20000);
3659 l_line_clauses                     VARCHAR2(20000);
3660 --
3661 l_line_source                      VARCHAR2(1000);
3662 l_line_tab                         VARCHAR2(1000);
3663 l_line_clause                      VARCHAR2(1000);
3664 l_line_ref_clause                  VARCHAR2(1000);
3665 --
3666 l_l_count                          BINARY_INTEGER;
3667 l_l_mls_count                      BINARY_INTEGER;
3668 --
3669 --
3670 l_array_l_tab                      xla_cmp_source_pkg.t_array_ByInt;
3671 l_array_l_mls_tab                  xla_cmp_source_pkg.t_array_ByInt;
3672 --
3673 l_first_tab                        BINARY_INTEGER;
3674 l_first_mls_tab                    BINARY_INTEGER;
3675 --
3676 l_called                           BOOLEAN;
3677 --
3678 C_LOOKUP_TAB         CONSTANT     VARCHAR2(100) :=', fnd_lookup_values    fvl$Index$';
3679 
3683   AND  fvl$Index$.view_application_id(+) = $view_application_id$
3680 C_LOOKUP_CLAUSE      CONSTANT     VARCHAR2(1000):='
3681   AND  fvl$Index$.lookup_type(+)         = ''$lookup_type$''
3682   AND  fvl$Index$.lookup_code(+)         = $tab$.$source$
3684   AND  fvl$Index$.language(+)            = USERENV(''LANG'') '
3685 ;
3686 
3687 C_LINE_NUMBER       CONSTANT     VARCHAR2(100)  :=' , $tab$.LINE_NUMBER  ';
3688 --
3689 cursor c_alc_enabled_flag is
3690   select alc_enabled_flag
3691     from xla_subledgers
3692    where application_id = p_application_id;
3693 
3694 l_alc_enabled_flag             VARCHAR2(1);
3695 l_log_module                   VARCHAR2(240);
3696 --
3697 BEGIN
3698    IF g_log_enabled THEN
3699       l_log_module := C_DEFAULT_MODULE||'.GenerateLineCursor';
3700    END IF;
3701 
3702    IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
3703       trace
3704          (p_msg      => 'BEGIN of GenerateLineCursor'
3705          ,p_level    => C_LEVEL_PROCEDURE
3706          ,p_module   => l_log_module);
3707    END IF;
3708 
3709    open c_alc_enabled_flag;
3710    fetch c_alc_enabled_flag into l_alc_enabled_flag;
3711    close c_alc_enabled_flag;
3712 
3713    l_l_count     := NVL(p_array_l_source_index.COUNT,0);
3714    l_l_mls_count := NVL(p_array_l_mls_source_index.COUNT,0);
3715 
3716    l_first_tab     := NULL;
3717    l_first_mls_tab := NULL;
3718    l_called        := FALSE;
3719 
3720 --   l_line_sources := ' , $tab$.LINE_NUMBER  ';
3721 
3722    --
3723    -- get list of standard line table
3724    --
3725    IF l_l_count > 0 THEN
3726       GetUsedExtractObject
3727          (p_array_table_index            => p_array_l_table_index
3728          ,p_array_parent_table_index     => p_array_parent_table_index
3729          ,p_array_diff_table_index       => l_array_l_tab);
3730 
3731       --
3732       -- Get the line always populated extract object
3733       --
3734       l_first_tab  :=
3735          GetAnAlwaysPopulatedObject
3736             (p_array_table_index         => l_array_l_tab
3737             ,p_array_populated_flag      => p_array_populated_flag
3738             ,p_array_ref_obj_flag        => p_array_ref_obj_flag);
3739 
3740         --
3741         -- Use the following to derive the line number, and avoid the loop
3742         --
3743           l_line_sources      := REPLACE(C_LINE_NUMBER,'$tab$',
3744                                      p_array_table_hash(l_first_tab));
3745 
3746       -- Commented the below code for bug 5478323
3747       --
3748 /*
3749       FOR Idx IN l_array_l_tab.FIRST .. l_array_l_tab.LAST LOOP
3750          --
3751          IF l_array_l_tab.EXISTS(Idx)  THEN
3752 
3753             IF  NOT l_called
3754             AND NVL(p_array_ref_obj_flag(Idx),'N') = 'N' THEN
3755 
3756                l_line_sources      := REPLACE(C_LINE_NUMBER,'$tab$',
3757                                      p_array_table_hash(Idx));
3758 
3759                l_called := TRUE;
3760 
3761             END IF;
3762 
3763          END IF;
3764       END LOOP;
3765 */
3766 
3767 
3768       l_line_sources :=
3769          l_line_sources ||
3770          GenerateExtractColumns
3771             (p_array_table_hash           => p_array_table_hash
3772             ,p_array_source_code          => p_array_source_code
3773             ,p_array_source_index         => p_array_l_source_index
3774             ,p_array_table_index          => p_array_l_table_index
3775             ,p_array_lookup_type          => p_array_lookup_type
3779    --
3776             ,p_array_view_application_id  => p_array_view_application_id);
3777    END IF;
3778 
3780    -- get list of mls line table
3781    --
3782    IF l_l_mls_count > 0 THEN
3783       GetUsedExtractObject
3784          (p_array_table_index            => p_array_l_mls_table_index
3785          ,p_array_parent_table_index     => p_array_parent_table_index
3786          ,p_array_diff_table_index       => l_array_l_mls_tab);
3787 
3788       --
3789       -- Get the MLS line always populated extract object
3790       --
3791       l_first_mls_tab :=
3792          GetAnAlwaysPopulatedObject
3793             (p_array_table_index         => l_array_l_mls_tab
3794             ,p_array_populated_flag      => p_array_populated_flag
3795             ,P_array_ref_obj_flag        => p_array_ref_obj_flag);
3796 
3797       --
3798       -- extract line mls sources
3799       --
3800       l_line_sources :=
3801          l_line_sources ||
3802          GenerateExtractColumns
3803             (p_array_table_hash           => p_array_table_hash
3804             ,p_array_source_code          => p_array_source_code
3805             ,p_array_source_index         => p_array_l_mls_source_index
3806             ,p_array_table_index          => p_array_l_mls_table_index
3807             ,p_array_lookup_type          => p_array_lookup_type
3808             ,p_array_view_application_id  => p_array_view_application_id)          ;
3809    END IF;
3810 
3811    --
3812    --
3813    -- generate first clause
3814    --
3815    IF l_first_tab     IS NOT NULL AND
3816       l_first_mls_tab IS NOT NULL
3817    THEN
3818       l_line_clause  :=
3819          '  AND $first_tab$.event_id      = xet.event_id'               ||g_chr_newline||
3820          '  AND $first_tab$.event_id      = $first_mls_tab$.event_id'   ||g_chr_newline||
3821          '  AND $first_tab$.line_number   = $first_mls_tab$.line_number'||g_chr_newline||
3822          '  AND $first_mls_tab$.language  = p_language'                 ||g_chr_newline;
3823       IF(l_alc_enabled_flag = 'N') THEN
3824         l_line_clause := l_line_clause ||
3825          '  AND $first_tab$.ledger_id = p_sla_ledger_id'            ||g_chr_newline;
3826       END IF;
3827 
3828       l_line_clause  := REPLACE(l_line_clause,'$first_tab$',p_array_table_hash(l_first_tab));
3829       l_line_clause  := REPLACE(l_line_clause,'$first_mls_tab$', p_array_table_hash(l_first_mls_tab));
3830 
3831       l_line_clauses := l_line_clauses ||l_line_clause;
3832       l_line_clause  := NULL;
3833 
3834    ELSIF l_first_tab     IS NOT NULL AND
3835          l_first_mls_tab IS NULL
3836    THEN
3837       l_line_clause  :=
3838          '  AND $first_tab$.event_id      = xet.event_id'              ||g_chr_newline;
3839       IF(l_alc_enabled_flag = 'N') THEN
3840         l_line_clause := l_line_clause ||
3841          '  AND $first_tab$.ledger_id = p_sla_ledger_id'            ||g_chr_newline;
3842       END IF;
3843 
3844       l_line_clause  := REPLACE(l_line_clause,'$first_tab$',p_array_table_hash(l_first_tab));
3845       l_line_clauses := l_line_clauses ||l_line_clause;
3846       l_line_clause  := NULL;
3847 
3848    ELSIF l_first_tab     IS NULL AND
3849          l_first_mls_tab IS NOT NULL
3850    THEN
3851       l_line_clause  :=
3852          '  AND $first_mls_tab$.event_id      = xet.event_id'||g_chr_newline||
3853          '  AND $first_mls_tab$.language      = p_language'  ||g_chr_newline;
3854 
3855       l_line_clause  := REPLACE(l_line_clause,'$first_mls_tab$', p_array_table_hash(l_first_mls_tab));
3856       l_line_clauses := l_line_clauses || l_line_clause;
3857       l_line_clause  := NULL;
3858    END IF;
3859 
3860    IF l_array_l_tab.COUNT > 0  THEN
3861       FOR Idx IN l_array_l_tab.FIRST .. l_array_l_tab.LAST LOOP
3862          IF l_array_l_tab.EXISTS(Idx)  THEN
3863 
3864             l_line_tab    := '  , $table_name$  $tab$' ;
3865 
3866             l_line_tab     := REPLACE(l_line_tab, '$table_name$', p_array_table_name(Idx));
3867             l_line_tab     := REPLACE(l_line_tab, '$tab$', p_array_table_hash(Idx));
3868             l_line_tabs    := l_line_tabs    || g_chr_newline || l_line_tab;
3869             l_line_tab     := NULL;
3870 
3871 
3872             IF NVL(p_array_ref_obj_flag(Idx),'N') = 'N' THEN
3873 
3874                IF Idx <> NVL(l_first_tab,-1) AND
3875                   nvl(p_array_populated_flag(Idx),'N') = 'Y'
3876                THEN
3877                   l_line_clause  :=
3878                      '  AND $tab$.event_id    = $first_tab$.event_id'   ||g_chr_newline||
3879                      '  AND $tab$.line_number = $first_tab$.line_number'||g_chr_newline;
3880 
3881                ELSIF Idx <> NVL(l_first_tab,-1) AND
3882                   nvl(p_array_populated_flag(Idx),'N') = 'N'
3883                THEN
3884                   l_line_clause  :=
3885                      '  AND $tab$.event_id (+)    = $first_tab$.event_id'   ||g_chr_newline||
3886                      '  AND $tab$.line_number (+) = $first_tab$.line_number'||g_chr_newline;
3887 
3888                END IF;
3889 
3890                IF l_first_tab IS NOT NULL OR
3891                   l_first_mls_tab IS NOT NULL
3892                THEN
3893                   l_line_clause  :=
3894                      REPLACE
3895                         (l_line_clause,'$first_tab$'
3896                         ,p_array_table_hash(NVL(l_first_tab,l_first_mls_tab)));
3900                         (l_line_clause,'$first_tab$', 'xet');
3897                ELSE
3898                   l_line_clause  :=
3899                      REPLACE
3901                END IF;
3902             ELSE -- reference objects
3903                IF nvl(p_array_populated_flag(Idx),'N') = 'Y' THEN
3904                   l_line_ref_clause := p_array_join_condition(Idx);
3905 
3906                   --
3907                   -- Replace object names with aliases
3908                   --
3909                   FOR j IN p_array_table_name.FIRST .. p_array_table_name.LAST LOOP
3910                      l_line_ref_clause :=
3911                          REGEXP_REPLACE(l_line_ref_clause
3912                                        ,p_array_table_name(j)
3913                                        ,p_array_table_hash(j)
3914                                        ,1     -- Position
3915                                        ,0     -- All Occurrences
3916                                        ,'im'  -- i: case insensitive m: multiple lines
3917                                        );
3918                   END LOOP;
3919 
3920                   l_line_ref_clause := ' AND ' || l_line_ref_clause;
3921 
3922                ELSE -- Always populated flag = 'N'
3923 
3924                   l_line_ref_clause := AddOuterJoinOps (
3925                                          p_join_condition => p_array_join_condition(Idx)
3926                                         ,p_ref_obj_name   => p_array_table_name(Idx));
3927 
3928                   --
3929                   -- Replace object names with aliases
3930                   --
3931                   FOR j IN p_array_table_name.FIRST .. p_array_table_name.LAST LOOP
3932                      l_line_ref_clause :=
3933                          REGEXP_REPLACE(l_line_ref_clause
3934                                        ,p_array_table_name(j)
3935                                        ,p_array_table_hash(j)
3936                                        ,1     -- Position
3937                                        ,0     -- All Occurrences
3938                                        ,'im'  -- i: case insensitive m: multiple lines
3939                                        );
3940                   END LOOP;
3941 
3942                   l_line_ref_clause := ' AND ' || l_line_ref_clause;
3943 
3944                END IF;
3945             END IF;
3946             --
3947             l_line_clause     := REPLACE(l_line_clause,'$tab$', p_array_table_hash(Idx));
3948             l_line_sources    := REPLACE(l_line_sources,'$tab$', p_array_table_hash(Idx));
3949             l_line_clauses    := l_line_clauses || l_line_clause || l_line_ref_clause;
3950             l_line_clause     := NULL;
3951             l_line_ref_clause := NULL;
3952          END IF;
3953       END LOOP;
3954    END IF;
3955 
3956    --
3957    -- MLS extract where clauses
3958    --
3959    IF l_array_l_mls_tab.COUNT > 0  THEN
3960       FOR Idx IN l_array_l_mls_tab.FIRST .. l_array_l_mls_tab.LAST LOOP
3961          IF l_array_l_mls_tab.EXISTS(Idx)  THEN
3962 
3963             l_line_tab    := '  , $table_name$  $tab$' ;
3964 
3965             l_line_tab     := REPLACE(l_line_tab, '$table_name$', p_array_table_name(Idx));
3966             l_line_tab     := REPLACE(l_line_tab, '$tab$', p_array_table_hash(Idx));
3967             l_line_tabs    := l_line_tabs    || g_chr_newline || l_line_tab;
3968             l_line_tab     := NULL;
3969             --
3970             IF Idx <> NVL(l_first_mls_tab,-1) AND
3971                nvl(p_array_populated_flag(Idx),'N') = 'Y'
3972             THEN
3973                l_line_clause  :=
3974                   '  AND $tab$.event_id    = $first_tab$.event_id'    ||g_chr_newline||
3975                   '  AND $tab$.line_number = $first_tab$.line_number' ||g_chr_newline||
3976                   '  AND $tab$.language    = p_language'              ||g_chr_newline;
3977 
3978             ELSIF Idx <> NVL(l_first_mls_tab,-1) AND
3979                   nvl(p_array_populated_flag(Idx),'N') = 'N'
3980             THEN
3981                l_line_clause  :=
3982                   '  AND $tab$.event_id (+)    = $first_tab$.event_id'   ||g_chr_newline||
3983                   '  AND $tab$.line_number (+) = $first_tab$.line_number'||g_chr_newline||
3984                   '  AND $tab$.language (+)    = p_language'             ||g_chr_newline;
3985 
3986             END IF;
3987 
3988             IF l_first_tab IS NOT NULL OR
3989                l_first_mls_tab IS NOT NULL
3990             THEN
3991                l_line_clause  :=
3992                   REPLACE
3993                      (l_line_clause,'$first_tab$'
3994                      ,p_array_table_hash(NVL(l_first_tab,l_first_mls_tab)));
3995             ELSE
3996                l_line_clause  :=
3997                   REPLACE
3998                      (l_line_clause,'$first_tab$', 'xet');
3999             END IF;
4000 
4001             l_line_clause  := REPLACE(l_line_clause,'$tab$', p_array_table_hash(Idx));
4002             l_line_sources := REPLACE(l_line_sources,'$tab$', p_array_table_hash(Idx));
4003             l_line_clauses := l_line_clauses ||  l_line_clause;
4004             l_line_clause  := NULL;
4005          END IF;
4006       END LOOP;
4007    END IF;
4008 
4009    --
4010    -- generate the where clauses for extract of lookup sources
4011    --
4012    l_line_tabs    := l_line_tabs || GenerateLookupTables(
4013      p_array_source_index           => p_array_l_source_index
4017    );
4014    , p_array_table_index            => p_array_l_table_index
4015    , p_array_lookup_type            => p_array_lookup_type
4016    , p_array_view_application_id    => p_array_view_application_id
4018    --
4019    l_line_tabs    := l_line_tabs || GenerateLookupTables(
4020      p_array_source_index           => p_array_l_mls_source_index
4021    , p_array_table_index            => p_array_l_mls_table_index
4022    , p_array_lookup_type            => p_array_lookup_type
4023    , p_array_view_application_id    => p_array_view_application_id
4024    );
4025    --
4026    l_line_clauses := l_line_clauses || GenerateLookupClauses(
4027      p_array_source_index          => p_array_l_source_index
4028    , p_array_table_index           => p_array_l_table_index
4029    , p_array_table_name            => p_array_table_name
4030    , p_array_table_hash            => p_array_table_hash
4031    , p_array_source_code           => p_array_source_code
4032    , p_array_lookup_type           => p_array_lookup_type
4033    , p_array_view_application_id   => p_array_view_application_id
4034    );
4035    --
4036    l_line_clauses := l_line_clauses || GenerateLookupClauses(
4037      p_array_source_index          => p_array_l_mls_source_index
4038    , p_array_table_index           => p_array_l_mls_table_index
4039    , p_array_table_name            => p_array_table_name
4040    , p_array_table_hash            => p_array_table_hash
4041    , p_array_source_code           => p_array_source_code
4042    , p_array_lookup_type           => p_array_lookup_type
4043    , p_array_view_application_id   => p_array_view_application_id
4044    );
4045    --
4046    IF p_procedure = 'EVENT_TYPE' THEN
4047          l_line_cur     := C_LINE_CUR_EVENT_TYPE;
4048     ELSE
4049          l_line_cur     := C_LINE_CUR_EVENT_CLASS;
4050     END IF;
4051 
4052    IF l_line_sources IS NOT NULL AND
4053       l_line_tabs    IS NOT NULL AND
4054       l_line_clauses IS NOT NULL
4055    THEN
4056    --
4057       l_line_cur     := REPLACE(l_line_cur,'$line_sources$',l_line_sources);
4058       l_line_cur     := REPLACE(l_line_cur,'$line_tabs$'   ,l_line_tabs);
4059       l_line_cur     := REPLACE(l_line_cur,'$line_clauses$',l_line_clauses);
4060    --
4061    ELSE
4062    --
4063     --   l_line_cur := NULL;   -> bug 4492149
4064       l_line_cur     := REPLACE(l_line_cur,'$line_sources$',' , 0 ');
4065       l_line_cur     := REPLACE(l_line_cur,'$line_tabs$'   ,' ');
4066       l_line_cur     := REPLACE(l_line_cur,'$line_clauses$',' ');
4067    --
4068    END IF;
4069    --
4070    l_line_sources := NULL;
4071    l_line_tabs    := NULL;
4072    l_line_clauses := NULL;
4073 
4074    IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
4075 
4076          trace
4077             (p_msg      => 'l_line_cur: ' || SUBSTRB(l_line_cur,1,3988)
4078             ,p_level    => C_LEVEL_PROCEDURE
4079             ,p_module   => l_log_module);
4080 
4081    END IF;
4082 
4083 
4084    IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
4085 
4086          trace
4087             (p_msg      => 'END of GenerateLineCursor'
4088             ,p_level    => C_LEVEL_PROCEDURE
4089             ,p_module   => l_log_module);
4090 
4091    END IF;
4092    --
4093    RETURN l_line_cur;
4094 EXCEPTION
4095  WHEN xla_exceptions_pkg.application_exception   THEN
4096         RETURN NULL;
4097  WHEN OTHERS    THEN
4098       xla_exceptions_pkg.raise_message
4099          (p_location => 'xla_cmp_extract_pkg.GenerateLineCursor ');
4100 END GenerateLineCursor;
4101 --
4102 --
4103 --+==========================================================================+
4104 --|                                                                          |
4105 --| PRIVATE  function                                                        |
4106 --|                                                                          |
4107 --|                                                                          |
4108 --|                                                                          |
4109 --+==========================================================================+
4110 --
4111 FUNCTION GenerateHdrStructure
4112        (p_array_table_name             IN xla_cmp_source_pkg.t_array_VL30
4113        ,p_array_source_code            IN xla_cmp_source_pkg.t_array_VL30
4114        ,p_array_h_source_index         IN xla_cmp_source_pkg.t_array_ByInt
4115        ,p_array_h_table_index          IN xla_cmp_source_pkg.t_array_ByInt
4116        ,p_array_h_mls_source_index     IN xla_cmp_source_pkg.t_array_ByInt
4117        ,p_array_h_mls_table_index      IN xla_cmp_source_pkg.t_array_ByInt)
4118 RETURN VARCHAR2 IS
4119 
4120 C_STRUCTURE        CONSTANT VARCHAR2(2000):=
4121 'TYPE t_array_source_$Index$ IS TABLE OF $table$.$column$%TYPE INDEX BY BINARY_INTEGER;';
4122 
4123 l_HdrTypes                     VARCHAR2(32000);
4124 l_HdrType                      VARCHAR2(2000);
4125 l_log_module                   VARCHAR2(240);
4126 --
4127 BEGIN
4128    IF g_log_enabled THEN
4129       l_log_module := C_DEFAULT_MODULE||'.GenerateHdrStructure';
4130    END IF;
4131 
4132    IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
4133       trace
4137 
4134          (p_msg      => 'BEGIN of GenerateHdrStructure'
4135          ,p_level    => C_LEVEL_PROCEDURE
4136          ,p_module   => l_log_module);
4138    END IF;
4139 
4140    l_HdrTypes := NULL;
4141    --
4142    -- structure of standard header sources
4143    --
4144    IF p_array_h_source_index. COUNT > 0 THEN
4145       FOR Idx IN p_array_h_source_index.FIRST .. p_array_h_source_index.LAST LOOP
4146          IF p_array_h_source_index.EXISTS(Idx)  THEN
4147             l_HdrType := C_STRUCTURE;
4148             l_HdrType := REPLACE(l_HdrType,'$Index$' , Idx);
4149             l_HdrType := REPLACE(l_HdrType,'$table$' ,
4150                                  p_array_table_name(p_array_h_table_index(Idx)));
4151             l_HdrType := REPLACE(l_HdrType,'$column$', p_array_source_code(Idx));
4152             l_HdrTypes := l_HdrTypes ||g_chr_newline || l_HdrType ;
4153          END IF;
4154       END LOOP;
4155    END IF;
4156 
4157    --
4158    -- structure of mls line sources
4159    --
4160    IF p_array_h_mls_source_index.COUNT > 0 THEN
4161       FOR Idx IN p_array_h_mls_source_index.FIRST .. p_array_h_mls_source_index.LAST LOOP
4162          IF p_array_h_mls_source_index.EXISTS(Idx)  THEN
4163             l_HdrType := C_STRUCTURE;
4164             l_HdrType := REPLACE(l_HdrType,'$Index$' , Idx);
4165             l_HdrType := REPLACE(l_HdrType,'$table$' ,
4166                                   p_array_table_name(p_array_h_mls_table_index(Idx)));
4167             l_HdrType := REPLACE(l_HdrType,'$column$', p_array_source_code(Idx));
4168             l_HdrTypes := l_HdrTypes || g_chr_newline || l_HdrType ;
4169          END IF;
4170       END LOOP;
4171    END IF;
4172 
4173    IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
4174       trace
4175          (p_msg      => 'END of GenerateHdrStructure'
4176          ,p_level    => C_LEVEL_PROCEDURE
4177          ,p_module   => l_log_module);
4178    END IF;
4179 
4180    RETURN l_HdrTypes;
4181 EXCEPTION
4182  WHEN xla_exceptions_pkg.application_exception   THEN
4183         RETURN NULL;
4184  WHEN OTHERS    THEN
4185       xla_exceptions_pkg.raise_message
4186          (p_location => 'xla_cmp_extract_pkg.GenerateHdrStructure ');
4187 END GenerateHdrStructure;
4188 --
4189 --
4190 --+==========================================================================+
4191 --|                                                                          |
4192 --| PRIVATE  function                                                        |
4193 --|                                                                          |
4194 --|                                                                          |
4195 --|                                                                          |
4196 --+==========================================================================+
4197 FUNCTION GenerateCacheHdrSources
4198        (p_array_h_source_index         IN xla_cmp_source_pkg.t_array_ByInt
4199        ,p_array_h_mls_source_index     IN xla_cmp_source_pkg.t_array_ByInt
4200        ,p_array_lookup_type            IN xla_cmp_source_pkg.t_array_VL30
4201        ,p_array_view_application_id    IN xla_cmp_source_pkg.t_array_Num
4202        ,p_array_datatype_code          IN OUT NOCOPY xla_cmp_source_pkg.t_array_VL1)
4203 
4204 RETURN VARCHAR2 IS
4205 C_SOURCE         CONSTANT VARCHAR2(2000) :='g_array_event(l_event_id).array_value_$datatype$(''source_$index$'') := l_array_source_$index$(hdr_idx);';
4206 C_SOURCE_LKP     CONSTANT VARCHAR2(2000)  :='g_array_event(l_event_id).array_value_char(''source_$index$_meaning'') := l_array_source_$index$_meaning(hdr_idx);';
4207 
4208 l_HdrStrings                VARCHAR2(32000);
4209 l_one_var                   VARCHAR2(2000);
4210 l_log_module                VARCHAR2(240);
4211 
4212 BEGIN
4213    IF g_log_enabled THEN
4214       l_log_module := C_DEFAULT_MODULE||'.GenerateCacheHdrSources';
4215    END IF;
4216 
4217    IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
4218       trace
4219          (p_msg      => 'BEGIN of GenerateCacheHdrSources'
4220          ,p_level    => C_LEVEL_PROCEDURE
4221          ,p_module   => l_log_module);
4222    END IF;
4223 
4224    --
4225    -- declare the standard header variables
4226    --
4227    l_one_var       :=  NULL;
4228    l_HdrStrings    :=  l_one_var ;
4229 
4230    IF p_array_h_source_index.COUNT > 0 THEN
4231       FOR Idx IN p_array_h_source_index.FIRST .. p_array_h_source_index.LAST LOOP
4232          IF p_array_h_source_index.EXISTS(Idx)  THEN
4233             l_one_var       := C_SOURCE;
4234 
4238                p_array_view_application_id(Idx) IS NOT NULL
4235             IF p_array_lookup_type.EXISTS(Idx) AND
4236                p_array_lookup_type(Idx) IS NOT NULL AND
4237                p_array_view_application_id.EXISTS(Idx) AND
4239             THEN
4240                l_one_var := l_one_var|| g_chr_newline ||C_SOURCE_LKP;
4241             END IF;
4242             l_one_var       := REPLACE(l_one_var,'$index$' ,to_char(Idx));
4243 
4244                 case p_array_datatype_code(Idx)
4245                 when 'F' then
4246                    l_one_var  := REPLACE(l_one_var,'$datatype$','num') ;
4247                 when 'N' then
4248                    l_one_var  := REPLACE(l_one_var,'$datatype$','num') ;
4249                 when 'C' then
4250                    l_one_var  := REPLACE(l_one_var,'$datatype$','char') ;
4251                 when 'D' then
4252                    l_one_var  := REPLACE(l_one_var,'$datatype$','date') ;
4253                 else
4254                    l_one_var  := REPLACE(l_one_var,'$datatype$',p_array_datatype_code(Idx)) ;
4255                 end case;
4256 
4257 
4258             l_HdrStrings  := l_HdrStrings || g_chr_newline || l_one_var ;
4259          END IF;
4260       END LOOP;
4261    END IF;
4262 
4263    --
4264    -- declare the mls line variables
4265    --
4266    IF p_array_h_mls_source_index.COUNT > 0 THEN
4267       FOR Idx IN p_array_h_mls_source_index.FIRST .. p_array_h_mls_source_index.LAST LOOP
4268          IF p_array_h_mls_source_index.EXISTS(Idx)  THEN
4269             l_one_var       := C_SOURCE;
4270 
4271             IF p_array_lookup_type.EXISTS(Idx) AND
4272                p_array_lookup_type(Idx) IS NOT NULL AND
4273                p_array_view_application_id.EXISTS(Idx) AND
4274                p_array_view_application_id(Idx) IS NOT NULL
4275             THEN
4276                l_one_var := l_one_var|| g_chr_newline ||C_SOURCE_LKP;
4277             END IF;
4278             l_one_var       := REPLACE(l_one_var,'$index$' , Idx);
4279 
4280                 case p_array_datatype_code(Idx)
4281                 when 'F' then
4282                    l_one_var  := REPLACE(l_one_var,'$datatype$','num') ;
4283                 when 'N' then
4284                    l_one_var  := REPLACE(l_one_var,'$datatype$','num') ;
4285                 when 'C' then
4286                    l_one_var  := REPLACE(l_one_var,'$datatype$','char') ;
4287                 when 'D' then
4288                    l_one_var  := REPLACE(l_one_var,'$datatype$','date') ;
4289                 else
4290                    l_one_var  := REPLACE(l_one_var,'$datatype$',p_array_datatype_code(Idx)) ;
4291                 end case;
4292 
4293             l_HdrStrings  := l_HdrStrings || g_chr_newline || l_one_var ;
4294          END IF;
4295       END LOOP;
4296    END IF;
4297 
4298    IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
4299       trace
4300          (p_msg      => 'END of GenerateCacheHdrSources'
4301          ,p_level    => C_LEVEL_PROCEDURE
4302          ,p_module   => l_log_module);
4303    END IF;
4304 
4305    RETURN l_HdrStrings;
4306 EXCEPTION
4307  WHEN xla_exceptions_pkg.application_exception   THEN
4308         RETURN NULL;
4309  WHEN OTHERS    THEN
4310       xla_exceptions_pkg.raise_message
4311          (p_location => 'xla_cmp_extract_pkg.GenerateCacheHdrSources');
4312 END GenerateCacheHdrSources;
4313 --
4314 --===========================================================================
4315 --
4316 --
4317 --
4318 --
4319 --
4320 --
4321 --
4322 --
4323 --
4324 --
4325 --                   Accounting Event Extract Diagnostics
4329 --
4326 --
4327 --
4328 --
4330 --
4331 --
4332 --
4333 --
4334 --
4335 --
4336 --
4337 --============================================================================
4338 --
4339 --+==========================================================================+
4340 --|                                                                          |
4341 --| PRIVATE function                                                         |
4342 --|                                                                          |
4343 --|    Generate the in the header cursor the FROM expression :               |
4344 --|    (FROM tab1, tab2, tab3 ...)                                           |
4345 --|                                                                          |
4346 --+==========================================================================+
4347 --
4348 FUNCTION GenerateFromHdrTabs  (
4349 --
4350   p_array_table_name             IN xla_cmp_source_pkg.t_array_VL30
4351 , p_array_parent_table_index           IN xla_cmp_source_pkg.t_array_ByInt
4352 , p_array_table_hash             IN xla_cmp_source_pkg.t_array_VL30
4353 , p_array_populated_flag         IN xla_cmp_source_pkg.t_array_VL1
4354 , p_array_ref_obj_flag           IN xla_cmp_source_pkg.t_array_VL1
4355 --
4356 , p_array_h_source_index         IN xla_cmp_source_pkg.t_array_ByInt
4357 , p_array_h_table_index          IN xla_cmp_source_pkg.t_array_ByInt
4358 --
4359 , p_array_h_mls_source_index     IN xla_cmp_source_pkg.t_array_ByInt
4360 , p_array_h_mls_table_index      IN xla_cmp_source_pkg.t_array_ByInt
4361 --
4362 , p_array_source_code            IN xla_cmp_source_pkg.t_array_VL30
4363 , p_array_lookup_type            IN xla_cmp_source_pkg.t_array_VL30
4364 , p_array_view_application_id    IN xla_cmp_source_pkg.t_array_Num
4365 )
4366 RETURN VARCHAR2
4367 IS
4368 --
4369 l_hdr_tabs                        VARCHAR2(32000);
4370 l_hdr_tab                         VARCHAR2(10000);
4371 --
4372 l_h_count                         BINARY_INTEGER;
4373 l_h_mls_count                     BINARY_INTEGER;
4374 --
4375 l_array_h_tab                     xla_cmp_source_pkg.t_array_ByInt;
4376 l_array_h_mls_tab                 xla_cmp_source_pkg.t_array_ByInt;
4377 --
4378 l_first_tab                       BINARY_INTEGER;
4379 l_first_mls_tab                   BINARY_INTEGER;
4380 --
4381 l_log_module                      VARCHAR2(240);
4382 --
4383 BEGIN
4384 --
4385 IF g_log_enabled THEN
4386       l_log_module := C_DEFAULT_MODULE||'.GenerateFromHdrTabs';
4387 END IF;
4388 --
4389 IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
4390 
4391       trace
4392          (p_msg      => 'BEGIN of GenerateFromHdrTabs'
4393          ,p_level    => C_LEVEL_PROCEDURE
4394          ,p_module   => l_log_module);
4395 
4396 END IF;
4397 --
4398 l_first_tab     := NULL;
4399 l_first_mls_tab := NULL;
4400 --
4401 --
4402 l_h_count       := NVL(p_array_h_source_index.COUNT    ,0);
4403 l_h_mls_count   := NVL(p_array_h_mls_source_index.COUNT,0);
4404 --
4405 
4406 l_hdr_tabs      := NULL;
4407 --
4408 --
4409 IF l_h_count > 0  THEN
4410    --
4411    -- get standard header tables/views
4412    --
4413    --
4414    GetUsedExtractObject( p_array_table_index      => p_array_h_table_index
4415                         ,p_array_parent_table_index     => p_array_parent_table_index
4416                         ,p_array_diff_table_index => l_array_h_tab
4417                        );
4418 
4419    --
4420    -- Get the header always populated extract object
4421    --
4422    l_first_tab := GetAnAlwaysPopulatedObject(
4423      p_array_table_index         => l_array_h_tab
4424    , p_array_populated_flag      => p_array_populated_flag
4425    , p_array_ref_obj_flag        => p_array_ref_obj_flag
4426    );
4427 
4428 END IF;
4429 --
4430 --
4431 --
4432 IF l_h_mls_count > 0 THEN
4433    --
4434    -- get mls header tables/views
4435    --
4436    GetUsedExtractObject( p_array_table_index      => p_array_h_mls_table_index
4437                         ,p_array_parent_table_index     => p_array_parent_table_index
4438                         ,p_array_diff_table_index => l_array_h_mls_tab
4439                        );
4440    --
4441    -- Get the header mls always populated extract object
4442    --
4443     l_first_mls_tab := GetAnAlwaysPopulatedObject(
4447    );
4444       p_array_table_index         => l_array_h_mls_tab
4445     , p_array_populated_flag      => p_array_populated_flag
4446     , p_array_ref_obj_flag        => p_array_ref_obj_flag
4448 
4449 END IF;
4450 --
4451 --
4452 IF l_h_count > 0  THEN
4453 
4454    FOR Idx IN l_array_h_tab.FIRST .. l_array_h_tab.LAST LOOP
4455 
4456     IF l_array_h_tab.EXISTS(Idx)  THEN
4457 
4458        l_hdr_tab    := '      , $table_name$  $tab$' ;
4459        --
4460        l_hdr_tab     := REPLACE(l_hdr_tab, '$table_name$', p_array_table_name(Idx));
4461        l_hdr_tab     := REPLACE(l_hdr_tab, '$tab$', p_array_table_hash(Idx));
4462        l_hdr_tabs    := l_hdr_tabs    || g_chr_newline || l_hdr_tab;
4463        l_hdr_tab     := NULL;
4464        --
4465 
4466     END IF;
4467 
4468    END LOOP;
4469 
4470 END IF;
4471 --
4472 --
4473 IF l_h_mls_count > 0 THEN
4474 --
4475     FOR Idx IN l_array_h_mls_tab.FIRST .. l_array_h_mls_tab.LAST LOOP
4476 
4477     IF l_array_h_mls_tab.EXISTS(Idx)  THEN
4478 
4479        l_hdr_tab    := '      , $table_name$  $tab$' ;
4480        --
4481        l_hdr_tab     := REPLACE(l_hdr_tab, '$table_name$', p_array_table_name(Idx));
4482        l_hdr_tab     := REPLACE(l_hdr_tab, '$tab$', p_array_table_hash(Idx));
4483        l_hdr_tabs    := l_hdr_tabs    ||g_chr_newline || l_hdr_tab;
4484        l_hdr_tab     := NULL;
4485 
4486     END IF;
4487 
4488    END LOOP;
4489 --
4490 END IF;
4491 
4492 --
4493 -- generate the extract of lookup sources
4494 --
4495 
4496 l_hdr_tabs    := l_hdr_tabs || GenerateLookupTables(
4497   p_array_source_index           => p_array_h_source_index
4498 , p_array_table_index            => p_array_h_table_index
4499 , p_array_lookup_type            => p_array_lookup_type
4500 , p_array_view_application_id    => p_array_view_application_id
4501 );
4502 
4503 
4504 l_hdr_tabs    := l_hdr_tabs || GenerateLookupTables(
4505   p_array_source_index           => p_array_h_mls_source_index
4506 , p_array_table_index            => p_array_h_mls_table_index
4507 , p_array_lookup_type            => p_array_lookup_type
4508 , p_array_view_application_id    => p_array_view_application_id
4509 );
4510 --
4511 IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
4512 
4513       trace
4514          (p_msg      => 'END of GenerateFromHdrTabs'
4515          ,p_level    => C_LEVEL_PROCEDURE
4516          ,p_module   => l_log_module);
4517 
4518 END IF;
4519 --
4520 RETURN l_hdr_tabs;
4521 EXCEPTION
4522  WHEN xla_exceptions_pkg.application_exception   THEN
4523         RETURN NULL;
4524  WHEN OTHERS    THEN
4525       xla_exceptions_pkg.raise_message
4526          (p_location => 'xla_cmp_extract_pkg.GenerateFromHdrTabs ');
4527 END GenerateFromHdrTabs;
4528 --
4529 --
4530 --+==========================================================================+
4531 --|                                                                          |
4532 --| Private  function                                                        |
4533 --|                                                                          |
4534 --|    Generate the in the header cursor the WHERE CLAUSES :                 |
4535 --|    (WHERE col1 = col2 AND ...)                                           |
4536 --|                                                                          |
4537 --|                                                                          |
4538 --+==========================================================================+
4539 --
4540 FUNCTION GenerateHdrWhereClause  (
4541 --
4542   p_array_table_name             IN xla_cmp_source_pkg.t_array_VL30
4543 , p_array_parent_table_index           IN xla_cmp_source_pkg.t_array_ByInt
4544 , p_array_table_hash             IN xla_cmp_source_pkg.t_array_VL30
4545 , p_array_populated_flag         IN xla_cmp_source_pkg.t_array_VL1
4546 --
4547 , p_array_ref_obj_flag           IN xla_cmp_source_pkg.t_array_VL1
4548 , p_array_join_condition         IN xla_cmp_source_pkg.t_array_VL2000
4549 --
4550 , p_array_h_source_index         IN xla_cmp_source_pkg.t_array_ByInt
4551 , p_array_h_table_index          IN xla_cmp_source_pkg.t_array_ByInt
4552 --
4553 , p_array_h_mls_source_index     IN xla_cmp_source_pkg.t_array_ByInt
4554 , p_array_h_mls_table_index      IN xla_cmp_source_pkg.t_array_ByInt
4555 --
4556 , p_array_source_code            IN xla_cmp_source_pkg.t_array_VL30
4557 , p_array_lookup_type            IN xla_cmp_source_pkg.t_array_VL30
4558 , p_array_view_application_id    IN xla_cmp_source_pkg.t_array_Num
4559 )
4560 RETURN VARCHAR2
4561 IS
4562 --
4563 l_hdr_clauses                     VARCHAR2(32000);
4564 --
4565 l_hdr_clause                      VARCHAR2(10000);
4566 --
4567 l_hdr_ref_clause                  VARCHAR2(10000);
4568 --
4569 l_h_count                         BINARY_INTEGER;
4570 l_h_mls_count                     BINARY_INTEGER;
4571 --
4572 l_array_h_tab                     xla_cmp_source_pkg.t_array_ByInt;
4573 l_array_h_mls_tab                 xla_cmp_source_pkg.t_array_ByInt;
4574 --
4575 l_first_tab                       BINARY_INTEGER;
4576 l_first_mls_tab                   BINARY_INTEGER;
4577 --
4578 l_log_module                      VARCHAR2(240);
4579 --
4580 BEGIN
4581 --
4582 IF g_log_enabled THEN
4586 IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
4583       l_log_module := C_DEFAULT_MODULE||'.GenerateHdrWhereClause';
4584 END IF;
4585 --
4587 
4588       trace
4589          (p_msg      => 'BEGIN of GenerateHdrWhereClause'
4590          ,p_level    => C_LEVEL_PROCEDURE
4591          ,p_module   => l_log_module);
4592 
4593 END IF;
4594 --
4595 l_first_tab     := NULL;
4596 l_first_mls_tab := NULL;
4597 --
4598 l_h_count       := NVL(p_array_h_source_index.COUNT    ,0);
4599 l_h_mls_count   := NVL(p_array_h_mls_source_index.COUNT,0);
4600 --
4601 l_hdr_clauses   := NULL;
4602 --
4603 --
4604 IF l_h_count > 0  THEN
4605    --
4606    -- get standard header tables/views
4607    --
4608    --
4609    GetUsedExtractObject( p_array_table_index      => p_array_h_table_index
4610                         ,p_array_parent_table_index     => p_array_parent_table_index
4611                         ,p_array_diff_table_index => l_array_h_tab
4612                        );
4613 
4614    --
4615    -- Get the header always populated extract object
4616    --
4617    l_first_tab := GetAnAlwaysPopulatedObject(
4618      p_array_table_index         => l_array_h_tab
4619    , p_array_populated_flag      => p_array_populated_flag
4620    , p_array_ref_obj_flag        => p_array_ref_obj_flag
4621    );
4622    --
4623 END IF;
4624 --
4625 --
4626 --
4627 IF l_h_mls_count > 0 THEN
4628    --
4629    -- get mls header tables/views
4630    --
4631    GetUsedExtractObject( p_array_table_index      => p_array_h_mls_table_index
4632                         ,p_array_parent_table_index     => p_array_parent_table_index
4633                         ,p_array_diff_table_index => l_array_h_mls_tab
4634                        );
4635    --
4636    -- Get the header mls always populated extract object
4637    --
4638     l_first_mls_tab := GetAnAlwaysPopulatedObject(
4639       p_array_table_index         => l_array_h_mls_tab
4640     , p_array_populated_flag      => p_array_populated_flag
4641     , p_array_ref_obj_flag        => p_array_ref_obj_flag
4642    );
4643 
4644 END IF;
4645 --
4646 -- generate first clause
4647 --
4648 IF l_first_tab IS NOT NULL AND l_first_mls_tab IS NOT NULL THEN
4649 
4650      l_hdr_clause  :=  '  AND $first_tab$.event_id      = xet.event_id'              ||g_chr_newline
4651                      ||'  AND $first_tab$.event_id  = $first_mls_tab$.event_id'||g_chr_newline
4652                      ||'  AND $first_mls_tab$.language  = p_language'          ||g_chr_newline
4653                      ;
4654 
4655      l_hdr_clause  := REPLACE(l_hdr_clause,'$first_tab$',p_array_table_hash(l_first_tab));
4656      l_hdr_clause  := REPLACE(l_hdr_clause,'$first_mls_tab$', p_array_table_hash(l_first_mls_tab));
4657      l_hdr_clauses := l_hdr_clauses || l_hdr_clause;
4658      l_hdr_clause  := NULL;
4659      --
4660 ELSIF l_first_tab IS NOT NULL AND l_first_mls_tab IS NULL THEN
4661 
4662      l_hdr_clause  := '   AND $first_tab$.event_id = xet.event_id' || g_chr_newline
4663                    ;
4664      l_hdr_clause  := REPLACE(l_hdr_clause,'$first_tab$',p_array_table_hash(l_first_tab));
4665      l_hdr_clauses := l_hdr_clauses || l_hdr_clause;
4666      l_hdr_clause  := NULL;
4667 
4668 ELSIF l_first_tab IS NULL AND l_first_mls_tab IS NOT NULL THEN
4669 
4670      l_hdr_clause := '  AND $first_mls_tab$.event_id       = xet.event_id'|| g_chr_newline
4671                   || '  AND $first_mls_tab$.language   = p_language'|| g_chr_newline
4672                   ;
4673      --
4674      l_hdr_clause  := REPLACE(l_hdr_clause,'$first_mls_tab$', p_array_table_hash(l_first_mls_tab));
4675      l_hdr_clauses := l_hdr_clauses ||l_hdr_clause;
4676      l_hdr_clause  := NULL;
4677 
4678 END IF;
4679 --
4680 --
4681 IF l_h_count > 0  THEN
4682 
4683    FOR Idx IN l_array_h_tab.FIRST .. l_array_h_tab.LAST LOOP
4684 
4685     IF l_array_h_tab.EXISTS(Idx)  THEN
4686      --
4687        IF NVL(p_array_ref_obj_flag (Idx),'N') = 'N' THEN
4688 
4689           IF  Idx <> NVL(l_first_tab,-1)
4690           AND nvl(p_array_populated_flag(Idx),'N') = 'Y'
4691           AND l_first_tab IS NOT NULL
4692           THEN
4693 
4694             l_hdr_clause  := '  AND $tab$.event_id  = $first_tab$.event_id'  || g_chr_newline
4695                        ;
4696             l_hdr_clause  := REPLACE(l_hdr_clause,'$first_tab$',p_array_table_hash(l_first_tab));
4697 
4698           ELSIF Idx <> NVL(l_first_tab,-1) AND
4699                 nvl(p_array_populated_flag(Idx),'N') = 'N' AND
4700                 l_first_tab IS NOT NULL  THEN
4701 
4702              l_hdr_clause  := '  AND $tab$.event_id (+) = $first_tab$.event_id' || g_chr_newline
4703                        ;
4704              l_hdr_clause  := REPLACE(l_hdr_clause,'$first_tab$',p_array_table_hash(l_first_tab));
4705 
4709           THEN
4706           ELSIF Idx <> NVL(l_first_tab,-1) AND
4707                 nvl(p_array_populated_flag(Idx),'N') = 'Y' AND
4708                 l_first_mls_tab IS NOT NULL
4710 
4711             l_hdr_clause  := '  AND $tab$.event_id  = $first_tab$.event_id'   || g_chr_newline
4712                        ;
4713             l_hdr_clause  := REPLACE(l_hdr_clause,'$first_tab$',p_array_table_hash(l_first_mls_tab));
4714 
4715           ELSIF Idx <> NVL(l_first_tab,-1) AND
4716                 nvl(p_array_populated_flag(Idx),'N') = 'N' AND
4717                 l_first_mls_tab IS NOT NULL THEN
4718 
4719             l_hdr_clause  := '  AND $tab$.event_id (+) = $first_tab$.event_id'|| g_chr_newline
4720                        ;
4721             l_hdr_clause  := REPLACE(l_hdr_clause,'$first_tab$',p_array_table_hash(l_first_mls_tab));
4722 
4723           END IF;
4724 
4725        ELSE -- reference objects
4726           IF nvl(p_array_populated_flag(Idx),'N') = 'Y' THEN
4727              l_hdr_ref_clause := p_array_join_condition(Idx);
4728 
4729              --
4730              -- Replace object names with aliases
4731              --
4732              FOR j IN p_array_table_name.FIRST .. p_array_table_name.LAST LOOP
4733                 l_hdr_ref_clause := REPLACE(LOWER(l_hdr_ref_clause)
4734                                            ,LOWER(p_array_table_name(j))
4735                                            ,LOWER(p_array_table_hash(j)));
4736              END LOOP;
4737 
4738              l_hdr_ref_clause := ' AND ' || l_hdr_ref_clause;
4739 
4740           ELSE
4741              l_hdr_ref_clause := AddOuterJoinOps(
4742                                   p_join_condition => p_array_join_condition(Idx)
4743                                  ,p_ref_obj_name   => p_array_table_name(Idx));
4744 
4745              --
4746              -- Replace object names with aliases
4747              --
4748              FOR j IN p_array_table_name.FIRST .. p_array_table_name.LAST LOOP
4749                 l_hdr_ref_clause := REPLACE(LOWER(l_hdr_ref_clause)
4750                                            ,LOWER(p_array_table_name(j))
4751                                            ,LOWER(p_array_table_hash(j)));
4752              END LOOP;
4753 
4754              l_hdr_ref_clause := ' AND ' || l_hdr_ref_clause;
4755 
4756           END IF;
4757        END IF;
4758       --
4759 
4760        l_hdr_clause      := REPLACE(l_hdr_clause,'$tab$', p_array_table_hash(Idx));
4761        l_hdr_clauses     := l_hdr_clauses || l_hdr_clause || l_hdr_ref_clause;
4762        l_hdr_clause      := NULL;
4763        l_hdr_ref_clause  := NULL;
4764        --
4765 
4766     END IF;
4767 
4768    END LOOP;
4769 
4770 END IF;
4771 --
4772 --
4773 IF l_h_mls_count > 0 THEN
4774 --
4775     FOR Idx IN l_array_h_mls_tab.FIRST .. l_array_h_mls_tab.LAST LOOP
4776 
4777     IF l_array_h_mls_tab.EXISTS(Idx)  THEN
4778 
4779        IF Idx <> NVL(l_first_mls_tab,-1) AND
4780           nvl(p_array_populated_flag(Idx),'N') = 'Y' AND
4781           l_first_mls_tab IS NOT NULL THEN
4782 
4783              l_hdr_clause  := '  AND $tab$.event_id  = $first_tab$.event_id' || g_chr_newline
4784                            || '  AND $tab$.language  = $first_tab$.language' || g_chr_newline
4785                            ;
4786 
4787              l_hdr_clause  := REPLACE(l_hdr_clause,'$first_tab$',p_array_table_hash(l_first_mls_tab));
4788              l_hdr_clause  := REPLACE(l_hdr_clause,'$tab$', p_array_table_hash(Idx));
4789 
4790        ELSIF Idx <> NVL(l_first_mls_tab,-1) AND
4791             nvl(p_array_populated_flag(Idx),'N') = 'N' AND
4792             l_first_mls_tab IS NOT NULL THEN
4793 
4794              l_hdr_clause  := '  AND $tab$.event_id (+) = $first_tab$.event_id'|| g_chr_newline
4795                            || '  AND $tab$.language (+) = $first_tab$.language'|| g_chr_newline
4796                            ;
4797 
4798              l_hdr_clause  := REPLACE(l_hdr_clause,'$first_tab$',p_array_table_hash(l_first_mls_tab));
4799              l_hdr_clause  := REPLACE(l_hdr_clause,'$tab$', p_array_table_hash(Idx));
4800 
4801        ELSIF Idx <> NVL(l_first_mls_tab,-1) AND
4802              nvl(p_array_populated_flag(Idx),'N') = 'Y' AND
4803              l_first_tab IS NOT NULL THEN
4804 
4805              l_hdr_clause  := '  AND $tab$.event_id  = $first_tab$.event_id'|| g_chr_newline
4806                            || '  AND $tab$.language  = p_language'          || g_chr_newline
4807                            ;
4808 
4809              l_hdr_clause  := REPLACE(l_hdr_clause,'$first_tab$',p_array_table_hash(l_first_tab));
4810              l_hdr_clause  := REPLACE(l_hdr_clause,'$tab$', p_array_table_hash(Idx));
4811 
4812        ELSIF Idx <> NVL(l_first_mls_tab,-1) AND
4813             nvl(p_array_populated_flag(Idx),'N') = 'N' AND
4814              l_first_tab IS NOT NULL THEN
4815 
4819 
4816              l_hdr_clause  := '  AND $tab$.event_id (+) = $first_tab$.event_id'|| g_chr_newline
4817                            || '  AND $tab$.language (+) = p_language'|| g_chr_newline
4818                            ;
4820              l_hdr_clause  := REPLACE(l_hdr_clause,'$first_tab$',p_array_table_hash(l_first_tab));
4821              l_hdr_clause  := REPLACE(l_hdr_clause,'$tab$', p_array_table_hash(Idx));
4822 
4823        END IF;
4824 
4825        l_hdr_clauses := l_hdr_clauses ||l_hdr_clause;
4826        l_hdr_clause  := NULL;
4827     --
4828     END IF;
4829 
4830    END LOOP;
4831 --
4832 END IF;
4833 --
4834 
4835 l_hdr_clauses := l_hdr_clauses || GenerateLookupClauses(
4836   p_array_source_index          => p_array_h_source_index
4837 , p_array_table_index           => p_array_h_table_index
4838 , p_array_table_name            => p_array_table_name
4839 , p_array_table_hash            => p_array_table_hash
4840 , p_array_source_code           => p_array_source_code
4841 , p_array_lookup_type           => p_array_lookup_type
4842 , p_array_view_application_id   => p_array_view_application_id
4843 );
4844 
4845 l_hdr_clauses := l_hdr_clauses || GenerateLookupClauses(
4846   p_array_source_index          => p_array_h_mls_source_index
4847 , p_array_table_index           => p_array_h_mls_table_index
4848 , p_array_table_name            => p_array_table_name
4849 , p_array_table_hash            => p_array_table_hash
4850 , p_array_source_code           => p_array_source_code
4851 , p_array_lookup_type           => p_array_lookup_type
4852 , p_array_view_application_id   => p_array_view_application_id
4853 );
4854 
4855 --
4856 IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
4857 
4858       trace
4859          (p_msg      => 'l_hdr_clauses: ' || SUBSTRB(l_hdr_clauses,1, 3985)
4860          ,p_level    => C_LEVEL_PROCEDURE
4861          ,p_module   => l_log_module);
4862 
4863 END IF;
4864 --
4865 IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
4866 
4867       trace
4868          (p_msg      => 'END of GenerateHdrWhereClause'
4869          ,p_level    => C_LEVEL_PROCEDURE
4870          ,p_module   => l_log_module);
4871 
4872 END IF;
4873 --
4874 RETURN l_hdr_clauses;
4875 EXCEPTION
4876  WHEN xla_exceptions_pkg.application_exception   THEN
4877         RETURN NULL;
4878  WHEN OTHERS    THEN
4879       xla_exceptions_pkg.raise_message
4880          (p_location => 'xla_cmp_extract_pkg.GenerateHdrWhereClause ');
4881 END GenerateHdrWhereClause;
4882 --
4883 --+==========================================================================+
4884 --|                                                                          |
4885 --| PRIVATE  function                                                        |
4886 --|                                                                          |
4887 --|                                                                          |
4888 --|                                                                          |
4889 --+==========================================================================+
4890 --
4891 FUNCTION GenerateFromLineTabs  (
4892 --
4893   p_array_table_name             IN xla_cmp_source_pkg.t_array_VL30
4894 , p_array_parent_table_index           IN xla_cmp_source_pkg.t_array_ByInt
4895 , p_array_table_hash             IN xla_cmp_source_pkg.t_array_VL30
4896 , p_array_populated_flag         IN xla_cmp_source_pkg.t_array_VL1
4897 , p_array_ref_obj_flag           IN xla_cmp_source_pkg.t_array_VL1
4898 --
4899 , p_array_l_source_index         IN xla_cmp_source_pkg.t_array_ByInt
4900 , p_array_l_table_index          IN xla_cmp_source_pkg.t_array_ByInt
4901 --
4902 , p_array_l_mls_source_index     IN xla_cmp_source_pkg.t_array_ByInt
4903 , p_array_l_mls_table_index      IN xla_cmp_source_pkg.t_array_ByInt
4904 --
4905 , p_array_source_code            IN xla_cmp_source_pkg.t_array_VL30
4906 , p_array_lookup_type            IN xla_cmp_source_pkg.t_array_VL30
4907 , p_array_view_application_id    IN xla_cmp_source_pkg.t_array_Num
4908 )
4909 RETURN VARCHAR2
4910 IS
4911 --
4912 l_line_tabs                        VARCHAR2(20000);
4913 l_line_tab                         VARCHAR2(1000);
4914 l_l_count                          BINARY_INTEGER;
4915 l_l_mls_count                      BINARY_INTEGER;
4916 l_array_l_tab                      xla_cmp_source_pkg.t_array_ByInt;
4917 l_array_l_mls_tab                  xla_cmp_source_pkg.t_array_ByInt;
4918 l_first_tab                        BINARY_INTEGER;
4919 l_first_mls_tab                    BINARY_INTEGER;
4920 --
4921 l_log_module                   VARCHAR2(240);
4922 --
4923 BEGIN
4924 --
4925 IF g_log_enabled THEN
4926       l_log_module := C_DEFAULT_MODULE||'.GenerateFromLineTabs';
4927 END IF;
4928 --
4929 IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
4930 
4931       trace
4932          (p_msg      => 'BEGIN of GenerateFromLineTabs'
4933          ,p_level    => C_LEVEL_PROCEDURE
4934          ,p_module   => l_log_module);
4935 
4936 END IF;
4937 --
4938 l_l_count     := NVL(p_array_l_source_index.COUNT,0);
4942 l_first_mls_tab := NULL;
4939 l_l_mls_count := NVL(p_array_l_mls_source_index.COUNT,0);
4940 --
4941 l_first_tab     := NULL;
4943 --
4944 
4945 --
4946 -- get list of standard line table
4947 --
4948 IF l_l_count > 0 THEN
4949    --
4950    GetUsedExtractObject( p_array_table_index      => p_array_l_table_index
4951                         ,p_array_parent_table_index     => p_array_parent_table_index
4952                         ,p_array_diff_table_index => l_array_l_tab
4953                      );
4954    --
4955    -- Get the line always populated extract object
4956    --
4957   l_first_tab  := GetAnAlwaysPopulatedObject(
4958         p_array_table_index         => l_array_l_tab
4959       , p_array_populated_flag      => p_array_populated_flag
4960       , p_array_ref_obj_flag        => p_array_ref_obj_flag
4961       );
4962 
4963 END IF;
4964 
4965 --
4966 -- get list of mls line table
4967 --
4968 IF l_l_mls_count > 0 THEN
4969       --
4970       GetUsedExtractObject( p_array_table_index => p_array_l_mls_table_index
4971                            ,p_array_parent_table_index     => p_array_parent_table_index
4972                            ,p_array_diff_table_index => l_array_l_mls_tab
4976       --
4973                      );
4974       --
4975       -- Get the MLS line always populated extract object
4977       l_first_mls_tab := GetAnAlwaysPopulatedObject(
4978         p_array_table_index         => l_array_l_mls_tab
4979       , p_array_populated_flag      => p_array_populated_flag
4980       , p_array_ref_obj_flag        => p_array_ref_obj_flag
4981       );
4982 --
4983 END IF;
4984 --
4985 --
4986 IF l_array_l_tab.COUNT > 0  THEN
4987 
4988    FOR Idx IN l_array_l_tab.FIRST .. l_array_l_tab.LAST LOOP
4989 
4990     IF l_array_l_tab.EXISTS(Idx)  THEN
4991 
4992        l_line_tab    := '        , $table_name$  $tab$' ;
4993        --
4994        l_line_tab     := REPLACE(l_line_tab, '$table_name$', p_array_table_name(Idx));
4995        l_line_tab     := REPLACE(l_line_tab, '$tab$', p_array_table_hash(Idx));
4996        l_line_tabs    := l_line_tabs    || g_chr_newline || l_line_tab;
4997        l_line_tab     := NULL;
4998        --
4999        --
5000     END IF;
5001 
5002    END LOOP;
5003 
5004 END IF;
5005 --
5006 -- MLS extract where clauses
5007 --
5008 IF l_array_l_mls_tab.COUNT > 0  THEN
5009 
5010    FOR Idx IN l_array_l_mls_tab.FIRST .. l_array_l_mls_tab.LAST LOOP
5011 
5012     IF l_array_l_mls_tab.EXISTS(Idx)  THEN
5013 
5014        l_line_tab    := '        , $table_name$  $tab$' ;
5015        --
5016        l_line_tab     := REPLACE(l_line_tab, '$table_name$', p_array_table_name(Idx));
5017        l_line_tab     := REPLACE(l_line_tab, '$tab$', p_array_table_hash(Idx));
5018        l_line_tabs    := l_line_tabs    || g_chr_newline || l_line_tab;
5019        l_line_tab     := NULL;
5020        --
5021 
5022     END IF;
5023 
5024    END LOOP;
5025 
5026 END IF;
5027 --
5028 -- generate the where clauses for extract of lookup sources
5029 --
5030 l_line_tabs    := l_line_tabs || GenerateLookupTables(
5031   p_array_source_index           => p_array_l_source_index
5032 , p_array_table_index            => p_array_l_table_index
5033 , p_array_lookup_type            => p_array_lookup_type
5034 , p_array_view_application_id    => p_array_view_application_id
5035 );
5036 --
5037 l_line_tabs    := l_line_tabs || GenerateLookupTables(
5038   p_array_source_index           => p_array_l_mls_source_index
5039 , p_array_table_index            => p_array_l_mls_table_index
5040 , p_array_lookup_type            => p_array_lookup_type
5041 , p_array_view_application_id    => p_array_view_application_id
5042 );
5043 --
5044 --
5045 IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
5046 
5047       trace
5048          (p_msg      => 'END of GenerateFromLineTabs'
5049          ,p_level    => C_LEVEL_PROCEDURE
5050          ,p_module   => l_log_module);
5051 
5052 END IF;
5053 --
5054 RETURN l_line_tabs;
5055 EXCEPTION
5056  WHEN xla_exceptions_pkg.application_exception   THEN
5060          (p_location => 'xla_cmp_extract_pkg.GenerateFromLineTabs ');
5057         RETURN NULL;
5058  WHEN OTHERS    THEN
5059       xla_exceptions_pkg.raise_message
5061 END GenerateFromLineTabs;
5062 --
5063 --+==========================================================================+
5064 --|                                                                          |
5065 --| PRIVATE function                                                         |
5066 --|                                                                          |
5067 --|                                                                          |
5068 --|                                                                          |
5069 --+==========================================================================+
5070 --
5071 FUNCTION GenerateLineWhereClause  (
5072 --
5073   p_array_table_name             IN xla_cmp_source_pkg.t_array_VL30
5074 , p_array_parent_table_index           IN xla_cmp_source_pkg.t_array_ByInt
5075 , p_array_table_hash             IN xla_cmp_source_pkg.t_array_VL30
5076 , p_array_populated_flag         IN xla_cmp_source_pkg.t_array_VL1
5077 --
5078 , p_array_ref_obj_flag           IN xla_cmp_source_pkg.t_array_VL1
5079 , p_array_join_condition         IN xla_cmp_source_pkg.t_array_VL2000
5080 
5081 --
5082 , p_array_l_source_index         IN xla_cmp_source_pkg.t_array_ByInt
5083 , p_array_l_table_index          IN xla_cmp_source_pkg.t_array_ByInt
5084 --
5085 , p_array_l_mls_source_index     IN xla_cmp_source_pkg.t_array_ByInt
5086 , p_array_l_mls_table_index      IN xla_cmp_source_pkg.t_array_ByInt
5087 --
5088 , p_array_source_code            IN xla_cmp_source_pkg.t_array_VL30
5089 , p_array_lookup_type            IN xla_cmp_source_pkg.t_array_VL30
5090 , p_array_view_application_id    IN xla_cmp_source_pkg.t_array_Num
5091 )
5092 RETURN VARCHAR2
5093 IS
5094 --
5095 l_line_clauses                     VARCHAR2(20000);
5096 l_line_clause                      VARCHAR2(1000);
5097 --
5098 l_line_ref_clause                  VARCHAR2(1000);
5099 --
5100 l_l_count                          BINARY_INTEGER;
5101 l_l_mls_count                      BINARY_INTEGER;
5102 --
5103 l_array_l_tab                      xla_cmp_source_pkg.t_array_ByInt;
5104 l_array_l_mls_tab                  xla_cmp_source_pkg.t_array_ByInt;
5105 --
5106 l_first_tab                        BINARY_INTEGER;
5107 l_first_mls_tab                    BINARY_INTEGER;
5108 --
5109 l_log_module                   VARCHAR2(240);
5110 
5111 l_alc_enabled_flag             VARCHAR2(1);
5112 --
5113 BEGIN
5114 --
5115 
5116 
5117 IF g_log_enabled THEN
5118       l_log_module := C_DEFAULT_MODULE||'.GenerateLineWhereClause';
5119 END IF;
5120 --
5121 IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
5122 
5123       trace
5127 
5124          (p_msg      => 'BEGIN of GenerateLineWhereClause'
5125          ,p_level    => C_LEVEL_PROCEDURE
5126          ,p_module   => l_log_module);
5128 END IF;
5129 --
5130   select alc_enabled_flag
5131     into l_alc_enabled_flag
5132     from xla_subledgers
5133    where application_id = g_application_id;
5134 
5135 l_l_count     := NVL(p_array_l_source_index.COUNT,0);
5136 l_l_mls_count := NVL(p_array_l_mls_source_index.COUNT,0);
5137 --
5138 l_first_tab     := NULL;
5139 l_first_mls_tab := NULL;
5140 --
5141 --
5142 -- get list of standard line table
5143 --
5144 IF l_l_count > 0 THEN
5145    --
5146    GetUsedExtractObject( p_array_table_index      => p_array_l_table_index
5147                         ,p_array_parent_table_index     => p_array_parent_table_index
5148                         ,p_array_diff_table_index => l_array_l_tab
5149                      );
5150    --
5151    -- Get the line always populated extract object
5152    --
5153   l_first_tab  := GetAnAlwaysPopulatedObject(
5154         p_array_table_index         => l_array_l_tab
5155       , p_array_populated_flag      => p_array_populated_flag
5156       , p_array_ref_obj_flag        => p_array_ref_obj_flag
5157       );
5158    --
5159 END IF;
5160 
5161 --
5162 -- get list of mls line table
5163 --
5164 IF l_l_mls_count > 0 THEN
5165       --
5166       GetUsedExtractObject( p_array_table_index => p_array_l_mls_table_index
5170 
5167                      ,p_array_parent_table_index     => p_array_parent_table_index
5168                      ,p_array_diff_table_index => l_array_l_mls_tab
5169                      );
5171       --
5172       -- Get the MLS line always populated extract object
5173       --
5174       l_first_mls_tab := GetAnAlwaysPopulatedObject(
5175         p_array_table_index         => l_array_l_mls_tab
5176       , p_array_populated_flag      => p_array_populated_flag
5177       , p_array_ref_obj_flag        => p_array_ref_obj_flag
5178       );
5179 --
5180 END IF;
5181 --
5182 -- generate first clause
5183 --
5184 IF l_first_tab     IS NOT NULL AND
5185    l_first_mls_tab IS NOT NULL THEN
5186 
5187      l_line_clause  := '  AND $first_tab$.event_id          = xet.event_id'                 ||g_chr_newline
5188                     || '  AND $first_tab$.event_id      = $first_mls_tab$.event_id'   ||g_chr_newline
5189                     || '  AND $first_tab$.line_number   = $first_mls_tab$.line_number'||g_chr_newline
5190                     || '  AND $first_mls_tab$.language  = p_language'                 ||g_chr_newline
5191                     || '  AND $first_tab$.ledger_id(+)  = p_sla_ledger_id'            ||g_chr_newline
5192                     ;
5193      --
5194      l_line_clause  := REPLACE(l_line_clause,'$first_tab$',p_array_table_hash(l_first_tab));
5195      l_line_clause  := REPLACE(l_line_clause,'$first_mls_tab$', p_array_table_hash(l_first_mls_tab));
5196 
5197      l_line_clauses := l_line_clauses ||l_line_clause;
5198      l_line_clause  := NULL;
5199 
5200      --
5201 ELSIF l_first_tab     IS NOT NULL AND
5202       l_first_mls_tab IS NULL THEN
5203 
5204      l_line_clause  := '  AND $first_tab$.event_id          = xet.event_id'                ||g_chr_newline;
5205       IF(l_alc_enabled_flag = 'N') THEN
5206         l_line_clause := l_line_clause ||
5207         '  AND $first_tab$.ledger_id (+)  = p_sla_ledger_id'           ||g_chr_newline;
5208 END IF;
5209 
5210      --
5211      l_line_clause  := REPLACE(l_line_clause,'$first_tab$',p_array_table_hash(l_first_tab));
5212      l_line_clauses := l_line_clauses ||l_line_clause;
5213      l_line_clause  := NULL;
5214 
5215 ELSIF l_first_tab     IS NULL AND
5216       l_first_mls_tab IS NOT NULL THEN
5217 
5218      l_line_clause  := '  AND $first_mls_tab$.event_id        = xet.event_id'                ||g_chr_newline
5219                     || '  AND $first_mls_tab$.language    = p_language'                ||g_chr_newline
5220                     ;
5221 
5222      --
5223      l_line_clause  := REPLACE(l_line_clause,'$first_mls_tab$', p_array_table_hash(l_first_mls_tab));
5224      l_line_clauses := l_line_clauses || l_line_clause;
5225      l_line_clause  := NULL;
5226 
5227 END IF;
5228 --
5229 --
5230 IF l_array_l_tab.COUNT > 0  THEN
5231 
5232    FOR Idx IN l_array_l_tab.FIRST .. l_array_l_tab.LAST LOOP
5233 
5234     IF l_array_l_tab.EXISTS(Idx)  THEN
5235        --
5236        IF nvl(p_array_ref_obj_flag(Idx),'N') = 'N' THEN
5237 
5238           IF Idx <> NVL(l_first_tab,-1) AND
5239                 nvl(p_array_populated_flag(Idx),'N') = 'Y' AND
5240                 l_first_tab IS NOT NULL
5241           THEN
5242 
5243             l_line_clause  := '  AND $tab$.event_id    = $first_tab$.event_id'   ||g_chr_newline
5244                            || '  AND $tab$.line_number = $first_tab$.line_number'||g_chr_newline
5245                            ;
5246 
5247             l_line_clause  := REPLACE(l_line_clause,'$first_tab$',p_array_table_hash(l_first_tab));
5248 
5249           ELSIF Idx <> NVL(l_first_tab,-1) AND
5250                 nvl(p_array_populated_flag(Idx),'N') = 'N' AND
5251                 l_first_tab IS NOT NULL  THEN
5252 
5253                 l_line_clause  := '  AND $tab$.event_id (+)    = $first_tab$.event_id'   ||g_chr_newline
5254                                || '  AND $tab$.line_number (+) = $first_tab$.line_number'||g_chr_newline
5255                                ;
5256 
5257             l_line_clause  := REPLACE(l_line_clause,'$first_tab$',p_array_table_hash(l_first_tab));
5258 
5259           ELSIF Idx <> NVL(l_first_tab,-1) AND
5260                 nvl(p_array_populated_flag(Idx),'N') = 'Y' AND
5261                 l_first_mls_tab IS NOT NULL
5262           THEN
5263 
5264             l_line_clause  := '  AND $tab$.event_id    = $first_tab$.event_id'   ||g_chr_newline
5265                            || '  AND $tab$.line_number = $first_tab$.line_number'||g_chr_newline
5266                            ;
5267 
5268             l_line_clause  := REPLACE(l_line_clause,'$first_tab$',p_array_table_hash(l_first_mls_tab));
5269 
5270           ELSIF Idx <> NVL(l_first_tab,-1) AND
5271                 nvl(p_array_populated_flag(Idx),'N') = 'N' AND
5272                 l_first_mls_tab IS NOT NULL THEN
5273 
5274             l_line_clause  := '  AND $tab$.event_id (+)    = $first_tab$.event_id'   ||g_chr_newline
5275                            || '  AND $tab$.line_number (+) = $first_tab$.line_number'||g_chr_newline
5276                            ;
5277 
5278             l_line_clause  := REPLACE(l_line_clause,'$first_tab$',p_array_table_hash(l_first_mls_tab));
5279 
5280           END IF;
5281 
5282        ELSE -- reference objects
5283           IF nvl(p_array_populated_flag(Idx),'N') = 'Y' THEN
5284              l_line_ref_clause := p_array_join_condition(Idx);
5285 
5286              --
5287              -- Replace object names with aliases
5288              --
5289              FOR j IN p_array_table_name.FIRST .. p_array_table_name.LAST LOOP
5290                 l_line_ref_clause := REPLACE (LOWER(l_line_ref_clause)
5291                                              ,LOWER(p_array_table_name(j))
5292                                              ,LOWER(p_array_table_hash(j)));
5293              END LOOP;
5294 
5295              l_line_ref_clause := ' AND ' || l_line_ref_clause;
5299                                     ,p_ref_obj_name   => p_array_table_name(Idx));
5296           ELSE
5297              l_line_ref_clause := AddOuterJoinOps(
5298                                      p_join_condition => p_array_join_condition(Idx)
5300 
5301              --
5302              -- Replace object names with aliases
5303              --
5304              FOR j IN p_array_table_name.FIRST .. p_array_table_name.LAST LOOP
5305                 l_line_ref_clause := REPLACE (LOWER(l_line_ref_clause)
5306                                              ,LOWER(p_array_table_name(j))
5307                                              ,LOWER(p_array_table_hash(j)));
5308              END LOOP;
5309 
5310              l_line_ref_clause := ' AND ' || l_line_ref_clause;
5311           END IF;
5312        END IF;
5313        --
5314        l_line_clause     := REPLACE(l_line_clause,'$tab$', p_array_table_hash(Idx));
5315        l_line_clauses    := l_line_clauses || l_line_clause || l_line_ref_clause;
5316        l_line_clause     := NULL;
5317        l_line_ref_clause := NULL;
5318 
5319 
5320     END IF;
5321 
5322    END LOOP;
5323 
5324 END IF;
5325 --
5326 -- MLS extract where clauses
5327 --
5328 IF l_array_l_mls_tab.COUNT > 0  THEN
5329 
5330    FOR Idx IN l_array_l_mls_tab.FIRST .. l_array_l_mls_tab.LAST LOOP
5331 
5332     IF l_array_l_mls_tab.EXISTS(Idx)  THEN
5333        --
5334        IF Idx <> NVL(l_first_mls_tab,-1) AND
5335              nvl(p_array_populated_flag(Idx),'N') = 'Y' AND
5336              l_first_mls_tab IS NOT NULL
5337        THEN
5338 
5339          l_line_clause  := '  AND $tab$.event_id    = $first_tab$.event_id'    ||g_chr_newline
5340                         || '  AND $tab$.line_number = $first_tab$.line_number' ||g_chr_newline
5341                         || '  AND $tab$.language    = $first_tab$.language'    ||g_chr_newline
5342                         ;
5343 
5344          l_line_clause  := REPLACE(l_line_clause,'$first_tab$',p_array_table_hash(l_first_mls_tab));
5345 
5346        ELSIF Idx <> NVL(l_first_mls_tab,-1) AND
5347              nvl(p_array_populated_flag(Idx),'N') = 'N' AND
5348              l_first_mls_tab IS NOT NULL THEN
5349 
5350          l_line_clause  := '  AND $tab$.event_id (+)    = $first_tab$.event_id'   ||g_chr_newline
5351                         || '  AND $tab$.line_number (+) = $first_tab$.line_number'||g_chr_newline
5352                         || '  AND $tab$.language (+)    = $first_tab$.language'   ||g_chr_newline
5353                         ;
5354          l_line_clause  := REPLACE(l_line_clause,'$first_tab$',p_array_table_hash(l_first_mls_tab));
5355 
5356         ELSIF Idx <> NVL(l_first_mls_tab,-1) AND
5357               nvl(p_array_populated_flag(Idx),'N') = 'Y' AND
5358               l_first_tab IS NOT NULL
5359         THEN
5360 
5361           l_line_clause  := '  AND $tab$.event_id    = $first_tab$.event_id'   ||g_chr_newline
5362                          || '  AND $tab$.line_number = $first_tab$.line_number'||g_chr_newline
5363                          || '  AND $tab$.language    = p_language'             ||g_chr_newline
5364                          ;
5365           l_line_clause  := REPLACE(l_line_clause,'$first_tab$',p_array_table_hash(l_first_tab));
5366 
5367         ELSIF Idx <> NVL(l_first_mls_tab,-1) AND
5368               nvl(p_array_populated_flag(Idx),'N') = 'N' AND
5369               l_first_tab IS NOT NULL  THEN
5370 
5371          l_line_clause  := '  AND $tab$.event_id (+)    = $first_tab$.event_id'   ||g_chr_newline
5372                         || '  AND $tab$.line_number (+) = $first_tab$.line_number'||g_chr_newline
5373                         || '  AND $tab$.language (+)    = p_language'             ||g_chr_newline
5374                         ;
5375 
5376          l_line_clause  := REPLACE(l_line_clause,'$first_tab$',p_array_table_hash(l_first_tab));
5377 
5378 
5379        END IF;
5380        --
5381 
5382        l_line_clause  := REPLACE(l_line_clause,'$tab$', p_array_table_hash(Idx));
5383        l_line_clauses := l_line_clauses ||  l_line_clause;
5384        l_line_clause  := NULL;
5385 
5386 
5387     END IF;
5388 
5389    END LOOP;
5390 
5391 END IF;
5392 --
5393 -- generate the where clauses for extract of lookup sources
5394 --
5395 --
5396 l_line_clauses := l_line_clauses || GenerateLookupClauses(
5397   p_array_source_index          => p_array_l_source_index
5398 , p_array_table_index           => p_array_l_table_index
5399 , p_array_table_name            => p_array_table_name
5400 , p_array_table_hash            => p_array_table_hash
5401 , p_array_source_code           => p_array_source_code
5402 , p_array_lookup_type           => p_array_lookup_type
5403 , p_array_view_application_id   => p_array_view_application_id
5404 );
5405 --
5406 l_line_clauses := l_line_clauses || GenerateLookupClauses(
5407   p_array_source_index          => p_array_l_mls_source_index
5408 , p_array_table_index           => p_array_l_mls_table_index
5409 , p_array_table_name            => p_array_table_name
5410 , p_array_table_hash            => p_array_table_hash
5411 , p_array_source_code           => p_array_source_code
5412 , p_array_lookup_type           => p_array_lookup_type
5413 , p_array_view_application_id   => p_array_view_application_id
5414 );
5415 --
5416 IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
5417 
5418       trace
5419          (p_msg      => 'l_line_clauses: ' || SUBSTRB(l_line_clauses,1,3984)
5420          ,p_level    => C_LEVEL_PROCEDURE
5421          ,p_module   => l_log_module);
5422 
5423 END IF;
5424 --
5425 IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
5426 
5427       trace
5428          (p_msg      => 'END of GenerateLineWhereClause'
5429          ,p_level    => C_LEVEL_PROCEDURE
5430          ,p_module   => l_log_module);
5431 
5432 END IF;
5433 --
5434 RETURN l_line_clauses;
5438  WHEN OTHERS    THEN
5435 EXCEPTION
5436  WHEN xla_exceptions_pkg.application_exception   THEN
5437         RETURN NULL;
5439       xla_exceptions_pkg.raise_message
5440          (p_location => 'xla_cmp_extract_pkg.GenerateLineWhereClause ');
5441 END GenerateLineWhereClause;
5442 --
5443 --
5444 --+==========================================================================+
5445 --|                                                                          |
5446 --| PRIVATE  FUNCTION                                                        |
5447 --|                                                                          |
5448 --|      Generate the CASE expression into the SQL statements used to        |
5449 --|      Insert header and line sources retrieved from the extract           |
5450 --|                                                                          |
5451 --+==========================================================================+
5452 --
5453 FUNCTION GenerateInsertStm(
5454   p_array_table_name             IN xla_cmp_source_pkg.t_array_VL30
5455 , p_array_table_type             IN xla_cmp_source_pkg.t_array_VL30
5456 , p_array_table_index            IN xla_cmp_source_pkg.t_array_ByInt
5457 , p_array_table_hash             IN xla_cmp_source_pkg.t_array_VL30
5458 , p_array_ref_obj_flag           IN xla_cmp_source_pkg.t_array_VL1
5459 , p_array_populated_flag         IN xla_cmp_source_pkg.t_array_VL1
5460 --
5461 , p_array_source_index           IN xla_cmp_source_pkg.t_array_ByInt
5462 , p_array_source_code            IN xla_cmp_source_pkg.t_array_VL30
5463 , p_array_application_id         IN xla_cmp_source_pkg.t_array_Num
5464 , p_array_source_type_code       IN xla_cmp_source_pkg.t_array_VL1
5465 , p_array_flex_value_set_id      IN xla_cmp_source_pkg.t_array_Num
5466 , p_array_lookup_type            IN xla_cmp_source_pkg.t_array_VL30
5467 , p_array_view_application_id    IN xla_cmp_source_pkg.t_array_Num
5468 --
5469 , p_level                        IN VARCHAR2
5470 , p_procedure                    IN VARCHAR2
5471 )
5472 RETURN CLOB
5473 IS
5474 
5475 --
5476 C_LINE_NUMBER         CONSTANT VARCHAR2(100):= '$tab$.line_number';
5477 C_OBJECT_NAME         CONSTANT VARCHAR2(200):=  'WHEN $index$ THEN ''$object_name$'' ';
5478 C_OBJECT_TYPE_CODE    CONSTANT VARCHAR2(200):=  'WHEN $index$ THEN ''$object_type_code$'' ';
5479 C_SOURCE_APPL_ID      CONSTANT VARCHAR2(200):=  'WHEN $index$ THEN ''$source_application_id$'' ';
5480 C_SOURCE_TYPE_CODE    CONSTANT VARCHAR2(200):=  '''$source_type_code$'' ';
5481 C_SOURCE_CODE         CONSTANT VARCHAR2(200):=  'WHEN $index$ THEN ''$source_code$'' ';
5482 C_SOURCE_VALUE        CONSTANT VARCHAR2(200):=  'WHEN $index$ THEN TO_CHAR($tab$.$source_code$)';
5483 --
5484 C_MEANING_NOT_NULL    CONSTANT VARCHAR2(1000):=   'CASE r
5485                 $source_meaning$
5486                 ELSE null
5487               END ';
5488 C_MEANING_NULL               CONSTANT VARCHAR2(100):=  'null';
5489 C_SOURCE_MEANING_LOOKUP      CONSTANT VARCHAR2(200):=  'WHEN $index$ THEN fvl$Idx$.meaning';
5490 C_SOURCE_MEANING_VALSET      CONSTANT VARCHAR2(1000):=  'WHEN $index$ THEN $package_name$.GetMeaning(
5491                           $flex_value_set_id$
5492                          ,TO_CHAR($tab$.$source_code$)
5493                          ,''$source_code$''
5494                          ,''$source_type_code$''
5495                          ,$source_application_id$)';
5496 
5497 
5498 
5499 --
5500 l_sql_statement          CLOB;
5501 
5502 l_object_name            VARCHAR2(32000);
5503 l_object_type_code       VARCHAR2(32000);
5504 l_source_appl_id         VARCHAR2(32000);
5505 l_source_type_code       VARCHAR2(32000);
5506 l_source_code            VARCHAR2(32000);
5507 l_source_value           VARCHAR2(32000);
5508 l_source_meaning         VARCHAR2(32000);
5509 l_line_number            VARCHAR2(32000);
5510 --
5511 --
5512 l_source_num             NUMBER;
5513 --
5514 l_log_module             VARCHAR2(240);
5515 l_space                  VARCHAR2(100);
5516 --
5517 l_called                 BOOLEAN;
5518 BEGIN
5519 --
5520 IF g_log_enabled THEN
5521       l_log_module := C_DEFAULT_MODULE||'.GenerateInsertStm';
5522 END IF;
5523 --
5524 IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
5525 
5526       trace
5527          (p_msg      => 'BEGIN of GenerateInsertStm'
5528          ,p_level    => C_LEVEL_PROCEDURE
5529          ,p_module   => l_log_module);
5530 
5531 END IF;
5532 
5533 --
5534 l_space              := '                ';
5535 l_object_name        := NULL;
5536 l_object_type_code   := NULL;
5537 l_source_appl_id     := NULL;
5538 l_source_type_code   := NULL;
5539 l_source_code        := NULL;
5540 l_source_value       := NULL;
5541 l_source_meaning     := NULL;
5542 --
5543 l_source_num:= 0;
5544 l_called := FALSE;
5545 --
5546 IF p_array_source_index.COUNT > 0 THEN
5547 --
5548    FOR idx IN p_array_table_index.FIRST..p_array_table_index.LAST LOOP
5549       IF p_array_table_index.EXISTS(idx) AND
5550          p_array_populated_flag(p_array_table_index(idx)) = 'Y' AND
5551          p_array_ref_obj_flag (p_array_table_index(idx)) = 'N' THEN
5552 
5553          l_line_number      := REPLACE(C_LINE_NUMBER,'$tab$',
5554                                         p_array_table_hash(p_array_table_index(idx))); -- Bug 5478323
5555          EXIT;
5556       END IF;
5557    END LOOP;
5558 
5559    FOR Idx IN p_array_source_index.FIRST .. p_array_source_index.LAST LOOP
5560    --
5561       IF p_array_source_index.EXISTS(Idx)  THEN
5562 
5563         l_source_num:= l_source_num + 1 ;
5564 
5565         IF l_source_type_code IS NULL THEN
5566            l_source_type_code   := REPLACE(C_SOURCE_TYPE_CODE,'$source_type_code$'
5567                                 ,p_array_source_type_code(p_array_source_index(Idx)));
5568         END IF;
5569 
5573                                  p_array_table_name(p_array_table_index(Idx)));
5570         l_object_name        := l_object_name ||C_OBJECT_NAME||g_chr_newline||l_space;
5571 
5572         l_object_name        := REPLACE(l_object_name,'$object_name$',
5574 
5575         l_object_name        := REPLACE(l_object_name,'$index$',l_source_num);
5576         --
5577         l_object_type_code   := l_object_type_code ||C_OBJECT_TYPE_CODE||g_chr_newline||l_space;
5578 
5579         l_object_type_code   := REPLACE(l_object_type_code,'$object_type_code$',
5580                                    p_array_table_type(p_array_table_index(Idx)));
5581 
5582         l_object_type_code   := REPLACE(l_object_type_code,'$index$',l_source_num);
5583         --
5584 
5585         l_source_appl_id        := l_source_appl_id ||C_SOURCE_APPL_ID||g_chr_newline||l_space;
5586 
5587         l_source_appl_id        := REPLACE(l_source_appl_id,'$source_application_id$'
5588                                 ,p_array_application_id(p_array_source_index(Idx)));
5589 
5590         l_source_appl_id        := REPLACE(l_source_appl_id,'$index$',l_source_num);
5591 
5592         --
5593 
5594         l_source_code        := l_source_code ||C_SOURCE_CODE||g_chr_newline||l_space;
5595 
5596         l_source_code        := REPLACE(l_source_code,'$source_code$'
5597                                 ,p_array_source_code(p_array_source_index(Idx)));
5598 
5599         l_source_code        := REPLACE(l_source_code,'$index$',l_source_num);
5600 
5601         --
5602         l_source_value       := l_source_value ||C_SOURCE_VALUE||g_chr_newline||l_space;
5603 
5604         l_source_value        := REPLACE(l_source_value,'$source_code$'
5605                                 ,p_array_source_code(p_array_source_index(Idx)));
5606 
5607         l_source_value        := REPLACE(l_source_value,'$tab$'
5608                                 ,p_array_table_hash(p_array_table_index(Idx)));
5609 
5610         l_source_value        := REPLACE(l_source_value,'$index$',l_source_num);
5611         --
5612 
5613         IF p_array_lookup_type.EXISTS(Idx) AND
5614            p_array_lookup_type(Idx) IS NOT NULL AND
5615            p_array_view_application_id.EXISTS(Idx) AND
5616            p_array_view_application_id(Idx) IS NOT NULL THEN
5617 
5618            l_source_meaning     := l_source_meaning || C_SOURCE_MEANING_LOOKUP ||g_chr_newline||l_space;
5619 
5620            l_source_meaning      := REPLACE(l_source_meaning,'$index$',l_source_num);
5621 
5622            l_source_meaning      := REPLACE(l_source_meaning,'$Idx$',Idx);
5623 
5624         ELSIF p_array_flex_value_set_id.EXISTS(Idx) AND
5625               p_array_flex_value_set_id(Idx) IS NOT NULL THEN
5626 
5627            l_source_meaning     := l_source_meaning || C_SOURCE_MEANING_VALSET ||g_chr_newline||l_space;
5628 
5629            l_source_meaning      := REPLACE(l_source_meaning,'$index$',l_source_num);
5630 
5631            l_source_meaning      := REPLACE(l_source_meaning,'$flex_value_set_id$',p_array_flex_value_set_id(Idx));
5632 
5633            l_source_meaning      := REPLACE(l_source_meaning,'$tab$', p_array_table_hash(p_array_table_index(Idx)));
5634 
5635            l_source_meaning      := REPLACE(l_source_meaning,'$source_code$',
5636                                            p_array_source_code(p_array_source_index(Idx)));
5637 
5638            l_source_meaning      := REPLACE(l_source_meaning,'$source_type_code$',
5639                                            p_array_source_type_code(p_array_source_index(Idx)));
5640 
5641            l_source_meaning      := REPLACE(l_source_meaning,'$source_application_id$',
5642                                            p_array_application_id(p_array_source_index(Idx)));
5643 
5644         ELSE
5645            null;
5646         END IF;
5647 
5648         --
5649      END IF;
5650 --
5651  END LOOP;
5652 --
5653 END IF;
5654 --
5655 
5656    --
5657 
5658 
5659 IF l_source_num > 0 THEN
5660 
5661       IF p_level = C_HEADER AND p_procedure = 'EVENT_TYPE' THEN
5662 
5663          l_sql_statement      := C_INSERT_HDR_SOURCES_EVT;
5664 
5665       ELSIF p_level = C_HEADER AND p_procedure = 'EVENT_CLASS' THEN
5666 
5667          l_sql_statement      := C_INSERT_HDR_SOURCES_CLASS;
5668 
5669       ELSIF p_level = C_LINE AND p_procedure = 'EVENT_TYPE' THEN
5670 
5671          l_sql_statement      := C_INSERT_LINE_SOURCES_EVT;
5672 
5673       ELSE
5674 
5675          l_sql_statement      := C_INSERT_LINE_SOURCES_CLASS;
5676 
5677       END IF;
5678 
5679 -- Bugfix 4417664 (replace REPLACE with replace_token)
5680 
5681       l_sql_statement      := xla_cmp_string_pkg.replace_token(l_sql_statement,'$source_number$'        ,nvl(TO_CHAR(l_source_num),' '));
5682       l_sql_statement      := xla_cmp_string_pkg.replace_token(l_sql_statement,'$line_number$'          ,nvl(TO_CHAR(l_line_number),' '));
5683       l_sql_statement      := xla_cmp_string_pkg.replace_token(l_sql_statement,'$object_name$'          ,nvl(l_object_name,' '));
5684       l_sql_statement      := xla_cmp_string_pkg.replace_token(l_sql_statement,'$object_type_code$'     ,nvl(l_object_type_code ,' '));
5685       l_sql_statement      := xla_cmp_string_pkg.replace_token(l_sql_statement,'$source_application_id$',nvl(l_source_appl_id,' '));
5686       l_sql_statement      := xla_cmp_string_pkg.replace_token(l_sql_statement,'$source_type_code$'     ,nvl(l_source_type_code,' '));
5687       l_sql_statement      := xla_cmp_string_pkg.replace_token(l_sql_statement,'$source_code$'          ,nvl(l_source_code,' '));
5688       l_sql_statement      := xla_cmp_string_pkg.replace_token(l_sql_statement,'$source_value$'         ,nvl(l_source_value,' '));
5689       IF l_source_meaning IS NOT NULL THEN
5690 --
5691          l_sql_statement   := REPLACE(l_sql_statement,'$source_meaning$'    ,C_MEANING_NOT_NULL);
5692          l_sql_statement   := REPLACE(l_sql_statement,'$source_meaning$'    ,nvl(l_source_meaning,' '));
5693       ELSE
5697 ELSE
5694          l_sql_statement   := xla_cmp_string_pkg.replace_token(l_sql_statement,'$source_meaning$'    ,C_MEANING_NULL);
5695       END IF;
5696 
5698       l_sql_statement      :=' ';
5699 
5700 END IF;
5701 
5702 --
5703 IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
5704 
5705       trace
5706          (p_msg      => 'END of GenerateInsertStm'
5707          ,p_level    => C_LEVEL_PROCEDURE
5708          ,p_module   => l_log_module);
5709 
5710 END IF;
5711 --
5712 RETURN l_sql_statement;
5713 EXCEPTION
5714  WHEN VALUE_ERROR THEN
5715 
5716    IF (C_LEVEL_UNEXPECTED >= g_log_level) THEN
5717             trace
5718                (p_msg      => 'ERROR: XLA_CMP_COMPILER_ERROR '||sqlerrm
5719                ,p_level    => C_LEVEL_UNEXPECTED
5720                ,p_module   => l_log_module);
5721    END IF;
5722 
5723    RAISE;
5724  WHEN xla_exceptions_pkg.application_exception  THEN
5725     RETURN NULL;
5726  WHEN OTHERS    THEN
5727       xla_exceptions_pkg.raise_message
5728          (p_location => 'xla_cmp_extract_pkg.GenerateInsertStm ');
5729 END GenerateInsertStm;
5730 --
5731 --+==========================================================================+
5732 --|                                                                          |
5733 --| PUBLIC function                                                          |
5734 --|                                                                          |
5735 --|    Generate the INSERT SQL statement used by the Extract Source Values   |
5736 --|    Dump to insert the header source values into xla_diag_sources         |
5737 --|                                                                          |
5738 --|                                                                          |
5739 --+==========================================================================+
5740 --
5741 FUNCTION GenerateInsertHdrSources  (
5742 --
5743   p_array_table_name             IN xla_cmp_source_pkg.t_array_VL30
5744 , p_array_parent_table_index           IN xla_cmp_source_pkg.t_array_ByInt
5745 , p_array_table_hash             IN xla_cmp_source_pkg.t_array_VL30
5746 , p_array_table_type             IN xla_cmp_source_pkg.t_array_VL30
5747 , p_array_populated_flag         IN xla_cmp_source_pkg.t_array_VL1
5748 --
5749 , p_array_ref_obj_flag           IN xla_cmp_source_pkg.t_array_vl1
5750 , p_array_join_condition         IN xla_cmp_source_pkg.t_array_vl2000
5751 --
5752 , p_array_h_source_index         IN xla_cmp_source_pkg.t_array_ByInt
5753 , p_array_h_table_index          IN xla_cmp_source_pkg.t_array_ByInt
5754 --
5755 , p_array_h_mls_source_index     IN xla_cmp_source_pkg.t_array_ByInt
5756 , p_array_h_mls_table_index      IN xla_cmp_source_pkg.t_array_ByInt
5757 --
5758 , p_array_application_id         IN xla_cmp_source_pkg.t_array_Num
5759 , p_array_source_code            IN xla_cmp_source_pkg.t_array_VL30
5760 , p_array_source_type_code       IN xla_cmp_source_pkg.t_array_VL1
5761 , p_array_flex_value_set_id      IN xla_cmp_source_pkg.t_array_Num
5762 , p_array_lookup_type            IN xla_cmp_source_pkg.t_array_VL30
5763 , p_array_view_application_id    IN xla_cmp_source_pkg.t_array_Num
5764 --
5765 , p_procedure                    IN VARCHAR2
5766 )
5767 RETURN CLOB
5768 IS
5769 --
5770 l_sql_statement                CLOB;
5771 l_log_module                   VARCHAR2(240);
5772 --
5773 l_array_source_index          xla_cmp_source_pkg.t_array_ByInt;
5774 l_array_table_index           xla_cmp_source_pkg.t_array_ByInt;
5775 --
5776 BEGIN
5777 --
5778 IF g_log_enabled THEN
5779       l_log_module := C_DEFAULT_MODULE||'.GenerateInsertHdrSources';
5780 END IF;
5781 --
5782 IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
5783 
5784       trace
5785          (p_msg      => 'BEGIN of GenerateInsertHdrSources'
5786          ,p_level    => C_LEVEL_PROCEDURE
5787          ,p_module   => l_log_module);
5788 
5789 END IF;
5790 --
5791 IF NVL(p_array_h_source_index.COUNT,0) > 0 THEN
5792 
5793    FOR Idx IN p_array_h_source_index.FIRST .. p_array_h_source_index.LAST LOOP
5794 
5795        IF p_array_h_source_index.EXISTS(Idx) THEN
5796 
5797           l_array_source_index(Idx) := p_array_h_source_index(Idx);
5798           l_array_table_index(Idx)  := p_array_h_table_index(Idx);
5799 
5800        END IF;
5801 
5802    END LOOP;
5803 
5804 END IF;
5805 
5806 IF NVL(p_array_h_mls_source_index.COUNT,0)> 0 THEN
5807 
5808    FOR Idx IN p_array_h_mls_source_index.FIRST .. p_array_h_mls_source_index.LAST LOOP
5809 
5810        IF p_array_h_mls_source_index.EXISTS(Idx) THEN
5811 
5812           l_array_source_index(Idx) := p_array_h_mls_source_index(Idx);
5813           l_array_table_index(Idx)  := p_array_h_mls_table_index(Idx);
5814 
5815        END IF;
5816 
5817    END LOOP;
5818 
5819 END IF;
5820 
5821 IF NVL(p_array_h_source_index.COUNT,0)+ NVL(p_array_h_mls_source_index.COUNT,0) > 0 THEN
5822 
5823   IF (C_LEVEL_STATEMENT >= g_log_level) THEN
5824 
5825       trace
5826          (p_msg      => 'CALL GenerateInsertStm()'
5827          ,p_level    => C_LEVEL_STATEMENT
5828          ,p_module   => l_log_module);
5829 
5830   END IF;
5831 
5832   l_sql_statement := GenerateInsertStm(
5833                            p_array_table_name             => p_array_table_name
5834                          , p_array_table_type             => p_array_table_type
5835                          , p_array_table_index            => l_array_table_index
5836                          , p_array_table_hash             => p_array_table_hash
5837                          , p_array_ref_obj_flag           => p_array_ref_obj_flag
5838                          , p_array_populated_flag         => p_array_populated_flag
5839 
5840                          --
5844                          , p_array_source_type_code       => p_array_source_type_code
5841                          , p_array_source_index           => l_array_source_index
5842                          , p_array_source_code            => p_array_source_code
5843                          , p_array_application_id         => p_array_application_id
5845                          , p_array_flex_value_set_id      => p_array_flex_value_set_id
5846                          , p_array_lookup_type            => p_array_lookup_type
5847                          , p_array_view_application_id    => p_array_view_application_id
5848                          --
5849                          , p_level                        => C_HEADER
5850                          , p_procedure                    => p_procedure
5851                         );
5852 
5853 -- Bugfix 4417664
5854    l_sql_statement := xla_cmp_string_pkg.replace_token( l_sql_statement,'$hdr_tabs$',
5855                                 nvl(GenerateFromHdrTabs  (
5856                                 --
5857                                   p_array_table_name
5858                                 , p_array_parent_table_index
5859                                 , p_array_table_hash
5860                                 , p_array_populated_flag
5861                                 --
5862                                 , p_array_ref_obj_flag
5863                                 --
5864                                 , p_array_h_source_index
5865                                 , p_array_h_table_index
5866                                 --
5867                                 , p_array_h_mls_source_index
5868                                 , p_array_h_mls_table_index
5869                                 --
5870                                 , p_array_source_code
5871                                 , p_array_lookup_type
5872                                 , p_array_view_application_id
5873                                 ), ' ')
5874                               );
5875 
5876 
5877    l_sql_statement := xla_cmp_string_pkg.replace_token( l_sql_statement,'$hdr_clauses$',
5878                                 nvl(GenerateHdrWhereClause  (
5879                                 --
5880                                   p_array_table_name
5881                                 , p_array_parent_table_index
5882                                 , p_array_table_hash
5883                                 , p_array_populated_flag
5884                                 --
5885                                 , p_array_ref_obj_flag
5886                                 , p_array_join_condition
5887                                 --
5888                                 , p_array_h_source_index
5889                                 , p_array_h_table_index
5890                                 --
5891                                 , p_array_h_mls_source_index
5892                                 , p_array_h_mls_table_index
5893                                 --
5894                                 , p_array_source_code
5895                                 , p_array_lookup_type
5896                                 , p_array_view_application_id
5897                                 ),' ')
5898                                 );
5899 
5900 ELSE
5901 
5902   l_sql_statement := ' ';
5903 
5904 END IF;
5905 
5906 IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
5907 
5908       trace
5909          (p_msg      => 'END of GenerateInsertHdrSources'
5910          ,p_level    => C_LEVEL_PROCEDURE
5911          ,p_module   => l_log_module);
5912 
5913 END IF;
5914 RETURN l_sql_statement;
5915 EXCEPTION
5916  WHEN VALUE_ERROR THEN
5917 
5918    IF (C_LEVEL_UNEXPECTED >= g_log_level) THEN
5919             trace
5920                (p_msg      => 'ERROR: XLA_CMP_COMPILER_ERROR '||sqlerrm
5921                ,p_level    => C_LEVEL_UNEXPECTED
5922                ,p_module   => l_log_module);
5923    END IF;
5924 
5925    RAISE;
5926  WHEN xla_exceptions_pkg.application_exception   THEN
5927    RAISE;
5928  WHEN OTHERS    THEN
5929       xla_exceptions_pkg.raise_message
5930          (p_location => 'xla_cmp_extract_pkg.GenerateInsertHdrSources ');
5931 END GenerateInsertHdrSources;
5932 
5933 --+==========================================================================+
5934 --|                                                                          |
5935 --| PUBLIC function                                                          |
5936 --|                                                                          |
5937 --|    Generate the INSERT SQL statement used by the Extract Source Values   |
5938 --|    Dump to insert the line source values into xla_diag_sources           |
5939 --|                                                                          |
5940 --|                                                                          |
5941 --+==========================================================================+
5942 --
5943 FUNCTION GenerateInsertLineSources  (
5944 --
5945   p_array_table_name             IN xla_cmp_source_pkg.t_array_VL30
5946 , p_array_parent_table_index           IN xla_cmp_source_pkg.t_array_ByInt
5947 , p_array_table_hash             IN xla_cmp_source_pkg.t_array_VL30
5948 , p_array_table_type             IN xla_cmp_source_pkg.t_array_VL30
5949 , p_array_populated_flag         IN xla_cmp_source_pkg.t_array_VL1
5950 --
5951 , p_array_ref_obj_flag           IN xla_cmp_source_pkg.t_array_VL1
5952 , p_array_join_condition         IN xla_cmp_source_pkg.t_array_VL2000
5953 --
5954 , p_array_l_source_index         IN xla_cmp_source_pkg.t_array_ByInt
5955 , p_array_l_table_index          IN xla_cmp_source_pkg.t_array_ByInt
5956 --
5957 , p_array_l_mls_source_index     IN xla_cmp_source_pkg.t_array_ByInt
5958 , p_array_l_mls_table_index      IN xla_cmp_source_pkg.t_array_ByInt
5959 --
5960 , p_array_application_id         IN xla_cmp_source_pkg.t_array_Num
5961 , p_array_source_code            IN xla_cmp_source_pkg.t_array_VL30
5965 , p_array_view_application_id    IN xla_cmp_source_pkg.t_array_Num
5962 , p_array_source_type_code       IN xla_cmp_source_pkg.t_array_VL1
5963 , p_array_flex_value_set_id      IN xla_cmp_source_pkg.t_array_Num
5964 , p_array_lookup_type            IN xla_cmp_source_pkg.t_array_VL30
5966 --
5967 ,p_procedure                     IN VARCHAR2
5968 )
5969 RETURN CLOB
5970 IS
5971 --
5972 l_sql_statement                CLOB;
5973 l_log_module                   VARCHAR2(240);
5974 --
5975 l_array_source_index          xla_cmp_source_pkg.t_array_ByInt;
5976 l_array_table_index           xla_cmp_source_pkg.t_array_ByInt;
5977 --
5978 BEGIN
5979 --
5980 IF g_log_enabled THEN
5981       l_log_module := C_DEFAULT_MODULE||'.GenerateInsertLineSources';
5982 END IF;
5983 --
5984 IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
5985 
5986       trace
5987          (p_msg      => 'BEGIN of GenerateInsertLineSources'
5988          ,p_level    => C_LEVEL_PROCEDURE
5989          ,p_module   => l_log_module);
5990 
5991 END IF;
5992 --
5993 
5994 IF NVL(p_array_l_source_index.COUNT,0) > 0 THEN
5995 
5996    FOR Idx IN p_array_l_source_index.FIRST .. p_array_l_source_index.LAST LOOP
5997 
5998        IF p_array_l_source_index.EXISTS(Idx) THEN
5999 
6000           l_array_source_index(Idx) := p_array_l_source_index(Idx);
6001           l_array_table_index(Idx)  := p_array_l_table_index(Idx);
6002 
6003        END IF;
6004 
6005    END LOOP;
6006 
6007 END IF;
6008 
6009 IF NVL(p_array_l_mls_source_index.COUNT,0)> 0 THEN
6010 
6011    FOR Idx IN p_array_l_mls_source_index.FIRST .. p_array_l_mls_source_index.LAST LOOP
6012 
6013        IF p_array_l_mls_source_index.EXISTS(Idx) THEN
6014 
6015           l_array_source_index(Idx) := p_array_l_mls_source_index(Idx);
6016           l_array_table_index(Idx)  := p_array_l_mls_table_index(Idx);
6017 
6018        END IF;
6019 
6020    END LOOP;
6021 
6022 END IF;
6023 
6024 IF NVL(p_array_l_source_index.COUNT,0)+
6025    NVL(p_array_l_mls_source_index.COUNT,0)> 0 THEN
6026 
6027    l_sql_statement := GenerateInsertStm(
6028                            p_array_table_name             => p_array_table_name
6029                          , p_array_table_type             => p_array_table_type
6030                          , p_array_table_index            => l_array_table_index
6031                          , p_array_table_hash             => p_array_table_hash
6032                          , p_array_ref_obj_flag           => p_array_ref_obj_flag
6033                          , p_array_populated_flag         => p_array_populated_flag
6034                          --
6035                          , p_array_source_index           => l_array_source_index
6036                          , p_array_source_code            => p_array_source_code
6037                          , p_array_application_id         => p_array_application_id
6038                          , p_array_source_type_code       => p_array_source_type_code
6039                          , p_array_flex_value_set_id      => p_array_flex_value_set_id
6040                          , p_array_lookup_type            => p_array_lookup_type
6041                          , p_array_view_application_id    => p_array_view_application_id
6042                          --
6043                          , p_level                        => C_LINE
6044                          , p_procedure                    => p_procedure
6045                         );
6046 
6047 -- Bugfix 4417664
6048    l_sql_statement := xla_cmp_string_pkg.replace_token( l_sql_statement,'$line_tabs$',
6049                                       nvl(GenerateFromLineTabs  (
6050                                       --
6051                                         p_array_table_name
6052                                       , p_array_parent_table_index
6053                                       , p_array_table_hash
6054                                       , p_array_populated_flag
6055                                       --
6056                                       , p_array_ref_obj_flag
6057                                       --
6058                                       , p_array_l_source_index
6059                                       , p_array_l_table_index
6060                                       --
6061                                       , p_array_l_mls_source_index
6062                                       , p_array_l_mls_table_index
6063                                       --
6064                                       , p_array_source_code
6065                                       , p_array_lookup_type
6066                                       , p_array_view_application_id
6067                                       ),' ')
6068                                      );
6069 
6070    l_sql_statement := xla_cmp_string_pkg.replace_token( l_sql_statement,'$line_clauses$',
6071                                      nvl(GenerateLineWhereClause  (
6072                                      --
6073                                        p_array_table_name
6077                                      --
6074                                      , p_array_parent_table_index
6075                                      , p_array_table_hash
6076                                      , p_array_populated_flag
6078                                      , p_array_ref_obj_flag
6079                                      , p_array_join_condition
6080                                      --
6081                                      , p_array_l_source_index
6082                                      , p_array_l_table_index
6083                                      --
6084                                      , p_array_l_mls_source_index
6085                                      , p_array_l_mls_table_index
6086                                      --
6087                                      , p_array_source_code
6088                                      , p_array_lookup_type
6089                                      , p_array_view_application_id
6090                                      ),' ')
6091                                   );
6092 
6093 
6094 ELSE
6095 
6096   l_sql_statement := ' ';
6097 
6098 END IF;
6099 
6100 IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
6101 
6102       trace
6103          (p_msg      => 'END of GenerateInsertLineSources'
6104          ,p_level    => C_LEVEL_PROCEDURE
6105          ,p_module   => l_log_module);
6106 
6107 END IF;
6108 RETURN l_sql_statement;
6109 EXCEPTION
6110  WHEN VALUE_ERROR THEN
6111 
6112    IF (C_LEVEL_UNEXPECTED >= g_log_level) THEN
6113             trace
6114                (p_msg      => 'ERROR: XLA_CMP_COMPILER_ERROR '||sqlerrm
6115                ,p_level    => C_LEVEL_UNEXPECTED
6116                ,p_module   => l_log_module);
6117    END IF;
6118 
6119    RAISE;
6120 
6121  WHEN xla_exceptions_pkg.application_exception   THEN
6122         RAISE;
6123  WHEN OTHERS    THEN
6124       xla_exceptions_pkg.raise_message
6125          (p_location => 'xla_cmp_extract_pkg.GenerateInsertLineSources ');
6126 END GenerateInsertLineSources;
6127 
6128 
6129 
6130 
6131 
6132 --
6133 --=============================================================================
6134 --
6135 --
6136 --
6137 --
6138 --
6139 --
6140 --
6141 --
6142 --
6143 --
6144 --
6145 --
6146 --
6147 --
6148 --
6149 --
6150 --
6151 --
6152 --
6153 --
6154 --
6155 --
6156 --=============================================================================
6157 --=============================================================================
6158 --          *********** Initialization routine **********
6159 --=============================================================================
6160 
6161 BEGIN
6162 
6163    g_log_level      := FND_LOG.G_CURRENT_RUNTIME_LEVEL;
6164    g_log_enabled    := fnd_log.test
6165                           (log_level  => g_log_level
6166                           ,module     => C_DEFAULT_MODULE);
6167 
6168    IF NOT g_log_enabled  THEN
6169       g_log_level := C_LEVEL_LOG_DISABLED;
6170    END IF;
6171 --
6172 END xla_cmp_extract_pkg;