DBA Data[Home] [Help]

PACKAGE BODY: APPS.HZ_PARTY_STAGE

Source


1 PACKAGE BODY HZ_PARTY_STAGE AS
2 /*$Header: ARHDSTGB.pls 120.77.12000000.2 2007/04/19 10:31:07 rarajend ship $ */
3 
4 
5 g_batch_size NUMBER := 200;
6 g_num_stage_steps NUMBER := 3;
7 g_num_stage_new_steps NUMBER := 6;
8 g_schema_name VARCHAR2(30) ;
9 
10 PROCEDURE l(str VARCHAR2) IS
11 BEGIN
12   HZ_GEN_PLSQL.add_line(str);
13 END;
14 
15 PROCEDURE verify_all_procs;
16 
17 PROCEDURE create_btree_indexes (p_entity VARCHAR2);
18 
19 PROCEDURE log(
20    message      IN      VARCHAR2,
21    newline      IN      BOOLEAN DEFAULT TRUE);
22 
23 PROCEDURE outandlog(
24    message      IN      VARCHAR2,
25    newline      IN      BOOLEAN DEFAULT TRUE);
26 
27 FUNCTION logerror(SQLERRM VARCHAR2 DEFAULT NULL)
28          RETURN VARCHAR2;
29 
30 PROCEDURE generate_map_proc (
31    p_entity             IN      VARCHAR2,
32    p_proc_name          IN      VARCHAR2,
33    p_command            IN      VARCHAR2
34 );
35 
36 PROCEDURE gather_stats (
37    table_owner          IN      VARCHAR2,
38    table_name           IN      VARCHAR2
39 );
40 
41 PROCEDURE generate_party_query_proc;
42 
43 -- REPURI. Added the following 4 new proccedures for
44 -- open_sync_xxx_cursor query and sync_all_xxx API logic.
45 PROCEDURE generate_sync_party_query_proc;
46 PROCEDURE generate_sync_psite_query_proc;
47 PROCEDURE generate_sync_ct_query_proc;
48 PROCEDURE generate_sync_cpt_query_proc;
49 
50 -- REPURI. Added the following 4 new proccedures for
51 -- open_bulk_imp_sync_xxx_cur query logic procedures.
52 -- Bug 4884735.
53 PROCEDURE gen_bulk_imp_sync_party_query;
54 PROCEDURE gen_bulk_imp_sync_psite_query;
55 PROCEDURE gen_bulk_imp_sync_ct_query;
56 PROCEDURE gen_bulk_imp_sync_cpt_query;
57 
58 PROCEDURE generate_party_query_upd(x_rebuild_party_idx OUT NOCOPY BOOLEAN);
59 PROCEDURE generate_declarations;
60 PROCEDURE generate_ds_proc;
61 PROCEDURE generate_log;
62 PROCEDURE generate_ins_dqm_sync_err_rec;
63 PROCEDURE generate_contact_query_proc;
64 PROCEDURE generate_contact_query_upd(x_rebuild_contact_idx OUT NOCOPY BOOLEAN);
65 PROCEDURE generate_contact_pt_query_proc;
66 PROCEDURE generate_contact_pt_query_upd(x_rebuild_cpt_idx OUT NOCOPY BOOLEAN);
67 PROCEDURE generate_party_site_query_proc;
68 PROCEDURE generate_party_site_query_upd(x_rebuild_psite_idx OUT NOCOPY BOOLEAN);
69 
70 FUNCTION wait_for_request(
71     p_request_id NUMBER) RETURN VARCHAR2;
72 
73 FUNCTION has_trx_context(proc VARCHAR2) RETURN BOOLEAN;
74 FUNCTION has_context(proc VARCHAR2) RETURN BOOLEAN;
75 FUNCTION get_size(p_table_name VARCHAR2) RETURN  NUMBER;
76 
77 procedure create_pref (
78         p_ds_name       VARCHAR2,
79         p_columns       VARCHAR2) IS
80 BEGIN
81   log ('-----------------------------------------------------------');
82   log( 'In create_pref '); -- VJN ADDED
83   log ('length of p_columns is ' || length(p_columns) ); -- VJN ADDED
84   BEGIN
85     ad_ctx_ddl.drop_preference(p_ds_name);
86   EXCEPTION
87     WHEN OTHERS THEN
88       log('exception thrown while dropping preference for ' || p_ds_name );
89       null;
90   END;
91 
92   -- Bug Fix for 4359525 ( This is a forward port for bug 4382012 originally reported on 11i.HZ.M )
93   -- Create preference only if there are any columns to be associated to the preference
94   IF length(p_columns) > 0 THEN
95     ad_ctx_ddl.create_preference(p_ds_name, 'MULTI_COLUMN_DATASTORE');
96     ad_ctx_ddl.set_attribute(p_ds_name,'columns',p_columns);
97     log('Preference successfully created for ' || p_ds_name );
98   ELSE
99     log('Preference ' || p_ds_name || ' not created since there are no associated columns');
100   END IF ;
101 END;
102 
103 -- THIS WILL CREATE PREFERENCES FOR ALL THE DENORM ATTRIBUTES
104 -- AT THE DETAIL LEVEL ( PARTY SITES, CONTACTS, CONTACT POINTS )
105 -- AT EACH LEVEL, THE PREFERENCE WOULD BE USED TO STORE THE CONCATENATION
106 -- OF THE STAGING COLUMNS OF ALL ACTIVE TRANSFORMATIONS OF A DENORM ATTRIBUTE
107 
108 PROCEDURE create_denorm_attribute_pref ( p_entity varchar2)
109 IS
110 concat_trfn varchar2(2000);
111 row_count number := 0 ;
112 BEGIN
113 log ('--------------------------------------');
114 log(' Calling create_denorm_attribute_pref for ' || p_entity);
115 IF p_entity = 'PARTY_SITES'
116 THEN
117         -- SET PREFERENCE FOR PARTY SITE DENORM ATTRIBUTES
118         FOR col_cur in
119         (
120         -- will get all staged attribute columns corresponding to active transformations
121         -- that are defined on party site denorm attributes
122         SELECT  b.staged_attribute_column as attrib_column
123         from HZ_TRANS_ATTRIBUTES_VL a, hz_trans_functions_vl b
124         where  a.entity_name = 'PARTY_SITES'
125                and nvl(a.denorm_flag,'N') = 'Y'
126                and a.attribute_id = b.attribute_id
127                and nvl( b.active_flag, 'Y') = 'Y'
128                and b.staged_attribute_table = 'HZ_STAGED_PARTY_SITES'
129         )
130         LOOP
131                row_count := row_count + 1 ;
132                IF row_count > 1
133                THEN
134                   concat_trfn := concat_trfn || ' ' || col_cur.attrib_column ;
135                ELSE
136                   concat_trfn := col_cur.attrib_column ;
137                END IF;
138 
139 END LOOP ;
140 
141               create_pref('DENORM_PS', concat_trfn);
142 ELSIF p_entity = 'CONTACTS'
143 THEN
144 
145             -- SET PREFERENCE FOR CONTACTS DENORM ATTRIBUTES
146             FOR col_cur in
147             (
148             -- will get all staged attribute columns corresponding to active transformations
149             -- that are defined on contact denorm attributes
150             SELECT  b.staged_attribute_column as attrib_column
151             from HZ_TRANS_ATTRIBUTES_VL a, hz_trans_functions_vl b
152             where  a.entity_name = 'CONTACTS'
153                    and nvl(a.denorm_flag,'N') = 'Y'
154                    and a.attribute_id = b.attribute_id
155                    and nvl( b.active_flag, 'Y') = 'Y'
156                    and b.staged_attribute_table = 'HZ_STAGED_CONTACTS'
157             )
158             LOOP
159                    row_count := row_count + 1 ;
160                    IF row_count > 1
161                    THEN
162                       concat_trfn := concat_trfn || ' ' || col_cur.attrib_column ;
163                    ELSE
164                       concat_trfn := col_cur.attrib_column ;
165                    END IF;
166 
167             END LOOP ;
168 
169             create_pref('DENORM_CT', concat_trfn);
170 
171 ELSIF p_entity = 'CONTACT_POINTS'
172 THEN
173 
174               -- SET PREFERENCE FOR CONTACT POINT DENORM ATTRIBUTES
175               FOR col_cur in
176               (
177               -- will get all staged attribute columns corresponding to active transformations
178               -- that are defined on contact point denorm attributes
179               SELECT  b.staged_attribute_column as attrib_column
180               from HZ_TRANS_ATTRIBUTES_VL a, hz_trans_functions_vl b
181               where  a.entity_name = 'CONTACT_POINTS'
182                      and nvl(a.denorm_flag,'N') = 'Y'
183                      and a.attribute_id = b.attribute_id
184                      and nvl( b.active_flag, 'Y') = 'Y'
185                      and b.staged_attribute_table = 'HZ_STAGED_CONTACT_POINTS'
186               )
187               LOOP
188                      row_count := row_count + 1 ;
189                      IF row_count > 1
190                      THEN
191                         concat_trfn := concat_trfn || ' ' || col_cur.attrib_column ;
192                      ELSE
193                         concat_trfn := col_cur.attrib_column ;
194                      END IF;
195 
196               END LOOP ;
197               create_pref('DENORM_CPT', concat_trfn);
198 END IF;
199 
200 END;
201 
202 -- WILL RETURN THE STAGING COLUMNS CORRESPONDING TO ALL ACTIVE DENORM ATTRIBUTES
203 -- THAT ARE NOT IN THE PREFERENCE, BY CONCATENATING THEM WITH A HARCODED || IN BETWEEN
204 FUNCTION get_missing_denorm_attrib_cols( p_entity varchar2)
205 RETURN VARCHAR2
206 IS
207 cols varchar2(2000);
208 concat_pref_cols varchar2(2000);
209 row_count number := 0 ;
210 BEGIN
211 log ('--------------------------------------');
212 IF p_entity = 'PARTY_SITES'
213 THEN
214         BEGIN
215         select prv_value into concat_pref_cols
216         from ctx_preference_values c
217         where prv_preference = 'DENORM_PS'
218         and prv_attribute = 'COLUMNS' ;
219 
220         EXCEPTION WHEN OTHERS
221         THEN
222          log('Data not found for DENORM_PS in get_missing_denorm_attrib_cols');
223          concat_pref_cols := null ;
224         END ;
225 
226         FOR col_cur in
227         (
228         SELECT  b.staged_attribute_column as attrib_column
229         from HZ_TRANS_ATTRIBUTES_VL a, hz_trans_functions_vl b
230         where  a.entity_name = 'PARTY_SITES'
231                and nvl(a.denorm_flag,'N') = 'Y'
232                and a.attribute_id = b.attribute_id
233                and nvl( b.active_flag, 'Y') = 'Y'
234                and b.staged_attribute_table = 'HZ_STAGED_PARTY_SITES'
235 
236         )
237         LOOP
238                 -- if any attribute columns do not exist in the preference
239                 IF instr(concat_pref_cols || ' ', col_cur.attrib_column || ' ') = 0
240                 THEN
241                          row_count := row_count + 1 ;
242                          IF row_count > 1
243                          THEN
244                             cols := cols || '||'' ''||' || col_cur.attrib_column ;
245                          ELSE
246                             cols := col_cur.attrib_column ;
247                          END IF;
248                 END IF ;
249         END LOOP ;
250         log('Missing denorm columns after concatenation for' || p_entity || '--' || cols );
251         RETURN cols ;
252 ELSIF p_entity = 'CONTACTS'
253 THEN
254         BEGIN
255         select prv_value into concat_pref_cols
256         from ctx_preference_values c
257         where prv_preference = 'DENORM_CT'
258         and prv_attribute = 'COLUMNS' ;
259 
260         EXCEPTION WHEN OTHERS
261         THEN
262          log('Data not found for DENORM_CT in get_missing_denorm_attrib_cols');
263          concat_pref_cols := null ;
264         END ;
265 
266         FOR col_cur in
267         (
268         SELECT  b.staged_attribute_column as attrib_column
269         from HZ_TRANS_ATTRIBUTES_VL a, hz_trans_functions_vl b
270         where  a.entity_name = 'CONTACTS'
271                and nvl(a.denorm_flag,'N') = 'Y'
272                and a.attribute_id = b.attribute_id
273                and nvl( b.active_flag, 'Y') = 'Y'
274                and b.staged_attribute_table = 'HZ_STAGED_CONTACTS'
275 
276         )
277         LOOP
278                  -- if any attribute columns do not exist in the preference
279                 IF instr(concat_pref_cols || ' ', col_cur.attrib_column || ' ') = 0
280                 THEN
281                          row_count := row_count + 1 ;
282                          IF row_count > 1
283                          THEN
284                             cols := cols || '||'' ''||' || col_cur.attrib_column ;
285                          ELSE
286                             cols := col_cur.attrib_column ;
287                          END IF;
288                 END IF ;
289         END LOOP ;
290         log('Missing denorm columns after concatenation for' || p_entity || '--' || cols );
291         RETURN cols ;
292 
293 ELSIF p_entity = 'CONTACT_POINTS'
294 THEN
295         BEGIN
296         select prv_value into concat_pref_cols
297         from ctx_preference_values c
298         where prv_preference = 'DENORM_CPT'
299         and prv_attribute = 'COLUMNS' ;
300 
301         EXCEPTION WHEN OTHERS
302         THEN
303          log('Data not found for DENORM_CPT in get_missing_denorm_attrib_cols');
304          concat_pref_cols := null ;
305         END ;
306 
307         FOR col_cur in
308         (
309         SELECT  b.staged_attribute_column as attrib_column
310         from HZ_TRANS_ATTRIBUTES_VL a, hz_trans_functions_vl b
311         where  a.entity_name = 'CONTACT_POINTS'
312                and nvl(a.denorm_flag,'N') = 'Y'
313                and a.attribute_id = b.attribute_id
314                and nvl( b.active_flag, 'Y') = 'Y'
315                and b.staged_attribute_table = 'HZ_STAGED_CONTACT_POINTS'
316 
317         )
318         LOOP
319                  -- if any attribute columns do not exist in the preference
320                 IF instr(concat_pref_cols || ' ', col_cur.attrib_column || ' ') = 0
321                 THEN
322                          row_count := row_count + 1 ;
323                          IF row_count > 1
324                          THEN
325                             cols := cols || '||'' ''||' || col_cur.attrib_column ;
326                          ELSE
327                             cols := col_cur.attrib_column ;
328                          END IF;
329                 END IF ;
330         END LOOP ;
331         log('Missing denorm columns after concatenation for' || p_entity || '--' || cols );
332         RETURN cols ;
333 END IF ;
334 
335 END;
336 
337 FUNCTION new_transformations_exist (p_entity varchar2)
338 RETURN BOOLEAN
339 IS
340   l_count NUMBER := 0;
341 BEGIN
342   log ('--------------------------------------');
343   SELECT count(1) into l_count
344     from hz_trans_attributes_vl a
345     where a.entity_name = p_entity
346     and exists (
347       SELECT 1 from hz_trans_functions_vl f
348       where a.attribute_id = f.attribute_id
349       and nvl(f.ACTIVE_FLAG,'Y') = 'Y'
350       and primary_flag = 'Y'
351       AND NVL(STAGED_FLAG,'N') ='N');
352   IF l_count > 0
353   THEN
354     log('There are new transformations that have been created for ' || p_entity );
355     RETURN TRUE ;
356   ELSE
357     log('No new transformations have been created for ' || p_entity );
358     RETURN FALSE ;
359   END IF ;
360 END;
361 
362 
363 PROCEDURE delete_existing_data IS
364 
365 l_owner VARCHAR2(255);
366 l_status VARCHAR2(255);
367 l_owner1 VARCHAR2(255);
368 l_temp VARCHAR2(255);
369 BEGIN
370    IF (fnd_installation.GET_APP_INFO('AR',l_status,l_temp,l_owner1)) THEN
371     select owner into l_owner from sys.all_objects
372     where object_name = 'HZ_STAGED_PARTIES' and OBJECT_TYPE = 'TABLE' and owner = l_owner1;
373    END IF;
374     log('Deleting existing staged data');
375     log('Truncating HZ_STAGED_PARTIES .. ', FALSE);
376     EXECUTE IMMEDIATE 'TRUNCATE TABLE '||l_owner||'.HZ_STAGED_PARTIES';
377     log('Done');
378 
379     log('Truncating HZ_STAGED_PARTY_SITES .. ', FALSE);
380     EXECUTE IMMEDIATE 'TRUNCATE TABLE '||l_owner||'.HZ_STAGED_PARTY_SITES';
381     log('Done');
382 
383     log('Truncating HZ_STAGED_CONTACTS .. ', FALSE);
384     EXECUTE IMMEDIATE 'TRUNCATE TABLE '||l_owner||'.HZ_STAGED_CONTACTS';
385     log('Done');
386 
387     log('Truncating HZ_STAGED_CONTACT_POINTS .. ', FALSE);
388     EXECUTE IMMEDIATE 'TRUNCATE TABLE '||l_owner||'.HZ_STAGED_CONTACT_POINTS';
389     log('Done');
390 
391     log('Attempting to truncate HZ_DQM_SYNC_INTERFACE ..',FALSE);
392     BEGIN
393       EXECUTE IMMEDIATE 'TRUNCATE TABLE '||l_owner||'.hz_dqm_sync_interface';
394       log('Done Successfully');
395     EXCEPTION
396       WHEN OTHERS THEN
397         log('Lock on table. Unable to truncate');
398     END;
399 
400 END;
401 
402 PROCEDURE generate_map_pkg_nolog IS
403 BEGIN
404     HZ_GEN_PLSQL.new('HZ_STAGE_MAP_TRANSFORM', 'PACKAGE BODY');
405     l('CREATE OR REPLACE PACKAGE BODY HZ_STAGE_MAP_TRANSFORM AS');
409     generate_log;
406 
407     generate_declarations;
408     generate_ds_proc;
410     generate_ins_dqm_sync_err_rec;
411     generate_party_query_proc;
412     generate_contact_query_proc;
413     generate_contact_pt_query_proc;
414     generate_party_site_query_proc;
415 
416     -- REPURI. Added calls to the following 4 new proccedures for
417     -- open_sync_xxx_cursor query and sync_all_xxx API logic.
418 
419     generate_sync_party_query_proc;
420     generate_sync_psite_query_proc;
421     generate_sync_ct_query_proc;
422     generate_sync_cpt_query_proc;
423 
424     -- REPURI. Added calls to the following 4 new proccedures for
425     -- open_bulk_imp_sync_xxx_cur query logic.
426     -- Bug 4884735.
427 
428     gen_bulk_imp_sync_party_query;
429     gen_bulk_imp_sync_psite_query;
430     gen_bulk_imp_sync_ct_query;
431     gen_bulk_imp_sync_cpt_query;
432 
433     l('END;');
434 
435     HZ_GEN_PLSQL.compile_code;
436 END;
437 
438 PROCEDURE get_datastore_cols (
439    entity IN VARCHAR2,
440    pref_cols OUT NOCOPY VARCHAR2,
441    proc_cols OUT NOCOPY VARCHAR2,
442    fetch_cols OUT NOCOPY VARCHAR2) IS
443 
444 FUNCSF BOOLEAN := FALSE;
445 EXTRAF BOOLEAN := TRUE;
446 PREFF BOOLEAN := TRUE;
447 
448 prefattrs VARCHAR2(2000);
449 prefcols VARCHAR2(500);
450 extracols VARCHAR2(2000);
451 fetchcols VARCHAR2(2000);
452 
453 limit NUMBER := 450;
454 
455 CURSOR check_ds_misc_tx(p_stg_col varchar2) IS
456     select 1 from ctx_preference_values
457     where prv_preference =
458        decode(entity,'PARTY','HZ_PARTY_DS',
459                        'PARTY_SITES','HZ_PARTY_SITE_DS',
460                        'CONTACTS','HZ_CONTACT_DS',
461                        'CONTACT_POINTS','HZ_CONTACT_POINT_DS',
462                        'NOMATCH')
463     AND prv_owner = g_schema_name
464     AND prv_attribute='COLUMNS'
465     AND (upper(prv_value) like '%'||p_stg_col||' %'
466          OR upper(prv_value) like '%'||p_stg_col||'||%');
467 
468 CURSOR check_any_tx(p_ATTRIBUTE_ID NUMBER) IS
469   SELECT 1 FROM hz_trans_functions_vl f
470   where f.attribute_id = p_attribute_id
471   and nvl(f.ACTIVE_FLAG,'Y') = 'Y'
472   and primary_flag = 'Y'
473   AND NVL(STAGED_FLAG,'N') ='Y';
474 
475 tmp NUMBER;
476 BEGIN
477 log('-------------------------------') ; -- VJN ADDED
478 log('Inside procedure get_datastore_cols '); -- VJN ADDED
479 
480 -- Note: For creating preferences in intermedia, using the multicolumn datastore approach
481 --       the length of the string that connotes the concatenation of the attributes
482 --       cannot exceed 500 bytes. In other words, limit = the max allowed length of the actual concatenation
483 --       of the attributes. So, limit +  length of other strings, that are part of the pref value <= 500
484 
485 -- changed this from 300 to 275, since the denorm part of the party preference itself takes 215
486 IF entity = 'PARTY' THEN
487    limit := 275 ;
488  END IF;
489 
490  prefcols := '';
491  FOR ATTRS IN (
492     SELECT ATTRIBUTE_ID
493     FROM HZ_TRANS_ATTRIBUTES_VL a
494     WHERE ENTITY_NAME = entity
495     AND TEMP_SECTION IS NULL
496     ORDER BY ATTRIBUTE_ID) LOOP
497 
498    prefattrs := '';
499    FUNCSF:=FALSE;
500    FOR FUNCS IN (
501      SELECT STAGED_ATTRIBUTE_COLUMN
502      FROM HZ_TRANS_FUNCTIONS_VL f
503      WHERE ATTRIBUTE_ID = ATTRS.ATTRIBUTE_ID
504      AND nvl(f.ACTIVE_FLAG,'Y') = 'Y'
505      AND nvl(f.PRIMARY_FLAG,'Y') = 'Y') LOOP
506 
507      FUNCSF:=TRUE;
508 
509      prefattrs := prefattrs||'||'||FUNCS.STAGED_ATTRIBUTE_COLUMN;
510    END LOOP;
511 
512    IF FUNCSF THEN
513      IF lengthb(prefcols)+lengthb(prefattrs)+5>limit THEN
514         IF EXTRAF THEN
515             extracols:=replace(substrb(prefattrs,3),'||',',');
516             fetchcols:='''<A'||ATTRS.ATTRIBUTE_ID||'>''||rec.'||replace(substrb(prefattrs,3),'||','||rec.')||'||''</A'||ATTRS.ATTRIBUTE_ID||'>''';
517             EXTRAF:=FALSE;
518         ELSE
519             extracols:=extracols||','||replace(substrb(prefattrs,3),'||',',');
520             fetchcols:=fetchcols||'||'||'''<A'||ATTRS.ATTRIBUTE_ID||'>''||rec.'||replace(substrb(prefattrs,3),'||','||rec.')||'||''</A'||ATTRS.ATTRIBUTE_ID||'>''';
521         END IF;
522      ELSE
523        IF PREFF THEN
524          prefcols := substrb(prefattrs,3)||' A'||ATTRS.ATTRIBUTE_ID;
525          PREFF:=FALSE;
526        ELSE
527          prefcols := prefcols||','||substrb(prefattrs,3)||' A'||ATTRS.ATTRIBUTE_ID;
528        END IF;
529      END IF;
530    END IF;
531  END LOOP;
532 
533 
534  log('In get_datastore_cols before appending ctxsys procedure sections --- length of prefcols = ' || length(prefcols) ); -- VJN ADDED
535 
536  IF entity = 'PARTY' THEN
537    prefcols := prefcols||',decode(D_PS,''SYNC'',ctxsys.HZDQM.dps(party_id),D_PS) D_PS, decode(D_CT,''SYNC'',ctxsys.HZDQM.dct(party_id),D_CT) D_CT,decode(D_CPT,''SYNC'',ctxsys.HZDQM.dcpt(party_id),D_CPT) D_CPT';
538  END IF;
539  IF entity = 'PARTY' THEN
540    prefcols := prefcols||',STATUS';
541  ELSIF entity = 'CONTACT_POINTS' THEN
542    prefcols := prefcols||',CONTACT_POINT_TYPE';
543  END IF;
544  IF entity = 'PARTY' THEN
545      prefcols := prefcols||',ctxsys.HZDQM.mp(ROWID) MS';
546  ELSIF entity = 'PARTY_SITES' THEN
547      prefcols := prefcols||',ctxsys.HZDQM.mps(ROWID) MS';
551      prefcols := prefcols||',ctxsys.HZDQM.mcpt(ROWID) MS';
548  ELSIF entity = 'CONTACTS' THEN
549      prefcols := prefcols||',ctxsys.HZDQM.mct(ROWID) MS';
550  ELSIF entity = 'CONTACT_POINTS' THEN
552  END IF;
553 
554  IF extracols IS NOT NULL THEN
555    EXTRAF := FALSE;
556  ELSE
557    EXTRAF := TRUE;
558  END IF;
559 
560  FOR ATTRS IN (
561     SELECT ATTRIBUTE_ID, TEMP_SECTION
562     FROM HZ_TRANS_ATTRIBUTES_VL a
563     WHERE ENTITY_NAME = entity
564     ORDER BY ATTRIBUTE_ID) LOOP
565    prefattrs := '';
566    FUNCSF:=FALSE;
567    FOR FUNCS IN (
568      SELECT STAGED_ATTRIBUTE_COLUMN
569      FROM HZ_TRANS_FUNCTIONS_VL f
570      WHERE ATTRIBUTE_ID = ATTRS.ATTRIBUTE_ID
571      AND nvl(f.ACTIVE_FLAG,'Y') = 'Y'
572      AND nvl(f.PRIMARY_FLAG,'Y') = 'Y') LOOP
573 
574      IF ATTRS.TEMP_SECTION IS NULL THEN
575        OPEN check_any_tx(ATTRS.ATTRIBUTE_ID);
576        FETCH check_any_tx INTO tmp;
577        IF check_any_tx%FOUND THEN
578          CLOSE check_any_tx;
579          OPEN check_ds_misc_tx(FUNCS.STAGED_ATTRIBUTE_COLUMN);
580          FETCH check_ds_misc_tx INTO tmp;
581          IF check_ds_misc_tx%NOTFOUND THEN
582             IF instrb(extracols,FUNCS.STAGED_ATTRIBUTE_COLUMN) < 1 THEN
583 	         FUNCSF:=TRUE;
584                  prefattrs := prefattrs||'||'||FUNCS.STAGED_ATTRIBUTE_COLUMN;
585             END IF;
586          END IF;
587          CLOSE check_ds_misc_tx;
588        ELSE
589          CLOSE check_any_tx;
590        END IF;
591 
592      ELSE
593        FUNCSF:=TRUE;
594        prefattrs := prefattrs||'||'||FUNCS.STAGED_ATTRIBUTE_COLUMN;
595      END IF;
596    END LOOP;
597 
598    IF FUNCSF THEN
599      IF EXTRAF THEN
600           extracols:=replace(substrb(prefattrs,3),'||',',');
601           fetchcols:='''<'||nvl(ATTRS.TEMP_SECTION,'A'||ATTRS.ATTRIBUTE_ID)||'>''||rec.'||replace(substrb(prefattrs,3),'||','||rec.')||'||''</'||nvl(ATTRS.TEMP_SECTION,'A'||ATTRS.ATTRIBUTE_ID)||'>''';
602           -- extracols := '''<'||nvl(ATTRS.TEMP_SECTION,'A'||ATTRS.ATTRIBUTE_ID)||'>'''||prefattrs||'||''</'||nvl(ATTRS.TEMP_SECTION,'A'||ATTRS.ATTRIBUTE_ID)||'>''';
603           EXTRAF:=FALSE;
604      ELSE
605           extracols:=extracols||','||replace(substrb(prefattrs,3),'||',',');
606           fetchcols:=fetchcols||'||'||'''<'||nvl(ATTRS.TEMP_SECTION,'A'||ATTRS.ATTRIBUTE_ID)||'>''||rec.'||replace(substrb(prefattrs,3),'||','||rec.')||'||''</'||nvl(ATTRS.TEMP_SECTION,'A'||ATTRS.ATTRIBUTE_ID)||'>''';
607           -- extracols := extracols||'||'||'''<'||nvl(ATTRS.TEMP_SECTION,'A'||ATTRS.ATTRIBUTE_ID)||'>'''||prefattrs||'||''</'||nvl(ATTRS.TEMP_SECTION,'A'||ATTRS.ATTRIBUTE_ID)||'>''';
608      END IF;
609    END IF;
610  END LOOP;
611 
612 
613  pref_cols := prefcols;
614  proc_cols := extracols;
615  fetch_cols := fetchcols;
616 
617 exception
618   when others then
619      log('Exception raised in get_datastore_cols for ' || entity ); -- VJN ADDED
620      log('Error Message is  ' || SQLERRM ); -- VJN ADDED
621     RAISE;
622 END;
623 
624 
625 PROCEDURE generate_map_pkg IS
626 BEGIN
627     log('Generating package body for HZ_STAGE_MAP_TRANSFORM');
628     HZ_GEN_PLSQL.new('HZ_STAGE_MAP_TRANSFORM', 'PACKAGE BODY');
629     l('CREATE OR REPLACE PACKAGE BODY HZ_STAGE_MAP_TRANSFORM AS');
630 
631     generate_declarations;
632     generate_ds_proc;
633     generate_log;
634     generate_ins_dqm_sync_err_rec;
635     generate_party_query_proc;
636     generate_contact_query_proc;
637     generate_contact_pt_query_proc;
638     generate_party_site_query_proc;
639 
640     -- REPURI. Added calls to the following 4 new proccedures for
641     -- open_sync_xxx_cursor query and sync_all_xxx API logic.
642 
643     generate_sync_party_query_proc;
644     generate_sync_psite_query_proc;
645     generate_sync_ct_query_proc;
646     generate_sync_cpt_query_proc;
647 
648     -- REPURI. Added calls to the following 4 new proccedures for
649     -- open_bulk_imp_sync_xxx_cur query logic.
650     -- Bug 4884735.
651 
652     gen_bulk_imp_sync_party_query;
653     gen_bulk_imp_sync_psite_query;
654     gen_bulk_imp_sync_ct_query;
655     gen_bulk_imp_sync_cpt_query;
656 
657     l('END;');
658 
659     log('Compiling package body .. ', false);
660     HZ_GEN_PLSQL.compile_code;
661     log('Done');
662 END;
663 
664 PROCEDURE set_misc (p_entity VARCHAR2) IS
665 CURSOR check_ds_misc_proc(p_attr_id NUMBER) IS
666     select 1 from ctx_preference_values
667     where prv_preference =
668        decode(p_entity,'PARTY','HZ_PARTY_DS',
669                        'PARTY_SITES','HZ_PARTY_SITE_DS',
670                        'CONTACTS','HZ_CONTACT_DS',
671                        'CONTACT_POINTS','HZ_CONTACT_POINT_DS',
672                        'NOMATCH')
673     AND prv_owner = g_schema_name
674     AND prv_attribute='COLUMNS'
675     AND upper(prv_value) like '% A'||p_attr_id||',%';
676 tmp NUMBER;
677 l_next_misc NUMBER;
678 BEGIN
679   BEGIN
680     SELECT max(to_number(substrb(temp_section,2)))
681     INTO l_next_misc
682     from hz_trans_attributes_vl a
683     where a.entity_name = p_entity
684     and a.temp_section IS NOT NULL;
685     IF l_next_misc is null THEN
686       l_next_misc := 0;
687     END IF;
688   EXCEPTION
692 
689     WHEN NO_DATA_FOUND THEN
690       l_next_misc := 0;
691   END;
693   FOR ATTRS IN (
694     SELECT ATTRIBUTE_ID
695     from hz_trans_attributes_vl a
696     where a.entity_name = p_entity
697     and exists (
698       SELECT 1 from hz_trans_functions_vl f
699       where a.attribute_id = f.attribute_id
700       and nvl(f.ACTIVE_FLAG,'Y') = 'Y'
701       and primary_flag = 'Y'
702       AND NVL(STAGED_FLAG,'N') ='N')
703       AND TEMP_SECTION IS NULL) LOOP
704     OPEN check_ds_misc_proc(ATTRS.ATTRIBUTE_ID);
705     FETCH check_ds_misc_proc INTO tmp;
706     IF check_ds_misc_proc%NOTFOUND THEN
707       l_next_misc:=l_next_misc+1;
708 
709       UPDATE HZ_TRANS_ATTRIBUTES_B
710       SET TEMP_SECTION='M'||l_next_misc
711       WHERE ATTRIBUTE_ID = ATTRS.ATTRIBUTE_ID;
712     END IF;
713     CLOSE check_ds_misc_proc;
714   END LOOP;
715 END;
716 
717 PROCEDURE generate_map_upd_pkg(
718   x_rebuild_party_idx OUT NOCOPY BOOLEAN,
719   x_rebuild_psite_idx OUT NOCOPY BOOLEAN,
720   x_rebuild_contact_idx OUT NOCOPY BOOLEAN,
721   x_rebuild_cpt_idx OUT NOCOPY BOOLEAN) IS
722 
723 BEGIN
724 
725     log('Generating package body for HZ_STAGE_MAP_TRANSFORM_UPD');
726     HZ_GEN_PLSQL.new('HZ_STAGE_MAP_TRANSFORM_UPD', 'PACKAGE BODY');
727     l('CREATE OR REPLACE PACKAGE BODY HZ_STAGE_MAP_TRANSFORM_UPD AS');
728 
729     generate_declarations;
730     generate_party_query_upd(x_rebuild_party_idx);
731     generate_contact_query_upd(x_rebuild_psite_idx);
732     generate_party_site_query_upd(x_rebuild_contact_idx);
733     generate_contact_pt_query_upd(x_rebuild_cpt_idx);
734 
735     l('END;');
736     log('Compiling package body .. ', false);
737     HZ_GEN_PLSQL.compile_code;
738     log('Done');
739 
740     IF NOT x_rebuild_party_idx THEN
741       set_misc('PARTY');
742     END IF;
743     IF NOT x_rebuild_psite_idx THEN
744       set_misc('PARTY_SITES');
745     END IF;
746     IF NOT x_rebuild_contact_idx THEN
747       set_misc('CONTACTS');
748     END IF;
749     IF NOT x_rebuild_cpt_idx THEN
750       set_misc('CONTACT_POINTS');
751     END IF;
752     generate_map_pkg;
753 END;
754 
755 PROCEDURE add_section (
756   p_dsname VARCHAR2,
757   p_attr VARCHAR2,
758   p_stype VARCHAR2) IS
759 BEGIN
760   IF p_stype = 'ZONE' THEN
761     ctx_ddl.add_zone_section(p_dsname, p_attr,p_attr);
762   ELSE
763     ctx_ddl.add_field_section(p_dsname, p_attr,p_attr,TRUE);
764   END IF;
765 END;
766 
767 
768 PROCEDURE generate_datastore_prefs(p_entity VARCHAR2) IS
769   CURSOR c_num_attrs(cp_entity VARCHAR2) IS
770     SELECT COUNT(1)
771     FROM HZ_TRANS_ATTRIBUTES_VL a
772     WHERE ENTITY_NAME = cp_entity
773     AND EXISTS (SELECT 1 FROM HZ_TRANS_FUNCTIONS_VL f
774                 WHERE f.ATTRIBUTE_ID = a.ATTRIBUTE_ID
775                 AND nvl(f.ACTIVE_FLAG,'Y') = 'Y'
776                 AND nvl(f.PRIMARY_FLAG,'Y') = 'Y');
777 
778   CURSOR c_attrs(cp_entity VARCHAR2) IS
779     SELECT 'A'||ATTRIBUTE_ID
780     FROM HZ_TRANS_ATTRIBUTES_VL a
781     WHERE ENTITY_NAME = cp_entity
782     AND EXISTS (SELECT 1 FROM HZ_TRANS_FUNCTIONS_VL f
783                 WHERE f.ATTRIBUTE_ID = a.ATTRIBUTE_ID
784                 AND nvl(f.ACTIVE_FLAG,'Y') = 'Y'
785                 AND nvl(f.PRIMARY_FLAG,'Y') = 'Y');
786 
787   l_cnt NUMBER;
788   l_stype VARCHAR2(255);
789   l_attr VARCHAR2(255);
790 
791   pref_cols VARCHAR2(1000);
792   proc_cols VARCHAR2(2000);
793   tmp VARCHAR2(2000);
794 
795 BEGIN
796    log('-------------------------------------');
797    log('In generate_datastore_prefs for ' || p_entity);
798    log('Trying to update the temp_section of HZ_TRANS_ATTRIBUTES_B for ' || p_entity);
799   BEGIN
800     IF p_entity='PARTY' THEN
801       ctx_ddl.drop_section_group(g_schema_name || '.HZ_DQM_PARTY_GRP');
802       UPDATE HZ_TRANS_ATTRIBUTES_B set TEMP_SECTION=NULL
803       WHERE ENTITY_NAME='PARTY';
804     END IF;
805 
806     IF p_entity='PARTY_SITES' THEN
807       ctx_ddl.drop_section_group(G_SCHEMA_NAME || '.HZ_DQM_PS_GRP');
808       UPDATE HZ_TRANS_ATTRIBUTES_B set TEMP_SECTION=NULL
809       WHERE ENTITY_NAME='PARTY_SITES';
810     END IF;
811 
812     IF p_entity='CONTACTS' THEN
813       ctx_ddl.drop_section_group(G_SCHEMA_NAME || '.HZ_DQM_CONTACT_GRP');
814       UPDATE HZ_TRANS_ATTRIBUTES_B set TEMP_SECTION=NULL
815       WHERE ENTITY_NAME='CONTACTS';
816     END IF;
817 
818     IF p_entity='CONTACT_POINTS' THEN
819       ctx_ddl.drop_section_group(G_SCHEMA_NAME || '.HZ_DQM_CPT_GRP');
820       UPDATE HZ_TRANS_ATTRIBUTES_B set TEMP_SECTION=NULL
821       WHERE ENTITY_NAME='CONTACT_POINTS';
822     END IF;
823   log('Update of HZ_TRANS_ATTRIBUTES_B successful for ' || p_entity);
824   EXCEPTION
825    WHEN OTHERS THEN
826      NULL;
827   END;
828 
829   IF p_entity='PARTY' THEN
830     log('Creating party_ds..',FALSE);
831     ctx_ddl.create_section_group(G_SCHEMA_NAME || '.HZ_DQM_PARTY_GRP','BASIC_SECTION_GROUP');
832     OPEN c_num_attrs('PARTY');
833     FETCH c_num_attrs INTO l_cnt;
834     CLOSE c_num_attrs;
835     l_cnt := l_cnt+4;
836     IF l_cnt>54 THEN
837       l_stype := 'ZONE';
838     ELSE
839       l_stype := 'FIELD';
840     END IF;
844     add_section(G_SCHEMA_NAME || '.HZ_DQM_PARTY_GRP','STATUS',l_stype);
841     add_section(G_SCHEMA_NAME || '.HZ_DQM_PARTY_GRP','D_PS',l_stype);
842     add_section(G_SCHEMA_NAME || '.HZ_DQM_PARTY_GRP','D_CT',l_stype);
843     add_section(G_SCHEMA_NAME || '.HZ_DQM_PARTY_GRP','D_CPT',l_stype);
845     OPEN c_attrs('PARTY');
846     LOOP
847       FETCH c_attrs INTO l_attr;
848       EXIT WHEN c_attrs%NOTFOUND;
849       add_section(G_SCHEMA_NAME || '.HZ_DQM_PARTY_GRP',l_attr,l_stype);
850     END LOOP;
851     CLOSE c_attrs;
852     IF l_stype='FIELD' THEN
853       FOR I in 1..(64-l_cnt) LOOP
854         add_section(G_SCHEMA_NAME || '.HZ_DQM_PARTY_GRP','M'||I,l_stype);
855       END LOOP;
856     ELSE
857       FOR I in 1..(255-l_cnt) LOOP
858         add_section(G_SCHEMA_NAME || '.HZ_DQM_PARTY_GRP','M'||I,l_stype);
859       END LOOP;
860     END IF;
861 
862 
863   END IF;
864 
865   IF p_entity='PARTY_SITES' THEN
866     log('Creating party_site_ds..',FALSE);
867     ctx_ddl.create_section_group(G_SCHEMA_NAME || '.HZ_DQM_PS_GRP','BASIC_SECTION_GROUP');
868     OPEN c_num_attrs('PARTY_SITES');
869     FETCH c_num_attrs INTO l_cnt;
870     CLOSE c_num_attrs;
871     l_cnt := l_cnt;
872     IF l_cnt>54 THEN
873       l_stype := 'ZONE';
874     ELSE
875       l_stype := 'FIELD';
876     END IF;
877     OPEN c_attrs('PARTY_SITES');
878     LOOP
879       FETCH c_attrs INTO l_attr;
880       EXIT WHEN c_attrs%NOTFOUND;
881       add_section(G_SCHEMA_NAME || '.HZ_DQM_PS_GRP',l_attr,l_stype);
882     END LOOP;
883     CLOSE c_attrs;
884     IF l_stype='FIELD' THEN
885       FOR I in 1..(64-l_cnt) LOOP
886         add_section(G_SCHEMA_NAME || '.HZ_DQM_PS_GRP','M'||I,l_stype);
887       END LOOP;
888     ELSE
889       FOR I in 1..(255-l_cnt) LOOP
890         add_section(G_SCHEMA_NAME || '.HZ_DQM_PS_GRP','M'||I,l_stype);
891       END LOOP;
892     END IF;
893 
894   END IF;
895 
896   IF p_entity='CONTACTS' THEN
897     log('Creating contact_ds..',FALSE);
898     ctx_ddl.create_section_group(G_SCHEMA_NAME || '.HZ_DQM_CONTACT_GRP','BASIC_SECTION_GROUP');
899     OPEN c_num_attrs('CONTACTS');
900     FETCH c_num_attrs INTO l_cnt;
901     CLOSE c_num_attrs;
902     l_cnt := l_cnt;
903     IF l_cnt>64 THEN
904       l_stype := 'ZONE';
905     ELSE
906       l_stype := 'FIELD';
907     END IF;
908     OPEN c_attrs('CONTACTS');
909     LOOP
910       FETCH c_attrs INTO l_attr;
911       EXIT WHEN c_attrs%NOTFOUND;
912       add_section(G_SCHEMA_NAME || '.HZ_DQM_CONTACT_GRP',l_attr,l_stype);
913     END LOOP;
914     CLOSE c_attrs;
915     IF l_stype='FIELD' THEN
916       FOR I in 1..(64-l_cnt) LOOP
917         add_section(G_SCHEMA_NAME || '.HZ_DQM_CONTACT_GRP','M'||I,l_stype);
918       END LOOP;
919     ELSE
920       FOR I in 1..(255-l_cnt) LOOP
921         add_section(G_SCHEMA_NAME || '.HZ_DQM_CONTACT_GRP','M'||I,l_stype);
922       END LOOP;
923     END IF;
924 
925   END IF;
926 
927   IF p_entity='CONTACT_POINTS' THEN
928     log('Creating contact_pt_ds..',FALSE);
929     ctx_ddl.create_section_group(G_SCHEMA_NAME || '.HZ_DQM_CPT_GRP','BASIC_SECTION_GROUP');
930     add_section(G_SCHEMA_NAME || '.HZ_DQM_CPT_GRP','CONTACT_POINT_TYPE',l_stype);
931     OPEN c_num_attrs('CONTACT_POINTS');
932     FETCH c_num_attrs INTO l_cnt;
933     CLOSE c_num_attrs;
934     l_cnt := l_cnt+1;
935     IF l_cnt>64 THEN
936       l_stype := 'ZONE';
937     ELSE
938       l_stype := 'FIELD';
939     END IF;
940     OPEN c_attrs('CONTACT_POINTS');
941     LOOP
942       FETCH c_attrs INTO l_attr;
943       EXIT WHEN c_attrs%NOTFOUND;
944       add_section(G_SCHEMA_NAME || '.HZ_DQM_CPT_GRP',l_attr,l_stype);
945     END LOOP;
946     CLOSE c_attrs;
947     IF l_stype='FIELD' THEN
948       FOR I in 1..(64-l_cnt) LOOP
949         add_section(G_SCHEMA_NAME || '.HZ_DQM_CPT_GRP','M'||I,l_stype);
950       END LOOP;
951     ELSE
952       FOR I in 1..(255-l_cnt) LOOP
953         add_section(G_SCHEMA_NAME || '.HZ_DQM_CPT_GRP','M'||I,l_stype);
954       END LOOP;
955     END IF;
956   END IF;
957 
958   IF p_entity='PARTY' THEN
959     get_datastore_cols('PARTY', pref_cols, proc_cols, tmp);
960     create_pref(G_SCHEMA_NAME || '.hz_party_ds',pref_cols);
961   END IF;
962 
963   IF p_entity='PARTY_SITES' THEN
964     get_datastore_cols('PARTY_SITES', pref_cols, proc_cols, tmp);
965     create_pref(G_SCHEMA_NAME || '.hz_party_site_ds',pref_cols);
966   END IF;
967 
968   IF p_entity='CONTACTS' THEN
969     get_datastore_cols('CONTACTS', pref_cols, proc_cols, tmp);
970     create_pref(G_SCHEMA_NAME || '.hz_contact_ds',pref_cols);
971   END IF;
972 
973   IF p_entity='CONTACT_POINTS' THEN
974     get_datastore_cols('CONTACT_POINTS', pref_cols, proc_cols, tmp);
975     create_pref(G_SCHEMA_NAME || '.hz_contact_point_ds',pref_cols);
976   END IF;
977 
978   log('Done creating datastore prefs for ' || p_entity );
979 EXCEPTION
980   WHEN OTHERS THEN
981     log('Error in gen ds '||SQLERRM);
982     RAISE;
983 END;
984 
985 
986 PROCEDURE generate_datastore_prefs IS
987 
988 BEGIN
989   generate_datastore_prefs('PARTY');
990   generate_datastore_prefs('PARTY_SITES');
991   generate_datastore_prefs('CONTACTS');
992   generate_datastore_prefs('CONTACT_POINTS');
996 
993 END;
994 
995 PROCEDURE drop_indexes IS
997 l_status VARCHAR2(255);
998 l_index_owner VARCHAR2(255);
999 l_temp VARCHAR2(255);
1000 
1001 l_bool BOOLEAN;
1002 
1003 BEGIN
1004 
1005   l_bool := fnd_installation.GET_APP_INFO('AR',l_status,l_temp,l_index_owner);
1006 
1007   log('Dropping Indexes');
1008   BEGIN
1009       EXECUTE IMMEDIATE 'DROP INDEX ' || l_index_owner || '.hz_stage_parties_t1 FORCE';
1010       log('Dropped hz_stage_parties_t1');
1011   EXCEPTION
1012       WHEN OTHERS THEN
1013         NULL;
1014   END;
1015   BEGIN
1016       EXECUTE IMMEDIATE 'DROP INDEX ' || l_index_owner || '.hz_stage_party_sites_t1 FORCE';
1017       log('Dropped hz_stage_party_sites_t1');
1018   EXCEPTION
1019       WHEN OTHERS THEN
1020         NULL;
1021   END;
1022   BEGIN
1023       EXECUTE IMMEDIATE 'DROP INDEX ' || l_index_owner || '.hz_stage_contact_t1 FORCE';
1024       log('Dropped hz_stage_contact_t1');
1025   EXCEPTION
1026       WHEN OTHERS THEN
1027         NULL;
1028   END;
1029   BEGIN
1030       EXECUTE IMMEDIATE 'DROP INDEX ' || l_index_owner || '.hz_stage_cpt_t1 FORCE';
1031       log('Dropped hz_stage_cpt_t1');
1032   EXCEPTION
1033       WHEN OTHERS THEN
1034         NULL;
1035   END;
1036   log('Done with dropping indexes');
1037 END;
1038 
1039 PROCEDURE drop_btree_indexes IS
1040 l_status VARCHAR2(255);
1041 l_owner1 VARCHAR2(255);
1042 l_temp VARCHAR2(255);
1043 BEGIN
1044 IF (fnd_installation.GET_APP_INFO('AR',l_status,l_temp,l_owner1)) THEN
1045   FOR IDX in (
1046     SELECT OWNER||'.'||INDEX_NAME idx_name
1047     FROM sys.all_indexes i, hz_trans_attributes_vl a, hz_trans_functions_vl f
1048     WHERE f.attribute_id = a.attribute_id
1049     AND i.owner = l_owner1
1050     AND f.index_required_flag in ('Y','T')
1051     AND i.INDEX_NAME = decode(a.entity_name,'PARTY','HZ_STAGED_PARTIES',
1052                   'PARTY_SITES','HZ_STAGED_PARTY_SITES','CONTACTS','HZ_STAGED_CONTACTS',
1053                   'CONTACT_POINTS','HZ_STAGED_CONTACT_POINTS')||'_N'||f.function_id) LOOP
1054     EXECUTE IMMEDIATE 'DROP INDEX '||IDX.idx_name;
1055   END LOOP;
1056   UPDATE hz_trans_functions_b set index_required_flag='N' where index_required_flag='T';
1057 END IF;
1058 END;
1059 
1060 PROCEDURE create_log(
1061    p_operation VARCHAR2,
1062    p_step VARCHAR2,
1063    p_worker_number NUMBER DEFAULT 0,
1064    p_num_workers NUMBER DEFAULT 0) IS
1065 
1066 BEGIN
1067 
1068   INSERT INTO HZ_DQM_STAGE_LOG (
1069 	OPERATION,
1070 	NUMBER_OF_WORKERS,
1071         WORKER_NUMBER,
1072 	STEP,
1073 	START_FLAG,
1074 	START_TIME,
1075 	END_FLAG,
1076 	END_TIME,
1077 	CREATED_BY,
1078 	CREATION_DATE,
1079 	LAST_UPDATE_LOGIN,
1080 	LAST_UPDATE_DATE,
1081 	LAST_UPDATED_BY)
1082    VALUES (
1083         substr(p_operation,1,30),
1084         p_num_workers,
1085         p_worker_number,
1086 	p_step,
1087         NULL,
1088 	NULL,
1089 	NULL,
1090 	NULL,
1091 	hz_utility_pub.created_by,
1092         hz_utility_pub.creation_date,
1093         hz_utility_pub.last_update_login,
1094         hz_utility_pub.last_update_date,
1095         hz_utility_pub.user_id
1096    );
1097 END;
1098 
1099 FUNCTION get_size (
1100         p_table_name       IN   VARCHAR2
1101         ) RETURN  NUMBER IS
1102    l_status VARCHAR2(255);
1103    l_owner1 VARCHAR2(255);
1104    l_temp VARCHAR2(255);
1105 
1106    CURSOR c_number_of_blocks is
1107                   SELECT blocks - empty_blocks
1108                   FROM sys.dba_tables
1109                   WHERE table_name = p_table_name and owner = l_owner1;
1110    CURSOR  c_db_block_size is  SELECT value
1111                   FROM v$parameter
1112                   WHERE name = 'db_block_size' ;
1113    l_db_block_size NUMBER;
1114    l_number_of_blocks NUMBER;
1115 
1116    BEGIN
1117       IF (fnd_installation.GET_APP_INFO('AR',l_status,l_temp,l_owner1)) THEN
1118          OPEN c_number_of_blocks;
1119          FETCH c_number_of_blocks into l_number_of_blocks;
1120          CLOSE c_number_of_blocks;
1121          OPEN c_db_block_size;
1122          FETCH c_db_block_size into l_db_block_size;
1123          CLOSE c_db_block_size;
1124      END IF;
1125      RETURN  (l_number_of_blocks * l_db_block_size) / 1000000;
1126     EXCEPTION
1127       WHEN OTHERS THEN
1128       RETURN 0;
1129    END;
1130 
1131 FUNCTION check_rebuild(p_entity VARCHAR2)
1132   RETURN BOOLEAN IS
1133 -- this cursor will return the number of active transformations
1134 -- that have not been staged, corresponding to the passed in entity
1135   CURSOR check_any_acq IS
1136     SELECT count(1)
1137     from hz_trans_attributes_vl a
1138     where a.entity_name = p_entity
1139     and exists (
1140       SELECT 1 from hz_trans_functions_vl f
1141       where a.attribute_id = f.attribute_id
1142       and nvl(f.ACTIVE_FLAG,'Y') = 'Y'
1143       and primary_flag = 'Y'
1144       AND NVL(STAGED_FLAG,'N') ='N');
1145 -- this cursor will return if there are any preference values
1146 -- that exist, for the passed in entity
1147   CURSOR check_ds_misc_proc IS
1148     select 1 from ctx_preference_values
1149     where prv_preference =
1150        decode(p_entity,'PARTY','HZ_PARTY_DS',
1154                        'NOMATCH')
1151                        'PARTY_SITES','HZ_PARTY_SITE_DS',
1152                        'CONTACTS','HZ_CONTACT_DS',
1153                        'CONTACT_POINTS','HZ_CONTACT_POINT_DS',
1155     AND prv_owner = g_schema_name
1156     AND prv_attribute='COLUMNS'
1157     AND upper(prv_value) like '%HZDQM.M%';
1158 
1159 tmp NUMBER;
1160 l_num_primary NUMBER;
1161 l_next_misc_section NUMBER;
1162 check_section_str VARCHAR2(2000);
1163 l_table_name VARCHAR2(255);
1164 BEGIN
1165 log ('--------------------------------------');
1166 -- If profile option is Optimal we FORCE A REBUILD.
1167 IF upper ( nvl( FND_PROFILE.value('HZ_DQM_INDEX_BUILD_TYPE'), 'Optimal') ) = upper('Optimal')
1168 THEN
1169      IF new_transformations_exist(p_entity)
1170      THEN
1171           log(' Chosen Profile Option is OPTIMAL');
1172           log(' check rebuild returns TRUE -- Do a REBUILD');
1173           RETURN TRUE ;
1174      ELSE
1175           log(' Chosen Profile Option is OPTIMAL');
1176           log(' But there are no new transformations to be staged for ' || p_entity );
1177           log(' check rebuild returns FALSE -- Do not REBUILD');
1178           RETURN FALSE  ;
1179      END IF ;
1180 -- If profile option is incremental, we attempt TO SEE IF WE CAN AVOID A REBUILD
1181 ELSE
1182           log(' Chosen Profile Option is INCREMENTAL ');
1183           log(' Starting to figure out, if a REBUILD can be avoided');
1184           -- if no active unstaged transformatons exist for the passed in entity return FALSE
1185           -- ie., DO NOT REBUILD
1186           OPEN check_any_acq;
1187           FETCH check_any_acq INTO l_num_primary;
1188           IF l_num_primary=0 THEN
1189             CLOSE check_any_acq;
1190             log(' check rebuild returns FALSE -- Do not REBUILD');
1191             RETURN FALSE;
1192           END IF;
1193           CLOSE check_any_acq;
1194           -- if atleast one active unstaged transformation exists, check if the preference
1195           -- values exist for this entity. If preference values do not exist, return TRUE
1196           -- ie., DO A REBUILD
1197           OPEN check_ds_misc_proc;
1198           FETCH check_ds_misc_proc INTO tmp;
1199           IF check_ds_misc_proc%NOTFOUND THEN
1200             CLOSE check_ds_misc_proc;
1201             log(' check rebuild returns TRUE -- Do a REBUILD');
1202             RETURN TRUE;
1203           END IF;
1204           CLOSE check_ds_misc_proc;
1205 
1206           -- if preference values exist for this entity, find the maximum temp_section for this entity
1207           -- and offset it by how many ever unstaged active transformations are found
1208           BEGIN
1209             SELECT max(to_number(substrb(temp_section,2)))+l_num_primary
1210             INTO l_next_misc_section
1211             from hz_trans_attributes_vl a
1212             where a.entity_name = p_entity
1213             and a.temp_section IS NOT NULL;
1214             IF l_next_misc_section IS NULL THEN
1215                l_next_misc_section := l_num_primary;
1216             END IF;
1217           EXCEPTION
1218             WHEN NO_DATA_FOUND THEN
1219               l_next_misc_section := l_num_primary;
1220           END;
1221 
1222           SELECT decode(p_entity,'PARTY','HZ_STAGED_PARTIES',
1223                                'PARTY_SITES','HZ_STAGED_PARTIES',
1224                                'CONTACTS','HZ_STAGED_CONTACTS',
1225                                'CONTACT_POINTS','HZ_STAGED_CONTACT_POINTS','DUMMY')
1226           INTO l_table_name
1227           from DUAL;
1228 
1229           -- See if the intermedia index on the corresponding staging table for the entity
1230           -- has the placeholders for these sections.
1231           -- The check that is done here is to see if the dummy string CHECK exists with in the section
1232           -- by executing the folowing SQL. If this SQL errors out, it means the section doesnt exist
1233           -- or equivalently there are no placeholders.
1234           check_section_str :=
1235             'SELECT 1 FROM '||l_table_name||
1236             ' WHERE ROWNUM=1 AND CONTAINS(concat_col,''({CHECK} within M'||l_next_misc_section||')'')>0';
1237           log('Check STR ' ||check_section_str);
1238           BEGIN
1239             EXECUTE IMMEDIATE check_section_str;
1240             -- if section exists DO NOT REBUILD
1241             log(' check rebuild returns FALSE -- Do not REBUILD');
1242             RETURN FALSE;
1243           EXCEPTION
1244             WHEN OTHERS THEN
1245               log('Error ' ||SQLERRM);
1246               -- if section does not exist REBUILD
1247               log(' check rebuild returns TRUE -- Do a REBUILD');
1248               RETURN TRUE;
1249           END;
1250   END IF ;
1251 END;
1252 
1253 
1254 PROCEDURE Stage (
1255         errbuf                  OUT NOCOPY    VARCHAR2,
1256         retcode                 OUT NOCOPY   VARCHAR2,
1257         p_num_workers           IN      VARCHAR2,
1258         p_command		IN	VARCHAR2,
1259         p_continue		IN	VARCHAR2,
1260         p_tablespace		IN	VARCHAR2,
1261 	p_index_creation	IN	VARCHAR2
1262 ) IS
1263 
1264 TYPE nTable IS TABLE OF NUMBER index by binary_integer;
1265 TYPE vTable IS TABLE OF VARCHAR2(255) index by binary_integer;
1266 l_sub_requests nTable;
1267 l_req_status vTable;
1268 
1269 uphase VARCHAR2(255);
1270 dphase VARCHAR2(255);
1271 ustatus VARCHAR2(255);
1272 dstatus VARCHAR2(255);
1273 message VARCHAR2(32000);
1274 
1278   WHERE PRIMARY_FLAG = 'Y'
1275 CURSOR c_primary(cp_entity_name VARCHAR2) IS
1276   SELECT f.TRANSFORMATION_NAME, f.STAGED_ATTRIBUTE_COLUMN
1277   FROM HZ_TRANS_FUNCTIONS_VL f, HZ_TRANS_ATTRIBUTES_VL a
1279   AND nvl(f.ACTIVE_FLAG,'Y') = 'Y'
1280   AND f.ATTRIBUTE_ID = a.ATTRIBUTE_ID
1281   AND a.ENTITY_NAME = cp_entity_name;
1282 
1283 l_trans_name HZ_TRANS_FUNCTIONS_VL.TRANSFORMATION_NAME%TYPE;
1284 l_stg_attr HZ_TRANS_FUNCTIONS_VL.STAGED_ATTRIBUTE_COLUMN%TYPE;
1285 
1286 l_cols VARCHAR2(4000);
1287 l_message VARCHAR2(4000);
1288 l_status VARCHAR2(255) := 'NORMAL';
1289 
1290 l_num_workers NUMBER;
1291 l_num_funcs NUMBER;
1292 l_req_id  NUMBER;
1293 l_bool BOOLEAN;
1294 l_continue VARCHAR2(1) := 'N';
1295 
1296 l_party_prim_tx NUMBER := 1;
1297 l_ps_prim_tx NUMBER := 1;
1298 l_contact_prim_tx NUMBER := 1;
1299 l_cpt_prim_tx NUMBER := 1;
1300 
1301 l_index_owner VARCHAR2(255);
1302 l_temp VARCHAR2(255);
1303 
1304 l_num_prll VARCHAR2(255);
1305 l_idx_mem VARCHAR2(255);
1306 
1307 
1308 T NUMBER;
1309 
1310 l_index_creation VARCHAR2(255) := 'PARALLEL';
1311 
1312 l_command VARCHAR2(255);
1313 l_last_num_workers NUMBER;
1314 l_num_stage_stepS NUMBER;
1315 reco_staging_size NUMBER;
1316 reco_staging_parties NUMBER;
1317 reco_staging_party_sites NUMBER;
1318 reco_staging_contacts NUMBER;
1319 reco_staging_contact_points NUMBER;
1320 reco_index_size NUMBER;
1321 safety_factor NUMBER(5, 1) := 2.0 ;
1322 sizing_factor NUMBER(5, 1) := 5;
1323 
1324 l_index VARCHAR2(255);
1325 
1326 ctx_tbsp VARCHAR2(255);
1327 ctx_index_tbsp VARCHAR2(255);
1328 
1329 l_rebuild_party_idx BOOLEAN:=FALSE;
1330 l_rebuild_psite_idx BOOLEAN:=FALSE;
1331 l_rebuild_contact_idx BOOLEAN:=FALSE;
1332 l_rebuild_cpt_idx BOOLEAN:=FALSE;
1333 
1334 l_step VARCHAR2(255);
1335 l_is_wildchar NUMBER;
1336 --Start of Bug No: 4292425
1337 req_data varchar2(100);
1338 l_workers_completed boolean;
1339 --End of Bug No: 4292425
1340 --Start of Bug 4915282
1341 l_realtime_sync_value VARCHAR2(15);
1342 CURSOR c_sync is select 1 from hz_dqm_sync_interface where staged_flag  <> 'E' and rownum=1;
1343 l_sync_count NUMBER;
1344 l_profile_save boolean;
1345 --End of Bug 4915282
1346 BEGIN
1347   retcode := 0;
1348  -- req_data will be null the first time, by default
1349  req_data := fnd_conc_global.request_data;
1350  IF (req_data IS NULL) THEN --Bug No: 4292425
1351   l_index_creation := nvl(p_index_creation,'PARALLEL');
1352   l_realtime_sync_value := nvl(FND_PROFILE.VALUE('HZ_DQM_ENABLE_REALTIME_SYNC'), 'Y'); --4915282
1353   IF p_num_workers IS NULL THEN
1354     l_num_workers:=1;
1355   ELSE
1356     l_num_workers := to_number(p_num_workers);
1357   END IF;
1358   log('------------------------------');
1359   outandlog('Starting Concurrent Program ''Stage Party Data''');
1360   outandlog('Start Time ' || TO_CHAR(SYSDATE, 'DD-MON-YYYY HH24:MI:SS'));
1361   outandlog('NEWLINE');
1362 
1363   l_command:=p_command;
1364   l_continue:=nvl(p_continue,'N');
1365   FND_MSG_PUB.initialize;
1366 
1367   l_bool := fnd_installation.GET_APP_INFO('AR',l_status,l_temp,l_index_owner);
1368 
1369   IF l_command = 'ESTIMATE_SIZE' THEN
1370       reco_staging_parties := ceil(get_size('HZ_PARTIES') * 1.5 * safety_factor);
1371       reco_staging_party_sites := ceil(get_size('HZ_PARTY_SITES') * 3.0 * safety_factor);
1372       reco_staging_contacts := ceil(get_size('HZ_ORG_CONTACTS') * 2.5 * safety_factor);
1373       reco_staging_contact_points := ceil(get_size('HZ_CONTACT_POINTS') * 2.0 * safety_factor);
1374       reco_index_size := 0.85 * (reco_staging_parties +  reco_staging_party_sites +  reco_staging_contacts +  reco_staging_contact_points);
1375       reco_staging_size :=  reco_staging_parties +  reco_staging_party_sites +  reco_staging_contacts +  reco_staging_contact_points + reco_index_size;
1376 
1377       outandlog('The estimated disk space required for HZ_STAGED_PARTIES = ' || reco_staging_parties || 'MB' );
1378       outandlog('The estimated disk space required for HZ_STAGED_PARTY_SITES = ' ||reco_staging_party_sites || 'MB' );
1379       outandlog('The estimated disk space required for HZ_STAGED_CONTACTS = ' ||reco_staging_contacts || 'MB' );
1380       outandlog('The estimated disk space required for HZ_STAGED_CONTACT_POINTS = ' || reco_staging_contact_points || 'MB' );
1381       outandlog('The estimated disk space required by text indexes = ' ||reco_index_size || 'MB' );
1382       outandlog(' ');
1383       outandlog('The estimated total disk space required for staging = ' ||reco_staging_size || 'MB' );
1384       outandlog('NEWLINE');
1385    ELSIF l_command = 'ANALYZE_STAGED_TABLES' THEN
1386        outandlog('Staged tables being analyzed');
1387        gather_stats(l_index_owner, 'HZ_STAGED_PARTIES');
1388        gather_stats(l_index_owner, 'HZ_STAGED_PARTY_SITES');
1389        gather_stats(l_index_owner, 'HZ_STAGED_CONTACTS');
1390        gather_stats(l_index_owner, 'HZ_STAGED_CONTACT_POINTS');
1391        outandlog('Staged tables analyzed, End Time : '|| TO_CHAR(SYSDATE, 'MM-DD-YY HH24:MI:SS'));
1392   END IF;
1393 
1394   IF l_command = 'STAGE_NEW_DENORM' THEN
1395           outandlog('Staging new denormalized attributes.');
1396           generate_map_pkg;
1397           FOR I in 1..10 LOOP
1398               l_sub_requests(i) := 1;
1399           END LOOP;
1400           IF FND_PROFILE.value('HZ_DQM_INDEX_PARALLEL') IS NOT NULL THEN
1401               l_num_prll := FND_PROFILE.value('HZ_DQM_INDEX_PARALLEL');
1402           ELSE
1403               l_num_prll := NULL;
1404           END IF;
1408               BEGIN
1405           IF FND_PROFILE.value('HZ_DQM_INDEX_MEMORY') IS NOT NULL THEN
1406               l_idx_mem := FND_PROFILE.value('HZ_DQM_INDEX_MEMORY');
1407           ELSE
1409                    SELECT PAR_VALUE INTO l_idx_mem
1410                    FROM CTX_PARAMETERS
1411                    WHERE PAR_NAME = 'MAX_INDEX_MEMORY';
1412               EXCEPTION
1413                    WHEN NO_DATA_FOUND THEN
1414                    BEGIN
1415                        SELECT PAR_VALUE INTO l_idx_mem
1416                        FROM CTX_PARAMETERS
1417                        WHERE PAR_NAME = 'DEFAULT_INDEX_MEMORY';
1418                    EXCEPTION
1419                        WHEN NO_DATA_FOUND THEN
1420                        l_idx_mem := '0';
1421                   END;
1422                END;
1423            END IF;
1424            l_req_id := FND_REQUEST.SUBMIT_REQUEST('AR', 'ARHDQMCR',
1425                 'DQM Create Index', to_char(sysdate,'DD-MON-YY HH24:MI:SS'), --bug 4641081
1426                 TRUE, to_char(l_sub_requests(1)), to_char(l_sub_requests(2)),
1427                 to_char(l_sub_requests(3)), to_char(l_sub_requests(4)),
1428                 to_char(l_sub_requests(5)), to_char(l_sub_requests(6)),
1429                 to_char(l_sub_requests(7)), to_char(l_sub_requests(8)),
1430                 to_char(l_sub_requests(9)), to_char(l_sub_requests(10)),
1431                 'STAGE_NEW_DENORM', l_idx_mem, l_num_prll, 'STAGE_NEW_DENORM');
1432            IF l_req_id = 0 THEN
1433                 log('Error submitting request');
1434                 log(fnd_message.get);
1435            ELSE
1436                 log('Submitted request ID for Party Index: ' || l_req_id );
1437                 log('Request ID : ' || l_req_id);
1438            END IF;
1439   END IF;
1440 
1441   IF l_command = 'STAGE_ALL_DATA' OR
1442      l_command = 'CREATE_INDEXES' OR
1443      l_command = 'STAGE_NEW_TRANSFORMATIONS' OR
1444      l_command = 'CREATE_MISSING_INVALID_INDEXES' THEN
1445 
1446     IF ((l_command = 'STAGE_ALL_DATA' OR l_command = 'STAGE_NEW_TRANSFORMATIONS') AND l_realtime_sync_value <> 'N') THEN
1447      l_profile_save := FND_PROFILE.save('HZ_DQM_ENABLE_REALTIME_SYNC','N','SITE'); -- Set sync method to BATCH. 4915282
1448     END IF;
1449 
1450     IF FND_PROFILE.value('HZ_DQM_INDEX_MEMORY') IS NOT NULL THEN
1451       l_idx_mem := FND_PROFILE.value('HZ_DQM_INDEX_MEMORY');
1452     ELSE
1453       BEGIN
1454         SELECT PAR_VALUE INTO l_idx_mem
1455         FROM CTX_PARAMETERS
1456         WHERE PAR_NAME = 'MAX_INDEX_MEMORY';
1457       EXCEPTION
1458         WHEN NO_DATA_FOUND THEN
1459           BEGIN
1460             SELECT PAR_VALUE INTO l_idx_mem
1461             FROM CTX_PARAMETERS
1462             WHERE PAR_NAME = 'DEFAULT_INDEX_MEMORY';
1463           EXCEPTION
1464             WHEN NO_DATA_FOUND THEN
1465               l_idx_mem := '0';
1466           END;
1467       END;
1468     END IF;
1469 
1470     IF FND_PROFILE.value('HZ_DQM_INDEX_PARALLEL') IS NOT NULL THEN
1471       l_num_prll := FND_PROFILE.value('HZ_DQM_INDEX_PARALLEL');
1472     ELSE
1473       l_num_prll := NULL;
1474     END IF;
1475 
1476     BEGIN
1477         ctx_ddl.drop_preference('HZ_DQM_STORAGE');
1478       EXCEPTION
1479        WHEN OTHERS THEN
1480          NULL;
1481       END;
1482 
1483     IF p_tablespace IS NOT NULL THEN
1484       ctx_tbsp := p_tablespace;
1485       ctx_index_tbsp := p_tablespace;
1486     ELSE
1487       select tablespace, index_tablespace
1488       into ctx_tbsp, ctx_index_tbsp
1489       from fnd_product_installations
1490       where application_id = '222';
1491     END IF;
1492 
1493       ctx_ddl.create_preference('HZ_DQM_STORAGE', 'BASIC_STORAGE');
1494       ctx_ddl.set_attribute('HZ_DQM_STORAGE', 'I_TABLE_CLAUSE', 'tablespace '|| ctx_tbsp|| ' storage (initial 4K next 8M pctincrease 0)');
1495       ctx_ddl.set_attribute('HZ_DQM_STORAGE', 'K_TABLE_CLAUSE', 'tablespace ' || ctx_tbsp || ' storage (initial 4K next 8M pctincrease 0)');
1496       ctx_ddl.set_attribute('HZ_DQM_STORAGE', 'R_TABLE_CLAUSE', 'tablespace '|| ctx_tbsp || ' storage (initial 4K next 8M pctincrease 0)  lob (data) store as (cache) ');
1497       ctx_ddl.set_attribute('HZ_DQM_STORAGE', 'I_INDEX_CLAUSE', 'tablespace '|| ctx_index_tbsp || '  storage (initial 4K next 8M pctincrease 0)  compress 2');
1498 
1499   END IF;
1500 
1501   BEGIN
1502     ctx_ddl.drop_preference('dqm_lexer');
1503   EXCEPTION
1504     WHEN OTHERS THEN
1505       null;
1506   END;
1507 
1508   ctx_ddl.create_preference('dqm_lexer', 'BASIC_LEXER');
1509   ctx_ddl.set_attribute ( 'dqm_lexer', 'index_themes', 'NO');
1510   ctx_ddl.set_attribute ( 'dqm_lexer', 'index_text', 'YES');
1511 
1512   IF l_command = 'GENERATE_MAP_PROC' THEN
1513     log (' In the GENERATE_MAP_PROC flow');
1514     generate_map_pkg;
1515   ELSIF l_command = 'STAGE_NEW_TRANSFORMATIONS' THEN
1516     log (' In the STAGE_NEW_TRANSFORMATIONS flow');
1517     BEGIN
1518       SELECT number_of_workers INTO l_last_num_workers
1519       FROM HZ_DQM_STAGE_LOG
1520       WHERE operation = l_command
1521       AND STEP = 'INIT';
1522 
1523       IF l_last_num_workers<>l_num_workers AND l_continue = 'Y' THEN
1524         log('Cannot continue with different number of workers. Using ' ||
1525              l_last_num_workers ||' workers, as specified in first run');
1526         l_num_workers := l_last_num_workers;
1527       END IF;
1531     END;
1528     EXCEPTION
1529       WHEN NO_DATA_FOUND THEN
1530         l_continue := 'N';
1532     IF l_continue <> 'Y' THEN
1533        verify_all_procs;
1534        generate_map_upd_pkg(l_rebuild_party_idx,l_rebuild_psite_idx,
1535             l_rebuild_contact_idx,l_rebuild_cpt_idx);
1536        log('*** After gen upd '||l_continue);
1537 
1538        -- Generate preferences for all entities based on the corresponding boolean populated
1539        -- by generate_map_upd_pkg.
1540        -- In particular, if the profile option HZ_DQM_INDEX_BUILD_TYPE is chosen to be Optimal
1541        -- datastore preferences will always be rebuilt.
1542 
1543        IF l_rebuild_party_idx THEN
1544          generate_datastore_prefs('PARTY');
1545        END IF;
1546        IF l_rebuild_psite_idx THEN
1547          generate_datastore_prefs('PARTY_SITES');
1548        END IF;
1549        IF l_rebuild_contact_idx THEN
1550          generate_datastore_prefs('CONTACTS');
1551        END IF;
1552        IF l_rebuild_cpt_idx THEN
1553          generate_datastore_prefs('CONTACT_POINTS');
1554        END IF;
1555 
1556       DELETE from HZ_DQM_STAGE_LOG where operation = l_command;
1557       create_log(
1558         p_operation=>l_command,
1559         p_step=>'INIT',
1560         p_num_workers=>l_num_workers);
1561 
1562       l_num_stage_steps := g_num_stage_new_steps;
1563 
1564       FOR I in 1..l_num_stage_steps LOOP
1565         FOR J in 0..(l_num_workers-1) LOOP
1566           create_log(
1567             p_operation=>l_command,
1568             p_step=>'STEP'||I,
1569             p_worker_number=> J,
1570             p_num_workers=>l_num_workers);
1571         END LOOP;
1572       END LOOP;
1573 
1574       DELETE from HZ_DQM_STAGE_LOG where operation = 'CREATE_INDEXES';
1575       IF l_rebuild_party_idx THEN
1576         create_log(
1577           p_operation=>'CREATE_INDEXES',
1578           p_step=>'HZ_PARTIES');
1579       ELSE
1580         create_log(
1581           p_operation=>'CREATE_INDEXES',
1582           p_step=>'HZ_PARTIES_BTREE');
1583       END IF;
1584 
1585       IF l_rebuild_psite_idx THEN
1586         create_log(
1587           p_operation=>'CREATE_INDEXES',
1588           p_step=>'HZ_PARTY_SITES');
1589       ELSE
1590         create_log(
1591           p_operation=>'CREATE_INDEXES',
1592           p_step=>'HZ_PARTY_SITES_BTREE');  ----
1593       END IF;
1594 
1595       IF l_rebuild_contact_idx THEN
1596         create_log(
1597           p_operation=>'CREATE_INDEXES',
1598           p_step=>'HZ_ORG_CONTACTS');
1599       ELSE
1600         create_log(
1601           p_operation=>'CREATE_INDEXES',
1602           p_step=>'HZ_ORG_CONTACTS_BTREE');
1603       END IF;
1604 
1605       IF l_rebuild_cpt_idx THEN
1606         create_log(
1607           p_operation=>'CREATE_INDEXES',
1608           p_step=>'HZ_CONTACT_POINTS');
1609       ELSE
1610         create_log(
1611           p_operation=>'CREATE_INDEXES',
1612           p_step=>'HZ_CONTACT_POINTS_BTREE');
1613       END IF;
1614 
1615     ELSE
1616       SELECT step INTO l_step
1617       FROM HZ_DQM_STAGE_LOG
1618       WHERE OPERATION = 'CREATE_INDEXES'
1619       AND step like 'HZ_PARTIES%';
1620 
1621       IF l_step ='HZ_PARTIES' THEN
1622         l_rebuild_party_idx:=TRUE;
1623       ELSE
1624         l_rebuild_party_idx:=FALSE;
1625       END IF;
1626 
1627       SELECT step INTO l_step
1628       FROM HZ_DQM_STAGE_LOG
1629       WHERE OPERATION = 'CREATE_INDEXES'
1630       AND step like 'HZ_PARTY_SITES%';
1631 
1632       IF l_step ='HZ_PARTY_SITES' THEN
1633         l_rebuild_psite_idx:=TRUE;
1634       ELSE
1635         l_rebuild_psite_idx:=FALSE;
1636       END IF;
1637 
1638       SELECT step INTO l_step
1639       FROM HZ_DQM_STAGE_LOG
1640       WHERE OPERATION = 'CREATE_INDEXES'
1641       AND step like 'HZ_ORG_CONTACTS%';
1642 
1643       IF l_step ='HZ_ORG_CONTACTS' THEN
1644         l_rebuild_contact_idx:=TRUE;
1645       ELSE
1646         l_rebuild_contact_idx:=FALSE;
1647       END IF;
1648 
1649       SELECT step INTO l_step
1650       FROM HZ_DQM_STAGE_LOG
1651       WHERE OPERATION = 'CREATE_INDEXES'
1652       AND step like 'HZ_CONTACT_POINTS%';
1653 
1654       IF l_step ='HZ_CONTACT_POINTS' THEN
1655         l_rebuild_cpt_idx:=TRUE;
1656       ELSE
1657         l_rebuild_cpt_idx:=FALSE;
1658       END IF;
1659     END IF;
1660     FOR I in 1..10 LOOP
1661         l_sub_requests(i) := 1;
1662     END LOOP;
1663     log('Spawning ' || l_num_workers || ' Workers for staging');
1664     FOR I in 1..l_num_workers LOOP
1665       l_sub_requests(i) := FND_REQUEST.SUBMIT_REQUEST('AR', 'ARHDQMSTW',
1666                     'Stage Party Data Worker ' || to_char(i),
1667                     to_char(sysdate,'DD-MON-YY HH24:MI:SS'), --bug 4641081
1668                     TRUE, to_char(l_num_workers), TO_CHAR(I), l_command,l_continue);
1669       IF l_sub_requests(i) = 0 THEN
1670         log('Error submitting worker ' || i);
1671         log(fnd_message.get);
1672       ELSE
1673         log('Submitted request for Worker ' || TO_CHAR(I) );
1674         log('Request ID : ' || l_sub_requests(i));
1675       END IF;
1676       EXIT when l_sub_requests(i) = 0;
1677     END LOOP;
1678 
1679 
1683       IF l_rebuild_party_idx THEN
1680     l_req_id := l_sub_requests(1);
1681 
1682     IF l_req_id>0 THEN
1684         l_index := 'HZ_PARTIES';
1685       ELSE
1686         l_index := 'HZ_PARTIES_BTREE';
1687       END IF;
1688       l_req_id := FND_REQUEST.SUBMIT_REQUEST('AR', 'ARHDQMCR',
1689              'DQM Create Index', to_char(sysdate,'DD-MON-YY HH24:MI:SS'), --bug 4641081
1690              TRUE, to_char(l_sub_requests(1)), to_char(l_sub_requests(2)),
1691              to_char(l_sub_requests(3)), to_char(l_sub_requests(4)),
1692              to_char(l_sub_requests(5)), to_char(l_sub_requests(6)),
1693              to_char(l_sub_requests(7)), to_char(l_sub_requests(8)),
1694              to_char(l_sub_requests(9)), to_char(l_sub_requests(10)),
1695              l_command, l_idx_mem, l_num_prll, l_index);
1696       IF l_req_id = 0 THEN
1697           log('Error submitting request');
1698           log(fnd_message.get);
1699       ELSE
1700           log('Submitted request ID for Party Index: ' || l_req_id );
1701           log('Request ID : ' || l_req_id);
1702       END IF;
1703     END IF;
1704 
1705     IF l_req_id>0 THEN
1706       IF l_rebuild_psite_idx THEN
1707         l_index := 'HZ_PARTY_SITES';
1708       ELSE
1709         l_index := 'HZ_PARTY_SITES_BTREE';
1710       END IF;
1711 
1712       l_req_id := FND_REQUEST.SUBMIT_REQUEST('AR', 'ARHDQMCR',
1713              'DQM Create Index', to_char(sysdate,'DD-MON-YY HH24:MI:SS'), --bug 4641081
1714                TRUE, to_char(l_sub_requests(1)), to_char(l_sub_requests(2)),
1715                to_char(l_sub_requests(3)), to_char(l_sub_requests(4)),
1716                to_char(l_sub_requests(5)), to_char(l_sub_requests(6)),
1717                to_char(l_sub_requests(7)), to_char(l_sub_requests(8)),
1718                to_char(l_sub_requests(9)), to_char(l_sub_requests(10)),
1719                l_command, l_idx_mem, l_num_prll, l_index);
1720       IF l_req_id = 0 THEN
1721           log('Error submitting request');
1722           log(fnd_message.get);
1723       ELSE
1724           log('Submitted request ID for Party Site Index: ' || l_req_id );
1725           log('Request ID : ' || l_req_id);
1726       END IF;
1727     END IF;
1728 
1729     IF l_req_id>0 THEN
1730       IF l_rebuild_contact_idx THEN
1731         l_index := 'HZ_ORG_CONTACTS';
1732       ELSE
1733         l_index := 'HZ_ORG_CONTACTS_BTREE';
1734       END IF;
1735       l_req_id := FND_REQUEST.SUBMIT_REQUEST('AR', 'ARHDQMCR',
1736                'DQM Create Index', to_char(sysdate,'DD-MON-YY HH24:MI:SS'), --bug 4641081
1737                TRUE, to_char(l_sub_requests(1)), to_char(l_sub_requests(2)),
1738                to_char(l_sub_requests(3)), to_char(l_sub_requests(4)),
1739                to_char(l_sub_requests(5)), to_char(l_sub_requests(6)),
1740                to_char(l_sub_requests(7)), to_char(l_sub_requests(8)),
1741                to_char(l_sub_requests(9)), to_char(l_sub_requests(10)),
1742                l_command, l_idx_mem, l_num_prll, l_index);
1743       IF l_req_id = 0 THEN
1744           log('Error submitting request');
1745           log(fnd_message.get);
1746       ELSE
1747           log('Submitted request ID for Party Index: ' || l_req_id );
1748           log('Request ID : ' || l_req_id);
1749       END IF;
1750     END IF;
1751 
1752     IF l_req_id>0 THEN
1753       IF l_rebuild_cpt_idx THEN
1754         l_index := 'HZ_CONTACT_POINTS';
1755       ELSE
1756         l_index := 'HZ_CONTACT_POINTS_BTREE';
1757       END IF;
1758       l_req_id := FND_REQUEST.SUBMIT_REQUEST('AR', 'ARHDQMCR',
1759                'DQM Create Index', to_char(sysdate,'DD-MON-YY HH24:MI:SS'), --bug 4641081
1760                TRUE, to_char(l_sub_requests(1)), to_char(l_sub_requests(2)),
1761                to_char(l_sub_requests(3)), to_char(l_sub_requests(4)),
1762                to_char(l_sub_requests(5)), to_char(l_sub_requests(6)),
1763                to_char(l_sub_requests(7)), to_char(l_sub_requests(8)),
1764                to_char(l_sub_requests(9)), to_char(l_sub_requests(10)),
1765                l_command, l_idx_mem, l_num_prll, l_index);
1766       IF l_req_id = 0 THEN
1767           log('Error submitting request');
1768           log(fnd_message.get);
1769       ELSE
1770           log('Submitted request ID for Contact Point Index: ' || l_req_id );
1771           log('Request ID : ' || l_req_id);
1772       END IF;
1773     END IF;
1774   ELSIF l_command = 'STAGE_NEW_TRANSFORMATIONS_NO_INDEXING' THEN
1775       log (' In the STAGE_NEW_TRANSFORMATIONS_NO_INDEXING flow');
1776       BEGIN
1777           SELECT number_of_workers INTO l_last_num_workers
1778           FROM HZ_DQM_STAGE_LOG
1779           WHERE operation = substr(l_command,1,30)
1780           AND STEP = 'INIT';
1781 
1782 
1783           IF l_last_num_workers<>l_num_workers AND l_continue = 'Y' THEN
1784             log('Cannot continue with different number of workers. Using ' ||
1785                  l_last_num_workers ||' workers, as specified in first run');
1786             l_num_workers := l_last_num_workers;
1787           END IF;
1788           EXCEPTION
1789           WHEN NO_DATA_FOUND THEN
1790             l_continue := 'N';
1791        END;
1792         IF l_continue <> 'Y' THEN
1793                  verify_all_procs;
1794                  generate_map_upd_pkg(l_rebuild_party_idx,l_rebuild_psite_idx,
1795                       l_rebuild_contact_idx,l_rebuild_cpt_idx);
1799                  generate_datastore_prefs ;
1796                  log('*** After gen upd '||l_continue);
1797 
1798                  -- Generate preferences for all entities regardless
1800 
1801 
1802 
1803                 DELETE from HZ_DQM_STAGE_LOG where operation = substr(l_command,1,30) ;
1804                 create_log(
1805                   p_operation=>l_command,
1806                   p_step=>'INIT',
1807                   p_num_workers=>l_num_workers);
1808 
1809                 l_num_stage_steps := g_num_stage_new_steps;
1810 
1811                 FOR I in 1..l_num_stage_steps LOOP
1812                   FOR J in 0..(l_num_workers-1) LOOP
1813                     create_log(
1814                       p_operation=>l_command,
1815                       p_step=>'STEP'||I,
1816                       p_worker_number=> J,
1817                       p_num_workers=>l_num_workers);
1818                   END LOOP;
1819                 END LOOP;
1820               END IF;
1821 
1822               FOR I in 1..10 LOOP
1823                   l_sub_requests(i) := 1;
1824               END LOOP;
1825 
1826               log('Spawning ' || l_num_workers || ' Workers for staging');
1827 
1828               -- Dispatch the Stage Data Worker
1829               FOR I in 1..l_num_workers LOOP
1830                 l_sub_requests(i) := FND_REQUEST.SUBMIT_REQUEST('AR', 'ARHDQMSTW',
1831                               'Stage Party Data Worker ' || to_char(i),
1832                               to_char(sysdate,'DD-MON-YY HH24:MI:SS'), --bug 4641081
1833                               TRUE, to_char(l_num_workers), TO_CHAR(I), l_command,l_continue);
1834                 IF l_sub_requests(i) = 0 THEN
1835                   log('Error submitting worker ' || i);
1836                   log(fnd_message.get);
1837                 ELSE
1838                   log('Submitted request for Worker ' || TO_CHAR(I) );
1839                   log('Request ID : ' || l_sub_requests(i));
1840                 END IF;
1841                 EXIT when l_sub_requests(i) = 0;
1842               END LOOP;
1843 
1844 ELSIF l_command = 'STAGE_ALL_DATA' THEN
1845 
1846     BEGIN
1847       SELECT count(*) into l_is_wildchar from HZ_DQM_STAGE_LOG where operation = 'STAGE_FOR_WILDCHAR_SEARCH' and rownum = 1 ;
1848       IF l_is_wildchar < 1 THEN
1849           INSERT INTO HZ_DQM_STAGE_LOG(operation, number_of_workers, worker_number, step,
1850                             last_update_date, creation_date, created_by, last_updated_by)
1851           VALUES ('STAGE_FOR_WILDCHAR_SEARCH', '-1', '-1', 'Y', SYSDATE, SYSDATE, 0, 0);
1852       END IF;
1853 
1854       SELECT number_of_workers INTO l_last_num_workers
1855       FROM HZ_DQM_STAGE_LOG
1856       WHERE operation = l_command
1857       AND STEP = 'INIT';
1858 
1859       IF l_last_num_workers<>l_num_workers AND l_continue = 'Y' THEN
1860         log('Cannot continue with different number of workers. Using ' ||
1861              l_last_num_workers ||' workers, as specified in first run');
1862         l_num_workers := l_last_num_workers;
1863       END IF;
1864     EXCEPTION
1865       WHEN NO_DATA_FOUND THEN
1866         l_continue := 'N';
1867     END;
1868 
1869     IF l_continue <> 'Y' THEN
1870       verify_all_procs;
1871       IF l_command = 'STAGE_ALL_DATA' THEN
1872         drop_indexes;
1873         delete_existing_data;
1874 	UPDATE HZ_TRANS_FUNCTIONS_B SET STAGED_FLAG='N'; --Bug No: 3907584.
1875       END IF;
1876 
1877       generate_datastore_prefs;
1878       IF l_command = 'STAGE_ALL_DATA' THEN
1879         generate_map_pkg;
1880       END IF;
1881 
1882       DELETE from HZ_DQM_STAGE_LOG where operation = l_command;
1883       create_log(
1884         p_operation=>l_command,
1885         p_step=>'INIT',
1886         p_num_workers=>l_num_workers);
1887 
1888       IF l_command = 'STAGE_ALL_DATA' THEN
1889         l_num_stage_steps := g_num_stage_steps;
1890       ELSE
1891         l_num_stage_steps := g_num_stage_new_steps;
1892       END IF;
1893 
1894       FOR I in 1..l_num_stage_steps LOOP
1895         FOR J in 0..(l_num_workers-1) LOOP
1896           create_log(
1897             p_operation=>l_command,
1898             p_step=>'STEP'||I,
1899             p_worker_number=> J,
1900             p_num_workers=>l_num_workers);
1901         END LOOP;
1902       END LOOP;
1903       DELETE from HZ_DQM_STAGE_LOG where operation = 'CREATE_INDEXES';
1904       create_log(
1905           p_operation=>'CREATE_INDEXES',
1906           p_step=>'HZ_PARTIES');
1907       create_log(
1908           p_operation=>'CREATE_INDEXES',
1909           p_step=>'HZ_PARTY_SITES');
1910       create_log(
1911           p_operation=>'CREATE_INDEXES',
1912           p_step=>'HZ_ORG_CONTACTS');
1913       create_log(
1914           p_operation=>'CREATE_INDEXES',
1915           p_step=>'HZ_CONTACT_POINTS');
1916     END IF;
1917 
1918     FOR I in 1..10 LOOP
1919       l_sub_requests(i) := 1;
1920     END LOOP;
1921 
1922 
1923     log('Spawning ' || l_num_workers || ' Workers for staging');
1924     FOR I in 1..l_num_workers LOOP
1925       l_sub_requests(i) := FND_REQUEST.SUBMIT_REQUEST('AR', 'ARHDQMSTW',
1926                     'Stage Party Data Worker ' || to_char(i),
1927                     to_char(sysdate,'DD-MON-YY HH24:MI:SS'), --bug 4641081
1931         log(fnd_message.get);
1928                     TRUE, to_char(l_num_workers), TO_CHAR(I), l_command,l_continue);
1929       IF l_sub_requests(i) = 0 THEN
1930         log('Error submitting worker ' || i);
1932       ELSE
1933         log('Submitted request for Worker ' || TO_CHAR(I) );
1934         log('Request ID : ' || l_sub_requests(i));
1935       END IF;
1936       EXIT when l_sub_requests(i) = 0;
1937     END LOOP;
1938 
1939     l_req_id := l_sub_requests(1);
1940 
1941     IF l_req_id>0 THEN
1942       l_index := 'HZ_PARTIES';
1943       l_req_id := FND_REQUEST.SUBMIT_REQUEST('AR', 'ARHDQMCR',
1944              'DQM Create Index', to_char(sysdate,'DD-MON-YY HH24:MI:SS'), --bug 4641081
1945              TRUE, to_char(l_sub_requests(1)), to_char(l_sub_requests(2)),
1946              to_char(l_sub_requests(3)), to_char(l_sub_requests(4)),
1947              to_char(l_sub_requests(5)), to_char(l_sub_requests(6)),
1948              to_char(l_sub_requests(7)), to_char(l_sub_requests(8)),
1949              to_char(l_sub_requests(9)), to_char(l_sub_requests(10)),
1950              l_command, l_idx_mem, l_num_prll, l_index);
1951       IF l_req_id = 0 THEN
1952           log('Error submitting request');
1953           log(fnd_message.get);
1954       ELSE
1955           log('Submitted request ID for Party Index: ' || l_req_id );
1956           log('Request ID : ' || l_req_id);
1957       END IF;
1958     END IF;
1959 
1960     IF l_req_id>0 THEN
1961       l_index := 'HZ_PARTY_SITES';
1962       l_req_id := FND_REQUEST.SUBMIT_REQUEST('AR', 'ARHDQMCR',
1963              'DQM Create Index', to_char(sysdate,'DD-MON-YY HH24:MI:SS'), --bug 4641081
1964                TRUE, to_char(l_sub_requests(1)), to_char(l_sub_requests(2)),
1965                to_char(l_sub_requests(3)), to_char(l_sub_requests(4)),
1966                to_char(l_sub_requests(5)), to_char(l_sub_requests(6)),
1967                to_char(l_sub_requests(7)), to_char(l_sub_requests(8)),
1968                to_char(l_sub_requests(9)), to_char(l_sub_requests(10)),
1969                l_command, l_idx_mem, l_num_prll, l_index);
1970       IF l_req_id = 0 THEN
1971           log('Error submitting request');
1972           log(fnd_message.get);
1973       ELSE
1974           log('Submitted request ID for Party Site Index: ' || l_req_id );
1975           log('Request ID : ' || l_req_id);
1976       END IF;
1977     END IF;
1978 
1979     IF l_req_id>0 THEN
1980       l_index := 'HZ_ORG_CONTACTS';
1981       l_req_id := FND_REQUEST.SUBMIT_REQUEST('AR', 'ARHDQMCR',
1982                'DQM Create Index', to_char(sysdate,'DD-MON-YY HH24:MI:SS'), --bug 4641081
1983                TRUE, to_char(l_sub_requests(1)), to_char(l_sub_requests(2)),
1984                to_char(l_sub_requests(3)), to_char(l_sub_requests(4)),
1985                to_char(l_sub_requests(5)), to_char(l_sub_requests(6)),
1986                to_char(l_sub_requests(7)), to_char(l_sub_requests(8)),
1987                to_char(l_sub_requests(9)), to_char(l_sub_requests(10)),
1988                l_command, l_idx_mem, l_num_prll, l_index);
1989       IF l_req_id = 0 THEN
1990           log('Error submitting request');
1991           log(fnd_message.get);
1992       ELSE
1993           log('Submitted request ID for Party Index: ' || l_req_id );
1994           log('Request ID : ' || l_req_id);
1995       END IF;
1996     END IF;
1997 
1998     IF l_req_id>0 THEN
1999       l_index := 'HZ_CONTACT_POINTS';
2000       l_req_id := FND_REQUEST.SUBMIT_REQUEST('AR', 'ARHDQMCR',
2001                'DQM Create Index', to_char(sysdate,'DD-MON-YY HH24:MI:SS'), --bug 4641081
2002                TRUE, to_char(l_sub_requests(1)), to_char(l_sub_requests(2)),
2003                to_char(l_sub_requests(3)), to_char(l_sub_requests(4)),
2004                to_char(l_sub_requests(5)), to_char(l_sub_requests(6)),
2005                to_char(l_sub_requests(7)), to_char(l_sub_requests(8)),
2006                to_char(l_sub_requests(9)), to_char(l_sub_requests(10)),
2007                l_command, l_idx_mem, l_num_prll, l_index);
2008       IF l_req_id = 0 THEN
2009           log('Error submitting request');
2010           log(fnd_message.get);
2011       ELSE
2012           log('Submitted request ID for Contact Point Index: ' || l_req_id );
2013           log('Request ID : ' || l_req_id);
2014       END IF;
2015     END IF;
2016   ELSIF l_command = 'CREATE_INDEXES' THEN
2017     IF l_continue = 'N' THEN
2018       drop_indexes;
2019       generate_datastore_prefs;
2020       DELETE from HZ_DQM_STAGE_LOG where operation = 'CREATE_INDEXES';
2021       create_log(
2022           p_operation=>'CREATE_INDEXES',
2023           p_step=>'HZ_PARTIES');
2024       create_log(
2025           p_operation=>'CREATE_INDEXES',
2026           p_step=>'HZ_PARTY_SITES');
2027       create_log(
2028           p_operation=>'CREATE_INDEXES',
2029           p_step=>'HZ_ORG_CONTACTS');
2030       create_log(
2031           p_operation=>'CREATE_INDEXES',
2032           p_step=>'HZ_CONTACT_POINTS');
2033 
2034     END IF;
2035 
2036     FOR I in 1..10 LOOP
2037       l_sub_requests(i) := 1;
2038     END LOOP;
2039 
2040     l_req_id := 1;
2041     IF l_req_id<>0 THEN
2042       l_req_id := FND_REQUEST.SUBMIT_REQUEST('AR', 'ARHDQMCR',
2043              'DQM Create Index', to_char(sysdate,'DD-MON-YY HH24:MI:SS'), --bug 4641081
2044              TRUE, to_char(l_sub_requests(1)), to_char(l_sub_requests(2)),
2048              to_char(l_sub_requests(9)), to_char(l_sub_requests(10)),
2045              to_char(l_sub_requests(3)), to_char(l_sub_requests(4)),
2046              to_char(l_sub_requests(5)), to_char(l_sub_requests(6)),
2047              to_char(l_sub_requests(7)), to_char(l_sub_requests(8)),
2049              l_command, l_idx_mem, l_num_prll, 'HZ_PARTIES');
2050       IF l_req_id = 0 THEN
2051         log('Error submitting request');
2052         log(fnd_message.get);
2053       ELSE
2054         log('Submitted request ID for Party Index: ' || l_req_id );
2055         log('Request ID : ' || l_req_id);
2056       END IF;
2057     END IF;
2058 
2059     IF l_req_id<>0 THEN
2060       IF l_index_creation = 'SERIAL' THEN
2061         l_sub_requests(1) := l_req_id;
2062       END IF;
2063 
2064       l_req_id := FND_REQUEST.SUBMIT_REQUEST('AR', 'ARHDQMCR',
2065              'DQM Create Index', to_char(sysdate,'DD-MON-YY HH24:MI:SS'), --bug 4641081
2066                TRUE, to_char(l_sub_requests(1)), to_char(l_sub_requests(2)),
2067                to_char(l_sub_requests(3)), to_char(l_sub_requests(4)),
2068                to_char(l_sub_requests(5)), to_char(l_sub_requests(6)),
2069                to_char(l_sub_requests(7)), to_char(l_sub_requests(8)),
2070                to_char(l_sub_requests(9)), to_char(l_sub_requests(10)),
2071                l_command, l_idx_mem, l_num_prll, 'HZ_PARTY_SITES');
2072       IF l_req_id = 0 THEN
2073         log('Error submitting request');
2074         log(fnd_message.get);
2075       ELSE
2076         log('Submitted request ID for Party Site Index: ' || l_req_id );
2077         log('Request ID : ' || l_req_id);
2078       END IF;
2079     END IF;
2080 
2081     IF l_req_id<>0 THEN
2082       IF l_index_creation = 'SERIAL' THEN
2083         l_sub_requests(1) := l_req_id;
2084       END IF;
2085 
2086       l_req_id := FND_REQUEST.SUBMIT_REQUEST('AR', 'ARHDQMCR',
2087                'DQM Create Index', to_char(sysdate,'DD-MON-YY HH24:MI:SS'), --bug 4641081
2088                TRUE, to_char(l_sub_requests(1)), to_char(l_sub_requests(2)),
2089                to_char(l_sub_requests(3)), to_char(l_sub_requests(4)),
2090                to_char(l_sub_requests(5)), to_char(l_sub_requests(6)),
2091                to_char(l_sub_requests(7)), to_char(l_sub_requests(8)),
2092                to_char(l_sub_requests(9)), to_char(l_sub_requests(10)),
2093                l_command, l_idx_mem, l_num_prll, 'HZ_ORG_CONTACTS');
2094       IF l_req_id = 0 THEN
2095         log('Error submitting request');
2096         log(fnd_message.get);
2097       ELSE
2098         log('Submitted request ID for Party Index: ' || l_req_id );
2099         log('Request ID : ' || l_req_id);
2100       END IF;
2101     END IF;
2102 
2103     IF l_req_id<>0 THEN
2104       IF l_index_creation = 'SERIAL' THEN
2105         l_sub_requests(1) := l_req_id;
2106       END IF;
2107 
2108       l_req_id := FND_REQUEST.SUBMIT_REQUEST('AR', 'ARHDQMCR',
2109                'DQM Create Index', to_char(sysdate,'DD-MON-YY HH24:MI:SS'), --bug 4641081
2110                TRUE, to_char(l_sub_requests(1)), to_char(l_sub_requests(2)),
2111                to_char(l_sub_requests(3)), to_char(l_sub_requests(4)),
2112                to_char(l_sub_requests(5)), to_char(l_sub_requests(6)),
2113                to_char(l_sub_requests(7)), to_char(l_sub_requests(8)),
2114                to_char(l_sub_requests(9)), to_char(l_sub_requests(10)),
2115                l_command, l_idx_mem, l_num_prll, 'HZ_CONTACT_POINTS');
2116       IF l_req_id = 0 THEN
2117         log('Error submitting request');
2118         log(fnd_message.get);
2119       ELSE
2120         log('Submitted request ID for Contact Point Index: ' || l_req_id );
2121         log('Request ID : ' || l_req_id);
2122       END IF;
2123     END IF;
2124   ELSIF l_command='CREATE_MISSING_INVALID_INDEXES' THEN
2125     IF l_continue = 'N' THEN
2126       generate_datastore_prefs;
2127       DELETE from HZ_DQM_STAGE_LOG where operation = 'CREATE_INDEXES';
2128       create_log(
2129           p_operation=>'CREATE_INDEXES',
2130           p_step=>'HZ_PARTIES');
2131       create_log(
2132           p_operation=>'CREATE_INDEXES',
2133           p_step=>'HZ_PARTY_SITES');
2134       create_log(
2135           p_operation=>'CREATE_INDEXES',
2136           p_step=>'HZ_ORG_CONTACTS');
2137       create_log(
2138           p_operation=>'CREATE_INDEXES',
2139           p_step=>'HZ_CONTACT_POINTS');
2140     END IF;
2141     FOR I in 1..10 LOOP
2142       l_sub_requests(i) := 1;
2143     END LOOP;
2144 
2145     l_req_id := 1;
2146     BEGIN
2147       SELECT 1 INTO T FROM HZ_STAGED_PARTIES
2148       WHERE ROWNUM=1
2149       AND CONTAINS (concat_col, 'dummy_string')>0;
2150     EXCEPTION
2151       WHEN NO_DATA_FOUND THEN
2152         UPDATE HZ_DQM_STAGE_LOG
2153         SET START_FLAG ='Y', START_TIME=SYSDATE,END_FLAG = 'Y', END_TIME=SYSDATE
2154         WHERE OPERATION = 'CREATE_INDEXES' AND step = 'HZ_PARTIES';
2155       WHEN OTHERS THEN
2156         BEGIN
2157           EXECUTE IMMEDIATE 'DROP INDEX ' || l_index_owner || '.hz_stage_parties_t1 FORCE';
2158           log('Dropped hz_stage_parties_t1');
2159         EXCEPTION
2160           WHEN OTHERS THEN
2161             log('Error dropping hz_stage_parties_t1 ' || SQLERRM);
2162         END;
2163 
2164         l_req_id := FND_REQUEST.SUBMIT_REQUEST('AR', 'ARHDQMCR',
2168                to_char(l_sub_requests(5)), to_char(l_sub_requests(6)),
2165                'DQM Create Index', to_char(sysdate,'DD-MON-YY HH24:MI:SS'), --bug 4641081
2166                TRUE, to_char(l_sub_requests(1)), to_char(l_sub_requests(2)),
2167                to_char(l_sub_requests(3)), to_char(l_sub_requests(4)),
2169                to_char(l_sub_requests(7)), to_char(l_sub_requests(8)),
2170                to_char(l_sub_requests(9)), to_char(l_sub_requests(10)),
2171                l_command, l_idx_mem, l_num_prll, 'HZ_PARTIES');
2172         IF l_req_id = 0 THEN
2173           log('Error submitting request');
2174           log(fnd_message.get);
2175         ELSE
2176           log('Submitted request ID for Party Index: ' || l_req_id );
2177           log('Request ID : ' || l_req_id);
2178         END IF;
2179     END;
2180 
2181     BEGIN
2182       SELECT 1 INTO T FROM HZ_STAGED_PARTY_SITES
2183       WHERE ROWNUM=1
2184       AND CONTAINS (concat_col, 'dummy_string')>0;
2185     EXCEPTION
2186       WHEN NO_DATA_FOUND THEN
2187         UPDATE HZ_DQM_STAGE_LOG
2188         SET START_FLAG ='Y', START_TIME=SYSDATE,END_FLAG = 'Y', END_TIME=SYSDATE
2189         WHERE OPERATION = 'CREATE_INDEXES' AND step = 'HZ_PARTY_SITES';
2190       WHEN OTHERS THEN
2191 
2192         BEGIN
2193           EXECUTE IMMEDIATE 'DROP INDEX ' || l_index_owner || '.hz_stage_party_sites_t1 FORCE';
2194           log('Dropped hz_stage_party_sites_t1');
2195         EXCEPTION
2196           WHEN OTHERS THEN
2197             NULL;
2198         END;
2199 
2200         IF l_index_creation = 'SERIAL' THEN
2201           l_sub_requests(1):=l_req_id;
2202         END IF;
2203 
2204         l_req_id := FND_REQUEST.SUBMIT_REQUEST('AR', 'ARHDQMCR',
2205                'DQM Create Index', to_char(sysdate,'DD-MON-YY HH24:MI:SS'), --bug 4641081
2206                TRUE, to_char(l_sub_requests(1)), to_char(l_sub_requests(2)),
2207                to_char(l_sub_requests(3)), to_char(l_sub_requests(4)),
2208                to_char(l_sub_requests(5)), to_char(l_sub_requests(6)),
2209                to_char(l_sub_requests(7)), to_char(l_sub_requests(8)),
2210                to_char(l_sub_requests(9)), to_char(l_sub_requests(10)),
2211                l_command, l_idx_mem, l_num_prll, 'HZ_PARTY_SITES');
2212         IF l_req_id = 0 THEN
2213           log('Error submitting request');
2214           log(fnd_message.get);
2215         ELSE
2216           log('Submitted request ID for Party Index: ' || l_req_id );
2217           log('Request ID : ' || l_req_id);
2218         END IF;
2219     END;
2220 
2221     BEGIN
2222       SELECT 1 INTO T FROM HZ_STAGED_CONTACTS
2223       WHERE ROWNUM=1
2224       AND CONTAINS (concat_col, 'dummy_string')>0;
2225     EXCEPTION
2226       WHEN NO_DATA_FOUND THEN
2227         UPDATE HZ_DQM_STAGE_LOG
2228         SET START_FLAG ='Y', START_TIME=SYSDATE,END_FLAG = 'Y', END_TIME=SYSDATE
2229         WHERE OPERATION = 'CREATE_INDEXES' AND step = 'HZ_ORG_CONTACTS';
2230       WHEN OTHERS THEN
2231 
2232         BEGIN
2233           EXECUTE IMMEDIATE 'DROP INDEX ' || l_index_owner || '.hz_stage_contact_t1 FORCE';
2234           log('Dropped hz_stage_contact_t1');
2235         EXCEPTION
2236           WHEN OTHERS THEN
2237             NULL;
2238         END;
2239 
2240         IF l_index_creation = 'SERIAL' THEN
2241           l_sub_requests(1):=l_req_id;
2242         END IF;
2243 
2244         l_req_id := FND_REQUEST.SUBMIT_REQUEST('AR', 'ARHDQMCR',
2245                'DQM Create Index', to_char(sysdate,'DD-MON-YY HH24:MI:SS'),  --bug 4641081
2246                TRUE, to_char(l_sub_requests(1)), to_char(l_sub_requests(2)),
2247                to_char(l_sub_requests(3)), to_char(l_sub_requests(4)),
2248                to_char(l_sub_requests(5)), to_char(l_sub_requests(6)),
2249                to_char(l_sub_requests(7)), to_char(l_sub_requests(8)),
2250                to_char(l_sub_requests(9)), to_char(l_sub_requests(10)),
2251                l_command, l_idx_mem, l_num_prll, 'HZ_ORG_CONTACTS');
2252         IF l_req_id = 0 THEN
2253           log('Error submitting request');
2254           log(fnd_message.get);
2255         ELSE
2256           log('Submitted request ID for Contact Index: ' || l_req_id );
2257           log('Request ID : ' || l_req_id);
2258         END IF;
2259     END;
2260 
2261     BEGIN
2262       SELECT 1 INTO T FROM HZ_STAGED_CONTACT_POINTS
2263       WHERE ROWNUM=1
2264       AND CONTAINS (concat_col, 'dummy_string')>0;
2265     EXCEPTION
2266       WHEN NO_DATA_FOUND THEN
2267         UPDATE HZ_DQM_STAGE_LOG
2268         SET START_FLAG ='Y', START_TIME=SYSDATE,END_FLAG = 'Y', END_TIME=SYSDATE
2269         WHERE OPERATION = 'CREATE_INDEXES' AND step = 'HZ_CONTACT_POINTS';
2270       WHEN OTHERS THEN
2271 
2272         BEGIN
2273           EXECUTE IMMEDIATE 'DROP INDEX ' || l_index_owner || '.hz_stage_cpt_t1 FORCE';
2274           log('Dropped hz_stage_cpt_t1');
2275         EXCEPTION
2276           WHEN OTHERS THEN
2277             NULL;
2278         END;
2279 
2280         IF l_index_creation = 'SERIAL' THEN
2281           l_sub_requests(1):=l_req_id;
2282         END IF;
2283 
2284         l_req_id := FND_REQUEST.SUBMIT_REQUEST('AR', 'ARHDQMCR',
2285                'DQM Create Index', to_char(sysdate,'DD-MON-YY HH24:MI:SS'), --bug 4641081
2286                TRUE, to_char(l_sub_requests(1)), to_char(l_sub_requests(2)),
2287                to_char(l_sub_requests(3)), to_char(l_sub_requests(4)),
2291                l_command, l_idx_mem, l_num_prll, 'HZ_CONTACT_POINTS');
2288                to_char(l_sub_requests(5)), to_char(l_sub_requests(6)),
2289                to_char(l_sub_requests(7)), to_char(l_sub_requests(8)),
2290                to_char(l_sub_requests(9)), to_char(l_sub_requests(10)),
2292         IF l_req_id = 0 THEN
2293           log('Error submitting request');
2294           log(fnd_message.get);
2295         ELSE
2296           log('Submitted request ID for Contact Point Index: ' || l_req_id );
2297           log('Request ID : ' || l_req_id);
2298         END IF;
2299     END;
2300   ELSIF p_command='RECREATE_BTREE_INDEXES' THEN
2301     drop_btree_indexes;
2302     FOR I in 1..10 LOOP
2303       l_sub_requests(i) := 1;
2304     END LOOP;
2305 
2306     l_index := 'HZ_PARTIES_BTREE';
2307     l_req_id := FND_REQUEST.SUBMIT_REQUEST('AR', 'ARHDQMCR',
2308              'DQM Create Index', to_char(sysdate,'DD-MON-YY HH24:MI:SS'), --bug 4641081
2309              TRUE, to_char(l_sub_requests(1)), to_char(l_sub_requests(2)),
2310              to_char(l_sub_requests(3)), to_char(l_sub_requests(4)),
2311              to_char(l_sub_requests(5)), to_char(l_sub_requests(6)),
2312              to_char(l_sub_requests(7)), to_char(l_sub_requests(8)),
2313              to_char(l_sub_requests(9)), to_char(l_sub_requests(10)),
2314              l_command, l_idx_mem, l_num_prll, l_index);
2315     IF l_req_id = 0 THEN
2316           log('Error submitting request');
2317           log(fnd_message.get);
2318     ELSE
2319           log('Submitted request ID for Party Index: ' || l_req_id );
2320           log('Request ID : ' || l_req_id);
2321     END IF;
2322 
2323     l_index := 'HZ_PARTY_SITES_BTREE';
2324 
2325     l_req_id := FND_REQUEST.SUBMIT_REQUEST('AR', 'ARHDQMCR',
2326              'DQM Create Index', to_char(sysdate,'DD-MON-YY HH24:MI:SS'), --bug 4641081
2327                TRUE, to_char(l_sub_requests(1)), to_char(l_sub_requests(2)),
2328                to_char(l_sub_requests(3)), to_char(l_sub_requests(4)),
2329                to_char(l_sub_requests(5)), to_char(l_sub_requests(6)),
2330                to_char(l_sub_requests(7)), to_char(l_sub_requests(8)),
2331                to_char(l_sub_requests(9)), to_char(l_sub_requests(10)),
2332                l_command, l_idx_mem, l_num_prll, l_index);
2333     IF l_req_id = 0 THEN
2334           log('Error submitting request');
2335           log(fnd_message.get);
2336     ELSE
2337           log('Submitted request ID for Party Site Index: ' || l_req_id );
2338           log('Request ID : ' || l_req_id);
2339     END IF;
2340 
2341     l_index := 'HZ_ORG_CONTACTS_BTREE';
2342 
2343     l_req_id := FND_REQUEST.SUBMIT_REQUEST('AR', 'ARHDQMCR',
2344                'DQM Create Index', to_char(sysdate,'DD-MON-YY HH24:MI:SS'), --bug 4641081
2345                TRUE, to_char(l_sub_requests(1)), to_char(l_sub_requests(2)),
2346                to_char(l_sub_requests(3)), to_char(l_sub_requests(4)),
2347                to_char(l_sub_requests(5)), to_char(l_sub_requests(6)),
2348                to_char(l_sub_requests(7)), to_char(l_sub_requests(8)),
2349                to_char(l_sub_requests(9)), to_char(l_sub_requests(10)),
2350                l_command, l_idx_mem, l_num_prll, l_index);
2351     IF l_req_id = 0 THEN
2352           log('Error submitting request');
2353           log(fnd_message.get);
2354     ELSE
2355           log('Submitted request ID for Contact Index: ' || l_req_id );
2356           log('Request ID : ' || l_req_id);
2357     END IF;
2358 
2359     l_index := 'HZ_CONTACT_POINTS_BTREE';
2360 
2361     l_req_id := FND_REQUEST.SUBMIT_REQUEST('AR', 'ARHDQMCR',
2362                'DQM Create Index', to_char(sysdate,'DD-MON-YY HH24:MI:SS'), --bug 4641081
2363                TRUE, to_char(l_sub_requests(1)), to_char(l_sub_requests(2)),
2364                to_char(l_sub_requests(3)), to_char(l_sub_requests(4)),
2365                to_char(l_sub_requests(5)), to_char(l_sub_requests(6)),
2366                to_char(l_sub_requests(7)), to_char(l_sub_requests(8)),
2367                to_char(l_sub_requests(9)), to_char(l_sub_requests(10)),
2368                l_command, l_idx_mem, l_num_prll, l_index);
2369     IF l_req_id = 0 THEN
2370           log('Error submitting request');
2371           log(fnd_message.get);
2372     ELSE
2373           log('Submitted request ID for Contact Point Index: ' || l_req_id );
2374           log('Request ID : ' || l_req_id);
2375     END IF;
2376 
2377   END IF;
2378 
2379 --Start of Bug No : 4292425
2380   -- wait for completion of all workers
2381    IF l_command = 'STAGE_ALL_DATA' OR l_command = 'STAGE_NEW_TRANSFORMATIONS' THEN
2382      fnd_conc_global.set_req_globals(conc_status => 'PAUSED', request_data => 'DQM_STAGE_DATA_WORKERS_'||l_realtime_sync_value) ; --4915282
2383    ELSE
2384      fnd_conc_global.set_req_globals(conc_status => 'PAUSED', request_data => 'DQM_STAGE_DATA_WORKERS') ;
2385    END IF;
2386 
2387 
2388 
2389 ELSIF (req_data IS NOT NULL) then
2390    -- AFTER ALL THE WORKERS ARE DONE, SEE IF THEY HAVE ALL COMPLETED NORMALLY
2391    -- assume that all concurrent workers completed normally, unless found otherwise
2392    l_workers_completed := TRUE;
2393 
2394    Select request_id BULK COLLECT into l_sub_requests
2395    from Fnd_Concurrent_Requests R
2396    Where Parent_Request_Id = FND_GLOBAL.conc_request_id
2397    and (phase_code<>'C' or status_code<>'C');
2398 
2399    IF  l_sub_requests.count>0 THEN
2400       l_workers_completed:=FALSE;
2401       FOR I in 1..l_sub_requests.COUNT LOOP
2405       END LOOP;
2402         outandlog('Data worker with request id ' || l_sub_requests(I) );
2403         outandlog(' did not complete normally');
2404         retcode := 2;
2406    END IF;
2407    if(l_workers_completed)then
2408     outandlog('Concurrent Program Execution completed ');
2409     outandlog('End Time : '|| TO_CHAR(SYSDATE, 'DD-MON-YYYY HH24:MI:SS'));
2410    end if;
2411    --Start of 4915282
2412    l_realtime_sync_value := substr(req_data,instr(req_data,'_',-1)+1);
2413    IF( l_realtime_sync_value IN ('Y','N','DISABLE') ) THEN
2414      IF(l_realtime_sync_value <> 'N') THEN
2415        l_realtime_sync_value := 'Y';
2416        OPEN c_sync;
2417        FETCH c_sync INTO l_sync_count;
2418        IF(c_sync%FOUND) THEN
2419           l_req_id := FND_REQUEST.SUBMIT_REQUEST(
2420                              application    => 'AR',     /**** Application Name ****/
2421                               program        => 'ARHDQSYN',   /*** Program Name ***/
2422                               sub_request    => FALSE,    /*** Sub Request ***/
2423                  	      argument1      => NULL, /* p_num_of_workers */
2424                  	      argument2      => NULL /* p_indexes_only */
2425                              );
2426           IF l_req_id = 0 THEN
2427            log('Error submitting sync request');
2428            log(fnd_message.get);
2429           ELSE
2430            log('Submitted request ID for Sync : ' || l_req_id );
2431            log('Request ID : ' || l_req_id);
2432           END IF;
2433        END IF;
2434        CLOSE c_sync;
2435      END IF;
2436      l_profile_save := FND_PROFILE.save('HZ_DQM_ENABLE_REALTIME_SYNC',l_realtime_sync_value,'SITE');
2437    END IF;
2438    --End of 4915282
2439 END IF;
2440 --End of Bug No : 4292425
2441 
2442 EXCEPTION
2443   WHEN FND_API.G_EXC_ERROR THEN
2444     outandlog('Error: Aborting staging');
2445     retcode := 2;
2446     errbuf := errbuf || logerror || SQLERRM;
2447     FND_FILE.close;
2448   WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
2449     outandlog('Error: Aborting staging');
2450     retcode := 2;
2451     errbuf := errbuf || logerror || SQLERRM;
2452    FND_FILE.close;
2453   WHEN OTHERS THEN
2454     log(fnd_message.get);
2455     outandlog('Error: Aborting staging');
2456     retcode := 2;
2457     errbuf := errbuf || logerror || SQLERRM;
2458     FND_FILE.close;
2459 END;
2460 
2461 
2462 PROCEDURE gather_stats(
2463          table_owner          VARCHAR2,
2464          table_name           VARCHAR2
2465 ) IS
2466 BEGIN
2467      fnd_stats.gather_table_stats(table_owner, table_name);
2468 END gather_stats;
2469 
2470 PROCEDURE Stage_worker(
2471         errbuf                  OUT NOCOPY   VARCHAR2,
2472         retcode                 OUT NOCOPY   VARCHAR2,
2473         p_num_workers           IN      VARCHAR2,
2474         p_worker_number         IN      VARCHAR2,
2475         p_command         	IN      VARCHAR2,
2476         p_continue         	IN      VARCHAR2
2477 
2478 ) IS
2479 
2480 CURSOR l_log_cur(p_command VARCHAR2, l_worker_number NUMBER, l_step VARCHAR2) is
2481    ( SELECT start_flag, end_flag
2482       FROM HZ_DQM_STAGE_LOG
2483       WHERE OPERATION = p_command
2484       AND WORKER_NUMBER = l_worker_number AND step = l_step);
2485 
2486 l_party_id		NUMBER;
2487 l_party_type		HZ_PARTIES.PARTY_TYPE%TYPE;
2488 
2489 l_party_staged VARCHAR2(1);
2490 l_temp_party_id		NUMBER;
2491 l_worker_number		NUMBER;
2492 l_num_workers		NUMBER;
2493 
2494 l_index_owner VARCHAR2(255);
2495 l_temp VARCHAR2(255);
2496 l_bool BOOLEAN;
2497 l_status VARCHAR2(255);
2498 
2499 l_error  VARCHAR2(2000);
2500 
2501 l_party_cur StageCurTyp;
2502 l_party_site_cur StageCurTyp;
2503 l_contact_cur StageCurTyp;
2504 l_cpt_cur StageCurTyp;
2505 
2506 l_start_flag VARCHAR2(30);
2507 l_end_flag VARCHAR2(30);
2508 
2509 l_number_of_workers NUMBER;
2510 l_startdate DATE;
2511 
2512 l_log_step VARCHAR2(30);
2513 
2514 BEGIN
2515 
2516   retcode := 0;
2517   l_worker_number := TO_NUMBER(p_worker_number);
2518   l_num_workers := TO_NUMBER(p_num_workers);
2519   IF l_worker_number = l_num_workers THEN
2520     l_worker_number := 0;
2521   END IF;
2522 
2523 
2524   log('Starting Concurrent Program ''Stage Party Data'', Worker:  ' ||
2525             p_worker_number);
2526   log('Start Time ' || TO_CHAR(SYSDATE, 'MM-DD-YY HH24:MI:SS'));
2527   log('NEWLINE');
2528 
2529   log('This worker stages all parties whose party_id/10 produces a remainder equal to the worker number ');
2530 
2531   log('');
2532   log('Stage Parties begin');
2533 
2534   FND_MSG_PUB.initialize;
2535   HZ_TRANS_PKG.set_staging_context('Y');
2536   IF p_command='STAGE_ALL_DATA' THEN
2537 
2538     SELECT SYSDATE INTO l_startdate FROM DUAL;
2539 
2540     log('Staging Organization Party Records');
2541 
2542     OPEN l_log_cur(p_command, l_worker_number, 'STEP1');
2543     FETCH l_log_cur INTO l_start_flag, l_end_flag;
2544     IF (l_log_cur%NOTFOUND) THEN
2545        l_start_flag:=NULL;
2546        l_end_flag:=NULL;
2547     END IF;
2548     CLOSE l_log_cur;
2549 
2550     IF nvl(l_end_flag,'N') = 'N' THEN
2551       IF nvl(l_start_flag ,'N') = 'N' THEN
2552 
2553         l_log_step := 'STEP1';
2554         UPDATE HZ_DQM_STAGE_LOG set start_flag='Y', start_time = SYSDATE
2555         WHERE OPERATION = p_command
2556         AND WORKER_NUMBER = l_worker_number AND step = l_log_step;
2557         COMMIT;
2558 
2559         HZ_TRANS_PKG.set_party_type('ORGANIZATION');
2560         HZ_STAGE_MAP_TRANSFORM.open_party_cursor(
2561          'ALL_PARTIES', 'ORGANIZATION',l_worker_number, l_num_workers, NULL,'N', l_party_cur);
2562         HZ_STAGE_MAP_TRANSFORM.insert_stage_parties('N',l_party_cur);
2563       ELSE
2564         HZ_TRANS_PKG.set_party_type('ORGANIZATION');
2565         log(' Continue for Org cursor');
2566         HZ_STAGE_MAP_TRANSFORM.open_party_cursor(
2567          'ALL_PARTIES', 'ORGANIZATION',l_worker_number, l_num_workers, NULL,'Y', l_party_cur);
2568         HZ_STAGE_MAP_TRANSFORM.insert_stage_parties('Y',l_party_cur);
2569       END IF;
2570 
2571       CLOSE l_party_cur;
2572       l_log_step := 'STEP1';
2573       UPDATE HZ_DQM_STAGE_LOG set end_flag='Y', end_time = SYSDATE
2574       WHERE OPERATION = p_command
2575       AND WORKER_NUMBER = l_worker_number AND step = l_log_step;
2576 
2577       COMMIT;
2578     END IF;
2579 
2580     log('Staging Person Party Records');
2581     OPEN l_log_cur(p_command, l_worker_number, 'STEP2');
2582     FETCH l_log_cur INTO l_start_flag, l_end_flag;
2583     IF (l_log_cur%NOTFOUND) THEN
2584        l_start_flag:=NULL;
2585        l_end_flag:=NULL;
2586     END IF;
2587     CLOSE l_log_cur;
2588 
2589     IF nvl(l_end_flag,'N') = 'N' THEN
2590       IF nvl(l_start_flag,'N') = 'N' THEN
2591         l_log_step := 'STEP2';
2592         UPDATE HZ_DQM_STAGE_LOG set start_flag='Y', start_time = SYSDATE
2593         WHERE OPERATION = p_command
2594         AND WORKER_NUMBER = l_worker_number AND step = l_log_step;
2595         COMMIT;
2596 
2597         HZ_TRANS_PKG.set_party_type('PERSON');
2598         HZ_STAGE_MAP_TRANSFORM.open_party_cursor(
2599           'ALL_PARTIES', 'PERSON',l_worker_number, l_num_workers, NULL,'N', l_party_cur);
2600         HZ_STAGE_MAP_TRANSFORM.insert_stage_parties('N',l_party_cur);
2601       ELSE
2602 log(' Continue for Per cursor');
2603         HZ_TRANS_PKG.set_party_type('PERSON');
2604         HZ_STAGE_MAP_TRANSFORM.open_party_cursor(
2605           'ALL_PARTIES', 'PERSON',l_worker_number, l_num_workers, NULL,'Y', l_party_cur);
2606         HZ_STAGE_MAP_TRANSFORM.insert_stage_parties('Y',l_party_cur);
2607       END IF;
2608 
2609       CLOSE l_party_cur;
2610       l_log_step := 'STEP2';
2611       UPDATE HZ_DQM_STAGE_LOG set end_flag='Y', end_time = SYSDATE
2612       WHERE OPERATION = p_command
2613       AND WORKER_NUMBER = l_worker_number AND step = l_log_step;
2614 
2615       COMMIT;
2616     END IF;
2617 
2618     log('Staging Group Party Records');
2619     OPEN l_log_cur(p_command, l_worker_number, 'STEP3');
2620     FETCH l_log_cur INTO l_start_flag, l_end_flag;
2621     IF (l_log_cur%NOTFOUND) THEN
2622        l_start_flag:=NULL;
2623        l_end_flag:=NULL;
2624     END IF;
2625     CLOSE l_log_cur;
2626 
2627     IF nvl(l_end_flag,'N') = 'N' THEN
2628       IF nvl(l_start_flag,'N') = 'N' THEN
2629         l_log_step := 'STEP3';
2630         UPDATE HZ_DQM_STAGE_LOG set start_flag='Y', start_time = SYSDATE
2631         WHERE OPERATION = p_command
2632         AND WORKER_NUMBER = l_worker_number AND step = l_log_step;
2633         COMMIT;
2634 
2635         HZ_TRANS_PKG.set_party_type('OTHER');
2636         HZ_STAGE_MAP_TRANSFORM.open_party_cursor(
2637           'ALL_PARTIES', 'OTHER',l_worker_number, l_num_workers, NULL,'N', l_party_cur);
2638         HZ_STAGE_MAP_TRANSFORM.insert_stage_parties('N',l_party_cur);
2639       ELSE
2640 log(' Continue for Oth cursor');
2641 
2642         HZ_TRANS_PKG.set_party_type('OTHER');
2643         HZ_STAGE_MAP_TRANSFORM.open_party_cursor(
2644           'ALL_PARTIES', 'OTHER',l_worker_number, l_num_workers, NULL,'Y', l_party_cur);
2645         HZ_STAGE_MAP_TRANSFORM.insert_stage_parties('Y',l_party_cur);
2646       END IF;
2647 
2648       CLOSE l_party_cur;
2649       l_log_step := 'STEP3';
2650       UPDATE HZ_DQM_STAGE_LOG set end_flag='Y', end_time = SYSDATE
2651       WHERE OPERATION = p_command
2652       AND WORKER_NUMBER = l_worker_number AND step = l_log_step;
2653 
2654       COMMIT;
2655 
2656     END IF;
2657 
2658     DELETE FROM HZ_DQM_SYNC_INTERFACE WHERE mod(PARTY_ID,l_num_workers) = l_worker_number
2659     AND creation_date<=l_startdate;
2660 
2661   ELSE
2662     log('Updating Organization Party Records');
2663     OPEN l_log_cur(p_command, l_worker_number, 'STEP1');
2664     FETCH l_log_cur INTO l_start_flag, l_end_flag;
2665     IF (l_log_cur%NOTFOUND) THEN
2666        l_start_flag:=NULL;
2667        l_end_flag:=NULL;
2668     END IF;
2669     CLOSE l_log_cur;
2670 
2671     IF nvl(l_end_flag,'N') = 'N' THEN
2672       IF nvl(l_start_flag,'N') = 'N' THEN
2673         l_log_step := 'STEP1';
2677         COMMIT;
2674         UPDATE HZ_DQM_STAGE_LOG set start_flag='Y', start_time = SYSDATE
2675         WHERE OPERATION = p_command
2676         AND WORKER_NUMBER = l_worker_number AND step = l_log_step;
2678 
2679       END IF;
2680 
2681       HZ_TRANS_PKG.set_party_type('ORGANIZATION');
2682       HZ_STAGE_MAP_TRANSFORM_UPD.open_party_cursor(
2683         'ORGANIZATION',l_worker_number, l_num_workers, l_party_cur);
2684       IF l_party_cur IS NOT NULL THEN
2685         HZ_STAGE_MAP_TRANSFORM_UPD.update_stage_parties(l_party_cur);
2686         CLOSE l_party_cur;
2687       END IF;
2688 
2689       l_log_step := 'STEP1';
2690       UPDATE HZ_DQM_STAGE_LOG set end_flag='Y', end_time = SYSDATE
2691       WHERE OPERATION = p_command
2692       AND WORKER_NUMBER = l_worker_number AND step = l_log_step;
2693 
2694       COMMIT;
2695     END IF;
2696 
2697     log('Updating Person Party Records');
2698     OPEN l_log_cur(p_command, l_worker_number, 'STEP2');
2699     FETCH l_log_cur INTO l_start_flag, l_end_flag;
2700     IF (l_log_cur%NOTFOUND) THEN
2701        l_start_flag:=NULL;
2702        l_end_flag:=NULL;
2703     END IF;
2704     CLOSE l_log_cur;
2705 
2706     IF nvl(l_end_flag,'N') = 'N' THEN
2707       IF nvl(l_start_flag,'N') = 'N' THEN
2708         l_log_step := 'STEP2';
2709         UPDATE HZ_DQM_STAGE_LOG set start_flag='Y', start_time = SYSDATE
2710         WHERE OPERATION = p_command
2711         AND WORKER_NUMBER = l_worker_number AND step = l_log_step;
2712 
2713       END IF;
2714 
2715       HZ_TRANS_PKG.set_party_type('PERSON');
2716       HZ_STAGE_MAP_TRANSFORM_UPD.open_party_cursor(
2717         'PERSON',l_worker_number, l_num_workers, l_party_cur);
2718 
2719       IF l_party_cur IS NOT NULL THEN
2720         HZ_STAGE_MAP_TRANSFORM_UPD.update_stage_parties(l_party_cur);
2721         CLOSE l_party_cur;
2722       END IF;
2723       l_log_step := 'STEP2';
2724       UPDATE HZ_DQM_STAGE_LOG set end_flag='Y', end_time = SYSDATE
2725       WHERE OPERATION = p_command
2726       AND WORKER_NUMBER = l_worker_number AND step = l_log_step;
2727 
2728       COMMIT;
2729     END IF;
2730 
2731     log('Updating Group Party Records');
2732 
2733     OPEN l_log_cur(p_command, l_worker_number, 'STEP3');
2734     FETCH l_log_cur INTO l_start_flag, l_end_flag;
2735     IF (l_log_cur%NOTFOUND) THEN
2736        l_start_flag:=NULL;
2737        l_end_flag:=NULL;
2738     END IF;
2739     CLOSE l_log_cur;
2740 
2741     IF nvl(l_end_flag,'N') = 'N' THEN
2742       IF nvl(l_start_flag,'N') = 'N' THEN
2743         l_log_step := 'STEP3';
2744         UPDATE HZ_DQM_STAGE_LOG set start_flag='Y', start_time = SYSDATE
2745         WHERE OPERATION = p_command
2746         AND WORKER_NUMBER = l_worker_number AND step = l_log_step;
2747       END IF;
2748 
2749       HZ_TRANS_PKG.set_party_type('OTHER');
2750       HZ_STAGE_MAP_TRANSFORM_UPD.open_party_cursor(
2751         'OTHER',l_worker_number, l_num_workers, l_party_cur);
2752 
2753       IF l_party_cur IS NOT NULL THEN
2754         HZ_STAGE_MAP_TRANSFORM_UPD.update_stage_parties(l_party_cur);
2755         CLOSE l_party_cur;
2756       END IF;
2757 
2758       l_log_step := 'STEP3';
2759       UPDATE HZ_DQM_STAGE_LOG set end_flag='Y', end_time = SYSDATE
2760       WHERE OPERATION = p_command
2761       AND WORKER_NUMBER = l_worker_number AND step = l_log_step;
2762 
2763       COMMIT;
2764     END IF;
2765 
2766     log('Updating Contact Records');
2767     OPEN l_log_cur(p_command, l_worker_number, 'STEP4');
2768     FETCH l_log_cur INTO l_start_flag, l_end_flag;
2769     IF (l_log_cur%NOTFOUND) THEN
2770        l_start_flag:=NULL;
2771        l_end_flag:=NULL;
2772     END IF;
2773     CLOSE l_log_cur;
2774 
2775 
2776     IF nvl(l_end_flag,'N') = 'N' THEN
2777       IF nvl(l_start_flag,'N') = 'N' THEN
2778         l_log_step := 'STEP4';
2779         UPDATE HZ_DQM_STAGE_LOG set start_flag='Y', start_time = SYSDATE
2780         WHERE OPERATION = p_command
2781         AND WORKER_NUMBER = l_worker_number AND step = l_log_step;
2782 
2783       END IF;
2784 
2785       HZ_STAGE_MAP_TRANSFORM_UPD.open_contact_cursor(
2786         l_worker_number, l_num_workers, l_contact_cur);
2787       IF l_contact_cur IS NOT NULL THEN
2788         HZ_STAGE_MAP_TRANSFORM_UPD.update_stage_contacts(l_contact_cur);
2789         CLOSE l_contact_cur;
2790       END IF;
2791       l_log_step := 'STEP4';
2792       UPDATE HZ_DQM_STAGE_LOG set end_flag='Y', end_time = SYSDATE
2793       WHERE OPERATION = p_command
2794       AND WORKER_NUMBER = l_worker_number AND step = l_log_step;
2795 
2796       COMMIT;
2797     END IF;
2798 
2799     log('Updating Party Site Records');
2800     OPEN l_log_cur(p_command, l_worker_number, 'STEP5');
2801     FETCH l_log_cur INTO l_start_flag, l_end_flag;
2802     IF (l_log_cur%NOTFOUND) THEN
2803        l_start_flag:=NULL;
2804        l_end_flag:=NULL;
2805     END IF;
2806     CLOSE l_log_cur;
2807 
2808 
2809     IF nvl(l_end_flag,'N') = 'N' THEN
2810       IF nvl(l_start_flag,'N') = 'N' THEN
2811         l_log_step := 'STEP5';
2812         UPDATE HZ_DQM_STAGE_LOG set start_flag='Y', start_time = SYSDATE
2813         WHERE OPERATION = p_command
2814         AND WORKER_NUMBER = l_worker_number AND step = l_log_step;
2815 
2816       END IF;
2820       IF l_party_site_cur IS NOT NULL THEN
2817 
2818       HZ_STAGE_MAP_TRANSFORM_UPD.open_party_site_cursor(
2819         l_worker_number, l_num_workers, l_party_site_cur);
2821         HZ_STAGE_MAP_TRANSFORM_UPD.update_stage_party_sites(l_party_site_cur);
2822         CLOSE l_party_site_cur;
2823       END IF;
2824 
2825       l_log_step := 'STEP5';
2826       UPDATE HZ_DQM_STAGE_LOG set end_flag='Y', end_time = SYSDATE
2827       WHERE OPERATION = p_command
2828       AND WORKER_NUMBER = l_worker_number AND step = l_log_step;
2829 
2830       COMMIT;
2831     END IF;
2832 
2833     log('Updating Contact Point Records');
2834     OPEN l_log_cur(p_command, l_worker_number, 'STEP6');
2835     FETCH l_log_cur INTO l_start_flag, l_end_flag;
2836     IF (l_log_cur%NOTFOUND) THEN
2837        l_start_flag:=NULL;
2838        l_end_flag:=NULL;
2839     END IF;
2840     CLOSE l_log_cur;
2841 
2842     IF nvl(l_end_flag,'N') = 'N' THEN
2843       IF nvl(l_start_flag,'N') = 'N' THEN
2844         l_log_step := 'STEP6';
2845         UPDATE HZ_DQM_STAGE_LOG set start_flag='Y', start_time = SYSDATE
2846         WHERE OPERATION = p_command
2847         AND WORKER_NUMBER = l_worker_number AND step = l_log_step;
2848 
2849       END IF;
2850 
2851       HZ_STAGE_MAP_TRANSFORM_UPD.open_contact_pt_cursor(
2852         l_worker_number, l_num_workers, l_cpt_cur);
2853       IF l_cpt_cur IS NOT NULL THEN
2854         HZ_STAGE_MAP_TRANSFORM_UPD.update_stage_contact_pts(l_cpt_cur);
2855         CLOSE l_cpt_cur;
2856       END IF;
2857       l_log_step := 'STEP6';
2858       UPDATE HZ_DQM_STAGE_LOG set end_flag='Y', end_time = SYSDATE
2859       WHERE OPERATION = p_command
2860       AND WORKER_NUMBER = l_worker_number AND step = l_log_step;
2861 
2862       COMMIT;
2863     END IF;
2864 
2865   END IF;
2866   log('Concurrent Program Execution completed ');
2867   log('End Time : '|| TO_CHAR(SYSDATE, 'MM-DD-YY HH24:MI:SS'));
2868 
2869 EXCEPTION
2870   WHEN FND_API.G_EXC_ERROR THEN
2871     outandlog('Error: Aborting staging ' || FND_MESSAGE.GET);
2872     retcode := 2;
2873     errbuf := errbuf || logerror;
2874     FND_FILE.close;
2875   WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
2876     outandlog('Error: Aborting staging ' || FND_MESSAGE.GET);
2877     retcode := 2;
2878     errbuf := errbuf || logerror;
2879    FND_FILE.close;
2880   WHEN OTHERS THEN
2881     outandlog('Error: Aborting staging '|| SQLERRM);
2882     retcode := 2;
2883     errbuf := errbuf || logerror;
2884     FND_FILE.close;
2885 END;
2886 
2887 FUNCTION new_primary_trans(p_entity VARCHAR2
2888 )    RETURN BOOLEAN IS
2889   cursor is_new_tran (p_entity VARCHAR2) is
2890         select 'Y'
2891         from hz_trans_functions_vl t, hz_trans_attributes_b a
2892         where  a.attribute_id = t.attribute_id
2893         and ENTITY_NAME = p_entity
2894         and  nvl(staged_flag, 'N') = 'N'
2895         and primary_flag = 'Y'
2896         and nvl(active_flag, 'Y') = 'Y'
2897         and rownum = 1;
2898   l_var VARCHAR2(1);
2899 BEGIN
2900      l_var := 'N';
2901      OPEN is_new_tran(p_entity);
2902      FETCH is_new_tran INTO l_var;
2903      CLOSE is_new_tran;
2904      IF (l_var = 'Y') THEN
2905          return true;
2906      ELSE
2907          return false;
2908      END IF;
2909 EXCEPTION WHEN OTHERS THEN
2910      CLOSE is_new_tran;
2911      return true;
2912 END new_primary_trans;
2913 
2914 PROCEDURE update_word_replacements
2915 IS
2916  CURSOR c_delete IS SELECT 1 FROM HZ_WORD_REPLACEMENTS
2917                  WHERE DELETE_FLAG ='Y'
2918 		 AND ROWNUM =1;
2919  CURSOR c_staged IS SELECT 1 FROM HZ_WORD_REPLACEMENTS
2920                  WHERE STAGED_FLAG ='N'
2921 		 AND ROWNUM =1;
2922  l_val NUMBER;
2923 BEGIN
2924  l_val := 0;
2925  OPEN c_delete;
2926  FETCH c_delete INTO l_val;
2927  CLOSE c_delete;
2928  -- Delete the records marked for delete.
2929  IF(l_val > 0)THEN
2930   log('Deleting word replacements that are marked for delete..');
2931   DELETE FROM HZ_WORD_REPLACEMENTS WHERE DELETE_FLAG = 'Y';
2932   log('Done deleting word replacements.');
2933  END IF;
2934  l_val := 0;
2935  OPEN c_staged;
2936  FETCH c_staged INTO l_val;
2937  CLOSE c_staged;
2938  -- Update the staged flag to 'Y'
2939  IF(l_val > 0)THEN
2940   log('Updating the staged_flag of word replacements to Y ..');
2941   UPDATE HZ_WORD_REPLACEMENTS SET STAGED_FLAG = 'Y'
2942   WHERE STAGED_FLAG = 'N';
2943   log('Done updating staged_flag of word replacements.');
2944  END IF;
2945 END update_word_replacements;
2946 
2947 
2948 
2949 PROCEDURE Stage_create_index (
2950         errbuf                  OUT NOCOPY    VARCHAR2,
2951         retcode                 OUT NOCOPY   VARCHAR2,
2952 	p_req1			IN      VARCHAR2,
2953 	p_req2			IN	VARCHAR2,
2954 	p_req3			IN	VARCHAR2,
2955 	p_req4			IN	VARCHAR2,
2956 	p_req5			IN	VARCHAR2,
2957 	p_req6			IN	VARCHAR2,
2958 	p_req7			IN	VARCHAR2,
2959 	p_req8			IN	VARCHAR2,
2960 	p_req9			IN	VARCHAR2,
2961 	p_req10			IN	VARCHAR2,
2962 	p_command		IN	VARCHAR2,
2963 	p_idx_mem		IN	VARCHAR2,
2964 	p_num_prll		IN	VARCHAR2,
2965 	p_index			IN	VARCHAR2
2966 ) IS
2967 
2968   CURSOR c_num_attrs (p_entity VARCHAR2) IS
2969     SELECT count(1) FROM
2973       AND nvl(f.ACTIVE_FLAG,'Y') = 'Y'
2970       (SELECT distinct f.staged_attribute_column
2971       FROM HZ_TRANS_FUNCTIONS_VL f, HZ_TRANS_ATTRIBUTES_VL a
2972       WHERE PRIMARY_FLAG = 'Y'
2974       and f.ATTRIBUTE_ID = a.ATTRIBUTE_ID
2975       AND a.entity_name = p_entity
2976       );
2977 
2978   l_num_sections NUMBER;
2979   l_req1 CONSTANT NUMBER := TO_NUMBER(p_req1);
2980   l_req2 CONSTANT NUMBER := TO_NUMBER(p_req2);
2981   l_req3 CONSTANT NUMBER := TO_NUMBER(p_req3);
2982   l_req4 CONSTANT NUMBER := TO_NUMBER(p_req4);
2983   l_req5 CONSTANT NUMBER := TO_NUMBER(p_req5);
2984   l_req6 CONSTANT NUMBER := TO_NUMBER(p_req6);
2985   l_req7 CONSTANT NUMBER := TO_NUMBER(p_req7);
2986   l_req8 CONSTANT NUMBER := TO_NUMBER(p_req8);
2987   l_req9 CONSTANT NUMBER := TO_NUMBER(p_req9);
2988   l_req10 CONSTANT NUMBER := TO_NUMBER(p_req10);
2989 
2990   uphase VARCHAR2(255);
2991   dphase VARCHAR2(255);
2992   ustatus VARCHAR2(255);
2993   dstatus VARCHAR2(255);
2994   l_index_owner VARCHAR2(255);
2995   message VARCHAR2(32000);
2996 
2997   l_bool BOOLEAN;
2998 
2999   -- VJN created for making code user friendly
3000   CREATE_PARTY_TEXT_INDEX BOOLEAN := FALSE ;
3001   CREATE_PS_TEXT_INDEX BOOLEAN := FALSE ;
3002   CREATE_CONTACT_TEXT_INDEX BOOLEAN := FALSE ;
3003   CREATE_CPT_TEXT_INDEX BOOLEAN := FALSE ;
3004   CREATE_ALL_BTREE_INDEXES BOOLEAN := FALSE ;
3005   CREATE_ALL_TEXT_INDEXES BOOLEAN := FALSE ;
3006   SYNC_PARTY_TEXT_INDEX BOOLEAN := FALSE ;
3007   SYNC_PS_TEXT_INDEX BOOLEAN := FALSE ;
3008   SYNC_CONTACT_TEXT_INDEX BOOLEAN := FALSE ;
3009   SYNC_CPT_TEXT_INDEX BOOLEAN := FALSE ;
3010   SYNC_DENORM_PARTY_TEXT_INDEX BOOLEAN := FALSE ;
3011   index_build_type VARCHAR2(255);
3012 
3013 
3014   l_num_parts NUMBER;
3015   l_num_jobs NUMBER;
3016   l_num_prll NUMBER;
3017 
3018   l_start_flag VARCHAR2(30);
3019   l_end_flag VARCHAR2(30);
3020   l_command VARCHAR2(255);
3021 
3022   l_section_grp VARCHAR2(255);
3023   l_min_id number;
3024   l_max_id number;
3025   tmp number;
3026 
3027 
3028 BEGIN
3029 
3030   retcode := 0;
3031   l_command := p_command;
3032 
3033   log ('--------------------------------------');
3034   outandlog('Starting Concurrent Program ''Create DQM indexes''');
3035   outandlog('Start Time ' || TO_CHAR(SYSDATE, 'MM-DD-YY HH24:MI:SS'));
3036   outandlog('NEWLINE');
3037 
3038   outandlog('Waiting for workers to complete');
3039 
3040   BEGIN
3041     IF l_req1 <> 1 THEN
3042       l_bool := FND_CONCURRENT.wait_for_request(TO_NUMBER(l_req1),
3043          30, 144000, uphase, ustatus, dphase, dstatus, message);
3044       IF dphase <> 'COMPLETE' THEN
3045         FND_MESSAGE.SET_NAME('AR', 'HZ_STAGE_WORKER_ERROR');
3046         FND_MESSAGE.SET_TOKEN('ID' ,l_req1);
3047         FND_MSG_PUB.ADD;
3048         RAISE FND_API.G_EXC_ERROR;
3049       ELSIF dphase = 'COMPLETE' and dstatus <> 'NORMAL' THEN
3050         FND_MESSAGE.SET_NAME('AR', 'HZ_STAGE_WORKER_ERROR');
3051         FND_MESSAGE.SET_TOKEN('ID' ,l_req1);
3052         FND_MSG_PUB.ADD;
3053         RAISE FND_API.G_EXC_ERROR;
3054       END IF;
3055     END IF;
3056     IF l_req2 <> 1 THEN
3057       l_bool := FND_CONCURRENT.wait_for_request(TO_NUMBER(l_req2),
3058          30, 144000, uphase, ustatus, dphase, dstatus, message);
3059       IF dphase <> 'COMPLETE' THEN
3060         FND_MESSAGE.SET_NAME('AR', 'HZ_STAGE_WORKER_ERROR');
3061         FND_MESSAGE.SET_TOKEN('ID' ,l_req2);
3062         FND_MSG_PUB.ADD;
3063         RAISE FND_API.G_EXC_ERROR;
3064       ELSIF dphase = 'COMPLETE' and dstatus <> 'NORMAL' THEN
3065         FND_MESSAGE.SET_NAME('AR', 'HZ_STAGE_WORKER_ERROR');
3066         FND_MESSAGE.SET_TOKEN('ID' ,l_req2);
3067         FND_MSG_PUB.ADD;
3068         RAISE FND_API.G_EXC_ERROR;
3069       END IF;
3070     END IF;
3071     IF l_req3 <> 1 THEN
3072       l_bool := FND_CONCURRENT.wait_for_request(TO_NUMBER(l_req3),
3073          30, 144000, uphase, ustatus, dphase, dstatus, message);
3074       IF dphase <> 'COMPLETE' THEN
3075         FND_MESSAGE.SET_NAME('AR', 'HZ_STAGE_WORKER_ERROR');
3076         FND_MESSAGE.SET_TOKEN('ID' ,l_req3);
3077         FND_MSG_PUB.ADD;
3078         RAISE FND_API.G_EXC_ERROR;
3079       ELSIF dphase = 'COMPLETE' and dstatus <> 'NORMAL' THEN
3080         FND_MESSAGE.SET_NAME('AR', 'HZ_STAGE_WORKER_ERROR');
3081         FND_MESSAGE.SET_TOKEN('ID' ,l_req3);
3082         FND_MSG_PUB.ADD;
3083         RAISE FND_API.G_EXC_ERROR;
3084       END IF;
3085     END IF;
3086     IF l_req4 <> 1 THEN
3087       l_bool := FND_CONCURRENT.wait_for_request(TO_NUMBER(l_req4),
3088          30, 144000, uphase, ustatus, dphase, dstatus, message);
3089       IF dphase <> 'COMPLETE' THEN
3090         FND_MESSAGE.SET_NAME('AR', 'HZ_STAGE_WORKER_ERROR');
3091         FND_MESSAGE.SET_TOKEN('ID' ,l_req3);
3092         FND_MSG_PUB.ADD;
3093         RAISE FND_API.G_EXC_ERROR;
3094       ELSIF dphase = 'COMPLETE' and dstatus <> 'NORMAL' THEN
3095         FND_MESSAGE.SET_NAME('AR', 'HZ_STAGE_WORKER_ERROR');
3096         FND_MESSAGE.SET_TOKEN('ID' ,l_req4);
3097         FND_MSG_PUB.ADD;
3098         RAISE FND_API.G_EXC_ERROR;
3099       END IF;
3100     END IF;
3101     IF l_req5 <> 1 THEN
3102       l_bool := FND_CONCURRENT.wait_for_request(TO_NUMBER(l_req5),
3103          30, 144000, uphase, ustatus, dphase, dstatus, message);
3107         FND_MSG_PUB.ADD;
3104       IF dphase <> 'COMPLETE' THEN
3105         FND_MESSAGE.SET_NAME('AR', 'HZ_STAGE_WORKER_ERROR');
3106         FND_MESSAGE.SET_TOKEN('ID' ,l_req4);
3108         RAISE FND_API.G_EXC_ERROR;
3109       ELSIF dphase = 'COMPLETE' and dstatus <> 'NORMAL' THEN
3110         FND_MESSAGE.SET_NAME('AR', 'HZ_STAGE_WORKER_ERROR');
3111         FND_MESSAGE.SET_TOKEN('ID' ,l_req5);
3112         FND_MSG_PUB.ADD;
3113         RAISE FND_API.G_EXC_ERROR;
3114       END IF;
3115     END IF;
3116     IF l_req6 <> 1 THEN
3117       l_bool := FND_CONCURRENT.wait_for_request(TO_NUMBER(l_req6),
3118          30, 144000, uphase, ustatus, dphase, dstatus, message);
3119       IF dphase <> 'COMPLETE' THEN
3120         FND_MESSAGE.SET_NAME('AR', 'HZ_STAGE_WORKER_ERROR');
3121         FND_MESSAGE.SET_TOKEN('ID' ,l_req5);
3122         FND_MSG_PUB.ADD;
3123         RAISE FND_API.G_EXC_ERROR;
3124       ELSIF dphase = 'COMPLETE' and dstatus <> 'NORMAL' THEN
3125         FND_MESSAGE.SET_NAME('AR', 'HZ_STAGE_WORKER_ERROR');
3126         FND_MESSAGE.SET_TOKEN('ID' ,l_req6);
3127         FND_MSG_PUB.ADD;
3128         RAISE FND_API.G_EXC_ERROR;
3129       END IF;
3130     END IF;
3131     IF l_req7 <> 1 THEN
3132       l_bool := FND_CONCURRENT.wait_for_request(TO_NUMBER(l_req7),
3133          30, 144000, uphase, ustatus, dphase, dstatus, message);
3134       IF dphase <> 'COMPLETE' THEN
3135         FND_MESSAGE.SET_NAME('AR', 'HZ_STAGE_WORKER_ERROR');
3136         FND_MESSAGE.SET_TOKEN('ID' ,l_req6);
3137         FND_MSG_PUB.ADD;
3138         RAISE FND_API.G_EXC_ERROR;
3139       ELSIF dphase = 'COMPLETE' and dstatus <> 'NORMAL' THEN
3140         FND_MESSAGE.SET_NAME('AR', 'HZ_STAGE_WORKER_ERROR');
3141         FND_MESSAGE.SET_TOKEN('ID' ,l_req7);
3142         FND_MSG_PUB.ADD;
3143         RAISE FND_API.G_EXC_ERROR;
3144       END IF;
3145     END IF;
3146     IF l_req8 <> 1 THEN
3147       l_bool := FND_CONCURRENT.wait_for_request(TO_NUMBER(l_req8),
3148          30, 144000, uphase, ustatus, dphase, dstatus, message);
3149       IF dphase <> 'COMPLETE' THEN
3150         FND_MESSAGE.SET_NAME('AR', 'HZ_STAGE_WORKER_ERROR');
3151         FND_MESSAGE.SET_TOKEN('ID' ,l_req8);
3152         FND_MSG_PUB.ADD;
3153         RAISE FND_API.G_EXC_ERROR;
3154       ELSIF dphase = 'COMPLETE' and dstatus <> 'NORMAL' THEN
3155         FND_MESSAGE.SET_NAME('AR', 'HZ_STAGE_WORKER_ERROR');
3156         FND_MESSAGE.SET_TOKEN('ID' ,l_req8);
3157         FND_MSG_PUB.ADD;
3158         RAISE FND_API.G_EXC_ERROR;
3159       END IF;
3160     END IF;
3161     IF l_req9 <> 1 THEN
3162       l_bool := FND_CONCURRENT.wait_for_request(TO_NUMBER(l_req9),
3163          30, 144000, uphase, ustatus, dphase, dstatus, message);
3164       IF dphase <> 'COMPLETE' THEN
3165         FND_MESSAGE.SET_NAME('AR', 'HZ_STAGE_WORKER_ERROR');
3166         FND_MESSAGE.SET_TOKEN('ID' ,l_req9);
3167         FND_MSG_PUB.ADD;
3168         RAISE FND_API.G_EXC_ERROR;
3169       ELSIF dphase = 'COMPLETE' and dstatus <> 'NORMAL' THEN
3170         FND_MESSAGE.SET_NAME('AR', 'HZ_STAGE_WORKER_ERROR');
3171         FND_MESSAGE.SET_TOKEN('ID' ,l_req9);
3172         FND_MSG_PUB.ADD;
3173         RAISE FND_API.G_EXC_ERROR;
3174       END IF;
3175     END IF;
3176     IF l_req10 <> 1 THEN
3177       l_bool := FND_CONCURRENT.wait_for_request(TO_NUMBER(l_req10),
3178          30, 144000, uphase, ustatus, dphase, dstatus, message);
3179       IF dphase <> 'COMPLETE' THEN
3180         FND_MESSAGE.SET_NAME('AR', 'HZ_STAGE_WORKER_ERROR');
3181         FND_MESSAGE.SET_TOKEN('ID' ,l_req10);
3182         FND_MSG_PUB.ADD;
3183         RAISE FND_API.G_EXC_ERROR;
3184       ELSIF dphase = 'COMPLETE' and dstatus <> 'NORMAL' THEN
3185         FND_MESSAGE.SET_NAME('AR', 'HZ_STAGE_WORKER_ERROR');
3186         FND_MESSAGE.SET_TOKEN('ID' ,l_req10);
3187         FND_MSG_PUB.ADD;
3188         RAISE FND_API.G_EXC_ERROR;
3189       END IF;
3190     END IF;
3191   EXCEPTION
3192     WHEN FND_API.G_EXC_ERROR THEN
3193       RAISE FND_API.G_EXC_ERROR;
3194     WHEN OTHERS THEN
3195       FND_MESSAGE.SET_NAME('AR', 'HZ_STAGE_SQL_ERROR');
3196       FND_MESSAGE.SET_TOKEN('PROC' ,'Index Creation Worker Completion Check');
3197       FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM);
3198       FND_MSG_PUB.ADD;
3199       RAISE FND_API.G_EXC_ERROR;
3200   END;
3201 
3202   COMMIT;
3203   log('Workers have completed successfully');
3204 
3205   l_bool := fnd_installation.GET_APP_INFO('AR',ustatus,dstatus,l_index_owner);
3206 
3207 
3208   -- DECODE WHAT p_index MEANS IN MEANINGFUL TERMS
3209   IF p_index = 'ALL'
3210   THEN
3211         CREATE_ALL_TEXT_INDEXES := TRUE ;
3212         CREATE_PARTY_TEXT_INDEX := TRUE ;
3213         CREATE_PS_TEXT_INDEX := TRUE ;
3214         CREATE_CONTACT_TEXT_INDEX := TRUE ;
3215         CREATE_CPT_TEXT_INDEX := TRUE ;
3216         index_build_type := 'CREATE' ;
3217 
3218   ELSIF p_index = 'ALL_BTREE'
3219   THEN
3220         CREATE_ALL_BTREE_INDEXES := TRUE ;
3221         index_build_type := 'CREATE' ;
3222 
3223   ELSIF p_index = 'HZ_PARTIES'
3224   THEN
3225         CREATE_PARTY_TEXT_INDEX := TRUE ;
3226         index_build_type := 'CREATE' ;
3227 
3228   ELSIF p_index = 'HZ_PARTY_SITES'
3229   THEN
3230         CREATE_PS_TEXT_INDEX := TRUE ;
3231         index_build_type := 'CREATE' ;
3232 
3233   ELSIF p_index = 'HZ_ORG_CONTACTS'
3234   THEN
3238 
3235         CREATE_CONTACT_TEXT_INDEX := TRUE ;
3236         index_build_type := 'CREATE' ;
3237 
3239   ELSIF p_index = 'HZ_CONTACT_POINTS'
3240   THEN
3241         CREATE_CPT_TEXT_INDEX := TRUE ;
3242         index_build_type := 'CREATE' ;
3243 
3244   ELSIF p_index = 'HZ_PARTIES_BTREE'
3245   THEN
3246         SYNC_PARTY_TEXT_INDEX := TRUE ;
3247         index_build_type := 'SYNC' ;
3248 
3249   ELSIF p_index = 'HZ_PARTY_SITES_BTREE'
3250   THEN
3251         SYNC_PS_TEXT_INDEX := TRUE ;
3252         index_build_type := 'SYNC' ;
3253 
3254   ELSIF p_index = 'HZ_ORG_CONTACTS_BTREE'
3255   THEN
3256         SYNC_CONTACT_TEXT_INDEX := TRUE ;
3257         index_build_type := 'SYNC' ;
3258 
3259   ELSIF p_index = 'HZ_CONTACT_POINTS_BTREE'
3260   THEN
3261         SYNC_CPT_TEXT_INDEX := TRUE ;
3262         index_build_type := 'SYNC' ;
3263 
3264   ELSIF p_index = 'STAGE_NEW_DENORM'
3265   THEN
3266         SYNC_DENORM_PARTY_TEXT_INDEX := TRUE ;
3267         index_build_type := 'SYNC' ;
3268 
3269   END IF  ;
3270 
3271   -- NOTE ::
3272   --      TEXT INDEXES -- THESE ARE CREATED OR SYNCED, DEPENDING ON THE FLOW
3273   --      B-TREE INDEXES -- 1. THERE IS NO CONCEPT OF SYNC FOR THESE. IT IS ALWAYS A CREATE FOR THEM WITH THE
3274   --                           UNDERSTANDING THAT CREATION HAPPENS AFTER MAKING SURE THEY DO NOT EXIST ALREADY.
3275   --                        2. THESE ARE ALWAYS CREATED, REGARDLESS OF THE BUILD TYPE.
3276 
3277 
3278 
3279   -- SYNC FLOW
3280   IF index_build_type = 'SYNC'
3281   THEN
3282             log(' Index build type is SYNC for the INDEX Worker');
3283             -- SYNC DENORM PARTY TEXT INDEX
3284             IF SYNC_DENORM_PARTY_TEXT_INDEX THEN
3285                 outandlog('Submitting index request for new denorm attributes.');
3286                 create_btree_indexes ('PARTY');
3287                 BEGIN
3288                        select min(party_id), max(party_id)
3289                        into l_min_id, l_max_id
3290                        from hz_staged_parties;
3291                        WHILE (l_min_id <= l_max_id )
3292                        LOOP
3293                            select party_id into tmp
3294                            from (
3295                                  select party_id, rownum rnum
3296                                  from (  SELECT party_id
3297                                              from hz_staged_parties
3298                                              where party_id>l_min_id
3299                                              and rownum<1001 ) a )
3300                            where rnum = 1000;
3301                            update hz_staged_parties set d_ps = 'SYNC', d_ct = 'SYNC', d_cpt = 'SYNC', concat_col = concat_col
3302                                where party_id between l_min_id and tmp;
3303                            AD_CTX_DDL.sync_index(l_index_owner|| '.hz_stage_parties_t1');
3304                            FND_Concurrent.af_commit;
3305                            l_min_id:=tmp+1;
3306                       END LOOP;
3307                  EXCEPTION
3308                       WHEN NO_DATA_FOUND THEN
3309                           update hz_staged_parties set concat_col = concat_col,
3310                                d_ps = 'SYNC', d_ct = 'SYNC', d_cpt = 'SYNC'
3311                                where party_id between l_min_id and l_max_id ;
3312                           AD_CTX_DDL.sync_index(l_index_owner ||'.hz_stage_parties_t1');
3313                           FND_Concurrent.af_commit;
3314                       WHEN OTHERS THEN
3315                           FND_FILE.put_line(FND_FILE.log, 'Error during DENORM PARTY Index Synchronization SQLEERM=' ||SQLERRM);
3316                           retcode := 2;
3317                          errbuf := SQLERRM;
3318                  END;
3319 
3320                outandlog('Done index request for new denorm attributes.');
3321         -- SYNC DENORM PARTY INDEX
3322         ELSIF SYNC_PARTY_TEXT_INDEX  THEN
3323           create_btree_indexes ('PARTY');
3324           IF (new_primary_trans('PARTY')) THEN
3325              BEGIN
3326                    select min(party_id), max(party_id)
3327                    into l_min_id, l_max_id
3328                    from hz_staged_parties;
3329                    WHILE (l_min_id <= l_max_id )
3330                    LOOP
3331                        select party_id into tmp
3332                        from (
3333                              select party_id, rownum rnum
3334                              from (  SELECT party_id
3335                                          from hz_staged_parties
3336                                          where party_id>l_min_id
3337                                          and rownum<1001 ) a )
3338                        where rnum = 1000;
3339                        update hz_staged_parties set concat_col = concat_col
3340                            where party_id between l_min_id and tmp;
3341                        FND_FILE.put_line(FND_FILE.log, 'Attempting to SYNC the hz_stage_parties_t1 index');
3342                        AD_CTX_DDL.sync_index(l_index_owner|| '.hz_stage_parties_t1');
3343                        FND_FILE.put_line(FND_FILE.log, 'SYNC of the hz_stage_parties_t1 index successful');
3344                        FND_Concurrent.af_commit;
3345                        l_min_id:=tmp+1;
3346                   END LOOP;
3347              EXCEPTION
3348                   WHEN NO_DATA_FOUND THEN
3352                       AD_CTX_DDL.sync_index(l_index_owner ||'.hz_stage_parties_t1');
3349                       update hz_staged_parties set concat_col = concat_col
3350                            where party_id between l_min_id and l_max_id ;
3351                       FND_FILE.put_line(FND_FILE.log, 'Attempting to SYNC the hz_stage_parties_t1 index');
3353                       FND_FILE.put_line(FND_FILE.log, 'SYNC of the hz_stage_parties_t1 index successful');
3354                       FND_Concurrent.af_commit;
3355                   WHEN OTHERS THEN
3356                       FND_FILE.put_line(FND_FILE.log, 'Error during PARTY Index Synchronization SQLEERM=' ||SQLERRM);
3357                       retcode := 2;
3358                      errbuf := SQLERRM;
3359              END;
3360 
3361           END IF;
3362           UPDATE HZ_TRANS_FUNCTIONS_B
3363                 SET STAGED_FLAG='Y'
3364                 WHERE nvl(ACTIVE_FLAG,'Y') = 'Y' and nvl(staged_flag,'N')='N'
3365                 and attribute_id in (
3366                       select attribute_id from hz_trans_attributes_vl where entity_name='PARTY');
3367 		log('Setting STAGED_FLAG=Y in HZ_TRANS_FUNCTIONS_B for PARTY entity transformations after staging');
3368           -- SYNC DENORM PARTY SITE TEXT INDEX
3369           ELSIF SYNC_PS_TEXT_INDEX THEN
3370             create_btree_indexes ('PARTY_SITES');
3371             IF (new_primary_trans('PARTY_SITES')) THEN
3372                BEGIN
3373                      select min(party_site_id), max(party_site_id)
3374                      into l_min_id, l_max_id
3375                      from hz_staged_party_sites;
3376                      WHILE (l_min_id <= l_max_id )
3377                      LOOP
3378                          select party_site_id into tmp
3379                          from (
3380                                select party_site_id, rownum rnum
3381                                from (  SELECT party_site_id
3382                                            from hz_staged_party_sites
3383                                            where party_site_id > l_min_id
3384                                            and rownum<1001 ) a )
3385                          where rnum = 1000;
3386                          update hz_staged_party_sites set concat_col = concat_col
3387                              where party_id between l_min_id and tmp;
3388                          FND_FILE.put_line(FND_FILE.log, 'Attempting to SYNC the hz_stage_party_sites_t1 index');
3389                          AD_CTX_DDL.sync_index(l_index_owner ||'.hz_stage_party_sites_t1');
3390                          FND_FILE.put_line(FND_FILE.log, 'SYNC of the hz_stage_party_sites_t1 index successful');
3391                          FND_Concurrent.af_commit;
3392                          l_min_id:=tmp+1;
3393                     END LOOP;
3394                EXCEPTION
3395                     WHEN NO_DATA_FOUND THEN
3396                         update hz_staged_party_sites set concat_col = concat_col
3397                              where party_site_id between l_min_id and l_max_id ;
3398                          FND_FILE.put_line(FND_FILE.log, 'Attempting to SYNC the hz_stage_party_sites_t1 index');
3399                          AD_CTX_DDL.sync_index(l_index_owner ||'.hz_stage_party_sites_t1');
3400                          FND_FILE.put_line(FND_FILE.log, 'SYNC of the hz_stage_party_sites_t1 index successful');
3401                          FND_Concurrent.af_commit;
3402                     WHEN OTHERS THEN
3403                         FND_FILE.put_line(FND_FILE.log, 'Error during PARTY SITES Index Synchronization SQLEERM=' ||SQLERRM);
3404                         retcode := 2;
3405                        errbuf := SQLERRM;
3406                END;
3407             END IF;
3408             UPDATE HZ_TRANS_FUNCTIONS_B
3409                   SET STAGED_FLAG='Y'
3410                   WHERE nvl(ACTIVE_FLAG,'Y') = 'Y' and nvl(staged_flag,'N')='N'
3411                   and attribute_id in (
3412                         select attribute_id from hz_trans_attributes_vl where entity_name='PARTY_SITES');
3413 			log('Setting STAGED_FLAG=Y in HZ_TRANS_FUNCTIONS_B for PARTY_SITES ENTITY after staging');
3414             create_denorm_attribute_pref ('PARTY_SITES');
3415 
3416             -- SYNC DENORM CONTACT TEXT INDEX
3417             ELSIF SYNC_CONTACT_TEXT_INDEX THEN
3418               create_btree_indexes ('CONTACTS');
3419               IF (new_primary_trans('CONTACTS')) THEN
3420                  BEGIN
3421                        select min(org_contact_id), max(org_contact_id)
3422                        into l_min_id, l_max_id
3423                        from hz_staged_contacts;
3424                        WHILE (l_min_id <= l_max_id )
3425                        LOOP
3426                            select org_contact_id into tmp
3427                            from (
3428                                  select org_contact_id, rownum rnum
3429                                  from (  SELECT org_contact_id
3430                                              from hz_staged_contacts
3431                                              where org_contact_id > l_min_id
3432                                              and rownum<1001 ) a )
3433                            where rnum = 1000;
3434                            update hz_staged_contacts set concat_col = concat_col
3435                                where org_contact_id between l_min_id and tmp;
3436                            FND_FILE.put_line(FND_FILE.log, 'Attempting to SYNC the hz_stage_contact_t1 index');
3437                           AD_CTX_DDL.sync_index(l_index_owner||'.hz_stage_contact_t1');
3441                       END LOOP;
3438                           FND_FILE.put_line(FND_FILE.log, 'SYNC of the hz_stage_contact_t1 index successful');
3439                            FND_Concurrent.af_commit;
3440                            l_min_id:=tmp+1;
3442                  EXCEPTION
3443                       WHEN NO_DATA_FOUND THEN
3444                           update hz_staged_contacts set concat_col = concat_col
3445                                where org_contact_id between l_min_id and l_max_id ;
3446                           FND_FILE.put_line(FND_FILE.log, 'Attempting to SYNC the hz_stage_contact_t1 index');
3447                           AD_CTX_DDL.sync_index(l_index_owner||'.hz_stage_contact_t1');
3448                           FND_FILE.put_line(FND_FILE.log, 'SYNC of the hz_stage_contact_t1 index successful');
3449                           FND_Concurrent.af_commit;
3450                       WHEN OTHERS THEN
3451                           FND_FILE.put_line(FND_FILE.log, 'Error during CONTACTS Index Synchronization SQLEERM=' ||SQLERRM);
3452                           retcode := 2;
3453                          errbuf := SQLERRM;
3454                  END;
3455 
3456               END IF;
3457               UPDATE HZ_TRANS_FUNCTIONS_B
3458                     SET STAGED_FLAG='Y'
3459                     WHERE nvl(ACTIVE_FLAG,'Y') = 'Y' and nvl(staged_flag,'N')='N'
3460                     and attribute_id in (
3461                           select attribute_id from hz_trans_attributes_vl where entity_name='CONTACTS');
3462 			log('Setting STAGED_FLAG=Y in HZ_TRANS_FUNCTIONS_B for CONTACTS ENTITY after staging');
3463               create_denorm_attribute_pref ('CONTACTS');
3464               -- SYNC DENORM CONTACT POINT TEXT INDEX
3465               ELSIF SYNC_CPT_TEXT_INDEX THEN
3466                 create_btree_indexes ('CONTACT_POINTS');
3467                 IF (new_primary_trans('CONTACT_POINTS')) THEN
3468                    BEGIN
3469                          select min(contact_point_id), max(contact_point_id)
3470                          into l_min_id, l_max_id
3471                          from hz_staged_contact_points;
3472                          WHILE (l_min_id <= l_max_id )
3473                          LOOP
3474                              select contact_point_id into tmp
3475                              from (
3476                                    select contact_point_id, rownum rnum
3477                                    from (  SELECT contact_point_id
3478                                                from hz_staged_contact_points
3479                                                where contact_point_id > l_min_id
3480                                                and rownum<1001 ) a )
3481                              where rnum = 1000;
3482                              update hz_staged_contact_points set concat_col = concat_col
3483                                  where contact_point_id between l_min_id and tmp;
3484                              FND_FILE.put_line(FND_FILE.log, 'Attempting to SYNC the hz_stage_cpt_t1 index');
3485                              AD_CTX_DDL.sync_index(l_index_owner||'.hz_stage_cpt_t1');
3486                              FND_FILE.put_line(FND_FILE.log, 'SYNC of the hz_stage_cpt_t1 index successful');
3487                              FND_Concurrent.af_commit;
3488                              l_min_id:=tmp+1;
3489                         END LOOP;
3490                    EXCEPTION
3491                         WHEN NO_DATA_FOUND THEN
3492                             update hz_staged_contact_points set concat_col = concat_col
3493                                  where contact_point_id between l_min_id and l_max_id ;
3494                              FND_FILE.put_line(FND_FILE.log, 'Attempting to SYNC the hz_stage_cpt_t1 index');
3495                              AD_CTX_DDL.sync_index(l_index_owner||'.hz_stage_cpt_t1');
3496                              FND_FILE.put_line(FND_FILE.log, 'SYNC of the hz_stage_cpt_t1 index successful');
3497                             FND_Concurrent.af_commit;
3498                         WHEN OTHERS THEN
3499                             FND_FILE.put_line(FND_FILE.log, 'Error during CONTACT POINTS Index Synchronization SQLEERM=' ||SQLERRM);
3500                             retcode := 2;
3501                            errbuf := SQLERRM;
3502                    END;
3503 
3504 
3505                 END IF;
3506                 UPDATE HZ_TRANS_FUNCTIONS_B
3507                       SET STAGED_FLAG='Y'
3508                       WHERE nvl(ACTIVE_FLAG,'Y') = 'Y' and nvl(staged_flag,'N')='N'
3509                       and attribute_id in (
3510                             select attribute_id from hz_trans_attributes_vl where entity_name='CONTACT_POINTS');
3511                 log('Setting STAGED_FLAG=Y in HZ_TRANS_FUNCTIONS_B for CONTACT_POINTS ENTITY after staging');
3512                 create_denorm_attribute_pref ('CONTACT_POINTS');
3513             END IF;
3514     -- CREATE FLOW
3515     ELSIF index_build_type = 'CREATE'
3516     THEN
3517 
3518                    log(' Index build type is CREATE for the INDEX Worker');
3519                    IF CREATE_ALL_BTREE_INDEXES THEN
3520                           create_btree_indexes ('PARTY');
3521                           create_btree_indexes ('PARTY_SITES');
3522                           create_btree_indexes ('CONTACTS');
3523                           create_btree_indexes ('CONTACT_POINTS');
3524                           UPDATE HZ_TRANS_FUNCTIONS_B
3525                                 SET STAGED_FLAG='Y'
3526                                WHERE nvl(ACTIVE_FLAG,'Y') = 'Y'
3527 							   AND nvl(staged_flag,'N')='N' ;
3531                           create_denorm_attribute_pref ('CONTACT_POINTS');
3528 						log('Setting STAGED_FLAG=Y in HZ_TRANS_FUNCTIONS_B after create_btree_indexes');
3529                           create_denorm_attribute_pref ('PARTY_SITES');
3530                           create_denorm_attribute_pref ('CONTACTS');
3532                    END IF ;
3533 
3534 
3535                  IF CREATE_PARTY_TEXT_INDEX THEN
3536                     create_btree_indexes ('PARTY');
3537                     BEGIN
3538                       SELECT start_flag, end_flag INTO l_start_flag, l_end_flag
3539                       FROM HZ_DQM_STAGE_LOG
3540                       WHERE OPERATION = 'CREATE_INDEXES'
3541                       AND step = 'HZ_PARTIES';
3542                     EXCEPTION
3543                       WHEN no_data_found THEN
3544                         l_start_flag:=NULL;
3545                         l_end_flag:=NULL;
3546                     END;
3547 
3548                     IF nvl(l_end_flag,'N') = 'N' THEN
3549                       BEGIN
3550                         execute immediate 'begin ctx_output.start_log(''party_index''); end;';
3551                       EXCEPTION
3552                         WHEN OTHERS THEN
3553                           NULL;
3554                       END;
3555 
3556                       IF nvl(l_start_flag,'N') = 'Y' THEN
3557                         BEGIN
3558                           log('Attempting restart build of index '||l_index_owner || '.hz_stage_parties_t1');
3559                           EXECUTE IMMEDIATE 'ALTER INDEX ' || l_index_owner ||
3560                               '.hz_stage_parties_t1 rebuild parameters(''resume memory ' || p_idx_mem || ''')';
3561                           log('Index Successfully built');
3562 
3563                           UPDATE HZ_DQM_STAGE_LOG set END_FLAG = 'Y', END_TIME=SYSDATE
3564                           WHERE operation = 'CREATE_INDEXES' AND step ='HZ_PARTIES';
3565                           COMMIT;
3566 
3567                         EXCEPTION
3568                           WHEN OTHERS THEN
3569                             log('Restart Unsuccesful .. Recreating');
3570                             BEGIN
3571                               EXECUTE IMMEDIATE 'DROP INDEX ' || l_index_owner || '.hz_stage_parties_t1 FORCE';
3572                               log('Dropped hz_stage_parties_t1');
3573                             EXCEPTION
3574                               WHEN OTHERS THEN
3575                                 NULL;
3576                             END;
3577                             l_start_flag := 'N';
3578                             l_command := 'STAGE_ALL_DATA';
3579 
3580                         END;
3581                       END IF;
3582 
3583                       IF nvl(l_start_flag,'N') = 'N' THEN
3584                         UPDATE HZ_DQM_STAGE_LOG set START_FLAG = 'Y', START_TIME=SYSDATE
3585                         WHERE operation = 'CREATE_INDEXES' AND step ='HZ_PARTIES';
3586                         COMMIT;
3587 
3588                         l_section_grp := g_schema_name || '.HZ_DQM_PARTY_GRP';
3589 
3590                         IF l_command <> 'STAGE_NEW_TRANSFORMATIONS' THEN
3591                           log(' Creating hz_stage_parties_t1 on hz_staged_parties.');
3592                           log(' Index Memory ' || p_idx_mem);
3593                           log(' Starting at ' || to_char(SYSDATE, 'HH24:MI:SS') );
3594 
3595                           EXECUTE IMMEDIATE 'CREATE INDEX ' || l_index_owner || '.hz_stage_parties_t1 ON ' ||
3596                               'hz_staged_parties(concat_col) indextype is ctxsys.context ' ||
3597                               'parameters (''storage  '||g_schema_name || '.HZ_DQM_STORAGE datastore '||g_schema_name || '.hz_party_ds ' ||
3598                               'SECTION GROUP '||l_section_grp||' STOPLIST CTXSYS.EMPTY_STOPLIST LEXER '||g_schema_name || '.dqm_lexer memory ' || p_idx_mem || ''')';
3599                         ELSE
3600                           log(' Attempting to drop and create hz_stage_parties_t1 on hz_staged_parties with new transformations.');
3601                           log(' Index Memory ' || p_idx_mem);
3602                           log(' Starting at ' || to_char(SYSDATE, 'HH24:MI:SS') );
3603 
3604                           BEGIN
3605                               -- DROP AND CREATE
3606                               EXECUTE IMMEDIATE 'DROP INDEX ' || l_index_owner || '.hz_stage_parties_t1 FORCE';
3607                               log('Dropped hz_stage_parties_t1');
3608                               EXCEPTION
3609                               WHEN OTHERS THEN
3610                               NULL;
3611 
3612                           END ;
3613                           EXECUTE IMMEDIATE 'CREATE INDEX ' || l_index_owner || '.hz_stage_parties_t1 ON ' ||
3614                               'hz_staged_parties(concat_col) indextype is ctxsys.context ' ||
3615                               'parameters (''storage  '||g_schema_name || '.HZ_DQM_STORAGE datastore '||g_schema_name || '.hz_party_ds ' ||
3616                               'SECTION GROUP '||l_section_grp||' STOPLIST CTXSYS.EMPTY_STOPLIST LEXER '||g_schema_name || '.dqm_lexer memory ' || p_idx_mem || ''')';
3617                           log('Done creating hz_stage_parties_t1');
3618                         END IF;
3619 
3620                         UPDATE HZ_DQM_STAGE_LOG set END_FLAG = 'Y', END_TIME=SYSDATE
3621                         WHERE operation = 'CREATE_INDEXES' AND step ='HZ_PARTIES';
3622                         COMMIT;
3623                       END IF;
3624                       log(' Completed at ' || to_char(SYSDATE, 'HH24:MI:SS'));
3625 
3626                     END IF;
3627                   END IF;
3628 
3632                       SELECT start_flag, end_flag INTO l_start_flag, l_end_flag
3629                   IF CREATE_PS_TEXT_INDEX THEN
3630                     create_btree_indexes ('PARTY_SITES');
3631                     BEGIN
3633                       FROM HZ_DQM_STAGE_LOG
3634                       WHERE OPERATION = 'CREATE_INDEXES'
3635                       AND step = 'HZ_PARTY_SITES';
3636                     EXCEPTION
3637                       WHEN no_data_found THEN
3638                         l_start_flag:=NULL;
3639                         l_end_flag:=NULL;
3640                     END;
3641 
3642                     IF nvl(l_end_flag,'N') = 'N' THEN
3643                       BEGIN
3644                         execute immediate 'begin ctx_output.start_log(''party_site_index''); end;';
3645                       EXCEPTION
3646                         WHEN OTHERS THEN
3647                           NULL;
3648                       END;
3649 
3650                       IF nvl(l_start_flag,'N') = 'Y' THEN
3651                         BEGIN
3652                           log('Attempting restart build of index '||l_index_owner || '.hz_stage_party_sites_t1');
3653                           EXECUTE IMMEDIATE 'ALTER INDEX ' || l_index_owner ||
3654                               '.hz_stage_party_sites_t1 rebuild parameters(''resume memory ' || p_idx_mem || ''')';
3655                           log('Index Successfully built');
3656 
3657                           UPDATE HZ_DQM_STAGE_LOG set END_FLAG = 'Y', END_TIME=SYSDATE
3658                           WHERE operation = 'CREATE_INDEXES' AND step ='HZ_PARTY_SITES';
3659                           COMMIT;
3660 
3661                         EXCEPTION
3662                           WHEN OTHERS THEN
3663                             log('Restart Unsuccesful .. Recreating');
3664                             BEGIN
3665                               EXECUTE IMMEDIATE 'DROP INDEX ' || l_index_owner || '.hz_stage_party_sites_t1 FORCE';
3666                               log('Dropped hz_stage_party_sites_t1');
3667                             EXCEPTION
3668                               WHEN OTHERS THEN
3669                                 NULL;
3670                             END;
3671                             l_start_flag := 'N';
3672                             l_command := 'STAGE_ALL_DATA';
3673 
3674                         END;
3675                       END IF;
3676 
3677                       IF nvl(l_start_flag,'N') = 'N' THEN
3678                         UPDATE HZ_DQM_STAGE_LOG set START_FLAG = 'Y', START_TIME=SYSDATE
3679                         WHERE operation = 'CREATE_INDEXES' AND step ='HZ_PARTY_SITES';
3680                         COMMIT;
3681 
3682                         l_section_grp := g_schema_name || '.HZ_DQM_PS_GRP';
3683 
3684                         IF l_command <> 'STAGE_NEW_TRANSFORMATIONS' THEN
3685                           log(' Creating hz_stage_party_sites_t1 on hz_staged_party_sites. ');
3686                           log(' Index Memory ' || p_idx_mem);
3687                           log(' Starting at ' || to_char(SYSDATE, 'HH24:MI:SS'));
3688 
3689                           EXECUTE IMMEDIATE 'CREATE INDEX ' || l_index_owner || '.hz_stage_party_sites_t1 ON ' ||
3690                               'hz_staged_party_sites(concat_col) indextype is ctxsys.context ' ||
3691                               'parameters (''storage '||g_schema_name || '.HZ_DQM_STORAGE datastore '||g_schema_name || '.hz_party_site_ds ' ||
3692                               'SECTION GROUP '||l_section_grp||' STOPLIST CTXSYS.EMPTY_STOPLIST LEXER '||g_schema_name || '.dqm_lexer memory ' || p_idx_mem || ''')';
3693                         ELSE
3694                           log(' Attempting to drop and create hz_stage_party_sites_t1 on hz_staged_party_sites with new transformations.');
3695                           log(' Index Memory ' || p_idx_mem);
3696                           log(' Starting at ' || to_char(SYSDATE, 'HH24:MI:SS') );
3697 
3698                           -- DROP AND CREATE
3699                           BEGIN
3700                               EXECUTE IMMEDIATE 'DROP INDEX ' || l_index_owner || '.hz_stage_party_sites_t1 FORCE';
3701                               log('Dropped hz_stage_party_sites_t1');
3702                               EXCEPTION
3703                               WHEN OTHERS THEN
3704                               NULL;
3705                           END ;
3706                           EXECUTE IMMEDIATE 'CREATE INDEX ' || l_index_owner || '.hz_stage_party_sites_t1 ON ' ||
3707                               'hz_staged_party_sites(concat_col) indextype is ctxsys.context ' ||
3708                               'parameters (''storage '||g_schema_name || '.HZ_DQM_STORAGE datastore '||g_schema_name || '.hz_party_site_ds ' ||
3709                               'SECTION GROUP '||l_section_grp||' STOPLIST CTXSYS.EMPTY_STOPLIST LEXER '||g_schema_name || '.dqm_lexer memory ' || p_idx_mem || ''')';
3710                           log('Done creating hz_stage_party_sites_t1');
3711                         END IF;
3712 
3713                         UPDATE HZ_DQM_STAGE_LOG set END_FLAG = 'Y', END_TIME=SYSDATE
3714                         WHERE operation = 'CREATE_INDEXES' AND step ='HZ_PARTY_SITES';
3715                         COMMIT;
3716                       END IF;
3717                       log(' Completed at ' || to_char(SYSDATE, 'HH24:MI:SS'));
3718                     END IF;
3719                   END IF;
3720                   log('');
3721 
3722                   IF CREATE_CONTACT_TEXT_INDEX  THEN
3723                     create_btree_indexes ('CONTACTS');
3727                       WHERE OPERATION = 'CREATE_INDEXES'
3724                     BEGIN
3725                       SELECT start_flag, end_flag INTO l_start_flag, l_end_flag
3726                       FROM HZ_DQM_STAGE_LOG
3728                       AND step = 'HZ_ORG_CONTACTS';
3729                     EXCEPTION
3730                       WHEN no_data_found THEN
3731                         l_start_flag:=NULL;
3732                         l_end_flag:=NULL;
3733                     END;
3734 
3735                     IF nvl(l_end_flag,'N') = 'N' THEN
3736                       BEGIN
3737                         execute immediate 'begin ctx_output.start_log(''contact_index''); end;';
3738                       EXCEPTION
3739                         WHEN OTHERS THEN
3740                           NULL;
3741                       END;
3742 
3743                       IF nvl(l_start_flag,'N') = 'Y' THEN
3744                         BEGIN
3745                           log('Attempting restart build of index '||l_index_owner || '.hz_stage_contact_t1');
3746                           EXECUTE IMMEDIATE 'ALTER INDEX ' || l_index_owner ||
3747                               '.hz_stage_contact_t1 rebuild parameters(''resume memory ' || p_idx_mem || ''')';
3748                           log('Index Successfully built');
3749 
3750                           UPDATE HZ_DQM_STAGE_LOG set END_FLAG = 'Y', END_TIME=SYSDATE
3751                           WHERE operation = 'CREATE_INDEXES' AND step ='HZ_ORG_CONTACTS';
3752                           COMMIT;
3753 
3754                         EXCEPTION
3755                           WHEN OTHERS THEN
3756                             log('Restart uncessful. Recreating Index');
3757                             BEGIN
3758                               EXECUTE IMMEDIATE 'DROP INDEX ' || l_index_owner || '.hz_stage_contact_t1 FORCE';
3759                               log('Dropped hz_stage_contact_t1');
3760                             EXCEPTION
3761                               WHEN OTHERS THEN
3762                                 NULL;
3763                             END;
3764                             l_start_flag := 'N';
3765                             l_command := 'STAGE_ALL_DATA';
3766 
3767                         END;
3768                       END IF;
3769 
3770                       IF nvl(l_start_flag,'N') = 'N' THEN
3771                         UPDATE HZ_DQM_STAGE_LOG set START_FLAG = 'Y', START_TIME=SYSDATE
3772                         WHERE operation = 'CREATE_INDEXES' AND step ='HZ_ORG_CONTACTS';
3773                         COMMIT;
3774 
3775                         l_section_grp := g_schema_name || '.HZ_DQM_CONTACT_GRP';
3776 
3777                         IF l_command <> 'STAGE_NEW_TRANSFORMATIONS' THEN
3778                           log(' Creating hz_stage_contact_t1 on hz_staged_contacts. ');
3779                           log(' Index Memory ' || p_idx_mem);
3780                           log(' Starting at ' || to_char(SYSDATE, 'HH24:MI:SS'));
3781 
3782                           EXECUTE IMMEDIATE 'CREATE INDEX ' || l_index_owner || '.hz_stage_contact_t1 ON ' ||
3783                               'hz_staged_contacts(concat_col) indextype is ctxsys.context ' ||
3784                               'parameters (''storage '||g_schema_name || '.HZ_DQM_STORAGE datastore '||g_schema_name || '.hz_contact_ds ' ||
3785                               'SECTION GROUP '||l_section_grp||' STOPLIST CTXSYS.EMPTY_STOPLIST LEXER '||g_schema_name || '.dqm_lexer memory ' || p_idx_mem || ''')';
3786                         ELSE
3787                           log(' Attempting to drop and create hz_stage_contact_t1 on hz_staged_contacts with new transformations.');
3788                           log(' Index Memory ' || p_idx_mem);
3789                           log(' Starting at ' || to_char(SYSDATE, 'HH24:MI:SS') );
3790 
3791                            BEGIN
3792                               -- DROP AND CREATE
3793                               EXECUTE IMMEDIATE 'DROP INDEX ' || l_index_owner || '.hz_stage_contact_t1 FORCE';
3794                               log('Dropped hz_stage_contact_t1');
3795                               EXCEPTION
3796                               WHEN OTHERS THEN
3797                               NULL;
3798 
3799                           END ;
3800 
3801                           EXECUTE IMMEDIATE 'CREATE INDEX ' || l_index_owner || '.hz_stage_contact_t1 ON ' ||
3802                               'hz_staged_contacts(concat_col) indextype is ctxsys.context ' ||
3803                               'parameters (''storage '||g_schema_name || '.HZ_DQM_STORAGE datastore '||g_schema_name || '.hz_contact_ds ' ||
3804                               'SECTION GROUP '||l_section_grp||' STOPLIST CTXSYS.EMPTY_STOPLIST LEXER '||g_schema_name || '.dqm_lexer memory ' || p_idx_mem || ''')';
3805                           log('Created hz_stage_contact_t1');
3806 
3807                         END IF;
3808 
3809                         UPDATE HZ_DQM_STAGE_LOG set END_FLAG = 'Y', END_TIME=SYSDATE
3810                         WHERE operation = 'CREATE_INDEXES' AND step ='HZ_ORG_CONTACTS';
3811                         COMMIT;
3812                       END IF;
3813                       log(' Completed at ' || to_char(SYSDATE, 'HH24:MI:SS'));
3814                     END IF;
3815                   END IF;
3816                   log('');
3817 
3818                   IF CREATE_CPT_TEXT_INDEX THEN
3819                     create_btree_indexes ('CONTACT_POINTS');
3820                     BEGIN
3821                       SELECT start_flag, end_flag INTO l_start_flag, l_end_flag
3825                     EXCEPTION
3822                       FROM HZ_DQM_STAGE_LOG
3823                       WHERE OPERATION = 'CREATE_INDEXES'
3824                       AND step = 'HZ_CONTACT_POINTS';
3826                       WHEN no_data_found THEN
3827                         l_start_flag:=NULL;
3828                         l_end_flag:=NULL;
3829                     END;
3830 
3831                     IF nvl(l_end_flag,'N') = 'N' THEN
3832                       BEGIN
3833                         execute immediate 'begin ctx_output.start_log(''contact_point_index''); end;';
3834                       EXCEPTION
3835                         WHEN OTHERS THEN
3836                           NULL;
3837                       END;
3838 
3839                       IF nvl(l_start_flag,'N') = 'Y' THEN
3840                         BEGIN
3841                           log('Attempting restart build of index '||l_index_owner || '.hz_stage_cpt_t1');
3842                           EXECUTE IMMEDIATE 'ALTER INDEX ' || l_index_owner ||
3843                               '.hz_stage_cpt_t1 rebuild parameters(''resume memory ' || p_idx_mem || ''')';
3844 
3845                           log('Index Successfully built');
3846                           UPDATE HZ_DQM_STAGE_LOG set END_FLAG = 'Y', END_TIME=SYSDATE
3847                           WHERE operation = 'CREATE_INDEXES' AND step ='HZ_CONTACT_POINTS';
3848                           COMMIT;
3849 
3850                         EXCEPTION
3851                           WHEN OTHERS THEN
3852                             log('Restart unsuccessful. Rebuilding index.');
3853                             BEGIN
3854                               EXECUTE IMMEDIATE 'DROP INDEX ' || l_index_owner || '.hz_stage_cpt_t1 FORCE';
3855                               log('Dropped hz_stage_cpt_t1');
3856                             EXCEPTION
3857                               WHEN OTHERS THEN
3858                                 NULL;
3859                             END;
3860                             l_start_flag := 'N';
3861                             l_command := 'STAGE_ALL_DATA';
3862 
3863                         END;
3864                       END IF;
3865 
3866                       IF nvl(l_start_flag,'N') = 'N' THEN
3867                         UPDATE HZ_DQM_STAGE_LOG set START_FLAG = 'Y', START_TIME=SYSDATE
3868                         WHERE operation = 'CREATE_INDEXES' AND step ='HZ_CONTACT_POINTS';
3869                         COMMIT;
3870 
3871                         l_section_grp := g_schema_name || '.HZ_DQM_CPT_GRP';
3872 
3873                         IF l_command <> 'STAGE_NEW_TRANSFORMATIONS' THEN
3874                           log(' Creating hz_stage_cpt_t1 on hz_staged_contact_points. ');
3875                           log(' Index Memory ' || p_idx_mem);
3876                           log(' Starting at ' || to_char(SYSDATE, 'HH24:MI:SS'));
3877 
3878                           EXECUTE IMMEDIATE 'CREATE INDEX ' || l_index_owner || '.hz_stage_cpt_t1 ON ' ||
3879                               'hz_staged_contact_points(concat_col) indextype is ctxsys.context ' ||
3880                               'parameters (''storage '||g_schema_name || '.HZ_DQM_STORAGE datastore '||g_schema_name || '.hz_contact_point_ds ' ||
3881                               'SECTION GROUP '||l_section_grp||' STOPLIST CTXSYS.EMPTY_STOPLIST LEXER '||g_schema_name || '.dqm_lexer memory ' || p_idx_mem || ''')';
3882                         ELSE
3883                           log(' Attempting to drop and create hz_stage_cpt_t1 on hz_staged_contact_points with new transformations.');
3884                           log(' Index Memory ' || p_idx_mem);
3885                           log(' Starting at ' || to_char(SYSDATE, 'HH24:MI:SS') );
3886 
3887 
3888                            BEGIN
3889                               -- DROP AND CREATE
3890                               EXECUTE IMMEDIATE 'DROP INDEX ' || l_index_owner || '.hz_stage_cpt_t1 FORCE';
3891                               log('Dropped hz_stage_contact_t1');
3892                               EXCEPTION
3893                               WHEN OTHERS THEN
3894                               NULL;
3895 
3896                            END ;
3897                           EXECUTE IMMEDIATE 'CREATE INDEX ' || l_index_owner || '.hz_stage_cpt_t1 ON ' ||
3898                               'hz_staged_contact_points(concat_col) indextype is ctxsys.context ' ||
3899                               'parameters (''storage '||g_schema_name || '.HZ_DQM_STORAGE datastore '||g_schema_name || '.hz_contact_point_ds ' ||
3900                               'SECTION GROUP '||l_section_grp||' STOPLIST CTXSYS.EMPTY_STOPLIST LEXER '||g_schema_name || '.dqm_lexer memory ' || p_idx_mem || ''')';
3901 
3902                           log('Done creating hz_stage_contact_t1');
3903                         END IF;
3904 
3905                         UPDATE HZ_DQM_STAGE_LOG set END_FLAG = 'Y', END_TIME=SYSDATE
3906                         WHERE operation = 'CREATE_INDEXES' AND step ='HZ_CONTACT_POINTS';
3907                         COMMIT;
3908                       END IF;
3909                       log(' Completed at ' || to_char(SYSDATE, 'HH24:MI:SS'));
3910                     END IF;
3911                   END IF;
3912 
3913                    -- FINALLY UPDATE THE STAGED_FLAG IN HZ_TRANS_FUNCTIONS
3914                    UPDATE HZ_TRANS_FUNCTIONS_B
3915                    SET STAGED_FLAG='Y' WHERE nvl(ACTIVE_FLAG,'Y') = 'Y'
3916 				   AND nvl(staged_flag,'N')='N';
3917 				   log('Setting STAGED_FLAG=Y in HZ_TRANS_FUNCTIONS_B after create_indexes');
3918 		   --DELETE THE WORD REPLACEMENTS THAT ARE MARKED FOR DELETE AND
3922                    IF CREATE_ALL_TEXT_INDEXES
3919 		   --UPDATE THE STAGED FLAG OF WORD REPLACEMENTS TO Y.
3920 		   update_word_replacements;
3921 
3923                    THEN
3924                          log(' Creating preferences for all the denorm attributes');
3925                          create_denorm_attribute_pref ('PARTY_SITES');
3926                          create_denorm_attribute_pref ('CONTACTS');
3927                          create_denorm_attribute_pref ('CONTACT_POINTS');
3928                    ELSIF CREATE_PS_TEXT_INDEX
3929                    THEN
3930                         log(' Creating preference for the PARTY SITE denorm attribute');
3931                         create_denorm_attribute_pref ('PARTY_SITES');
3932                    ELSIF CREATE_CONTACT_TEXT_INDEX
3933                    THEN
3934                         log(' Creating preference for the CONTACT denorm attribute');
3935                         create_denorm_attribute_pref ('CONTACTS');
3936                    ELSIF CREATE_CPT_TEXT_INDEX
3937                    THEN
3938                         log(' Creating preference for the CONTACT POINT denorm attribute');
3939                         create_denorm_attribute_pref ('CONTACT_POINTS');
3940                    END IF ;
3941 
3942 
3943   END IF;
3944 
3945   log('');
3946   log('Concurrent Program Execution completed ');
3947   log('End Time : '|| TO_CHAR(SYSDATE, 'MM-DD-YY HH24:MI:SS'));
3948 
3949 EXCEPTION
3950   WHEN FND_API.G_EXC_ERROR THEN
3951     outandlog('Error:  ' || FND_MESSAGE.GET);
3952     log('Error ' || SQLERRM);
3953     retcode := 2;
3954     errbuf := errbuf || logerror;
3955     outandlog('Aborting concurrent program execution');
3956     FND_FILE.close;
3957   WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
3958     outandlog('Error:  ' || FND_MESSAGE.GET);
3959     log('Error ' || SQLERRM);
3960     retcode := 2;
3961     errbuf := errbuf || logerror;
3962     outandlog('Aborting concurrent program execution');
3963     FND_FILE.close;
3964   WHEN OTHERS THEN
3965     outandlog('Error:  ' || FND_MESSAGE.GET);
3966     log('SQL Error ' || SQLERRM);
3967     retcode := 2;
3968     errbuf := errbuf || logerror || SQLERRM;
3969     outandlog('Aborting concurrent program execution');
3970     FND_FILE.close;
3971 END;
3972 
3973 PROCEDURE generate_map_proc (
3974    p_entity 		IN	VARCHAR2,
3975    p_proc_name 		IN	VARCHAR2,
3976    p_command 		IN	VARCHAR2
3977 ) IS
3978   l_update_str VARCHAR2(4000);
3979   FIRST BOOLEAN;
3980 BEGIN
3981 
3982 
3983   l('FUNCTION ' || p_proc_name || '( ');
3984   l('      p_record_id NUMBER,');
3985   IF p_entity = 'PARTY' THEN
3986     l('      p_search_rec HZ_PARTY_SEARCH.party_search_rec_type');
3987     l('  ) RETURN HZ_PARTY_STAGE.party_stage_rec_type IS ');
3988     l('l_stage_rec HZ_PARTY_STAGE.party_stage_rec_type;');
3989     l('BEGIN');
3990     l('  l_stage_rec.party_id := p_record_id;');
3991     l('  l_stage_rec.status := p_search_rec.STATUS;');
3992   ELSIF p_entity = 'PARTY_SITES' THEN
3993     l('      p_party_id NUMBER,');
3994     l('      p_search_rec HZ_PARTY_SEARCH.party_site_search_rec_type');
3995     l('  ) RETURN HZ_PARTY_STAGE.party_site_stage_rec_type IS ');
3996     l('l_stage_rec HZ_PARTY_STAGE.party_site_stage_rec_type;');
3997     l('BEGIN');
3998     l('  l_stage_rec.party_id := p_party_id;');
3999     l('  l_stage_rec.party_site_id := p_record_id;');
4000   ELSIF p_entity = 'CONTACTS' THEN
4001     l('      p_party_id NUMBER,');
4002     l('      p_search_rec HZ_PARTY_SEARCH.contact_search_rec_type');
4003     l('  ) RETURN HZ_PARTY_STAGE.contact_stage_rec_type IS ');
4004     l('l_stage_rec HZ_PARTY_STAGE.contact_stage_rec_type;');
4005     l('BEGIN');
4006     l('  l_stage_rec.party_id := p_party_id;');
4007     l('  l_stage_rec.org_contact_id := p_record_id;');
4008   ELSIF p_entity = 'CONTACT_POINTS' THEN
4009     l('      p_party_id NUMBER,');
4010     l('      p_search_rec HZ_PARTY_SEARCH.contact_point_search_rec_type');
4011     l('  ) RETURN HZ_PARTY_STAGE.contact_pt_stage_rec_type IS ');
4012     l('l_stage_rec HZ_PARTY_STAGE.contact_pt_stage_rec_type;');
4013     l('BEGIN');
4014     l('  l_stage_rec.party_id := p_party_id;');
4015     l('  l_stage_rec.contact_point_id := p_record_id;');
4016     l('  l_stage_rec.contact_point_type := p_search_rec.CONTACT_POINT_TYPE;');
4017   END IF;
4018 
4019   IF p_command = 'STAGE_NEW_TRANSFORMATIONS' THEN
4020     FIRST := TRUE;
4021     l_update_str := null;
4022 
4023     for ATTRS IN (SELECT ATTRIBUTE_ID, ATTRIBUTE_NAME
4024                   FROM HZ_TRANS_ATTRIBUTES_VL
4025                   WHERE ENTITY_NAME = p_entity)
4026 
4027     LOOP
4028        for FUNCS IN (SELECT PROCEDURE_NAME, STAGED_ATTRIBUTE_COLUMN
4029                      FROM HZ_TRANS_FUNCTIONS_VL
4030                      WHERE ATTRIBUTE_ID = ATTRS.ATTRIBUTE_ID
4031                      AND nvl(ACTIVE_FLAG,'Y') = 'Y'
4032                      AND NVL(STAGED_FLAG,'N') <> 'Y')
4033        LOOP
4034           l('  l_stage_rec.'||FUNCS.STAGED_ATTRIBUTE_COLUMN || ' := ');
4035           l('        ' || FUNCS.PROCEDURE_NAME ||'(');
4036           l('             p_search_rec.'||ATTRS.ATTRIBUTE_NAME);
4037           l('             ,null,''' || ATTRS.ATTRIBUTE_NAME || '''');
4038           l('             ,''' ||p_entity||''');');
4039           IF FIRST THEN
4040             l_update_str := ' '|| FUNCS.STAGED_ATTRIBUTE_COLUMN || ' = ' ||
4044             l_update_str := l_update_str || ','|| FUNCS.STAGED_ATTRIBUTE_COLUMN || ' = ' ||
4041                             ' l_stage_rec.'||FUNCS.STAGED_ATTRIBUTE_COLUMN || ' ';
4042             FIRST := FALSE;
4043           ELSE
4045                             ' l_stage_rec.'||FUNCS.STAGED_ATTRIBUTE_COLUMN || ' ';
4046           END IF;
4047        END LOOP;
4048     END LOOP;
4049 
4050     IF l_update_str IS NOT NULL THEN
4051       IF p_entity = 'PARTY' THEN
4052         l('  UPDATE HZ_STAGED_PARTIES SET ');
4053         l('  ' || l_update_str);
4054         l('  WHERE party_id = p_record_id;');
4055       ELSIF p_entity = 'PARTY_SITES' THEN
4056         l('  UPDATE HZ_STAGED_PARTY_SITES SET ');
4057         l('  ' || l_update_str);
4058         l('  WHERE party_site_id = p_record_id;');
4059       ELSIF p_entity = 'CONTACTS' THEN
4060         l('  UPDATE HZ_STAGED_CONTACTS SET ');
4061         l('  ' || l_update_str);
4062         l('  WHERE org_contact_id = p_record_id;');
4063       ELSIF p_entity = 'CONTACT_POINTS' THEN
4064         l('  UPDATE HZ_STAGED_CONTACT_POINTS SET ');
4065         l('  ' || l_update_str);
4066         l('  WHERE contact_point_id = p_record_id;');
4067       END IF;
4068     END IF;
4069 
4070   ELSE
4071 
4072     for ATTRS IN (SELECT ATTRIBUTE_ID, ATTRIBUTE_NAME
4073                   FROM HZ_TRANS_ATTRIBUTES_VL
4074                   WHERE ENTITY_NAME = p_entity)
4075     LOOP
4076        for FUNCS IN (SELECT PROCEDURE_NAME, STAGED_ATTRIBUTE_COLUMN
4077                      FROM HZ_TRANS_FUNCTIONS_VL
4078                      WHERE ATTRIBUTE_ID = ATTRS.ATTRIBUTE_ID
4079                      AND nvl(ACTIVE_FLAG,'Y') = 'Y')
4080        LOOP
4081           l('  l_stage_rec.'||FUNCS.STAGED_ATTRIBUTE_COLUMN || ' := ');
4082           l('        ' || FUNCS.PROCEDURE_NAME ||'(');
4083           l('             p_search_rec.'||ATTRS.ATTRIBUTE_NAME);
4084 
4085           -- Temporary fix for bug 2265498
4086           -- Will be fixed when bug 2269873
4087           l('             ,null,''' || ATTRS.ATTRIBUTE_NAME || '''');
4088           l('             ,''' ||p_entity||''');');
4089        END LOOP;
4090     END LOOP;
4091   END IF;
4092 
4093   l('  RETURN l_stage_rec;');
4094   l('EXCEPTION');
4095   l('  WHEN OTHERS THEN');
4096   l('    FND_MESSAGE.SET_NAME(''AR'', ''HZ_MAP_PROC_ERROR'');');
4097   l('    FND_MESSAGE.SET_TOKEN(''PROC'' ,''' || p_proc_name||''');');
4098   l('    FND_MESSAGE.SET_TOKEN(''ERROR'' ,SQLERRM);');
4099   l('    FND_MSG_PUB.ADD;');
4100   l('    RAISE FND_API.G_EXC_UNEXPECTED_ERROR;');
4101 
4102   l('END;');
4103 
4104 EXCEPTION
4105   WHEN OTHERS THEN
4106     FND_MESSAGE.SET_NAME('AR', 'HZ_STAGE_SQL_ERROR');
4107     FND_MESSAGE.SET_TOKEN('PROC' ,'generate_transform_proc');
4108     FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM);
4109     FND_MSG_PUB.ADD;
4110     RAISE FND_API.G_EXC_ERROR;
4111 END;
4112 
4113 PROCEDURE generate_declarations IS
4114 
4115 BEGIN
4116   l('  TYPE NumberList IS TABLE OF NUMBER INDEX BY BINARY_INTEGER;');
4117   l('  TYPE Char1List IS TABLE OF VARCHAR2(1) INDEX BY BINARY_INTEGER;');
4118   l('  TYPE Char2List IS TABLE OF VARCHAR2(30) INDEX BY BINARY_INTEGER;');
4119   l('  TYPE CharList IS TABLE OF VARCHAR2(2000) INDEX BY BINARY_INTEGER;');
4120   l('  TYPE RowIdList IS TABLE OF ROWID INDEX BY BINARY_INTEGER; ');
4121   l('  ');
4122   l('  H_ROWID RowIdList;');
4123   l('  H_P_PARTY_ID NumberList;');
4124   l('  H_PS_DEN CharList;');
4125   l('  H_CT_DEN CharList;');
4126   l('  H_CPT_DEN CharList;');
4127   l('  H_PARTY_INDEX NumberList;');
4128   l('  H_PARTY_ID NumberList;');
4129   l('  H_C_PARTY_ID NumberList;');
4130   l('  H_PS_PARTY_ID NumberList;');
4131   l('  H_CPT_PARTY_ID NumberList;');
4132   l('  H_R_PARTY_ID NumberList;');
4133   l('  H_STATUS Char1List;');
4134   l('  H_PARTY_SITE_ID NumberList;');
4135   l('  H_CPT_PARTY_SITE_ID NumberList;');
4136   l('  H_ORG_CONTACT_ID NumberList;');
4137   l('  H_PS_ORG_CONTACT_ID NumberList;');
4138   l('  H_CPT_ORG_CONTACT_ID NumberList;');
4139   l('  H_CONTACT_POINT_ID NumberList;');
4140   l('  H_CONTACT_POINT_TYPE Char2List;');
4141   l('  H_TX1 CharList;');
4142   l('  H_TX2 CharList;');
4143   l('  H_TX3 CharList;');
4144   l('  H_TX4 CharList;');
4145   l('  H_TX5 CharList;');
4146   l('  H_TX6 CharList;');
4147   l('  H_TX7 CharList;');
4148   l('  H_TX8 CharList;');
4149   l('  H_TX9 CharList;');
4150   l('  H_TX10 CharList;');
4151   l('  H_TX11 CharList;');
4152   l('  H_TX12 CharList;');
4153   l('  H_TX13 CharList;');
4154   l('  H_TX14 CharList;');
4155   l('  H_TX15 CharList;');
4156   l('  H_TX16 CharList;');
4157   l('  H_TX17 CharList;');
4158   l('  H_TX18 CharList;');
4159   l('  H_TX19 CharList;');
4160   l('  H_TX20 CharList;');
4161   l('  H_TX21 CharList;');
4162   l('  H_TX22 CharList;');
4163   l('  H_TX23 CharList;');
4164   l('  H_TX24 CharList;');
4165   l('  H_TX25 CharList;');
4166   l('  H_TX26 CharList;');
4167   l('  H_TX27 CharList;');
4168   l('  H_TX28 CharList;');
4169   l('  H_TX29 CharList;');
4170   l('  H_TX30 CharList;');
4171   l('  H_TX31 CharList;');
4172   l('  H_TX32 CharList;');
4173   l('  H_TX33 CharList;');
4174   l('  H_TX34 CharList;');
4175   l('  H_TX35 CharList;');
4176   l('  H_TX36 CharList;');
4180   l('  H_TX40 CharList;');
4177   l('  H_TX37 CharList;');
4178   l('  H_TX38 CharList;');
4179   l('  H_TX39 CharList;');
4181   l('  H_TX41 CharList;');
4182   l('  H_TX42 CharList;');
4183   l('  H_TX43 CharList;');
4184   l('  H_TX44 CharList;');
4185   l('  H_TX45 CharList;');
4186   l('  H_TX46 CharList;');
4187   l('  H_TX47 CharList;');
4188   l('  H_TX48 CharList;');
4189   l('  H_TX49 CharList;');
4190   l('  H_TX50 CharList;');
4191   l('  H_TX51 CharList;');
4192   l('  H_TX52 CharList;');
4193   l('  H_TX53 CharList;');
4194   l('  H_TX54 CharList;');
4195   l('  H_TX55 CharList;');
4196   l('  H_TX56 CharList;');
4197   l('  H_TX57 CharList;');
4198   l('  H_TX58 CharList;');
4199   l('  H_TX59 CharList;');
4200   l('  H_TX60 CharList;');
4201   l('  H_TX61 CharList;');
4202   l('  H_TX62 CharList;');
4203   l('  H_TX63 CharList;');
4204   l('  H_TX64 CharList;');
4205   l('  H_TX65 CharList;');
4206   l('  H_TX66 CharList;');
4207   l('  H_TX67 CharList;');
4208   l('  H_TX68 CharList;');
4209   l('  H_TX69 CharList;');
4210   l('  H_TX70 CharList;');
4211   l('  H_TX71 CharList;');
4212   l('  H_TX72 CharList;');
4213   l('  H_TX73 CharList;');
4214   l('  H_TX74 CharList;');
4215   l('  H_TX75 CharList;');
4216   l('  H_TX76 CharList;');
4217   l('  H_TX77 CharList;');
4218   l('  H_TX78 CharList;');
4219   l('  H_TX79 CharList;');
4220   l('  H_TX80 CharList;');
4221   l('  H_TX81 CharList;');
4222   l('  H_TX82 CharList;');
4223   l('  H_TX83 CharList;');
4224   l('  H_TX84 CharList;');
4225   l('  H_TX85 CharList;');
4226   l('  H_TX86 CharList;');
4227   l('  H_TX87 CharList;');
4228   l('  H_TX88 CharList;');
4229   l('  H_TX89 CharList;');
4230   l('  H_TX90 CharList;');
4231   l('  H_TX91 CharList;');
4232   l('  H_TX92 CharList;');
4233   l('  H_TX93 CharList;');
4234   l('  H_TX94 CharList;');
4235   l('  H_TX95 CharList;');
4236   l('  H_TX96 CharList;');
4237   l('  H_TX97 CharList;');
4238   l('  H_TX98 CharList;');
4239   l('  H_TX99 CharList;');
4240   l('  H_TX100 CharList;');
4241   l('  H_TX101 CharList;');
4242   l('  H_TX102 CharList;');
4243   l('  H_TX103 CharList;');
4244   l('  H_TX104 CharList;');
4245   l('  H_TX105 CharList;');
4246   l('  H_TX106 CharList;');
4247   l('  H_TX107 CharList;');
4248   l('  H_TX108 CharList;');
4249   l('  H_TX109 CharList;');
4250   l('  H_TX110 CharList;');
4251   l('  H_TX111 CharList;');
4252   l('  H_TX112 CharList;');
4253   l('  H_TX113 CharList;');
4254   l('  H_TX114 CharList;');
4255   l('  H_TX115 CharList;');
4256   l('  H_TX116 CharList;');
4257   l('  H_TX117 CharList;');
4258   l('  H_TX118 CharList;');
4259   l('  H_TX119 CharList;');
4260   l('  H_TX120 CharList;');
4261   l('  H_TX121 CharList;');
4262   l('  H_TX122 CharList;');
4263   l('  H_TX123 CharList;');
4264   l('  H_TX124 CharList;');
4265   l('  H_TX125 CharList;');
4266   l('  H_TX126 CharList;');
4267   l('  H_TX127 CharList;');
4268   l('  H_TX128 CharList;');
4269   l('  H_TX129 CharList;');
4270   l('  H_TX130 CharList;');
4271   l('  H_TX131 CharList;');
4272   l('  H_TX132 CharList;');
4273   l('  H_TX133 CharList;');
4274   l('  H_TX134 CharList;');
4275   l('  H_TX135 CharList;');
4276   l('  H_TX136 CharList;');
4277   l('  H_TX137 CharList;');
4278   l('  H_TX138 CharList;');
4279   l('  H_TX139 CharList;');
4280   l('  H_TX140 CharList;');
4281   l('  H_TX141 CharList;');
4282   l('  H_TX142 CharList;');
4283   l('  H_TX143 CharList;');
4284   l('  H_TX144 CharList;');
4285   l('  H_TX145 CharList;');
4286   l('  H_TX146 CharList;');
4287   l('  H_TX147 CharList;');
4288   l('  H_TX148 CharList;');
4289   l('  H_TX149 CharList;');
4290   l('  H_TX150 CharList;');
4291   l('  H_TX151 CharList;');
4292   l('  H_TX152 CharList;');
4293   l('  H_TX153 CharList;');
4294   l('  H_TX154 CharList;');
4295   l('  H_TX155 CharList;');
4296   l('  H_TX156 CharList;');
4297   l('  H_TX157 CharList;');
4298   l('  H_TX158 CharList;');
4299   l('  H_TX159 CharList;');
4300   l('  H_TX160 CharList;');
4301   l('  H_TX161 CharList;');
4302   l('  H_TX162 CharList;');
4303   l('  H_TX163 CharList;');
4304   l('  H_TX164 CharList;');
4305   l('  H_TX165 CharList;');
4306   l('  H_TX166 CharList;');
4307   l('  H_TX167 CharList;');
4308   l('  H_TX168 CharList;');
4309   l('  H_TX169 CharList;');
4310   l('  H_TX170 CharList;');
4311   l('  H_TX171 CharList;');
4312   l('  H_TX172 CharList;');
4313   l('  H_TX173 CharList;');
4314   l('  H_TX174 CharList;');
4315   l('  H_TX175 CharList;');
4316   l('  H_TX176 CharList;');
4317   l('  H_TX177 CharList;');
4318   l('  H_TX178 CharList;');
4319   l('  H_TX179 CharList;');
4320   l('  H_TX180 CharList;');
4321   l('  H_TX181 CharList;');
4322   l('  H_TX182 CharList;');
4323   l('  H_TX183 CharList;');
4324   l('  H_TX184 CharList;');
4325   l('  H_TX185 CharList;');
4326   l('  H_TX186 CharList;');
4327   l('  H_TX187 CharList;');
4328   l('  H_TX188 CharList;');
4329   l('  H_TX189 CharList;');
4330   l('  H_TX190 CharList;');
4331   l('  H_TX191 CharList;');
4332   l('  H_TX192 CharList;');
4333   l('  H_TX193 CharList;');
4337   l('  H_TX197 CharList;');
4334   l('  H_TX194 CharList;');
4335   l('  H_TX195 CharList;');
4336   l('  H_TX196 CharList;');
4338   l('  H_TX198 CharList;');
4339   l('  H_TX199 CharList;');
4340   l('  H_TX200 CharList;');
4341   l('  H_TX201 CharList;');
4342   l('  H_TX202 CharList;');
4343   l('  H_TX203 CharList;');
4344   l('  H_TX204 CharList;');
4345   l('  H_TX205 CharList;');
4346   l('  H_TX206 CharList;');
4347   l('  H_TX207 CharList;');
4348   l('  H_TX208 CharList;');
4349   l('  H_TX209 CharList;');
4350   l('  H_TX210 CharList;');
4351   l('  H_TX211 CharList;');
4352   l('  H_TX212 CharList;');
4353   l('  H_TX213 CharList;');
4354   l('  H_TX214 CharList;');
4355   l('  H_TX215 CharList;');
4356   l('  H_TX216 CharList;');
4357   l('  H_TX217 CharList;');
4358   l('  H_TX218 CharList;');
4359   l('  H_TX219 CharList;');
4360   l('  H_TX220 CharList;');
4361   l('  H_TX221 CharList;');
4362   l('  H_TX222 CharList;');
4363   l('  H_TX223 CharList;');
4364   l('  H_TX224 CharList;');
4365   l('  H_TX225 CharList;');
4366   l('  H_TX226 CharList;');
4367   l('  H_TX227 CharList;');
4368   l('  H_TX228 CharList;');
4369   l('  H_TX229 CharList;');
4370   l('  H_TX230 CharList;');
4371   l('  H_TX231 CharList;');
4372   l('  H_TX232 CharList;');
4373   l('  H_TX233 CharList;');
4374   l('  H_TX234 CharList;');
4375   l('  H_TX235 CharList;');
4376   l('  H_TX236 CharList;');
4377   l('  H_TX237 CharList;');
4378   l('  H_TX238 CharList;');
4379   l('  H_TX239 CharList;');
4380   l('  H_TX240 CharList;');
4381   l('  H_TX241 CharList;');
4382   l('  H_TX242 CharList;');
4383   l('  H_TX243 CharList;');
4384   l('  H_TX244 CharList;');
4385   l('  H_TX245 CharList;');
4386   l('  H_TX246 CharList;');
4387   l('  H_TX247 CharList;');
4388   l('  H_TX248 CharList;');
4389   l('  H_TX249 CharList;');
4390   l('  H_TX250 CharList;');
4391   l('  H_TX251 CharList;');
4392   l('  H_TX252 CharList;');
4393   l('  H_TX253 CharList;');
4394   l('  H_TX254 CharList;');
4395   l('  H_TX255 CharList;');
4396 END;
4397 
4398 PROCEDURE generate_ds_proc IS
4399 
4400 FIRST BOOLEAN := TRUE;
4401 uname VARCHAR2(255);
4402 
4403 pref_cols VARCHAR2(1000);
4404 proc_cols VARCHAR2(2000);
4405 fetch_cols VARCHAR2(2000);
4406 CURSOR l_ent_cur(l_ent_name VARCHAR2) IS (SELECT STAGED_ATTRIBUTE_COLUMN
4407                 FROM HZ_TRANS_ATTRIBUTES_VL a, HZ_TRANS_FUNCTIONS_VL f
4408                 WHERE ENTITY_NAME = l_ent_name
4409                 AND nvl(f.ACTIVE_FLAG,'Y') = 'Y'
4410                 AND nvl(f.PRIMARY_FLAG,'Y') = 'Y'
4411                 AND nvl(a.DENORM_FLAG,'N') = 'Y'
4412                 AND f.ATTRIBUTE_ID = a.ATTRIBUTE_ID);
4413 l_attr VARCHAR2(255);
4414 
4415 BEGIN
4416 
4417   SELECT SYS_CONTEXT ('USERENV', 'SESSION_USER') INTO uname
4418   FROM DUAL;
4419 
4420   get_datastore_cols('PARTY', pref_cols, proc_cols, fetch_cols);
4421 
4422   l('  FUNCTION miscp (rid IN ROWID) RETURN CLOB IS');
4423   IF proc_cols IS NULL THEN
4424     l('  BEGIN');
4425     l('    RETURN NULL;');
4426     l('  END;');
4427   ELSE
4428     l('  CURSOR P IS');
4429     l('       SELECT '||proc_cols||' FROM '||uname||'.HZ_STAGED_PARTIES WHERE ROWID=rid;');
4430     l('  val CLOB;');
4431     l('  BEGIN');
4432     l('      val:=null;');
4433     l('      FOR rec in P LOOP');
4434     l('           val:='||fetch_cols||';');
4435     l('      END LOOP;');
4436     l('      return val;');
4437     l('  END;');
4438   END IF;
4439 
4440 
4441   get_datastore_cols('PARTY_SITES', pref_cols, proc_cols, fetch_cols);
4442   l('  FUNCTION miscps (rid IN ROWID) RETURN CLOB IS');
4443   IF proc_cols IS NULL THEN
4444     l('  BEGIN');
4445     l('    RETURN NULL;');
4446     l('  END;');
4447   ELSE
4448     l('  CURSOR P IS');
4449     l('       SELECT '||proc_cols||' FROM '||uname||'.HZ_STAGED_PARTY_SITES WHERE ROWID=rid;');
4450     l('  val CLOB ;');
4451     l('  BEGIN');
4452     l('      val:=null;');
4453     l('      FOR rec in P LOOP');
4454     l('           val:='||fetch_cols||';');
4455     l('      END LOOP;');
4456     l('      return val;');
4457     l('  END;');
4458   END IF;
4459 
4460   get_datastore_cols('CONTACTS', pref_cols, proc_cols, fetch_cols);
4461   l('  FUNCTION miscct (rid IN ROWID) RETURN CLOB IS');
4462   IF proc_cols IS NULL THEN
4463     l('  BEGIN');
4464     l('    RETURN NULL;');
4465     l('  END;');
4466   ELSE
4467     l('  CURSOR P IS');
4468     l('       SELECT '||proc_cols||' FROM '||uname||'.HZ_STAGED_CONTACTS WHERE ROWID=rid;');
4469     l('  val CLOB;');
4470     l('  BEGIN');
4471     l('      val:=null;');
4472     l('      FOR rec in P LOOP');
4473     l('          val:='||fetch_cols||';');
4474     l('      END LOOP;');
4475     l('      return val;');
4476     l('  END;');
4477 
4478   END IF;
4479 
4480   get_datastore_cols('CONTACT_POINTS', pref_cols, proc_cols, fetch_cols);
4481   l('  FUNCTION misccpt (rid IN ROWID) RETURN CLOB IS');
4482   IF proc_cols IS NULL THEN
4483     l('  BEGIN');
4484     l('    RETURN NULL;');
4485     l('  END;');
4486   ELSE
4487     l('  CURSOR P IS');
4491     l('      val:=null;');
4488     l('       SELECT '||proc_cols||' FROM '||uname||'.HZ_STAGED_CONTACT_POINTS WHERE ROWID=rid;');
4489     l('  val CLOB;');
4490     l('  BEGIN');
4492     l('      FOR rec in P LOOP');
4493     l('           val:='||fetch_cols||';');
4494     l('      END LOOP;');
4495     l('      return val;');
4496     l('  END;');
4497   END IF;
4498 
4499   l('  FUNCTION den_ps (party_id NUMBER) RETURN VARCHAR2 IS');
4500   l('   CURSOR party_site_denorm (cp_party_id NUMBER) IS');
4501   l('    SELECT distinct');
4502   OPEN l_ent_cur('PARTY_SITES');
4503   LOOP
4504       FETCH l_ent_cur INTO l_attr;
4505       EXIT WHEN l_ent_cur%NOTFOUND;
4506       l('      '||l_attr ||'||'' ''||');
4507   END LOOP;
4508   CLOSE l_ent_cur;
4509   l('        '' ''');
4510   l('    FROM '||uname||'.HZ_STAGED_PARTY_SITES');
4511   l('    WHERE party_id = cp_party_id;');
4512   l('    l_buffer VARCHAR2(4000);');
4513   l('    l_den_ps VARCHAR2(2000);');
4514   l('  BEGIN');
4515   l('     OPEN party_site_denorm(party_id);');
4516   l('     LOOP');
4517   l('       FETCH party_site_denorm INTO l_den_ps;');
4518   l('       EXIT WHEN party_site_denorm%NOTFOUND;');
4519   l('       l_buffer := l_buffer||'' ''||l_den_ps;');
4520   l('     END LOOP;');
4521   l('     CLOSE party_site_denorm;');
4522   l('     RETURN l_buffer;');
4523   l('  EXCEPTION');
4524   l('    WHEN OTHERS THEN');
4525   l('      RETURN l_buffer;');
4526 
4527   l('  END;');
4528 
4529 
4530   l('  FUNCTION den_ct (party_id NUMBER) RETURN VARCHAR2 IS');
4531   l('   CURSOR contact_denorm (cp_party_id NUMBER) IS');
4532   l('    SELECT distinct');
4533   OPEN l_ent_cur('CONTACTS');
4534   LOOP
4535       FETCH l_ent_cur INTO l_attr;
4536       EXIT WHEN l_ent_cur%NOTFOUND;
4537       l('      '||l_attr ||'||'' ''||');
4538   END LOOP;
4539   CLOSE l_ent_cur;
4540   l('        '' ''');
4541   l('    FROM '||uname||'.HZ_STAGED_CONTACTS');
4542   l('    WHERE party_id = cp_party_id;');
4543   l('    l_buffer VARCHAR2(4000);');
4544   l('    l_den_ct VARCHAR2(2000);');
4545   l('  BEGIN');
4546   l('     OPEN contact_denorm(party_id);');
4547   l('     LOOP');
4548   l('       FETCH contact_denorm INTO l_den_ct;');
4549   l('       EXIT WHEN contact_denorm%NOTFOUND;');
4550   l('       l_buffer := l_buffer||'' ''||l_den_ct;');
4551   l('     END LOOP;');
4552   l('     CLOSE contact_denorm;');
4553   l('     RETURN l_buffer;');
4554   l('  EXCEPTION');
4555   l('    WHEN OTHERS THEN');
4556   l('      RETURN l_buffer;');
4557   l('  END;');
4558 
4559   l('  FUNCTION den_cpt (party_id NUMBER) RETURN VARCHAR2 IS');
4560   l('   CURSOR contact_pt_denorm (cp_party_id NUMBER) IS');
4561   l('    SELECT distinct');
4562   OPEN l_ent_cur('CONTACT_POINTS');
4563   LOOP
4564       FETCH l_ent_cur INTO l_attr;
4565       EXIT WHEN l_ent_cur%NOTFOUND;
4566       l('      '||l_attr ||'||'' ''||');
4567   END LOOP;
4568   CLOSE l_ent_cur;
4569   l('        '' ''');
4570   l('    FROM '||uname||'.HZ_STAGED_CONTACT_POINTS');
4571   l('    WHERE party_id = cp_party_id;');
4572   l('    l_buffer VARCHAR2(4000);');
4573   l('    l_den_cpt VARCHAR2(2000);');
4574   l('  BEGIN');
4575   l('     OPEN contact_pt_denorm(party_id);');
4576   l('     LOOP');
4577   l('       FETCH contact_pt_denorm INTO l_den_cpt;');
4578   l('       EXIT WHEN contact_pt_denorm%NOTFOUND;');
4579   l('       l_buffer := l_buffer||'' ''||l_den_cpt;');
4580   l('     END LOOP;');
4581   l('     CLOSE contact_pt_denorm;');
4582   l('     RETURN l_buffer;');
4583   l('  EXCEPTION');
4584   l('    WHEN OTHERS THEN');
4585   l('      RETURN l_buffer;');
4586   l('  END;');
4587   l('');
4588 
4589 END;
4590 
4591 
4592 -- REPURI. Proccedure to generate the log procedure for error logging.
4593 
4594 PROCEDURE generate_log IS
4595 
4596 BEGIN
4597   l('');
4598   l('  PROCEDURE log( ');
4599   l('    message      IN      VARCHAR2, ');
4600   l('    newline      IN      BOOLEAN DEFAULT TRUE) IS ');
4601   l('  BEGIN ');
4602   l('    IF message = ''NEWLINE'' THEN ');
4603   l('      FND_FILE.NEW_LINE(FND_FILE.LOG, 1); ');
4604   l('    ELSIF (newline) THEN ');
4605   l('      FND_FILE.put_line(fnd_file.log,message); ');
4606   l('    ELSE ');
4607   l('      FND_FILE.put(fnd_file.log,message); ');
4608   l('    END IF; ');
4609   l('  END log; ');
4610   l('');
4611 
4612 END;
4613 
4614 -- REPURI added this procedure for generating a procedure to
4615 -- insert errored records into HZ_DQM_SYNC_INTERFACE table.
4616 
4617 PROCEDURE generate_ins_dqm_sync_err_rec IS
4618 
4619 BEGIN
4620   l('');
4621   l('  PROCEDURE insert_dqm_sync_error_rec ( ');
4622   l('    p_party_id            IN   NUMBER, ');
4623   l('    p_record_id           IN   NUMBER, ');
4624   l('    p_party_site_id       IN   NUMBER, ');
4625   l('    p_org_contact_id      IN   NUMBER, ');
4626   l('    p_entity              IN   VARCHAR2, ');
4627   l('    p_operation           IN   VARCHAR2, ');
4628   l('    p_staged_flag         IN   VARCHAR2 DEFAULT ''E'', ');
4629   l('    p_realtime_sync_flag  IN   VARCHAR2 DEFAULT ''Y'', ');
4630   l('    p_error_data          IN   VARCHAR2 ');
4631   l('  ) IS ');
4632   l('  BEGIN ');
4633   l('    INSERT INTO hz_dqm_sync_interface ( ');
4637   l('      ORG_CONTACT_ID, ');
4634   l('      PARTY_ID, ');
4635   l('      RECORD_ID, ');
4636   l('      PARTY_SITE_ID, ');
4638   l('      ENTITY, ');
4639   l('      OPERATION, ');
4640   l('      STAGED_FLAG, ');
4641   l('      REALTIME_SYNC_FLAG, ');
4642   l('      ERROR_DATA, ');
4643   l('      CREATED_BY, ');
4644   l('      CREATION_DATE, ');
4645   l('      LAST_UPDATE_LOGIN, ');
4646   l('      LAST_UPDATE_DATE, ');
4647   l('      LAST_UPDATED_BY, ');
4648   l('      SYNC_INTERFACE_NUM ');
4649   l('    ) VALUES ( ');
4650   l('      p_party_id, ');
4651   l('      p_record_id, ');
4652   l('      p_party_site_id, ');
4653   l('      p_org_contact_id, ');
4654   l('      p_entity, ');
4655   l('      p_operation, ');
4656   l('      p_staged_flag, ');
4657   l('      p_realtime_sync_flag, ');
4658   l('      p_error_data, ');
4659   l('      hz_utility_pub.created_by, ');
4660   l('      hz_utility_pub.creation_date, ');
4661   l('      hz_utility_pub.last_update_login, ');
4662   l('      hz_utility_pub.last_update_date, ');
4663   l('      hz_utility_pub.user_id, ');
4664   l('      HZ_DQM_SYNC_INTERFACE_S.nextval ');
4665   l('    ); ');
4666   l('  END insert_dqm_sync_error_rec; ');
4667   l('');
4668 
4669 END;
4670 
4671 -- REPURI. Proccedure to generate the code (into HZ_STAGE_MAP_TRANSFORM)
4672 -- for OPEN_BULK_IMP_SYNC_PARTY_CUR procedure. Bug 4884735.
4673 
4674 PROCEDURE gen_bulk_imp_sync_party_query IS
4675 
4676  cur_col_num NUMBER := 1;
4677 
4678  TYPE coltab IS TABLE OF VARCHAR2(2000) INDEX BY BINARY_INTEGER;
4679 
4680  l_org_select coltab;
4681  l_per_select coltab;
4682  l_oth_select coltab;
4683 
4684  l_forall_list coltab;
4685  l_custom_list coltab;
4686  l_mincol_list coltab;
4687  l_min_colnum NUMBER;
4688  idx NUMBER :=1;
4689  is_first boolean := true;
4690 
4691  -- VJN Introduced for conditional word replacements
4692  l_cond_attrib_list coltab ;
4693  l_idx number ;
4694 
4695 BEGIN
4696   l('');
4697   l('  PROCEDURE open_bulk_imp_sync_party_cur( ');
4698   l('    p_batch_id        IN      NUMBER, ');
4699   l('    p_batch_mode_flag IN      VARCHAR2, ');
4700   l('    p_from_osr        IN      VARCHAR2, ');
4701   l('    p_to_osr          IN      VARCHAR2, ');
4702   l('    p_os              IN      VARCHAR2, ');
4703   l('    p_party_type      IN      VARCHAR2, ');
4704   l('    p_operation       IN      VARCHAR2, ');
4705   l('    x_sync_party_cur  IN OUT  HZ_DQM_SYNC.SyncCurTyp) IS ');
4706   l('  BEGIN');
4707 
4708   FOR ATTRS IN (SELECT a.ATTRIBUTE_ID,
4709                        a.ATTRIBUTE_NAME,
4710                        a.SOURCE_TABLE,
4711                        a.CUSTOM_ATTRIBUTE_PROCEDURE,
4712                        f.PROCEDURE_NAME,
4713                        f.STAGED_ATTRIBUTE_COLUMN,
4714                        to_number(substrb(STAGED_ATTRIBUTE_COLUMN, 3)) COLNUM
4715                 FROM HZ_TRANS_ATTRIBUTES_VL a, HZ_TRANS_FUNCTIONS_VL f
4716                 WHERE ENTITY_NAME = 'PARTY'
4717                 AND nvl(f.ACTIVE_FLAG,'Y') = 'Y'
4718                 AND f.ATTRIBUTE_ID = a.ATTRIBUTE_ID
4719                 ORDER BY COLNUM) LOOP
4720 
4721     IF cur_col_num<ATTRS.COLNUM THEN
4722       FOR I in cur_col_num..ATTRS.COLNUM-1 LOOP
4723         l_mincol_list(I) := 'N';
4724         l_forall_list(I) := 'N';
4725         l_custom_list(I) := 'N';
4726       END LOOP;
4727     END IF;
4728     cur_col_num:=ATTRS.COLNUM+1;
4729     IF has_trx_context(ATTRS.PROCEDURE_NAME) THEN
4730       l_forall_list(ATTRS.COLNUM) := ATTRS.PROCEDURE_NAME || '(H_TX'||ATTRS.COLNUM||'(I),NULL, ''' || ATTRS.ATTRIBUTE_NAME || ''',''PARTY'',''STAGE'')';
4731     ELSE
4732       l_forall_list(ATTRS.COLNUM) := ATTRS.PROCEDURE_NAME || '(H_TX'||ATTRS.COLNUM||'(I),NULL, ''' || ATTRS.ATTRIBUTE_NAME || ''',''PARTY'')';
4733     END IF;
4734     l_mincol_list(ATTRS.COLNUM) := 'N';
4735 
4736     SELECT min(to_number(substrb(STAGED_ATTRIBUTE_COLUMN, 3))) INTO l_min_colnum
4737     FROM HZ_TRANS_ATTRIBUTES_VL a, HZ_TRANS_FUNCTIONS_VL f
4738     WHERE ENTITY_NAME = 'PARTY'
4739     AND nvl(f.ACTIVE_FLAG,'Y') = 'Y'
4740     AND f.ATTRIBUTE_ID = a.ATTRIBUTE_ID
4741     AND a.ATTRIBUTE_NAME=ATTRS.ATTRIBUTE_NAME;
4742 
4743     IF ATTRS.colnum>l_min_colnum THEN
4744       l_mincol_list(ATTRS.COLNUM) := 'N';
4745     IF has_trx_context(ATTRS.PROCEDURE_NAME) THEN
4746       l_forall_list(ATTRS.COLNUM) := ATTRS.PROCEDURE_NAME || '(H_TX'||l_min_colnum||'(I),NULL, ''' || ATTRS.ATTRIBUTE_NAME || ''',''PARTY'',''STAGE'')';
4747     ELSE
4748       l_forall_list(ATTRS.COLNUM) := ATTRS.PROCEDURE_NAME || '(H_TX'||l_min_colnum||'(I),NULL, ''' || ATTRS.ATTRIBUTE_NAME || ''',''PARTY'')';
4749     END IF;
4750     ELSE
4751       l_mincol_list(ATTRS.COLNUM) := 'Y';
4752     END IF;
4753 
4754     IF ATTRS.CUSTOM_ATTRIBUTE_PROCEDURE IS NULL THEN
4755       IF l_mincol_list(ATTRS.COLNUM) = 'Y' THEN
4756         IF ATTRS.SOURCE_TABLE='HZ_ORGANIZATION_PROFILES' THEN
4757           l_org_select(idx) := 'op.'||ATTRS.ATTRIBUTE_NAME;
4758           l_per_select(idx) := 'NULL';
4759           l_oth_select(idx) := 'NULL';
4760         ELSIF ATTRS.SOURCE_TABLE='HZ_PERSON_PROFILES' THEN
4761           l_per_select(idx) := 'pe.'||ATTRS.ATTRIBUTE_NAME;
4762           l_org_select(idx) := 'NULL';
4763           l_oth_select(idx) := 'NULL';
4764         ELSIF ATTRS.SOURCE_TABLE='HZ_PERSON_PROFILES, HZ_ORGANIZATION_PROFILES' OR
4768           l_oth_select(idx) := 'NULL';
4765               ATTRS.SOURCE_TABLE='HZ_ORGANIZATION_PROFILES, HZ_PERSON_PROFILES' THEN
4766           l_org_select(idx) := 'op.'||ATTRS.ATTRIBUTE_NAME;
4767           l_per_select(idx) := 'pe.'||ATTRS.ATTRIBUTE_NAME;
4769         ELSE
4770           l_org_select(idx) := 'p.'||ATTRS.ATTRIBUTE_NAME;
4771           l_per_select(idx) := 'p.'||ATTRS.ATTRIBUTE_NAME;
4772           l_oth_select(idx) := 'p.'||ATTRS.ATTRIBUTE_NAME;
4773         END IF;
4774       ELSE
4775         l_org_select(idx):='N';
4776         l_per_select(idx):='N';
4777         l_oth_select(idx):='N';
4778       END IF;
4779 
4780       l_custom_list(ATTRS.COLNUM) := 'N';
4781     ELSE
4782         l_org_select(idx):='N';
4783         l_per_select(idx):='N';
4784         l_oth_select(idx):='N';
4785         l_custom_list(ATTRS.COLNUM) := 'N';
4786         IF ATTRS.ATTRIBUTE_NAME = 'PARTY_ALL_NAMES' THEN
4787           IF l_mincol_list(ATTRS.COLNUM) = 'Y' THEN
4788             l_org_select(idx) := 'p.PARTY_NAME || '' '' || p.KNOWN_AS || '' '' || p.KNOWN_AS2 || '' '' || p.KNOWN_AS3 || '' ''|| p.KNOWN_AS4 || '' ''|| p.KNOWN_AS5';
4789             l_per_select(idx) := 'p.PARTY_NAME || '' '' || p.KNOWN_AS || '' '' || p.KNOWN_AS2 || '' '' || p.KNOWN_AS3 || '' ''|| p.KNOWN_AS4 || '' ''|| p.KNOWN_AS5';
4790             l_oth_select(idx) := 'p.PARTY_NAME || '' '' || p.KNOWN_AS || '' '' || p.KNOWN_AS2 || '' '' || p.KNOWN_AS3 || '' ''|| p.KNOWN_AS4 || '' ''|| p.KNOWN_AS5';
4791           END IF;
4792         ELSE
4793           IF l_mincol_list(ATTRS.COLNUM) = 'Y' THEN
4794             IF has_context(ATTRS.custom_attribute_procedure) THEN
4795               l_custom_list(ATTRS.COLNUM) := ATTRS.custom_attribute_procedure || '(H_P_PARTY_ID(I),''PARTY'','''||ATTRS.ATTRIBUTE_NAME|| ''', ''STAGE'')';
4796             ELSE
4797               l_custom_list(ATTRS.COLNUM) := ATTRS.custom_attribute_procedure || '(H_P_PARTY_ID(I),''PARTY'','''||ATTRS.ATTRIBUTE_NAME|| ''')';
4798             END IF;
4799           END IF;
4800         END IF;
4801     END IF;
4802     idx := idx+1;
4803 
4804     -- VJN ADDED CODE FOR TRACKING CONDITION ATTRIBUTES AT THIS ENTITY LEVEL
4805     IF HZ_WORD_CONDITIONS_PKG.is_a_cond_attrib( ATTRS.attribute_id)
4806      THEN
4807          l_cond_attrib_list(ATTRS.COLNUM) := ATTRS.attribute_id ;
4808     END IF;
4809 
4810 
4811   END LOOP;
4812 
4813   IF cur_col_num<=255 THEN--bug 5977628
4814     FOR I in cur_col_num..255 LOOP
4815       l_mincol_list(I) := 'N';
4816       l_forall_list(I) := 'N';
4817       l_custom_list(I) := 'N';
4818     END LOOP;
4819   END IF;
4820 
4821   l('    IF p_party_type = ''ORGANIZATION'' THEN');
4822   l('      open x_sync_party_cur FOR ' );
4823   l('        SELECT p.PARTY_ID, p.STATUS, p.ROWID ');
4824 
4825   FOR I in 1..l_org_select.COUNT LOOP
4826     IF l_org_select(I) <> 'N' THEN
4827       l('              ,' || l_org_select(I));
4828     END IF;
4829   END LOOP;
4830 
4831   l('        FROM   HZ_PARTIES p, HZ_IMP_PARTIES_SG ps, HZ_IMP_BATCH_DETAILS bd ');
4832   l('              ,HZ_ORGANIZATION_PROFILES op ');
4833   l('        WHERE  p.request_id         = bd.main_conc_req_id ');
4834   l('        AND    bd.batch_id          = ps.batch_id ');
4835   l('        AND    p.PARTY_TYPE         = ''ORGANIZATION'' ');
4836   l('        AND    p.party_id           = ps.party_id ');
4837   l('        AND    ps.batch_id          = p_batch_id ');
4838   l('        AND    ps.party_orig_system = p_os ');
4839   l('        AND    ps.batch_mode_flag   = p_batch_mode_flag ');
4840   l('        AND    ps.action_flag       = p_operation ');
4841   l('        AND    p.party_id           = op.party_id ');
4842   l('        AND    ps.party_orig_system_reference BETWEEN p_from_osr AND p_to_osr ');
4843   l('        AND   (p.status = ''M'' OR op.effective_end_date IS NULL); ');
4844 
4845   l('    ELSIF p_party_type = ''PERSON'' THEN');
4846   l('      open x_sync_party_cur FOR ' );
4847   l('        SELECT p.PARTY_ID, p.STATUS, p.ROWID ');
4848 
4849   FOR I in 1..l_per_select.COUNT LOOP
4850     IF l_per_select(I) <> 'N' THEN
4851       l('                  ,' || l_per_select(I));
4852     END IF;
4853   END LOOP;
4854 
4855   l('        FROM   HZ_PARTIES p, HZ_IMP_PARTIES_SG ps, HZ_IMP_BATCH_DETAILS bd ');
4856   l('              ,HZ_PERSON_PROFILES pe ');
4857   l('        WHERE  p.request_id         = bd.main_conc_req_id ');
4858   l('        AND    bd.batch_id          = ps.batch_id ');
4859   l('        AND    p.PARTY_TYPE         = ''PERSON'' ');
4860   l('        AND    p.party_id           = ps.party_id ');
4861   l('        AND    ps.batch_id          = p_batch_id ');
4862   l('        AND    ps.party_orig_system = p_os ');
4863   l('        AND    ps.batch_mode_flag   = p_batch_mode_flag ');
4864   l('        AND    ps.action_flag       = p_operation ');
4865   l('        AND    p.party_id           = pe.party_id ');
4866   l('        AND    ps.party_orig_system_reference BETWEEN p_from_osr AND p_to_osr ');
4867   l('        AND   (p.status = ''M'' OR pe.effective_end_date IS NULL); ');
4868   l('    ELSE');
4869   l('      open x_sync_party_cur FOR ' );
4870   l('        SELECT p.PARTY_ID, p.STATUS, p.ROWID ');
4871 
4872   FOR I in 1..l_oth_select.COUNT LOOP
4873     IF l_oth_select(I) <> 'N' THEN
4874       l('                  ,' || l_oth_select(I));
4875     END IF;
4876   END LOOP;
4877 
4878   l('        FROM   HZ_PARTIES p, HZ_IMP_PARTIES_SG ps, HZ_IMP_BATCH_DETAILS bd ');
4879   l('        WHERE  p.request_id         = bd.main_conc_req_id ');
4880   l('        AND    bd.batch_id          = ps.batch_id ');
4884   l('        AND    ps.batch_mode_flag   = p_batch_mode_flag ');
4881   l('        AND    p.party_id           = ps.party_id ');
4882   l('        AND    ps.batch_id          = p_batch_id ');
4883   l('        AND    ps.party_orig_system = p_os ');
4885   l('        AND    ps.action_flag       = p_operation ');
4886   l('        AND    p.party_type         <> ''PERSON'' ');
4887   l('        AND    p.party_type         <> ''ORGANIZATION'' ');
4888   l('        AND    p.party_type         <> ''PARTY_RELATIONSHIP'' ');
4889   l('        AND    ps.party_orig_system_reference between p_from_osr and p_to_osr; ');
4890   l('    END IF;');
4891   l('');
4892   l('    hz_trans_pkg.set_party_type(p_party_type); ');
4893   l('');
4894   l('  END open_bulk_imp_sync_party_cur;');
4895   l('');
4896 END gen_bulk_imp_sync_party_query;
4897 
4898 -- REPURI. Proccedure to generate the code (into HZ_STAGE_MAP_TRANSFORM)
4899 -- for OPEN_SYNC_PARTY_CURSOR and SYNC_ALL_PARTIES Procedures.
4900 
4901 PROCEDURE generate_sync_party_query_proc IS
4902 
4903  cur_col_num NUMBER := 1;
4904 
4905  TYPE coltab IS TABLE OF VARCHAR2(2000) INDEX BY BINARY_INTEGER;
4906 
4907  l_org_select coltab;
4908  l_per_select coltab;
4909  l_oth_select coltab;
4910 
4911  l_forall_list coltab;
4912  l_custom_list coltab;
4913  l_mincol_list coltab;
4914  l_min_colnum NUMBER;
4915  idx NUMBER :=1;
4916  is_first boolean := true;
4917 
4918  -- VJN Introduced for conditional word replacements
4919  l_cond_attrib_list coltab ;
4920  l_idx number ;
4921 
4922 BEGIN
4923   l('');
4924   l('  PROCEDURE open_sync_party_cursor( ');
4925   l('    p_operation       IN      VARCHAR2,');
4926   l('    p_party_type      IN      VARCHAR2,');
4927   l('    p_from_rec        IN      VARCHAR2,');
4928   l('    p_to_rec          IN      VARCHAR2,');
4929   l('    x_sync_party_cur  IN OUT  HZ_DQM_SYNC.SyncCurTyp) IS ');
4930   l('');
4931   l('  BEGIN');
4932   l('');
4933 
4934   FOR ATTRS IN (SELECT a.ATTRIBUTE_ID,
4935                        a.ATTRIBUTE_NAME,
4936                        a.SOURCE_TABLE,
4937                        a.CUSTOM_ATTRIBUTE_PROCEDURE,
4938                        f.PROCEDURE_NAME,
4939                        f.STAGED_ATTRIBUTE_COLUMN,
4940                        to_number(substrb(STAGED_ATTRIBUTE_COLUMN, 3)) COLNUM
4941                 FROM HZ_TRANS_ATTRIBUTES_VL a, HZ_TRANS_FUNCTIONS_VL f
4942                 WHERE ENTITY_NAME = 'PARTY'
4943                 AND nvl(f.ACTIVE_FLAG,'Y') = 'Y'
4944                 AND f.ATTRIBUTE_ID = a.ATTRIBUTE_ID
4945                 ORDER BY COLNUM) LOOP
4946 
4947     IF cur_col_num<ATTRS.COLNUM THEN
4948       FOR I in cur_col_num..ATTRS.COLNUM-1 LOOP
4949         l_mincol_list(I) := 'N';
4950         l_forall_list(I) := 'N';
4951         l_custom_list(I) := 'N';
4952       END LOOP;
4953     END IF;
4954     cur_col_num:=ATTRS.COLNUM+1;
4955     IF has_trx_context(ATTRS.PROCEDURE_NAME) THEN
4956       l_forall_list(ATTRS.COLNUM) := ATTRS.PROCEDURE_NAME || '(H_TX'||ATTRS.COLNUM||'(I),NULL, ''' || ATTRS.ATTRIBUTE_NAME || ''',''PARTY'',''STAGE'')';
4957     ELSE
4958       l_forall_list(ATTRS.COLNUM) := ATTRS.PROCEDURE_NAME || '(H_TX'||ATTRS.COLNUM||'(I),NULL, ''' || ATTRS.ATTRIBUTE_NAME || ''',''PARTY'')';
4959     END IF;
4960     l_mincol_list(ATTRS.COLNUM) := 'N';
4961 
4962     SELECT min(to_number(substrb(STAGED_ATTRIBUTE_COLUMN, 3))) INTO l_min_colnum
4963     FROM HZ_TRANS_ATTRIBUTES_VL a, HZ_TRANS_FUNCTIONS_VL f
4964     WHERE ENTITY_NAME = 'PARTY'
4965     AND nvl(f.ACTIVE_FLAG,'Y') = 'Y'
4966     AND f.ATTRIBUTE_ID = a.ATTRIBUTE_ID
4967     AND a.ATTRIBUTE_NAME=ATTRS.ATTRIBUTE_NAME;
4968 
4969     IF ATTRS.colnum>l_min_colnum THEN
4970       l_mincol_list(ATTRS.COLNUM) := 'N';
4971     IF has_trx_context(ATTRS.PROCEDURE_NAME) THEN
4972       l_forall_list(ATTRS.COLNUM) := ATTRS.PROCEDURE_NAME || '(H_TX'||l_min_colnum||'(I),NULL, ''' || ATTRS.ATTRIBUTE_NAME || ''',''PARTY'',''STAGE'')';
4973     ELSE
4974       l_forall_list(ATTRS.COLNUM) := ATTRS.PROCEDURE_NAME || '(H_TX'||l_min_colnum||'(I),NULL, ''' || ATTRS.ATTRIBUTE_NAME || ''',''PARTY'')';
4975     END IF;
4976     ELSE
4977       l_mincol_list(ATTRS.COLNUM) := 'Y';
4978     END IF;
4979 
4980     IF ATTRS.CUSTOM_ATTRIBUTE_PROCEDURE IS NULL THEN
4981       IF l_mincol_list(ATTRS.COLNUM) = 'Y' THEN
4982         IF ATTRS.SOURCE_TABLE='HZ_ORGANIZATION_PROFILES' THEN
4983           l_org_select(idx) := 'op.'||ATTRS.ATTRIBUTE_NAME;
4984           l_per_select(idx) := 'NULL';
4985           l_oth_select(idx) := 'NULL';
4986         ELSIF ATTRS.SOURCE_TABLE='HZ_PERSON_PROFILES' THEN
4987           l_per_select(idx) := 'pe.'||ATTRS.ATTRIBUTE_NAME;
4988           l_org_select(idx) := 'NULL';
4989           l_oth_select(idx) := 'NULL';
4990         ELSIF ATTRS.SOURCE_TABLE='HZ_PERSON_PROFILES, HZ_ORGANIZATION_PROFILES' OR
4991               ATTRS.SOURCE_TABLE='HZ_ORGANIZATION_PROFILES, HZ_PERSON_PROFILES' THEN
4992           l_org_select(idx) := 'op.'||ATTRS.ATTRIBUTE_NAME;
4993           l_per_select(idx) := 'pe.'||ATTRS.ATTRIBUTE_NAME;
4994           l_oth_select(idx) := 'NULL';
4995         ELSE
4996           l_org_select(idx) := 'p.'||ATTRS.ATTRIBUTE_NAME;
4997           l_per_select(idx) := 'p.'||ATTRS.ATTRIBUTE_NAME;
4998           l_oth_select(idx) := 'p.'||ATTRS.ATTRIBUTE_NAME;
4999         END IF;
5000       ELSE
5001         l_org_select(idx):='N';
5002         l_per_select(idx):='N';
5006       l_custom_list(ATTRS.COLNUM) := 'N';
5003         l_oth_select(idx):='N';
5004       END IF;
5005 
5007     ELSE
5008         l_org_select(idx):='N';
5009         l_per_select(idx):='N';
5010         l_oth_select(idx):='N';
5011         l_custom_list(ATTRS.COLNUM) := 'N';
5012         IF ATTRS.ATTRIBUTE_NAME = 'PARTY_ALL_NAMES' THEN
5013           IF l_mincol_list(ATTRS.COLNUM) = 'Y' THEN
5014             l_org_select(idx) := 'p.PARTY_NAME || '' '' || p.KNOWN_AS || '' '' || p.KNOWN_AS2 || '' '' || p.KNOWN_AS3 || '' ''|| p.KNOWN_AS4 || '' ''|| p.KNOWN_AS5';
5015             l_per_select(idx) := 'p.PARTY_NAME || '' '' || p.KNOWN_AS || '' '' || p.KNOWN_AS2 || '' '' || p.KNOWN_AS3 || '' ''|| p.KNOWN_AS4 || '' ''|| p.KNOWN_AS5';
5016             l_oth_select(idx) := 'p.PARTY_NAME || '' '' || p.KNOWN_AS || '' '' || p.KNOWN_AS2 || '' '' || p.KNOWN_AS3 || '' ''|| p.KNOWN_AS4 || '' ''|| p.KNOWN_AS5';
5017           END IF;
5018         ELSE
5019           IF l_mincol_list(ATTRS.COLNUM) = 'Y' THEN
5020             IF has_context(ATTRS.custom_attribute_procedure) THEN
5021               l_custom_list(ATTRS.COLNUM) := ATTRS.custom_attribute_procedure || '(H_P_PARTY_ID(I),''PARTY'','''||ATTRS.ATTRIBUTE_NAME|| ''', ''STAGE'')';
5022             ELSE
5023               l_custom_list(ATTRS.COLNUM) := ATTRS.custom_attribute_procedure || '(H_P_PARTY_ID(I),''PARTY'','''||ATTRS.ATTRIBUTE_NAME|| ''')';
5024             END IF;
5025           END IF;
5026         END IF;
5027     END IF;
5028     idx := idx+1;
5029 
5030     -- VJN ADDED CODE FOR TRACKING CONDITION ATTRIBUTES AT THIS ENTITY LEVEL
5031     IF HZ_WORD_CONDITIONS_PKG.is_a_cond_attrib( ATTRS.attribute_id)
5032      THEN
5033          l_cond_attrib_list(ATTRS.COLNUM) := ATTRS.attribute_id ;
5034     END IF;
5035 
5036 
5037   END LOOP;
5038 
5039   IF cur_col_num<=255 THEN--bug 5977628
5040     FOR I in cur_col_num..255 LOOP
5041       l_mincol_list(I) := 'N';
5042       l_forall_list(I) := 'N';
5043       l_custom_list(I) := 'N';
5044     END LOOP;
5045   END IF;
5046 
5047   l('    IF p_party_type = ''ORGANIZATION'' THEN');
5048   l('      open x_sync_party_cur FOR ' );
5049   l('        SELECT p.PARTY_ID, p.STATUS, dsi.ROWID ');
5050 
5051   FOR I in 1..l_org_select.COUNT LOOP
5052     IF l_org_select(I) <> 'N' THEN
5053       l('              ,' || l_org_select(I));
5054     END IF;
5055   END LOOP;
5056 
5057   l('        FROM HZ_PARTIES p, HZ_ORGANIZATION_PROFILES op, HZ_DQM_SYNC_INTERFACE dsi ');
5058   l('        WHERE p.party_id      = op.party_id ');
5059   l('        AND   p.party_id      = dsi.party_id ');
5060   l('        AND   p.PARTY_TYPE    = ''ORGANIZATION'' ');
5061   l('        AND   dsi.entity      = ''PARTY'' ');
5062   l('        AND   dsi.staged_flag = ''N'' ');
5063   l('        AND   dsi.operation   = p_operation ');
5064   l('        AND   dsi.sync_interface_num >= p_from_rec ');
5065   l('        AND   dsi.sync_interface_num <= p_to_rec ');
5066   l('        AND   (p.status = ''M'' or op.effective_end_date is NULL); ');
5067   l('    ELSIF p_party_type = ''PERSON'' THEN');
5068   l('      open x_sync_party_cur FOR ' );
5069   l('        SELECT p.PARTY_ID, p.STATUS, dsi.ROWID ');
5070 
5071   FOR I in 1..l_per_select.COUNT LOOP
5072     IF l_per_select(I) <> 'N' THEN
5073       l('                  ,' || l_per_select(I));
5074     END IF;
5075   END LOOP;
5076 
5077   l('        FROM HZ_PARTIES p, HZ_PERSON_PROFILES pe, HZ_DQM_SYNC_INTERFACE dsi ');
5078   l('        WHERE p.party_id      = pe.party_id ');
5079   l('        AND   p.party_id      = dsi.party_id ');
5080   l('        AND   p.PARTY_TYPE    = ''PERSON'' ');
5081   l('        AND   dsi.entity      = ''PARTY'' ');
5082   l('        AND   dsi.staged_flag = ''N'' ');
5083   l('        AND   dsi.operation   = p_operation ');
5084   l('        AND   dsi.sync_interface_num >= p_from_rec ');
5085   l('        AND   dsi.sync_interface_num <= p_to_rec ');
5086   l('        AND   (p.status = ''M'' or pe.effective_end_date is NULL); ');
5087   l('    ELSE');
5088   l('      open x_sync_party_cur FOR ' );
5089   l('        SELECT p.PARTY_ID, p.STATUS, dsi.ROWID ');
5090 
5091   FOR I in 1..l_oth_select.COUNT LOOP
5092     IF l_oth_select(I) <> 'N' THEN
5093       l('                  ,' || l_oth_select(I));
5094     END IF;
5095   END LOOP;
5096 
5097   l('        FROM HZ_PARTIES p, HZ_DQM_SYNC_INTERFACE dsi ');
5098   l('        WHERE p.party_id      = dsi.party_id ');
5099   l('        AND   dsi.entity      = ''PARTY'' ');
5100   l('        AND   dsi.staged_flag = ''N'' ');
5101   l('        AND   dsi.operation   = p_operation ');
5102   l('        AND   dsi.sync_interface_num >= p_from_rec ');
5103   l('        AND   dsi.sync_interface_num <= p_to_rec ');
5104   l('        AND   p.party_type <> ''PERSON'' ');
5105   l('        AND   p.party_type <> ''ORGANIZATION'' ');
5106   l('        AND   p.party_type <> ''PARTY_RELATIONSHIP''; ');
5107   l('    END IF;');
5108   l('    hz_trans_pkg.set_party_type(p_party_type); ');
5109   l('  END;');
5110 
5111   l('');
5112   l('  PROCEDURE sync_all_parties ( ');
5113   l('    p_operation             IN VARCHAR2, ');
5114   l('    p_bulk_sync_type        IN VARCHAR2, ');
5115   l('    p_sync_all_party_cur    IN HZ_DQM_SYNC.SyncCurTyp) IS ');
5116   l('');
5117   l('    l_limit         NUMBER  := ' || g_batch_size || ';');
5118   l('    l_last_fetch    BOOLEAN := FALSE;');
5119   l('    l_sql_errm      VARCHAR2(2000); ');
5120   l('    l_st            NUMBER; ');
5124   l('');
5121   l('    l_en            NUMBER; ');
5122   l('    l_err_index     NUMBER; ');
5123   l('    l_err_count     NUMBER; ');
5125   l('    bulk_errors     EXCEPTION; ');
5126   l('    PRAGMA EXCEPTION_INIT(bulk_errors, -24381); ');
5127   l('');
5128   l('  BEGIN');
5129   l('    log (''Begin Synchronizing Parties''); ');
5130   l('    LOOP');
5131   l('      log (''Bulk Collecting Parties Data...'',FALSE); ');
5132   l('      FETCH p_sync_all_party_cur BULK COLLECT INTO');
5133   l('         H_P_PARTY_ID');
5134   l('        ,H_STATUS');
5135   l('        ,H_ROWID');
5136 
5137   FOR I IN 1..255 LOOP
5138     IF l_forall_list(I) <> 'N' AND l_mincol_list(I) = 'Y' AND
5139        l_custom_list(I) = 'N' THEN
5140       l('        ,H_TX'||I);
5141     END IF;
5142   END LOOP;
5143 
5144   l('      LIMIT l_limit;');
5145   l('      log (''Done''); ');
5146   l('');
5147   l('      IF p_sync_all_party_cur%NOTFOUND THEN');
5148   l('        l_last_fetch:=TRUE;');
5149   l('      END IF;');
5150   l('');
5151   l('      IF H_P_PARTY_ID.COUNT=0 AND l_last_fetch THEN');
5152   l('        EXIT;');
5153   l('      END IF;');
5154   l('');
5155   l('      log (''Synchronizing for ''||H_P_PARTY_ID.COUNT||'' Parties''); ');
5156   l('      log (''Populating Party Transformation Functions into Arrays...'',FALSE); ');
5157   l('      FOR I in H_P_PARTY_ID.FIRST..H_P_PARTY_ID.LAST LOOP');
5158 
5159   -- VJN INTRODUCED FOR CONDITIONAL REPLACEMENTS
5160   -- CYCLE THROUGH THE CONDITON LIST AND GENERATE THE CODE
5161   -- FOR POPULATING THE GLOBAL CONDITION RECORD
5162 
5163   l_idx := l_cond_attrib_list.FIRST ;
5164   IF l_idx IS NOT NULL
5165   THEN
5166     l('        ---- SETTING GLOBAL CONDITION RECORD AT THE PARTY LEVEL ----');
5167     l('');
5168   END IF ;
5169 
5170   WHILE l_cond_attrib_list.EXISTS(l_idx)
5171   LOOP
5172       l('        HZ_WORD_CONDITIONS_PKG.set_gbl_condition_rec ('||l_cond_attrib_list(l_idx)||','||'H_TX'||l_idx||'(I));');
5173       l_idx := l_idx+1;
5174   END LOOP;
5175 
5176   l('');
5177 
5178   FOR I IN 1..255 LOOP
5179     IF l_forall_list(I) <> 'N' THEN
5180       IF l_custom_list(I) <> 'N' AND l_mincol_list(I) = 'Y' THEN
5181         l('        H_TX'||I||'(I):='||l_custom_list(I)||';');
5182       END IF;
5183     END IF;
5184   END LOOP;
5185   FOR I IN 1..255 LOOP
5186     IF l_forall_list(I) <> 'N' THEN
5187       IF l_mincol_list(I) <> 'Y' THEN
5188         l('        H_TX'||I||'(I):='||l_forall_list(I)||';');
5189       END IF;
5190     END IF;
5191   END LOOP;
5192   FOR I IN 1..255 LOOP
5193     IF l_forall_list(I) <> 'N' THEN
5194       IF l_mincol_list(I) = 'Y' THEN
5195         l('        H_TX'||I||'(I):='||l_forall_list(I)||';');
5196       END IF;
5197     END IF;
5198   END LOOP;
5199   l('      END LOOP;');
5200   l('      log (''Done''); ');
5201   l('');
5202   l('      l_st := 1;  ');
5203   l('      l_en := H_P_PARTY_ID.COUNT; ');
5204   l('');
5205   l('      IF p_operation = ''C'' THEN ');
5206   l('        BEGIN  ');
5207   l('          log (''Inserting Data into HZ_STAGED_PARTIES...'',FALSE); ');
5208   l('          FORALL I in l_st..l_en SAVE EXCEPTIONS ');
5209   l('            INSERT INTO HZ_STAGED_PARTIES (');
5210   l('               PARTY_ID');
5211   l('  	           ,STATUS');
5212   l('              ,D_PS');
5213   l('              ,D_CT');
5214   l('              ,D_CPT');
5215 
5216   FOR I IN 1..255 LOOP
5217     IF l_forall_list(I) <> 'N' THEN
5218       l('              ,TX'||I);
5219     END IF;
5220   END LOOP;
5221 
5222   l('            ) VALUES (');
5223   l('               H_P_PARTY_ID(I)');
5224   l('              ,H_STATUS(I)');
5225   l('              ,''SYNC'' ');
5226   l('              ,''SYNC'' ');
5227   l('              ,''SYNC'' ');
5228 
5229   FOR I IN 1..255 LOOP
5230     IF l_forall_list(I) <> 'N' THEN
5231       l('              ,decode(H_TX'||I||'(I),null,H_TX'||I||'(I),H_TX'||I||'(I)||'' '')');
5232     END IF;
5233   END LOOP;
5234 
5235   l('            );');
5236   l('          log (''Done''); ');
5237   l('        EXCEPTION  WHEN bulk_errors THEN ');
5238   l('          l_err_count := SQL%BULK_EXCEPTIONS.COUNT; ');
5239   l('          FOR indx IN 1..l_err_count LOOP ');
5240   l('            l_err_index := SQL%BULK_EXCEPTIONS(indx).ERROR_INDEX; ');
5241   l('            l_sql_errm  := sqlerrm(-SQL%BULK_EXCEPTIONS(indx).ERROR_CODE); ');
5242   -- SCHITRAP: Bug:5357970 - Error code is a number. Oracle error for ''DUP_VAL_ON_INDEX'' is ORA-00001
5243   --l('            IF (SQL%BULK_EXCEPTIONS(indx).ERROR_CODE) = ''DUP_VAL_ON_INDEX'' THEN ');
5244   l('            IF (instr(l_sql_errm,''ORA-00001'')>0) THEN  ');
5245   l('              log (''Exception DUP_VAL_ON_INDEX occured while inserting Party with PARTY_ID - ''||H_P_PARTY_ID(l_err_index)); ');
5246   l('              DELETE FROM HZ_DQM_SYNC_INTERFACE WHERE ENTITY=''PARTY'' AND OPERATION=''C'' AND PARTY_ID=H_P_PARTY_ID(l_err_index);	');
5247   l('            ELSE ');
5248   l('              IF p_bulk_sync_type = ''DQM_SYNC'' THEN ');
5249   l('                UPDATE hz_dqm_sync_interface ');
5250   l('                  SET  error_data = l_sql_errm ');
5251   l('                  ,staged_flag    = decode (error_data, NULL, ''N'', ''E'') ');
5252   l('                WHERE rowid       = H_ROWID(l_err_index); ');
5253   l('              ELSIF  p_bulk_sync_type = ''IMPORT_SYNC'' THEN ');
5257   l('            END IF; ');
5254   l('                -- Insert the Error Record into HZ_DQM_SYNC_INTERFACE table ');
5255   l('                insert_dqm_sync_error_rec(H_P_PARTY_ID(l_err_index), NULL, NULL, NULL, ''PARTY'', p_operation, ''E'', ''N'', l_sql_errm); ');
5256   l('              END IF; ');
5258   l('          END LOOP; ');
5259   l('        END; ');
5260   l('      ELSIF p_operation = ''U'' THEN ');
5261   l('        BEGIN ');
5262   l('          log (''Updating Data in HZ_STAGED_PARTIES...'',FALSE); ');
5263   l('          FORALL I in l_st..l_en SAVE EXCEPTIONS ');
5264   l('            UPDATE HZ_STAGED_PARTIES SET ');
5265   l('               status =H_STATUS(I) ');
5266   l('              ,concat_col = concat_col ');
5267 
5268   FOR I IN 1..255 LOOP
5269     IF l_forall_list(I) <> 'N' THEN
5270             l('                ,TX'||I||'=decode(H_TX'||I||'(I),null,H_TX'||I||'(I),H_TX'||I||'(I)||'' '')');
5271     END IF;
5272   END LOOP;
5273 
5274   l('            WHERE PARTY_ID = H_P_PARTY_ID(I);');
5275   l('          log (''Done''); ');
5276   l('        EXCEPTION WHEN bulk_errors THEN ');
5277   l('          l_err_count := SQL%BULK_EXCEPTIONS.COUNT; ');
5278   l('          FOR indx IN 1..l_err_count LOOP ');
5279   l('            l_err_index := SQL%BULK_EXCEPTIONS(indx).ERROR_INDEX; ');
5280   l('            l_sql_errm  := sqlerrm(-SQL%BULK_EXCEPTIONS(indx).ERROR_CODE); ');
5281   -- SCHITRAP: Bug:5357970 - Error code is a number. Oracle error for ''DUP_VAL_ON_INDEX'' is ORA-00001
5282   --l('            IF (SQL%BULK_EXCEPTIONS(indx).ERROR_CODE) = ''DUP_VAL_ON_INDEX'' THEN ');
5283   l('            IF (instr(l_sql_errm,''ORA-00001'')>0) THEN  ');
5284   l('              log (''Exception DUP_VAL_ON_INDEX occured while inserting Party with PARTY_ID - ''||H_P_PARTY_ID(l_err_index)); ');
5285   l('              DELETE FROM HZ_DQM_SYNC_INTERFACE WHERE ENTITY=''PARTY'' AND OPERATION=''U'' AND PARTY_ID=H_P_PARTY_ID(l_err_index);	');
5286   l('            ELSE ');
5287   l('              IF p_bulk_sync_type = ''DQM_SYNC'' THEN ');
5288   l('                UPDATE hz_dqm_sync_interface ');
5289   l('                  SET  error_data  = l_sql_errm ');
5290   l('                  ,staged_flag     = decode (error_data, NULL, ''N'', ''E'') ');
5291   l('                WHERE rowid        = H_ROWID(l_err_index); ');
5292   l('              ELSIF  p_bulk_sync_type = ''IMPORT_SYNC'' THEN ');
5293   l('                -- Insert the Error Record into HZ_DQM_SYNC_INTERFACE table ');
5294   l('                insert_dqm_sync_error_rec(H_P_PARTY_ID(l_err_index), NULL, NULL, NULL, ''PARTY'', p_operation, ''E'', ''N'', l_sql_errm); ');
5295   l('              END IF; ');
5296   l('            END IF; ');
5297   l('          END LOOP; ');
5298   l('        END; ');
5299   l('      END IF; ');
5300   l('');
5301   l('      -- REPURI. Bug 4884742. ');
5302   l('      -- Bulk Insert the Import Parties into  Shadow Sync Interface table ');
5303   l('      -- if Shadow Staging has already run and completed successfully ');
5304   l('      IF ((p_bulk_sync_type = ''IMPORT_SYNC'') AND ');
5305   l('          (HZ_DQM_SYNC.is_shadow_staging_complete)) THEN ');
5306   l('        BEGIN ');
5307   l('           -- REPURI. Bug 4968126. ');
5308   l('           -- Using the Merge instead of Insert statement ');
5309   l('           -- so that duplicate records dont get inserted. ');
5310   l('          log (''Merging data into HZ_DQM_SH_SYNC_INTERFACE...'',FALSE); ');
5311   l('          FORALL I in l_st..l_en  ');
5312   l('            MERGE INTO hz_dqm_sh_sync_interface S ');
5313   l('              USING ( ');
5314   l('                SELECT ');
5315   l('                  H_P_PARTY_ID(I) AS party_id ');
5316   l('                FROM dual ) T ');
5317   l('              ON (S.entity      = ''PARTY''  AND ');
5318   l('                  S.party_id    = T.party_id AND ');
5319   l('                  S.staged_flag <> ''E'') ');
5320   l('              WHEN NOT MATCHED THEN ');
5321   l('              INSERT ( ');
5322   l('                PARTY_ID, ');
5323   l('                RECORD_ID, ');
5324   l('                PARTY_SITE_ID, ');
5325   l('                ORG_CONTACT_ID, ');
5326   l('                ENTITY, ');
5327   l('                OPERATION, ');
5328   l('                STAGED_FLAG, ');
5329   l('                REALTIME_SYNC_FLAG, ');
5330   l('                CREATED_BY, ');
5331   l('                CREATION_DATE, ');
5332   l('                LAST_UPDATE_LOGIN, ');
5333   l('                LAST_UPDATE_DATE, ');
5334   l('                LAST_UPDATED_BY, ');
5335   l('                SYNC_INTERFACE_NUM ');
5336   l('              ) VALUES ( ');
5337   l('                H_P_PARTY_ID(I), ');
5338   l('                NULL, ');
5339   l('                NULL, ');
5340   l('                NULL, ');
5341   l('                ''PARTY'', ');
5342   l('                p_operation, ');
5343   l('                ''N'', ');
5344   l('                ''N'', ');
5345   l('                hz_utility_pub.created_by, ');
5346   l('                hz_utility_pub.creation_date, ');
5347   l('                hz_utility_pub.last_update_login, ');
5348   l('                hz_utility_pub.last_update_date, ');
5349   l('                hz_utility_pub.user_id, ');
5350   l('                HZ_DQM_SH_SYNC_INTERFACE_S.nextval ');
5351   l('            ); ');
5352   l('        log (''Done''); ');
5353   l('        EXCEPTION WHEN OTHERS THEN ');
5354   l('              log (''Exception occured while inserting data into HZ_DQM_SH_SYNC_INTERFACE Table'');   ');
5358   l('');
5355   l('              log (''Eror Message is - ''|| sqlerrm);   ');
5356   l('        END; ');
5357   l('      END IF; ');
5359   l('      IF l_last_fetch THEN');
5360   l('        FND_CONCURRENT.AF_Commit;');
5361   l('        EXIT;');
5362   l('      END IF;');
5363   l('');
5364   l('      FND_CONCURRENT.AF_Commit;');
5365   l('');
5366   l('    END LOOP;');
5367   l('    log (''End Synchronizing Parties''); ');
5368   l('  END;');
5369 
5370 END;
5371 
5372 PROCEDURE generate_party_query_proc IS
5373  cur_col_num NUMBER := 1;
5374 
5375  TYPE coltab IS TABLE OF VARCHAR2(2000) INDEX BY BINARY_INTEGER;
5376 
5377  l_org_select coltab;
5378  l_per_select coltab;
5379  l_oth_select coltab;
5380 
5381  l_forall_list coltab;
5382  l_custom_list coltab;
5383  l_mincol_list coltab;
5384  l_min_colnum NUMBER;
5385  idx NUMBER :=1;
5386  is_first boolean := true;
5387 
5388  -- VJN Introduced for conditional word replacements
5389  l_cond_attrib_list coltab ;
5390  l_idx number ;
5391  l_attr_name     varchar2(2000); --Bug No: 4279469
5392  l_org_attr_name varchar2(2000); --Bug No: 4279469
5393  l_per_attr_name varchar2(2000); --Bug No: 4279469
5394 
5395 BEGIN
5396   l('');
5397   l('  PROCEDURE open_party_cursor( ');
5398   l('    p_select_type	IN	VARCHAR2,');
5399   l('    p_party_type	IN	VARCHAR2,');
5400   l('    p_worker_number IN	NUMBER,');
5401   l('    p_num_workers	IN	NUMBER,');
5402   l('    p_party_id	IN	NUMBER,');
5403   l('    p_continue	IN	VARCHAR2,');
5404   l('    x_party_cur	IN OUT	HZ_PARTY_STAGE.StageCurTyp) IS ');
5405   l('');
5406   l('    l_party_type VARCHAR2(255);');
5407   l('  BEGIN');
5408 
5409   FOR ATTRS IN (SELECT a.ATTRIBUTE_ID,
5410                        a.ATTRIBUTE_NAME,
5411                        a.SOURCE_TABLE,
5412                        a.CUSTOM_ATTRIBUTE_PROCEDURE,
5413                        f.PROCEDURE_NAME,
5414                        f.STAGED_ATTRIBUTE_COLUMN,
5415                        to_number(substrb(STAGED_ATTRIBUTE_COLUMN, 3)) COLNUM,
5416 		       nvl(TAG,'C') column_data_type --Bug No: 4279469
5417                 FROM HZ_TRANS_ATTRIBUTES_VL a, HZ_TRANS_FUNCTIONS_VL f,FND_LOOKUP_VALUES_VL lkp --Bug No: 4279469
5418                 WHERE ENTITY_NAME = 'PARTY'
5419                 AND nvl(f.ACTIVE_FLAG,'Y') = 'Y'
5420                 AND f.ATTRIBUTE_ID = a.ATTRIBUTE_ID
5421 		AND lkp.LOOKUP_TYPE = 'PARTY_LOGICAL_ATTRIBUTE_LIST' --Bug No: 4279469
5422 		AND lkp.LOOKUP_CODE = a.ATTRIBUTE_NAME --Bug No: 4279469
5423                 ORDER BY COLNUM) LOOP
5424 
5425     IF cur_col_num<ATTRS.COLNUM THEN
5426       FOR I in cur_col_num..ATTRS.COLNUM-1 LOOP
5427         l_mincol_list(I) := 'N';
5428         l_forall_list(I) := 'N';
5429         l_custom_list(I) := 'N';
5430       END LOOP;
5431     END IF;
5432     cur_col_num:=ATTRS.COLNUM+1;
5433     IF has_trx_context(ATTRS.PROCEDURE_NAME) THEN
5434       l_forall_list(ATTRS.COLNUM) := ATTRS.PROCEDURE_NAME || '(H_TX'||ATTRS.COLNUM||'(I),NULL, ''' || ATTRS.ATTRIBUTE_NAME || ''',''PARTY'',''STAGE'')';
5435     ELSE
5436       l_forall_list(ATTRS.COLNUM) := ATTRS.PROCEDURE_NAME || '(H_TX'||ATTRS.COLNUM||'(I),NULL, ''' || ATTRS.ATTRIBUTE_NAME || ''',''PARTY'')';
5437     END IF;
5438     l_mincol_list(ATTRS.COLNUM) := 'N';
5439 
5440     SELECT min(to_number(substrb(STAGED_ATTRIBUTE_COLUMN, 3))) INTO l_min_colnum
5441     FROM HZ_TRANS_ATTRIBUTES_VL a, HZ_TRANS_FUNCTIONS_VL f
5442     WHERE ENTITY_NAME = 'PARTY'
5443     AND nvl(f.ACTIVE_FLAG,'Y') = 'Y'
5444     AND f.ATTRIBUTE_ID = a.ATTRIBUTE_ID
5445     AND a.ATTRIBUTE_NAME=ATTRS.ATTRIBUTE_NAME;
5446 
5447     IF ATTRS.colnum>l_min_colnum THEN
5448       l_mincol_list(ATTRS.COLNUM) := 'N';
5449     IF has_trx_context(ATTRS.PROCEDURE_NAME) THEN
5450       l_forall_list(ATTRS.COLNUM) := ATTRS.PROCEDURE_NAME || '(H_TX'||l_min_colnum||'(I),NULL, ''' || ATTRS.ATTRIBUTE_NAME || ''',''PARTY'',''STAGE'')';
5451     ELSE
5452       l_forall_list(ATTRS.COLNUM) := ATTRS.PROCEDURE_NAME || '(H_TX'||l_min_colnum||'(I),NULL, ''' || ATTRS.ATTRIBUTE_NAME || ''',''PARTY'')';
5453     END IF;
5454     ELSE
5455       l_mincol_list(ATTRS.COLNUM) := 'Y';
5456     END IF;
5457 
5458     IF ATTRS.CUSTOM_ATTRIBUTE_PROCEDURE IS NULL THEN
5459       IF l_mincol_list(ATTRS.COLNUM) = 'Y' THEN
5460 	 -----Start of Bug No: 4279469----------
5461 	 l_attr_name := ATTRS.ATTRIBUTE_NAME;
5462          IF(ATTRS.column_data_type ='D') THEN
5463 	  l_org_attr_name := 'TO_CHAR(op.'||l_attr_name||',''DD-MON-YYYY'') '||l_attr_name;
5464 	  l_per_attr_name := 'TO_CHAR(pe.'||l_attr_name||',''DD-MON-YYYY'') '||l_attr_name;
5465 	  l_attr_name     := 'TO_CHAR(p.'||l_attr_name||',''DD-MON-YYYY'') '||l_attr_name;
5466          ELSE
5467 	  l_org_attr_name := 'op.'||l_attr_name;
5468 	  l_per_attr_name := 'pe.'||l_attr_name;
5469           l_attr_name     := 'p.'||l_attr_name;
5470 	 END IF;
5471          -----End of Bug No: 4279469------------
5472         IF ATTRS.SOURCE_TABLE='HZ_ORGANIZATION_PROFILES' THEN
5473           l_org_select(idx) := l_org_attr_name;
5474           l_per_select(idx) := 'NULL';
5475           l_oth_select(idx) := 'NULL';
5476         ELSIF ATTRS.SOURCE_TABLE='HZ_PERSON_PROFILES' THEN
5477           l_per_select(idx) := l_per_attr_name;
5478           l_org_select(idx) := 'NULL';
5479           l_oth_select(idx) := 'NULL';
5480         ELSIF ATTRS.SOURCE_TABLE='HZ_PERSON_PROFILES, HZ_ORGANIZATION_PROFILES' OR
5481               ATTRS.SOURCE_TABLE='HZ_ORGANIZATION_PROFILES, HZ_PERSON_PROFILES' THEN
5482           l_org_select(idx) := l_org_attr_name;
5483           l_per_select(idx) := l_per_attr_name;
5484           l_oth_select(idx) := 'NULL';
5485         ELSE
5486           l_org_select(idx) := l_attr_name;
5487           l_per_select(idx) := l_attr_name;
5488           l_oth_select(idx) := l_attr_name;
5489         END IF;
5490       ELSE
5491         l_org_select(idx):='N';
5492         l_per_select(idx):='N';
5493         l_oth_select(idx):='N';
5494       END IF;
5495 
5496       l_custom_list(ATTRS.COLNUM) := 'N';
5497     ELSE
5498         l_org_select(idx):='N';
5499         l_per_select(idx):='N';
5500         l_oth_select(idx):='N';
5501         l_custom_list(ATTRS.COLNUM) := 'N';
5502         IF ATTRS.ATTRIBUTE_NAME = 'PARTY_ALL_NAMES' THEN
5503           IF l_mincol_list(ATTRS.COLNUM) = 'Y' THEN
5504             l_org_select(idx) := 'p.PARTY_NAME || '' '' || p.KNOWN_AS || '' '' || p.KNOWN_AS2 || '' '' || p.KNOWN_AS3 || '' ''|| p.KNOWN_AS4 || '' ''|| p.KNOWN_AS5';
5505             l_per_select(idx) := 'p.PARTY_NAME || '' '' || p.KNOWN_AS || '' '' || p.KNOWN_AS2 || '' '' || p.KNOWN_AS3 || '' ''|| p.KNOWN_AS4 || '' ''|| p.KNOWN_AS5';
5506             l_oth_select(idx) := 'p.PARTY_NAME || '' '' || p.KNOWN_AS || '' '' || p.KNOWN_AS2 || '' '' || p.KNOWN_AS3 || '' ''|| p.KNOWN_AS4 || '' ''|| p.KNOWN_AS5';
5507           END IF;
5508         ELSE
5509           IF l_mincol_list(ATTRS.COLNUM) = 'Y' THEN
5510             IF has_context(ATTRS.custom_attribute_procedure) THEN
5511               l_custom_list(ATTRS.COLNUM) := ATTRS.custom_attribute_procedure || '(H_P_PARTY_ID(I),''PARTY'','''||ATTRS.ATTRIBUTE_NAME|| ''', ''STAGE'')';
5512             ELSE
5513               l_custom_list(ATTRS.COLNUM) := ATTRS.custom_attribute_procedure || '(H_P_PARTY_ID(I),''PARTY'','''||ATTRS.ATTRIBUTE_NAME|| ''')';
5514             END IF;
5515           END IF;
5516         END IF;
5517     END IF;
5518     idx := idx+1;
5519 
5520     -- VJN ADDED CODE FOR TRACKING CONDITION ATTRIBUTES AT THIS ENTITY LEVEL
5521     IF HZ_WORD_CONDITIONS_PKG.is_a_cond_attrib( ATTRS.attribute_id)
5522      THEN
5523          l_cond_attrib_list(ATTRS.COLNUM) := ATTRS.attribute_id ;
5524     END IF;
5525 
5526 
5527   END LOOP;
5528 
5529   IF cur_col_num<=255 THEN--bug 5977628
5530     FOR I in cur_col_num..255 LOOP
5531       l_mincol_list(I) := 'N';
5532       l_forall_list(I) := 'N';
5533       l_custom_list(I) := 'N';
5534     END LOOP;
5535   END IF;
5536 
5537   l('    IF p_select_type = ''SINGLE_PARTY'' THEN');
5538   l('      NULL;');
5539   l('    ELSIF p_select_type = ''ALL_PARTIES'' THEN');
5540   l('      IF p_continue IS NULL OR p_continue<>''Y'' THEN');
5541   l('        IF p_party_type = ''ORGANIZATION'' THEN');
5542   l('          open x_party_cur FOR ' );
5543   l('            SELECT p.PARTY_ID, p.STATUS ');
5544   FOR I in 1..l_org_select.COUNT LOOP
5545     IF l_org_select(I) <> 'N' THEN
5546       l('                  ,' || l_org_select(I));
5547     END IF;
5548   END LOOP;
5549 
5550   l('            FROM HZ_PARTIES p, HZ_ORGANIZATION_PROFILES op ');
5551   l('            WHERE mod(p.PARTY_ID, p_num_workers) = p_worker_number ');
5552   l('            AND p.party_id = op.party_id ');
5556   l('          open x_party_cur FOR ' );
5553   l('            AND op.effective_end_date is NULL ');
5554   l('            AND p.PARTY_TYPE =''ORGANIZATION''; ');
5555   l('        ELSIF p_party_type = ''PERSON'' THEN');
5557   l('            SELECT p.PARTY_ID, p.STATUS ');
5558   FOR I in 1..l_per_select.COUNT LOOP
5559     IF l_per_select(I) <> 'N' THEN
5560       l('                  ,' || l_per_select(I));
5561     END IF;
5562   END LOOP;
5563   l('            FROM HZ_PARTIES p, HZ_PERSON_PROFILES pe ');
5564   l('            WHERE mod(p.PARTY_ID, p_num_workers) = p_worker_number ');
5565   l('            AND p.party_id = pe.party_id ');
5566   l('            AND pe.effective_end_date is NULL ');
5567   l('            AND p.PARTY_TYPE =''PERSON''; ');
5568   l('        ELSE');
5569   l('          open x_party_cur FOR ' );
5570   l('            SELECT p.PARTY_ID, p.STATUS ');
5571   FOR I in 1..l_oth_select.COUNT LOOP
5572     IF l_oth_select(I) <> 'N' THEN
5573       l('                  ,' || l_oth_select(I));
5574     END IF;
5575   END LOOP;
5576   l('            FROM HZ_PARTIES p ');
5577   l('            WHERE mod(p.PARTY_ID, p_num_workers) = p_worker_number ');
5578   l('            AND p.party_type <> ''PERSON'' ');
5579   l('            AND p.party_type <> ''ORGANIZATION'' ');
5580   l('            AND p.party_type <> ''PARTY_RELATIONSHIP''; ');
5581   l('        END IF;');
5582   l('      ELSE');
5583   l('        IF p_party_type = ''ORGANIZATION'' THEN');
5584   l('          open x_party_cur FOR ' );
5585   l('            SELECT p.PARTY_ID, p.STATUS ');
5586   FOR I in 1..l_org_select.COUNT LOOP
5587     IF l_org_select(I) <> 'N' THEN
5588       l('                  ,' || l_org_select(I));
5589     END IF;
5590   END LOOP;
5591 
5592   l('            FROM HZ_PARTIES p, HZ_ORGANIZATION_PROFILES op ');
5593   l('            WHERE mod(p.PARTY_ID, p_num_workers) = p_worker_number ');
5594   l('            AND NOT EXISTS (select 1 FROM HZ_STAGED_PARTIES sp  ');
5595   l('                            WHERE sp.party_id = p.party_id)   ' );
5596   l('            AND p.party_id = op.party_id ');
5597   l('            AND op.effective_end_date is NULL ');
5598   l('            AND p.PARTY_TYPE =''ORGANIZATION''; ');
5599   l('        ELSIF p_party_type = ''PERSON'' THEN');
5600   l('          open x_party_cur FOR ' );
5601   l('            SELECT p.PARTY_ID, p.STATUS ');
5602   FOR I in 1..l_per_select.COUNT LOOP
5603     IF l_per_select(I) <> 'N' THEN
5604       l('                  ,' || l_per_select(I));
5605     END IF;
5606   END LOOP;
5607   l('            FROM HZ_PARTIES p, HZ_PERSON_PROFILES pe ');
5608   l('            WHERE mod(p.PARTY_ID, p_num_workers) = p_worker_number ');
5609   l('            AND NOT EXISTS (select 1 FROM HZ_STAGED_PARTIES sp  ');
5610   l('                            WHERE sp.party_id = p.party_id)   ' );
5611   l('            AND p.party_id = pe.party_id ');
5612   l('            AND pe.effective_end_date is NULL ');
5613   l('            AND p.PARTY_TYPE =''PERSON''; ');
5614   l('        ELSE');
5615   l('          open x_party_cur FOR ' );
5616   l('            SELECT p.PARTY_ID, p.STATUS ');
5617   FOR I in 1..l_oth_select.COUNT LOOP
5618     IF l_oth_select(I) <> 'N' THEN
5619       l('                  ,' || l_oth_select(I));
5620     END IF;
5621   END LOOP;
5622   l('            FROM HZ_PARTIES p ');
5623   l('            WHERE mod(p.PARTY_ID, p_num_workers) = p_worker_number ');
5624   l('            AND NOT EXISTS (select 1 FROM HZ_STAGED_PARTIES sp  ');
5625   l('                            WHERE sp.party_id = p.party_id)   ' );
5626   l('            AND p.party_type <> ''PERSON'' ');
5627   l('            AND p.party_type <> ''ORGANIZATION'' ');
5628   l('            AND p.party_type <> ''PARTY_RELATIONSHIP''; ');
5629   l('        END IF;');
5630   l('      END IF;');
5631   l('    END IF;');
5632   l('  END;');
5633 
5634   l('');
5635   l('  PROCEDURE insert_stage_parties ( ');
5636   l('    p_continue     IN VARCHAR2, ');
5637   l('    p_party_cur    IN HZ_PARTY_STAGE.StageCurTyp) IS ');
5638   l(' l_limit NUMBER := ' || g_batch_size || ';');
5639   l(' l_contact_cur HZ_PARTY_STAGE.StageCurTyp;');
5640   l(' l_cpt_cur HZ_PARTY_STAGE.StageCurTyp;');
5641   l(' l_party_site_cur HZ_PARTY_STAGE.StageCurTyp;');
5642   l(' l_last_fetch BOOLEAN := FALSE;');
5643   l(' call_status BOOLEAN;');
5644   l(' rphase varchar2(255);');
5645   l(' rstatus varchar2(255);');
5646   l(' dphase varchar2(255);');
5647   l(' dstatus varchar2(255);');
5648   l(' message varchar2(255);');
5649   l(' req_id NUMBER;');
5650   l(' l_st number; ');
5651   l(' l_en number; ');
5652   l(' USER_TERMINATE EXCEPTION;');
5653   l('');
5654   l('  BEGIN');
5655   l('    req_id := FND_GLOBAL.CONC_REQUEST_ID;');
5656   l('    LOOP');
5657   l('      call_status := FND_CONCURRENT.GET_REQUEST_STATUS(');
5658   l('                req_id, null,null,rphase,rstatus,dphase,dstatus,message);');
5659   l('      IF dstatus = ''TERMINATING'' THEN');
5660   l('        FND_FILE.put_line(FND_FILE.log,''Aborted by User'');');
5661   l('        RAISE USER_TERMINATE;');
5662   l('      END IF;');
5663   l('      FETCH p_party_cur BULK COLLECT INTO');
5664   l('        H_P_PARTY_ID');
5665   l('        , H_STATUS');
5666   FOR I IN 1..255 LOOP
5667     IF l_forall_list(I) <> 'N' AND l_mincol_list(I) = 'Y' AND
5668        l_custom_list(I) = 'N' THEN
5669       l('         ,H_TX'||I);
5670     END IF;
5671   END LOOP;
5672   l('      LIMIT l_limit;');
5673   l('');
5677 
5674   l('    IF p_party_cur%NOTFOUND THEN');
5675   l('      l_last_fetch:=TRUE;');
5676   l('    END IF;');
5678   l('    IF H_P_PARTY_ID.COUNT=0 AND l_last_fetch THEN');
5679   l('      EXIT;');
5680   l('    END IF;');
5681 
5682   l('    FOR I in H_P_PARTY_ID.FIRST..H_P_PARTY_ID.LAST LOOP');
5683 
5684  -- VJN INTRODUCED FOR CONDITIONAL REPLACEMENTS
5685   -- CYCLE THROUGH THE CONDITON LIST AND GENERATE THE CODE
5686   -- FOR POPULATING THE GLOBAL CONDITION RECORD
5687 
5688   l_idx := l_cond_attrib_list.FIRST ;
5689   IF l_idx IS NOT NULL
5690   THEN
5691     l('----------- SETTING GLOBAL CONDITION RECORD AT THE PARTY LEVEL ---------');
5692   END IF ;
5693 
5694 
5695   WHILE l_cond_attrib_list.EXISTS(l_idx)
5696   LOOP
5697 
5698       l('     HZ_WORD_CONDITIONS_PKG.set_gbl_condition_rec ('||l_cond_attrib_list(l_idx)||','||'H_TX'||l_idx||'(I));');
5699       l_idx := l_idx+1;
5700   END LOOP;
5701 
5702 
5703   l('');
5704 
5705 
5706   FOR I IN 1..255 LOOP
5707     IF l_forall_list(I) <> 'N' THEN
5708       IF l_custom_list(I) <> 'N' AND l_mincol_list(I) = 'Y' THEN
5709         l('         H_TX'||I||'(I):='||l_custom_list(I)||';');
5710       END IF;
5711     END IF;
5712   END LOOP;
5713   FOR I IN 1..255 LOOP
5714     IF l_forall_list(I) <> 'N' THEN
5715       IF l_mincol_list(I) <> 'Y' THEN
5716         l('         H_TX'||I||'(I):='||l_forall_list(I)||';');
5717       END IF;
5718     END IF;
5719   END LOOP;
5720   FOR I IN 1..255 LOOP
5721     IF l_forall_list(I) <> 'N' THEN
5722       IF l_mincol_list(I) = 'Y' THEN
5723         l('         H_TX'||I||'(I):='||l_forall_list(I)||';');
5724       END IF;
5725     END IF;
5726   END LOOP;
5727   l('      H_PARTY_INDEX(I) := I;');
5728   l('      H_PS_DEN(I) := '' '';');
5729   l('      H_CT_DEN(I) := '' '';');
5730   l('      H_CPT_DEN(I) := '' '';');
5731   l('    END LOOP;');
5732 
5733   l('    SAVEPOINT party_batch;');
5734   l('    BEGIN ');
5735   l('      l_st := 1;  ');
5736   l('      l_en := H_P_PARTY_ID.COUNT; ');
5737   l('      LOOP ');
5738   l('          BEGIN  ');
5739   l('          FORALL I in l_st..l_en');
5740   l('            INSERT INTO HZ_STAGED_PARTIES (');
5741   l('	           PARTY_ID');
5742   l('  	           ,STATUS');
5743   FOR I IN 1..255 LOOP
5744     IF l_forall_list(I) <> 'N' THEN
5745       l('               , TX'||I);
5746     END IF;
5747   END LOOP;
5748   l('             ) VALUES (');
5749   l('             H_P_PARTY_ID(I)');
5750   l('             ,H_STATUS(I)');
5751   FOR I IN 1..255 LOOP
5752     IF l_forall_list(I) <> 'N' THEN
5753       l('             , decode(H_TX'||I||'(I),null,H_TX'||I||'(I),H_TX'||I||'(I)||'' '')');
5754     END IF;
5755   END LOOP;
5756   l('            );');
5757   l('           EXIT; ');
5758   l('        EXCEPTION  WHEN OTHERS THEN ');
5759   l('            l_st:= l_st+SQL%ROWCOUNT+1;');
5760   l('        END; ');
5761   l('      END LOOP; ');
5762   l('      FORALL I in H_P_PARTY_ID.FIRST..H_P_PARTY_ID.LAST');
5763   l('        INSERT INTO HZ_DQM_STAGE_GT ( PARTY_ID, OWNER_ID, PARTY_INDEX) VALUES (');
5764   l('           H_P_PARTY_ID(I),H_P_PARTY_ID(I),H_PARTY_INDEX(I));');
5765 
5766   l('        insert_stage_contacts;');
5767   l('        insert_stage_party_sites;');
5768   l('        insert_stage_contact_pts;');
5769   l('      FORALL I in H_P_PARTY_ID.FIRST..H_P_PARTY_ID.LAST');
5770   l('        UPDATE HZ_STAGED_PARTIES SET ');
5771   l('                D_PS = H_PS_DEN(I),');
5772   l('                D_CT = H_CT_DEN(I),');
5773   l('                D_CPT = H_CPT_DEN(I)');
5774   l('        WHERE PARTY_ID = H_P_PARTY_ID(I);');
5775   l('      EXCEPTION ');
5776   l('        WHEN OTHERS THEN');
5777   l('          ROLLBACK to party_batch;');
5778   l('          RAISE;');
5779   l('      END;');
5780   l('      IF l_last_fetch THEN');
5781   l('        FND_CONCURRENT.AF_Commit;');
5782   l('        EXIT;');
5783   l('      END IF;');
5784   l('      FND_CONCURRENT.AF_Commit;');
5785   l('    END LOOP;');
5786   l('  END;');
5787 
5788   l('');
5789   l('  PROCEDURE sync_single_party (');
5790   l('    p_party_id NUMBER,');
5791   l('    p_party_type VARCHAR2,');
5792   l('    p_operation VARCHAR2) IS');
5793   l('');
5794   l('  l_tryins BOOLEAN;');
5795   l('  l_tryupd BOOLEAN;');
5796   l('   BEGIN');
5797   l('    IF p_party_type = ''ORGANIZATION'' THEN');
5798   l('      SELECT p.PARTY_ID, p.STATUS ');
5799   FOR I in 1..l_org_select.COUNT LOOP
5800     IF l_org_select(I) <> 'N' THEN
5801       l('        ,' || l_org_select(I));
5802     END IF;
5803   END LOOP;
5804   l('      INTO H_P_PARTY_ID(1), H_STATUS(1)');
5805   FOR I IN 1..255 LOOP
5806     IF l_forall_list(I) <> 'N' AND l_mincol_list(I) = 'Y' AND
5807        l_custom_list(I) = 'N' THEN
5808       l('         , H_TX'||I||'(1)');
5809     END IF;
5810   END LOOP;
5811   l('      FROM HZ_PARTIES p, HZ_ORGANIZATION_PROFILES op ');
5812   l('      WHERE p.party_id = p_party_id ');
5813   l('      AND p.party_id = op.party_id ');
5814   l('      AND (p.status = ''M'' or op.effective_end_date is NULL)  AND ROWNUM=1; ');
5815   l('    ELSIF p_party_type = ''PERSON'' THEN');
5816   l('      SELECT p.PARTY_ID, p.STATUS ');
5817   FOR I in 1..l_per_select.COUNT LOOP
5818     IF l_per_select(I) <> 'N' THEN
5819       l('        ,' || l_per_select(I));
5820     END IF;
5821   END LOOP;
5825        l_custom_list(I) = 'N' THEN
5822   l('      INTO H_P_PARTY_ID(1), H_STATUS(1)');
5823   FOR I IN 1..255 LOOP
5824     IF l_forall_list(I) <> 'N' AND l_mincol_list(I) = 'Y' AND
5826       l('         , H_TX'||I||'(1)');
5827     END IF;
5828   END LOOP;
5829   l('      FROM HZ_PARTIES p, HZ_PERSON_PROFILES pe ');
5830   l('      WHERE p.party_id = p_party_id ');
5831   l('      AND p.party_id = pe.party_id ');
5832   l('      AND (p.status = ''M'' or pe.effective_end_date is NULL) AND ROWNUM=1;');
5833   l('    ELSE');
5834   l('      SELECT p.PARTY_ID, p.STATUS ');
5835   FOR I in 1..l_oth_select.COUNT LOOP
5836     IF l_per_select(I) <> 'N' THEN
5837       l('        ,' || l_oth_select(I));
5838     END IF;
5839   END LOOP;
5840 
5841   l('      INTO H_P_PARTY_ID(1), H_STATUS(1)');
5842   FOR I IN 1..255 LOOP
5843     IF l_forall_list(I) <> 'N' AND l_mincol_list(I) = 'Y' AND
5844        l_custom_list(I) = 'N' THEN
5845       l('         , H_TX'||I||'(1)');
5846     END IF;
5847   END LOOP;
5848   l('      FROM HZ_PARTIES p ');
5849   l('      WHERE p.party_id = p_party_id;');
5850   l('    END IF;');
5851   -- VJN INTRODUCED CODE FOR GENERATING THE POPULATION
5852   -- OF THE GLOBAL CONDITION RECORD
5853 
5854   l_idx := l_cond_attrib_list.FIRST ;
5855   IF l_idx IS NOT NULL
5856   THEN
5857     l('----------- SETTING GLOBAL CONDITION RECORD AT THE PARTY LEVEL ---------');
5858   END IF ;
5859 
5860 
5861   WHILE l_cond_attrib_list.EXISTS(l_idx)
5862   LOOP
5863 
5864       l('     HZ_WORD_CONDITIONS_PKG.set_gbl_condition_rec ('||l_cond_attrib_list(l_idx)||','||'H_TX'||l_idx||'(1));');
5865       l_idx := l_idx+1;
5866   END LOOP;
5867 
5868 
5869     FOR I IN 1..255 LOOP
5870     IF l_forall_list(I) <> 'N' THEN
5871       IF l_custom_list(I) <> 'N' AND l_mincol_list(I) = 'Y' THEN
5872         l('   H_TX'||I||'(1):='||replace(l_custom_list(I),'(I)','(1)')||';');
5873       END IF;
5874     END IF;
5875   END LOOP;
5876   FOR I IN 1..255 LOOP
5877     IF l_forall_list(I) <> 'N' THEN
5878       IF l_mincol_list(I) <> 'Y' THEN
5879         l('   H_TX'||I||'(1):='||replace(l_forall_list(I),'(I)','(1)')||';');
5880       END IF;
5881     END IF;
5882   END LOOP;
5883   FOR I IN 1..255 LOOP
5884     IF l_forall_list(I) <> 'N' THEN
5885       IF l_mincol_list(I) = 'Y' THEN
5886         l('   H_TX'||I||'(1):='||replace(l_forall_list(I),'(I)','(1)')||';');
5887       END IF;
5888     END IF;
5889   END LOOP;
5890 
5891   l('   l_tryins := FALSE;');
5892   l('   l_tryupd := FALSE;');
5893   l('   IF p_operation=''C'' THEN');
5894   l('     l_tryins:=TRUE;');
5895   l('   ELSE ');
5896   l('     l_tryupd:=TRUE;');
5897   l('   END IF;');
5898   l('   WHILE (l_tryins OR l_tryupd) LOOP');
5899   l('     IF l_tryins THEN');
5900   l('       BEGIN');
5901   l('         l_tryins:=FALSE;');
5902   l('         INSERT INTO HZ_STAGED_PARTIES (');
5903   l('             PARTY_ID');
5904   l('            ,STATUS');
5905   l('            ,D_PS');
5906   l('            ,D_CT');
5907   l('            ,D_CPT');
5908   FOR I IN 1..255 LOOP
5909     IF l_forall_list(I) <> 'N' THEN
5910       l('              , TX'||I);
5911     END IF;
5912   END LOOP;
5913   l('           ) VALUES (');
5914   l('             H_P_PARTY_ID(1)');
5915   l('            ,H_STATUS(1)');
5916   l('            ,''SYNC''');
5917   l('            ,''SYNC''');
5918   l('            ,''SYNC''');
5919   FOR I IN 1..255 LOOP
5920     IF l_forall_list(I) <> 'N' THEN
5921       l('             , decode(H_TX'||I||'(1),null,H_TX'||I||'(1),H_TX'||I||'(1)||'' '')');
5922     END IF;
5923   END LOOP;
5924   l('         );');
5925   l('       EXCEPTION');
5926   l('         WHEN DUP_VAL_ON_INDEX THEN');
5927   l('           IF p_operation=''C'' THEN');
5928   l('             l_tryupd:=TRUE;');
5929   l('           END IF;');
5930   l('       END;');
5931   l('     END IF;');
5932   l('     IF l_tryupd THEN');
5933   l('       BEGIN');
5934   l('         l_tryupd:=FALSE;');
5935   l('         UPDATE HZ_STAGED_PARTIES SET ');
5936   l('            status =H_STATUS(1) ');
5937   l('            ,concat_col = concat_col ');
5938   FOR I IN 1..255 LOOP
5939     IF l_forall_list(I) <> 'N' THEN
5940             l('            ,TX'||I||'=decode(H_TX'||I||'(1),null,H_TX'||I||'(1),H_TX'||I||'(1)||'' '')');
5941     END IF;
5942   END LOOP;
5943   l('         WHERE PARTY_ID=H_P_PARTY_ID(1);');
5944   l('         IF SQL%ROWCOUNT=0 AND p_operation=''U'' THEN');
5945   l('           l_tryins := TRUE;');
5946   l('         END IF;');
5947   l('       EXCEPTION ');
5948   l('         WHEN NO_DATA_FOUND THEN');
5949   l('           IF p_operation=''U'' THEN');
5950   l('             l_tryins := TRUE;');
5951   l('           END IF;');
5952   l('       END;');
5953   l('     END IF;');
5954   l('   END LOOP;');
5955   l('  END;');
5956 
5957   -- VJN Introduced for SYNC. This is the online version, which would be used to
5958   -- directly insert into the staging tables from SYNC.
5959   l('');
5960   l('  PROCEDURE sync_single_party_online (');
5961   l('    p_party_id    NUMBER,');
5962   l('    p_operation   VARCHAR2) IS');
5963   l('');
5964   l('  l_tryins           BOOLEAN;');
5965   l('  l_tryupd           BOOLEAN;');
5966   l('  l_party_type       VARCHAR2(30); ');
5967   l('  l_org_contact_id   NUMBER; ');
5971   l('  CURSOR c_contact IS ');
5968   l('  l_sql_err_message  VARCHAR2(2000); ');
5969   l('');
5970   l('  --bug 4500011 replaced hz_party_relationships with hz_relationships ');
5972   l('    SELECT oc.org_contact_id ');
5973   l('    FROM HZ_RELATIONSHIPS pr, HZ_ORG_CONTACTS oc ');
5974   l('    WHERE pr.relationship_id    = oc.party_relationship_id ');
5975   l('    AND   pr.subject_id         = p_party_id ');
5976   l('    AND   pr.subject_table_name = ''HZ_PARTIES'' ');
5977   l('    AND   pr.object_table_name  = ''HZ_PARTIES'' ');
5978   l('    AND   pr.directional_flag   = ''F''; ');
5979   l('');
5980   l('  BEGIN');
5981   l('');
5982    l('    -- Get party_type ');
5983    l('    SELECT party_type INTO l_party_type ');
5984    l('    FROM hz_parties WHERE party_id = p_party_id; ');
5985   l('');
5986    l('    -- Set global G_PARTY_TYPE variable value');
5987    l('    hz_trans_pkg.set_party_type(l_party_type); ');
5988    l('');
5989    l('    IF l_party_type = ''PERSON'' THEN ');
5990    l('    ---------------------------------- ');
5991    l('    -- Take care of CONTACT INFORMATION ');
5992    l('    -- When the operation is an update ');
5993    l('    ---------------------------------- ');
5994    l('      IF p_operation = ''U'' THEN ');
5995    l('        OPEN c_contact; ');
5996    l('        LOOP ');
5997    l('          FETCH c_contact INTO l_org_contact_id; ');
5998    l('          EXIT WHEN c_contact%NOTFOUND; ');
5999    l('          BEGIN ');
6000    l('            sync_single_contact_online(l_org_contact_id, p_operation); ');
6001    l('          EXCEPTION WHEN OTHERS THEN ');
6002    l('            -- FAILOVER : REPORT RECORD TO HZ_DQM_SYNC_INTERFACE ');
6003    l('            -- FOR ONLINE FLOWS ');
6004    l('            l_sql_err_message := SQLERRM; ');
6005    l('            insert_dqm_sync_error_rec(p_party_id,l_org_contact_id,null,null,''CONTACTS'',''U'',''E'',''Y'', l_sql_err_message); ');
6006    l('          END ; ');
6007    l('        END LOOP; ');
6008    l('      END IF ; ');
6009    l('    END IF; ');
6010    l('');
6011   l('    IF l_party_type = ''ORGANIZATION'' THEN');
6012   l('      SELECT p.PARTY_ID, p.STATUS ');
6013   FOR I in 1..l_org_select.COUNT LOOP
6014     IF l_org_select(I) <> 'N' THEN
6015       l('        ,' || l_org_select(I));
6016     END IF;
6017   END LOOP;
6018   l('      INTO H_P_PARTY_ID(1), H_STATUS(1)');
6019   FOR I IN 1..255 LOOP
6020     IF l_forall_list(I) <> 'N' AND l_mincol_list(I) = 'Y' AND
6021        l_custom_list(I) = 'N' THEN
6022       l('         , H_TX'||I||'(1)');
6023     END IF;
6024   END LOOP;
6025   l('      FROM HZ_PARTIES p, HZ_ORGANIZATION_PROFILES op ');
6026   l('      WHERE p.party_id = p_party_id ');
6027   l('      AND p.party_id = op.party_id ');
6028   l('      AND (p.status = ''M'' or op.effective_end_date is NULL)  AND ROWNUM=1; ');
6029   l('    ELSIF l_party_type = ''PERSON'' THEN');
6030   l('      SELECT p.PARTY_ID, p.STATUS ');
6031   FOR I in 1..l_per_select.COUNT LOOP
6032     IF l_per_select(I) <> 'N' THEN
6033       l('        ,' || l_per_select(I));
6034     END IF;
6035   END LOOP;
6036   l('      INTO H_P_PARTY_ID(1), H_STATUS(1)');
6037   FOR I IN 1..255 LOOP
6038     IF l_forall_list(I) <> 'N' AND l_mincol_list(I) = 'Y' AND
6039        l_custom_list(I) = 'N' THEN
6040       l('         , H_TX'||I||'(1)');
6041     END IF;
6042   END LOOP;
6043   l('      FROM HZ_PARTIES p, HZ_PERSON_PROFILES pe ');
6044   l('      WHERE p.party_id = p_party_id ');
6045   l('      AND p.party_id = pe.party_id ');
6046   l('      AND (p.status = ''M'' or pe.effective_end_date is NULL) AND ROWNUM=1;');
6047   l('    ELSE');
6048   l('      SELECT p.PARTY_ID, p.STATUS ');
6049   FOR I in 1..l_oth_select.COUNT LOOP
6050     IF l_per_select(I) <> 'N' THEN
6051       l('        ,' || l_oth_select(I));
6052     END IF;
6053   END LOOP;
6054 
6055   l('      INTO H_P_PARTY_ID(1), H_STATUS(1)');
6056   FOR I IN 1..255 LOOP
6057     IF l_forall_list(I) <> 'N' AND l_mincol_list(I) = 'Y' AND
6058        l_custom_list(I) = 'N' THEN
6059       l('         , H_TX'||I||'(1)');
6060     END IF;
6061   END LOOP;
6062   l('      FROM HZ_PARTIES p ');
6063   l('      WHERE p.party_id = p_party_id;');
6064   l('    END IF;');
6065   l('');
6066   -- VJN INTRODUCED CODE FOR GENERATING THE POPULATION
6067   -- OF THE GLOBAL CONDITION RECORD
6068 
6069   l_idx := l_cond_attrib_list.FIRST ;
6070   IF l_idx IS NOT NULL
6071   THEN
6072     l('    ---- SETTING GLOBAL CONDITION RECORD AT THE PARTY LEVEL ----');
6073   END IF ;
6074 
6075 
6076   WHILE l_cond_attrib_list.EXISTS(l_idx)
6077   LOOP
6078 
6079       l('    HZ_WORD_CONDITIONS_PKG.set_gbl_condition_rec ('||l_cond_attrib_list(l_idx)||','||'H_TX'||l_idx||'(1));');
6080       l_idx := l_idx+1;
6081   END LOOP;
6082 
6083 
6084     FOR I IN 1..255 LOOP
6085     IF l_forall_list(I) <> 'N' THEN
6086       IF l_custom_list(I) <> 'N' AND l_mincol_list(I) = 'Y' THEN
6087         l('    H_TX'||I||'(1):='||replace(l_custom_list(I),'(I)','(1)')||';');
6088       END IF;
6089     END IF;
6090   END LOOP;
6091   FOR I IN 1..255 LOOP
6092     IF l_forall_list(I) <> 'N' THEN
6093       IF l_mincol_list(I) <> 'Y' THEN
6094         l('    H_TX'||I||'(1):='||replace(l_forall_list(I),'(I)','(1)')||';');
6095       END IF;
6096     END IF;
6097   END LOOP;
6098   FOR I IN 1..255 LOOP
6099     IF l_forall_list(I) <> 'N' THEN
6100       IF l_mincol_list(I) = 'Y' THEN
6104   END LOOP;
6101         l('    H_TX'||I||'(1):='||replace(l_forall_list(I),'(I)','(1)')||';');
6102       END IF;
6103     END IF;
6105   l('');
6106   l('    l_tryins := FALSE;');
6107   l('    l_tryupd := FALSE;');
6108   l('');
6109   l('    IF p_operation=''C'' THEN');
6110   l('      l_tryins:=TRUE;');
6111   l('    ELSE ');
6112   l('      l_tryupd:=TRUE;');
6113   l('    END IF;');
6114   l('');
6115   l('    WHILE (l_tryins OR l_tryupd) LOOP');
6116   l('      IF l_tryins THEN');
6117   l('        BEGIN');
6118   l('          l_tryins:=FALSE;');
6119   l('          INSERT INTO HZ_STAGED_PARTIES (');
6120   l('             PARTY_ID');
6121   l('            ,STATUS');
6122   l('            ,D_PS');
6123   l('            ,D_CT');
6124   l('            ,D_CPT');
6125   FOR I IN 1..255 LOOP
6126     IF l_forall_list(I) <> 'N' THEN
6127       l('            ,TX'||I);
6128     END IF;
6129   END LOOP;
6130   l('          ) VALUES (');
6131   l('             H_P_PARTY_ID(1)');
6132   l('            ,H_STATUS(1)');
6133   l('            ,''SYNC''');
6134   l('            ,''SYNC''');
6135   l('            ,''SYNC''');
6136   FOR I IN 1..255 LOOP
6137     IF l_forall_list(I) <> 'N' THEN
6138       l('            ,decode(H_TX'||I||'(1),null,H_TX'||I||'(1),H_TX'||I||'(1)||'' '')');
6139     END IF;
6140   END LOOP;
6141   l('          );');
6142   l('        EXCEPTION');
6143   l('          WHEN DUP_VAL_ON_INDEX THEN');
6144   l('            IF p_operation=''C'' THEN');
6145   l('              l_tryupd:=TRUE;');
6146   l('            END IF;');
6147   l('        END;');
6148   l('      END IF;');
6149   l('');
6150   l('      IF l_tryupd THEN');
6151   l('        BEGIN');
6152   l('          l_tryupd:=FALSE;');
6153   l('          UPDATE HZ_STAGED_PARTIES SET ');
6154   l('             concat_col = concat_col ');
6155   l('            ,status =H_STATUS(1) ');
6156   FOR I IN 1..255 LOOP
6157     IF l_forall_list(I) <> 'N' THEN
6158             l('            ,TX'||I||'=decode(H_TX'||I||'(1),null,H_TX'||I||'(1),H_TX'||I||'(1)||'' '')');
6159     END IF;
6160   END LOOP;
6161   l('          WHERE PARTY_ID=H_P_PARTY_ID(1);');
6162   l('          IF SQL%ROWCOUNT=0 AND p_operation=''U'' THEN');
6163   l('            l_tryins := TRUE;');
6164   l('          END IF;');
6165   l('        EXCEPTION ');
6166   l('          WHEN NO_DATA_FOUND THEN');
6167   l('            IF p_operation=''U'' THEN');
6168   l('              l_tryins := TRUE;');
6169   l('            END IF;');
6170   l('        END;');
6171   l('      END IF;');
6172   l('    END LOOP;');
6173   l('');
6174   l('      -- REPURI. Bug 4884742. If shadow staging is completely successfully ');
6175   l('      -- insert a record into hz_dqm_sh_sync_interface table for each record ');
6176   l('    IF (HZ_DQM_SYNC.is_shadow_staging_complete) THEN ');
6177   l('      BEGIN ');
6178   l('        HZ_DQM_SYNC.insert_sh_interface_rec(p_party_id,null,null,null,''PARTY'',p_operation); ');
6179   l('      EXCEPTION WHEN OTHERS THEN ');
6180   l('        NULL; ');
6181   l('      END; ');
6182   l('    END IF; ');
6183   l('');
6184   -- Fix for Bug 4862121.
6185   -- Added the Exception handling at this context, for the procedure.
6186   l('  EXCEPTION WHEN OTHERS THEN ');
6187   l('    -- FAILOVER : REPORT RECORD TO HZ_DQM_SYNC_INTERFACE ');
6188   l('    -- FOR ONLINE FLOWS ');
6189   l('    l_sql_err_message := SQLERRM; ');
6190   l('    insert_dqm_sync_error_rec(p_party_id, NULL, NULL, NULL, ''PARTY'', p_operation, ''E'', ''Y'', l_sql_err_message); ');
6191   l('  END;');
6192 
6193 END;
6194 
6195 -- REPURI. Proccedure to generate the code (into HZ_STAGE_MAP_TRANSFORM)
6196 -- for OPEN_BULK_IMP_SYNC_PSITE_CUR Procedure. Bug 4884735.
6197 
6198 PROCEDURE gen_bulk_imp_sync_psite_query IS
6199  cur_col_num NUMBER := 1;
6200 
6201  TYPE coltab IS TABLE OF VARCHAR2(2000) INDEX BY BINARY_INTEGER;
6202 
6203  l_select coltab;
6204  FIRST BOOLEAN := FALSE;
6205 
6206  l_forall_list coltab;
6207  l_custom_list coltab;
6208  l_mincol_list coltab;
6209  l_min_colnum NUMBER;
6210  idx NUMBER :=1;
6211  is_first boolean := true;
6212 
6213  -- VJN Introduced for conditional word replacements
6214  l_cond_attrib_list coltab ;
6215  l_idx number ;
6216 
6217 BEGIN
6218 
6219   l('');
6220   l('  PROCEDURE open_bulk_imp_sync_psite_cur ( ');
6221   l('    p_batch_id             IN      NUMBER, ');
6222   l('    p_batch_mode_flag      IN      VARCHAR2, ');
6223   l('    p_from_osr             IN      VARCHAR2, ');
6224   l('    p_to_osr               IN      VARCHAR2, ');
6225   l('    p_os                   IN      VARCHAR2, ');
6226   l('    p_operation            IN      VARCHAR2, ');
6227   l('    x_sync_party_site_cur  IN OUT  HZ_DQM_SYNC.SyncCurTyp) IS ');
6228   l('  BEGIN');
6229 
6230   FOR ATTRS IN (SELECT a.ATTRIBUTE_ID,
6231                        a.ATTRIBUTE_NAME,
6232                        a.SOURCE_TABLE,
6233                        a.CUSTOM_ATTRIBUTE_PROCEDURE,
6234                        f.PROCEDURE_NAME,
6235                        f.STAGED_ATTRIBUTE_COLUMN,
6236                        to_number(substrb(STAGED_ATTRIBUTE_COLUMN, 3)) COLNUM
6237                 FROM HZ_TRANS_ATTRIBUTES_VL a, HZ_TRANS_FUNCTIONS_VL f
6238                 WHERE ENTITY_NAME = 'PARTY_SITES'
6239                 AND nvl(f.ACTIVE_FLAG,'Y') = 'Y'
6243       FOR I in cur_col_num..ATTRS.COLNUM-1 LOOP
6240                 AND f.ATTRIBUTE_ID = a.ATTRIBUTE_ID
6241                 ORDER BY COLNUM) LOOP
6242     IF cur_col_num<ATTRS.COLNUM THEN
6244         l_mincol_list(I) := 'N';
6245         l_forall_list(I) := 'N';
6246         l_custom_list(I) := 'N';
6247       END LOOP;
6248     END IF;
6249     cur_col_num:=ATTRS.COLNUM+1;
6250     IF has_trx_context(ATTRS.PROCEDURE_NAME) THEN
6251       l_forall_list(ATTRS.COLNUM) := ATTRS.PROCEDURE_NAME || '(H_TX'||ATTRS.COLNUM||'(I),NULL, ''' || ATTRS.ATTRIBUTE_NAME || ''',''PARTY_SITES'',''STAGE'')';
6252     ELSE
6253       l_forall_list(ATTRS.COLNUM) := ATTRS.PROCEDURE_NAME || '(H_TX'||ATTRS.COLNUM||'(I),NULL, ''' || ATTRS.ATTRIBUTE_NAME || ''',''PARTY_SITES'')';
6254     END IF;
6255 
6256     SELECT min(to_number(substrb(STAGED_ATTRIBUTE_COLUMN, 3))) INTO l_min_colnum
6257     FROM HZ_TRANS_ATTRIBUTES_VL a, HZ_TRANS_FUNCTIONS_VL f
6258     WHERE ENTITY_NAME = 'PARTY_SITES'
6259     AND nvl(f.ACTIVE_FLAG,'Y') = 'Y'
6260     AND f.ATTRIBUTE_ID = a.ATTRIBUTE_ID
6261     AND a.ATTRIBUTE_NAME=ATTRS.ATTRIBUTE_NAME;
6262 
6263     IF ATTRS.colnum>l_min_colnum THEN
6264       l_mincol_list(ATTRS.COLNUM) := 'N';
6265       IF has_trx_context(ATTRS.PROCEDURE_NAME) THEN
6266         l_forall_list(ATTRS.COLNUM) := ATTRS.PROCEDURE_NAME || '(H_TX'||l_min_colnum||'(I),NULL, ''' || ATTRS.ATTRIBUTE_NAME || ''',''PARTY_SITES'',''STAGE'')';
6267       ELSE
6268         l_forall_list(ATTRS.COLNUM) := ATTRS.PROCEDURE_NAME || '(H_TX'||l_min_colnum||'(I),NULL, ''' || ATTRS.ATTRIBUTE_NAME || ''',''PARTY_SITES'')';
6269       END IF;
6270     ELSE
6271       l_mincol_list(ATTRS.COLNUM) := 'Y';
6272     END IF;
6273 
6274     IF ATTRS.CUSTOM_ATTRIBUTE_PROCEDURE IS NULL THEN
6275       IF l_mincol_list(ATTRS.COLNUM) = 'Y' THEN
6276         IF ATTRS.SOURCE_TABLE='HZ_LOCATIONS' THEN
6277           l_select(idx) := 'l.'||ATTRS.ATTRIBUTE_NAME;
6278         ELSIF ATTRS.SOURCE_TABLE='HZ_PARTY_SITES' THEN
6279           l_select(idx) := 'ps.'||ATTRS.ATTRIBUTE_NAME;
6280         END IF;
6281       ELSE
6282         l_select(idx) := 'N';
6283       END IF;
6284 
6285       l_custom_list(ATTRS.COLNUM) := 'N';
6286     ELSE
6287       l_select(idx) := 'N';
6288       l_custom_list(ATTRS.COLNUM) := 'N';
6289       IF ATTRS.ATTRIBUTE_NAME = 'ADDRESS' THEN
6290         IF l_mincol_list(ATTRS.COLNUM) = 'Y' THEN
6291           l_select(idx) := 'rtrim(l.address1 || '' '' || l.address2 || '' '' || l.address3 || '' '' || l.address4)';
6292         END IF;
6293       ELSE
6294         IF l_mincol_list(ATTRS.COLNUM) = 'Y' THEN
6295           IF has_context(ATTRS.custom_attribute_procedure) THEN
6296             l_custom_list(ATTRS.COLNUM) := ATTRS.custom_attribute_procedure || '(H_PARTY_SITE_ID(I),''PARTY_SITES'','''||ATTRS.ATTRIBUTE_NAME|| ''', ''STAGE'')';
6297           ELSE
6298             l_custom_list(ATTRS.COLNUM) := ATTRS.custom_attribute_procedure || '(H_PARTY_SITE_ID(I), ''PARTY_SITES'','''||ATTRS.ATTRIBUTE_NAME|| ''')';
6299           END IF;
6300         END IF;
6301       END IF;
6302     END IF;
6303     idx := idx+1;
6304 
6305     -- VJN ADDED CODE FOR TRACKING CONDITION ATTRIBUTES AT THIS ENTITY LEVEL
6306     IF HZ_WORD_CONDITIONS_PKG.is_a_cond_attrib( ATTRS.attribute_id)
6307      THEN
6308          l_cond_attrib_list(ATTRS.COLNUM) := ATTRS.attribute_id ;
6309     END IF;
6310 
6311   END LOOP;
6312 
6313   IF cur_col_num<=255 THEN--bug 5977628
6314     FOR I in cur_col_num..255 LOOP
6315       l_mincol_list(I) := 'N';
6316       l_forall_list(I) := 'N';
6317       l_custom_list(I) := 'N';
6318     END LOOP;
6319   END IF;
6320 
6321   l('    OPEN x_sync_party_site_cur FOR ' );
6322   l('      SELECT /*+ ORDERED USE_NL(ps l) */ ');
6323   l('         ps.PARTY_SITE_ID ');
6324   l('        ,ps.PARTY_ID ');
6325   l('        ,NULL ');
6326   l('        ,ps.STATUS ');
6327   l('        ,ps.ROWID ');
6328 
6329   FOR I in 1..l_select.COUNT LOOP
6330     IF l_select(I) <> 'N' THEN
6331       l('        ,' || l_select(I));
6332     END IF;
6333   END LOOP;
6334 
6335   l('      FROM hz_locations l, hz_party_sites ps, ');
6336   l('           hz_imp_addresses_sg addr_sg, hz_imp_batch_details bd ');
6337   l('      WHERE l.request_id               = bd.main_conc_req_id ');
6338   l('      AND    bd.batch_id               = addr_sg.batch_id ');
6339   l('      AND    l.location_id             = ps.location_id ');
6340   l('      AND    addr_sg.batch_id          = p_batch_id ');
6341   l('      AND    addr_sg.batch_mode_flag   = p_batch_mode_flag ');
6342   l('      AND    addr_sg.party_orig_system = p_os ');
6343   l('      AND    addr_sg.party_site_id     = ps.party_site_id ');
6344   l('      AND    addr_sg.action_flag       = p_operation ');
6345   l('      AND    addr_sg.party_orig_system_reference BETWEEN p_from_osr AND p_to_osr ');
6346   l('      AND    (ps.status IS NULL OR ps.status = ''A'' OR ps.status = ''I''); ');
6347   l('');
6348   l('  END open_bulk_imp_sync_psite_cur; ');
6349   l('');
6350 END gen_bulk_imp_sync_psite_query;
6351 
6352 
6353 -- REPURI. Proccedure to generate the code (into HZ_STAGE_MAP_TRANSFORM)
6354 -- for OPEN_SYNC_PARTY_SITE_CURSOR and SYNC_ALL_PARTY_SITES Procedures.
6355 
6356 PROCEDURE generate_sync_psite_query_proc IS
6357  cur_col_num NUMBER := 1;
6358 
6359  TYPE coltab IS TABLE OF VARCHAR2(2000) INDEX BY BINARY_INTEGER;
6360 
6361  l_select coltab;
6362  FIRST BOOLEAN := FALSE;
6363 
6364  l_forall_list coltab;
6365  l_custom_list coltab;
6366  l_mincol_list coltab;
6370 
6367  l_min_colnum NUMBER;
6368  idx NUMBER :=1;
6369  is_first boolean := true;
6371  -- VJN Introduced for conditional word replacements
6372  l_cond_attrib_list coltab ;
6373  l_idx number ;
6374 
6375 BEGIN
6376 
6377   l('');
6378   l('  PROCEDURE open_sync_party_site_cursor ( ');
6379   l('    p_operation            IN      VARCHAR2,');
6380   l('    p_from_rec             IN      VARCHAR2,');
6381   l('    p_to_rec               IN      VARCHAR2,');
6382   l('    x_sync_party_site_cur  IN OUT  HZ_DQM_SYNC.SyncCurTyp) IS ');
6383   l('  BEGIN');
6384 
6385   FOR ATTRS IN (SELECT a.ATTRIBUTE_ID,
6386                        a.ATTRIBUTE_NAME,
6387                        a.SOURCE_TABLE,
6388                        a.CUSTOM_ATTRIBUTE_PROCEDURE,
6389                        f.PROCEDURE_NAME,
6390                        f.STAGED_ATTRIBUTE_COLUMN,
6391                        to_number(substrb(STAGED_ATTRIBUTE_COLUMN, 3)) COLNUM
6392                 FROM HZ_TRANS_ATTRIBUTES_VL a, HZ_TRANS_FUNCTIONS_VL f
6393                 WHERE ENTITY_NAME = 'PARTY_SITES'
6394                 AND nvl(f.ACTIVE_FLAG,'Y') = 'Y'
6395                 AND f.ATTRIBUTE_ID = a.ATTRIBUTE_ID
6396                 ORDER BY COLNUM) LOOP
6397     IF cur_col_num<ATTRS.COLNUM THEN
6398       FOR I in cur_col_num..ATTRS.COLNUM-1 LOOP
6399         l_mincol_list(I) := 'N';
6400         l_forall_list(I) := 'N';
6401         l_custom_list(I) := 'N';
6402       END LOOP;
6403     END IF;
6404     cur_col_num:=ATTRS.COLNUM+1;
6405     IF has_trx_context(ATTRS.PROCEDURE_NAME) THEN
6406       l_forall_list(ATTRS.COLNUM) := ATTRS.PROCEDURE_NAME || '(H_TX'||ATTRS.COLNUM||'(I),NULL, ''' || ATTRS.ATTRIBUTE_NAME || ''',''PARTY_SITES'',''STAGE'')';
6407     ELSE
6408       l_forall_list(ATTRS.COLNUM) := ATTRS.PROCEDURE_NAME || '(H_TX'||ATTRS.COLNUM||'(I),NULL, ''' || ATTRS.ATTRIBUTE_NAME || ''',''PARTY_SITES'')';
6409     END IF;
6410 
6411     SELECT min(to_number(substrb(STAGED_ATTRIBUTE_COLUMN, 3))) INTO l_min_colnum
6412     FROM HZ_TRANS_ATTRIBUTES_VL a, HZ_TRANS_FUNCTIONS_VL f
6413     WHERE ENTITY_NAME = 'PARTY_SITES'
6414     AND nvl(f.ACTIVE_FLAG,'Y') = 'Y'
6415     AND f.ATTRIBUTE_ID = a.ATTRIBUTE_ID
6416     AND a.ATTRIBUTE_NAME=ATTRS.ATTRIBUTE_NAME;
6417 
6418     IF ATTRS.colnum>l_min_colnum THEN
6419       l_mincol_list(ATTRS.COLNUM) := 'N';
6420       IF has_trx_context(ATTRS.PROCEDURE_NAME) THEN
6421         l_forall_list(ATTRS.COLNUM) := ATTRS.PROCEDURE_NAME || '(H_TX'||l_min_colnum||'(I),NULL, ''' || ATTRS.ATTRIBUTE_NAME || ''',''PARTY_SITES'',''STAGE'')';
6422       ELSE
6423         l_forall_list(ATTRS.COLNUM) := ATTRS.PROCEDURE_NAME || '(H_TX'||l_min_colnum||'(I),NULL, ''' || ATTRS.ATTRIBUTE_NAME || ''',''PARTY_SITES'')';
6424       END IF;
6425     ELSE
6426       l_mincol_list(ATTRS.COLNUM) := 'Y';
6427     END IF;
6428 
6429     IF ATTRS.CUSTOM_ATTRIBUTE_PROCEDURE IS NULL THEN
6430       IF l_mincol_list(ATTRS.COLNUM) = 'Y' THEN
6431         IF ATTRS.SOURCE_TABLE='HZ_LOCATIONS' THEN
6432           l_select(idx) := 'l.'||ATTRS.ATTRIBUTE_NAME;
6433         ELSIF ATTRS.SOURCE_TABLE='HZ_PARTY_SITES' THEN
6434           l_select(idx) := 'ps.'||ATTRS.ATTRIBUTE_NAME;
6435         END IF;
6436       ELSE
6437         l_select(idx) := 'N';
6438       END IF;
6439 
6440       l_custom_list(ATTRS.COLNUM) := 'N';
6441     ELSE
6442       l_select(idx) := 'N';
6443       l_custom_list(ATTRS.COLNUM) := 'N';
6444       IF ATTRS.ATTRIBUTE_NAME = 'ADDRESS' THEN
6445         IF l_mincol_list(ATTRS.COLNUM) = 'Y' THEN
6446           l_select(idx) := 'rtrim(l.address1 || '' '' || l.address2 || '' '' || l.address3 || '' '' || l.address4)';
6447         END IF;
6448       ELSE
6449         IF l_mincol_list(ATTRS.COLNUM) = 'Y' THEN
6450           IF has_context(ATTRS.custom_attribute_procedure) THEN
6451             l_custom_list(ATTRS.COLNUM) := ATTRS.custom_attribute_procedure || '(H_PARTY_SITE_ID(I),''PARTY_SITES'','''||ATTRS.ATTRIBUTE_NAME|| ''', ''STAGE'')';
6452           ELSE
6453             l_custom_list(ATTRS.COLNUM) := ATTRS.custom_attribute_procedure || '(H_PARTY_SITE_ID(I), ''PARTY_SITES'','''||ATTRS.ATTRIBUTE_NAME|| ''')';
6454           END IF;
6455         END IF;
6456       END IF;
6457     END IF;
6458     idx := idx+1;
6459 
6460     -- VJN ADDED CODE FOR TRACKING CONDITION ATTRIBUTES AT THIS ENTITY LEVEL
6461     IF HZ_WORD_CONDITIONS_PKG.is_a_cond_attrib( ATTRS.attribute_id)
6462      THEN
6463          l_cond_attrib_list(ATTRS.COLNUM) := ATTRS.attribute_id ;
6464     END IF;
6465 
6466   END LOOP;
6467 
6468   IF cur_col_num<=255 THEN--bug 5977628
6469     FOR I in cur_col_num..255 LOOP
6470       l_mincol_list(I) := 'N';
6471       l_forall_list(I) := 'N';
6472       l_custom_list(I) := 'N';
6473     END LOOP;
6474   END IF;
6475 
6476   l('    OPEN x_sync_party_site_cur FOR ' );
6477   l('      SELECT /*+ ORDERED USE_NL(ps l) */ ');
6478   l('         ps.PARTY_SITE_ID ');
6479   l('        ,dsi.party_id ');
6480   l('        ,dsi.org_contact_id ');
6481   l('        ,ps.status ');
6482   l('        ,dsi.ROWID ');
6483 
6484   FOR I in 1..l_select.COUNT LOOP
6485     IF l_select(I) <> 'N' THEN
6486       l('        ,' || l_select(I));
6487     END IF;
6488   END LOOP;
6489 
6490   l('      FROM   HZ_DQM_SYNC_INTERFACE dsi, HZ_PARTY_SITES ps, HZ_LOCATIONS l');
6491   l('      WHERE  dsi.record_id   = ps.party_site_id ');
6492   l('      AND    dsi.entity      = ''PARTY_SITES'' ');
6496   l('      AND    dsi.sync_interface_num <= p_to_rec ');
6493   l('      AND    dsi.operation   = p_operation ');
6494   l('      AND    dsi.staged_flag = ''N'' ');
6495   l('      AND    dsi.sync_interface_num >= p_from_rec ');
6497   l('      AND    (ps.status is null OR ps.status = ''A'' OR ps.status = ''I'') ');
6498   l('      AND    ps.location_id = l.location_id; ');
6499   l('  END; ');
6500 
6501   l('');
6502   l('  PROCEDURE sync_all_party_sites ( ');
6503   l('    p_operation                IN VARCHAR2, ');
6504   l('    p_bulk_sync_type           IN VARCHAR2, ');
6505   l('    p_sync_all_party_site_cur  IN HZ_DQM_SYNC.SyncCurTyp) IS ');
6506   l('');
6507   l('    l_limit         NUMBER  := ' || g_batch_size || ';');
6508   l('    l_last_fetch    BOOLEAN := FALSE;');
6509   l('    l_sql_errm      VARCHAR2(2000); ');
6510   l('    l_st            NUMBER; ');
6511   l('    l_en            NUMBER; ');
6512   l('    l_err_index     NUMBER; ');
6513   l('    l_err_count     NUMBER; ');
6514   l('');
6515   l('    bulk_errors     EXCEPTION; ');
6516   l('    PRAGMA EXCEPTION_INIT(bulk_errors, -24381); ');
6517   l('');
6518   l('  BEGIN');
6519   l('    log (''Begin Synchronizing Party Sites''); ');
6520   l('    LOOP');
6521   l('      log (''Bulk Collecting Party Sites Data...'',FALSE); ');
6522   l('      FETCH p_sync_all_party_site_cur BULK COLLECT INTO');
6523   l('         H_PARTY_SITE_ID');
6524   l('        ,H_PS_PARTY_ID');
6525   l('        ,H_PS_ORG_CONTACT_ID');
6526   l('        ,H_STATUS');
6527   l('        ,H_ROWID');
6528 
6529   FOR I IN 1..255 LOOP
6530     IF l_forall_list(I) <> 'N' AND l_mincol_list(I) = 'Y' AND
6531        l_custom_list(I) = 'N' THEN
6532       l('        ,H_TX'||I);
6533     END IF;
6534   END LOOP;
6535 
6536   l('      LIMIT l_limit;');
6537   l('      log (''Done''); ');
6538   l('');
6539   l('      IF p_sync_all_party_site_cur%NOTFOUND THEN');
6540   l('        l_last_fetch:=TRUE;');
6541   l('     END IF;');
6542   l('');
6543   l('      IF H_PARTY_SITE_ID.COUNT=0 AND l_last_fetch THEN');
6544   l('        EXIT;');
6545   l('      END IF;');
6546   l('');
6547   l('      log (''Synchronizing for ''||H_PARTY_SITE_ID.COUNT||'' Party Sites''); ');
6548   l('      log (''Populating Party Sites Transformation Functions into Arrays...'',FALSE); ');
6549   l('      FOR I in H_PARTY_SITE_ID.FIRST..H_PARTY_SITE_ID.LAST LOOP');
6550 
6551   -- VJN INTRODUCED FOR CONDITIONAL REPLACEMENTS
6552   -- CYCLE THROUGH THE CONDITON LIST AND GENERATE THE CODE
6553   -- FOR POPULATING THE GLOBAL CONDITION RECORD
6554 
6555   l_idx := l_cond_attrib_list.FIRST ;
6556   IF l_idx IS NOT NULL
6557   THEN
6558     l('        ---- SETTING GLOBAL CONDITION RECORD AT THE PARTY SITE LEVEL ----');
6559     l('');
6560   END IF ;
6561 
6562   WHILE l_cond_attrib_list.EXISTS(l_idx)
6563   LOOP
6564       l('        HZ_WORD_CONDITIONS_PKG.set_gbl_condition_rec ('||l_cond_attrib_list(l_idx)||','||'H_TX'||l_idx||'(I));');
6565       l_idx := l_idx+1;
6566   END LOOP;
6567 
6568   l('');
6569 
6570   FOR I IN 1..255 LOOP
6571     IF l_forall_list(I) <> 'N' THEN
6572       IF l_custom_list(I) <> 'N' AND l_mincol_list(I) = 'Y' THEN
6573         l('        H_TX'||I||'(I):='||l_custom_list(I)||';');
6574       END IF;
6575     END IF;
6576   END LOOP;
6577   FOR I IN 1..255 LOOP
6578     IF l_forall_list(I) <> 'N' THEN
6579       IF l_mincol_list(I) <> 'Y' THEN
6580         l('        H_TX'||I||'(I):='||l_forall_list(I)||';');
6581       END IF;
6582     END IF;
6583   END LOOP;
6584   FOR I IN 1..255 LOOP
6585     IF l_forall_list(I) <> 'N' THEN
6586       IF l_mincol_list(I) = 'Y' THEN
6587         l('        H_TX'||I||'(I):='||l_forall_list(I)||';');
6588       END IF;
6589     END IF;
6590   END LOOP;
6591   l('      END LOOP;');
6592   l('      log (''Done''); ');
6593   l('');
6594   l('      l_st := 1;  ');
6595   l('      l_en := H_PARTY_SITE_ID.COUNT; ');
6596   l('');
6597   l('      IF p_operation = ''C'' THEN ');
6598   l('        BEGIN  ');
6599   l('          log (''Inserting Data into HZ_STAGED_PARTY_SITES...'',FALSE); ');
6600   l('          FORALL I in l_st..l_en SAVE EXCEPTIONS ');
6601   l('            INSERT INTO HZ_STAGED_PARTY_SITES (');
6602   l('               PARTY_SITE_ID');
6603   l('              ,PARTY_ID');
6604   l('              ,ORG_CONTACT_ID');
6605   l('              ,STATUS_FLAG'); --Propagating Bug 4299785 fix to sync modifications
6606 
6607   FOR I IN 1..255 LOOP
6608     IF l_forall_list(I) <> 'N' THEN
6609       l('              ,TX'||I);
6610     END IF;
6611   END LOOP;
6612 
6613   l('            ) VALUES (');
6614   l('               H_PARTY_SITE_ID(I)');
6615   l('              ,H_PS_PARTY_ID(I)');
6616   l('              ,H_PS_ORG_CONTACT_ID(I)');
6617   l('              ,H_STATUS(I)'); --Propagating Bug 4299785 fix to sync modifications
6618 
6619   FOR I IN 1..255 LOOP
6620     IF l_forall_list(I) <> 'N' THEN
6621       l('              ,decode(H_TX'||I||'(I),null,H_TX'||I||'(I),H_TX'||I||'(I)||'' '')');
6622     END IF;
6623   END LOOP;
6624 
6625   l('            );');
6626   l('          log (''Done''); ');
6627   l('        EXCEPTION  WHEN bulk_errors THEN ');
6628   l('          l_err_count := SQL%BULK_EXCEPTIONS.COUNT; ');
6629   l('          FOR indx IN 1..l_err_count LOOP ');
6630   l('            l_err_index := SQL%BULK_EXCEPTIONS(indx).ERROR_INDEX; ');
6634   l('            IF (instr(l_sql_errm,''ORA-00001'')>0) THEN  ');
6631   l('            l_sql_errm  := sqlerrm(-SQL%BULK_EXCEPTIONS(indx).ERROR_CODE); ');
6632   -- SCHITRAP: Bug:5357970 - Error code is a number. Oracle error for ''DUP_VAL_ON_INDEX'' is ORA-00001
6633   --l('            IF (SQL%BULK_EXCEPTIONS(indx).ERROR_CODE) = ''DUP_VAL_ON_INDEX'' THEN ');
6635   l('              log (''Exception DUP_VAL_ON_INDEX occured while inserting Party Site with PARTY_SITE_ID - ''||H_PARTY_SITE_ID(l_err_index)); ');
6636   l('              DELETE FROM HZ_DQM_SYNC_INTERFACE WHERE ENTITY=''PARTY_SITES'' AND OPERATION=''C'' AND RECORD_ID=H_PARTY_SITE_ID(l_err_index);	');
6637   l('            ELSE ');
6638   l('              IF p_bulk_sync_type = ''DQM_SYNC'' THEN ');
6639   l('                UPDATE hz_dqm_sync_interface ');
6640   l('                  SET  error_data = l_sql_errm ');
6641   l('                  ,staged_flag    = decode (error_data, NULL, ''N'', ''E'') ');
6642   l('                WHERE rowid       = H_ROWID(l_err_index); ');
6643   l('              ELSIF  p_bulk_sync_type = ''IMPORT_SYNC'' THEN ');
6644   l('                -- Insert the Error Record into HZ_DQM_SYNC_INTERFACE table ');
6645   l('                insert_dqm_sync_error_rec(H_PS_PARTY_ID(l_err_index), H_PARTY_SITE_ID(l_err_index), NULL, H_PS_ORG_CONTACT_ID(l_err_index), ''PARTY_SITES'', p_operation, ''E'', ''N'', l_sql_errm); ');
6646   l('              END IF; ');
6647   l('            END IF; ');
6648   l('          END LOOP; ');
6649   l('        END; ');
6650   l('      ELSIF p_operation = ''U'' THEN ');
6651   l('        BEGIN ');
6652   l('          log (''Updating Data in HZ_STAGED_PARTY_SITES...'',FALSE); ');
6653   l('          FORALL I in l_st..l_en SAVE EXCEPTIONS ');
6654   l('            UPDATE HZ_STAGED_PARTY_SITES SET ');
6655   l('               concat_col = concat_col');
6656   l('              ,status_flag = H_STATUS(I)'); --Propagating Bug 4299785 fix to sync modifications
6657 
6658   FOR I IN 1..255 LOOP
6659     IF l_forall_list(I) <> 'N' THEN
6660       	IF (is_first) THEN
6661 	     is_first := false;
6662              l('              ,TX'||I||'=decode(H_TX'||I||'(I),null,H_TX'||I||'(I),H_TX'||I||'(I)||'' '')');
6663 	ELSE
6664              l('              ,TX'||I||'=decode(H_TX'||I||'(I),null,H_TX'||I||'(I),H_TX'||I||'(I)||'' '')');
6665 	END IF;
6666     END IF;
6667   END LOOP;
6668   l('            WHERE PARTY_SITE_ID=H_PARTY_SITE_ID(I);');
6669   l('          log (''Done''); ');
6670   l('        EXCEPTION  WHEN bulk_errors THEN ');
6671   l('          l_err_count := SQL%BULK_EXCEPTIONS.COUNT; ');
6672   l('          FOR indx IN 1..l_err_count LOOP ');
6673   l('            l_err_index := SQL%BULK_EXCEPTIONS(indx).ERROR_INDEX; ');
6674   l('            l_sql_errm  := sqlerrm(-SQL%BULK_EXCEPTIONS(indx).ERROR_CODE); ');
6675   -- SCHITRAP: Bug:5357970 - Error code is a number. Oracle error for ''DUP_VAL_ON_INDEX'' is ORA-00001
6676   --l('            IF (SQL%BULK_EXCEPTIONS(indx).ERROR_CODE) = ''DUP_VAL_ON_INDEX'' THEN ');
6677   l('            IF (instr(l_sql_errm,''ORA-00001'')>0) THEN  ');
6678   l('              log (''Exception DUP_VAL_ON_INDEX occured while inserting Party Site with PARTY_SITE_ID - ''||H_PARTY_SITE_ID(l_err_index)); ');
6679   l('              DELETE FROM HZ_DQM_SYNC_INTERFACE WHERE ENTITY=''PARTY_SITES'' AND OPERATION=''U'' AND RECORD_ID=H_PARTY_SITE_ID(l_err_index);	');
6680   l('            ELSE ');
6681   l('              IF p_bulk_sync_type = ''DQM_SYNC'' THEN ');
6682   l('                UPDATE hz_dqm_sync_interface ');
6683   l('                  SET  error_data = l_sql_errm ');
6684   l('                  ,staged_flag    = decode (error_data, NULL, ''N'', ''E'') ');
6685   l('                WHERE rowid       = H_ROWID(l_err_index); ');
6686   l('              ELSIF  p_bulk_sync_type = ''IMPORT_SYNC'' THEN ');
6687   l('                -- Insert the Error Record into HZ_DQM_SYNC_INTERFACE table ');
6688   l('                insert_dqm_sync_error_rec(H_PS_PARTY_ID(l_err_index), H_PARTY_SITE_ID(l_err_index), NULL, H_PS_ORG_CONTACT_ID(l_err_index), ''PARTY_SITES'', p_operation, ''E'', ''N'', l_sql_errm); ');
6689   l('              END IF; ');
6690   l('            END IF; ');
6691   l('          END LOOP; ');
6692   l('        END; ');
6693   l('      END IF;');
6694   l('');
6695   l('      IF l_last_fetch THEN');
6696   l('        -- Update HZ_STAGED_PARTIES, if corresponding child entity records ');
6697   l('        -- PARTY_SITES (in this case), have been inserted/updated ');
6698   l('');
6699   l('        log (''Updating D_PS column to SYNC in HZ_STAGED_PARTIES table for all related records...'',FALSE); ');
6700   l('        --Fix for bug 5048604, to update concat_col during update of denorm column ');
6701   l('        FORALL I IN H_PARTY_SITE_ID.FIRST..H_PARTY_SITE_ID.LAST ');
6702   l('          UPDATE HZ_STAGED_PARTIES set ');
6703   l('            D_PS = ''SYNC'' ');
6704   l('           ,CONCAT_COL = CONCAT_COL ');
6705   l('          WHERE PARTY_ID = H_PS_PARTY_ID(I); ');
6706   l('        log (''Done''); ');
6707   l('');
6708   l('      -- REPURI. Bug 4884742. ');
6709   l('      -- Bulk Insert of Import Party Sites into  Shadow Sync Interface table ');
6710   l('      -- if Shadow Staging has already run and completed successfully ');
6711   l('      IF ((p_bulk_sync_type = ''IMPORT_SYNC'') AND ');
6712   l('          (HZ_DQM_SYNC.is_shadow_staging_complete)) THEN ');
6713   l('        BEGIN ');
6714   l('           -- REPURI. Bug 4968126. ');
6715   l('           -- Using the Merge instead of Insert statement ');
6719   l('            MERGE INTO hz_dqm_sh_sync_interface S ');
6716   l('           -- so that duplicate records dont get inserted. ');
6717   l('          log (''Merging data into HZ_DQM_SH_SYNC_INTERFACE...'',FALSE); ');
6718   l('          FORALL I in l_st..l_en  ');
6720   l('              USING ( ');
6721   l('                SELECT ');
6722   l('                   H_PS_PARTY_ID(I)       AS party_id ');
6723   l('                  ,H_PARTY_SITE_ID(I)     AS record_id ');
6724   l('                  ,H_PS_ORG_CONTACT_ID(I) AS org_contact_id ');
6725   l('                FROM dual ) T ');
6726   l('              ON (S.entity                   = ''PARTY_SITES''              AND ');
6727   l('                  S.party_id                 = T.party_id                 AND ');
6728   l('                  S.record_id                = T.record_id                AND ');
6729   l('                  NVL(S.org_contact_id, -99) = NVL(T.org_contact_id, -99) AND ');
6730   l('                  S.staged_flag             <> ''E'') ');
6731   l('              WHEN NOT MATCHED THEN ');
6732   l('              INSERT ( ');
6733   l('                PARTY_ID, ');
6734   l('                RECORD_ID, ');
6735   l('                PARTY_SITE_ID, ');
6736   l('                ORG_CONTACT_ID, ');
6737   l('                ENTITY, ');
6738   l('                OPERATION, ');
6739   l('                STAGED_FLAG, ');
6740   l('                REALTIME_SYNC_FLAG, ');
6741   l('                CREATED_BY, ');
6742   l('                CREATION_DATE, ');
6743   l('                LAST_UPDATE_LOGIN, ');
6744   l('                LAST_UPDATE_DATE, ');
6745   l('                LAST_UPDATED_BY, ');
6746   l('                SYNC_INTERFACE_NUM ');
6747   l('              ) VALUES ( ');
6748   l('                H_PS_PARTY_ID(I), ');
6749   l('                H_PARTY_SITE_ID(I), ');
6750   l('                NULL, ');
6751   l('                H_PS_ORG_CONTACT_ID(I), ');
6752   l('                ''PARTY_SITES'', ');
6753   l('                p_operation, ');
6754   l('                ''N'', ');
6755   l('                ''N'', ');
6756   l('                hz_utility_pub.created_by, ');
6757   l('                hz_utility_pub.creation_date, ');
6758   l('                hz_utility_pub.last_update_login, ');
6759   l('                hz_utility_pub.last_update_date, ');
6760   l('                hz_utility_pub.user_id, ');
6761   l('                HZ_DQM_SH_SYNC_INTERFACE_S.nextval ');
6762   l('            ); ');
6763   l('        log (''Done''); ');
6764   l('        EXCEPTION WHEN OTHERS THEN ');
6765   l('              log (''Exception occured while inserting data into HZ_DQM_SH_SYNC_INTERFACE Table'');   ');
6766   l('              log (''Eror Message is - ''|| sqlerrm);   ');
6767   l('        END; ');
6768   l('      END IF; ');
6769   l('');
6770   l('        FND_CONCURRENT.AF_Commit;');
6771   l('        EXIT;');
6772   l('      END IF;');
6773   l('');
6774   l('      FND_CONCURRENT.AF_Commit;');
6775   l('');
6776   l('    END LOOP;');
6777   l('    log (''End Synchronizing Party Sites''); ');
6778   l('  END;');
6779 
6780 END;
6781 
6782 PROCEDURE generate_party_site_query_proc IS
6783  cur_col_num NUMBER := 1;
6784 
6785  TYPE coltab IS TABLE OF VARCHAR2(2000) INDEX BY BINARY_INTEGER;
6786 
6787  l_select coltab;
6788  FIRST BOOLEAN := FALSE;
6789 
6790  l_forall_list coltab;
6791  l_custom_list coltab;
6792  l_mincol_list coltab;
6793  l_min_colnum NUMBER;
6794  idx NUMBER :=1;
6795  is_first boolean := true;
6796 
6797  -- VJN Introduced for conditional word replacements
6798  l_cond_attrib_list coltab ;
6799  l_idx number ;
6800  l_attr_name varchar2(2000); --Bug No: 4279469
6801  l_ps_attr_name varchar2(2000); --Bug No: 4279469
6802  l_loc_attr_name varchar2(2000); --Bug No: 4279469
6803 BEGIN
6804   l('');
6805   l('  PROCEDURE insert_stage_party_sites IS ');
6806   l('  l_limit NUMBER := ' || g_batch_size || ';');
6807   l('  l_last_fetch BOOLEAN := FALSE;');
6808   l('  l_denorm VARCHAR2(2000);');
6809   l('  l_st number; ');
6810   l('  l_en number; ');
6811 
6812   l(' ');
6813 
6814   FOR ATTRS IN (SELECT a.ATTRIBUTE_ID,
6815                        a.ATTRIBUTE_NAME,
6816                        a.SOURCE_TABLE,
6817                        a.CUSTOM_ATTRIBUTE_PROCEDURE,
6818                        f.PROCEDURE_NAME,
6819                        f.STAGED_ATTRIBUTE_COLUMN,
6820                        to_number(substrb(STAGED_ATTRIBUTE_COLUMN, 3)) COLNUM,
6821 		       nvl(lkp.tag,'C') column_data_type
6822                 FROM HZ_TRANS_ATTRIBUTES_VL a, HZ_TRANS_FUNCTIONS_VL f,FND_LOOKUP_VALUES_VL lkp --Bug No: 4279469
6823                 WHERE ENTITY_NAME = 'PARTY_SITES'
6824                 AND nvl(f.ACTIVE_FLAG,'Y') = 'Y'
6825                 AND f.ATTRIBUTE_ID = a.ATTRIBUTE_ID
6826 		AND lkp.lookup_type = 'PARTY_SITE_LOGICAL_ATTRIB_LIST'
6827 		and lkp.lookup_code = a.ATTRIBUTE_NAME
6828                 ORDER BY COLNUM) LOOP
6829     IF cur_col_num<ATTRS.COLNUM THEN
6830       FOR I in cur_col_num..ATTRS.COLNUM-1 LOOP
6831         l_mincol_list(I) := 'N';
6832         l_forall_list(I) := 'N';
6833         l_custom_list(I) := 'N';
6834       END LOOP;
6835     END IF;
6836     cur_col_num:=ATTRS.COLNUM+1;
6837     IF has_trx_context(ATTRS.PROCEDURE_NAME) THEN
6841     END IF;
6838       l_forall_list(ATTRS.COLNUM) := ATTRS.PROCEDURE_NAME || '(H_TX'||ATTRS.COLNUM||'(I),NULL, ''' || ATTRS.ATTRIBUTE_NAME || ''',''PARTY_SITES'',''STAGE'')';
6839     ELSE
6840       l_forall_list(ATTRS.COLNUM) := ATTRS.PROCEDURE_NAME || '(H_TX'||ATTRS.COLNUM||'(I),NULL, ''' || ATTRS.ATTRIBUTE_NAME || ''',''PARTY_SITES'')';
6842 
6843     SELECT min(to_number(substrb(STAGED_ATTRIBUTE_COLUMN, 3))) INTO l_min_colnum
6844     FROM HZ_TRANS_ATTRIBUTES_VL a, HZ_TRANS_FUNCTIONS_VL f
6845     WHERE ENTITY_NAME = 'PARTY_SITES'
6846     AND nvl(f.ACTIVE_FLAG,'Y') = 'Y'
6847     AND f.ATTRIBUTE_ID = a.ATTRIBUTE_ID
6848     AND a.ATTRIBUTE_NAME=ATTRS.ATTRIBUTE_NAME;
6849 
6850     IF ATTRS.colnum>l_min_colnum THEN
6851       l_mincol_list(ATTRS.COLNUM) := 'N';
6852       IF has_trx_context(ATTRS.PROCEDURE_NAME) THEN
6853         l_forall_list(ATTRS.COLNUM) := ATTRS.PROCEDURE_NAME || '(H_TX'||l_min_colnum||'(I),NULL, ''' || ATTRS.ATTRIBUTE_NAME || ''',''PARTY_SITES'',''STAGE'')';
6854       ELSE
6855         l_forall_list(ATTRS.COLNUM) := ATTRS.PROCEDURE_NAME || '(H_TX'||l_min_colnum||'(I),NULL, ''' || ATTRS.ATTRIBUTE_NAME || ''',''PARTY_SITES'')';
6856       END IF;
6857     ELSE
6858       l_mincol_list(ATTRS.COLNUM) := 'Y';
6859     END IF;
6860 
6861     IF ATTRS.CUSTOM_ATTRIBUTE_PROCEDURE IS NULL THEN
6862       IF l_mincol_list(ATTRS.COLNUM) = 'Y' THEN
6863        	 -----Start of Bug No: 4279469----------
6864 	 l_attr_name := ATTRS.ATTRIBUTE_NAME;
6865          IF(ATTRS.column_data_type ='D') THEN
6866 	  l_ps_attr_name  := 'TO_CHAR(ps.'||l_attr_name||',''DD-MON-YYYY'') '||l_attr_name;
6867 	  l_loc_attr_name := 'TO_CHAR(l.'||l_attr_name||',''DD-MON-YYYY'') '||l_attr_name;
6868          ELSE
6869 	  l_ps_attr_name  := 'ps.'||l_attr_name;
6870 	  l_loc_attr_name := 'l.'||l_attr_name;
6871 	 END IF;
6872          -----End of Bug No: 4279469------------
6873         IF ATTRS.SOURCE_TABLE='HZ_LOCATIONS' THEN
6874           l_select(idx) := l_loc_attr_name;
6875         ELSIF ATTRS.SOURCE_TABLE='HZ_PARTY_SITES' THEN
6876           l_select(idx) := l_ps_attr_name;
6877         END IF;
6878       ELSE
6879         l_select(idx) := 'N';
6880       END IF;
6881 
6882       l_custom_list(ATTRS.COLNUM) := 'N';
6883     ELSE
6884       l_select(idx) := 'N';
6885       l_custom_list(ATTRS.COLNUM) := 'N';
6886       IF ATTRS.ATTRIBUTE_NAME = 'ADDRESS' THEN
6887         IF l_mincol_list(ATTRS.COLNUM) = 'Y' THEN
6888           l_select(idx) := 'rtrim(l.address1 || '' '' || l.address2 || '' '' || l.address3 || '' '' || l.address4)';
6889         END IF;
6890       ELSE
6891         IF l_mincol_list(ATTRS.COLNUM) = 'Y' THEN
6892           IF has_context(ATTRS.custom_attribute_procedure) THEN
6893             l_custom_list(ATTRS.COLNUM) := ATTRS.custom_attribute_procedure || '(H_PARTY_SITE_ID(I),''PARTY_SITES'','''||ATTRS.ATTRIBUTE_NAME|| ''', ''STAGE'')';
6894           ELSE
6895             l_custom_list(ATTRS.COLNUM) := ATTRS.custom_attribute_procedure || '(H_PARTY_SITE_ID(I), ''PARTY_SITES'','''||ATTRS.ATTRIBUTE_NAME|| ''')';
6896           END IF;
6897         END IF;
6898       END IF;
6899     END IF;
6900     idx := idx+1;
6901 
6902     -- VJN ADDED CODE FOR TRACKING CONDITION ATTRIBUTES AT THIS ENTITY LEVEL
6903     IF HZ_WORD_CONDITIONS_PKG.is_a_cond_attrib( ATTRS.attribute_id)
6904      THEN
6905          l_cond_attrib_list(ATTRS.COLNUM) := ATTRS.attribute_id ;
6906     END IF;
6907 
6908   END LOOP;
6909 
6910   IF cur_col_num<=255 THEN--bug 5977628
6911     FOR I in cur_col_num..255 LOOP
6912       l_mincol_list(I) := 'N';
6913       l_forall_list(I) := 'N';
6914       l_custom_list(I) := 'N';
6915     END LOOP;
6916   END IF;
6917 
6918   l('    CURSOR party_site_cur IS');
6919   l('            SELECT /*+ ORDERED USE_NL(ps l) */ ps.PARTY_SITE_ID, g.party_id, g.org_contact_id, g.PARTY_INDEX, ps.status '); --Bug No: 4299785
6920   FOR I in 1..l_select.COUNT LOOP
6921     IF l_select(I) <> 'N' THEN
6922       l('                  ,' || l_select(I));
6923     END IF;
6924   END LOOP;
6925 
6926   l('            FROM HZ_DQM_STAGE_GT g, HZ_PARTY_SITES ps, HZ_LOCATIONS l');
6927   l('            WHERE ps.PARTY_ID = g.owner_id ');
6928   l('            AND (ps.status is null OR ps.status = ''A'' OR ps.status = ''I'')    ');
6929   l('            AND ps.location_id = l.location_id; ');
6930 
6931   l('  BEGIN');
6932   l('    OPEN party_site_cur;');
6933   l('    LOOP');
6934   l('      FETCH party_site_cur BULK COLLECT INTO');
6935   l('        H_PARTY_SITE_ID');
6936   l('        ,H_PS_PARTY_ID');
6937   l('        ,H_PS_ORG_CONTACT_ID');
6938   l('        ,H_PARTY_INDEX');
6939   l('        ,H_STATUS'); --Bug No: 4299785
6940 
6941   FOR I IN 1..255 LOOP
6942     IF l_forall_list(I) <> 'N' AND l_mincol_list(I) = 'Y' AND
6943        l_custom_list(I) = 'N' THEN
6944       l('         ,H_TX'||I);
6945     END IF;
6946   END LOOP;
6947   l('      LIMIT l_limit;');
6948   l('');
6949   l('    IF party_site_cur%NOTFOUND THEN');
6950   l('      l_last_fetch:=TRUE;');
6951   l('    END IF;');
6952 
6953   l('    IF H_PS_PARTY_ID.COUNT=0 AND l_last_fetch THEN');
6954   l('      EXIT;');
6955   l('    END IF;');
6956 
6957   l('    FOR I in H_PS_PARTY_ID.FIRST..H_PS_PARTY_ID.LAST LOOP');
6958 
6959   -- VJN INTRODUCED FOR CONDITIONAL REPLACEMENTS
6960   -- CYCLE THROUGH THE CONDITON LIST AND GENERATE THE CODE
6964   IF l_idx IS NOT NULL
6961   -- FOR POPULATING THE GLOBAL CONDITION RECORD
6962 
6963   l_idx := l_cond_attrib_list.FIRST ;
6965   THEN
6966     l('----------- SETTING GLOBAL CONDITION RECORD AT THE PARTY SITE LEVEL ---------');
6967   END IF ;
6968 
6969 
6970   l('');
6971 
6972 
6973   WHILE l_cond_attrib_list.EXISTS(l_idx)
6974   LOOP
6975 
6976       l('     HZ_WORD_CONDITIONS_PKG.set_gbl_condition_rec ('||l_cond_attrib_list(l_idx)||','||'H_TX'||l_idx||'(I));');
6977       l_idx := l_idx+1;
6978   END LOOP;
6979 
6980 
6981   FOR I IN 1..255 LOOP
6982     IF l_forall_list(I) <> 'N' THEN
6983       IF l_custom_list(I) <> 'N' AND l_mincol_list(I) = 'Y' THEN
6984         l('         H_TX'||I||'(I):='||l_custom_list(I)||';');
6985       END IF;
6986     END IF;
6987   END LOOP;
6988   FOR I IN 1..255 LOOP
6989     IF l_forall_list(I) <> 'N' THEN
6990       IF l_mincol_list(I) <> 'Y' THEN
6991         l('         H_TX'||I||'(I):='||l_forall_list(I)||';');
6992       END IF;
6993     END IF;
6994   END LOOP;
6995   FOR I IN 1..255 LOOP
6996     IF l_forall_list(I) <> 'N' THEN
6997       IF l_mincol_list(I) = 'Y' THEN
6998         l('         H_TX'||I||'(I):='||l_forall_list(I)||';');
6999       END IF;
7000     END IF;
7001   END LOOP;
7002 
7003   FIRST := TRUE;
7004   FOR ATTRS IN (SELECT a.ATTRIBUTE_ID,
7005                        a.ATTRIBUTE_NAME,
7006                        a.SOURCE_TABLE,
7007                        a.CUSTOM_ATTRIBUTE_PROCEDURE,
7008                        f.PROCEDURE_NAME,
7009                        f.STAGED_ATTRIBUTE_COLUMN,
7010                        to_number(substrb(STAGED_ATTRIBUTE_COLUMN, 3)) COLNUM
7011                 FROM HZ_TRANS_ATTRIBUTES_VL a, HZ_TRANS_FUNCTIONS_VL f
7012                 WHERE ENTITY_NAME = 'PARTY_SITES'
7013                 AND nvl(f.ACTIVE_FLAG,'Y') = 'Y'
7014                 AND f.ATTRIBUTE_ID = a.ATTRIBUTE_ID
7015                 AND nvl(a.DENORM_FLAG,'N') = 'Y') LOOP
7016      IF FIRST THEN
7017      -- Fix for bug 4872997
7018      -- Wrapping the 'l_denorm' portion of code into a begin-excpetion block
7019      -- and setting the denorm value to 'SYNC' if sqlcode-6502 error occurs
7020        l('      BEGIN ');
7021        l('        l_denorm := H_TX'||ATTRS.COLNUM||'(I)');
7022        FIRST := FALSE;
7023      ELSE
7024        l('                  || '' '' ||  H_TX'||ATTRS.COLNUM||'(I)');
7025      END IF;
7026   END LOOP;
7027   IF NOT FIRST THEN
7028     l('             ;');
7029     l('         IF H_PS_DEN(H_PARTY_INDEX(I)) = ''SYNC'' THEN');
7030     l('            NULL;');
7031     l('         ELSIF lengthb(H_PS_DEN(H_PARTY_INDEX(I)))+lengthb(l_denorm)<2000 THEN');
7032     l('           IF H_PS_DEN(H_PARTY_INDEX(I)) IS NULL OR instrb(H_PS_DEN(H_PARTY_INDEX(I)),l_denorm)=0 THEN');
7033     l('             H_PS_DEN(H_PARTY_INDEX(I)) := H_PS_DEN(H_PARTY_INDEX(I)) || '' '' || l_denorm;');
7034     l('           END IF;');
7035     l('         ELSE');
7036     l('           H_PS_DEN(H_PARTY_INDEX(I)) := ''SYNC'';');
7037     l('         END IF;');
7038     l('      EXCEPTION WHEN OTHERS THEN ');
7039     l('        IF SQLCODE=-6502 THEN');
7040     l('          H_PS_DEN(H_PARTY_INDEX(I)) := ''SYNC'';');
7041     l('        END IF; ');
7042     l('      END; ');
7043   END IF;
7044 
7045   l('    END LOOP;');
7046   l('      l_st := 1;  ');
7047   l('      l_en :=  H_PS_PARTY_ID.COUNT; ');
7048   l('      LOOP ');
7049   l('          BEGIN  ');
7050   l('          FORALL I in l_st..l_en');
7051   l('             INSERT INTO HZ_STAGED_PARTY_SITES (');
7052   l('	              PARTY_SITE_ID');
7053   l('	              ,PARTY_ID');
7054   l('	              ,ORG_CONTACT_ID');
7055   l('                 ,STATUS_FLAG'); --Bug No: 4299785
7056 
7057   FOR I IN 1..255 LOOP
7058     IF l_forall_list(I) <> 'N' THEN
7059       l('                 , TX'||I);
7060     END IF;
7061   END LOOP;
7062   l('                 ) VALUES (');
7063   l('                 H_PARTY_SITE_ID(I)');
7064   l('                ,H_PS_PARTY_ID(I)');
7065   l('                ,H_PS_ORG_CONTACT_ID(I)');
7066   l('                ,H_STATUS(I)'); --Bug No: 4299785
7067 
7068   FOR I IN 1..255 LOOP
7069     IF l_forall_list(I) <> 'N' THEN
7070       l('                 , decode(H_TX'||I||'(I),null,H_TX'||I||'(I),H_TX'||I||'(I)||'' '')');
7071     END IF;
7072   END LOOP;
7073   l('        );');
7074   l('        EXIT; ');
7075   l('        EXCEPTION  WHEN OTHERS THEN ');
7076   l('            l_st:= l_st+SQL%ROWCOUNT+1;');
7077   l('        END; ');
7078   l('      END LOOP; ');
7079   l('      FORALL I in H_PS_PARTY_ID.FIRST..H_PS_PARTY_ID.LAST ');
7080   l('        INSERT INTO HZ_DQM_STAGE_GT (PARTY_ID, OWNER_ID, OWNER_TABLE, PARTY_SITE_ID,');
7081   l('                                     ORG_CONTACT_ID,PARTY_INDEX) VALUES (');
7082   l('        H_PS_PARTY_ID(I),H_PARTY_SITE_ID(I),''HZ_PARTY_SITES'',H_PARTY_SITE_ID(I),');
7083   l('         H_PS_ORG_CONTACT_ID(I),H_PARTY_INDEX(I));');
7084 
7085   l('      IF l_last_fetch THEN');
7086   l('        EXIT;');
7087   l('      END IF;');
7088   l('    END LOOP;');
7089   l('    CLOSE party_site_cur;');
7090   l('  END;');
7091 
7092   l('');
7093   l('  PROCEDURE sync_single_party_site (');
7094   l('    p_party_site_id NUMBER,');
7098   l('  l_tryupd BOOLEAN;');
7095   l('    p_operation VARCHAR2) IS');
7096   l('');
7097   l('  l_tryins BOOLEAN;');
7099   l('   BEGIN');
7100 
7101   l('     SELECT ps.PARTY_SITE_ID, d.party_id, d.org_contact_id, ps.STATUS '); --Bug No: 4299785
7102   FOR I in 1..l_select.COUNT LOOP
7103     IF l_select(I) <> 'N' THEN
7104       l('                  ,' || l_select(I));
7105     END IF;
7106   END LOOP;
7107   l('      INTO H_PARTY_SITE_ID(1), H_PARTY_ID(1), H_ORG_CONTACT_ID(1), H_STATUS(1)'); --Bug No: 4299785
7108   FOR I IN 1..255 LOOP
7109     IF l_forall_list(I) <> 'N' AND l_mincol_list(I) = 'Y' AND
7110        l_custom_list(I) = 'N' THEN
7111       l('         , H_TX'||I||'(1)');
7112     END IF;
7113   END LOOP;
7114   l('     FROM HZ_PARTY_SITES ps, HZ_DQM_SYNC_INTERFACE d, HZ_LOCATIONS l ');
7115   l('     WHERE d.ENTITY=''PARTY_SITES'' ');
7116   l('     AND ps.party_site_id = p_party_site_id');
7117   l('     AND d.record_id = ps.party_site_id ');
7118   l('     AND ps.location_id = l.location_id ');
7119   l('     AND (ps.status is null OR ps.status = ''A'' OR ps.status = ''I'')    ');
7120   l('     AND ROWNUM=1;');
7121 
7122   -- VJN INTRODUCED CODE FOR GENERATING THE POPULATION
7123   -- OF THE GLOBAL CONDITION RECORD
7124 
7125   l_idx := l_cond_attrib_list.FIRST ;
7126   IF l_idx IS NOT NULL
7127   THEN
7128     l('----------- SETTING GLOBAL CONDITION RECORD AT THE PARTY SITE LEVEL ---------');
7129   END IF ;
7130 
7131 
7132   WHILE l_cond_attrib_list.EXISTS(l_idx)
7133   LOOP
7134 
7135       l('     HZ_WORD_CONDITIONS_PKG.set_gbl_condition_rec ('||l_cond_attrib_list(l_idx)||','||'H_TX'||l_idx||'(1));');
7136       l_idx := l_idx+1;
7137   END LOOP;
7138 
7139   FOR I IN 1..255 LOOP
7140     IF l_forall_list(I) <> 'N' THEN
7141       IF l_custom_list(I) <> 'N' AND l_mincol_list(I) = 'Y' THEN
7142         l('    H_TX'||I||'(1):='||replace(l_custom_list(I),'(I)','(1)')||';');
7143       END IF;
7144     END IF;
7145   END LOOP;
7146   FOR I IN 1..255 LOOP
7147     IF l_forall_list(I) <> 'N' THEN
7148       IF l_mincol_list(I) <> 'Y' THEN
7149         l('    H_TX'||I||'(1):='||replace(l_forall_list(I),'(I)','(1)')||';');
7150       END IF;
7151     END IF;
7152   END LOOP;
7153   FOR I IN 1..255 LOOP
7154     IF l_forall_list(I) <> 'N' THEN
7155       IF l_mincol_list(I) = 'Y' THEN
7156         l('    H_TX'||I||'(1):='||replace(l_forall_list(I),'(I)','(1)')||';');
7157       END IF;
7158     END IF;
7159   END LOOP;
7160 
7161   l('   l_tryins := FALSE;');
7162   l('   l_tryupd := FALSE;');
7163   l('   IF p_operation=''C'' THEN');
7164   l('     l_tryins:=TRUE;');
7165   l('   ELSE ');
7166   l('     l_tryupd:=TRUE;');
7167   l('   END IF;');
7168   l('   WHILE (l_tryins OR l_tryupd) LOOP');
7169   l('     IF l_tryins THEN');
7170   l('       BEGIN');
7171   l('         l_tryins:=FALSE;');
7172   l('         INSERT INTO HZ_STAGED_PARTY_SITES (');
7173   l('           PARTY_SITE_ID');
7174   l('           ,PARTY_ID');
7175   l('           ,ORG_CONTACT_ID');
7176   l('           ,STATUS_FLAG'); --Bug No: 4299785
7177 
7178   FOR I IN 1..255 LOOP
7179     IF l_forall_list(I) <> 'N' THEN
7180       l('              , TX'||I);
7181     END IF;
7182   END LOOP;
7183   l('           ) VALUES (');
7184   l('            H_PARTY_SITE_ID(1)');
7185   l('            ,H_PARTY_ID(1)');
7186   l('            ,H_ORG_CONTACT_ID(1)');
7187   l('            ,H_STATUS(1)'); --Bug No: 4299785
7188 
7189   FOR I IN 1..255 LOOP
7190     IF l_forall_list(I) <> 'N' THEN
7191       l('             , decode(H_TX'||I||'(1),null,H_TX'||I||'(1),H_TX'||I||'(1)||'' '')');
7192     END IF;
7193   END LOOP;
7194   l('         );');
7195   l('       EXCEPTION');
7196   l('         WHEN DUP_VAL_ON_INDEX THEN');
7197   l('           IF p_operation=''C'' THEN');
7198   l('             l_tryupd:=TRUE;');
7199   l('           END IF;');
7200   l('       END;');
7201   l('     END IF;');
7202   l('     IF l_tryupd THEN');
7203   l('       BEGIN');
7204   l('         l_tryupd:=FALSE;');
7205   l('         UPDATE HZ_STAGED_PARTY_SITES SET ');
7206   l('            concat_col = concat_col');
7207   l('           ,status_flag = H_STATUS(1)'); --Bug No: 4299785
7208 
7209   FOR I IN 1..255 LOOP
7210     IF l_forall_list(I) <> 'N' THEN
7211       	IF (is_first) THEN
7212 	     is_first := false;
7213              l('            ,TX'||I||'=decode(H_TX'||I||'(1),null,H_TX'||I||'(1),H_TX'||I||'(1)||'' '')');
7214 	ELSE
7215              l('            ,TX'||I||'=decode(H_TX'||I||'(1),null,H_TX'||I||'(1),H_TX'||I||'(1)||'' '')');
7216 	END IF;
7217     END IF;
7218   END LOOP;
7219   l('         WHERE PARTY_SITE_ID=H_PARTY_SITE_ID(1);');
7220   l('         IF SQL%ROWCOUNT=0 AND p_operation=''U'' THEN');
7221   l('           l_tryins := TRUE;');
7222   l('         END IF;');
7223   l('       EXCEPTION ');
7224   l('         WHEN NO_DATA_FOUND THEN');
7225   l('           IF p_operation=''U'' THEN');
7226   l('             l_tryins := TRUE;');
7227   l('           END IF;');
7228   l('       END;');
7229   l('     END IF;');
7230   l('   END LOOP;');
7231   l('   --Fix for bug 5048604, to update concat_col during update of denorm column ');
7232   l('   UPDATE HZ_STAGED_PARTIES set ');
7233   l('     D_PS = ''SYNC'' ');
7234   l('    ,CONCAT_COL = CONCAT_COL ');
7235   l('   WHERE PARTY_ID = H_PARTY_ID(1); ');
7239   -- directly insert into the staging tables from SYNC.
7236   l('  END;');
7237 
7238   -- VJN Introduced for SYNC. This is the online version, which would be used to
7240   is_first := true ;
7241   l('');
7242   l('  PROCEDURE sync_single_party_site_online (');
7243   l('    p_party_site_id   NUMBER,');
7244   l('    p_operation       VARCHAR2) IS');
7245   l('');
7246   l('    l_tryins          BOOLEAN;');
7247   l('    l_tryupd          BOOLEAN;');
7248   l('    l_party_id        NUMBER; ');
7249   l('    l_party_id1       NUMBER; ');
7250   l('    l_org_contact_id  NUMBER; ');
7251   l('    l_party_type      VARCHAR2(255); ');
7252   l('    l_sql_err_message VARCHAR2(2000); ');
7253   l('');
7254   l('  BEGIN');
7255   l('');
7256   l('    l_party_id        := -1; ');
7257   l('    l_org_contact_id  := -1; ');
7258   l('');
7259   l('    BEGIN ');
7260   l('      SELECT ps.party_id,p.party_type INTO l_party_id1, l_party_type ');
7261   l('      FROM HZ_PARTY_SITES ps, HZ_PARTIES p ');
7262   l('      WHERE party_site_id  = p_party_site_id ');
7263   l('      AND   p.PARTY_ID     = ps.PARTY_ID; ');
7264   l('    -- take care of invalid party ids ');
7265   l('    EXCEPTION  ');
7266   l('      WHEN NO_DATA_FOUND THEN ');
7267   l('        -- dbms_output.put_line ( ''Exception caught in party_site ''); ');
7268   l('        RETURN; ');
7269   l('    END; ');
7270   l('');
7271   l('    IF l_party_type = ''PARTY_RELATIONSHIP'' THEN ');
7272   l('      BEGIN ');
7273   l('        SELECT r.object_id, org_contact_id INTO l_party_id,l_org_contact_id ');
7274   l('        FROM HZ_ORG_CONTACTS oc, HZ_RELATIONSHIPS r ');
7275   l('        WHERE r.party_id            = l_party_id1 '); -- Fix for bug 5207194
7276   l('        AND   r.relationship_id     = oc.party_relationship_id ');
7277   l('        AND   r.directional_flag    = ''F'' ');
7278   l('        AND   r.SUBJECT_TABLE_NAME  = ''HZ_PARTIES'' ');
7279   l('        AND   r.OBJECT_TABLE_NAME   = ''HZ_PARTIES''; ');
7280   l('      -- take care of invalid identifiers ');
7281   l('      EXCEPTION ');
7282   l('        WHEN NO_DATA_FOUND THEN ');
7283   l('          -- dbms_output.put_line ( ''Exception caught in party_rel ''); ');
7284   l('          RETURN; ');
7285   l('      END; ');
7286   l('    ELSE ');
7287   l('      l_party_id :=l_party_id1; ');
7288   l('      l_org_contact_id:=NULL; ');
7289   l('    END IF; ');
7290   l('');
7291   l('    SELECT ps.PARTY_SITE_ID, l_party_id, l_org_contact_id, ps.STATUS '); --Bug No: 4299785
7292   FOR I in 1..l_select.COUNT LOOP
7293     IF l_select(I) <> 'N' THEN
7294       l('          ,' || l_select(I));
7295     END IF;
7296   END LOOP;
7297   l('    INTO H_PARTY_SITE_ID(1), H_PARTY_ID(1), H_ORG_CONTACT_ID(1), H_STATUS(1)'); --Bug No: 4299785
7298   FOR I IN 1..255 LOOP
7299     IF l_forall_list(I) <> 'N' AND l_mincol_list(I) = 'Y' AND
7300        l_custom_list(I) = 'N' THEN
7301       l('        ,H_TX'||I||'(1)');
7302     END IF;
7303   END LOOP;
7304   l('    FROM HZ_PARTY_SITES ps, HZ_LOCATIONS l ');
7305   l('    WHERE ');
7306   l('          ps.party_site_id = p_party_site_id');
7307   l('     AND  ps.location_id = l.location_id ');
7308   l('     AND  (ps.status is null OR ps.status = ''A'' OR ps.status = ''I'')    ');
7309   l('     AND  ROWNUM=1;');
7310   l('');
7311 
7312     -- VJN INTRODUCED CODE FOR GENERATING THE POPULATION
7313     -- OF THE GLOBAL CONDITION RECORD
7314 
7315   l_idx := l_cond_attrib_list.FIRST ;
7316   IF l_idx IS NOT NULL
7317   THEN
7318     l('    ---- SETTING GLOBAL CONDITION RECORD AT THE PARTY SITE LEVEL ----');
7319   END IF ;
7320 
7321   WHILE l_cond_attrib_list.EXISTS(l_idx)
7322   LOOP
7323     l('    HZ_WORD_CONDITIONS_PKG.set_gbl_condition_rec ('||l_cond_attrib_list(l_idx)||','||'H_TX'||l_idx||'(1));');
7324     l_idx := l_idx+1;
7325   END LOOP;
7326 
7327   FOR I IN 1..255 LOOP
7328     IF l_forall_list(I) <> 'N' THEN
7329       IF l_custom_list(I) <> 'N' AND l_mincol_list(I) = 'Y' THEN
7330         l('    H_TX'||I||'(1):='||replace(l_custom_list(I),'(I)','(1)')||';');
7331       END IF;
7332     END IF;
7333   END LOOP;
7334   FOR I IN 1..255 LOOP
7335     IF l_forall_list(I) <> 'N' THEN
7336       IF l_mincol_list(I) <> 'Y' THEN
7337         l('    H_TX'||I||'(1):='||replace(l_forall_list(I),'(I)','(1)')||';');
7338       END IF;
7339     END IF;
7340   END LOOP;
7341   FOR I IN 1..255 LOOP
7342     IF l_forall_list(I) <> 'N' THEN
7343       IF l_mincol_list(I) = 'Y' THEN
7344         l('    H_TX'||I||'(1):='||replace(l_forall_list(I),'(I)','(1)')||';');
7345       END IF;
7346     END IF;
7347   END LOOP;
7348 
7349   l('');
7350   l('    l_tryins := FALSE;');
7351   l('    l_tryupd := FALSE;');
7352   l('');
7353   l('    IF p_operation=''C'' THEN');
7354   l('      l_tryins:=TRUE;');
7355   l('    ELSE ');
7356   l('      l_tryupd:=TRUE;');
7357   l('    END IF;');
7358   l('');
7359   l('    WHILE (l_tryins OR l_tryupd) LOOP');
7360   l('      IF l_tryins THEN');
7361   l('        BEGIN');
7362   l('          l_tryins:=FALSE;');
7363   l('          INSERT INTO HZ_STAGED_PARTY_SITES (');
7364   l('             PARTY_SITE_ID');
7365   l('            ,PARTY_ID');
7366   l('            ,ORG_CONTACT_ID');
7367   l('            ,STATUS_FLAG'); --Bug No: 4299785
7368 
7369   FOR I IN 1..255 LOOP
7370     IF l_forall_list(I) <> 'N' THEN
7371       l('            ,TX'||I);
7372     END IF;
7373   END LOOP;
7374   l('          ) VALUES (');
7378   l('            ,H_STATUS(1)'); --Bug No: 4299785
7375   l('             H_PARTY_SITE_ID(1)');
7376   l('            ,H_PARTY_ID(1)');
7377   l('            ,H_ORG_CONTACT_ID(1)');
7379 
7380   FOR I IN 1..255 LOOP
7381     IF l_forall_list(I) <> 'N' THEN
7382       l('            ,decode(H_TX'||I||'(1),null,H_TX'||I||'(1),H_TX'||I||'(1)||'' '')');
7383     END IF;
7384   END LOOP;
7385   l('          );');
7386   l('        EXCEPTION');
7387   l('          WHEN DUP_VAL_ON_INDEX THEN');
7388   l('            IF p_operation=''C'' THEN');
7389   l('              l_tryupd:=TRUE;');
7390   l('            END IF;');
7391   l('        END;');
7392   l('      END IF;');
7393   l('');
7394   l('      IF l_tryupd THEN');
7395   l('        BEGIN');
7396   l('          l_tryupd:=FALSE;');
7397   l('          UPDATE HZ_STAGED_PARTY_SITES SET ');
7398   l('             concat_col = concat_col');
7399   l('            ,status_flag = H_STATUS(1)'); --Bug No: 4299785
7400 
7401   FOR I IN 1..255 LOOP
7402     IF l_forall_list(I) <> 'N' THEN
7403       	IF (is_first) THEN
7404 	     is_first := false;
7405              l('            ,TX'||I||'=decode(H_TX'||I||'(1),null,H_TX'||I||'(1),H_TX'||I||'(1)||'' '')');
7406 	ELSE
7407              l('            ,TX'||I||'=decode(H_TX'||I||'(1),null,H_TX'||I||'(1),H_TX'||I||'(1)||'' '')');
7408 	END IF;
7409     END IF;
7410   END LOOP;
7411   l('          WHERE PARTY_SITE_ID=H_PARTY_SITE_ID(1);');
7412   l('          IF SQL%ROWCOUNT=0 AND p_operation=''U'' THEN');
7413   l('            l_tryins := TRUE;');
7414   l('          END IF;');
7415   l('        EXCEPTION ');
7416   l('          WHEN NO_DATA_FOUND THEN');
7417   l('            IF p_operation=''U'' THEN');
7418   l('              l_tryins := TRUE;');
7419   l('            END IF;');
7420   l('        END;');
7421   l('      END IF;');
7422   l('    END LOOP;');
7423   l('');
7424   l('    --Fix for bug 5048604, to update concat_col during update of denorm column ');
7425   l('    UPDATE HZ_STAGED_PARTIES set');
7426   l('      D_PS = ''SYNC''');
7427   l('     ,CONCAT_COL = CONCAT_COL ');
7428   l('    WHERE PARTY_ID = H_PARTY_ID(1);');
7429   l('');
7430   l('      -- REPURI. Bug 4884742. If shadow staging is completely successfully ');
7431   l('      -- insert a record into hz_dqm_sh_sync_interface table for each record ');
7432   l('    IF (HZ_DQM_SYNC.is_shadow_staging_complete) THEN ');
7433   l('      BEGIN ');
7434   l('        HZ_DQM_SYNC.insert_sh_interface_rec(l_party_id,p_party_site_id,null,l_org_contact_id,''PARTY_SITES'',p_operation); ');
7435   l('      EXCEPTION WHEN OTHERS THEN ');
7436   l('        NULL; ');
7437   l('      END; ');
7438   l('    END IF; ');
7439   l('');
7440   -- Fix for Bug 4862121.
7441   -- Added the Exception handling at this context, for the procedure.
7442   l('  EXCEPTION WHEN OTHERS THEN ');
7443   l('    -- FAILOVER : REPORT RECORD TO HZ_DQM_SYNC_INTERFACE ');
7444   l('    -- FOR ONLINE FLOWS ');
7445   l('    l_sql_err_message := SQLERRM; ');
7446   l('    insert_dqm_sync_error_rec(l_party_id, p_party_site_id, NULL, l_org_contact_id, ''PARTY_SITES'', p_operation, ''E'', ''Y'', l_sql_err_message); ');
7447   l('  END;');
7448 
7449 END;
7450 
7451 -- REPURI. Proccedure to generate the code (into HZ_STAGE_MAP_TRANSFORM)
7452 -- for OPEN_BULK_IMP_SYNC_CT_CUR query procedure. Bug 4884735.
7453 
7454 PROCEDURE gen_bulk_imp_sync_ct_query IS
7455  cur_col_num NUMBER := 1;
7456 
7457  TYPE coltab IS TABLE OF VARCHAR2(2000) INDEX BY BINARY_INTEGER;
7458 
7459  l_select coltab;
7460  FIRST BOOLEAN := FALSE;
7461 
7462  l_forall_list coltab;
7463  l_custom_list coltab;
7464  l_mincol_list coltab;
7465  l_min_colnum NUMBER;
7466  idx NUMBER :=1;
7467  is_first boolean := true;
7468 
7469  -- VJN Introduced for conditional word replacements
7470  l_cond_attrib_list coltab ;
7471  l_idx number ;
7472 
7473 BEGIN
7474 
7475   l('');
7476   l('  PROCEDURE open_bulk_imp_sync_ct_cur ( ');
7477   l('    p_batch_id             IN      NUMBER, ');
7478   l('    p_batch_mode_flag      IN      VARCHAR2, ');
7479   l('    p_from_osr             IN      VARCHAR2, ');
7480   l('    p_to_osr               IN      VARCHAR2, ');
7481   l('    p_os                   IN      VARCHAR2, ');
7482   l('    p_operation            IN      VARCHAR2, ');
7483   l('    x_sync_contact_cur     IN OUT  HZ_DQM_SYNC.SyncCurTyp) IS ');
7484   l('  BEGIN');
7485 
7486   FOR ATTRS IN (SELECT a.ATTRIBUTE_ID,
7487                        a.ATTRIBUTE_NAME,
7488                        a.SOURCE_TABLE,
7489                        a.CUSTOM_ATTRIBUTE_PROCEDURE,
7490                        f.PROCEDURE_NAME,
7491                        f.STAGED_ATTRIBUTE_COLUMN,
7492                        to_number(substrb(STAGED_ATTRIBUTE_COLUMN, 3)) COLNUM
7493                 FROM HZ_TRANS_ATTRIBUTES_VL a, HZ_TRANS_FUNCTIONS_VL f
7494                 WHERE ENTITY_NAME = 'CONTACTS'
7495                 AND nvl(f.ACTIVE_FLAG,'Y') = 'Y'
7496                 AND f.ATTRIBUTE_ID = a.ATTRIBUTE_ID
7497                 ORDER BY COLNUM) LOOP
7498     IF cur_col_num<ATTRS.COLNUM THEN
7499       FOR I in cur_col_num..ATTRS.COLNUM-1 LOOP
7500         l_mincol_list(I) := 'N';
7501         l_forall_list(I) := 'N';
7502         l_custom_list(I) := 'N';
7503       END LOOP;
7504     END IF;
7505     cur_col_num:=ATTRS.COLNUM+1;
7506     IF has_trx_context(ATTRS.PROCEDURE_NAME) THEN
7510     END IF;
7507         l_forall_list(ATTRS.COLNUM) := ATTRS.PROCEDURE_NAME || '(H_TX'||ATTRS.COLNUM||'(I),NULL, ''' || ATTRS.ATTRIBUTE_NAME || ''',''CONTACTS'',''STAGE'')';
7508     ELSE
7509         l_forall_list(ATTRS.COLNUM) := ATTRS.PROCEDURE_NAME || '(H_TX'||ATTRS.COLNUM||'(I),NULL, ''' || ATTRS.ATTRIBUTE_NAME || ''',''CONTACTS'')';
7511 
7512     SELECT min(to_number(substrb(STAGED_ATTRIBUTE_COLUMN, 3))) INTO l_min_colnum
7513     FROM HZ_TRANS_ATTRIBUTES_VL a, HZ_TRANS_FUNCTIONS_VL f
7514     WHERE ENTITY_NAME = 'CONTACTS'
7515     AND nvl(f.ACTIVE_FLAG,'Y') = 'Y'
7516     AND f.ATTRIBUTE_ID = a.ATTRIBUTE_ID
7517     AND a.ATTRIBUTE_NAME=ATTRS.ATTRIBUTE_NAME;
7518 
7519     IF ATTRS.colnum>l_min_colnum THEN
7520       l_mincol_list(ATTRS.COLNUM) := 'N';
7521       IF has_trx_context(ATTRS.PROCEDURE_NAME) THEN
7522         l_forall_list(ATTRS.COLNUM) := ATTRS.PROCEDURE_NAME || '(H_TX'||l_min_colnum||'(I),NULL, ''' || ATTRS.ATTRIBUTE_NAME || ''',''CONTACTS'',''STAGE'')';
7523       ELSE
7524         l_forall_list(ATTRS.COLNUM) := ATTRS.PROCEDURE_NAME || '(H_TX'||l_min_colnum||'(I),NULL, ''' || ATTRS.ATTRIBUTE_NAME || ''',''CONTACTS'')';
7525       END IF;
7526 
7527     ELSE
7528       l_mincol_list(ATTRS.COLNUM) := 'Y';
7529     END IF;
7530 
7531     IF ATTRS.CUSTOM_ATTRIBUTE_PROCEDURE IS NULL THEN
7532       IF l_mincol_list(ATTRS.COLNUM) = 'Y' THEN
7533         IF ATTRS.SOURCE_TABLE='HZ_PERSON_PROFILES' THEN
7534           l_select(idx) := 'pp.'||ATTRS.ATTRIBUTE_NAME;
7535         ELSIF ATTRS.SOURCE_TABLE='HZ_ORG_CONTACTS' THEN
7536           l_select(idx) := 'oc.'||ATTRS.ATTRIBUTE_NAME;
7537         ELSIF ATTRS.SOURCE_TABLE='HZ_RELATIONSHIPS' THEN
7538           l_select(idx) := 'r.'||ATTRS.ATTRIBUTE_NAME;
7539         END IF;
7540       ELSE
7541         l_select(idx) := 'N';
7542       END IF;
7543 
7544       l_custom_list(ATTRS.COLNUM) := 'N';
7545     ELSE
7546       l_select(idx) := 'N';
7547       l_custom_list(ATTRS.COLNUM) := 'N';
7548       IF ATTRS.ATTRIBUTE_NAME = 'CONTACT_NAME' THEN
7549         IF l_mincol_list(ATTRS.COLNUM) = 'Y' THEN
7550           l_select(idx) := 'rtrim(pp.person_first_name || '' '' || pp.person_last_name)';
7551         END IF;
7552       ELSE
7553         IF l_mincol_list(ATTRS.COLNUM) = 'Y' THEN
7554           IF has_context(ATTRS.custom_attribute_procedure) THEN
7555             l_custom_list(ATTRS.COLNUM) := ATTRS.custom_attribute_procedure || '(H_ORG_CONTACT_ID(I),''CONTACTS'','''||ATTRS.ATTRIBUTE_NAME|| ''', ''STAGE'')';
7556           ELSE
7557             l_custom_list(ATTRS.COLNUM) := ATTRS.custom_attribute_procedure || '(H_ORG_CONTACT_ID(I), ''CONTACTS'','''||ATTRS.ATTRIBUTE_NAME|| ''')';
7558           END IF;
7559         END IF;
7560       END IF;
7561     END IF;
7562     idx := idx+1;
7563     -- VJN ADDED CODE FOR TRACKING CONDITION ATTRIBUTES AT THIS ENTITY LEVEL
7564     IF HZ_WORD_CONDITIONS_PKG.is_a_cond_attrib( ATTRS.attribute_id)
7565      THEN
7566          l_cond_attrib_list(ATTRS.COLNUM) := ATTRS.attribute_id ;
7567     END IF;
7568   END LOOP;
7569 
7570   IF cur_col_num<=255 THEN--bug 5977628
7571     FOR I in cur_col_num..255 LOOP
7572       l_mincol_list(I) := 'N';
7573       l_forall_list(I) := 'N';
7574       l_custom_list(I) := 'N';
7575     END LOOP;
7576   END IF;
7577 
7578   l('    OPEN x_sync_contact_cur FOR ' );
7579   l('      SELECT ');
7580   l('         /*+ ORDERED USE_NL(R OC PP)*/');
7581   l('         oc.ORG_CONTACT_ID ');
7582   l('        ,r.OBJECT_ID ');
7583   l('        ,r.PARTY_ID ');
7584   l('        ,r.STATUS '); --Propagating Bug 4299785 fix to sync modifications
7585   l('        ,oc.ROWID ');
7586 
7587   FOR I in 1..l_select.COUNT LOOP
7588     IF l_select(I) <> 'N' THEN
7589       l('        ,' || l_select(I));
7590     END IF;
7591   END LOOP;
7592 
7593   l('      FROM hz_org_contacts oc, hz_imp_contacts_sg ocsg, hz_imp_batch_details bd, ');
7594   l('           hz_relationships r, hz_person_profiles pp');
7595   l('      WHERE ocsg.batch_mode_flag     = p_batch_mode_flag ');
7596   l('      AND   oc.party_relationship_id = r.relationship_id ');
7597   l('      AND   ocsg.batch_id            = p_batch_id ');
7598   l('      AND   ocsg.sub_orig_system     = p_os ');
7599   l('      AND   ocsg.contact_id          = oc.org_contact_id ');
7600   l('      AND   oc.request_id            = bd.main_conc_req_id ');
7601   l('      AND   bd.batch_id              = ocsg.batch_id ');
7602   l('      AND   r.subject_id             = pp.party_id ');
7603   l('      AND   r.subject_type           = ''PERSON'' ');
7604   l('      AND   r.SUBJECT_TABLE_NAME     = ''HZ_PARTIES''');
7605   l('      AND   r.OBJECT_TABLE_NAME      = ''HZ_PARTIES''');
7606   l('      AND   DIRECTIONAL_FLAG         = ''F'' ');
7607   l('      AND   ocsg.action_flag          = p_operation ');
7608   l('      AND   pp.effective_end_date  IS NULL ');
7609   l('      AND   ocsg.sub_orig_system_reference BETWEEN p_from_osr AND p_to_osr ');
7610   l('      AND   (oc.status IS NULL OR oc.status = ''A'' OR oc.status = ''I'')');
7611   l('      AND   (r.status  IS NULL OR r.status  = ''A'' OR r.status  = ''I'') ');
7612   l('      UNION ');
7613   l('      SELECT ');
7614   l('         /*+ ORDERED USE_NL(R OC PP)*/');
7615   l('         oc.ORG_CONTACT_ID ');
7616   l('        ,r.OBJECT_ID ');
7617   l('        ,r.PARTY_ID ');
7618   l('        ,r.STATUS '); --Propagating Bug 4299785 fix to sync modifications
7619   l('        ,oc.ROWID ');
7620 
7621   FOR I in 1..l_select.COUNT LOOP
7622     IF l_select(I) <> 'N' THEN
7623       l('        ,' || l_select(I));
7624     END IF;
7625   END LOOP;
7626 
7630   l('      AND   rsg.batch_id            = p_batch_id ');
7627   l('      FROM hz_org_contacts oc, hz_imp_relships_sg rsg, hz_imp_batch_details bd ');
7628   l('          ,hz_relationships r, hz_person_profiles pp ');
7629   l('      WHERE rsg.batch_mode_flag     = p_batch_mode_flag ');
7631   l('      AND   rsg.sub_orig_system     = p_os ');
7632   l('      AND   rsg.relationship_id     = oc.party_relationship_id ');
7633   l('      AND   oc.request_id           = bd.main_conc_req_id ');
7634   l('      AND   bd.batch_id             = rsg.batch_id ');
7635   l('      AND   rsg.relationship_id     = r.relationship_id ');
7636   l('      AND   r.directional_flag      = ''F'' ');
7637   l('      AND   r.subject_id            = pp.party_id ');
7638   l('      AND   r.subject_type          = ''PERSON'' ');
7639   l('      AND   r.object_type           = ''ORGANIZATION'' ');
7640   l('      AND   r.SUBJECT_TABLE_NAME    = ''HZ_PARTIES'' ');
7641   l('      AND   r.OBJECT_TABLE_NAME     = ''HZ_PARTIES'' ');
7642   l('      AND   rsg.action_flag         = p_operation ');
7643   l('      AND   pp.effective_end_date   IS NULL ');
7644   l('      AND   rsg.sub_orig_system_reference BETWEEN p_from_osr AND p_to_osr ');
7645   l('      AND   (oc.status IS NULL OR oc.status = ''A'' OR oc.status = ''I'')');
7646   l('      AND   (r.status  IS NULL OR r.status  = ''A'' OR r.status  = ''I'');');
7647 
7648   l('  END open_bulk_imp_sync_ct_cur; ');
7649 
7650 END gen_bulk_imp_sync_ct_query;
7651 
7652 
7653 
7654 -- REPURI. Proccedure to generate the code (into HZ_STAGE_MAP_TRANSFORM)
7655 -- for OPEN_SYNC_CONTACT_CURSOR and SYNC_ALL_CONTACTS Procedures.
7656 
7657 PROCEDURE generate_sync_ct_query_proc IS
7658  cur_col_num NUMBER := 1;
7659 
7660  TYPE coltab IS TABLE OF VARCHAR2(2000) INDEX BY BINARY_INTEGER;
7661 
7662  l_select coltab;
7663  FIRST BOOLEAN := FALSE;
7664 
7665  l_forall_list coltab;
7666  l_custom_list coltab;
7667  l_mincol_list coltab;
7668  l_min_colnum NUMBER;
7669  idx NUMBER :=1;
7670  is_first boolean := true;
7671 
7672  -- VJN Introduced for conditional word replacements
7673  l_cond_attrib_list coltab ;
7674  l_idx number ;
7675 
7676 BEGIN
7677 
7678   l('');
7679   l('  PROCEDURE open_sync_contact_cursor ( ');
7680   l('    p_operation            IN      VARCHAR2,');
7681   l('    p_from_rec             IN      VARCHAR2,');
7682   l('    p_to_rec               IN      VARCHAR2,');
7683   l('    x_sync_contact_cur     IN OUT  HZ_DQM_SYNC.SyncCurTyp) IS ');
7684   l('  BEGIN');
7685 
7686   FOR ATTRS IN (SELECT a.ATTRIBUTE_ID,
7687                        a.ATTRIBUTE_NAME,
7688                        a.SOURCE_TABLE,
7689                        a.CUSTOM_ATTRIBUTE_PROCEDURE,
7690                        f.PROCEDURE_NAME,
7691                        f.STAGED_ATTRIBUTE_COLUMN,
7692                        to_number(substrb(STAGED_ATTRIBUTE_COLUMN, 3)) COLNUM
7693                 FROM HZ_TRANS_ATTRIBUTES_VL a, HZ_TRANS_FUNCTIONS_VL f
7694                 WHERE ENTITY_NAME = 'CONTACTS'
7695                 AND nvl(f.ACTIVE_FLAG,'Y') = 'Y'
7696                 AND f.ATTRIBUTE_ID = a.ATTRIBUTE_ID
7697                 ORDER BY COLNUM) LOOP
7698     IF cur_col_num<ATTRS.COLNUM THEN
7699       FOR I in cur_col_num..ATTRS.COLNUM-1 LOOP
7700         l_mincol_list(I) := 'N';
7701         l_forall_list(I) := 'N';
7702         l_custom_list(I) := 'N';
7703       END LOOP;
7704     END IF;
7705     cur_col_num:=ATTRS.COLNUM+1;
7706     IF has_trx_context(ATTRS.PROCEDURE_NAME) THEN
7707         l_forall_list(ATTRS.COLNUM) := ATTRS.PROCEDURE_NAME || '(H_TX'||ATTRS.COLNUM||'(I),NULL, ''' || ATTRS.ATTRIBUTE_NAME || ''',''CONTACTS'',''STAGE'')';
7708     ELSE
7709         l_forall_list(ATTRS.COLNUM) := ATTRS.PROCEDURE_NAME || '(H_TX'||ATTRS.COLNUM||'(I),NULL, ''' || ATTRS.ATTRIBUTE_NAME || ''',''CONTACTS'')';
7710     END IF;
7711 
7712     SELECT min(to_number(substrb(STAGED_ATTRIBUTE_COLUMN, 3))) INTO l_min_colnum
7713     FROM HZ_TRANS_ATTRIBUTES_VL a, HZ_TRANS_FUNCTIONS_VL f
7714     WHERE ENTITY_NAME = 'CONTACTS'
7715     AND nvl(f.ACTIVE_FLAG,'Y') = 'Y'
7716     AND f.ATTRIBUTE_ID = a.ATTRIBUTE_ID
7717     AND a.ATTRIBUTE_NAME=ATTRS.ATTRIBUTE_NAME;
7718 
7719     IF ATTRS.colnum>l_min_colnum THEN
7720       l_mincol_list(ATTRS.COLNUM) := 'N';
7721       IF has_trx_context(ATTRS.PROCEDURE_NAME) THEN
7722         l_forall_list(ATTRS.COLNUM) := ATTRS.PROCEDURE_NAME || '(H_TX'||l_min_colnum||'(I),NULL, ''' || ATTRS.ATTRIBUTE_NAME || ''',''CONTACTS'',''STAGE'')';
7723       ELSE
7724         l_forall_list(ATTRS.COLNUM) := ATTRS.PROCEDURE_NAME || '(H_TX'||l_min_colnum||'(I),NULL, ''' || ATTRS.ATTRIBUTE_NAME || ''',''CONTACTS'')';
7725       END IF;
7726 
7727     ELSE
7728       l_mincol_list(ATTRS.COLNUM) := 'Y';
7729     END IF;
7730 
7731     IF ATTRS.CUSTOM_ATTRIBUTE_PROCEDURE IS NULL THEN
7732       IF l_mincol_list(ATTRS.COLNUM) = 'Y' THEN
7733         IF ATTRS.SOURCE_TABLE='HZ_PERSON_PROFILES' THEN
7734           l_select(idx) := 'pp.'||ATTRS.ATTRIBUTE_NAME;
7735         ELSIF ATTRS.SOURCE_TABLE='HZ_ORG_CONTACTS' THEN
7736           l_select(idx) := 'oc.'||ATTRS.ATTRIBUTE_NAME;
7737         ELSIF ATTRS.SOURCE_TABLE='HZ_RELATIONSHIPS' THEN
7738           l_select(idx) := 'r.'||ATTRS.ATTRIBUTE_NAME;
7739         END IF;
7740       ELSE
7741         l_select(idx) := 'N';
7742       END IF;
7743 
7744       l_custom_list(ATTRS.COLNUM) := 'N';
7745     ELSE
7746       l_select(idx) := 'N';
7747       l_custom_list(ATTRS.COLNUM) := 'N';
7748       IF ATTRS.ATTRIBUTE_NAME = 'CONTACT_NAME' THEN
7749         IF l_mincol_list(ATTRS.COLNUM) = 'Y' THEN
7753         IF l_mincol_list(ATTRS.COLNUM) = 'Y' THEN
7750           l_select(idx) := 'rtrim(pp.person_first_name || '' '' || pp.person_last_name)';
7751         END IF;
7752       ELSE
7754           IF has_context(ATTRS.custom_attribute_procedure) THEN
7755             l_custom_list(ATTRS.COLNUM) := ATTRS.custom_attribute_procedure || '(H_ORG_CONTACT_ID(I),''CONTACTS'','''||ATTRS.ATTRIBUTE_NAME|| ''', ''STAGE'')';
7756           ELSE
7757             l_custom_list(ATTRS.COLNUM) := ATTRS.custom_attribute_procedure || '(H_ORG_CONTACT_ID(I), ''CONTACTS'','''||ATTRS.ATTRIBUTE_NAME|| ''')';
7758           END IF;
7759         END IF;
7760       END IF;
7761     END IF;
7762     idx := idx+1;
7763     -- VJN ADDED CODE FOR TRACKING CONDITION ATTRIBUTES AT THIS ENTITY LEVEL
7764     IF HZ_WORD_CONDITIONS_PKG.is_a_cond_attrib( ATTRS.attribute_id)
7765      THEN
7766          l_cond_attrib_list(ATTRS.COLNUM) := ATTRS.attribute_id ;
7767     END IF;
7768   END LOOP;
7769 
7770   IF cur_col_num<=255 THEN--bug 5977628
7771     FOR I in cur_col_num..255 LOOP
7772       l_mincol_list(I) := 'N';
7773       l_forall_list(I) := 'N';
7774       l_custom_list(I) := 'N';
7775     END LOOP;
7776   END IF;
7777 
7778   l('    OPEN x_sync_contact_cur FOR ' );
7779   l('      SELECT ');
7780  -- Start Bug:5460390------
7781   --l('         /*+ ORDERED USE_NL(R OC PP)*/');
7782   l('         /*+ leading(dsi) USE_NL(OC R PP) */ ');
7783  -- End Bug:5460390------
7784   l('         oc.ORG_CONTACT_ID ');
7785   l('        ,r.OBJECT_ID ');
7786   l('        ,r.PARTY_ID ');
7787   l('        ,r.STATUS '); --Propagating Bug 4299785 fix to sync modifications
7788   l('        ,dsi.ROWID ');
7789 
7790   FOR I in 1..l_select.COUNT LOOP
7791     IF l_select(I) <> 'N' THEN
7792       l('        ,' || l_select(I));
7793     END IF;
7794   END LOOP;
7795 
7796   l('      FROM HZ_DQM_SYNC_INTERFACE dsi, HZ_RELATIONSHIPS r,');
7797   l('           HZ_ORG_CONTACTS oc, HZ_PERSON_PROFILES pp');
7798   l('      WHERE oc.party_relationship_id = r.relationship_id ');
7799   l('      AND   dsi.record_id            = oc.org_contact_id ');
7800   l('      AND   r.subject_id             = pp.party_id ');
7801   l('      AND   r.subject_type           = ''PERSON'' ');
7802   l('      AND   r.SUBJECT_TABLE_NAME     = ''HZ_PARTIES''');
7803   l('      AND   r.OBJECT_TABLE_NAME      = ''HZ_PARTIES''');
7804   l('      AND   DIRECTIONAL_FLAG         = ''F'' ');
7805   l('      AND   pp.effective_end_date    is NULL ');
7806   l('      AND   dsi.entity               = ''CONTACTS'' ');
7807   l('      AND   dsi.operation            = p_operation ');
7808   l('      AND   dsi.staged_flag          = ''N'' ');
7809   l('      AND   dsi.sync_interface_num  >= p_from_rec ');
7810   l('      AND   dsi.sync_interface_num  <= p_to_rec ');
7811   l('      AND   (oc.status is null OR oc.status = ''A'' or oc.status = ''I'')');
7812   l('      AND   (r.status is null OR r.status = ''A'' or r.status = ''I'');');
7813   l('  END; ');
7814 
7815   l('');
7816   l('  PROCEDURE sync_all_contacts ( ');
7817   l('    p_operation               IN VARCHAR2, ');
7818   l('    p_bulk_sync_type          IN VARCHAR2, ');
7819   l('    p_sync_all_contact_cur    IN HZ_DQM_SYNC.SyncCurTyp) IS ');
7820   l('');
7821   l('    l_limit         NUMBER  := ' || g_batch_size || ';');
7822   l('    l_last_fetch    BOOLEAN := FALSE;');
7823   l('    l_sql_errm      VARCHAR2(2000); ');
7824   l('    l_st            NUMBER; ');
7825   l('    l_en            NUMBER; ');
7826   l('    l_err_index     NUMBER; ');
7827   l('    l_err_count     NUMBER; ');
7828   l('');
7829   l('    bulk_errors     EXCEPTION; ');
7830   l('    PRAGMA EXCEPTION_INIT(bulk_errors, -24381); ');
7831   l('');
7832   l('  BEGIN');
7833   l('    log (''Begin Synchronizing Contacts''); ');
7834   l('    LOOP');
7835   l('      log (''Bulk Collecting Contacts Data...'',FALSE); ');
7836   l('      FETCH p_sync_all_contact_cur BULK COLLECT INTO');
7837   l('         H_ORG_CONTACT_ID');
7838   l('        ,H_C_PARTY_ID');
7839   l('        ,H_R_PARTY_ID');
7840   l('        ,H_STATUS'); --Propagating Bug 4299785 fix to sync modifications
7841   l('        ,H_ROWID');
7842 
7843   FOR I IN 1..255 LOOP
7844     IF l_forall_list(I) <> 'N' AND l_mincol_list(I) = 'Y' AND
7845        l_custom_list(I) = 'N' THEN
7846       l('        ,H_TX'||I);
7847     END IF;
7848   END LOOP;
7849   l('      LIMIT l_limit;');
7850   l('      log (''Done''); ');
7851   l('');
7852   l('      IF p_sync_all_contact_cur%NOTFOUND THEN');
7853   l('        l_last_fetch:=TRUE;');
7854   l('      END IF;');
7855   l('');
7856   l('      IF H_ORG_CONTACT_ID.COUNT=0 AND l_last_fetch THEN');
7857   l('        EXIT;');
7858   l('      END IF;');
7859   l('');
7860   l('      log (''Synchronizing for ''||H_ORG_CONTACT_ID.COUNT||'' Contacts''); ');
7861   l('      log (''Populating Contacts Transformation Functions into Arrays...'',FALSE); ');
7862   l('');
7863   l('      FOR I in H_ORG_CONTACT_ID.FIRST..H_ORG_CONTACT_ID.LAST LOOP');
7864 
7865   -- VJN INTRODUCED CODE FOR GENERATING THE POPULATION
7866   -- OF THE GLOBAL CONDITION RECORD
7867 
7868   l_idx := l_cond_attrib_list.FIRST ;
7869   IF l_idx IS NOT NULL
7870   THEN
7871     l('        ---- SETTING GLOBAL CONDITION RECORD AT THE CONTACT LEVEL ----');
7872     l('');
7873   END IF ;
7874 
7875   WHILE l_cond_attrib_list.EXISTS(l_idx)
7876   LOOP
7877       l('        HZ_WORD_CONDITIONS_PKG.set_gbl_condition_rec ('||l_cond_attrib_list(l_idx)||','||'H_TX'||l_idx||'(I));');
7878       l_idx := l_idx+1;
7882 
7879   END LOOP;
7880 
7881   l('');
7883   FOR I IN 1..255 LOOP
7884     IF l_forall_list(I) <> 'N' THEN
7885       IF l_custom_list(I) <> 'N' AND l_mincol_list(I) = 'Y' THEN
7886         l('        H_TX'||I||'(I):='||l_custom_list(I)||';');
7887       END IF;
7888     END IF;
7889   END LOOP;
7890   FOR I IN 1..255 LOOP
7891     IF l_forall_list(I) <> 'N' THEN
7892       IF l_mincol_list(I) <> 'Y' THEN
7893         l('        H_TX'||I||'(I):='||l_forall_list(I)||';');
7894       END IF;
7895     END IF;
7896   END LOOP;
7897   FOR I IN 1..255 LOOP
7898     IF l_forall_list(I) <> 'N' THEN
7899       IF l_mincol_list(I) = 'Y' THEN
7900         l('        H_TX'||I||'(I):='||l_forall_list(I)||';');
7901       END IF;
7902     END IF;
7903   END LOOP;
7904 
7905   l('      END LOOP;');
7906   l('      log (''Done''); ');
7907   l('');
7908   l('      l_st :=  1;  ');
7909   l('      l_en :=  H_ORG_CONTACT_ID.COUNT; ');
7910   l('');
7911   l('      IF p_operation = ''C'' THEN ');
7912   l('        BEGIN ');
7913   l('          log (''Inserting Data into HZ_STAGED_CONTACTS...'',FALSE); ');
7914   l('          FORALL I in l_st..l_en SAVE EXCEPTIONS ');
7915   l('            INSERT INTO HZ_STAGED_CONTACTS (');
7916   l('	            ORG_CONTACT_ID');
7917   l('              ,PARTY_ID');
7918   l('              ,STATUS_FLAG '); --Propagating Bug 4299785 fix to sync modifications
7919   FOR I IN 1..255 LOOP
7920     IF l_forall_list(I) <> 'N' THEN
7921       l('              ,TX'||I);
7922     END IF;
7923   END LOOP;
7924   l('            ) VALUES (');
7925   l('               H_ORG_CONTACT_ID(I)');
7926   l('              ,H_C_PARTY_ID(I)');
7927   l('              ,H_STATUS(I)'); --Propagating Bug 4299785 fix to sync modifications
7928 
7929   FOR I IN 1..255 LOOP
7930     IF l_forall_list(I) <> 'N' THEN
7931       l('              ,decode(H_TX'||I||'(I),null,H_TX'||I||'(I),H_TX'||I||'(I)||'' '')');
7932     END IF;
7933   END LOOP;
7934   l('            );');
7935   l('          log (''Done''); ');
7936   l('        EXCEPTION  WHEN bulk_errors THEN ');
7937   l('          l_err_count := SQL%BULK_EXCEPTIONS.COUNT; ');
7938   l('          FOR indx IN 1..l_err_count LOOP ');
7939   l('            l_err_index := SQL%BULK_EXCEPTIONS(indx).ERROR_INDEX; ');
7940   l('            l_sql_errm  := sqlerrm(-SQL%BULK_EXCEPTIONS(indx).ERROR_CODE); ');
7941   -- SCHITRAP: Bug:5357970 - Error code is a number. Oracle error for ''DUP_VAL_ON_INDEX'' is ORA-00001
7942   --l('            IF (SQL%BULK_EXCEPTIONS(indx).ERROR_CODE) = ''DUP_VAL_ON_INDEX'' THEN ');
7943   l('            IF (instr(l_sql_errm,''ORA-00001'')>0) THEN  ');
7944   l('              log (''Exception DUP_VAL_ON_INDEX occured while inserting a Contact with ORG_CONTACT_ID - ''||H_ORG_CONTACT_ID(l_err_index)); ');
7945   l('              DELETE FROM HZ_DQM_SYNC_INTERFACE WHERE ENTITY=''CONTACTS'' AND OPERATION=''C'' AND RECORD_ID=H_ORG_CONTACT_ID(l_err_index);	');
7946   l('            ELSE ');
7947   l('              IF p_bulk_sync_type = ''DQM_SYNC'' THEN ');
7948   l('                UPDATE hz_dqm_sync_interface ');
7949   l('                  SET  error_data = l_sql_errm ');
7950   l('                  ,staged_flag    = decode (error_data, NULL, ''N'', ''E'') ');
7951   l('                WHERE rowid       = H_ROWID(l_err_index); ');
7952   l('              ELSIF  p_bulk_sync_type = ''IMPORT_SYNC'' THEN ');
7953   l('                -- Insert the Error Record into HZ_DQM_SYNC_INTERFACE table ');
7954   l('                insert_dqm_sync_error_rec(H_C_PARTY_ID(l_err_index), H_ORG_CONTACT_ID(l_err_index), NULL, NULL, ''CONTACTS'', p_operation, ''E'', ''N'', l_sql_errm); ');
7955   l('              END IF; ');
7956   l('            END IF; ');
7957   l('          END LOOP; ');
7958   l('        END; ');
7959   l('      ELSIF p_operation = ''U'' THEN ');
7960   l('        BEGIN ');
7961   l('          log (''Updating Data in HZ_STAGED_CONTACTS...'',FALSE); ');
7962   l('          FORALL I in l_st..l_en SAVE EXCEPTIONS ');
7963   l('            UPDATE HZ_STAGED_CONTACTS SET ');
7964   l('              concat_col = concat_col');
7965   l('             ,status_flag = H_STATUS(I)'); --Propagating Bug 4299785 fix to sync modifications
7966 
7967   FOR I IN 1..255 LOOP
7968     IF l_forall_list(I) <> 'N' THEN
7969       IF (is_first) THEN
7970         is_first := false;
7971         l('              ,TX'||I||'=decode(H_TX'||I||'(I),null,H_TX'||I||'(I),H_TX'||I||'(I)||'' '')');
7972 	  ELSE
7973         l('              ,TX'||I||'=decode(H_TX'||I||'(I),null,H_TX'||I||'(I),H_TX'||I||'(I)||'' '')');
7974 	  END IF;
7975     END IF;
7976   END LOOP;
7977   l('            WHERE ORG_CONTACT_ID=H_ORG_CONTACT_ID(I);');
7978   l('          log (''Done''); ');
7979   l('        EXCEPTION  WHEN bulk_errors THEN ');
7980   l('          l_err_count := SQL%BULK_EXCEPTIONS.COUNT; ');
7981   l('          FOR indx IN 1..l_err_count LOOP ');
7982   l('            l_err_index := SQL%BULK_EXCEPTIONS(indx).ERROR_INDEX; ');
7983   l('            l_sql_errm  := sqlerrm(-SQL%BULK_EXCEPTIONS(indx).ERROR_CODE); ');
7984   -- SCHITRAP: Bug:5357970 - Error code is a number. Oracle error for ''DUP_VAL_ON_INDEX'' is ORA-00001
7985   --l('            IF (SQL%BULK_EXCEPTIONS(indx).ERROR_CODE) = ''DUP_VAL_ON_INDEX'' THEN ');
7986   l('            IF (instr(l_sql_errm,''ORA-00001'')>0) THEN  ');
7987   l('              log (''Exception DUP_VAL_ON_INDEX occured while inserting a Contact with ORG_CONTACT_ID - ''||H_ORG_CONTACT_ID(l_err_index)); ');
7988   l('              DELETE FROM HZ_DQM_SYNC_INTERFACE WHERE ENTITY=''CONTACTS'' AND OPERATION=''U'' AND RECORD_ID=H_ORG_CONTACT_ID(l_err_index);	');
7989   l('            ELSE ');
7993   l('                  ,staged_flag    = decode (error_data, NULL, ''N'', ''E'') ');
7990   l('              IF p_bulk_sync_type = ''DQM_SYNC'' THEN ');
7991   l('                UPDATE hz_dqm_sync_interface ');
7992   l('                  SET  error_data = l_sql_errm ');
7994   l('                WHERE rowid       = H_ROWID(l_err_index); ');
7995   l('              ELSIF  p_bulk_sync_type = ''IMPORT_SYNC'' THEN ');
7996   l('                -- Insert the Error Record into HZ_DQM_SYNC_INTERFACE table ');
7997   l('                insert_dqm_sync_error_rec(H_C_PARTY_ID(l_err_index), H_ORG_CONTACT_ID(l_err_index), NULL, NULL, ''CONTACTS'', p_operation, ''E'', ''N'', l_sql_errm); ');
7998   l('              END IF; ');
7999   l('            END IF; ');
8000   l('          END LOOP; ');
8001   l('        END; ');
8002   l('      END IF;');
8003   l('');
8004   l('      IF l_last_fetch THEN');
8005   l('        -- Update HZ_STAGED_PARTIES, if corresponding child entity records ');
8006   l('        -- CONTACTS (in this case), have been inserted/updated ');
8007   l('');
8008   l('        log (''Updating D_CT column to SYNC in HZ_STAGED_PARTIES table for all related records...'',FALSE); ');
8009   l('        --Fix for bug 5048604, to update concat_col during update of denorm column ');
8010   l('        FORALL I IN H_ORG_CONTACT_ID.FIRST..H_ORG_CONTACT_ID.LAST ');
8011   l('          UPDATE HZ_STAGED_PARTIES set ');
8012   l('            D_CT = ''SYNC'' ');
8013   l('           ,CONCAT_COL = CONCAT_COL ');
8014   l('          WHERE PARTY_ID = H_C_PARTY_ID(I); ');
8015   l('        log (''Done''); ');
8016   l('');
8017   l('      -- REPURI. Bug 4884742. ');
8018   l('      -- Bulk Insert of Import Contacts into  Shadow Sync Interface table ');
8019   l('      -- if Shadow Staging has already run and completed successfully ');
8020   l('      IF ((p_bulk_sync_type = ''IMPORT_SYNC'') AND ');
8021   l('          (HZ_DQM_SYNC.is_shadow_staging_complete)) THEN ');
8022   l('        BEGIN ');
8023   l('           -- REPURI. Bug 4968126. ');
8024   l('           -- Using the Merge instead of Insert statement ');
8025   l('           -- so that duplicate records dont get inserted. ');
8026   l('          log (''Merging data into HZ_DQM_SH_SYNC_INTERFACE...'',FALSE); ');
8027   l('          FORALL I in l_st..l_en  ');
8028   l('            MERGE INTO hz_dqm_sh_sync_interface S ');
8029   l('              USING ( ');
8030   l('                SELECT ');
8031   l('                   H_C_PARTY_ID(I)      AS party_id ');
8032   l('                  ,H_ORG_CONTACT_ID(I)  AS record_id ');
8033   l('                FROM dual ) T ');
8034   l('              ON (S.entity        = ''CONTACTS'' AND ');
8035   l('                  S.party_id      = T.party_id   AND ');
8036   l('                  S.record_id     = T.record_id  AND ');
8037   l('                  S.staged_flag   <> ''E'') ');
8038   l('              WHEN NOT MATCHED THEN ');
8039   l('              INSERT ( ');
8040   l('                PARTY_ID, ');
8041   l('                RECORD_ID, ');
8042   l('                PARTY_SITE_ID, ');
8043   l('                ORG_CONTACT_ID, ');
8044   l('                ENTITY, ');
8045   l('                OPERATION, ');
8046   l('                STAGED_FLAG, ');
8047   l('                REALTIME_SYNC_FLAG, ');
8048   l('                CREATED_BY, ');
8049   l('                CREATION_DATE, ');
8050   l('                LAST_UPDATE_LOGIN, ');
8051   l('                LAST_UPDATE_DATE, ');
8052   l('                LAST_UPDATED_BY, ');
8053   l('                SYNC_INTERFACE_NUM ');
8054   l('              ) VALUES ( ');
8055   l('                H_C_PARTY_ID(I), ');
8056   l('                H_ORG_CONTACT_ID(I), ');
8057   l('                NULL, ');
8058   l('                NULL, ');
8059   l('                ''CONTACTS'', ');
8060   l('                p_operation, ');
8061   l('                ''N'', ');
8062   l('                ''N'', ');
8063   l('                hz_utility_pub.created_by, ');
8064   l('                hz_utility_pub.creation_date, ');
8065   l('                hz_utility_pub.last_update_login, ');
8066   l('                hz_utility_pub.last_update_date, ');
8067   l('                hz_utility_pub.user_id, ');
8068   l('                HZ_DQM_SH_SYNC_INTERFACE_S.nextval ');
8069   l('            ); ');
8070   l('        log (''Done''); ');
8071   l('        EXCEPTION WHEN OTHERS THEN ');
8072   l('              log (''Exception occured while inserting data into HZ_DQM_SH_SYNC_INTERFACE Table'');   ');
8073   l('              log (''Eror Message is - ''|| sqlerrm);   ');
8074   l('        END; ');
8075   l('      END IF; ');
8076   l('');
8077   l('        FND_CONCURRENT.AF_Commit;');
8078   l('        EXIT;');
8079   l('      END IF;');
8080   l('');
8081   l('      FND_CONCURRENT.AF_Commit;');
8082   l('');
8083   l('    END LOOP;');
8084   l('    log (''End Synchronizing Contacts''); ');
8085   l('  END;');
8086 
8087 END;
8088 
8089 PROCEDURE generate_contact_query_proc IS
8090  cur_col_num NUMBER := 1;
8091 
8092  TYPE coltab IS TABLE OF VARCHAR2(2000) INDEX BY BINARY_INTEGER;
8093 
8094  l_select coltab;
8095  FIRST BOOLEAN := FALSE;
8096 
8097  l_forall_list coltab;
8098  l_custom_list coltab;
8099  l_mincol_list coltab;
8100  l_min_colnum NUMBER;
8101  idx NUMBER :=1;
8102  is_first boolean := true;
8103 
8104  -- VJN Introduced for conditional word replacements
8105  l_cond_attrib_list coltab ;
8106  l_idx number ;
8107  l_attr_name     varchar2(2000); --Bug No: 4279469
8108  l_pp_attr_name  varchar2(2000); --Bug No: 4279469
8112   l('  PROCEDURE insert_stage_contacts IS ');
8109  l_oc_attr_name  varchar2(2000); --Bug No: 4279469
8110 BEGIN
8111   l('');
8113   l('    l_limit NUMBER := ' || g_batch_size || ';');
8114   l('    l_last_fetch BOOLEAN := FALSE;');
8115   l('    l_denorm VARCHAR2(2000);');
8116   l('    l_st number; ');
8117   l('    l_en number; ');
8118   FOR ATTRS IN (SELECT a.ATTRIBUTE_ID,
8119                        a.ATTRIBUTE_NAME,
8120                        a.SOURCE_TABLE,
8121                        a.CUSTOM_ATTRIBUTE_PROCEDURE,
8122                        f.PROCEDURE_NAME,
8123                        f.STAGED_ATTRIBUTE_COLUMN,
8124                        to_number(substrb(STAGED_ATTRIBUTE_COLUMN, 3)) COLNUM,
8125 		       nvl(lkp.tag,'C') column_data_type
8126                 FROM HZ_TRANS_ATTRIBUTES_VL a, HZ_TRANS_FUNCTIONS_VL f,FND_LOOKUP_VALUES_VL lkp --Bug No: 4279469
8127                 WHERE ENTITY_NAME = 'CONTACTS'
8128                 AND nvl(f.ACTIVE_FLAG,'Y') = 'Y'
8129                 AND f.ATTRIBUTE_ID = a.ATTRIBUTE_ID
8130 		AND lkp.LOOKUP_TYPE='CONTACT_LOGICAL_ATTRIB_LIST'
8131                 AND lkp.LOOKUP_CODE =  a.ATTRIBUTE_NAME
8132                 ORDER BY COLNUM) LOOP
8133     IF cur_col_num<ATTRS.COLNUM THEN
8134       FOR I in cur_col_num..ATTRS.COLNUM-1 LOOP
8135         l_mincol_list(I) := 'N';
8136         l_forall_list(I) := 'N';
8137         l_custom_list(I) := 'N';
8138       END LOOP;
8139     END IF;
8140     cur_col_num:=ATTRS.COLNUM+1;
8141     IF has_trx_context(ATTRS.PROCEDURE_NAME) THEN
8142         l_forall_list(ATTRS.COLNUM) := ATTRS.PROCEDURE_NAME || '(H_TX'||ATTRS.COLNUM||'(I),NULL, ''' || ATTRS.ATTRIBUTE_NAME || ''',''CONTACTS'',''STAGE'')';
8143     ELSE
8144         l_forall_list(ATTRS.COLNUM) := ATTRS.PROCEDURE_NAME || '(H_TX'||ATTRS.COLNUM||'(I),NULL, ''' || ATTRS.ATTRIBUTE_NAME || ''',''CONTACTS'')';
8145     END IF;
8146 
8147     SELECT min(to_number(substrb(STAGED_ATTRIBUTE_COLUMN, 3))) INTO l_min_colnum
8148     FROM HZ_TRANS_ATTRIBUTES_VL a, HZ_TRANS_FUNCTIONS_VL f
8149     WHERE ENTITY_NAME = 'CONTACTS'
8150     AND nvl(f.ACTIVE_FLAG,'Y') = 'Y'
8151     AND f.ATTRIBUTE_ID = a.ATTRIBUTE_ID
8152     AND a.ATTRIBUTE_NAME=ATTRS.ATTRIBUTE_NAME;
8153 
8154     IF ATTRS.colnum>l_min_colnum THEN
8155       l_mincol_list(ATTRS.COLNUM) := 'N';
8156       IF has_trx_context(ATTRS.PROCEDURE_NAME) THEN
8157         l_forall_list(ATTRS.COLNUM) := ATTRS.PROCEDURE_NAME || '(H_TX'||l_min_colnum||'(I),NULL, ''' || ATTRS.ATTRIBUTE_NAME || ''',''CONTACTS'',''STAGE'')';
8158       ELSE
8159         l_forall_list(ATTRS.COLNUM) := ATTRS.PROCEDURE_NAME || '(H_TX'||l_min_colnum||'(I),NULL, ''' || ATTRS.ATTRIBUTE_NAME || ''',''CONTACTS'')';
8160       END IF;
8161 
8162     ELSE
8163       l_mincol_list(ATTRS.COLNUM) := 'Y';
8164     END IF;
8165 
8166     IF ATTRS.CUSTOM_ATTRIBUTE_PROCEDURE IS NULL THEN
8167       IF l_mincol_list(ATTRS.COLNUM) = 'Y' THEN
8168 	 -----Start of Bug No: 4279469----------
8169 	 l_attr_name := ATTRS.ATTRIBUTE_NAME;
8170          IF(ATTRS.column_data_type ='D') THEN
8171 	  l_pp_attr_name := 'TO_CHAR(pp.'||l_attr_name||',''DD-MON-YYYY'') '||l_attr_name;
8172 	  l_oc_attr_name := 'TO_CHAR(oc.'||l_attr_name||',''DD-MON-YYYY'') '||l_attr_name;
8173 	  l_attr_name    := 'TO_CHAR(r.'||l_attr_name||',''DD-MON-YYYY'') '||l_attr_name;
8174          ELSE
8175 	  l_pp_attr_name := 'pp.'||l_attr_name;
8176 	  l_oc_attr_name := 'oc.'||l_attr_name;
8177           l_attr_name    := 'r.'||l_attr_name;
8178 	 END IF;
8179          -----End of Bug No: 4279469------------
8180         IF ATTRS.SOURCE_TABLE='HZ_PERSON_PROFILES' THEN
8181           l_select(idx) := l_pp_attr_name;
8182         ELSIF ATTRS.SOURCE_TABLE='HZ_ORG_CONTACTS' THEN
8183           l_select(idx) := l_oc_attr_name;
8184         ELSIF ATTRS.SOURCE_TABLE='HZ_RELATIONSHIPS' THEN
8185           l_select(idx) := l_attr_name;
8186         END IF;
8187       ELSE
8188         l_select(idx) := 'N';
8189       END IF;
8190 
8191       l_custom_list(ATTRS.COLNUM) := 'N';
8192     ELSE
8193       l_select(idx) := 'N';
8194       l_custom_list(ATTRS.COLNUM) := 'N';
8195       IF ATTRS.ATTRIBUTE_NAME = 'CONTACT_NAME' THEN
8196         IF l_mincol_list(ATTRS.COLNUM) = 'Y' THEN
8197           l_select(idx) := 'rtrim(pp.person_first_name || '' '' || pp.person_last_name)';
8198         END IF;
8199       ELSE
8200         IF l_mincol_list(ATTRS.COLNUM) = 'Y' THEN
8201           IF has_context(ATTRS.custom_attribute_procedure) THEN
8202             l_custom_list(ATTRS.COLNUM) := ATTRS.custom_attribute_procedure || '(H_ORG_CONTACT_ID(I),''CONTACTS'','''||ATTRS.ATTRIBUTE_NAME|| ''', ''STAGE'')';
8203           ELSE
8204             l_custom_list(ATTRS.COLNUM) := ATTRS.custom_attribute_procedure || '(H_ORG_CONTACT_ID(I), ''CONTACTS'','''||ATTRS.ATTRIBUTE_NAME|| ''')';
8205           END IF;
8206         END IF;
8207       END IF;
8208     END IF;
8209     idx := idx+1;
8210     -- VJN ADDED CODE FOR TRACKING CONDITION ATTRIBUTES AT THIS ENTITY LEVEL
8211     IF HZ_WORD_CONDITIONS_PKG.is_a_cond_attrib( ATTRS.attribute_id)
8212      THEN
8213          l_cond_attrib_list(ATTRS.COLNUM) := ATTRS.attribute_id ;
8214     END IF;
8215   END LOOP;
8216 
8217   IF cur_col_num<=255 THEN--bug 5977628
8218     FOR I in cur_col_num..255 LOOP
8219       l_mincol_list(I) := 'N';
8220       l_forall_list(I) := 'N';
8221       l_custom_list(I) := 'N';
8222     END LOOP;
8223   END IF;
8224 
8225   l('  CURSOR contact_cur IS');
8226   l('            SELECT ');
8230     IF l_select(I) <> 'N' THEN
8227   l('              /*+ ORDERED USE_NL(R OC PP)*/');
8228   l('            oc.ORG_CONTACT_ID , r.OBJECT_ID, r.PARTY_ID, g.PARTY_INDEX, r.STATUS '); -- Bug No:4299785
8229   FOR I in 1..l_select.COUNT LOOP
8231       l('                  ,' || l_select(I));
8232     END IF;
8233   END LOOP;
8234   l('           FROM HZ_DQM_STAGE_GT g, HZ_RELATIONSHIPS r,');
8235   l('           HZ_ORG_CONTACTS oc, HZ_PERSON_PROFILES pp');
8236   l('           WHERE oc.party_relationship_id =  r.relationship_id ');
8237   l('           AND r.object_id = g.party_id ');
8238   l('           AND r.subject_id = pp.party_id ');
8239   l('           AND r.SUBJECT_TABLE_NAME = ''HZ_PARTIES''');
8240   l('           AND r.OBJECT_TABLE_NAME = ''HZ_PARTIES''');
8241   l('           AND DIRECTIONAL_FLAG= ''F'' ');
8242   l('           AND pp.effective_end_date is NULL ');
8243   l('           AND (oc.status is null OR oc.status = ''A'' or oc.status = ''I'')');
8244   l('           AND (r.status is null OR r.status = ''A'' or r.status = ''I'');');
8245   l('');
8246   l('  BEGIN');
8247   l('    OPEN contact_cur;');
8248   l('    LOOP');
8249   l('      FETCH contact_cur BULK COLLECT INTO');
8250   l('        H_ORG_CONTACT_ID');
8251   l('        ,H_C_PARTY_ID');
8252   l('        ,H_R_PARTY_ID');
8253   l('        ,H_PARTY_INDEX');
8254   l('        ,H_STATUS'); --Bug No: 4299785
8255 
8256   FOR I IN 1..255 LOOP
8257     IF l_forall_list(I) <> 'N' AND l_mincol_list(I) = 'Y' AND
8258        l_custom_list(I) = 'N' THEN
8259       l('         ,H_TX'||I);
8260     END IF;
8261   END LOOP;
8262   l('      LIMIT l_limit;');
8263   l('');
8264   l('    IF contact_cur%NOTFOUND THEN');
8265   l('      l_last_fetch:=TRUE;');
8266   l('    END IF;');
8267 
8268   l('    IF H_C_PARTY_ID.COUNT=0 AND l_last_fetch THEN');
8269   l('      EXIT;');
8270   l('    END IF;');
8271 
8272   l('    FOR I in H_C_PARTY_ID.FIRST..H_C_PARTY_ID.LAST LOOP');
8273 
8274 
8275   -- VJN INTRODUCED CODE FOR GENERATING THE POPULATION
8276   -- OF THE GLOBAL CONDITION RECORD
8277   l_idx := l_cond_attrib_list.FIRST ;
8278   IF l_idx IS NOT NULL
8279   THEN
8280     l('----------- SETTING GLOBAL CONDITION RECORD AT THE CONTACT LEVEL ---------');
8281   END IF ;
8282 
8283 
8284   WHILE l_cond_attrib_list.EXISTS(l_idx)
8285   LOOP
8286 
8287       l('     HZ_WORD_CONDITIONS_PKG.set_gbl_condition_rec ('||l_cond_attrib_list(l_idx)||','||'H_TX'||l_idx||'(I));');
8288       l_idx := l_idx+1;
8289   END LOOP;
8290 
8291   l('');
8292 
8293   FOR I IN 1..255 LOOP
8294     IF l_forall_list(I) <> 'N' THEN
8295       IF l_custom_list(I) <> 'N' AND l_mincol_list(I) = 'Y' THEN
8296         l('         H_TX'||I||'(I):='||l_custom_list(I)||';');
8297       END IF;
8298     END IF;
8299   END LOOP;
8300   FOR I IN 1..255 LOOP
8301     IF l_forall_list(I) <> 'N' THEN
8302       IF l_mincol_list(I) <> 'Y' THEN
8303         l('         H_TX'||I||'(I):='||l_forall_list(I)||';');
8304       END IF;
8305     END IF;
8306   END LOOP;
8307   FOR I IN 1..255 LOOP
8308     IF l_forall_list(I) <> 'N' THEN
8309       IF l_mincol_list(I) = 'Y' THEN
8310         l('         H_TX'||I||'(I):='||l_forall_list(I)||';');
8311       END IF;
8312     END IF;
8313   END LOOP;
8314 
8315   FIRST := TRUE;
8316   FOR ATTRS IN (SELECT a.ATTRIBUTE_ID,
8317                        a.ATTRIBUTE_NAME,
8318                        a.SOURCE_TABLE,
8319                        a.CUSTOM_ATTRIBUTE_PROCEDURE,
8320                        f.PROCEDURE_NAME,
8321                        f.STAGED_ATTRIBUTE_COLUMN,
8322                        to_number(substrb(STAGED_ATTRIBUTE_COLUMN, 3)) COLNUM
8323                 FROM HZ_TRANS_ATTRIBUTES_VL a, HZ_TRANS_FUNCTIONS_VL f
8324                 WHERE ENTITY_NAME = 'CONTACTS'
8325                 AND nvl(f.ACTIVE_FLAG,'Y') = 'Y'
8326                 AND f.ATTRIBUTE_ID = a.ATTRIBUTE_ID
8327                 AND nvl(a.DENORM_FLAG,'N') = 'Y') LOOP
8328      IF FIRST THEN
8329      -- Fix for bug 4872997
8330      -- Wrapping the 'l_denorm' portion of code into a begin-excpetion block
8331      -- and setting the denorm value to 'SYNC' if sqlcode-6502 error occurs
8332        l('      BEGIN ');
8333        l('        l_denorm := H_TX'||ATTRS.COLNUM||'(I)');
8334        FIRST := FALSE;
8335      ELSE
8336        l('                  ||'' '' ||  H_TX'||ATTRS.COLNUM||'(I)');
8337      END IF;
8338   END LOOP;
8339   IF NOT FIRST THEN
8340     l('             ;');
8341     l('        IF H_CT_DEN(H_PARTY_INDEX(I)) = ''SYNC'' THEN');
8342     l('          NULL;');
8343     l('        ELSIF lengthb(H_CT_DEN(H_PARTY_INDEX(I)))+lengthb(l_denorm)<2000 THEN');
8344     l('          IF H_CT_DEN(H_PARTY_INDEX(I)) IS NULL OR instrb(H_CT_DEN(H_PARTY_INDEX(I)),l_denorm)= 0 THEN');
8345     l('            H_CT_DEN(H_PARTY_INDEX(I)) := H_CT_DEN(H_PARTY_INDEX(I)) || '' '' || l_denorm;');
8346     l('          END IF;');
8347     l('        ELSE');
8348     l('          H_CT_DEN(H_PARTY_INDEX(I)) := ''SYNC'';');
8349     l('        END IF;');
8350     l('      EXCEPTION WHEN OTHERS THEN ');
8351     l('        IF SQLCODE=-6502 THEN');
8352     l('          H_CT_DEN(H_PARTY_INDEX(I)) := ''SYNC'';');
8353     l('        END IF; ');
8354     l('      END; ');
8355 
8356   END IF;
8357 
8358   l('    END LOOP;');
8359   l('      l_st :=  1;  ');
8363   l('             FORALL I in l_st..l_en');
8360   l('      l_en :=  H_C_PARTY_ID.COUNT; ');
8361   l('      LOOP ');
8362   l('          BEGIN  ');
8364   l('             INSERT INTO HZ_STAGED_CONTACTS (');
8365   l('	            ORG_CONTACT_ID');
8366   l('	            ,PARTY_ID');
8367   l('                ,STATUS_FLAG '); --Bug No: 4299785
8368 
8369   FOR I IN 1..255 LOOP
8370     IF l_forall_list(I) <> 'N' THEN
8371       l('                , TX'||I);
8372     END IF;
8373   END LOOP;
8374   l('             ) VALUES (');
8375   l('             H_ORG_CONTACT_ID(I)');
8376   l('             ,H_C_PARTY_ID(I)');
8377   l('             ,H_STATUS(I)'); --Bug No: 4299785
8378 
8379   FOR I IN 1..255 LOOP
8380     IF l_forall_list(I) <> 'N' THEN
8381       l('             , decode(H_TX'||I||'(I),null,H_TX'||I||'(I),H_TX'||I||'(I)||'' '')');
8382     END IF;
8383   END LOOP;
8384   l('          );');
8385   l('        EXIT; ');
8386   l('        EXCEPTION  WHEN OTHERS THEN ');
8387   l('            l_st:= l_st+SQL%ROWCOUNT+1;');
8388   l('        END; ');
8389   l('      END LOOP; ');
8390   l('      FORALL I in H_C_PARTY_ID.FIRST..H_C_PARTY_ID.LAST ');
8391   l('        INSERT INTO HZ_DQM_STAGE_GT(PARTY_ID,OWNER_ID,ORG_CONTACT_ID,PARTY_INDEX) ');
8392   l('           SELECT H_C_PARTY_ID(I), H_R_PARTY_ID(I), H_ORG_CONTACT_ID(I), H_PARTY_INDEX(I)');
8393   l('           FROM DUAL WHERE H_R_PARTY_ID(I) IS NOT NULL;');
8394   l('      IF l_last_fetch THEN');
8395   l('        EXIT;');
8396   l('      END IF;');
8397   l('    END LOOP;');
8398   l('     CLOSE contact_cur;');
8399   l('  END;');
8400 
8401   l('');
8402   l('  PROCEDURE sync_single_contact (');
8403   l('    p_org_contact_id NUMBER,');
8404   l('    p_operation VARCHAR2) IS');
8405   l('');
8406   l('  l_tryins BOOLEAN;');
8407   l('  l_tryupd BOOLEAN;');
8408   l('   BEGIN');
8409   l('     SELECT oc.ORG_CONTACT_ID, d.PARTY_ID, r.STATUS '); --Bug No: 4299785
8410   FOR I in 1..l_select.COUNT LOOP
8411     IF l_select(I) <> 'N' THEN
8412       l('          ,' || l_select(I));
8413     END IF;
8414   END LOOP;
8415   l('      INTO H_ORG_CONTACT_ID(1), H_PARTY_ID(1), H_STATUS(1)'); --Bug No: 4299785
8416   FOR I IN 1..255 LOOP
8417     IF l_forall_list(I) <> 'N' AND l_mincol_list(I) = 'Y' AND
8418        l_custom_list(I) = 'N' THEN
8419       l('         , H_TX'||I||'(1)');
8420     END IF;
8421   END LOOP;
8422 
8423   l('     FROM HZ_ORG_CONTACTS oc, HZ_DQM_SYNC_INTERFACE d, ');
8424   l('          HZ_RELATIONSHIPS r, HZ_PERSON_PROFILES pp');
8425   l('     WHERE d.ENTITY = ''CONTACTS'' ');
8426   l('     AND oc.org_contact_id = p_org_contact_id');
8427   l('     AND oc.org_contact_id = d.RECORD_ID');
8428   l('     AND oc.party_relationship_id =  r.relationship_id ');
8429   l('     AND r.subject_id = pp.party_id ');
8430   l('     AND r.SUBJECT_TABLE_NAME = ''HZ_PARTIES''');
8431   l('     AND r.OBJECT_TABLE_NAME = ''HZ_PARTIES''');
8432   l('     AND DIRECTIONAL_FLAG= ''F'' ');
8433   l('     AND pp.effective_end_date is NULL ');
8434   l('     AND (oc.status is null OR oc.status = ''A'' or oc.status = ''I'')');
8435   l('     AND (r.status is null OR r.status = ''A'' or r.status = ''I'')');
8436   l('     AND ROWNUM=1;');
8437 
8438   -- VJN INTRODUCED CODE FOR GENERATING THE POPULATION
8439   -- OF THE GLOBAL CONDITION RECORD
8440 
8441   l_idx := l_cond_attrib_list.FIRST ;
8442   IF l_idx IS NOT NULL
8443   THEN
8444     l('----------- SETTING GLOBAL CONDITION RECORD AT THE CONTACT LEVEL ---------');
8445   END IF ;
8446 
8447 
8448   WHILE l_cond_attrib_list.EXISTS(l_idx)
8449   LOOP
8450 
8451       l('     HZ_WORD_CONDITIONS_PKG.set_gbl_condition_rec ('||l_cond_attrib_list(l_idx)||','||'H_TX'||l_idx||'(1));');
8452       l_idx := l_idx+1;
8453   END LOOP;
8454   FOR I IN 1..255 LOOP
8455     IF l_forall_list(I) <> 'N' THEN
8456       IF l_custom_list(I) <> 'N' AND l_mincol_list(I) = 'Y' THEN
8457         l('    H_TX'||I||'(1):='||replace(l_custom_list(I),'(I)','(1)')||';');
8458       END IF;
8459     END IF;
8460   END LOOP;
8461   FOR I IN 1..255 LOOP
8462     IF l_forall_list(I) <> 'N' THEN
8463       IF l_mincol_list(I) <> 'Y' THEN
8464         l('    H_TX'||I||'(1):='||replace(l_forall_list(I),'(I)','(1)')||';');
8465       END IF;
8466     END IF;
8467   END LOOP;
8468   FOR I IN 1..255 LOOP
8469     IF l_forall_list(I) <> 'N' THEN
8470       IF l_mincol_list(I) = 'Y' THEN
8471         l('    H_TX'||I||'(1):='||replace(l_forall_list(I),'(I)','(1)')||';');
8472       END IF;
8473     END IF;
8474   END LOOP;
8475 
8476   l('   l_tryins := FALSE;');
8477   l('   l_tryupd := FALSE;');
8478   l('   IF p_operation=''C'' THEN');
8479   l('     l_tryins:=TRUE;');
8480   l('   ELSE ');
8481   l('     l_tryupd:=TRUE;');
8482   l('   END IF;');
8483   l('   WHILE (l_tryins OR l_tryupd) LOOP');
8484   l('     IF l_tryins THEN');
8485   l('       BEGIN');
8486   l('         l_tryins:=FALSE;');
8487   l('         INSERT INTO HZ_STAGED_CONTACTS (');
8488   l('           ORG_CONTACT_ID');
8489   l('           ,PARTY_ID');
8490   l('           ,STATUS_FLAG '); --Bug No: 4299785
8491 
8492   FOR I IN 1..255 LOOP
8493     IF l_forall_list(I) <> 'N' THEN
8494       l('              , TX'||I);
8495     END IF;
8496   END LOOP;
8500   l('            , H_STATUS(1)'); --Bug No: 4299785
8497   l('           ) VALUES (');
8498   l('            H_ORG_CONTACT_ID(1)');
8499   l('            , H_PARTY_ID(1)');
8501 
8502   FOR I IN 1..255 LOOP
8503     IF l_forall_list(I) <> 'N' THEN
8504       l('             , decode(H_TX'||I||'(1),null,H_TX'||I||'(1),H_TX'||I||'(1)||'' '')');
8505     END IF;
8506   END LOOP;
8507   l('         );');
8508   l('       EXCEPTION');
8509   l('         WHEN DUP_VAL_ON_INDEX THEN');
8510   l('           IF p_operation=''C'' THEN');
8511   l('             l_tryupd:=TRUE;');
8512   l('           END IF;');
8513   l('       END;');
8514   l('     END IF;');
8515   l('     IF l_tryupd THEN');
8516   l('       BEGIN');
8517   l('         l_tryupd:=FALSE;');
8518   l('         UPDATE HZ_STAGED_CONTACTS SET ');
8519   l('            concat_col = concat_col');
8520   l('           ,status_flag = H_STATUS(1)'); --Bug No: 4299785
8521 
8522   FOR I IN 1..255 LOOP
8523     IF l_forall_list(I) <> 'N' THEN
8524       	IF (is_first) THEN
8525              is_first := false;
8526              l('            ,TX'||I||'=decode(H_TX'||I||'(1),null,H_TX'||I||'(1),H_TX'||I||'(1)||'' '')');
8527 	ELSE
8528              l('            ,TX'||I||'=decode(H_TX'||I||'(1),null,H_TX'||I||'(1),H_TX'||I||'(1)||'' '')');
8529 	END IF;
8530     END IF;
8531   END LOOP;
8532   l('         WHERE ORG_CONTACT_ID=H_ORG_CONTACT_ID(1);');
8533   l('         IF SQL%ROWCOUNT=0 AND p_operation=''U'' THEN');
8534   l('           l_tryins := TRUE;');
8535   l('         END IF;');
8536   l('       EXCEPTION ');
8537   l('         WHEN NO_DATA_FOUND THEN');
8538   l('           IF p_operation=''U'' THEN');
8539   l('             l_tryins := TRUE;');
8540   l('           END IF;');
8541   l('       END;');
8542   l('     END IF;');
8543   l('   END LOOP;');
8544   l('   --Fix for bug 5048604, to update concat_col during update of denorm column ');
8545   l('   UPDATE HZ_STAGED_PARTIES set');
8546   l('     D_CT = ''SYNC''');
8547   l('    ,CONCAT_COL = CONCAT_COL ');
8548   l('   WHERE PARTY_ID = H_PARTY_ID(1);');
8549   l('  END;');
8550 
8551   -- VJN Introduced for SYNC. This is the online version, which would be used to
8552   -- directly insert into the staging tables from SYNC.
8553   is_first := true ;
8554   l('');
8555   l('  PROCEDURE sync_single_contact_online (');
8556   l('    p_org_contact_id   NUMBER,');
8557   l('    p_operation        VARCHAR2) IS');
8558   l('');
8559   l('    l_tryins BOOLEAN;');
8560   l('    l_tryupd BOOLEAN;');
8561   l('    l_party_id NUMBER; ');
8562   l('    l_sql_err_message VARCHAR2(2000); ');
8563   l('');
8564   l('  BEGIN');
8565   l('');
8566   l('    l_party_id := -1; ');
8567   l('');
8568   l('    SELECT r.object_id INTO l_party_id ');
8569   l('    FROM HZ_ORG_CONTACTS oc, HZ_RELATIONSHIPS r ');
8570   l('    WHERE oc.org_contact_id         = p_org_contact_id ');
8571   l('    AND   oc.party_relationship_id  =  r.relationship_id ');
8572   l('    AND   r.SUBJECT_TABLE_NAME      = ''HZ_PARTIES'' ');
8573   l('    AND   r.OBJECT_TABLE_NAME       = ''HZ_PARTIES'' ');
8574   l('    AND   subject_type              = ''PERSON'' ');
8575   l('    AND   DIRECTIONAL_FLAG          = ''F'' ');
8576   l('    AND   (oc.status is null OR oc.status = ''A'' or oc.status = ''I'') ');
8577   l('    AND   (r.status is null OR r.status = ''A'' or r.status = ''I'') ; ');
8578   l('');
8579   l('    SELECT oc.ORG_CONTACT_ID, l_party_id, r.status '); --Bug No: 4299785
8580   FOR I in 1..l_select.COUNT LOOP
8581     IF l_select(I) <> 'N' THEN
8582       l('          ,' || l_select(I));
8583     END IF;
8584   END LOOP;
8585   l('    INTO H_ORG_CONTACT_ID(1), H_PARTY_ID(1), H_STATUS(1)'); --Bug No: 4299785
8586   FOR I IN 1..255 LOOP
8587     IF l_forall_list(I) <> 'N' AND l_mincol_list(I) = 'Y' AND
8588        l_custom_list(I) = 'N' THEN
8589       l('        ,H_TX'||I||'(1)');
8590     END IF;
8591   END LOOP;
8592 
8593   l('    FROM HZ_ORG_CONTACTS oc, ');
8594   l('         HZ_RELATIONSHIPS r, HZ_PERSON_PROFILES pp');
8595   l('    WHERE ');
8596   l('          oc.org_contact_id         = p_org_contact_id');
8597   l('     AND  oc.party_relationship_id  = r.relationship_id ');
8598   l('     AND  r.subject_id              = pp.party_id ');
8599   l('     AND  r.SUBJECT_TABLE_NAME      = ''HZ_PARTIES''');
8600   l('     AND  r.OBJECT_TABLE_NAME       = ''HZ_PARTIES''');
8601   l('     AND  DIRECTIONAL_FLAG          = ''F'' ');
8602   l('     AND  pp.effective_end_date is NULL ');
8603   l('     AND  (oc.status is null OR oc.status = ''A'' or oc.status = ''I'')');
8604   l('     AND  (r.status is null OR r.status = ''A'' or r.status = ''I'')');
8605   l('     AND  ROWNUM=1;');
8606   l('');
8607   -- VJN INTRODUCED CODE FOR GENERATING THE POPULATION
8608   -- OF THE GLOBAL CONDITION RECORD
8609 
8610   l_idx := l_cond_attrib_list.FIRST ;
8611   IF l_idx IS NOT NULL
8612   THEN
8613     l('    ---- SETTING GLOBAL CONDITION RECORD AT THE CONTACT LEVEL ----');
8614   END IF ;
8615 
8616   WHILE l_cond_attrib_list.EXISTS(l_idx)
8617   LOOP
8618     l('    HZ_WORD_CONDITIONS_PKG.set_gbl_condition_rec ('||l_cond_attrib_list(l_idx)||','||'H_TX'||l_idx||'(1));');
8619     l_idx := l_idx+1;
8620   END LOOP;
8621   FOR I IN 1..255 LOOP
8622     IF l_forall_list(I) <> 'N' THEN
8623       IF l_custom_list(I) <> 'N' AND l_mincol_list(I) = 'Y' THEN
8627   END LOOP;
8624         l('    H_TX'||I||'(1):='||replace(l_custom_list(I),'(I)','(1)')||';');
8625       END IF;
8626     END IF;
8628   FOR I IN 1..255 LOOP
8629     IF l_forall_list(I) <> 'N' THEN
8630       IF l_mincol_list(I) <> 'Y' THEN
8631         l('    H_TX'||I||'(1):='||replace(l_forall_list(I),'(I)','(1)')||';');
8632       END IF;
8633     END IF;
8634   END LOOP;
8635   FOR I IN 1..255 LOOP
8636     IF l_forall_list(I) <> 'N' THEN
8637       IF l_mincol_list(I) = 'Y' THEN
8638         l('    H_TX'||I||'(1):='||replace(l_forall_list(I),'(I)','(1)')||';');
8639       END IF;
8640     END IF;
8641   END LOOP;
8642 
8643   l('');
8644   l('    l_tryins := FALSE;');
8645   l('    l_tryupd := FALSE;');
8646   l('');
8647   l('    IF p_operation=''C'' THEN');
8648   l('      l_tryins:=TRUE;');
8649   l('    ELSE ');
8650   l('      l_tryupd:=TRUE;');
8651   l('    END IF;');
8652   l('');
8653   l('    WHILE (l_tryins OR l_tryupd) LOOP');
8654   l('      IF l_tryins THEN');
8655   l('        BEGIN');
8656   l('          l_tryins:=FALSE;');
8657   l('          INSERT INTO HZ_STAGED_CONTACTS (');
8658   l('             ORG_CONTACT_ID');
8659   l('            ,PARTY_ID');
8660   l('            ,STATUS_FLAG'); --Bug No: 4299785
8661 
8662   FOR I IN 1..255 LOOP
8663     IF l_forall_list(I) <> 'N' THEN
8664       l('            ,TX'||I);
8665     END IF;
8666   END LOOP;
8667   l('          ) VALUES (');
8668   l('             H_ORG_CONTACT_ID(1)');
8669   l('            ,H_PARTY_ID(1)');
8670   l('            ,H_STATUS(1)');--Bug No: 4299785
8671 
8672   FOR I IN 1..255 LOOP
8673     IF l_forall_list(I) <> 'N' THEN
8674       l('            ,decode(H_TX'||I||'(1),null,H_TX'||I||'(1),H_TX'||I||'(1)||'' '')');
8675     END IF;
8676   END LOOP;
8677   l('          );');
8678   l('        EXCEPTION');
8679   l('          WHEN DUP_VAL_ON_INDEX THEN');
8680   l('            IF p_operation=''C'' THEN');
8681   l('              l_tryupd:=TRUE;');
8682   l('            END IF;');
8683   l('        END;');
8684   l('      END IF;');
8685   l('');
8686   l('      IF l_tryupd THEN');
8687   l('        BEGIN');
8688   l('          l_tryupd:=FALSE;');
8689   l('          UPDATE HZ_STAGED_CONTACTS SET ');
8690   l('             concat_col = concat_col');
8691   l('            ,status_flag = H_STATUS(1) ');--Bug No: 4299785
8692 
8693   FOR I IN 1..255 LOOP
8694     IF l_forall_list(I) <> 'N' THEN
8695       	IF (is_first) THEN
8696              is_first := false;
8697              l('            ,TX'||I||'=decode(H_TX'||I||'(1),null,H_TX'||I||'(1),H_TX'||I||'(1)||'' '')');
8698 	ELSE
8699              l('            ,TX'||I||'=decode(H_TX'||I||'(1),null,H_TX'||I||'(1),H_TX'||I||'(1)||'' '')');
8700 	END IF;
8701     END IF;
8702   END LOOP;
8703   l('          WHERE ORG_CONTACT_ID=H_ORG_CONTACT_ID(1);');
8704   l('          IF SQL%ROWCOUNT=0 AND p_operation=''U'' THEN');
8705   l('            l_tryins := TRUE;');
8706   l('          END IF;');
8707   l('        EXCEPTION ');
8708   l('          WHEN NO_DATA_FOUND THEN');
8709   l('            IF p_operation=''U'' THEN');
8710   l('              l_tryins := TRUE;');
8711   l('            END IF;');
8712   l('        END;');
8713   l('      END IF;');
8714   l('    END LOOP;');
8715   l('');
8716   l('    --Fix for bug 5048604, to update concat_col during update of denorm column ');
8717   l('    UPDATE HZ_STAGED_PARTIES set');
8718   l('      D_CT = ''SYNC''');
8719   l('     ,CONCAT_COL = CONCAT_COL ');
8720   l('    WHERE PARTY_ID = H_PARTY_ID(1);');
8721   l('');
8722   l('      -- REPURI. Bug 4884742. If shadow staging is completely successfully ');
8723   l('      -- insert a record into hz_dqm_sh_sync_interface table for each record ');
8724   l('    IF (HZ_DQM_SYNC.is_shadow_staging_complete) THEN ');
8725   l('      BEGIN ');
8726   l('        HZ_DQM_SYNC.insert_sh_interface_rec(l_party_id,p_org_contact_id,null,null,''CONTACTS'',p_operation); ');
8727   l('      EXCEPTION WHEN OTHERS THEN ');
8728   l('        NULL; ');
8729   l('      END; ');
8730   l('    END IF; ');
8731   l('');
8732   -- Fix for Bug 4862121.
8733   -- Added the Exception handling at this context, for the procedure.
8734   l('  EXCEPTION WHEN OTHERS THEN ');
8735   l('    -- FAILOVER : REPORT RECORD TO HZ_DQM_SYNC_INTERFACE ');
8736   l('    -- FOR ONLINE FLOWS ');
8737   l('    l_sql_err_message := SQLERRM; ');
8738   l('    insert_dqm_sync_error_rec(l_party_id, p_org_contact_id, NULL, NULL, ''CONTACTS'', p_operation, ''E'', ''Y'', l_sql_err_message); ');
8739   l('  END;');
8740 
8741 END;
8742 
8743 
8744 -- REPURI. Proccedure to generate the code (into HZ_STAGE_MAP_TRANSFORM)
8745 -- for OPEN_BULK_IMP_SYNC_CPT_CUR query procedure. Bug 4884735.
8746 
8747 
8748 PROCEDURE gen_bulk_imp_sync_cpt_query IS
8749 
8750  cur_col_num NUMBER := 1;
8751 
8752  TYPE coltab IS TABLE OF VARCHAR2(2000) INDEX BY BINARY_INTEGER;
8753 
8754  l_select coltab;
8755  FIRST BOOLEAN := FALSE;
8756 
8757  l_forall_list coltab;
8758  l_custom_list coltab;
8759  l_mincol_list coltab;
8760  l_min_colnum NUMBER;
8761  idx NUMBER :=1;
8762  is_first boolean := true;
8763 
8764  -- VJN Introduced for conditional word replacements
8765  l_cond_attrib_list coltab ;
8766  l_idx number ;
8767 
8771   l('  PROCEDURE open_bulk_imp_sync_cpt_cur ( ');
8768 BEGIN
8769 
8770   l('');
8772   l('    p_batch_id             IN      NUMBER, ');
8773   l('    p_batch_mode_flag      IN      VARCHAR2, ');
8774   l('    p_from_osr             IN      VARCHAR2, ');
8775   l('    p_to_osr               IN      VARCHAR2, ');
8776   l('    p_os                   IN      VARCHAR2, ');
8777   l('    p_operation            IN      VARCHAR2, ');
8778   l('    x_sync_cpt_cur         IN OUT  HZ_DQM_SYNC.SyncCurTyp) IS ');
8779   l('  BEGIN');
8780 
8781   FOR ATTRS IN (SELECT a.ATTRIBUTE_ID,
8782                        a.ATTRIBUTE_NAME,
8783                        a.SOURCE_TABLE,
8784                        a.CUSTOM_ATTRIBUTE_PROCEDURE,
8785                        f.PROCEDURE_NAME,
8786                        f.STAGED_ATTRIBUTE_COLUMN,
8787                        to_number(substrb(STAGED_ATTRIBUTE_COLUMN, 3)) COLNUM
8788                 FROM HZ_TRANS_ATTRIBUTES_VL a, HZ_TRANS_FUNCTIONS_VL f
8789                 WHERE ENTITY_NAME = 'CONTACT_POINTS'
8790                 AND nvl(f.ACTIVE_FLAG,'Y') = 'Y'
8791                 AND f.ATTRIBUTE_ID = a.ATTRIBUTE_ID
8792                 ORDER BY COLNUM) LOOP
8793     IF cur_col_num<ATTRS.COLNUM THEN
8794       FOR I in cur_col_num..ATTRS.COLNUM-1 LOOP
8795         l_mincol_list(I) := 'N';
8796         l_forall_list(I) := 'N';
8797       END LOOP;
8798     END IF;
8799     cur_col_num:=ATTRS.COLNUM+1;
8800     IF has_trx_context(ATTRS.PROCEDURE_NAME) THEN
8801       l_forall_list(ATTRS.COLNUM) := ATTRS.PROCEDURE_NAME || '(H_TX'||ATTRS.COLNUM||'(I),NULL, ''' || ATTRS.ATTRIBUTE_NAME || ''',''CONTACT_POINTS'',''STAGE'')';
8802     ELSE
8803       l_forall_list(ATTRS.COLNUM) := ATTRS.PROCEDURE_NAME || '(H_TX'||ATTRS.COLNUM||'(I),NULL, ''' || ATTRS.ATTRIBUTE_NAME || ''',''CONTACT_POINTS'')';
8804     END IF;
8805 
8806     SELECT min(to_number(substrb(STAGED_ATTRIBUTE_COLUMN, 3))) INTO l_min_colnum
8807     FROM HZ_TRANS_ATTRIBUTES_VL a, HZ_TRANS_FUNCTIONS_VL f
8808     WHERE ENTITY_NAME = 'CONTACT_POINTS'
8809     AND nvl(f.ACTIVE_FLAG,'Y') = 'Y'
8810     AND f.ATTRIBUTE_ID = a.ATTRIBUTE_ID
8811     AND a.ATTRIBUTE_NAME=ATTRS.ATTRIBUTE_NAME;
8812 
8813     IF ATTRS.colnum>l_min_colnum THEN
8814       l_mincol_list(ATTRS.COLNUM) := 'N';
8815       IF has_trx_context(ATTRS.PROCEDURE_NAME) THEN
8816         l_forall_list(ATTRS.COLNUM) := ATTRS.PROCEDURE_NAME || '(H_TX'||l_min_colnum||'(I),NULL, ''' || ATTRS.ATTRIBUTE_NAME || ''',''CONTACT_POINTS'',''STAGE'')';
8817       ELSE
8818         l_forall_list(ATTRS.COLNUM) := ATTRS.PROCEDURE_NAME || '(H_TX'||l_min_colnum||'(I),NULL, ''' || ATTRS.ATTRIBUTE_NAME || ''',''CONTACT_POINTS'')';
8819       END IF;
8820 
8821     ELSE
8822       l_mincol_list(ATTRS.COLNUM) := 'Y';
8823     END IF;
8824 
8825     IF ATTRS.CUSTOM_ATTRIBUTE_PROCEDURE IS NULL THEN
8826       IF l_mincol_list(ATTRS.COLNUM) = 'Y' THEN
8827         l_select(idx) := 'cp.'||ATTRS.ATTRIBUTE_NAME;
8828       ELSE
8829         l_select(idx) := 'N';
8830       END IF;
8831 
8832       l_custom_list(ATTRS.COLNUM) := 'N';
8833     ELSE
8834       l_select(idx) := 'N';
8835       l_custom_list(ATTRS.COLNUM) := 'N';
8836       IF ATTRS.ATTRIBUTE_NAME = 'FLEX_FORMAT_PHONE_NUMBER' THEN
8837         IF l_mincol_list(ATTRS.COLNUM) = 'Y' THEN
8838           l_select(idx) := 'translate(phone_number,''0123456789ABCDEFGHIJKLMNOPQRSTUV'||
8839 'WXYZabcdefghijklmnopqrstuvwxyz!"#$%&()''''*+,-./:;<=>?@[\]^'||
8840 '_`{|}~ '',''0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ'') || '' '' || ' ||
8841                            'translate(phone_area_code||'' '' || phone_number,''0123456789ABCDEFGHIJKLMNOPQRSTUV'||
8842 'WXYZabcdefghijklmnopqrstuvwxyz!"#$%&()''''*+,-./:;<=>?@[\]^'||
8843 '_`{|}~ '',''0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ'') || '' '' || '||
8844                            ' translate(phone_country_code|| '' '' || phone_area_code||'' '' || phone_number,''0123456789ABCDEFGHIJKLMNOPQRSTUV'||
8845 'WXYZabcdefghijklmnopqrstuvwxyz!"#$%&()''''*+,-./:;<=>?@[\]^'||
8846 '_`{|}~ '',''0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ'')';
8847         END IF;
8848       ELSIF ATTRS.ATTRIBUTE_NAME = 'RAW_PHONE_NUMBER' THEN
8849         IF l_mincol_list(ATTRS.COLNUM) = 'Y' THEN
8850           l_select(idx) := 'translate(phone_country_code|| '' '' || phone_area_code||'' '' || phone_number,''0123456789ABCDEFGHIJKLMNOPQRSTUV'||
8851 'WXYZabcdefghijklmnopqrstuvwxyz!"#$%&()''''*+,-./:;<=>?@[\]^_'||
8852 '`{|}~ '',''0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ'')';
8853 
8854         END IF;
8855       ELSE
8856         IF l_mincol_list(ATTRS.COLNUM) = 'Y' THEN
8857           IF has_context(ATTRS.custom_attribute_procedure) THEN
8858             l_custom_list(ATTRS.COLNUM) := ATTRS.custom_attribute_procedure || '(H_CONTACT_POINT_ID(I),''CONTACT_POINTS'','''||ATTRS.ATTRIBUTE_NAME|| ''', ''STAGE'')';
8859           ELSE
8860             l_custom_list(ATTRS.COLNUM) := ATTRS.custom_attribute_procedure || '(H_CONTACT_POINT_ID(I), ''CONTACT_POINTS'','''||ATTRS.ATTRIBUTE_NAME|| ''')';
8861           END IF;
8862         END IF;
8863       END IF;
8864     END IF;
8865     idx := idx+1;
8866 
8867     -- VJN ADDED CODE FOR TRACKING CONDITION ATTRIBUTES AT THIS ENTITY LEVEL
8868     IF HZ_WORD_CONDITIONS_PKG.is_a_cond_attrib( ATTRS.attribute_id)
8869      THEN
8870          l_cond_attrib_list(ATTRS.COLNUM) := ATTRS.attribute_id ;
8871     END IF;
8872 
8876     FOR I in cur_col_num..255 LOOP
8873   END LOOP;
8874 
8875   IF cur_col_num<=255 THEN--bug 5977628
8877       l_mincol_list(I) := 'N';
8878       l_forall_list(I) := 'N';
8879       l_custom_list(I) := 'N';
8880     END LOOP;
8881   END IF;
8882 
8883   l('    OPEN x_sync_cpt_cur FOR ' );
8884   l('      SELECT ');
8885   l('         /*+ ORDERED USE_NL(cp) */ ');
8886   l('         cp.CONTACT_POINT_ID ');
8887   l('        ,cps.party_id ');
8888   l('        ,decode (cp.owner_table_name, ''HZ_PARTY_SITES'', cp.owner_table_id, NULL) party_site_id ');
8889   l('        ,NULL ');
8890   l('        ,cp.CONTACT_POINT_TYPE ');
8891   l('        ,cp.STATUS '); -- Propagating Bug 4299785 fix to sync modifications
8892   l('        ,cp.ROWID ');
8893 
8894   FOR I in 1..l_select.COUNT LOOP
8895     IF l_select(I) <> 'N' THEN
8896       l('        ,' || l_select(I));
8897     END IF;
8898   END LOOP;
8899 
8900   l('      FROM hz_contact_points cp, hz_imp_contactpts_sg cps, hz_imp_batch_details bd ');
8901   l('      WHERE cp.request_id         = bd.main_conc_req_id ');
8902   l('      AND   bd.batch_id           = cps.batch_id ');
8903   l('      AND   cp.contact_point_id   = cps.contact_point_id ');
8904   l('      AND   cps.batch_id          = p_batch_id ');
8905   l('      AND   cps.party_orig_system = p_os ');
8906   l('      AND   cps.batch_mode_flag   = p_batch_mode_flag ');
8907   l('      AND   cps.action_flag       = p_operation');
8908   l('      AND   cps.party_orig_system_reference BETWEEN p_from_osr AND p_to_osr ');
8909   l('      AND   (cp.status IS NULL OR cp.status = ''A'' OR cp.status = ''I''); ');
8910   l('');
8911   l('    END open_bulk_imp_sync_cpt_cur; ');
8912   l('');
8913 
8914 END gen_bulk_imp_sync_cpt_query;
8915 
8916 
8917 -- REPURI. Proccedure to generate the code (into HZ_STAGE_MAP_TRANSFORM)
8918 -- for OPEN_SYNC_CPT_CURSOR and SYNC_ALL_CONTACT_POINTS Procedures.
8919 
8920 PROCEDURE generate_sync_cpt_query_proc IS
8921 
8922  cur_col_num NUMBER := 1;
8923 
8924  TYPE coltab IS TABLE OF VARCHAR2(2000) INDEX BY BINARY_INTEGER;
8925 
8926  l_select coltab;
8927  FIRST BOOLEAN := FALSE;
8928 
8929  l_forall_list coltab;
8930  l_custom_list coltab;
8931  l_mincol_list coltab;
8932  l_min_colnum NUMBER;
8933  idx NUMBER :=1;
8934  is_first boolean := true;
8935 
8936  -- VJN Introduced for conditional word replacements
8937  l_cond_attrib_list coltab ;
8938  l_idx number ;
8939 
8940 BEGIN
8941 
8942   l('');
8943   l('  PROCEDURE open_sync_cpt_cursor ( ');
8944   l('    p_operation            IN      VARCHAR2,');
8945   l('    p_from_rec             IN      VARCHAR2,');
8946   l('    p_to_rec               IN      VARCHAR2,');
8947   l('    x_sync_cpt_cur         IN OUT  HZ_DQM_SYNC.SyncCurTyp) IS ');
8948   l('  BEGIN');
8949 
8950   FOR ATTRS IN (SELECT a.ATTRIBUTE_ID,
8951                        a.ATTRIBUTE_NAME,
8952                        a.SOURCE_TABLE,
8953                        a.CUSTOM_ATTRIBUTE_PROCEDURE,
8954                        f.PROCEDURE_NAME,
8955                        f.STAGED_ATTRIBUTE_COLUMN,
8956                        to_number(substrb(STAGED_ATTRIBUTE_COLUMN, 3)) COLNUM
8957                 FROM HZ_TRANS_ATTRIBUTES_VL a, HZ_TRANS_FUNCTIONS_VL f
8958                 WHERE ENTITY_NAME = 'CONTACT_POINTS'
8959                 AND nvl(f.ACTIVE_FLAG,'Y') = 'Y'
8960                 AND f.ATTRIBUTE_ID = a.ATTRIBUTE_ID
8961                 ORDER BY COLNUM) LOOP
8962     IF cur_col_num<ATTRS.COLNUM THEN
8963       FOR I in cur_col_num..ATTRS.COLNUM-1 LOOP
8964         l_mincol_list(I) := 'N';
8965         l_forall_list(I) := 'N';
8966       END LOOP;
8967     END IF;
8968     cur_col_num:=ATTRS.COLNUM+1;
8969     IF has_trx_context(ATTRS.PROCEDURE_NAME) THEN
8970       l_forall_list(ATTRS.COLNUM) := ATTRS.PROCEDURE_NAME || '(H_TX'||ATTRS.COLNUM||'(I),NULL, ''' || ATTRS.ATTRIBUTE_NAME || ''',''CONTACT_POINTS'',''STAGE'')';
8971     ELSE
8972       l_forall_list(ATTRS.COLNUM) := ATTRS.PROCEDURE_NAME || '(H_TX'||ATTRS.COLNUM||'(I),NULL, ''' || ATTRS.ATTRIBUTE_NAME || ''',''CONTACT_POINTS'')';
8973     END IF;
8974 
8975     SELECT min(to_number(substrb(STAGED_ATTRIBUTE_COLUMN, 3))) INTO l_min_colnum
8976     FROM HZ_TRANS_ATTRIBUTES_VL a, HZ_TRANS_FUNCTIONS_VL f
8977     WHERE ENTITY_NAME = 'CONTACT_POINTS'
8978     AND nvl(f.ACTIVE_FLAG,'Y') = 'Y'
8979     AND f.ATTRIBUTE_ID = a.ATTRIBUTE_ID
8980     AND a.ATTRIBUTE_NAME=ATTRS.ATTRIBUTE_NAME;
8981 
8982     IF ATTRS.colnum>l_min_colnum THEN
8983       l_mincol_list(ATTRS.COLNUM) := 'N';
8984       IF has_trx_context(ATTRS.PROCEDURE_NAME) THEN
8985         l_forall_list(ATTRS.COLNUM) := ATTRS.PROCEDURE_NAME || '(H_TX'||l_min_colnum||'(I),NULL, ''' || ATTRS.ATTRIBUTE_NAME || ''',''CONTACT_POINTS'',''STAGE'')';
8986       ELSE
8987         l_forall_list(ATTRS.COLNUM) := ATTRS.PROCEDURE_NAME || '(H_TX'||l_min_colnum||'(I),NULL, ''' || ATTRS.ATTRIBUTE_NAME || ''',''CONTACT_POINTS'')';
8988       END IF;
8989 
8990     ELSE
8991       l_mincol_list(ATTRS.COLNUM) := 'Y';
8992     END IF;
8993 
8994     IF ATTRS.CUSTOM_ATTRIBUTE_PROCEDURE IS NULL THEN
8995       IF l_mincol_list(ATTRS.COLNUM) = 'Y' THEN
8996         l_select(idx) := 'cp.'||ATTRS.ATTRIBUTE_NAME;
8997       ELSE
8998         l_select(idx) := 'N';
8999       END IF;
9000 
9001       l_custom_list(ATTRS.COLNUM) := 'N';
9002     ELSE
9003       l_select(idx) := 'N';
9004       l_custom_list(ATTRS.COLNUM) := 'N';
9008 'WXYZabcdefghijklmnopqrstuvwxyz!"#$%&()''''*+,-./:;<=>?@[\]^'||
9005       IF ATTRS.ATTRIBUTE_NAME = 'FLEX_FORMAT_PHONE_NUMBER' THEN
9006         IF l_mincol_list(ATTRS.COLNUM) = 'Y' THEN
9007           l_select(idx) := 'translate(phone_number,''0123456789ABCDEFGHIJKLMNOPQRSTUV'||
9009 '_`{|}~ '',''0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ'') || '' '' || ' ||
9010                            'translate(phone_area_code||'' '' || phone_number,''0123456789ABCDEFGHIJKLMNOPQRSTUV'||
9011 'WXYZabcdefghijklmnopqrstuvwxyz!"#$%&()''''*+,-./:;<=>?@[\]^'||
9012 '_`{|}~ '',''0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ'') || '' '' || '||
9013                            ' translate(phone_country_code|| '' '' || phone_area_code||'' '' || phone_number,''0123456789ABCDEFGHIJKLMNOPQRSTUV'||
9014 'WXYZabcdefghijklmnopqrstuvwxyz!"#$%&()''''*+,-./:;<=>?@[\]^'||
9015 '_`{|}~ '',''0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ'')';
9016         END IF;
9017       ELSIF ATTRS.ATTRIBUTE_NAME = 'RAW_PHONE_NUMBER' THEN
9018         IF l_mincol_list(ATTRS.COLNUM) = 'Y' THEN
9019           l_select(idx) := 'translate(phone_country_code|| '' '' || phone_area_code||'' '' || phone_number,''0123456789ABCDEFGHIJKLMNOPQRSTUV'||
9020 'WXYZabcdefghijklmnopqrstuvwxyz!"#$%&()''''*+,-./:;<=>?@[\]^_'||
9021 '`{|}~ '',''0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ'')';
9022 
9023         END IF;
9024       ELSE
9025         IF l_mincol_list(ATTRS.COLNUM) = 'Y' THEN
9026           IF has_context(ATTRS.custom_attribute_procedure) THEN
9027             l_custom_list(ATTRS.COLNUM) := ATTRS.custom_attribute_procedure || '(H_CONTACT_POINT_ID(I),''CONTACT_POINTS'','''||ATTRS.ATTRIBUTE_NAME|| ''', ''STAGE'')';
9028           ELSE
9029             l_custom_list(ATTRS.COLNUM) := ATTRS.custom_attribute_procedure || '(H_CONTACT_POINT_ID(I), ''CONTACT_POINTS'','''||ATTRS.ATTRIBUTE_NAME|| ''')';
9030           END IF;
9031         END IF;
9032       END IF;
9033     END IF;
9034     idx := idx+1;
9035 
9036     -- VJN ADDED CODE FOR TRACKING CONDITION ATTRIBUTES AT THIS ENTITY LEVEL
9037     IF HZ_WORD_CONDITIONS_PKG.is_a_cond_attrib( ATTRS.attribute_id)
9038      THEN
9039          l_cond_attrib_list(ATTRS.COLNUM) := ATTRS.attribute_id ;
9040     END IF;
9041 
9042   END LOOP;
9043 
9044   IF cur_col_num<=255 THEN--bug 5977628
9045     FOR I in cur_col_num..255 LOOP
9046       l_mincol_list(I) := 'N';
9047       l_forall_list(I) := 'N';
9048       l_custom_list(I) := 'N';
9049     END LOOP;
9050   END IF;
9051 
9052   l('    OPEN x_sync_cpt_cur FOR ' );
9053   l('      SELECT ');
9054   l('         /*+ ORDERED USE_NL(cp) */ ');
9055   l('         cp.CONTACT_POINT_ID ');
9056   l('        ,dsi.party_id ');
9057   l('        ,dsi.party_site_id ');
9058   l('        ,dsi.org_contact_id ');
9059   l('        ,cp.CONTACT_POINT_TYPE ');
9060   l('        ,cp.STATUS '); -- Propagating Bug 4299785 fix to sync modifications
9061   l('        ,dsi.ROWID ');
9062 
9063   FOR I in 1..l_select.COUNT LOOP
9064     IF l_select(I) <> 'N' THEN
9065       l('        ,' || l_select(I));
9066     END IF;
9067   END LOOP;
9068 
9069   l('      FROM HZ_DQM_SYNC_INTERFACE dsi,HZ_CONTACT_POINTS cp');
9070   l('      WHERE dsi.record_id            = cp.contact_point_id ');
9071   l('      AND   dsi.entity               = ''CONTACT_POINTS'' ');
9072   l('      AND   dsi.operation            = p_operation ');
9073   l('      AND   dsi.staged_flag          = ''N'' ');
9074   l('      AND   dsi.sync_interface_num  >= p_from_rec ');
9075   l('      AND   dsi.sync_interface_num  <= p_to_rec ');
9076   l('      AND (cp.status is null OR cp.status = ''A'' or cp.status = ''I''); ');
9077   l('    END; ');
9078 
9079   l('');
9080   l('  PROCEDURE sync_all_contact_points ( ');
9081   l('    p_operation               IN VARCHAR2, ');
9082   l('    p_bulk_sync_type          IN VARCHAR2, ');
9083   l('    p_sync_all_cpt_cur        IN HZ_DQM_SYNC.SyncCurTyp) IS ');
9084   l('');
9085   l('    l_limit         NUMBER  := ' || g_batch_size || ';');
9086   l('    l_last_fetch    BOOLEAN := FALSE;');
9087   l('    l_sql_errm      VARCHAR2(2000); ');
9088   l('    l_st            NUMBER; ');
9089   l('    l_en            NUMBER; ');
9090   l('    l_err_index     NUMBER; ');
9091   l('    l_err_count     NUMBER; ');
9092   l('');
9093   l('    bulk_errors     EXCEPTION; ');
9094   l('    PRAGMA EXCEPTION_INIT(bulk_errors, -24381); ');
9095   l('');
9096   l('  BEGIN');
9097   l('    log (''Begin Synchronizing Contact Points''); ');
9098   l('    LOOP');
9099   l('      log (''Bulk Collecting Contact Points Data...'',FALSE); ');
9100   l('      FETCH p_sync_all_cpt_cur BULK COLLECT INTO');
9101   l('         H_CONTACT_POINT_ID');
9102   l('        ,H_CPT_PARTY_ID');
9103   l('        ,H_CPT_PARTY_SITE_ID');
9104   l('        ,H_CPT_ORG_CONTACT_ID');
9105   l('        ,H_CONTACT_POINT_TYPE');
9106   l('        ,H_STATUS'); -- Propagating Bug 4299785 fix to sync modifications
9107   l('        ,H_ROWID ');
9108 
9109   FOR I IN 1..255 LOOP
9110     IF l_forall_list(I) <> 'N' AND l_mincol_list(I) = 'Y' AND
9111        l_custom_list(I) = 'N' THEN
9112       l('         ,H_TX'||I);
9113     END IF;
9114   END LOOP;
9115 
9116   l('      LIMIT l_limit;');
9117   l('      log (''Done''); ');
9118   l('');
9119   l('      IF p_sync_all_cpt_cur%NOTFOUND THEN');
9120   l('        l_last_fetch:=TRUE;');
9121   l('      END IF;');
9122   l('');
9123   l('      IF H_CONTACT_POINT_ID.COUNT=0 AND l_last_fetch THEN');
9127   l('      log (''Synchronizing for ''||H_CONTACT_POINT_ID.COUNT||'' Contact Points''); ');
9124   l('        EXIT;');
9125   l('      END IF;');
9126   l('');
9128   l('      log (''Populating Contact Points Transformation Functions into Arrays...'',FALSE); ');
9129   l('');
9130   l('      FOR I in H_CONTACT_POINT_ID.FIRST..H_CONTACT_POINT_ID.LAST LOOP');
9131 
9132   -- VJN INTRODUCED CODE FOR GENERATING THE POPULATION
9133   -- OF THE GLOBAL CONDITION RECORD
9134 
9135   l_idx := l_cond_attrib_list.FIRST ;
9136   IF l_idx IS NOT NULL
9137   THEN
9138     l('        ---- SETTING GLOBAL CONDITION RECORD AT THE CONTACT POINT LEVEL ----');
9139   END IF ;
9140 
9141   l('');
9142 
9143   WHILE l_cond_attrib_list.EXISTS(l_idx)
9144   LOOP
9145     l('        HZ_WORD_CONDITIONS_PKG.set_gbl_condition_rec ('||l_cond_attrib_list(l_idx)||','||'H_TX'||l_idx||'(I));');
9146     l_idx := l_idx+1;
9147   END LOOP;
9148   FOR I IN 1..255 LOOP
9149     IF l_forall_list(I) <> 'N' THEN
9150       IF l_custom_list(I) <> 'N' AND l_mincol_list(I) = 'Y' THEN
9151         l('        H_TX'||I||'(I):='||l_custom_list(I)||';');
9152       END IF;
9153     END IF;
9154   END LOOP;
9155   FOR I IN 1..255 LOOP
9156     IF l_forall_list(I) <> 'N' THEN
9157       IF l_mincol_list(I) <> 'Y' THEN
9158         l('        H_TX'||I||'(I):='||l_forall_list(I)||';');
9159       END IF;
9160     END IF;
9161   END LOOP;
9162   FOR I IN 1..255 LOOP
9163     IF l_forall_list(I) <> 'N' THEN
9164       IF l_mincol_list(I) = 'Y' THEN
9165         l('        H_TX'||I||'(I):='||l_forall_list(I)||';');
9166       END IF;
9167     END IF;
9168   END LOOP;
9169 
9170   l('      END LOOP;');
9171   l('      log (''Done''); ');
9172   l('');
9173   l('      l_st :=  1;  ');
9174   l('      l_en :=  H_CONTACT_POINT_ID.COUNT; ');
9175   l('');
9176   l('      IF p_operation = ''C'' THEN ');
9177   l('        BEGIN ');
9178   l('          log (''Inserting Data into HZ_STAGED_CONTACT_POINTS...'',FALSE); ');
9179   l('          FORALL I in l_st..l_en SAVE EXCEPTIONS ');
9180   l('            INSERT INTO HZ_STAGED_CONTACT_POINTS (');
9181   l('               CONTACT_POINT_ID');
9182   l('              ,PARTY_ID');
9183   l('              ,PARTY_SITE_ID');
9184   l('	           ,ORG_CONTACT_ID');
9185   l('              ,CONTACT_POINT_TYPE');
9186   l('              ,STATUS_FLAG'); --Propagating Bug 4299785 fix to sync modifications
9187 
9188   FOR I IN 1..255 LOOP
9189     IF l_forall_list(I) <> 'N' THEN
9190       l('              ,TX'||I);
9191     END IF;
9192   END LOOP;
9193 
9194   l('            ) VALUES (');
9195   l('               H_CONTACT_POINT_ID(I)');
9196   l('              ,H_CPT_PARTY_ID(I)');
9197   l('              ,H_CPT_PARTY_SITE_ID(I)');
9198   l('              ,H_CPT_ORG_CONTACT_ID(I)');
9199   l('              ,H_CONTACT_POINT_TYPE(I)');
9200   l('              ,H_STATUS(I)'); --Propagating Bug 4299785 fix to sync modifications
9201 
9202   FOR I IN 1..255 LOOP
9203     IF l_forall_list(I) <> 'N' THEN
9204       l('              ,decode(H_TX'||I||'(I),null,H_TX'||I||'(I),H_TX'||I||'(I)||'' '')');
9205     END IF;
9206   END LOOP;
9207   l('            );');
9208   l('          log (''Done''); ');
9209   l('        EXCEPTION  WHEN bulk_errors THEN ');
9210   l('          l_err_count := SQL%BULK_EXCEPTIONS.COUNT; ');
9211   l('          FOR indx IN 1..l_err_count LOOP ');
9212   l('            l_err_index := SQL%BULK_EXCEPTIONS(indx).ERROR_INDEX; ');
9213   l('            l_sql_errm  := sqlerrm(-SQL%BULK_EXCEPTIONS(indx).ERROR_CODE); ');
9214   -- SCHITRAP: Bug:5357970 - Error code is a number. Oracle error for ''DUP_VAL_ON_INDEX'' is ORA-00001
9215   --l('            IF (SQL%BULK_EXCEPTIONS(indx).ERROR_CODE) = ''DUP_VAL_ON_INDEX'' THEN ');
9216   l('            IF (instr(l_sql_errm,''ORA-00001'')>0) THEN  ');
9217   l('              log (''Exception DUP_VAL_ON_INDEX occured while inserting a Contact Point with CONTACT_POINT_ID - ''||H_CONTACT_POINT_ID(l_err_index)); ');
9218   l('              DELETE FROM HZ_DQM_SYNC_INTERFACE WHERE ENTITY=''CONTACT_POINTS'' AND OPERATION=''C'' AND RECORD_ID=H_CONTACT_POINT_ID(l_err_index);	');
9219   l('            ELSE ');
9220   l('              IF p_bulk_sync_type = ''DQM_SYNC'' THEN ');
9221   l('                UPDATE hz_dqm_sync_interface ');
9222   l('                  SET  error_data = l_sql_errm ');
9223   l('                  ,staged_flag    = decode (error_data, NULL, ''N'', ''E'') ');
9224   l('                WHERE rowid       = H_ROWID(l_err_index); ');
9225   l('              ELSIF  p_bulk_sync_type = ''IMPORT_SYNC'' THEN ');
9226   l('                -- Insert the Error Record into HZ_DQM_SYNC_INTERFACE table ');
9227   l('                insert_dqm_sync_error_rec(H_CPT_PARTY_ID(l_err_index), H_CONTACT_POINT_ID(l_err_index), H_CPT_PARTY_SITE_ID(l_err_index), H_CPT_ORG_CONTACT_ID(l_err_index), ''CONTACT_POINTS'', p_operation, ''E'', ''N'', l_sql_errm); ');
9228   l('              END IF; ');
9229   l('            END IF; ');
9230   l('          END LOOP; ');
9231   l('        END; ');
9232   l('      ELSIF p_operation = ''U'' THEN ');
9233   l('        BEGIN ');
9234   l('          log (''Updating Data in HZ_STAGED_CONTACT_POINTS...'',FALSE); ');
9235   l('          FORALL I in l_st..l_en SAVE EXCEPTIONS ');
9236   l('            UPDATE HZ_STAGED_CONTACT_POINTS SET ');
9237   l('              concat_col = concat_col');
9238   l('             ,status_flag    = H_STATUS(I) ');--Propagating Bug 4299785 fix to sync modifications
9239 
9240   FOR I IN 1..255 LOOP
9244 	    l('              ,TX'||I||'=decode(H_TX'||I||'(I),null,H_TX'||I||'(I),H_TX'||I||'(I)||'' '')');
9241     IF l_forall_list(I) <> 'N' THEN
9242    	  IF (is_first) THEN
9243 	    is_first := false;
9245 	  ELSE
9246 	    l('              ,TX'||I||'=decode(H_TX'||I||'(I),null,H_TX'||I||'(I),H_TX'||I||'(I)||'' '')');
9247 	  END IF;
9248     END IF;
9249   END LOOP;
9250   l('            WHERE CONTACT_POINT_ID=H_CONTACT_POINT_ID(I);');
9251   l('            log (''Done''); ');
9252   l('        EXCEPTION  WHEN bulk_errors THEN ');
9253   l('          l_err_count := SQL%BULK_EXCEPTIONS.COUNT; ');
9254   l('          FOR indx IN 1..l_err_count LOOP ');
9255   l('            l_err_index := SQL%BULK_EXCEPTIONS(indx).ERROR_INDEX; ');
9256   l('            l_sql_errm  := sqlerrm(-SQL%BULK_EXCEPTIONS(indx).ERROR_CODE); ');
9257   -- SCHITRAP: Bug:5357970 - Error code is a number. Oracle error for ''DUP_VAL_ON_INDEX'' is ORA-00001
9258   --l('            IF (SQL%BULK_EXCEPTIONS(indx).ERROR_CODE) = ''DUP_VAL_ON_INDEX'' THEN ');
9259   l('            IF (instr(l_sql_errm,''ORA-00001'')>0) THEN  ');
9260   l('              log (''Exception DUP_VAL_ON_INDEX occured while inserting a Contact Point with CONTACT_POINT_ID - ''||H_CONTACT_POINT_ID(l_err_index)); ');
9261   l('              DELETE FROM HZ_DQM_SYNC_INTERFACE WHERE ENTITY=''CONTACT_POINTS'' AND OPERATION=''U'' AND RECORD_ID=H_CONTACT_POINT_ID(l_err_index);	');
9262   l('            ELSE ');
9263   l('              IF p_bulk_sync_type = ''DQM_SYNC'' THEN ');
9264   l('                UPDATE hz_dqm_sync_interface ');
9265   l('                  SET  error_data = l_sql_errm ');
9266   l('                  ,staged_flag    = decode (error_data, NULL, ''N'', ''E'') ');
9267   l('                WHERE rowid       = H_ROWID(l_err_index); ');
9268   l('              ELSIF  p_bulk_sync_type = ''IMPORT_SYNC'' THEN ');
9269   l('                -- Insert the Error Record into HZ_DQM_SYNC_INTERFACE table ');
9270   l('                insert_dqm_sync_error_rec(H_CPT_PARTY_ID(l_err_index), H_CONTACT_POINT_ID(l_err_index), H_CPT_PARTY_SITE_ID(l_err_index), H_CPT_ORG_CONTACT_ID(l_err_index), ''CONTACT_POINTS'', p_operation, ''E'', ''N'', l_sql_errm); ');
9271   l('              END IF; ');
9272   l('            END IF; ');
9273   l('          END LOOP; ');
9274   l('        END; ');
9275   l('      END IF;');
9276   l('');
9277   l('      IF l_last_fetch THEN');
9278   l('        -- Update HZ_STAGED_PARTIES, if corresponding child entity records ');
9279   l('        -- CONTACT_POINTS (in this case), have been inserted/updated ');
9280   l('');
9281  l('        log (''Updating D_CPT column to SYNC in HZ_STAGED_PARTIES table for all related records...'',FALSE); ');
9282   l('        --Fix for bug 5048604, to update concat_col during update of denorm column ');
9283   l('        FORALL I IN H_CONTACT_POINT_ID.FIRST..H_CONTACT_POINT_ID.LAST ');
9284   l('          UPDATE HZ_STAGED_PARTIES set ');
9285   l('            D_CPT = ''SYNC'' ');
9286   l('           ,CONCAT_COL = CONCAT_COL ');
9287   l('          WHERE PARTY_ID = H_CPT_PARTY_ID(I); ');
9288   l('        log (''Done''); ');
9289   l('');
9290   l('      -- REPURI. Bug 4884742. ');
9291   l('      -- Bulk Insert the Import of Contact Points into  Shadow Sync Interface table ');
9292   l('      -- if Shadow Staging has already run and completed successfully ');
9293   l('      IF ((p_bulk_sync_type = ''IMPORT_SYNC'') AND ');
9294   l('          (HZ_DQM_SYNC.is_shadow_staging_complete)) THEN ');
9295   l('        BEGIN ');
9296   l('           -- REPURI. Bug 4968126. ');
9297   l('           -- Using the Merge instead of Insert statement ');
9298   l('           -- so that duplicate records dont get inserted. ');
9299   l('          log (''Merging data into HZ_DQM_SH_SYNC_INTERFACE...'',FALSE); ');
9300   l('          FORALL I in l_st..l_en  ');
9301   l('            MERGE INTO hz_dqm_sh_sync_interface S ');
9302   l('              USING ( ');
9303   l('                SELECT ');
9304   l('                   H_CPT_PARTY_ID(I)       AS party_id ');
9305   l('                  ,H_CONTACT_POINT_ID(I)   AS record_id ');
9306   l('                  ,H_CPT_PARTY_SITE_ID(I)  AS party_site_id ');
9307   l('                  ,H_CPT_ORG_CONTACT_ID(I) AS org_contact_id ');
9308   l('                FROM dual ) T ');
9309   l('              ON (S.entity                   = ''CONTACT_POINTS''           AND ');
9310   l('                  S.party_id                 = T.party_id                 AND ');
9311   l('                  S.record_id                = T.record_id                AND ');
9312   l('                  NVL(S.party_site_id, -99)  = NVL(T.party_site_id, -99)  AND ');
9313   l('                  NVL(S.org_contact_id, -99) = NVL(T.org_contact_id, -99) AND ');
9314   l('                  S.staged_flag              <> ''E'') ');
9315   l('              WHEN NOT MATCHED THEN ');
9316   l('              INSERT ( ');
9317   l('                PARTY_ID, ');
9318   l('                RECORD_ID, ');
9319   l('                PARTY_SITE_ID, ');
9320   l('                ORG_CONTACT_ID, ');
9321   l('                ENTITY, ');
9322   l('                OPERATION, ');
9323   l('                STAGED_FLAG, ');
9324   l('                REALTIME_SYNC_FLAG, ');
9325   l('                CREATED_BY, ');
9326   l('                CREATION_DATE, ');
9327   l('                LAST_UPDATE_LOGIN, ');
9328   l('                LAST_UPDATE_DATE, ');
9329   l('                LAST_UPDATED_BY, ');
9330   l('                SYNC_INTERFACE_NUM ');
9331   l('              ) VALUES ( ');
9332   l('                H_CPT_PARTY_ID(I), ');
9333   l('                H_CONTACT_POINT_ID(I), ');
9334   l('                H_CPT_PARTY_SITE_ID(I), ');
9338   l('                ''N'', ');
9335   l('                H_CPT_ORG_CONTACT_ID(I), ');
9336   l('                ''CONTACT_POINTS'', ');
9337   l('                p_operation, ');
9339   l('                ''N'', ');
9340   l('                hz_utility_pub.created_by, ');
9341   l('                hz_utility_pub.creation_date, ');
9342   l('                hz_utility_pub.last_update_login, ');
9343   l('                hz_utility_pub.last_update_date, ');
9344   l('                hz_utility_pub.user_id, ');
9345   l('                HZ_DQM_SH_SYNC_INTERFACE_S.nextval ');
9346   l('            ); ');
9347   l('        log (''Done''); ');
9348   l('        EXCEPTION WHEN OTHERS THEN ');
9349   l('              log (''Exception occured while inserting data into HZ_DQM_SH_SYNC_INTERFACE Table'');   ');
9350   l('              log (''Eror Message is - ''|| sqlerrm);   ');
9351   l('        END; ');
9352   l('      END IF; ');
9353   l('');
9354   l('        FND_CONCURRENT.AF_Commit;');
9355   l('        EXIT;');
9356   l('      END IF;');
9357   l('');
9358   l('      FND_CONCURRENT.AF_Commit;');
9359   l('');
9360   l('    END LOOP;');
9361   l('    log (''End Synchronizing Contact Points''); ');
9362   l('  END;');
9363 
9364 END;
9365 
9366 PROCEDURE generate_contact_pt_query_proc IS
9367  cur_col_num NUMBER := 1;
9368 
9369  TYPE coltab IS TABLE OF VARCHAR2(2000) INDEX BY BINARY_INTEGER;
9370 
9371  l_select coltab;
9372  FIRST BOOLEAN := FALSE;
9373 
9374  l_forall_list coltab;
9375  l_custom_list coltab;
9376  l_mincol_list coltab;
9377  l_min_colnum NUMBER;
9378  idx NUMBER :=1;
9379  is_first boolean := true;
9380 
9381  -- VJN Introduced for conditional word replacements
9382  l_cond_attrib_list coltab ;
9383  l_idx number ;
9384  l_attr_name varchar2(2000);
9385 
9386 BEGIN
9387   l('');
9388   l('  PROCEDURE insert_stage_contact_pts IS ');
9389   l('   l_limit NUMBER := ' || g_batch_size || ';');
9390   l('   l_last_fetch BOOLEAN := FALSE;');
9391   l('   l_denorm VARCHAR2(2000);');
9392   l('   l_st number; ');
9393   l('   l_en number; ');
9394 
9395   l('');
9396 
9397   FOR ATTRS IN (SELECT a.ATTRIBUTE_ID,
9398                        a.ATTRIBUTE_NAME,
9399                        a.SOURCE_TABLE,
9400                        a.CUSTOM_ATTRIBUTE_PROCEDURE,
9401                        f.PROCEDURE_NAME,
9402                        f.STAGED_ATTRIBUTE_COLUMN,
9403                        to_number(substrb(STAGED_ATTRIBUTE_COLUMN, 3)) COLNUM,
9404 		       nvl(lkp.tag,'C') column_data_type
9405                 FROM HZ_TRANS_ATTRIBUTES_VL a, HZ_TRANS_FUNCTIONS_VL f,FND_LOOKUP_VALUES_VL lkp --Bug No: 4279469
9406                 WHERE ENTITY_NAME = 'CONTACT_POINTS'
9407                 AND nvl(f.ACTIVE_FLAG,'Y') = 'Y'
9408                 AND f.ATTRIBUTE_ID = a.ATTRIBUTE_ID
9409                 -- REPURI. Added the 2 lines here for bug 4957189, which were missed in bug 4279469 fix.
9410                 AND lkp.LOOKUP_TYPE='CONTACT_PT_LOGICAL_ATTRIB_LIST'
9411                 AND lkp.LOOKUP_CODE =  a.ATTRIBUTE_NAME
9412                 ORDER BY COLNUM) LOOP
9413     IF cur_col_num<ATTRS.COLNUM THEN
9414       FOR I in cur_col_num..ATTRS.COLNUM-1 LOOP
9415         l_mincol_list(I) := 'N';
9416         l_forall_list(I) := 'N';
9417       END LOOP;
9418     END IF;
9419     cur_col_num:=ATTRS.COLNUM+1;
9420     IF has_trx_context(ATTRS.PROCEDURE_NAME) THEN
9421       l_forall_list(ATTRS.COLNUM) := ATTRS.PROCEDURE_NAME || '(H_TX'||ATTRS.COLNUM||'(I),NULL, ''' || ATTRS.ATTRIBUTE_NAME || ''',''CONTACT_POINTS'',''STAGE'')';
9422     ELSE
9423       l_forall_list(ATTRS.COLNUM) := ATTRS.PROCEDURE_NAME || '(H_TX'||ATTRS.COLNUM||'(I),NULL, ''' || ATTRS.ATTRIBUTE_NAME || ''',''CONTACT_POINTS'')';
9424     END IF;
9425 
9426     SELECT min(to_number(substrb(STAGED_ATTRIBUTE_COLUMN, 3))) INTO l_min_colnum
9427     FROM HZ_TRANS_ATTRIBUTES_VL a, HZ_TRANS_FUNCTIONS_VL f
9428     WHERE ENTITY_NAME = 'CONTACT_POINTS'
9429     AND nvl(f.ACTIVE_FLAG,'Y') = 'Y'
9430     AND f.ATTRIBUTE_ID = a.ATTRIBUTE_ID
9431     AND a.ATTRIBUTE_NAME=ATTRS.ATTRIBUTE_NAME;
9432 
9433     IF ATTRS.colnum>l_min_colnum THEN
9434       l_mincol_list(ATTRS.COLNUM) := 'N';
9435       IF has_trx_context(ATTRS.PROCEDURE_NAME) THEN
9436         l_forall_list(ATTRS.COLNUM) := ATTRS.PROCEDURE_NAME || '(H_TX'||l_min_colnum||'(I),NULL, ''' || ATTRS.ATTRIBUTE_NAME || ''',''CONTACT_POINTS'',''STAGE'')';
9437       ELSE
9438         l_forall_list(ATTRS.COLNUM) := ATTRS.PROCEDURE_NAME || '(H_TX'||l_min_colnum||'(I),NULL, ''' || ATTRS.ATTRIBUTE_NAME || ''',''CONTACT_POINTS'')';
9439       END IF;
9440 
9441     ELSE
9442       l_mincol_list(ATTRS.COLNUM) := 'Y';
9443     END IF;
9444 
9445     IF ATTRS.CUSTOM_ATTRIBUTE_PROCEDURE IS NULL THEN
9446 	-----Start of Bug No: 4279469----------
9447 	l_attr_name := ATTRS.ATTRIBUTE_NAME;
9448         IF(ATTRS.column_data_type ='D') THEN
9449 	   l_attr_name    := 'TO_CHAR(cp.'||l_attr_name||',''DD-MON-YYYY'') '||l_attr_name;
9450         ELSE
9451           l_attr_name    := 'cp.'||l_attr_name;
9452 	END IF;
9453         -----End of Bug No: 4279469------------
9454       IF l_mincol_list(ATTRS.COLNUM) = 'Y' THEN
9455         l_select(idx) := l_attr_name;
9456       ELSE
9457         l_select(idx) := 'N';
9458       END IF;
9459 
9460       l_custom_list(ATTRS.COLNUM) := 'N';
9461     ELSE
9462       l_select(idx) := 'N';
9463       l_custom_list(ATTRS.COLNUM) := 'N';
9467 'WXYZabcdefghijklmnopqrstuvwxyz!"#$%&()''''*+,-./:;<=>?@[\]^'||
9464       IF ATTRS.ATTRIBUTE_NAME = 'FLEX_FORMAT_PHONE_NUMBER' THEN
9465         IF l_mincol_list(ATTRS.COLNUM) = 'Y' THEN
9466           l_select(idx) := 'translate(phone_number,''0123456789ABCDEFGHIJKLMNOPQRSTUV'||
9468 '_`{|}~ '',''0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ'') || '' '' || ' ||
9469                            'translate(phone_area_code||'' '' || phone_number,''0123456789ABCDEFGHIJKLMNOPQRSTUV'||
9470 'WXYZabcdefghijklmnopqrstuvwxyz!"#$%&()''''*+,-./:;<=>?@[\]^'||
9471 '_`{|}~ '',''0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ'') || '' '' || '||
9472                            ' translate(phone_country_code|| '' '' || phone_area_code||'' '' || phone_number,''0123456789ABCDEFGHIJKLMNOPQRSTUV'||
9473 'WXYZabcdefghijklmnopqrstuvwxyz!"#$%&()''''*+,-./:;<=>?@[\]^'||
9474 '_`{|}~ '',''0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ'')';
9475         END IF;
9476       ELSIF ATTRS.ATTRIBUTE_NAME = 'RAW_PHONE_NUMBER' THEN
9477         IF l_mincol_list(ATTRS.COLNUM) = 'Y' THEN
9478           l_select(idx) := 'translate(phone_country_code|| '' '' || phone_area_code||'' '' || phone_number,''0123456789ABCDEFGHIJKLMNOPQRSTUV'||
9479 'WXYZabcdefghijklmnopqrstuvwxyz!"#$%&()''''*+,-./:;<=>?@[\]^_'||
9480 '`{|}~ '',''0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ'')';
9481 
9482         END IF;
9483       ELSE
9484         IF l_mincol_list(ATTRS.COLNUM) = 'Y' THEN
9485           IF has_context(ATTRS.custom_attribute_procedure) THEN
9486             l_custom_list(ATTRS.COLNUM) := ATTRS.custom_attribute_procedure || '(H_CONTACT_POINT_ID(I),''CONTACT_POINTS'','''||ATTRS.ATTRIBUTE_NAME|| ''', ''STAGE'')';
9487           ELSE
9488             l_custom_list(ATTRS.COLNUM) := ATTRS.custom_attribute_procedure || '(H_CONTACT_POINT_ID(I), ''CONTACT_POINTS'','''||ATTRS.ATTRIBUTE_NAME|| ''')';
9489           END IF;
9490         END IF;
9491       END IF;
9492     END IF;
9493     idx := idx+1;
9494 
9495     -- VJN ADDED CODE FOR TRACKING CONDITION ATTRIBUTES AT THIS ENTITY LEVEL
9496     IF HZ_WORD_CONDITIONS_PKG.is_a_cond_attrib( ATTRS.attribute_id)
9497      THEN
9498          l_cond_attrib_list(ATTRS.COLNUM) := ATTRS.attribute_id ;
9499     END IF;
9500 
9501   END LOOP;
9502 
9503   IF cur_col_num<=255 THEN--bug 5977628
9504     FOR I in cur_col_num..255 LOOP
9505       l_mincol_list(I) := 'N';
9506       l_forall_list(I) := 'N';
9507       l_custom_list(I) := 'N';
9508     END LOOP;
9509   END IF;
9510 
9511   l('  CURSOR contact_pt_cur IS');
9512   l('           SELECT /*+ ORDERED USE_NL(cp) */ cp.CONTACT_POINT_ID, g.party_id, g.party_site_id, g.org_contact_id, cp.CONTACT_POINT_TYPE, PARTY_INDEX, cp.STATUS '); -- Bug No:4299785
9513   FOR I in 1..l_select.COUNT LOOP
9514     IF l_select(I) <> 'N' THEN
9515       l('                  ,' || l_select(I));
9516     END IF;
9517   END LOOP;
9518   l('           FROM HZ_DQM_STAGE_GT g,HZ_CONTACT_POINTS cp');
9519   l('           WHERE cp.owner_table_id  =  g.owner_id ');
9520   l('           AND cp.OWNER_TABLE_NAME = nvl(g.owner_table,''HZ_PARTIES'') ');
9521   l('           AND (cp.status is null OR cp.status = ''A'' or cp.status = ''I''); ');
9522   l('');
9523   l('  BEGIN');
9524   l('    OPEN contact_pt_cur;');
9525   l('    LOOP');
9526   l('      FETCH contact_pt_cur BULK COLLECT INTO');
9527   l('        H_CONTACT_POINT_ID');
9528   l('        ,H_CPT_PARTY_ID');
9529   l('        ,H_CPT_PARTY_SITE_ID');
9530   l('        ,H_CPT_ORG_CONTACT_ID');
9531   l('        ,H_CONTACT_POINT_TYPE');
9532   l('        ,H_PARTY_INDEX');
9533   l('        ,H_STATUS'); -- Bug No:4299785
9534 
9535   FOR I IN 1..255 LOOP
9536     IF l_forall_list(I) <> 'N' AND l_mincol_list(I) = 'Y' AND
9537        l_custom_list(I) = 'N' THEN
9538       l('         ,H_TX'||I);
9539     END IF;
9540   END LOOP;
9541   l('      LIMIT l_limit;');
9542   l('');
9543   l('    IF contact_pt_cur%NOTFOUND THEN');
9544   l('      l_last_fetch:=TRUE;');
9545   l('    END IF;');
9546 
9547   l('    IF H_CPT_PARTY_ID.COUNT=0 AND l_last_fetch THEN');
9548   l('      EXIT;');
9549   l('    END IF;');
9550 
9551   l('    FOR I in H_CPT_PARTY_ID.FIRST..H_CPT_PARTY_ID.LAST LOOP');
9552 
9553   -- VJN INTRODUCED CODE FOR GENERATING THE POPULATION
9554   -- OF THE GLOBAL CONDITION RECORD
9555 
9556   l_idx := l_cond_attrib_list.FIRST ;
9557   IF l_idx IS NOT NULL
9558   THEN
9559     l('----------- SETTING GLOBAL CONDITION RECORD AT THE CONTACT POINT LEVEL ---------');
9560   END IF ;
9561 
9562   l('');
9563 
9564 
9565   WHILE l_cond_attrib_list.EXISTS(l_idx)
9566   LOOP
9567 
9568       l('     HZ_WORD_CONDITIONS_PKG.set_gbl_condition_rec ('||l_cond_attrib_list(l_idx)||','||'H_TX'||l_idx||'(I));');
9569       l_idx := l_idx+1;
9570   END LOOP;
9571   FOR I IN 1..255 LOOP
9572     IF l_forall_list(I) <> 'N' THEN
9573       IF l_custom_list(I) <> 'N' AND l_mincol_list(I) = 'Y' THEN
9574         l('         H_TX'||I||'(I):='||l_custom_list(I)||';');
9575       END IF;
9576     END IF;
9577   END LOOP;
9578   FOR I IN 1..255 LOOP
9579     IF l_forall_list(I) <> 'N' THEN
9580       IF l_mincol_list(I) <> 'Y' THEN
9581         l('         H_TX'||I||'(I):='||l_forall_list(I)||';');
9582       END IF;
9583     END IF;
9584   END LOOP;
9585   FOR I IN 1..255 LOOP
9586     IF l_forall_list(I) <> 'N' THEN
9587       IF l_mincol_list(I) = 'Y' THEN
9591   END LOOP;
9588         l('         H_TX'||I||'(I):='||l_forall_list(I)||';');
9589       END IF;
9590     END IF;
9592   FIRST := TRUE;
9593   FOR ATTRS IN (SELECT a.ATTRIBUTE_ID,
9594                        a.ATTRIBUTE_NAME,
9595                        a.SOURCE_TABLE,
9596                        a.CUSTOM_ATTRIBUTE_PROCEDURE,
9597                        f.PROCEDURE_NAME,
9598                        f.STAGED_ATTRIBUTE_COLUMN,
9599                        to_number(substrb(STAGED_ATTRIBUTE_COLUMN, 3)) COLNUM
9600                 FROM HZ_TRANS_ATTRIBUTES_VL a, HZ_TRANS_FUNCTIONS_VL f
9601                 WHERE ENTITY_NAME = 'CONTACT_POINTS'
9602                 AND nvl(f.ACTIVE_FLAG,'Y') = 'Y'
9603                 AND f.ATTRIBUTE_ID = a.ATTRIBUTE_ID
9604                 AND nvl(a.DENORM_FLAG,'N') = 'Y') LOOP
9605      IF FIRST THEN
9606      -- Fix for bug 4872997
9607      -- Wrapping the 'l_denorm' portion of code into a begin-excpetion block
9608      -- and setting the denorm value to 'SYNC' if sqlcode-6502 error occurs
9609        l('      BEGIN ');
9610        l('        l_denorm := H_TX'||ATTRS.COLNUM||'(I)');
9611        FIRST := FALSE;
9612      ELSE
9613        l('                  || '' '' || H_TX'||ATTRS.COLNUM||'(I)');
9614      END IF;
9615   END LOOP;
9616   IF NOT FIRST THEN
9617     l('             ;');
9618     l('        IF H_CPT_DEN(H_PARTY_INDEX(I)) = ''SYNC'' THEN');
9619     l('          NULL;');
9620     l('        ELSIF lengthb(H_CPT_DEN(H_PARTY_INDEX(I)))+lengthb(l_denorm)<2000 THEN');
9621     l('          IF H_CPT_DEN(H_PARTY_INDEX(I)) IS NULL OR instrb(H_CPT_DEN(H_PARTY_INDEX(I)),l_denorm)= 0 THEN');
9622     l('            H_CPT_DEN(H_PARTY_INDEX(I)) := H_CPT_DEN(H_PARTY_INDEX(I)) || '' '' || l_denorm;');
9623     l('          END IF;');
9624     l('        ELSE');
9625     l('          H_CPT_DEN(H_PARTY_INDEX(I)) := ''SYNC'';');
9626     l('        END IF;');
9627     l('      EXCEPTION WHEN OTHERS THEN ');
9628     l('        IF SQLCODE=-6502 THEN');
9629     l('          H_CPT_DEN(H_PARTY_INDEX(I)) := ''SYNC'';');
9630     l('        END IF; ');
9631     l('      END; ');
9632   END IF;
9633 
9634   l('    END LOOP;');
9635   l('      l_st := 1;  ');
9636   l('      l_en := H_CPT_PARTY_ID.COUNT; ');
9637   l('      LOOP ');
9638   l('          BEGIN  ');
9639   l('              FORALL I in l_st..l_en');
9640   l('                INSERT INTO HZ_STAGED_CONTACT_POINTS (');
9641   l('	               CONTACT_POINT_ID');
9642   l('	               ,PARTY_ID');
9643   l('	               ,PARTY_SITE_ID');
9644   l('	               ,ORG_CONTACT_ID');
9645   l('	               ,CONTACT_POINT_TYPE');
9646   l('                  ,STATUS_FLAG'); --Bug No: 4299785
9647 
9648   FOR I IN 1..255 LOOP
9649     IF l_forall_list(I) <> 'N' THEN
9650       l('                   , TX'||I);
9651     END IF;
9652   END LOOP;
9653 
9654   l('                   ) VALUES (');
9655   l('                   H_CONTACT_POINT_ID(I)');
9656   l('                   ,H_CPT_PARTY_ID(I)');
9657   l('                   ,H_CPT_PARTY_SITE_ID(I)');
9658   l('                   ,H_CPT_ORG_CONTACT_ID(I)');
9659   l('                   ,H_CONTACT_POINT_TYPE(I)');
9660   l('                   ,H_STATUS(I)'); --Bug No: 4299785
9661 
9662   FOR I IN 1..255 LOOP
9663     IF l_forall_list(I) <> 'N' THEN
9664       l('                  , decode(H_TX'||I||'(I),null,H_TX'||I||'(I),H_TX'||I||'(I)||'' '')');
9665     END IF;
9666   END LOOP;
9667   l('          );');
9668   l('        EXIT; ');
9669   l('        EXCEPTION  WHEN OTHERS THEN ');
9670   l('            l_st:= l_st+SQL%ROWCOUNT+1;');
9671   l('        END; ');
9672   l('      END LOOP; ');
9673   l('      IF l_last_fetch THEN');
9674   l('        EXIT;');
9675   l('      END IF;');
9676   l('    END LOOP;');
9677   l('    CLOSE contact_pt_cur;');
9678   l('  END;');
9679 
9680   l('');
9681   l('  PROCEDURE sync_single_contact_point (');
9682   l('    p_contact_point_id NUMBER,');
9683   l('    p_operation VARCHAR2) IS');
9684   l('');
9685   l('  l_tryins BOOLEAN;');
9686   l('  l_tryupd BOOLEAN;');
9687   l('   BEGIN');
9688   l('     SELECT cp.CONTACT_POINT_ID, d.PARTY_ID, d.PARTY_SITE_ID, d.ORG_CONTACT_ID, cp.CONTACT_POINT_TYPE, cp.STATUS '); --Bug No: 4299785
9689   FOR I in 1..l_select.COUNT LOOP
9690     IF l_select(I) <> 'N' THEN
9691       l('            ,' || l_select(I));
9692     END IF;
9693   END LOOP;
9694   l('      INTO H_CONTACT_POINT_ID(1),H_PARTY_ID(1), H_PARTY_SITE_ID(1),H_ORG_CONTACT_ID(1),H_CONTACT_POINT_TYPE(1), H_STATUS(1)'); --Bug No: 4299785
9695   FOR I IN 1..255 LOOP
9696     IF l_forall_list(I) <> 'N' AND l_mincol_list(I) = 'Y' AND
9697        l_custom_list(I) = 'N' THEN
9698       l('         , H_TX'||I||'(1)');
9699     END IF;
9700   END LOOP;
9701   l('     FROM HZ_CONTACT_POINTS cp, HZ_DQM_SYNC_INTERFACE d ');
9702   l('     WHERE  d.ENTITY = ''CONTACT_POINTS'' ');
9703   l('     AND cp.contact_point_id  =  p_contact_point_id ');
9704   l('     AND cp.contact_point_id  =  d.RECORD_ID ');
9705   l('     AND (cp.status is null OR cp.status = ''A'' or cp.status = ''I'') and rownum = 1 ; ');
9706    -- VJN INTRODUCED CODE FOR GENERATING THE POPULATION
9707   -- OF THE GLOBAL CONDITION RECORD
9708 
9709   l_idx := l_cond_attrib_list.FIRST ;
9710   IF l_idx IS NOT NULL
9711   THEN
9715 
9712     l('----------- SETTING GLOBAL CONDITION RECORD AT THE CONTACT POINT LEVEL ---------');
9713   END IF ;
9714 
9716   WHILE l_cond_attrib_list.EXISTS(l_idx)
9717   LOOP
9718 
9719       l('     HZ_WORD_CONDITIONS_PKG.set_gbl_condition_rec ('||l_cond_attrib_list(l_idx)||','||'H_TX'||l_idx||'(1));');
9720       l_idx := l_idx+1;
9721   END LOOP;
9722   FOR I IN 1..255 LOOP
9723     IF l_forall_list(I) <> 'N' THEN
9724       IF l_custom_list(I) <> 'N' AND l_mincol_list(I) = 'Y' THEN
9725         l('    H_TX'||I||'(1):='||replace(l_custom_list(I),'(I)','(1)')||';');
9726       END IF;
9727     END IF;
9728   END LOOP;
9729   FOR I IN 1..255 LOOP
9730     IF l_forall_list(I) <> 'N' THEN
9731       IF l_mincol_list(I) <> 'Y' THEN
9732         l('    H_TX'||I||'(1):='||replace(l_forall_list(I),'(I)','(1)')||';');
9733       END IF;
9734     END IF;
9735   END LOOP;
9736   FOR I IN 1..255 LOOP
9737     IF l_forall_list(I) <> 'N' THEN
9738       IF l_mincol_list(I) = 'Y' THEN
9739         l('    H_TX'||I||'(1):='||replace(l_forall_list(I),'(I)','(1)')||';');
9740       END IF;
9741     END IF;
9742   END LOOP;
9743   l('   l_tryins := FALSE;');
9744   l('   l_tryupd := FALSE;');
9745   l('   IF p_operation=''C'' THEN');
9746   l('     l_tryins:=TRUE;');
9747   l('   ELSE ');
9748   l('     l_tryupd:=TRUE;');
9749   l('   END IF;');
9750   l('   WHILE (l_tryins OR l_tryupd) LOOP');
9751   l('     IF l_tryins THEN');
9752   l('       BEGIN');
9753   l('         l_tryins:=FALSE;');
9754   l('         INSERT INTO HZ_STAGED_CONTACT_POINTS (');
9755   l('           CONTACT_POINT_ID');
9756   l('           ,PARTY_ID');
9757   l('           ,PARTY_SITE_ID');
9758   l('           ,ORG_CONTACT_ID');
9759   l('           ,CONTACT_POINT_TYPE');
9760   l('           ,STATUS_FLAG');--Bug No: 4299785
9761 
9762   FOR I IN 1..255 LOOP
9763     IF l_forall_list(I) <> 'N' THEN
9764       l('              , TX'||I);
9765     END IF;
9766   END LOOP;
9767 
9768   l('           ) VALUES (');
9769   l('             H_CONTACT_POINT_ID(1)');
9770   l('            ,H_PARTY_ID(1)');
9771   l('            ,H_PARTY_SITE_ID(1)');
9772   l('            ,H_ORG_CONTACT_ID(1)');
9773   l('            ,H_CONTACT_POINT_TYPE(1)');
9774   l('            ,H_STATUS(1)'); --Bug No: 4299785
9775 
9776   FOR I IN 1..255 LOOP
9777     IF l_forall_list(I) <> 'N' THEN
9778       l('             , decode(H_TX'||I||'(1),null,H_TX'||I||'(1),H_TX'||I||'(1)||'' '')');
9779     END IF;
9780   END LOOP;
9781 
9782   l('         );');
9783   l('       EXCEPTION');
9784   l('         WHEN DUP_VAL_ON_INDEX THEN');
9785   l('           IF p_operation=''C'' THEN');
9786   l('             l_tryupd:=TRUE;');
9787   l('           END IF;');
9788   l('       END;');
9789   l('     END IF;');
9790   l('     IF l_tryupd THEN');
9791   l('       BEGIN');
9792   l('         l_tryupd:=FALSE;');
9793   l('         UPDATE HZ_STAGED_CONTACT_POINTS SET ');
9794   l('            concat_col = concat_col');
9795   l('           ,status_flag    = H_STATUS(1) ');--Bug No: 4299785
9796 
9797   FOR I IN 1..255 LOOP
9798     IF l_forall_list(I) <> 'N' THEN
9799    	IF (is_first) THEN
9800 	      is_first := false;
9801 	      l('            ,TX'||I||'=decode(H_TX'||I||'(1),null,H_TX'||I||'(1),H_TX'||I||'(1)||'' '')');
9802 	ELSE
9803 	      l('            ,TX'||I||'=decode(H_TX'||I||'(1),null,H_TX'||I||'(1),H_TX'||I||'(1)||'' '')');
9804 	END IF;
9805     END IF;
9806   END LOOP;
9807   l('         WHERE CONTACT_POINT_ID=H_CONTACT_POINT_ID(1);');
9808   l('         IF SQL%ROWCOUNT=0 AND p_operation=''U'' THEN');
9809   l('           l_tryins := TRUE;');
9810   l('         END IF;');
9811   l('       EXCEPTION ');
9812   l('         WHEN NO_DATA_FOUND THEN');
9813   l('           IF p_operation=''U'' THEN');
9814   l('             l_tryins := TRUE;');
9815   l('           END IF;');
9816   l('       END;');
9817   l('     END IF;');
9818   l('   END LOOP;');
9819   l('   --Fix for bug 5048604, to update concat_col during update of denorm column ');
9820   l('   UPDATE HZ_STAGED_PARTIES set');
9821   l('     D_CPT = ''SYNC''');
9822   l('    ,CONCAT_COL = CONCAT_COL ');
9823   l('   WHERE PARTY_ID = H_PARTY_ID(1);');
9824   l('  END;');
9825 
9826   -- VJN Introduced for SYNC.
9827   is_first := true ;
9828   l('');
9829   l('  PROCEDURE sync_single_cpt_online (');
9830   l('    p_contact_point_id   NUMBER,');
9831   l('    p_operation          VARCHAR2) IS');
9832   l('');
9833   l('    l_tryins          BOOLEAN;');
9834   l('    l_tryupd          BOOLEAN;');
9835   l('    l_party_id        NUMBER := 0; ');
9836   l('    l_party_id1       NUMBER; ');
9837   l('    l_org_contact_id  NUMBER; ');
9838   l('    l_party_site_id   NUMBER; ');
9839   l('    l_pr_id           NUMBER; ');
9840   l('    l_num_ocs         NUMBER; ');
9841   l('    l_ot_id           NUMBER; ');
9842   l('    l_ot_table        VARCHAR2(60); ');
9843   l('    l_party_type      VARCHAR2(60); ');
9844   l('    l_sql_err_message VARCHAR2(2000); ');
9845   l('');
9846   l('  BEGIN');
9847   l('');
9848   l('    l_org_contact_id := -1; ');
9849   l('    l_party_site_id  := -1; ');
9850   l('');
9851   l('    SELECT owner_table_name,owner_table_id INTO l_ot_table, l_ot_id ');
9852   l('    FROM hz_contact_points ');
9856   l('      SELECT p.party_id, ps.party_site_id, party_type ');
9853   l('    WHERE contact_point_id = p_contact_point_id; ');
9854   l('');
9855   l('    IF l_ot_table = ''HZ_PARTY_SITES'' THEN ');
9857   l('      INTO l_party_id1, l_party_site_id, l_party_type ');
9858   l('      FROM HZ_PARTY_SITES ps, HZ_PARTIES p ');
9859   l('      WHERE party_site_id  = l_ot_id ');
9860   l('      AND   p.party_id     = ps.party_id; ');
9861   l('');
9862   l('      IF l_party_type = ''PARTY_RELATIONSHIP'' THEN ');
9863   l('        BEGIN ');
9864   l('          SELECT r.object_id, org_contact_id INTO l_party_id,l_org_contact_id ');
9865   l('          FROM HZ_ORG_CONTACTS oc, HZ_RELATIONSHIPS r ');
9866   l('          WHERE r.party_id            = l_party_id1 ');
9867   l('          AND   r.relationship_id     = oc.party_relationship_id ');
9868   l('          AND   r.directional_flag    = ''F'' ');
9869   l('          AND   r.SUBJECT_TABLE_NAME  = ''HZ_PARTIES'' ');
9870   l('          AND   r.OBJECT_TABLE_NAME   = ''HZ_PARTIES''; ');
9871   l('        EXCEPTION ');
9872   l('          WHEN NO_DATA_FOUND THEN ');
9873   l('            RETURN; ');
9874   l('        END; ');
9875   l('      ELSE ');
9876   l('        l_party_id:=l_party_id1; ');
9877   l('        l_org_contact_id:=NULL; ');
9878   l('      END IF; ');
9879   l('');
9880   l('    ELSIF l_ot_table = ''HZ_PARTIES'' THEN ');
9881   l('      l_party_site_id := NULL; ');
9882   l('      SELECT party_type INTO l_party_type ');
9883   l('      FROM hz_parties ');
9884   l('      WHERE party_id = l_ot_id; ');
9885   l('');
9886   l('      IF l_party_type <> ''PARTY_RELATIONSHIP'' THEN ');
9887   l('        l_party_id := l_ot_id; ');
9888   l('        l_org_contact_id:=NULL; ');
9889   l('      ELSE ');
9890   l('        BEGIN ');
9891   l('          SELECT r.object_id, org_contact_id INTO l_party_id,l_org_contact_id ');
9892   l('          FROM HZ_ORG_CONTACTS oc, HZ_RELATIONSHIPS r ');
9893   l('          WHERE r.party_id            = l_ot_id ');
9894   l('          AND   r.relationship_id     = oc.party_relationship_id ');
9895   l('          AND   r.directional_flag    = ''F'' ');
9896   l('          AND   r.SUBJECT_TABLE_NAME  = ''HZ_PARTIES'' ');
9897   l('          AND   r.OBJECT_TABLE_NAME   = ''HZ_PARTIES''; ');
9898   l('        EXCEPTION ');
9899   l('          WHEN NO_DATA_FOUND THEN ');
9900   l('            RETURN; ');
9901   l('        END; ');
9902   l('      END IF; ');
9903   l('    END IF; ');
9904   l('');
9905   l('    SELECT cp.CONTACT_POINT_ID, l_party_id, l_party_site_id, l_org_contact_id, cp.CONTACT_POINT_TYPE, cp.STATUS '); --Bug No: 4299785
9906   FOR I in 1..l_select.COUNT LOOP
9907     IF l_select(I) <> 'N' THEN
9908       l('          ,' || l_select(I));
9909     END IF;
9910   END LOOP;
9911   l('    INTO H_CONTACT_POINT_ID(1),H_PARTY_ID(1), H_PARTY_SITE_ID(1),H_ORG_CONTACT_ID(1),H_CONTACT_POINT_TYPE(1), H_STATUS(1)'); --Bug No: 4299785
9912   FOR I IN 1..255 LOOP
9913     IF l_forall_list(I) <> 'N' AND l_mincol_list(I) = 'Y' AND
9914        l_custom_list(I) = 'N' THEN
9915       l('        ,H_TX'||I||'(1)');
9916     END IF;
9917   END LOOP;
9918   l('    FROM HZ_CONTACT_POINTS cp ');
9919   l('    WHERE ');
9920   l('          cp.contact_point_id  =  p_contact_point_id ');
9921   l('      AND (cp.status is null OR cp.status = ''A'' or cp.status = ''I'') and rownum = 1 ; ');
9922   l('');
9923 
9924    -- VJN INTRODUCED CODE FOR GENERATING THE POPULATION
9925   -- OF THE GLOBAL CONDITION RECORD
9926 
9927   l_idx := l_cond_attrib_list.FIRST ;
9928   IF l_idx IS NOT NULL
9929   THEN
9930     l('    ---- SETTING GLOBAL CONDITION RECORD AT THE CONTACT POINT LEVEL ----');
9931   END IF ;
9932 
9933 
9934   WHILE l_cond_attrib_list.EXISTS(l_idx)
9935   LOOP
9936 
9937       l('    HZ_WORD_CONDITIONS_PKG.set_gbl_condition_rec ('||l_cond_attrib_list(l_idx)||','||'H_TX'||l_idx||'(1));');
9938       l_idx := l_idx+1;
9939   END LOOP;
9940   FOR I IN 1..255 LOOP
9941     IF l_forall_list(I) <> 'N' THEN
9942       IF l_custom_list(I) <> 'N' AND l_mincol_list(I) = 'Y' THEN
9943         l('    H_TX'||I||'(1):='||replace(l_custom_list(I),'(I)','(1)')||';');
9944       END IF;
9945     END IF;
9946   END LOOP;
9947   FOR I IN 1..255 LOOP
9948     IF l_forall_list(I) <> 'N' THEN
9949       IF l_mincol_list(I) <> 'Y' THEN
9950         l('    H_TX'||I||'(1):='||replace(l_forall_list(I),'(I)','(1)')||';');
9951       END IF;
9952     END IF;
9953   END LOOP;
9954   FOR I IN 1..255 LOOP
9955     IF l_forall_list(I) <> 'N' THEN
9956       IF l_mincol_list(I) = 'Y' THEN
9957         l('    H_TX'||I||'(1):='||replace(l_forall_list(I),'(I)','(1)')||';');
9958       END IF;
9959     END IF;
9960   END LOOP;
9961   l('');
9962   l('    l_tryins := FALSE;');
9963   l('    l_tryupd := FALSE;');
9964   l('');
9965   l('    IF p_operation=''C'' THEN');
9966   l('      l_tryins:=TRUE;');
9967   l('    ELSE ');
9968   l('      l_tryupd:=TRUE;');
9969   l('    END IF;');
9970   l('');
9971   l('    WHILE (l_tryins OR l_tryupd) LOOP');
9972   l('      IF l_tryins THEN');
9973   l('        BEGIN');
9974   l('          l_tryins:=FALSE;');
9975   l('          INSERT INTO HZ_STAGED_CONTACT_POINTS (');
9976   l('             CONTACT_POINT_ID');
9977   l('            ,PARTY_ID');
9978   l('            ,PARTY_SITE_ID');
9979   l('            ,ORG_CONTACT_ID');
9980   l('            ,CONTACT_POINT_TYPE');
9981   l('            ,STATUS_FLAG'); --Bug No: 4299785
9982 
9986     END IF;
9983   FOR I IN 1..255 LOOP
9984     IF l_forall_list(I) <> 'N' THEN
9985       l('            ,TX'||I);
9987   END LOOP;
9988 
9989   l('          ) VALUES (');
9990   l('             H_CONTACT_POINT_ID(1)');
9991   l('            ,H_PARTY_ID(1)');
9992   l('            ,H_PARTY_SITE_ID(1)');
9993   l('            ,H_ORG_CONTACT_ID(1)');
9994   l('            ,H_CONTACT_POINT_TYPE(1)');
9995   l('            ,H_STATUS(1)'); --Bug No: 4299785
9996 
9997   FOR I IN 1..255 LOOP
9998     IF l_forall_list(I) <> 'N' THEN
9999       l('            ,decode(H_TX'||I||'(1),null,H_TX'||I||'(1),H_TX'||I||'(1)||'' '')');
10000     END IF;
10001   END LOOP;
10002 
10003   l('          );');
10004   l('        EXCEPTION');
10005   l('          WHEN DUP_VAL_ON_INDEX THEN');
10006   l('            IF p_operation=''C'' THEN');
10007   l('              l_tryupd:=TRUE;');
10008   l('            END IF;');
10009   l('        END;');
10010   l('      END IF;');
10011   l('');
10012   l('      IF l_tryupd THEN');
10013   l('        BEGIN');
10014   l('          l_tryupd:=FALSE;');
10015   l('          UPDATE HZ_STAGED_CONTACT_POINTS SET ');
10016   l('             concat_col = concat_col');
10017   l('            ,status_flag = H_STATUS(1) '); --Bug No: 4299785
10018 
10019   FOR I IN 1..255 LOOP
10020     IF l_forall_list(I) <> 'N' THEN
10021    	  IF (is_first) THEN
10022         is_first := false;
10023 	    l('            ,TX'||I||'=decode(H_TX'||I||'(1),null,H_TX'||I||'(1),H_TX'||I||'(1)||'' '')');
10024 	  ELSE
10025 	    l('            ,TX'||I||'=decode(H_TX'||I||'(1),null,H_TX'||I||'(1),H_TX'||I||'(1)||'' '')');
10026 	  END IF;
10027     END IF;
10028   END LOOP;
10029   l('          WHERE CONTACT_POINT_ID=H_CONTACT_POINT_ID(1);');
10030   l('          IF SQL%ROWCOUNT=0 AND p_operation=''U'' THEN');
10031   l('            l_tryins := TRUE;');
10032   l('          END IF;');
10033   l('        EXCEPTION ');
10034   l('          WHEN NO_DATA_FOUND THEN');
10035   l('            IF p_operation=''U'' THEN');
10036   l('              l_tryins := TRUE;');
10037   l('            END IF;');
10038   l('        END;');
10039   l('      END IF;');
10040   l('    END LOOP;');
10041   l('');
10042   l('    --Fix for bug 5048604, to update concat_col during update of denorm column ');
10043   l('    UPDATE HZ_STAGED_PARTIES set');
10044   l('      D_CPT = ''SYNC''');
10045   l('     ,CONCAT_COL = CONCAT_COL ');
10046   l('    WHERE PARTY_ID = H_PARTY_ID(1);');
10047   l('');
10048   l('      -- REPURI. Bug 4884742. If shadow staging is completely successfully ');
10049   l('      -- insert a record into hz_dqm_sh_sync_interface table for each record ');
10050   l('    IF (HZ_DQM_SYNC.is_shadow_staging_complete) THEN ');
10051   l('      BEGIN ');
10052   l('        HZ_DQM_SYNC.insert_sh_interface_rec(l_party_id,p_contact_point_id,l_party_site_id, l_org_contact_id, ''CONTACT_POINTS'',p_operation); ');
10053   l('      EXCEPTION WHEN OTHERS THEN ');
10054   l('        NULL; ');
10055   l('      END; ');
10056   l('    END IF; ');
10057   l('');
10058   -- Fix for Bug 4862121.
10059   -- Added the Exception handling at this context, for the procedure.
10060   l('  EXCEPTION WHEN OTHERS THEN ');
10061   l('    -- FAILOVER : REPORT RECORD TO HZ_DQM_SYNC_INTERFACE ');
10062   l('    -- FOR ONLINE FLOWS ');
10063   l('    l_sql_err_message := SQLERRM; ');
10064   l('    insert_dqm_sync_error_rec(l_party_id, p_contact_point_id, l_party_site_id, l_org_contact_id, ''CONTACT_POINTS'', p_operation, ''E'', ''Y'', l_sql_err_message); ');
10065   l('  END;');
10066 
10067 END;
10068 
10069 PROCEDURE generate_party_query_upd(
10070   x_rebuild_party_idx OUT NOCOPY BOOLEAN) IS
10071  cur_col_num NUMBER := 1;
10072 
10073  TYPE coltab IS TABLE OF VARCHAR2(2000) INDEX BY BINARY_INTEGER;
10074 
10075  l_org_select coltab;
10076  l_per_select coltab;
10077  l_oth_select coltab;
10078 
10079  l_forall_list coltab;
10080  l_custom_list coltab;
10081  l_mincol_list coltab;
10082  l_min_colnum NUMBER;
10083  idx NUMBER :=1;
10084  FIRST BOOLEAN;
10085 -- VJN Introduced for conditional word replacements
10086  l_cond_attrib_list coltab ;
10087  l_idx number ;
10088 
10089 BEGIN
10090   l('');
10091   l('  PROCEDURE open_party_cursor( ');
10092   l('    p_party_type	IN	VARCHAR2,');
10093   l('    p_worker_number IN	NUMBER,');
10094   l('    p_num_workers	IN	NUMBER,');
10095   l('    x_party_cur	IN OUT	HZ_PARTY_STAGE.StageCurTyp) IS ');
10096   l('');
10097   l('    l_party_type VARCHAR2(255);');
10098   l('  BEGIN');
10099 
10100   FOR ATTRS IN (SELECT a.ATTRIBUTE_ID,
10101                        a.ATTRIBUTE_NAME,
10102                        a.SOURCE_TABLE,
10103                        a.CUSTOM_ATTRIBUTE_PROCEDURE,
10104                        f.PROCEDURE_NAME,
10105                        f.STAGED_ATTRIBUTE_COLUMN,
10106                        to_number(substrb(STAGED_ATTRIBUTE_COLUMN, 3)) COLNUM
10107                 FROM HZ_TRANS_ATTRIBUTES_VL a, HZ_TRANS_FUNCTIONS_VL f
10108                 WHERE ENTITY_NAME = 'PARTY'
10109                 AND nvl(f.ACTIVE_FLAG,'Y') = 'Y'
10110                 AND f.ATTRIBUTE_ID = a.ATTRIBUTE_ID
10111                 AND f.STAGED_FLAG='N'
10112                 ORDER BY COLNUM) LOOP
10113     IF cur_col_num<ATTRS.COLNUM THEN
10114       FOR I in cur_col_num..ATTRS.COLNUM-1 LOOP
10118     END IF;
10115         l_mincol_list(I) := 'N';
10116         l_forall_list(I) := 'N';
10117       END LOOP;
10119     cur_col_num:=ATTRS.COLNUM+1;
10120     IF has_trx_context(ATTRS.PROCEDURE_NAME) THEN
10121       l_forall_list(ATTRS.COLNUM) := ATTRS.PROCEDURE_NAME || '(H_TX'||ATTRS.COLNUM||'(I),NULL, ''' || ATTRS.ATTRIBUTE_NAME || ''',''PARTY'',''STAGE'')';
10122     ELSE
10123       l_forall_list(ATTRS.COLNUM) := ATTRS.PROCEDURE_NAME || '(H_TX'||ATTRS.COLNUM||'(I),NULL, ''' || ATTRS.ATTRIBUTE_NAME || ''',''PARTY'')';
10124     END IF;
10125 
10126     l_mincol_list(ATTRS.COLNUM) := 'N';
10127     IF ATTRS.CUSTOM_ATTRIBUTE_PROCEDURE IS NULL THEN
10128       IF ATTRS.SOURCE_TABLE='HZ_ORGANIZATION_PROFILES' THEN
10129         l_org_select(idx) := 'op.'||ATTRS.ATTRIBUTE_NAME;
10130         l_per_select(idx) := 'NULL';
10131         l_oth_select(idx) := 'NULL';
10132       ELSIF ATTRS.SOURCE_TABLE='HZ_PERSON_PROFILES' THEN
10133         l_per_select(idx) := 'pe.'||ATTRS.ATTRIBUTE_NAME;
10134         l_org_select(idx) := 'NULL';
10135         l_oth_select(idx) := 'NULL';
10136       ELSIF ATTRS.SOURCE_TABLE='HZ_PERSON_PROFILES, HZ_ORGANIZATION_PROFILES' OR
10137             ATTRS.SOURCE_TABLE='HZ_ORGANIZATION_PROFILES, HZ_PERSON_PROFILES' THEN
10138         l_org_select(idx) := 'op.'||ATTRS.ATTRIBUTE_NAME;
10139         l_per_select(idx) := 'pe.'||ATTRS.ATTRIBUTE_NAME;
10140         l_oth_select(idx) := 'NULL';
10141       ELSE
10142         l_org_select(idx) := 'p.'||ATTRS.ATTRIBUTE_NAME;
10143         l_per_select(idx) := 'p.'||ATTRS.ATTRIBUTE_NAME;
10144         l_oth_select(idx) := 'p.'||ATTRS.ATTRIBUTE_NAME;
10145       END IF;
10146     ELSE
10147         SELECT min(to_number(substrb(STAGED_ATTRIBUTE_COLUMN, 3))) INTO l_min_colnum
10148         FROM HZ_TRANS_ATTRIBUTES_VL a, HZ_TRANS_FUNCTIONS_VL f
10149         WHERE ENTITY_NAME = 'PARTY'
10150         AND nvl(f.ACTIVE_FLAG,'Y') = 'Y'
10151         AND f.ATTRIBUTE_ID = a.ATTRIBUTE_ID
10152         AND a.ATTRIBUTE_NAME=ATTRS.ATTRIBUTE_NAME
10153         AND f.STAGED_FLAG='N';
10154 
10155         l_org_select(idx) := 'NULL';
10156         l_oth_select(idx) := 'NULL';
10157         l_per_select(idx) := 'NULL';
10158         IF ATTRS.colnum>l_min_colnum THEN
10159          IF has_trx_context(ATTRS.PROCEDURE_NAME) THEN
10160            l_forall_list(ATTRS.COLNUM) := ATTRS.PROCEDURE_NAME || '(H_TX'||l_min_colnum||'(I),NULL, ''' || ATTRS.ATTRIBUTE_NAME || ''',''PARTY'',''STAGE'')';
10161          ELSE
10162            l_forall_list(ATTRS.COLNUM) := ATTRS.PROCEDURE_NAME || '(H_TX'||l_min_colnum||'(I),NULL, ''' || ATTRS.ATTRIBUTE_NAME || ''',''PARTY'')';
10163          END IF;
10164 
10165           l_mincol_list(ATTRS.COLNUM) := 'N';
10166         ELSE
10167           l_mincol_list(ATTRS.COLNUM) := 'Y';
10168           IF has_context(ATTRS.custom_attribute_procedure) THEN
10169             l_custom_list(ATTRS.COLNUM) := ATTRS.custom_attribute_procedure || '(H_PARTY_ID(I),''PARTY'','''||ATTRS.ATTRIBUTE_NAME|| ''', ''STAGE'')';
10170           ELSE
10171             l_custom_list(ATTRS.COLNUM) := ATTRS.custom_attribute_procedure || '(H_PARTY_ID(I), ''PARTY'','''||ATTRS.ATTRIBUTE_NAME|| ''')';
10172           END IF;
10173         END IF;
10174     END IF;
10175     idx := idx+1;
10176     -- VJN ADDED CODE FOR TRACKING CONDITION ATTRIBUTES AT THIS ENTITY LEVEL
10177     IF HZ_WORD_CONDITIONS_PKG.is_a_cond_attrib( ATTRS.attribute_id)
10178      THEN
10179          l_cond_attrib_list(ATTRS.COLNUM) := ATTRS.attribute_id ;
10180     END IF;
10181 
10182   END LOOP;
10183   IF idx=1 THEN
10184     x_rebuild_party_idx:=FALSE;
10185     l('    RETURN;');
10186     l('  END;');
10187   ELSE
10188     x_rebuild_party_idx:=check_rebuild('PARTY');
10189 
10190     IF cur_col_num<=255 THEN--bug 5977628
10191       FOR I in cur_col_num..255 LOOP
10192         l_mincol_list(I) := 'N';
10193         l_forall_list(I) := 'N';
10194       END LOOP;
10195     END IF;
10196 
10197     l('    IF p_party_type = ''ORGANIZATION'' THEN');
10198     l('      open x_party_cur FOR ' );
10199     l('        SELECT p.PARTY_ID ');
10200     FOR I in 1..l_org_select.COUNT LOOP
10201       l('              ,' || l_org_select(I));
10202     END LOOP;
10203 
10204     l('        FROM HZ_STAGED_PARTIES s, HZ_PARTIES p, HZ_ORGANIZATION_PROFILES op ');
10205     l('        WHERE s.PARTY_ID = p.PARTY_ID ');
10206     l('        AND mod(p.PARTY_ID, p_num_workers) = p_worker_number ');
10207     l('        AND p.party_id = op.party_id ');
10208     l('        AND op.effective_end_date is NULL; ');
10209     l('    ELSIF p_party_type = ''PERSON'' THEN');
10210     l('      open x_party_cur FOR ' );
10211     l('        SELECT p.PARTY_ID ');
10212     FOR I in 1..l_per_select.COUNT LOOP
10213       l('              ,' || l_per_select(I));
10214     END LOOP;
10215     l('        FROM HZ_STAGED_PARTIES s,HZ_PARTIES p, HZ_PERSON_PROFILES pe ');
10216     l('        WHERE s.PARTY_ID = p.PARTY_ID ');
10217     l('        AND mod(p.PARTY_ID, p_num_workers) = p_worker_number ');
10218     l('        AND p.party_id = pe.party_id ');
10219     l('        AND pe.effective_end_date is NULL; ');
10220     l('    ELSE');
10221     l('      open x_party_cur FOR ' );
10222     l('        SELECT p.PARTY_ID ');
10223     FOR I in 1..l_oth_select.COUNT LOOP
10224       l('              ,' || l_oth_select(I));
10225     END LOOP;
10226     l('        FROM HZ_STAGED_PARTIES s, HZ_PARTIES p ');
10227     l('        WHERE s.PARTY_ID = p.PARTY_ID ');
10231     l('        AND p.party_type <> ''PARTY_RELATIONSHIP''; ');
10228     l('        AND mod(p.PARTY_ID, p_num_workers) = p_worker_number ');
10229     l('        AND p.party_type <> ''PERSON'' ');
10230     l('        AND p.party_type <> ''ORGANIZATION'' ');
10232     l('    END IF;');
10233     l('  END;');
10234   END IF;
10235   l('');
10236   l('  PROCEDURE update_stage_parties ( ');
10237   l('    p_party_cur    IN HZ_PARTY_STAGE.StageCurTyp) IS ');
10238   l('  l_limit NUMBER := ' || g_batch_size || ';');
10239   l(' l_last_fetch BOOLEAN := FALSE;');
10240   l('');
10241   l('  BEGIN');
10242   IF idx=1 THEN
10243     l('      RETURN;');
10244     l('  END;');
10245   ELSE
10246     l('    LOOP');
10247     l('      FETCH p_party_cur BULK COLLECT INTO');
10248     l('        H_PARTY_ID');
10249     FOR I IN 1..255 LOOP
10250       IF l_forall_list(I) <> 'N' THEN
10251         l('         ,H_TX'||I);
10252       END IF;
10253     END LOOP;
10254     l('      LIMIT l_limit;');
10255     l('');
10256     l('    IF p_party_cur%NOTFOUND THEN');
10257     l('      l_last_fetch:=TRUE;');
10258     l('    END IF;');
10259 
10260     l('    IF H_PARTY_ID.COUNT=0 AND l_last_fetch THEN');
10261     l('      EXIT;');
10262     l('    END IF;');
10263 
10264     l('    FOR I in H_PARTY_ID.FIRST..H_PARTY_ID.LAST LOOP');
10265   -- VJN INTRODUCED CODE FOR GENERATING THE POPULATION
10266   -- OF THE GLOBAL CONDITION RECORD
10267 
10268   l_idx := l_cond_attrib_list.FIRST ;
10269   IF l_idx IS NOT NULL
10270   THEN
10271     l('----------- SETTING GLOBAL CONDITION RECORD AT THE PARTY LEVEL ---------');
10272   END IF ;
10273 
10274 
10275   WHILE l_cond_attrib_list.EXISTS(l_idx)
10276   LOOP
10277 
10278       l('     HZ_WORD_CONDITIONS_PKG.set_gbl_condition_rec ('||l_cond_attrib_list(l_idx)||','||'H_TX'||l_idx||'(I));');
10279       l_idx := l_idx+1;
10280   END LOOP;
10281     FOR I IN 1..255 LOOP
10282       IF l_forall_list(I) <> 'N' THEN
10283         IF l_mincol_list(I) = 'Y' THEN
10284           l('         H_TX'||I||'(I):='||l_custom_list(I)||';');
10285         END IF;
10286       END IF;
10287     END LOOP;
10288     FOR I IN 1..255 LOOP
10289       IF l_forall_list(I) <> 'N' THEN
10290         IF l_mincol_list(I) <> 'Y' THEN
10291           l('         H_TX'||I||'(I):='||l_forall_list(I)||';');
10292         END IF;
10293       END IF;
10294     END LOOP;
10295     FOR I IN 1..255 LOOP
10296       IF l_forall_list(I) <> 'N' THEN
10297         IF l_mincol_list(I) = 'Y' THEN
10298           l('         H_TX'||I||'(I):='||l_forall_list(I)||';');
10299         END IF;
10300       END IF;
10301     END LOOP;
10302     l('    END LOOP;');
10303 
10304     l('    FORALL I in H_PARTY_ID.FIRST..H_PARTY_ID.LAST');
10305     l('      UPDATE HZ_STAGED_PARTIES SET ');
10306     FIRST:=TRUE;
10307     FOR I IN 1..255 LOOP
10308       IF l_forall_list(I) <> 'N' THEN
10309           IF (FIRST) THEN
10310 	        FIRST := false;
10311                 l('            TX'||I||'=decode(H_TX'||I||'(I),null,H_TX'||I||'(I),H_TX'||I||'(I)||'' '')');
10312           ELSE
10313                 l('            ,TX'||I||'=decode(H_TX'||I||'(I),null,H_TX'||I||'(I),H_TX'||I||'(I)||'' '')');
10314           END IF;
10315       END IF;
10316     END LOOP;
10317     l('      WHERE PARTY_ID=H_PARTY_ID(I);');
10318     l('      IF l_last_fetch THEN');
10319     l('        FND_CONCURRENT.AF_Commit;');
10320     l('        EXIT;');
10321     l('      END IF;');
10322     l('      FND_CONCURRENT.AF_Commit;');
10323     l('    END LOOP;');
10324     l('  END;');
10325   END IF;
10326 END;
10327 
10328 
10329 PROCEDURE generate_contact_query_upd(
10330   x_rebuild_contact_idx OUT NOCOPY BOOLEAN) IS
10331  cur_col_num NUMBER := 1;
10332 
10333  TYPE coltab IS TABLE OF VARCHAR2(2000) INDEX BY BINARY_INTEGER;
10334 
10335  l_select coltab;
10336 
10337  l_forall_list coltab;
10338  l_custom_list coltab;
10339  l_mincol_list coltab;
10340  l_min_colnum NUMBER;
10341  idx NUMBER :=1;
10342  FIRST BOOLEAN;
10343 -- VJN Introduced for conditional word replacements
10344  l_cond_attrib_list coltab ;
10345  l_idx number ;
10346 
10347 BEGIN
10348  log('Generating upd procedures for CONTACTS' );
10349  IF new_transformations_exist('CONTACTS') = TRUE
10350                       OR
10351      ( new_transformations_exist('CONTACTS') = FALSE AND get_missing_denorm_attrib_cols('CONTACTS') IS NULL )
10352   THEN
10353                     log('If block of code -- new transformations exist or there are no missing denorm attrib columns' );
10354                     l('');
10355                     l('  PROCEDURE open_contact_cursor( ');
10356                     l('    p_worker_number IN	NUMBER,');
10357                     l('    p_num_workers	IN	NUMBER,');
10358                     l('    x_contact_cur	IN OUT	HZ_PARTY_STAGE.StageCurTyp) IS ');
10359                     l('');
10360                     l('  BEGIN');
10361 
10362                     FOR ATTRS IN (SELECT a.ATTRIBUTE_ID,
10363                                          a.ATTRIBUTE_NAME,
10364                                          a.SOURCE_TABLE,
10365                                          a.CUSTOM_ATTRIBUTE_PROCEDURE,
10366                                          f.PROCEDURE_NAME,
10367                                          f.STAGED_ATTRIBUTE_COLUMN,
10368                                          to_number(substrb(STAGED_ATTRIBUTE_COLUMN, 3)) COLNUM
10372                                   AND f.ATTRIBUTE_ID = a.ATTRIBUTE_ID
10369                                   FROM HZ_TRANS_ATTRIBUTES_VL a, HZ_TRANS_FUNCTIONS_VL f
10370                                   WHERE ENTITY_NAME = 'CONTACTS'
10371                                   AND nvl(f.ACTIVE_FLAG,'Y') = 'Y'
10373                                   AND f.staged_flag='N'
10374                                   ORDER BY COLNUM) LOOP
10375                       IF cur_col_num<ATTRS.COLNUM THEN
10376                         FOR I in cur_col_num..ATTRS.COLNUM-1 LOOP
10377                           l_mincol_list(I) := 'N';
10378                           l_forall_list(I) := 'N';
10379                         END LOOP;
10380                       END IF;
10381                       cur_col_num:=ATTRS.COLNUM+1;
10382                       IF has_trx_context(ATTRS.PROCEDURE_NAME) THEN
10383                         l_forall_list(ATTRS.COLNUM) := ATTRS.PROCEDURE_NAME || '(H_TX'||ATTRS.COLNUM||'(I),NULL, ''' || ATTRS.ATTRIBUTE_NAME || ''',''CONTACTS'',''STAGE'')';
10384                       ELSE
10385                         l_forall_list(ATTRS.COLNUM) := ATTRS.PROCEDURE_NAME || '(H_TX'||ATTRS.COLNUM||'(I),NULL, ''' || ATTRS.ATTRIBUTE_NAME || ''',''CONTACTS'')';
10386                       END IF;
10387 
10388                       l_mincol_list(ATTRS.COLNUM) := 'N';
10389                       IF ATTRS.CUSTOM_ATTRIBUTE_PROCEDURE IS NULL THEN
10390                         IF ATTRS.SOURCE_TABLE='HZ_PERSON_PROFILES' THEN
10391                           l_select(idx) := 'pp.'||ATTRS.ATTRIBUTE_NAME;
10392                         ELSIF ATTRS.SOURCE_TABLE='HZ_ORG_CONTACTS' THEN
10393                           l_select(idx) := 'oc.'||ATTRS.ATTRIBUTE_NAME;
10394                         ELSIF ATTRS.SOURCE_TABLE='HZ_RELATIONSHIPS' THEN
10395                           l_select(idx) := 'r.'||ATTRS.ATTRIBUTE_NAME;
10396                         END IF;
10397                       ELSE
10398                           SELECT min(to_number(substrb(STAGED_ATTRIBUTE_COLUMN, 3))) INTO l_min_colnum
10399                           FROM HZ_TRANS_ATTRIBUTES_VL a, HZ_TRANS_FUNCTIONS_VL f
10400                           WHERE ENTITY_NAME = 'CONTACTS'
10401                           AND nvl(f.ACTIVE_FLAG,'Y') = 'Y'
10402                           AND f.ATTRIBUTE_ID = a.ATTRIBUTE_ID
10403                           AND a.ATTRIBUTE_NAME=ATTRS.ATTRIBUTE_NAME
10404                           AND f.staged_flag='N';
10405 
10406                           l_select(idx) := 'NULL';
10407                           IF ATTRS.colnum>l_min_colnum THEN
10408                             IF has_trx_context(ATTRS.PROCEDURE_NAME) THEN
10409                               l_forall_list(ATTRS.COLNUM) := ATTRS.PROCEDURE_NAME || '(H_TX'||l_min_colnum||'(I),NULL, ''' || ATTRS.ATTRIBUTE_NAME || ''',''CONTACTS'',''STAGE'')';
10410                             ELSE
10411                               l_forall_list(ATTRS.COLNUM) := ATTRS.PROCEDURE_NAME || '(H_TX'||l_min_colnum||'(I),NULL, ''' || ATTRS.ATTRIBUTE_NAME || ''',''CONTACTS'')';
10412                             END IF;
10413 
10414                             l_mincol_list(ATTRS.COLNUM) := 'N';
10415                           ELSE
10416                             l_mincol_list(ATTRS.COLNUM) := 'Y';
10417                             IF has_context(ATTRS.custom_attribute_procedure) THEN
10418                               l_custom_list(ATTRS.COLNUM) := ATTRS.custom_attribute_procedure || '(H_ORG_CONTACT_ID(I),''CONTACTS'','''||ATTRS.ATTRIBUTE_NAME|| ''', ''STAGE'')';
10419                             ELSE
10420                               l_custom_list(ATTRS.COLNUM) := ATTRS.custom_attribute_procedure || '(H_ORG_CONTACT_ID(I), ''CONTACTS'','''||ATTRS.ATTRIBUTE_NAME|| ''')';
10421                             END IF;
10422                           END IF;
10423                       END IF;
10424                       idx := idx+1;
10425                       -- VJN ADDED CODE FOR TRACKING CONDITION ATTRIBUTES AT THIS ENTITY LEVEL
10426                       IF HZ_WORD_CONDITIONS_PKG.is_a_cond_attrib( ATTRS.attribute_id)
10427                       THEN
10428                             l_cond_attrib_list(ATTRS.COLNUM) := ATTRS.attribute_id ;
10429                       END IF;
10430 
10431                     END LOOP;
10432 
10433                     IF idx=1 THEN
10434                       x_rebuild_contact_idx:=FALSE;
10435                       l('    RETURN;');
10436                       l('  END;');
10437                     ELSE
10438                       x_rebuild_contact_idx:=check_rebuild('CONTACTS');
10439                       IF cur_col_num<=255 THEN--bug 5977628
10440                         FOR I in cur_col_num..255 LOOP
10441                           l_mincol_list(I) := 'N';
10442                           l_forall_list(I) := 'N';
10443                         END LOOP;
10444                       END IF;
10445 
10446                       l('        open x_contact_cur FOR');
10447                       l('            SELECT oc.ORG_CONTACT_ID ');
10448                       FOR I in 1..l_select.COUNT LOOP
10449                         l('                  ,' || l_select(I));
10450                       END LOOP;
10451                       l('           FROM HZ_STAGED_CONTACTS s, HZ_ORG_CONTACTS oc, ');
10455                       l('           AND oc.party_relationship_id =  r.relationship_id ');
10452                       l('           HZ_RELATIONSHIPS r, HZ_PERSON_PROFILES pp');
10453                       l('           WHERE mod(s.PARTY_ID, p_num_workers) = p_worker_number ');
10454                       l('           AND s.ORG_CONTACT_ID=oc.ORG_CONTACT_ID');
10456                       l('           AND r.object_id = s.party_id ');
10457                       l('           AND r.subject_id = pp.party_id ');
10458                       l('           AND r.SUBJECT_TABLE_NAME = ''HZ_PARTIES''');
10459                       l('           AND r.OBJECT_TABLE_NAME = ''HZ_PARTIES''');
10460                       l('           AND DIRECTIONAL_FLAG= ''F'' ');
10461                       l('           AND pp.effective_end_date is NULL ');
10462                       l('           AND (oc.status is null OR oc.status = ''A'' or oc.status = ''I'')');
10463                       l('           AND (r.status is null OR r.status = ''A'' or r.status = ''I'');');
10464                       l('  END;');
10465                     END IF;
10466                     l('');
10467                     l('  PROCEDURE update_stage_contacts ( ');
10468                     l('    p_contact_cur    IN HZ_PARTY_STAGE.StageCurTyp) IS ');
10469                     l('  l_limit NUMBER := ' || g_batch_size || ';');
10470                     l('  H_DENORM_PARTY_ID NumberList ;');
10471                     l('  H_DENORM_VALUE CharList ;');
10472                     l('  H_ROW_OFFSET Number ;');
10473                     l(' l_last_fetch BOOLEAN := FALSE;');
10474                     l('');
10475                     l('  BEGIN');
10476                     IF idx=1 THEN
10477                       l('      RETURN;');
10478                       l('  END;');
10479                     ELSE
10480                       l('    LOOP');
10481                       l('      H_ROW_OFFSET := 1 ;');
10482                       l('      FETCH p_contact_cur BULK COLLECT INTO');
10483                       l('        H_ORG_CONTACT_ID');
10484                       FOR I IN 1..255 LOOP
10485                         IF l_forall_list(I) <> 'N' THEN
10486                           l('         ,H_TX'||I);
10487                         END IF;
10488                       END LOOP;
10489                       l('      LIMIT l_limit;');
10490                       l('');
10491                       l('    IF p_contact_cur%NOTFOUND THEN');
10492                       l('      l_last_fetch:=TRUE;');
10493                       l('    END IF;');
10494 
10495                       l('    IF H_ORG_CONTACT_ID.COUNT=0 AND l_last_fetch THEN');
10496                       l('      EXIT;');
10497                       l('    END IF;');
10498 
10499                       l('    FOR I in H_ORG_CONTACT_ID.FIRST..H_ORG_CONTACT_ID.LAST LOOP');
10500                        -- VJN INTRODUCED CODE FOR GENERATING THE POPULATION
10501                       -- OF THE GLOBAL CONDITION RECORD
10502 
10503                       l_idx := l_cond_attrib_list.FIRST ;
10504                       IF l_idx IS NOT NULL
10505                       THEN
10506                             l('----------- SETTING GLOBAL CONDITION RECORD AT THE CONTACT LEVEL ---------');
10507                       END IF ;
10508 
10509 
10510                       WHILE l_cond_attrib_list.EXISTS(l_idx)
10511                       LOOP
10512 
10513                         l('     HZ_WORD_CONDITIONS_PKG.set_gbl_condition_rec ('||l_cond_attrib_list(l_idx)||','||'H_TX'||l_idx||'(I));');
10514                         l_idx := l_idx+1;
10515                        END LOOP;
10516                       FOR I IN 1..255 LOOP
10517                         IF l_forall_list(I) <> 'N' THEN
10518                           IF l_mincol_list(I) = 'Y' THEN
10519                             l('         H_TX'||I||'(I):='||l_custom_list(I)||';');
10520                           END IF;
10521                         END IF;
10522                       END LOOP;
10523                       FOR I IN 1..255 LOOP
10524                         IF l_forall_list(I) <> 'N' THEN
10525                           IF l_mincol_list(I) <> 'Y' THEN
10526                             l('         H_TX'||I||'(I):='||l_forall_list(I)||';');
10527                           END IF;
10528                         END IF;
10529                       END LOOP;
10530                       FOR I IN 1..255 LOOP
10531                         IF l_forall_list(I) <> 'N' THEN
10532                           IF l_mincol_list(I) = 'Y' THEN
10533                             l('         H_TX'||I||'(I):='||l_forall_list(I)||';');
10534                           END IF;
10535                         END IF;
10536                       END LOOP;
10537                       l('    END LOOP;');
10538 
10539                       l('    FORALL I in H_ORG_CONTACT_ID.FIRST..H_ORG_CONTACT_ID.LAST');
10540                       l('      UPDATE HZ_STAGED_CONTACTS SET ');
10541                       FIRST:=TRUE;
10542                       FOR I IN 1..255 LOOP
10543                         IF l_forall_list(I) <> 'N' THEN
10544                   	IF (FIRST) THEN
10545                                FIRST := false;
10546                                l('            TX'||I||'=decode(H_TX'||I||'(I),null,H_TX'||I||'(I),H_TX'||I||'(I)||'' '')');
10547                   	ELSE
10548                                l('            ,TX'||I||'=decode(H_TX'||I||'(I),null,H_TX'||I||'(I),H_TX'||I||'(I)||'' '')');
10549                   	END IF;
10550 
10551                         END IF;
10552                       END LOOP;
10553 
10557                       THEN
10554                       l('        WHERE ORG_CONTACT_ID = H_ORG_CONTACT_ID(I)');
10555                       -- ADD CODE FOR UPDATING HZ_STAGED_PARTIES IF THERE ARE ANY NEW CONTACT DENORM ATTRIBUTES
10556                       IF get_missing_denorm_attrib_cols('CONTACTS') IS NOT NULL
10558                            l('RETURNING PARTY_ID, ');
10559                            l(get_missing_denorm_attrib_cols('CONTACTS'));
10560                            -- THIS BULK COLLECT WILL CHOSE THE PARTY ID COLUMNS OF THE ROWS THAT ARE UPDATED
10561                            -- AND UPDATE THESE PARTY IDS IN HZ_STAGED_PARTIES, BY APPENDING TO THE D_CT COLUMNS
10562                            -- VALUES FROM THE NEW DENORM ATTRIBUTE COLUMNS
10563                            l('BULK COLLECT INTO  H_DENORM_PARTY_ID, H_DENORM_VALUE ;');
10564                            l('LOOP');
10565         		           l('BEGIN');
10566         			       l('   FORALL I IN H_ROW_OFFSET..H_DENORM_PARTY_ID.COUNT');
10567         			       l('           UPDATE HZ_STAGED_PARTIES');
10568         				   l('           SET D_CT = D_CT||'' ''||H_DENORM_VALUE(I)');
10569         			       l('           WHERE PARTY_ID = H_DENORM_PARTY_ID(I) AND D_CT <> ''SYNC'' ;');
10570                            l('EXIT ;');
10571         			       l('EXCEPTION');
10572         			       l('WHEN OTHERS THEN');
10573         			       l('           H_ROW_OFFSET := H_ROW_OFFSET+SQL%ROWCOUNT;');
10574                            l('           UPDATE HZ_STAGED_PARTIES');
10575         				   l('           SET D_CT = ''SYNC'' ');
10576         				   l('           WHERE PARTY_ID = H_DENORM_PARTY_ID(H_ROW_OFFSET) ;');
10577                            l('           H_ROW_OFFSET := H_ROW_OFFSET+1 ;');
10578         		           l('END ;');
10579                            l('END LOOP ;');
10580                       ELSE
10581                            l(';');
10582                       END IF ;
10583 
10584                       l('      IF l_last_fetch THEN');
10585                       l('        FND_CONCURRENT.AF_Commit;');
10586                       l('        EXIT;');
10587                       l('      END IF;');
10588                       l('      FND_CONCURRENT.AF_Commit;');
10589                       l('    END LOOP;');
10590                       l('  END;');
10591                 END IF ;
10592 -- NO NEW TRANSFORMATIONS BUT THERE ARE SOME NEW DENORM ATTRIBUTES
10593 ELSE
10594                     log('Else block of code -- No new transformations exist' );
10595                     l('');
10596                     l('  PROCEDURE open_contact_cursor( ');
10597                     l('    p_worker_number IN	NUMBER,');
10598                     l('    p_num_workers	IN	NUMBER,');
10599                     l('    x_contact_cur	IN OUT	HZ_PARTY_STAGE.StageCurTyp) IS ');
10600                     l('');
10601                     l('  BEGIN');
10602                     l('    open x_contact_cur FOR');
10603                     l('      SELECT ct.PARTY_ID,');
10604                     l(get_missing_denorm_attrib_cols('CONTACTS'));
10605                     l('      FROM HZ_STAGED_CONTACTS ct');
10606                     l('      WHERE mod(ct.PARTY_ID, p_num_workers) = p_worker_number ; ');
10607                     l('  END;');
10608 
10609                     l('');
10610                     l('  PROCEDURE update_stage_contacts ( ');
10611                     l('    p_contact_cur    IN HZ_PARTY_STAGE.StageCurTyp) IS ');
10612                     l('  l_limit NUMBER := ' || g_batch_size || ';');
10613                     l('  H_DENORM_PARTY_ID NumberList ;');
10614                     l('  H_DENORM_VALUE CharList ;');
10615                     l('  H_ROW_OFFSET Number ;');
10616                     l(' l_last_fetch BOOLEAN := FALSE;');
10617                     l('');
10618                     l('  BEGIN');
10619                     l('    LOOP');
10620                     l('      H_ROW_OFFSET := 1 ; ');
10621                     l('      FETCH p_contact_cur BULK COLLECT INTO');
10622                     l('        H_DENORM_PARTY_ID, H_DENORM_VALUE');
10623                     l('      LIMIT l_limit;');
10624                     l('');
10625                     l('    IF p_contact_cur%NOTFOUND THEN');
10626                     l('      l_last_fetch:=TRUE;');
10627                     l('    END IF;');
10628                     l('    IF H_DENORM_PARTY_ID.COUNT=0 AND l_last_fetch THEN');
10629                     l('      EXIT;');
10630                     l('    END IF;');
10631 
10632                     l('LOOP');
10633   		            l('BEGIN');
10634   			        l('   FORALL I IN H_ROW_OFFSET..H_DENORM_PARTY_ID.COUNT');
10635   			        l('           UPDATE HZ_STAGED_PARTIES');
10636   				    l('           SET D_CT = D_CT||'' ''||H_DENORM_VALUE(I)');
10637   				    l('           WHERE PARTY_ID = H_DENORM_PARTY_ID(I) AND D_CT <> ''SYNC'' ;');
10638                     l('EXIT ;');
10639   			        l('EXCEPTION');
10640   			        l('WHEN OTHERS THEN');
10641   			        l('           H_ROW_OFFSET := H_ROW_OFFSET+SQL%ROWCOUNT;');
10642                     l('           UPDATE HZ_STAGED_PARTIES');
10643   				    l('           SET D_CT = ''SYNC'' ');
10644   				    l('           WHERE PARTY_ID = H_DENORM_PARTY_ID(H_ROW_OFFSET) ;');
10645                     l('           H_ROW_OFFSET := H_ROW_OFFSET+1 ;');
10646   		            l('END ;');
10647                     l('END LOOP ;');
10648 
10649 
10650 
10651 
10652 
10653                     l('        IF l_last_fetch THEN');
10654                     l('          FND_CONCURRENT.AF_Commit;');
10655                     l('          EXIT;');
10659                     l('  END ; ');
10656                     l('        END IF;');
10657                     l('        FND_CONCURRENT.AF_Commit;');
10658                     l('    END LOOP ; ');
10660 END IF ;
10661 
10662 END;
10663 
10664 
10665 PROCEDURE generate_party_site_query_upd(
10666   x_rebuild_psite_idx OUT NOCOPY BOOLEAN) IS
10667  cur_col_num NUMBER := 1;
10668 
10669  TYPE coltab IS TABLE OF VARCHAR2(2000) INDEX BY BINARY_INTEGER;
10670 
10671  l_select coltab;
10672 
10673  l_forall_list coltab;
10674  l_custom_list coltab;
10675  l_mincol_list coltab;
10676  l_min_colnum NUMBER;
10677  idx NUMBER :=1;
10678  FIRST BOOLEAN;
10679 -- VJN Introduced for conditional word replacements
10680  l_cond_attrib_list coltab ;
10681  l_idx number ;
10682 
10683 BEGIN
10684   log('Generating upd procedures for PARTY SITES' );
10685   IF new_transformations_exist('PARTY_SITES') = TRUE
10686                       OR
10687      ( new_transformations_exist('PARTY_SITES') = FALSE AND get_missing_denorm_attrib_cols('PARTY_SITES') IS NULL )
10688   THEN
10689 
10690                     log('If block of code -- new transformations exist or there are no missing denorm attrib columns' );
10691                     l('');
10692                     l('  PROCEDURE open_party_site_cursor( ');
10693                     l('    p_worker_number IN	NUMBER,');
10694                     l('    p_num_workers	IN	NUMBER,');
10695                     l('    x_party_site_cur	IN OUT	HZ_PARTY_STAGE.StageCurTyp) IS ');
10696                     l('');
10697                     l('  BEGIN');
10698 
10699                     FOR ATTRS IN (SELECT a.ATTRIBUTE_ID,
10700                                          a.ATTRIBUTE_NAME,
10701                                          a.SOURCE_TABLE,
10702                                          a.CUSTOM_ATTRIBUTE_PROCEDURE,
10703                                          f.PROCEDURE_NAME,
10704                                          f.STAGED_ATTRIBUTE_COLUMN,
10705                                          to_number(substrb(STAGED_ATTRIBUTE_COLUMN, 3)) COLNUM
10706                                   FROM HZ_TRANS_ATTRIBUTES_VL a, HZ_TRANS_FUNCTIONS_VL f
10707                                   WHERE ENTITY_NAME = 'PARTY_SITES'
10708                                   AND nvl(f.ACTIVE_FLAG,'Y') = 'Y'
10709                                   AND f.ATTRIBUTE_ID = a.ATTRIBUTE_ID
10710                                   AND f.staged_flag='N'
10711                                   ORDER BY COLNUM) LOOP
10712                       IF cur_col_num<ATTRS.COLNUM THEN
10713                         FOR I in cur_col_num..ATTRS.COLNUM-1 LOOP
10714                           l_mincol_list(I) := 'N';
10715                           l_forall_list(I) := 'N';
10716                         END LOOP;
10717                       END IF;
10718                       cur_col_num:=ATTRS.COLNUM+1;
10719                       IF has_trx_context(ATTRS.PROCEDURE_NAME) THEN
10720                         l_forall_list(ATTRS.COLNUM) := ATTRS.PROCEDURE_NAME || '(H_TX'||ATTRS.COLNUM||'(I),NULL, ''' || ATTRS.ATTRIBUTE_NAME || ''',''PARTY_SITES'',''STAGE'')';
10721                       ELSE
10722                         l_forall_list(ATTRS.COLNUM) := ATTRS.PROCEDURE_NAME || '(H_TX'||ATTRS.COLNUM||'(I),NULL, ''' || ATTRS.ATTRIBUTE_NAME || ''',''PARTY_SITES'')';
10723                       END IF;
10724 
10725                       l_mincol_list(ATTRS.COLNUM) := 'N';
10726                       IF ATTRS.CUSTOM_ATTRIBUTE_PROCEDURE IS NULL THEN
10727                         IF ATTRS.SOURCE_TABLE='HZ_LOCATIONS' THEN
10728                           l_select(idx) := 'l.'||ATTRS.ATTRIBUTE_NAME;
10729                         ELSIF ATTRS.SOURCE_TABLE='HZ_PARTY_SITES' THEN
10730                           l_select(idx) := 'ps.'||ATTRS.ATTRIBUTE_NAME;
10731                         END IF;
10732                       ELSE
10733                           SELECT min(to_number(substrb(STAGED_ATTRIBUTE_COLUMN, 3))) INTO l_min_colnum
10734                           FROM HZ_TRANS_ATTRIBUTES_VL a, HZ_TRANS_FUNCTIONS_VL f
10735                           WHERE ENTITY_NAME = 'PARTY_SITES'
10736                           AND nvl(f.ACTIVE_FLAG,'Y') = 'Y'
10737                           AND f.ATTRIBUTE_ID = a.ATTRIBUTE_ID
10738                           AND a.ATTRIBUTE_NAME=ATTRS.ATTRIBUTE_NAME
10739                           AND f.staged_flag='N';
10740 
10741                           l_select(idx) := 'NULL';
10742                           IF ATTRS.colnum>l_min_colnum THEN
10743                             IF has_trx_context(ATTRS.PROCEDURE_NAME) THEN
10744                               l_forall_list(ATTRS.COLNUM) := ATTRS.PROCEDURE_NAME || '(H_TX'||l_min_colnum||'(I),NULL, ''' || ATTRS.ATTRIBUTE_NAME || ''',''PARTY_SITES'',''STAGE'')';
10745                             ELSE
10746                               l_forall_list(ATTRS.COLNUM) := ATTRS.PROCEDURE_NAME || '(H_TX'||l_min_colnum||'(I),NULL, ''' || ATTRS.ATTRIBUTE_NAME || ''',''PARTY_SITES'')';
10747                             END IF;
10748 
10749                             l_mincol_list(ATTRS.COLNUM) := 'N';
10750                           ELSE
10751                             l_mincol_list(ATTRS.COLNUM) := 'Y';
10752                             IF has_context(ATTRS.custom_attribute_procedure) THEN
10753                               l_custom_list(ATTRS.COLNUM) := ATTRS.custom_attribute_procedure || '(H_PARTY_SITE_ID(I),''PARTY_SITES'','''||ATTRS.ATTRIBUTE_NAME|| ''', ''STAGE'')';
10754                             ELSE
10755                               l_custom_list(ATTRS.COLNUM) := ATTRS.custom_attribute_procedure || '(H_PARTY_SITE_ID(I), ''PARTY_SITES'','''||ATTRS.ATTRIBUTE_NAME|| ''')';
10756                             END IF;
10757                           END IF;
10761                       IF HZ_WORD_CONDITIONS_PKG.is_a_cond_attrib( ATTRS.attribute_id)
10758                       END IF;
10759                       idx := idx+1;
10760                       -- VJN ADDED CODE FOR TRACKING CONDITION ATTRIBUTES AT THIS ENTITY LEVEL
10762                       THEN
10763                             l_cond_attrib_list(ATTRS.COLNUM) := ATTRS.attribute_id ;
10764                       END IF;
10765 
10766                     END LOOP;
10767 
10768                     IF idx=1 THEN
10769                       x_rebuild_psite_idx:=FALSE;
10770                       l('    RETURN;');
10771                       l('  END;');
10772                     ELSE
10773                       x_rebuild_psite_idx:=check_rebuild('PARTY_SITES');
10774                       IF cur_col_num<=255 THEN--bug 5977628
10775                         FOR I in cur_col_num..255 LOOP
10776                           l_mincol_list(I) := 'N';
10777                           l_forall_list(I) := 'N';
10778                         END LOOP;
10779                       END IF;
10780 
10781                       l('    open x_party_site_cur FOR');
10782                       l('      SELECT ps.PARTY_SITE_ID ');
10783                       FOR I in 1..l_select.COUNT LOOP
10784                         l('            ,' || l_select(I));
10785                       END LOOP;
10786                       l('      FROM HZ_PARTY_SITES ps, HZ_STAGED_PARTY_SITES s, HZ_LOCATIONS l ');
10787                       l('      WHERE mod(s.PARTY_ID, p_num_workers) = p_worker_number ');
10788                       l('      AND ps.party_site_id = s.party_site_id ');
10789                       l('      AND ps.party_id = s.party_id ');
10790                       l('      AND ps.location_id = l.location_id; ');
10791 
10792                       l('  END;');
10793                     END IF;
10794 
10795                     l('');
10796                     l('  PROCEDURE update_stage_party_sites ( ');
10797                     l('    p_party_site_cur    IN HZ_PARTY_STAGE.StageCurTyp) IS ');
10798                     l('  l_limit NUMBER := ' || g_batch_size || ';');
10799                     l('  H_DENORM_PARTY_ID NumberList ;');
10800                     l('  H_DENORM_VALUE CharList ;');
10801                     l('  H_ROW_OFFSET Number ;');
10802                     l(' l_last_fetch BOOLEAN := FALSE;');
10803                     l('');
10804                     l('  BEGIN');
10805                     IF idx=1 THEN
10806                       l('      RETURN;');
10807                       l('  END;');
10808                     ELSE
10809                       l('    LOOP');
10810                       l('    H_ROW_OFFSET := 1 ;');
10811                       l('      FETCH p_party_site_cur BULK COLLECT INTO');
10812                       l('        H_PARTY_SITE_ID');
10813                       FOR I IN 1..255 LOOP
10814                         IF l_forall_list(I) <> 'N' THEN
10815                           l('         ,H_TX'||I);
10816                         END IF;
10817                       END LOOP;
10818                       l('      LIMIT l_limit;');
10819                       l('');
10820                       l('    IF p_party_site_cur%NOTFOUND THEN');
10821                       l('      l_last_fetch:=TRUE;');
10822                       l('    END IF;');
10823 
10824                       l('    IF H_PARTY_SITE_ID.COUNT=0 AND l_last_fetch THEN');
10825                       l('      EXIT;');
10826                       l('    END IF;');
10827 
10828                       l('    FOR I in H_PARTY_SITE_ID.FIRST..H_PARTY_SITE_ID.LAST LOOP');
10829                       -- VJN INTRODUCED CODE FOR GENERATING THE POPULATION
10830                       -- OF THE GLOBAL CONDITION RECORD
10831 
10832                       l_idx := l_cond_attrib_list.FIRST ;
10833                       IF l_idx IS NOT NULL
10834                       THEN
10835                             l('----------- SETTING GLOBAL CONDITION RECORD AT THE PARTY SITE LEVEL ---------');
10836                       END IF ;
10837 
10838 
10839                       WHILE l_cond_attrib_list.EXISTS(l_idx)
10840                       LOOP
10841 
10842                         l('     HZ_WORD_CONDITIONS_PKG.set_gbl_condition_rec ('||l_cond_attrib_list(l_idx)||','||'H_TX'||l_idx||'(I));');
10843                         l_idx := l_idx+1;
10844                        END LOOP;
10845                       FOR I IN 1..255 LOOP
10846                         IF l_forall_list(I) <> 'N' THEN
10847                           IF l_mincol_list(I) = 'Y' THEN
10848                             l('         H_TX'||I||'(I):='||l_custom_list(I)||';');
10849                           END IF;
10850                         END IF;
10851                       END LOOP;
10852                       FOR I IN 1..255 LOOP
10853                         IF l_forall_list(I) <> 'N' THEN
10854                           IF l_mincol_list(I) <> 'Y' THEN
10855                             l('         H_TX'||I||'(I):='||l_forall_list(I)||';');
10856                           END IF;
10857                         END IF;
10858                       END LOOP;
10859                       FOR I IN 1..255 LOOP
10860                         IF l_forall_list(I) <> 'N' THEN
10861                           IF l_mincol_list(I) = 'Y' THEN
10862                             l('         H_TX'||I||'(I):='||l_forall_list(I)||';');
10863                           END IF;
10864                         END IF;
10865                       END LOOP;
10866                       l('    END LOOP;');
10867                       l('    FORALL I in H_PARTY_SITE_ID.FIRST..H_PARTY_SITE_ID.LAST');
10868                       l('      UPDATE HZ_STAGED_PARTY_SITES SET');
10869                       FIRST := TRUE;
10870                       FOR I IN 1..255 LOOP
10871                         IF l_forall_list(I) <> 'N' THEN
10872                           IF (FIRST) THEN
10873                   	      FIRST := false;
10874                                 l('            TX'||I||'=decode(H_TX'||I||'(I),null,H_TX'||I||'(I),H_TX'||I||'(I)||'' '')');
10875                           ELSE
10876                                 l('            ,TX'||I||'=decode(H_TX'||I||'(I),null,H_TX'||I||'(I),H_TX'||I||'(I)||'' '')');
10877                           END IF;
10878                         END IF;
10879                       END LOOP;
10880                       l('        WHERE PARTY_SITE_ID=H_PARTY_SITE_ID(I)');
10881 
10882                       -- ADD CODE FOR UPDATING HZ_STAGED_PARTIES IF THERE ARE ANY NEW PARTY SITE DENORM ATTRIBUTES
10883                       IF get_missing_denorm_attrib_cols('PARTY_SITES') IS NOT NULL
10884                       THEN
10885                            l('RETURNING PARTY_ID, ');
10886                            l(get_missing_denorm_attrib_cols('PARTY_SITES'));
10887                            -- THIS BULK COLLECT WILL CHOSE THE PARTY ID COLUMNS OF THE ROWS THAT ARE UPDATED
10888                            -- AND UPDATE THESE PARTY IDS IN HZ_STAGED_PARTIES, BY APPENDING TO THE D_PS COLUMNS
10889                            -- VALUES FROM THE NEW DENORM ATTRIBUTE COLUMNS
10890                            l('BULK COLLECT INTO  H_DENORM_PARTY_ID, H_DENORM_VALUE ;');
10891                            l('LOOP');
10892 		                   l('BEGIN');
10893 			               l('   FORALL I IN H_ROW_OFFSET..H_DENORM_PARTY_ID.COUNT');
10894 			               l('           UPDATE HZ_STAGED_PARTIES');
10895 				           l('           SET D_PS = D_PS||'' ''||H_DENORM_VALUE(I)');
10896 				           l('           WHERE PARTY_ID = H_DENORM_PARTY_ID(I) AND D_PS <> ''SYNC'' ;');
10897                            l('EXIT ;');
10898 			               l('EXCEPTION');
10899 			               l('WHEN OTHERS THEN');
10900 			               l('           H_ROW_OFFSET := H_ROW_OFFSET+SQL%ROWCOUNT;');
10901                            l('           UPDATE HZ_STAGED_PARTIES');
10902 				           l('           SET D_PS = ''SYNC'' ');
10903 				           l('           WHERE PARTY_ID = H_DENORM_PARTY_ID(H_ROW_OFFSET) ;');
10904                            l('           H_ROW_OFFSET := H_ROW_OFFSET+1;');
10905 		                   l('END ; ');
10906                            l('END LOOP ;');
10907                       ELSE
10908                            l(';');
10909                       END IF ;
10910                       l('      IF l_last_fetch THEN');
10911                       l('        FND_CONCURRENT.AF_Commit;');
10912                       l('        EXIT;');
10913                       l('      END IF;');
10914                       l('      FND_CONCURRENT.AF_Commit;');
10915                       l('    END LOOP;');
10916                       l('  END;');
10917                 END IF ;
10918      -- NO NEW TRANSFORMATIONS BUT THERE ARE SOME NEW DENORM ATTRIBUTES
10919      ELSE
10920                     log('Else block of code -- No new transformations exist' );
10921                     l('');
10922                     l('  PROCEDURE open_party_site_cursor( ');
10923                     l('    p_worker_number IN	NUMBER,');
10924                     l('    p_num_workers	IN	NUMBER,');
10925                     l('    x_party_site_cur	IN OUT	HZ_PARTY_STAGE.StageCurTyp) IS ');
10926                     l('');
10927                     l('  BEGIN');
10928                     l('    open x_party_site_cur FOR');
10929                     l('      SELECT ps.PARTY_ID,');
10930                     l(get_missing_denorm_attrib_cols('PARTY_SITES'));
10931                     l('      FROM HZ_STAGED_PARTY_SITES ps');
10932                     l('      WHERE mod(ps.PARTY_ID, p_num_workers) = p_worker_number ; ');
10933                     l('  END;');
10934 
10935                     l('  PROCEDURE update_stage_party_sites ( ');
10936                     l('    p_party_site_cur    IN HZ_PARTY_STAGE.StageCurTyp) IS ');
10937                     l('  l_limit NUMBER := ' || g_batch_size || ';');
10938                     l('  H_DENORM_PARTY_ID NumberList ;');
10939                     l('  H_DENORM_VALUE CharList ;');
10940                     l('  H_ROW_OFFSET Number ;');
10941                     l(' l_last_fetch BOOLEAN := FALSE;');
10942                     l('');
10943                     l('  BEGIN');
10944                     l('    LOOP');
10945                     l('      H_ROW_OFFSET := 1 ;');
10946                     l('      FETCH p_party_site_cur BULK COLLECT INTO');
10947                     l('        H_DENORM_PARTY_ID, H_DENORM_VALUE');
10948                     l('      LIMIT l_limit;');
10949                     l('');
10950                     l('    IF p_party_site_cur%NOTFOUND THEN');
10951                     l('      l_last_fetch:=TRUE;');
10952                     l('    END IF;');
10953                     l('    IF H_DENORM_PARTY_ID.COUNT=0 AND l_last_fetch THEN');
10954                     l('      EXIT;');
10955                     l('    END IF;');
10956 
10957                     l('LOOP');
10958   		            l('BEGIN');
10959   			        l('   FORALL I IN H_ROW_OFFSET..H_DENORM_PARTY_ID.COUNT');
10960   			        l('           UPDATE HZ_STAGED_PARTIES');
10961   				    l('           SET D_PS = D_PS||'' ''||H_DENORM_VALUE(I)');
10962   				    l('           WHERE PARTY_ID = H_DENORM_PARTY_ID(I) AND D_PS <> ''SYNC'' ;');
10963                     l('EXIT ;');
10964   			        l('EXCEPTION');
10965   			        l('WHEN OTHERS THEN');
10966   			        l('           H_ROW_OFFSET := H_ROW_OFFSET+SQL%ROWCOUNT;');
10967                     l('           UPDATE HZ_STAGED_PARTIES');
10968   				    l('           SET D_PS = ''SYNC'' ');
10969   				    l('           WHERE PARTY_ID = H_DENORM_PARTY_ID(H_ROW_OFFSET) ;');
10970                     l('           H_ROW_OFFSET := H_ROW_OFFSET+1 ;');
10971   		            l('END ;');
10972                     l('END LOOP ;');
10973 
10974                     l('        IF l_last_fetch THEN');
10975                     l('          FND_CONCURRENT.AF_Commit;');
10976                     l('          EXIT;');
10977                     l('        END IF;');
10978                     l('        FND_CONCURRENT.AF_Commit;');
10979                     l('    END LOOP ;');
10980                     l('  END ; ');
10981   END IF ;
10982 END;
10983 
10984 
10985 PROCEDURE generate_contact_pt_query_upd(
10986   x_rebuild_cpt_idx OUT NOCOPY BOOLEAN) IS
10987  cur_col_num NUMBER := 1;
10988 
10989  TYPE coltab IS TABLE OF VARCHAR2(2000) INDEX BY BINARY_INTEGER;
10990 
10991  l_select coltab;
10992 
10993  l_forall_list coltab;
10994  l_custom_list coltab;
10995  l_mincol_list coltab;
10996  l_min_colnum NUMBER;
10997  idx NUMBER :=1;
10998  FIRST BOOLEAN;
10999 -- VJN Introduced for conditional word replacements
11000  l_cond_attrib_list coltab ;
11001  l_idx number ;
11002 
11003 BEGIN
11004 log('Generating upd procedures for CONTACT POINTS' );
11005 IF new_transformations_exist('CONTACT_POINTS') = TRUE
11006                       OR
11007      ( new_transformations_exist('CONTACT_POINTS') = FALSE AND get_missing_denorm_attrib_cols('CONTACT_POINTS') IS NULL )
11008 THEN
11009                   log('If block of code -- new transformations exist or there are no missing denorm attrib columns' );
11010                   l('');
11011                   l('  PROCEDURE open_contact_pt_cursor( ');
11012                   l('    p_worker_number IN	NUMBER,');
11013                   l('    p_num_workers	IN	NUMBER,');
11014                   l('    x_contact_pt_cur	IN OUT	HZ_PARTY_STAGE.StageCurTyp) IS ');
11015                   l('');
11016                   l('  BEGIN');
11017 
11018                   FOR ATTRS IN (SELECT a.ATTRIBUTE_ID,
11019                                        a.ATTRIBUTE_NAME,
11020                                        a.SOURCE_TABLE,
11021                                        a.CUSTOM_ATTRIBUTE_PROCEDURE,
11022                                        f.PROCEDURE_NAME,
11023                                        f.STAGED_ATTRIBUTE_COLUMN,
11024                                        to_number(substrb(STAGED_ATTRIBUTE_COLUMN, 3)) COLNUM
11025                                 FROM HZ_TRANS_ATTRIBUTES_VL a, HZ_TRANS_FUNCTIONS_VL f
11026                                 WHERE ENTITY_NAME = 'CONTACT_POINTS'
11027                                 AND nvl(f.ACTIVE_FLAG,'Y') = 'Y'
11031                     IF cur_col_num<ATTRS.COLNUM THEN
11028                                 AND f.ATTRIBUTE_ID = a.ATTRIBUTE_ID
11029                                 AND f.STAGED_FLAG='N'
11030                                 ORDER BY COLNUM) LOOP
11032                       FOR I in cur_col_num..ATTRS.COLNUM-1 LOOP
11033                         l_mincol_list(I) := 'N';
11034                         l_forall_list(I) := 'N';
11035                       END LOOP;
11036                     END IF;
11037                     cur_col_num:=ATTRS.COLNUM+1;
11038                     IF has_trx_context(ATTRS.PROCEDURE_NAME) THEN
11039                       l_forall_list(ATTRS.COLNUM) := ATTRS.PROCEDURE_NAME || '(H_TX'||ATTRS.COLNUM||'(I),NULL, ''' || ATTRS.ATTRIBUTE_NAME || ''',''CONTACT_POINTS'',''STAGE'')';
11040                     ELSE
11041                       l_forall_list(ATTRS.COLNUM) := ATTRS.PROCEDURE_NAME || '(H_TX'||ATTRS.COLNUM||'(I),NULL, ''' || ATTRS.ATTRIBUTE_NAME || ''',''CONTACT_POINTS'')';
11042                     END IF;
11043 
11044                     l_mincol_list(ATTRS.COLNUM) := 'N';
11045                     IF ATTRS.CUSTOM_ATTRIBUTE_PROCEDURE IS NULL THEN
11046                       l_select(idx) := 'cp.'||ATTRS.ATTRIBUTE_NAME;
11047                     ELSE
11048                         SELECT min(to_number(substrb(STAGED_ATTRIBUTE_COLUMN, 3))) INTO l_min_colnum
11049                         FROM HZ_TRANS_ATTRIBUTES_VL a, HZ_TRANS_FUNCTIONS_VL f
11050                         WHERE ENTITY_NAME = 'CONTACT_POINTS'
11051                         AND nvl(f.ACTIVE_FLAG,'Y') = 'Y'
11052                         AND f.ATTRIBUTE_ID = a.ATTRIBUTE_ID
11053                         AND a.ATTRIBUTE_NAME=ATTRS.ATTRIBUTE_NAME
11054                         AND f.STAGED_FLAG='N';
11055 
11056                         l_select(idx) := 'NULL';
11057                         IF ATTRS.colnum>l_min_colnum THEN
11058                           IF has_trx_context(ATTRS.PROCEDURE_NAME) THEN
11059                             l_forall_list(ATTRS.COLNUM) := ATTRS.PROCEDURE_NAME || '(H_TX'||l_min_colnum||'(I),NULL, ''' || ATTRS.ATTRIBUTE_NAME || ''',''CONTACT_POINTS'',''STAGE'')';
11060                           ELSE
11061                             l_forall_list(ATTRS.COLNUM) := ATTRS.PROCEDURE_NAME || '(H_TX'||l_min_colnum||'(I),NULL, ''' || ATTRS.ATTRIBUTE_NAME || ''',''CONTACT_POINTS'')';
11062                           END IF;
11063 
11064                           l_mincol_list(ATTRS.COLNUM) := 'N';
11065                         ELSE
11066                           l_mincol_list(ATTRS.COLNUM) := 'Y';
11067                           IF has_context(ATTRS.custom_attribute_procedure) THEN
11068                             l_custom_list(ATTRS.COLNUM) := ATTRS.custom_attribute_procedure || '(H_CONTACT_POINT_ID(I),''CONTACT_POINTS'','''||ATTRS.ATTRIBUTE_NAME|| ''', ''STAGE'')';
11069                           ELSE
11070                             l_custom_list(ATTRS.COLNUM) := ATTRS.custom_attribute_procedure || '(H_CONTACT_POINT_ID(I), ''CONTACT_POINTS'','''||ATTRS.ATTRIBUTE_NAME|| ''')';
11071                           END IF;
11072                         END IF;
11073                     END IF;
11074                     idx := idx+1;
11075                     -- VJN ADDED CODE FOR TRACKING CONDITION ATTRIBUTES AT THIS ENTITY LEVEL
11076                     IF HZ_WORD_CONDITIONS_PKG.is_a_cond_attrib( ATTRS.attribute_id)
11077                     THEN
11078                         l_cond_attrib_list(ATTRS.COLNUM) := ATTRS.attribute_id ;
11079                     END IF;
11080 
11081                   END LOOP;
11082 
11083                   IF idx=1 THEN
11084                     x_rebuild_cpt_idx:=FALSE;
11085                     l('    RETURN;');
11086                     l('  END;');
11087                   ELSE
11088                     x_rebuild_cpt_idx:=check_rebuild('CONTACT_POINTS');
11089                     IF cur_col_num<=255 THEN--bug 5977628
11090                       FOR I in cur_col_num..255 LOOP
11091                         l_mincol_list(I) := 'N';
11092                         l_forall_list(I) := 'N';
11093                       END LOOP;
11094                     END IF;
11095                     l('        open x_contact_pt_cur FOR');
11096                     l('           SELECT cp.CONTACT_POINT_ID ');
11097                     FOR I in 1..l_select.COUNT LOOP
11098                       l('                  ,' || l_select(I));
11099                     END LOOP;
11100                     l('           FROM HZ_CONTACT_POINTS cp, HZ_STAGED_CONTACT_POINTS s ');
11101                     l('           WHERE mod(s.PARTY_ID, p_num_workers) = p_worker_number ');
11102                     l('           AND cp.contact_point_id  =  s.contact_point_id ');
11103                     l('           AND cp.owner_table_id  =  s.PARTY_ID ');
11104                     l('           AND cp.OWNER_TABLE_NAME = ''HZ_PARTIES'' ');
11105                     l('           AND (cp.status is null OR cp.status = ''A'' or cp.status = ''I''); ');
11106                     l('  END;');
11107                   END IF;
11108                   l('');
11109                   l('  PROCEDURE update_stage_contact_pts ( ');
11110                   l('    p_contact_pt_cur    IN HZ_PARTY_STAGE.StageCurTyp) IS ');
11111                   l('  l_limit NUMBER := ' || g_batch_size || ';');
11112                   l('  H_DENORM_PARTY_ID NumberList ;');
11113                   l('  H_DENORM_VALUE CharList ;');
11114                   l('  H_ROW_OFFSET Number ;');
11115                   l(' l_last_fetch BOOLEAN := FALSE;');
11116                   l('');
11120                     l('  END;');
11117                   l('  BEGIN');
11118                   IF idx=1 THEN
11119                     l('      RETURN;');
11121                   ELSE
11122                     l('    LOOP');
11123                     l('      H_ROW_OFFSET := 1 ;');
11124                     l('      FETCH p_contact_pt_cur BULK COLLECT INTO');
11125                     l('        H_CONTACT_POINT_ID');
11126                     FOR I IN 1..255 LOOP
11127                       IF l_forall_list(I) <> 'N' THEN
11128                         l('         ,H_TX'||I);
11129                       END IF;
11130                     END LOOP;
11131                     l('      LIMIT l_limit;');
11132                     l('');
11133                     l('    IF p_contact_pt_cur%NOTFOUND THEN');
11134                     l('      l_last_fetch:=TRUE;');
11135                     l('    END IF;');
11136 
11137                     l('    IF H_CONTACT_POINT_ID.COUNT=0 AND l_last_fetch THEN');
11138                     l('      EXIT;');
11139                     l('    END IF;');
11140 
11141                     l('    FOR I in H_CONTACT_POINT_ID.FIRST..H_CONTACT_POINT_ID.LAST LOOP');
11142                      -- VJN INTRODUCED CODE FOR GENERATING THE POPULATION
11143                       -- OF THE GLOBAL CONDITION RECORD
11144 
11145                       l_idx := l_cond_attrib_list.FIRST ;
11146                       IF l_idx IS NOT NULL
11147                       THEN
11148                             l('----------- SETTING GLOBAL CONDITION RECORD AT THE CONTACT POINT LEVEL ---------');
11149                       END IF ;
11150 
11151 
11152                       WHILE l_cond_attrib_list.EXISTS(l_idx)
11153                       LOOP
11154 
11155                         l('     HZ_WORD_CONDITIONS_PKG.set_gbl_condition_rec ('||l_cond_attrib_list(l_idx)||','||'H_TX'||l_idx||'(I));');
11156                         l_idx := l_idx+1;
11157                        END LOOP;
11158 
11159                     FOR I IN 1..255 LOOP
11160                       IF l_forall_list(I) <> 'N' THEN
11161                         IF l_mincol_list(I) = 'Y' THEN
11162                           l('         H_TX'||I||'(I):='||l_custom_list(I)||';');
11163                         END IF;
11164                       END IF;
11165                     END LOOP;
11166 
11167                     FOR I IN 1..255 LOOP
11168                       IF l_forall_list(I) <> 'N' THEN
11169                         IF l_mincol_list(I) <> 'Y' THEN
11170                           l('         H_TX'||I||'(I):='||l_forall_list(I)||';');
11171                         END IF;
11172                       END IF;
11173                     END LOOP;
11174                     FOR I IN 1..255 LOOP
11175                       IF l_forall_list(I) <> 'N' THEN
11176                         IF l_mincol_list(I) = 'Y' THEN
11177                           l('         H_TX'||I||'(I):='||l_forall_list(I)||';');
11178                         END IF;
11179                       END IF;
11180                     END LOOP;
11181                     l('    END LOOP;');
11182 
11183                     l('    FORALL I in H_CONTACT_POINT_ID.FIRST..H_CONTACT_POINT_ID.LAST');
11184                     l('      UPDATE HZ_STAGED_CONTACT_POINTS SET');
11185                     FIRST:=TRUE;
11186                     FOR I IN 1..255 LOOP
11187                       IF l_forall_list(I) <> 'N' THEN
11188                           IF (FIRST) THEN
11189                 	       FIRST := false;
11190                                l('            TX'||I||'=decode(H_TX'||I||'(I),null,H_TX'||I||'(I),H_TX'||I||'(I)||'' '')');
11191                           ELSE
11192                                l('            ,TX'||I||'=decode(H_TX'||I||'(I),null,H_TX'||I||'(I),H_TX'||I||'(I)||'' '')');
11193                           END IF;
11194                       END IF;
11195                     END LOOP;
11196                       l('        WHERE CONTACT_POINT_ID = H_CONTACT_POINT_ID(I)');
11197 
11198                       -- ADD CODE FOR UPDATING HZ_STAGED_PARTIES IF THERE ARE ANY NEW CONTACT POINT DENORM ATTRIBUTES
11199                       IF get_missing_denorm_attrib_cols('CONTACT_POINTS') IS NOT NULL
11200                       THEN
11201                            l('RETURNING PARTY_ID, ');
11202                            l(get_missing_denorm_attrib_cols('CONTACT_POINTS'));
11203                            -- THIS BULK COLLECT WILL CHOSE THE PARTY ID COLUMNS OF THE ROWS THAT ARE UPDATED
11204                            -- AND UPDATE THESE PARTY IDS IN HZ_STAGED_PARTIES, BY APPENDING TO THE D_CPT COLUMNS
11205                            -- VALUES FROM THE NEW DENORM ATTRIBUTE COLUMNS
11206                             l('BULK COLLECT INTO  H_DENORM_PARTY_ID, H_DENORM_VALUE ;');
11207                             l('LOOP');
11208           		            l('BEGIN');
11209           			        l('   FORALL I IN H_ROW_OFFSET..H_DENORM_PARTY_ID.COUNT');
11210           			        l('           UPDATE HZ_STAGED_PARTIES');
11211           				    l('           SET D_CPT = D_CPT||'' ''||H_DENORM_VALUE(I)');
11212           				    l('           WHERE PARTY_ID = H_DENORM_PARTY_ID(I) AND D_CPT <> ''SYNC'' ;');
11213                             l('EXIT ;');
11214           			        l('EXCEPTION');
11215           			        l('WHEN OTHERS THEN');
11216           			        l('           H_ROW_OFFSET := H_ROW_OFFSET+SQL%ROWCOUNT;');
11217                             l('           UPDATE HZ_STAGED_PARTIES');
11218           				    l('           SET D_CPT = ''SYNC'' ');
11219           				    l('           WHERE PARTY_ID = H_DENORM_PARTY_ID(H_ROW_OFFSET) ;');
11220                             l('           H_ROW_OFFSET := H_ROW_OFFSET+1 ;');
11221           		            l('END ;');
11222                             l('END LOOP ;');
11223                       ELSE
11224                            l(';');
11225                       END IF ;
11226                       l('      IF l_last_fetch THEN');
11227                       l('        FND_CONCURRENT.AF_Commit;');
11228                       l('        EXIT;');
11229                       l('      END IF;');
11230                       l('      FND_CONCURRENT.AF_Commit;');
11231                       l('    END LOOP;');
11232                       l('  END;');
11233                   END IF;
11234 ELSE
11235                     log('Else block of code -- No new transformations exist' );
11236                     l('');
11237                     l('  PROCEDURE open_contact_pt_cursor( ');
11238                     l('    p_worker_number IN	NUMBER,');
11239                     l('    p_num_workers	IN	NUMBER,');
11240                     l('    x_contact_pt_cur	IN OUT	HZ_PARTY_STAGE.StageCurTyp) IS ');
11241                     l('');
11242                     l('  BEGIN');
11243                     l('    open x_contact_pt_cur FOR');
11244                     l('      SELECT cpt.PARTY_ID,');
11245                     l(get_missing_denorm_attrib_cols('CONTACT_POINTS'));
11246                     l('      FROM HZ_STAGED_CONTACT_POINTS cpt');
11247                     l('      WHERE mod(cpt.PARTY_ID, p_num_workers) = p_worker_number ; ');
11248                     l('  END;');
11249 
11250                     l('  PROCEDURE update_stage_contact_pts ( ');
11251                     l('    p_contact_pt_cur    IN HZ_PARTY_STAGE.StageCurTyp) IS ');
11252                     l('  l_limit NUMBER := ' || g_batch_size || ';');
11253                     l('  H_DENORM_PARTY_ID NumberList ;');
11254                     l('  H_DENORM_VALUE CharList ;');
11255                     l('  H_ROW_OFFSET Number ;');
11256                     l(' l_last_fetch BOOLEAN := FALSE;');
11257                     l('');
11258                     l('  BEGIN');
11259                     l('    LOOP');
11260                     l('      H_ROW_OFFSET := 1 ; ');
11261                     l('      FETCH p_contact_pt_cur BULK COLLECT INTO');
11262                     l('        H_DENORM_PARTY_ID, H_DENORM_VALUE');
11263                     l('      LIMIT l_limit;');
11264                     l('');
11265                     l('    IF p_contact_pt_cur%NOTFOUND THEN');
11266                     l('      l_last_fetch:=TRUE;');
11267                     l('    END IF;');
11268                     l('    IF H_DENORM_PARTY_ID.COUNT=0 AND l_last_fetch THEN');
11269                     l('      EXIT;');
11270                     l('    END IF;');
11271 
11272                     l('LOOP');
11273   		            l('BEGIN');
11274   			        l('   FORALL I IN H_ROW_OFFSET..H_DENORM_PARTY_ID.COUNT');
11275   			        l('           UPDATE HZ_STAGED_PARTIES');
11276   				    l('           SET D_CPT = D_CPT||'' ''||H_DENORM_VALUE(I)');
11277   				    l('           WHERE PARTY_ID = H_DENORM_PARTY_ID(I) AND D_CPT <> ''SYNC'' ;');
11278                     l('EXIT ;');
11279   			        l('EXCEPTION');
11280   			        l('WHEN OTHERS THEN');
11281   			        l('           H_ROW_OFFSET := H_ROW_OFFSET+SQL%ROWCOUNT;');
11282                     l('           UPDATE HZ_STAGED_PARTIES');
11283   				    l('           SET D_CPT = ''SYNC'' ');
11284   				    l('           WHERE PARTY_ID = H_DENORM_PARTY_ID(H_ROW_OFFSET) ;');
11285                     l('           H_ROW_OFFSET := H_ROW_OFFSET+1 ;');
11286   		            l('END ;');
11287                     l('END LOOP ;');
11288 
11289 
11290 
11291 
11292 
11293                     l('        IF l_last_fetch THEN');
11294                     l('          FND_CONCURRENT.AF_Commit;');
11295                     l('          EXIT;');
11296                     l('        END IF;');
11297                     l('        FND_CONCURRENT.AF_Commit;');
11298                     l('    END LOOP ; ');
11299                     l('  END ; ');
11300 END IF ;
11301 
11302 END;
11303 
11304 
11305 PROCEDURE create_btree_indexes (p_entity VARCHAR2)
11306  IS
11307   l_index_owner VARCHAR2(255);
11308 
11309   CURSOR indexes_reqd IS
11310     SELECT decode(a.entity_name,'PARTY','HZ_STAGED_PARTIES',
11311                   'PARTY_SITES','HZ_STAGED_PARTY_SITES','CONTACTS','HZ_STAGED_CONTACTS',
11312                   'CONTACT_POINTS','HZ_STAGED_CONTACT_POINTS')||'_N0'||substrb(staged_attribute_column,3) index_name,
11313            decode(a.entity_name,'PARTY','HZ_STAGED_PARTIES',
11314                   'PARTY_SITES','HZ_STAGED_PARTY_SITES','CONTACTS','HZ_STAGED_CONTACTS',
11315                   'CONTACT_POINTS','HZ_STAGED_CONTACT_POINTS') table_name,
11316            decode(a.entity_name,'PARTY','HZ_SRCH_PARTIES',
11317                   'PARTY_SITES','HZ_SRCH_PSITES','CONTACTS','HZ_SRCH_CONTACTS',
11318                   'CONTACT_POINTS','HZ_SRCH_CPTS')||'_N0'||substrb(staged_attribute_column,3) srch_index_name,
11319            decode(a.entity_name,'PARTY','HZ_SRCH_PARTIES',
11320                   'PARTY_SITES','HZ_SRCH_PSITES','CONTACTS','HZ_SRCH_CONTACTS',
11321                   'CONTACT_POINTS','HZ_SRCH_CPTS') srch_table_name,
11322            f.staged_attribute_column column_name
11323    FROM hz_trans_attributes_vl a, hz_trans_functions_vl f
11324    WHERE f.attribute_id = a.attribute_id
11325    AND f.index_required_flag = 'Y'
11326    AND a.entity_name = p_entity;
11327 
11328  CURSOR check_index(cp_index_name VARCHAR2,cp_table_name VARCHAR2) IS
11329    SELECT 1 FROM sys.all_indexes
11330    WHERE INDEX_NAME=cp_index_name
11331    AND TABLE_NAME=cp_table_name and owner = l_index_owner;
11332 
11333  l_index_name VARCHAR2(255);
11334  l_table_name VARCHAR2(255);
11335  l_srch_index_name VARCHAR2(255);
11336  l_srch_table_name VARCHAR2(255);
11337  l_column_name VARCHAR2(255);
11338 
11339  ar_index_tbsp VARCHAR2(255);
11340  l_storage_params VARCHAR2(2000);
11341  tmp NUMBER;
11342 
11343 l_status VARCHAR2(255);
11344 l_temp VARCHAR2(255);
11345 
11346 l_bool BOOLEAN;
11347 
11348 BEGIN
11349 
11350   l_bool := fnd_installation.GET_APP_INFO('AR',l_status,l_temp,l_index_owner);
11351 
11352   select index_tablespace
11353   into ar_index_tbsp
11354   from fnd_product_installations
11355   where application_id = '222';
11356 
11357   l_storage_params := 'LOGGING STORAGE (INITIAL 4K NEXT 1M MINEXTENTS 1 '||
11358                       'MAXEXTENTS unlimited PCTINCREASE 0 FREELIST GROUPS 4 '||
11359                       'FREELISTS 4) PCTFREE 10 INITRANS 4 MAXTRANS 255 '||
11360                       'COMPUTE STATISTICS TABLESPACE '||ar_index_tbsp;
11361 
11362   OPEN indexes_reqd;
11363   LOOP
11364     FETCH indexes_reqd INTO l_index_name, l_table_name,l_srch_index_name, l_srch_table_name, l_column_name;
11365     EXIT WHEN indexes_reqd%NOTFOUND;
11366 
11367     OPEN check_index(l_index_name,l_table_name);
11368     FETCH check_index INTO tmp;
11369     IF check_index%NOTFOUND THEN
11370       EXECUTE IMMEDIATE 'CREATE INDEX '||l_index_owner||'.'||l_index_name||' ON '||l_table_name||'('||l_column_name||') '||
11371                         l_storage_params;
11372     END IF;
11373     CLOSE check_index;
11374 
11375     OPEN check_index(l_srch_index_name,l_srch_table_name);
11376     FETCH check_index INTO tmp;
11377     IF check_index%NOTFOUND THEN
11378       EXECUTE IMMEDIATE 'CREATE INDEX '||l_index_owner||'.'||l_srch_index_name||' ON '||l_srch_table_name||'('||l_column_name||') '||
11379                         l_storage_params;
11380     END IF;
11381     CLOSE check_index;
11385 
11382   END LOOP;
11383   CLOSE indexes_reqd;
11384 END;
11386 FUNCTION has_trx_context(proc VARCHAR2) RETURN BOOLEAN IS
11387 
11388   l_sql VARCHAR2(255);
11389   l_entity VARCHAR2(255);
11390   l_procedure VARCHAR2(255);
11391   l_attribute VARCHAR2(255);
11392   c NUMBER;
11393   n NUMBER;
11394   l_custom BOOLEAN;
11395 
11396 BEGIN
11397   c := dbms_sql.open_cursor;
11398   l_sql := 'select ' || proc ||
11399            '(:attrval,:lang,:attr,:entity,:ctx) from dual';
11400   dbms_sql.parse(c,l_sql,2);
11401   DBMS_SQL.BIND_VARIABLE(c,':attrval','x');
11402   DBMS_SQL.BIND_VARIABLE(c,':lang','x');
11403   DBMS_SQL.BIND_VARIABLE(c,':attr','x');
11404   DBMS_SQL.BIND_VARIABLE(c,':entity','x');
11405   DBMS_SQL.BIND_VARIABLE(c,':ctx','x');
11406   n:=DBMS_SQL.execute(c);
11407   dbms_sql.close_cursor(c);
11408   RETURN TRUE;
11409 EXCEPTION
11413 END;
11410   WHEN OTHERS THEN
11411     dbms_sql.close_cursor(c);
11412     RETURN FALSE;
11414 
11415 FUNCTION has_context(proc VARCHAR2) RETURN BOOLEAN IS
11416 
11417   l_sql VARCHAR2(255);
11418   l_entity VARCHAR2(255);
11419   l_procedure VARCHAR2(255);
11420   l_attribute VARCHAR2(255);
11421   c NUMBER;
11422   n NUMBER;
11423   l_custom BOOLEAN;
11424 
11425 BEGIN
11426   c := dbms_sql.open_cursor;
11427   l_sql := 'select ' || proc ||
11428            '(:record_id,:entity,:attr,:ctx) from dual';
11429   dbms_sql.parse(c,l_sql,2);
11430   DBMS_SQL.BIND_VARIABLE(c,':record_id','x');
11431   DBMS_SQL.BIND_VARIABLE(c,':entity','x');
11432   DBMS_SQL.BIND_VARIABLE(c,':attr','x');
11433   DBMS_SQL.BIND_VARIABLE(c,':ctx','x');
11434   n:=DBMS_SQL.execute(c);
11435   dbms_sql.close_cursor(c);
11436   RETURN TRUE;
11437 EXCEPTION
11438   WHEN OTHERS THEN
11439     dbms_sql.close_cursor(c);
11440     RETURN FALSE;
11441 END;
11442 
11443 
11444 PROCEDURE verify_all_procs IS
11445 
11446   l_sql VARCHAR2(255);
11447   l_entity VARCHAR2(255);
11448   l_procedure VARCHAR2(255);
11449   l_attribute VARCHAR2(255);
11450   l_trans_name VARCHAR2(255);
11451   c NUMBER;
11452   l_custom BOOLEAN;
11453 BEGIN
11454   FOR FUNCS IN (SELECT PROCEDURE_NAME, a.ENTITY_NAME, a.ATTRIBUTE_NAME, f.TRANSFORMATION_NAME
11455                 FROM HZ_TRANS_FUNCTIONS_VL f, HZ_TRANS_ATTRIBUTES_VL a
11456                 WHERE a.ATTRIBUTE_ID = f.ATTRIBUTE_ID
11457                 AND nvl(f.ACTIVE_FLAG,'Y') = 'Y' )
11458     LOOP
11459         BEGIN
11460              l_custom := FALSE;
11461              l_entity := FUNCS.ENTITY_NAME;
11462              l_attribute := FUNCS.ATTRIBUTE_NAME;
11463              l_procedure := FUNCS.PROCEDURE_NAME;
11464              l_trans_name := FUNCS.TRANSFORMATION_NAME;
11465              c := dbms_sql.open_cursor;
11466              l_sql := 'select ' || FUNCS.PROCEDURE_NAME ||
11467                '(:attrval,:lang,:attr,:entity) from dual';
11468              dbms_sql.parse(c,l_sql,2);
11469              dbms_sql.close_cursor(c);
11470           EXCEPTION WHEN OTHERS THEN
11471                FND_MESSAGE.SET_NAME('AR', 'HZ_TRANS_PROC_ERROR1');
11472                FND_MESSAGE.SET_TOKEN('PROC' ,l_procedure);
11473                FND_MESSAGE.SET_TOKEN('ENTITY' ,l_entity);
11474                FND_MESSAGE.SET_TOKEN('ATTRIBUTE' ,l_attribute);
11475                FND_MESSAGE.SET_TOKEN('TRANS' ,l_trans_name);
11476                FND_MSG_PUB.ADD;
11477           END;
11478     END LOOP;
11479    FOR FUNCS IN (SELECT custom_attribute_procedure, ENTITY_NAME, ATTRIBUTE_NAME
11480                  FROM HZ_TRANS_ATTRIBUTES_VL a
11481                  WHERE source_table = 'CUSTOM' OR
11482                  custom_attribute_procedure is NOT NULL
11483                  AND EXISTS (select 1 from HZ_TRANS_FUNCTIONS_VL f
11487          BEGIN
11484                              WHERE f.attribute_id = a.attribute_id
11485                              AND nvl(f.ACTIVE_FLAG,'Y') = 'Y'))
11486      LOOP
11488               l_custom := TRUE;
11489               l_entity := FUNCS.ENTITY_NAME;
11490               l_attribute := FUNCS.ATTRIBUTE_NAME;
11491               l_procedure := FUNCS.custom_attribute_procedure;
11492               c := dbms_sql.open_cursor;
11493               l_sql := 'select ' || FUNCS.custom_attribute_procedure ||
11494                '(:record_id,:entity,:attr) from dual';
11495               dbms_sql.parse(c,l_sql,2);
11496               dbms_sql.close_cursor(c);
11497           EXCEPTION WHEN OTHERS THEN
11498                FND_MESSAGE.SET_NAME('AR', 'HZ_CUSTOM_PROC_ERROR1');
11499                FND_MESSAGE.SET_TOKEN('PROC' ,l_procedure);
11500                FND_MESSAGE.SET_TOKEN('ENTITY' ,l_entity);
11501                FND_MESSAGE.SET_TOKEN('ATTRIBUTE' ,l_attribute);
11502                FND_MSG_PUB.ADD;
11503           END;
11504     END LOOP;
11505 EXCEPTION
11506   WHEN OTHERS THEN
11507     dbms_sql.close_cursor(c);
11508     RAISE FND_API.G_EXC_ERROR;
11509 END ;
11510 
11511 
11512 
11513 /**
11514 * Procedure to write a message to the out NOCOPY file
11515 **/
11516 PROCEDURE out(
11517    message      IN      VARCHAR2,
11518    newline      IN      BOOLEAN DEFAULT TRUE) IS
11519 BEGIN
11520   IF message = 'NEWLINE' THEN
11521     FND_FILE.NEW_LINE(FND_FILE.OUTPUT, 1);
11522   ELSIF (newline) THEN
11523     FND_FILE.put_line(fnd_file.output,message);
11524   ELSE
11525     FND_FILE.put(fnd_file.output,message);
11526   END IF;
11527 END out;
11528 
11529 /**
11530 * Procedure to write a message to the log file
11531 **/
11532 PROCEDURE log(
11533    message      IN      VARCHAR2,
11534    newline      IN      BOOLEAN DEFAULT TRUE) IS
11535 BEGIN
11536 
11537   IF message = 'NEWLINE' THEN
11538    FND_FILE.NEW_LINE(FND_FILE.LOG, 1);
11539   ELSIF (newline) THEN
11540     FND_FILE.put_line(fnd_file.log,message);
11541   ELSE
11542     FND_FILE.put(fnd_file.log,message);
11543   END IF;
11544 END log;
11545 
11546 /**
11547 * Procedure to write a message to the out NOCOPY and log files
11548 **/
11549 PROCEDURE outandlog(
11550    message      IN      VARCHAR2,
11551    newline      IN      BOOLEAN DEFAULT TRUE) IS
11552 BEGIN
11553   out(message, newline);
11554   log(message, newline);
11555 END outandlog;
11556 
11557 /**
11558 * Function to fetch messages of the stack and log the error
11559 * Also returns the error
11560 **/
11561 FUNCTION logerror(SQLERRM VARCHAR2 DEFAULT NULL)
11562 RETURN VARCHAR2 IS
11563 
11564   l_msg_data VARCHAR2(2000);
11565 BEGIN
11566   FND_MSG_PUB.Reset;
11567 
11568   FOR I IN 1..FND_MSG_PUB.Count_Msg LOOP
11569     l_msg_data := l_msg_data || FND_MSG_PUB.Get(p_encoded => FND_API.G_FALSE );
11570   END LOOP;
11571   IF (SQLERRM IS NOT NULL) THEN
11572     l_msg_data := l_msg_data || SQLERRM;
11573   END IF;
11574   log(l_msg_data);
11575   RETURN l_msg_data;
11576 END logerror;
11577 
11578 FUNCTION wait_for_request(
11579     p_request_id NUMBER) RETURN VARCHAR2 IS
11580 
11581 uphase VARCHAR2(255);
11582 dphase VARCHAR2(255);
11583 ustatus VARCHAR2(255);
11584 dstatus VARCHAR2(255);
11585 message VARCHAR2(32000);
11586 
11587 l_bool BOOLEAN;
11588 
11589 BEGIN
11590   l_bool := FND_CONCURRENT.wait_for_request(p_request_id,
11591              60, 144000, uphase, ustatus, dphase, dstatus, message);
11592 
11593   IF dphase <> 'COMPLETE' and dstatus <> 'NORMAL' THEN
11594     return 'ERROR';
11595   ELSE
11596     return 'SUCCESS';
11597   END IF;
11598 END wait_for_request;
11599 
11600 BEGIN
11601     g_schema_name := hz_utility_v2pub.get_appsschemaname;
11602 
11603 
11604 END HZ_PARTY_STAGE;
11605