DBA Data[Home] [Help]

PACKAGE BODY: APPS.HZ_PARTY_STAGE

Source


1 PACKAGE BODY HZ_PARTY_STAGE AS
2 /*$Header: ARHDSTGB.pls 120.86 2012/02/03 06:09:25 amstephe 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     g_batch_size :=  nvl( FND_PROFILE.value('HZ_DQM_STAGE_BATCH_SIZE'), 200 );--Bug 10030313
405     HZ_GEN_PLSQL.new('HZ_STAGE_MAP_TRANSFORM', 'PACKAGE BODY');
406     l('CREATE OR REPLACE PACKAGE BODY HZ_STAGE_MAP_TRANSFORM AS');
407 
408     generate_declarations;
409     generate_ds_proc;
410     generate_log;
411     generate_ins_dqm_sync_err_rec;
412     generate_party_query_proc;
413     generate_contact_query_proc;
414     generate_contact_pt_query_proc;
415     generate_party_site_query_proc;
416 
417     -- REPURI. Added calls to the following 4 new proccedures for
418     -- open_sync_xxx_cursor query and sync_all_xxx API logic.
419 
420     generate_sync_party_query_proc;
421     generate_sync_psite_query_proc;
422     generate_sync_ct_query_proc;
423     generate_sync_cpt_query_proc;
424 
425     -- REPURI. Added calls to the following 4 new proccedures for
426     -- open_bulk_imp_sync_xxx_cur query logic.
427     -- Bug 4884735.
428 
429     gen_bulk_imp_sync_party_query;
430     gen_bulk_imp_sync_psite_query;
431     gen_bulk_imp_sync_ct_query;
432     gen_bulk_imp_sync_cpt_query;
433 
434     l('END;');
435 
436     HZ_GEN_PLSQL.compile_code;
437 END;
438 
439 PROCEDURE get_datastore_cols (
440    entity IN VARCHAR2,
441    pref_cols OUT NOCOPY VARCHAR2,
442    proc_cols OUT NOCOPY VARCHAR2,
443    fetch_cols OUT NOCOPY VARCHAR2) IS
444 
445 FUNCSF BOOLEAN := FALSE;
446 EXTRAF BOOLEAN := TRUE;
447 PREFF BOOLEAN := TRUE;
448 
449 prefattrs VARCHAR2(2000);
450 prefcols VARCHAR2(500);
451 extracols VARCHAR2(2000);
452 fetchcols VARCHAR2(2000);
453 
454 limit NUMBER := 450;
455 
456 CURSOR check_ds_misc_tx(p_stg_col varchar2) IS
457     select 1 from ctx_preference_values
458     where prv_preference =
459        decode(entity,'PARTY','HZ_PARTY_DS',
460                        'PARTY_SITES','HZ_PARTY_SITE_DS',
461                        'CONTACTS','HZ_CONTACT_DS',
462                        'CONTACT_POINTS','HZ_CONTACT_POINT_DS',
463                        'NOMATCH')
464     AND prv_owner = g_schema_name
465     AND prv_attribute='COLUMNS'
466     AND (upper(prv_value) like '%'||p_stg_col||' %'
467          OR upper(prv_value) like '%'||p_stg_col||'||%');
468 
469 CURSOR check_any_tx(p_ATTRIBUTE_ID NUMBER) IS
470   SELECT 1 FROM hz_trans_functions_vl f
471   where f.attribute_id = p_attribute_id
472   and nvl(f.ACTIVE_FLAG,'Y') = 'Y'
473   and primary_flag = 'Y'
474   AND NVL(STAGED_FLAG,'N') ='Y';
475 
476 tmp NUMBER;
477 BEGIN
478 log('-------------------------------') ; -- VJN ADDED
479 log('Inside procedure get_datastore_cols '); -- VJN ADDED
480 
481 -- Note: For creating preferences in intermedia, using the multicolumn datastore approach
482 --       the length of the string that connotes the concatenation of the attributes
483 --       cannot exceed 500 bytes. In other words, limit = the max allowed length of the actual concatenation
484 --       of the attributes. So, limit +  length of other strings, that are part of the pref value <= 500
485 
486 -- changed this from 300 to 275, since the denorm part of the party preference itself takes 215
487 IF entity = 'PARTY' THEN
488    limit := 275 ;
489  END IF;
490 
491  prefcols := '';
492  FOR ATTRS IN (
493     SELECT ATTRIBUTE_ID
494     FROM HZ_TRANS_ATTRIBUTES_VL a
495     WHERE ENTITY_NAME = entity
496     AND TEMP_SECTION IS NULL
497     ORDER BY ATTRIBUTE_ID) LOOP
498 
499    prefattrs := '';
500    FUNCSF:=FALSE;
501    FOR FUNCS IN (
502      SELECT STAGED_ATTRIBUTE_COLUMN
503      FROM HZ_TRANS_FUNCTIONS_VL f
504      WHERE ATTRIBUTE_ID = ATTRS.ATTRIBUTE_ID
505      AND nvl(f.ACTIVE_FLAG,'Y') = 'Y'
506      AND nvl(f.PRIMARY_FLAG,'Y') = 'Y') LOOP
507 
508      FUNCSF:=TRUE;
509 
510      prefattrs := prefattrs||'||'||FUNCS.STAGED_ATTRIBUTE_COLUMN;
511    END LOOP;
512 
513    IF FUNCSF THEN
514      IF lengthb(prefcols)+lengthb(prefattrs)+5>limit THEN
515         IF EXTRAF THEN
516             extracols:=replace(substrb(prefattrs,3),'||',',');
517             fetchcols:='''<A'||ATTRS.ATTRIBUTE_ID||'>''||rec.'||replace(substrb(prefattrs,3),'||','||rec.')||'||''</A'||ATTRS.ATTRIBUTE_ID||'>''';
518             EXTRAF:=FALSE;
519         ELSE
520             extracols:=extracols||','||replace(substrb(prefattrs,3),'||',',');
521             fetchcols:=fetchcols||'||'||'''<A'||ATTRS.ATTRIBUTE_ID||'>''||rec.'||replace(substrb(prefattrs,3),'||','||rec.')||'||''</A'||ATTRS.ATTRIBUTE_ID||'>''';
522         END IF;
523      ELSE
524        IF PREFF THEN
525        IF (ATTRS.ATTRIBUTE_ID='13')
526  	                   THEN
527  	                                 prefcols:=  'decode(RTRIM(TX35) ,''SYNC'',APPS.HZDQM.daccnumber(party_id),TX35) A13';
528  	                   ELSE
529          prefcols := substrb(prefattrs,3)||' A'||ATTRS.ATTRIBUTE_ID;
530          END IF;
531          PREFF:=FALSE;
532        ELSE
533         IF (ATTRS.ATTRIBUTE_ID='13')
534  	                   THEN
535  	                                 prefcols:=  prefcols||','||'decode(RTRIM(TX35) ,''SYNC'',APPS.HZDQM.daccnumber(party_id),TX35) A13';
536  	                   ELSE
537          prefcols := prefcols||','||substrb(prefattrs,3)||' A'||ATTRS.ATTRIBUTE_ID;
538        END IF;
539      END IF;
540    END IF;
541     END IF;
542  END LOOP;
543 
544 
545  log('In get_datastore_cols before appending ctxsys procedure sections --- length of prefcols = ' || length(prefcols) ); -- VJN ADDED
546 
547  IF entity = 'PARTY' THEN
548    prefcols := prefcols||',decode(D_PS,''SYNC'',APPS.HZDQM.dps(party_id),D_PS) D_PS, decode(D_CT,''SYNC'',APPS.HZDQM.dct(party_id),D_CT) D_CT,decode(D_CPT,''SYNC'',APPS.HZDQM.dcpt(party_id),D_CPT) D_CPT';
549  END IF;
550  IF entity = 'PARTY' THEN
551    prefcols := prefcols||',STATUS';
552  ELSIF entity = 'CONTACT_POINTS' THEN
553    prefcols := prefcols||',CONTACT_POINT_TYPE';
554  END IF;
555  IF entity = 'PARTY' THEN
556      prefcols := prefcols||',APPS.HZDQM.mp(ROWID) MS';
557  ELSIF entity = 'PARTY_SITES' THEN
558      prefcols := prefcols||',APPS.HZDQM.mps(ROWID) MS';
559  ELSIF entity = 'CONTACTS' THEN
560      prefcols := prefcols||',APPS.HZDQM.mct(ROWID) MS';
561  ELSIF entity = 'CONTACT_POINTS' THEN
562      prefcols := prefcols||',APPS.HZDQM.mcpt(ROWID) MS';
563  END IF;
564 
565  IF extracols IS NOT NULL THEN
566    EXTRAF := FALSE;
567  ELSE
568    EXTRAF := TRUE;
569  END IF;
570 
571  FOR ATTRS IN (
572     SELECT ATTRIBUTE_ID, TEMP_SECTION
573     FROM HZ_TRANS_ATTRIBUTES_VL a
574     WHERE ENTITY_NAME = entity
575     ORDER BY ATTRIBUTE_ID) LOOP
576    prefattrs := '';
577    FUNCSF:=FALSE;
578    FOR FUNCS IN (
579      SELECT STAGED_ATTRIBUTE_COLUMN
580      FROM HZ_TRANS_FUNCTIONS_VL f
581      WHERE ATTRIBUTE_ID = ATTRS.ATTRIBUTE_ID
582      AND nvl(f.ACTIVE_FLAG,'Y') = 'Y'
583      AND nvl(f.PRIMARY_FLAG,'Y') = 'Y') LOOP
584 
585      IF ATTRS.TEMP_SECTION IS NULL THEN
586        OPEN check_any_tx(ATTRS.ATTRIBUTE_ID);
587        FETCH check_any_tx INTO tmp;
588        IF check_any_tx%FOUND THEN
589          CLOSE check_any_tx;
590          OPEN check_ds_misc_tx(FUNCS.STAGED_ATTRIBUTE_COLUMN);
591          FETCH check_ds_misc_tx INTO tmp;
592          IF check_ds_misc_tx%NOTFOUND THEN
593             IF instrb(extracols,FUNCS.STAGED_ATTRIBUTE_COLUMN) < 1 THEN
594 	         FUNCSF:=TRUE;
595                  prefattrs := prefattrs||'||'||FUNCS.STAGED_ATTRIBUTE_COLUMN;
596             END IF;
597          END IF;
598          CLOSE check_ds_misc_tx;
599        ELSE
600          CLOSE check_any_tx;
601        END IF;
602 
603      ELSE
604        FUNCSF:=TRUE;
605        prefattrs := prefattrs||'||'||FUNCS.STAGED_ATTRIBUTE_COLUMN;
606      END IF;
607    END LOOP;
608 
609    IF FUNCSF THEN
610      IF EXTRAF THEN
611           extracols:=replace(substrb(prefattrs,3),'||',',');
612           fetchcols:='''<'||nvl(ATTRS.TEMP_SECTION,'A'||ATTRS.ATTRIBUTE_ID)||'>''||rec.'||replace(substrb(prefattrs,3),'||','||rec.')||'||''</'||nvl(ATTRS.TEMP_SECTION,'A'||ATTRS.ATTRIBUTE_ID)||'>''';
613           -- extracols := '''<'||nvl(ATTRS.TEMP_SECTION,'A'||ATTRS.ATTRIBUTE_ID)||'>'''||prefattrs||'||''</'||nvl(ATTRS.TEMP_SECTION,'A'||ATTRS.ATTRIBUTE_ID)||'>''';
614           EXTRAF:=FALSE;
615      ELSE
616           extracols:=extracols||','||replace(substrb(prefattrs,3),'||',',');
617           fetchcols:=fetchcols||'||'||'''<'||nvl(ATTRS.TEMP_SECTION,'A'||ATTRS.ATTRIBUTE_ID)||'>''||rec.'||replace(substrb(prefattrs,3),'||','||rec.')||'||''</'||nvl(ATTRS.TEMP_SECTION,'A'||ATTRS.ATTRIBUTE_ID)||'>''';
618           -- extracols := extracols||'||'||'''<'||nvl(ATTRS.TEMP_SECTION,'A'||ATTRS.ATTRIBUTE_ID)||'>'''||prefattrs||'||''</'||nvl(ATTRS.TEMP_SECTION,'A'||ATTRS.ATTRIBUTE_ID)||'>''';
619      END IF;
620    END IF;
621  END LOOP;
622 
623 
624  pref_cols := prefcols;
625  proc_cols := extracols;
626  fetch_cols := fetchcols;
627 
628 exception
629   when others then
630      log('Exception raised in get_datastore_cols for ' || entity ); -- VJN ADDED
631      log('Error Message is  ' || SQLERRM ); -- VJN ADDED
632     RAISE;
633 END;
634 
635 
636 PROCEDURE generate_map_pkg IS
637 BEGIN
638     log('Generating package body for HZ_STAGE_MAP_TRANSFORM');
639     g_batch_size :=  nvl( FND_PROFILE.value('HZ_DQM_STAGE_BATCH_SIZE'), 200 );--Bug 10030313
640     HZ_GEN_PLSQL.new('HZ_STAGE_MAP_TRANSFORM', 'PACKAGE BODY');
641     l('CREATE OR REPLACE PACKAGE BODY HZ_STAGE_MAP_TRANSFORM AS');
642 
643     generate_declarations;
644     generate_ds_proc;
645     generate_log;
646     generate_ins_dqm_sync_err_rec;
647     generate_party_query_proc;
648     generate_contact_query_proc;
649     generate_contact_pt_query_proc;
650     generate_party_site_query_proc;
651 
652     -- REPURI. Added calls to the following 4 new proccedures for
653     -- open_sync_xxx_cursor query and sync_all_xxx API logic.
654 
655     generate_sync_party_query_proc;
656     generate_sync_psite_query_proc;
657     generate_sync_ct_query_proc;
658     generate_sync_cpt_query_proc;
659 
660     -- REPURI. Added calls to the following 4 new proccedures for
661     -- open_bulk_imp_sync_xxx_cur query logic.
662     -- Bug 4884735.
663 
664     gen_bulk_imp_sync_party_query;
665     gen_bulk_imp_sync_psite_query;
666     gen_bulk_imp_sync_ct_query;
667     gen_bulk_imp_sync_cpt_query;
668 
669     l('END;');
670 
671     log('Compiling package body .. ', false);
672     HZ_GEN_PLSQL.compile_code;
673     log('Done');
674 END;
675 
676 PROCEDURE set_misc (p_entity VARCHAR2) IS
677 CURSOR check_ds_misc_proc(p_attr_id NUMBER) IS
678     select 1 from ctx_preference_values
679     where prv_preference =
680        decode(p_entity,'PARTY','HZ_PARTY_DS',
681                        'PARTY_SITES','HZ_PARTY_SITE_DS',
682                        'CONTACTS','HZ_CONTACT_DS',
683                        'CONTACT_POINTS','HZ_CONTACT_POINT_DS',
684                        'NOMATCH')
685     AND prv_owner = g_schema_name
686     AND prv_attribute='COLUMNS'
687     AND upper(prv_value) like '% A'||p_attr_id||',%';
688 tmp NUMBER;
689 l_next_misc NUMBER;
690 BEGIN
691   BEGIN
692     SELECT max(to_number(substrb(temp_section,2)))
693     INTO l_next_misc
694     from hz_trans_attributes_vl a
695     where a.entity_name = p_entity
696     and a.temp_section IS NOT NULL;
697     IF l_next_misc is null THEN
698       l_next_misc := 0;
699     END IF;
700   EXCEPTION
701     WHEN NO_DATA_FOUND THEN
702       l_next_misc := 0;
703   END;
704 
705   FOR ATTRS IN (
706     SELECT ATTRIBUTE_ID
707     from hz_trans_attributes_vl a
708     where a.entity_name = p_entity
709     and exists (
710       SELECT 1 from hz_trans_functions_vl f
711       where a.attribute_id = f.attribute_id
712       and nvl(f.ACTIVE_FLAG,'Y') = 'Y'
713       and primary_flag = 'Y'
714       AND NVL(STAGED_FLAG,'N') ='N')
715       AND TEMP_SECTION IS NULL) LOOP
716     OPEN check_ds_misc_proc(ATTRS.ATTRIBUTE_ID);
717     FETCH check_ds_misc_proc INTO tmp;
718     IF check_ds_misc_proc%NOTFOUND THEN
719       l_next_misc:=l_next_misc+1;
720 
721       UPDATE HZ_TRANS_ATTRIBUTES_B
722       SET TEMP_SECTION='M'||l_next_misc
723       WHERE ATTRIBUTE_ID = ATTRS.ATTRIBUTE_ID;
724     END IF;
725     CLOSE check_ds_misc_proc;
726   END LOOP;
727 END;
728 
729 PROCEDURE generate_map_upd_pkg(
730   x_rebuild_party_idx OUT NOCOPY BOOLEAN,
731   x_rebuild_psite_idx OUT NOCOPY BOOLEAN,
732   x_rebuild_contact_idx OUT NOCOPY BOOLEAN,
733   x_rebuild_cpt_idx OUT NOCOPY BOOLEAN) IS
734 
735 BEGIN
736 
737     log('Generating package body for HZ_STAGE_MAP_TRANSFORM_UPD');
738     HZ_GEN_PLSQL.new('HZ_STAGE_MAP_TRANSFORM_UPD', 'PACKAGE BODY');
739     l('CREATE OR REPLACE PACKAGE BODY HZ_STAGE_MAP_TRANSFORM_UPD AS');
740 
741     generate_declarations;
742     generate_party_query_upd(x_rebuild_party_idx);
743     generate_party_site_query_upd(x_rebuild_psite_idx);
744     generate_contact_query_upd(x_rebuild_contact_idx);
745     generate_contact_pt_query_upd(x_rebuild_cpt_idx);
746 
747     l('END;');
748     log('Compiling package body .. ', false);
749     HZ_GEN_PLSQL.compile_code;
750     log('Done');
751 
752     IF NOT x_rebuild_party_idx THEN
753       set_misc('PARTY');
754     END IF;
755     IF NOT x_rebuild_psite_idx THEN
756       set_misc('PARTY_SITES');
757     END IF;
758     IF NOT x_rebuild_contact_idx THEN
759       set_misc('CONTACTS');
760     END IF;
761     IF NOT x_rebuild_cpt_idx THEN
762       set_misc('CONTACT_POINTS');
763     END IF;
764     generate_map_pkg;
765 END;
766 
767 PROCEDURE add_section (
768   p_dsname VARCHAR2,
769   p_attr VARCHAR2,
770   p_stype VARCHAR2) IS
771 BEGIN
772   IF p_stype = 'ZONE' THEN
773     ctx_ddl.add_zone_section(p_dsname, p_attr,p_attr);
774   ELSE
775     ctx_ddl.add_field_section(p_dsname, p_attr,p_attr,TRUE);
776   END IF;
777 END;
778 
779 
780 PROCEDURE generate_datastore_prefs(p_entity VARCHAR2) IS
781   CURSOR c_num_attrs(cp_entity VARCHAR2) IS
782     SELECT COUNT(1)
783     FROM HZ_TRANS_ATTRIBUTES_VL a
784     WHERE ENTITY_NAME = cp_entity
785     AND EXISTS (SELECT 1 FROM HZ_TRANS_FUNCTIONS_VL f
786                 WHERE f.ATTRIBUTE_ID = a.ATTRIBUTE_ID
787                 AND nvl(f.ACTIVE_FLAG,'Y') = 'Y'
788                 AND nvl(f.PRIMARY_FLAG,'Y') = 'Y');
789 
790   CURSOR c_attrs(cp_entity VARCHAR2) IS
791     SELECT 'A'||ATTRIBUTE_ID
792     FROM HZ_TRANS_ATTRIBUTES_VL a
793     WHERE ENTITY_NAME = cp_entity
794     AND EXISTS (SELECT 1 FROM HZ_TRANS_FUNCTIONS_VL f
795                 WHERE f.ATTRIBUTE_ID = a.ATTRIBUTE_ID
796                 AND nvl(f.ACTIVE_FLAG,'Y') = 'Y'
797                 AND nvl(f.PRIMARY_FLAG,'Y') = 'Y');
798 
799   l_cnt NUMBER;
800   l_stype VARCHAR2(255);
801   l_attr VARCHAR2(255);
802 
803   pref_cols VARCHAR2(1000);
804   proc_cols VARCHAR2(2000);
805   tmp VARCHAR2(2000);
806 
807 BEGIN
808    log('-------------------------------------');
809    log('In generate_datastore_prefs for ' || p_entity);
810    log('Trying to update the temp_section of HZ_TRANS_ATTRIBUTES_B for ' || p_entity);
811   BEGIN
812     IF p_entity='PARTY' THEN
813       ctx_ddl.drop_section_group(g_schema_name || '.HZ_DQM_PARTY_GRP');
814       UPDATE HZ_TRANS_ATTRIBUTES_B set TEMP_SECTION=NULL
815       WHERE ENTITY_NAME='PARTY';
816     END IF;
817 
818     IF p_entity='PARTY_SITES' THEN
819       ctx_ddl.drop_section_group(G_SCHEMA_NAME || '.HZ_DQM_PS_GRP');
820       UPDATE HZ_TRANS_ATTRIBUTES_B set TEMP_SECTION=NULL
821       WHERE ENTITY_NAME='PARTY_SITES';
822     END IF;
823 
824     IF p_entity='CONTACTS' THEN
825       ctx_ddl.drop_section_group(G_SCHEMA_NAME || '.HZ_DQM_CONTACT_GRP');
826       UPDATE HZ_TRANS_ATTRIBUTES_B set TEMP_SECTION=NULL
827       WHERE ENTITY_NAME='CONTACTS';
828     END IF;
829 
830     IF p_entity='CONTACT_POINTS' THEN
831       ctx_ddl.drop_section_group(G_SCHEMA_NAME || '.HZ_DQM_CPT_GRP');
832       UPDATE HZ_TRANS_ATTRIBUTES_B set TEMP_SECTION=NULL
833       WHERE ENTITY_NAME='CONTACT_POINTS';
834     END IF;
835   log('Update of HZ_TRANS_ATTRIBUTES_B successful for ' || p_entity);
836   EXCEPTION
837    WHEN OTHERS THEN
838      NULL;
839   END;
840 
841   IF p_entity='PARTY' THEN
842     log('Creating party_ds..',FALSE);
843     ctx_ddl.create_section_group(G_SCHEMA_NAME || '.HZ_DQM_PARTY_GRP','BASIC_SECTION_GROUP');
844     OPEN c_num_attrs('PARTY');
845     FETCH c_num_attrs INTO l_cnt;
846     CLOSE c_num_attrs;
847     l_cnt := l_cnt+4;
848     IF l_cnt>54 THEN
849       l_stype := 'ZONE';
850     ELSE
851       l_stype := 'FIELD';
852     END IF;
853     add_section(G_SCHEMA_NAME || '.HZ_DQM_PARTY_GRP','D_PS',l_stype);
854     add_section(G_SCHEMA_NAME || '.HZ_DQM_PARTY_GRP','D_CT',l_stype);
855     add_section(G_SCHEMA_NAME || '.HZ_DQM_PARTY_GRP','D_CPT',l_stype);
856     add_section(G_SCHEMA_NAME || '.HZ_DQM_PARTY_GRP','STATUS',l_stype);
857     OPEN c_attrs('PARTY');
858     LOOP
859       FETCH c_attrs INTO l_attr;
860       EXIT WHEN c_attrs%NOTFOUND;
861       add_section(G_SCHEMA_NAME || '.HZ_DQM_PARTY_GRP',l_attr,l_stype);
862     END LOOP;
863     CLOSE c_attrs;
864     IF l_stype='FIELD' THEN
865       FOR I in 1..(64-l_cnt) LOOP
866         add_section(G_SCHEMA_NAME || '.HZ_DQM_PARTY_GRP','M'||I,l_stype);
867       END LOOP;
868     ELSE
869       FOR I in 1..(255-l_cnt) LOOP
870         add_section(G_SCHEMA_NAME || '.HZ_DQM_PARTY_GRP','M'||I,l_stype);
871       END LOOP;
872     END IF;
873 
874 
875   END IF;
876 
877   IF p_entity='PARTY_SITES' THEN
878     log('Creating party_site_ds..',FALSE);
879     ctx_ddl.create_section_group(G_SCHEMA_NAME || '.HZ_DQM_PS_GRP','BASIC_SECTION_GROUP');
880     OPEN c_num_attrs('PARTY_SITES');
881     FETCH c_num_attrs INTO l_cnt;
882     CLOSE c_num_attrs;
883     l_cnt := l_cnt;
884     IF l_cnt>54 THEN
885       l_stype := 'ZONE';
886     ELSE
887       l_stype := 'FIELD';
888     END IF;
889     OPEN c_attrs('PARTY_SITES');
890     LOOP
891       FETCH c_attrs INTO l_attr;
892       EXIT WHEN c_attrs%NOTFOUND;
893       add_section(G_SCHEMA_NAME || '.HZ_DQM_PS_GRP',l_attr,l_stype);
894     END LOOP;
895     CLOSE c_attrs;
896     IF l_stype='FIELD' THEN
897       FOR I in 1..(64-l_cnt) LOOP
898         add_section(G_SCHEMA_NAME || '.HZ_DQM_PS_GRP','M'||I,l_stype);
899       END LOOP;
900     ELSE
901       FOR I in 1..(255-l_cnt) LOOP
902         add_section(G_SCHEMA_NAME || '.HZ_DQM_PS_GRP','M'||I,l_stype);
903       END LOOP;
904     END IF;
905 
906   END IF;
907 
908   IF p_entity='CONTACTS' THEN
909     log('Creating contact_ds..',FALSE);
910     ctx_ddl.create_section_group(G_SCHEMA_NAME || '.HZ_DQM_CONTACT_GRP','BASIC_SECTION_GROUP');
911     OPEN c_num_attrs('CONTACTS');
912     FETCH c_num_attrs INTO l_cnt;
913     CLOSE c_num_attrs;
914     l_cnt := l_cnt;
915     IF l_cnt>64 THEN
916       l_stype := 'ZONE';
917     ELSE
918       l_stype := 'FIELD';
919     END IF;
920     OPEN c_attrs('CONTACTS');
921     LOOP
922       FETCH c_attrs INTO l_attr;
923       EXIT WHEN c_attrs%NOTFOUND;
924       add_section(G_SCHEMA_NAME || '.HZ_DQM_CONTACT_GRP',l_attr,l_stype);
925     END LOOP;
926     CLOSE c_attrs;
927     IF l_stype='FIELD' THEN
928       FOR I in 1..(64-l_cnt) LOOP
929         add_section(G_SCHEMA_NAME || '.HZ_DQM_CONTACT_GRP','M'||I,l_stype);
930       END LOOP;
931     ELSE
932       FOR I in 1..(255-l_cnt) LOOP
933         add_section(G_SCHEMA_NAME || '.HZ_DQM_CONTACT_GRP','M'||I,l_stype);
934       END LOOP;
935     END IF;
936 
937   END IF;
938 
939   IF p_entity='CONTACT_POINTS' THEN
940     log('Creating contact_pt_ds..',FALSE);
941     ctx_ddl.create_section_group(G_SCHEMA_NAME || '.HZ_DQM_CPT_GRP','BASIC_SECTION_GROUP');
942     add_section(G_SCHEMA_NAME || '.HZ_DQM_CPT_GRP','CONTACT_POINT_TYPE',l_stype);
943     OPEN c_num_attrs('CONTACT_POINTS');
944     FETCH c_num_attrs INTO l_cnt;
945     CLOSE c_num_attrs;
946     l_cnt := l_cnt+1;
947     IF l_cnt>64 THEN
948       l_stype := 'ZONE';
949     ELSE
950       l_stype := 'FIELD';
951     END IF;
952     OPEN c_attrs('CONTACT_POINTS');
953     LOOP
954       FETCH c_attrs INTO l_attr;
955       EXIT WHEN c_attrs%NOTFOUND;
956       add_section(G_SCHEMA_NAME || '.HZ_DQM_CPT_GRP',l_attr,l_stype);
957     END LOOP;
958     CLOSE c_attrs;
959     IF l_stype='FIELD' THEN
960       FOR I in 1..(64-l_cnt) LOOP
961         add_section(G_SCHEMA_NAME || '.HZ_DQM_CPT_GRP','M'||I,l_stype);
962       END LOOP;
963     ELSE
964       FOR I in 1..(255-l_cnt) LOOP
965         add_section(G_SCHEMA_NAME || '.HZ_DQM_CPT_GRP','M'||I,l_stype);
966       END LOOP;
967     END IF;
968   END IF;
969 
970   IF p_entity='PARTY' THEN
971     get_datastore_cols('PARTY', pref_cols, proc_cols, tmp);
972     create_pref(G_SCHEMA_NAME || '.hz_party_ds',pref_cols);
973   END IF;
974 
975   IF p_entity='PARTY_SITES' THEN
976     get_datastore_cols('PARTY_SITES', pref_cols, proc_cols, tmp);
977     create_pref(G_SCHEMA_NAME || '.hz_party_site_ds',pref_cols);
978   END IF;
979 
980   IF p_entity='CONTACTS' THEN
981     get_datastore_cols('CONTACTS', pref_cols, proc_cols, tmp);
982     create_pref(G_SCHEMA_NAME || '.hz_contact_ds',pref_cols);
983   END IF;
984 
985   IF p_entity='CONTACT_POINTS' THEN
986     get_datastore_cols('CONTACT_POINTS', pref_cols, proc_cols, tmp);
987     create_pref(G_SCHEMA_NAME || '.hz_contact_point_ds',pref_cols);
988   END IF;
989 
990   log('Done creating datastore prefs for ' || p_entity );
991 EXCEPTION
992   WHEN OTHERS THEN
993     log('Error in gen ds '||SQLERRM);
994     RAISE;
995 END;
996 
997 
998 PROCEDURE generate_datastore_prefs IS
999 
1000 BEGIN
1001   generate_datastore_prefs('PARTY');
1002   generate_datastore_prefs('PARTY_SITES');
1003   generate_datastore_prefs('CONTACTS');
1004   generate_datastore_prefs('CONTACT_POINTS');
1005 END;
1006 
1007 PROCEDURE drop_indexes IS
1008 
1009 l_status VARCHAR2(255);
1010 l_index_owner VARCHAR2(255);
1011 l_temp VARCHAR2(255);
1012 
1013 l_bool BOOLEAN;
1014 
1015 BEGIN
1016 
1017   l_bool := fnd_installation.GET_APP_INFO('AR',l_status,l_temp,l_index_owner);
1018 
1019   log('Dropping Indexes');
1020   BEGIN
1021       EXECUTE IMMEDIATE 'DROP INDEX ' || l_index_owner || '.hz_stage_parties_t1 FORCE';
1022       log('Dropped hz_stage_parties_t1');
1023   EXCEPTION
1024       WHEN OTHERS THEN
1025         NULL;
1026   END;
1027   BEGIN
1028       EXECUTE IMMEDIATE 'DROP INDEX ' || l_index_owner || '.hz_stage_party_sites_t1 FORCE';
1029       log('Dropped hz_stage_party_sites_t1');
1030   EXCEPTION
1031       WHEN OTHERS THEN
1032         NULL;
1033   END;
1034   BEGIN
1035       EXECUTE IMMEDIATE 'DROP INDEX ' || l_index_owner || '.hz_stage_contact_t1 FORCE';
1036       log('Dropped hz_stage_contact_t1');
1037   EXCEPTION
1038       WHEN OTHERS THEN
1039         NULL;
1040   END;
1041   BEGIN
1042       EXECUTE IMMEDIATE 'DROP INDEX ' || l_index_owner || '.hz_stage_cpt_t1 FORCE';
1043       log('Dropped hz_stage_cpt_t1');
1044   EXCEPTION
1045       WHEN OTHERS THEN
1046         NULL;
1047   END;
1048   log('Done with dropping indexes');
1049 END;
1050 
1051 PROCEDURE drop_btree_indexes IS
1052 l_status VARCHAR2(255);
1053 l_owner1 VARCHAR2(255);
1054 l_temp VARCHAR2(255);
1055 BEGIN
1056 IF (fnd_installation.GET_APP_INFO('AR',l_status,l_temp,l_owner1)) THEN
1057   FOR IDX in (
1058     SELECT OWNER||'.'||INDEX_NAME idx_name
1059     FROM sys.all_indexes i, hz_trans_attributes_vl a, hz_trans_functions_vl f
1060     WHERE f.attribute_id = a.attribute_id
1061     AND i.owner = l_owner1
1062     AND f.index_required_flag in ('Y','T')
1063     AND i.INDEX_NAME = decode(a.entity_name,'PARTY','HZ_STAGED_PARTIES',
1064                   'PARTY_SITES','HZ_STAGED_PARTY_SITES','CONTACTS','HZ_STAGED_CONTACTS',
1065                   'CONTACT_POINTS','HZ_STAGED_CONTACT_POINTS')||'_N'||f.function_id) LOOP
1066     EXECUTE IMMEDIATE 'DROP INDEX '||IDX.idx_name;
1067   END LOOP;
1068   UPDATE hz_trans_functions_b set index_required_flag='N' where index_required_flag='T';
1069 END IF;
1070 END;
1071 
1072 PROCEDURE create_log(
1073    p_operation VARCHAR2,
1074    p_step VARCHAR2,
1075    p_worker_number NUMBER DEFAULT 0,
1076    p_num_workers NUMBER DEFAULT 0) IS
1077 
1078 BEGIN
1079 
1080   INSERT INTO HZ_DQM_STAGE_LOG (
1081 	OPERATION,
1082 	NUMBER_OF_WORKERS,
1083         WORKER_NUMBER,
1084 	STEP,
1085 	START_FLAG,
1086 	START_TIME,
1087 	END_FLAG,
1088 	END_TIME,
1089 	CREATED_BY,
1090 	CREATION_DATE,
1091 	LAST_UPDATE_LOGIN,
1092 	LAST_UPDATE_DATE,
1093 	LAST_UPDATED_BY)
1094    VALUES (
1095         substr(p_operation,1,30),
1096         p_num_workers,
1097         p_worker_number,
1098 	p_step,
1099         NULL,
1100 	NULL,
1101 	NULL,
1102 	NULL,
1103 	hz_utility_pub.created_by,
1104         hz_utility_pub.creation_date,
1105         hz_utility_pub.last_update_login,
1106         hz_utility_pub.last_update_date,
1107         hz_utility_pub.user_id
1108    );
1109 END;
1110 
1111 FUNCTION get_size (
1112         p_table_name       IN   VARCHAR2
1113         ) RETURN  NUMBER IS
1114    l_status VARCHAR2(255);
1115    l_owner1 VARCHAR2(255);
1116    l_temp VARCHAR2(255);
1117 
1118    CURSOR c_number_of_blocks is
1119                   SELECT blocks - empty_blocks
1120                   FROM sys.dba_tables
1121                   WHERE table_name = p_table_name and owner = l_owner1;
1122    CURSOR  c_db_block_size is  SELECT value
1123                   FROM v$parameter
1124                   WHERE name = 'db_block_size' ;
1125    l_db_block_size NUMBER;
1126    l_number_of_blocks NUMBER;
1127 
1128    BEGIN
1129       IF (fnd_installation.GET_APP_INFO('AR',l_status,l_temp,l_owner1)) THEN
1130          OPEN c_number_of_blocks;
1131          FETCH c_number_of_blocks into l_number_of_blocks;
1132          CLOSE c_number_of_blocks;
1133          OPEN c_db_block_size;
1134          FETCH c_db_block_size into l_db_block_size;
1135          CLOSE c_db_block_size;
1136      END IF;
1137      RETURN  (l_number_of_blocks * l_db_block_size) / 1000000;
1138     EXCEPTION
1139       WHEN OTHERS THEN
1140       RETURN 0;
1141    END;
1142 
1143 FUNCTION check_rebuild(p_entity VARCHAR2)
1144   RETURN BOOLEAN IS
1145 -- this cursor will return the number of active transformations
1146 -- that have not been staged, corresponding to the passed in entity
1147   CURSOR check_any_acq IS
1148     SELECT count(1)
1149     from hz_trans_attributes_vl a
1150     where a.entity_name = p_entity
1151     and exists (
1152       SELECT 1 from hz_trans_functions_vl f
1153       where a.attribute_id = f.attribute_id
1154       and nvl(f.ACTIVE_FLAG,'Y') = 'Y'
1155       and primary_flag = 'Y'
1156       AND NVL(STAGED_FLAG,'N') ='N');
1157 -- this cursor will return if there are any preference values
1158 -- that exist, for the passed in entity
1159   CURSOR check_ds_misc_proc IS
1160     select 1 from ctx_preference_values
1161     where prv_preference =
1162        decode(p_entity,'PARTY','HZ_PARTY_DS',
1163                        'PARTY_SITES','HZ_PARTY_SITE_DS',
1164                        'CONTACTS','HZ_CONTACT_DS',
1165                        'CONTACT_POINTS','HZ_CONTACT_POINT_DS',
1166                        'NOMATCH')
1167     AND prv_owner = g_schema_name
1168     AND prv_attribute='COLUMNS'
1169     AND upper(prv_value) like '%HZDQM.M%';
1170 
1171 tmp NUMBER;
1172 l_num_primary NUMBER;
1173 l_next_misc_section NUMBER;
1174 check_section_str VARCHAR2(2000);
1175 l_table_name VARCHAR2(255);
1176 BEGIN
1177 log ('--------------------------------------');
1178 -- If profile option is Optimal we FORCE A REBUILD.
1179 IF upper ( nvl( FND_PROFILE.value('HZ_DQM_INDEX_BUILD_TYPE'), 'Optimal') ) = upper('Optimal')
1180 THEN
1181      IF new_transformations_exist(p_entity)
1182      THEN
1183           log(' Chosen Profile Option is OPTIMAL');
1184           log(' check rebuild returns TRUE -- Do a REBUILD');
1185           RETURN TRUE ;
1186      ELSE
1187           log(' Chosen Profile Option is OPTIMAL');
1188           log(' But there are no new transformations to be staged for ' || p_entity );
1189           log(' check rebuild returns FALSE -- Do not REBUILD');
1190           RETURN FALSE  ;
1191      END IF ;
1192 -- If profile option is incremental, we attempt TO SEE IF WE CAN AVOID A REBUILD
1193 ELSE
1194           log(' Chosen Profile Option is INCREMENTAL ');
1195           log(' Starting to figure out, if a REBUILD can be avoided');
1196           -- if no active unstaged transformatons exist for the passed in entity return FALSE
1197           -- ie., DO NOT REBUILD
1198           OPEN check_any_acq;
1199           FETCH check_any_acq INTO l_num_primary;
1200           IF l_num_primary=0 THEN
1201             CLOSE check_any_acq;
1202             log(' check rebuild returns FALSE -- Do not REBUILD');
1203             RETURN FALSE;
1204           END IF;
1205           CLOSE check_any_acq;
1206           -- if atleast one active unstaged transformation exists, check if the preference
1207           -- values exist for this entity. If preference values do not exist, return TRUE
1208           -- ie., DO A REBUILD
1209           OPEN check_ds_misc_proc;
1210           FETCH check_ds_misc_proc INTO tmp;
1211           IF check_ds_misc_proc%NOTFOUND THEN
1212             CLOSE check_ds_misc_proc;
1213             log(' check rebuild returns TRUE -- Do a REBUILD');
1214             RETURN TRUE;
1215           END IF;
1216           CLOSE check_ds_misc_proc;
1217 
1218           -- if preference values exist for this entity, find the maximum temp_section for this entity
1219           -- and offset it by how many ever unstaged active transformations are found
1220           BEGIN
1221             SELECT max(to_number(substrb(temp_section,2)))+l_num_primary
1222             INTO l_next_misc_section
1223             from hz_trans_attributes_vl a
1224             where a.entity_name = p_entity
1225             and a.temp_section IS NOT NULL;
1226             IF l_next_misc_section IS NULL THEN
1227                l_next_misc_section := l_num_primary;
1228             END IF;
1229           EXCEPTION
1230             WHEN NO_DATA_FOUND THEN
1231               l_next_misc_section := l_num_primary;
1232           END;
1233 
1234           SELECT decode(p_entity,'PARTY','HZ_STAGED_PARTIES',
1235                                'PARTY_SITES','HZ_STAGED_PARTIES',
1236                                'CONTACTS','HZ_STAGED_CONTACTS',
1237                                'CONTACT_POINTS','HZ_STAGED_CONTACT_POINTS','DUMMY')
1238           INTO l_table_name
1239           from DUAL;
1240 
1241           -- See if the intermedia index on the corresponding staging table for the entity
1242           -- has the placeholders for these sections.
1243           -- The check that is done here is to see if the dummy string CHECK exists with in the section
1244           -- by executing the folowing SQL. If this SQL errors out, it means the section doesnt exist
1245           -- or equivalently there are no placeholders.
1246           check_section_str :=
1247             'SELECT 1 FROM '||l_table_name||
1248             ' WHERE ROWNUM=1 AND CONTAINS(concat_col,''({CHECK} within M'||l_next_misc_section||')'')>0';
1249           log('Check STR ' ||check_section_str);
1250           BEGIN
1251             EXECUTE IMMEDIATE check_section_str;
1252             -- if section exists DO NOT REBUILD
1253             log(' check rebuild returns FALSE -- Do not REBUILD');
1254             RETURN FALSE;
1255           EXCEPTION
1256             WHEN OTHERS THEN
1257               log('Error ' ||SQLERRM);
1258               -- if section does not exist REBUILD
1259               log(' check rebuild returns TRUE -- Do a REBUILD');
1260               RETURN TRUE;
1261           END;
1262   END IF ;
1263 END;
1264 
1265 
1266 PROCEDURE Stage (
1267         errbuf                  OUT NOCOPY    VARCHAR2,
1268         retcode                 OUT NOCOPY   VARCHAR2,
1269         p_num_workers           IN      VARCHAR2,
1270         p_command		IN	VARCHAR2,
1271         p_continue		IN	VARCHAR2,
1272         p_tablespace		IN	VARCHAR2,
1273 	p_index_creation	IN	VARCHAR2
1274 ) IS
1275 
1276 TYPE nTable IS TABLE OF NUMBER index by binary_integer;
1277 TYPE vTable IS TABLE OF VARCHAR2(255) index by binary_integer;
1278 l_sub_requests nTable;
1279 l_req_status vTable;
1280 
1281 uphase VARCHAR2(255);
1282 dphase VARCHAR2(255);
1283 ustatus VARCHAR2(255);
1284 dstatus VARCHAR2(255);
1285 message VARCHAR2(32000);
1286 
1287 CURSOR c_primary(cp_entity_name VARCHAR2) IS
1288   SELECT f.TRANSFORMATION_NAME, f.STAGED_ATTRIBUTE_COLUMN
1289   FROM HZ_TRANS_FUNCTIONS_VL f, HZ_TRANS_ATTRIBUTES_VL a
1290   WHERE PRIMARY_FLAG = 'Y'
1291   AND nvl(f.ACTIVE_FLAG,'Y') = 'Y'
1292   AND f.ATTRIBUTE_ID = a.ATTRIBUTE_ID
1293   AND a.ENTITY_NAME = cp_entity_name;
1294 
1295 l_trans_name HZ_TRANS_FUNCTIONS_VL.TRANSFORMATION_NAME%TYPE;
1296 l_stg_attr HZ_TRANS_FUNCTIONS_VL.STAGED_ATTRIBUTE_COLUMN%TYPE;
1297 
1298 l_cols VARCHAR2(4000);
1299 l_message VARCHAR2(4000);
1300 l_status VARCHAR2(255) := 'NORMAL';
1301 
1302 l_num_workers NUMBER;
1303 l_num_funcs NUMBER;
1304 l_req_id  NUMBER;
1305 l_bool BOOLEAN;
1306 l_continue VARCHAR2(1) := 'N';
1307 
1308 l_party_prim_tx NUMBER := 1;
1309 l_ps_prim_tx NUMBER := 1;
1310 l_contact_prim_tx NUMBER := 1;
1311 l_cpt_prim_tx NUMBER := 1;
1312 
1313 l_index_owner VARCHAR2(255);
1314 l_temp VARCHAR2(255);
1315 
1316 l_num_prll VARCHAR2(255);
1317 l_idx_mem VARCHAR2(255);
1318 
1319 
1320 T NUMBER;
1321 
1322 l_index_creation VARCHAR2(255) := 'PARALLEL';
1323 
1324 l_command VARCHAR2(255);
1325 l_last_num_workers NUMBER;
1326 l_num_stage_stepS NUMBER;
1327 reco_staging_size NUMBER;
1328 reco_staging_parties NUMBER;
1329 reco_staging_party_sites NUMBER;
1330 reco_staging_contacts NUMBER;
1331 reco_staging_contact_points NUMBER;
1332 reco_index_size NUMBER;
1333 safety_factor NUMBER(5, 1) := 2.0 ;
1334 sizing_factor NUMBER(5, 1) := 5;
1335 
1336 l_index VARCHAR2(255);
1337 
1338 ctx_tbsp VARCHAR2(255);
1339 ctx_index_tbsp VARCHAR2(255);
1340 
1341 l_rebuild_party_idx BOOLEAN:=FALSE;
1342 l_rebuild_psite_idx BOOLEAN:=FALSE;
1343 l_rebuild_contact_idx BOOLEAN:=FALSE;
1344 l_rebuild_cpt_idx BOOLEAN:=FALSE;
1345 
1346 l_step VARCHAR2(255);
1347 l_is_wildchar NUMBER;
1348 --Start of Bug No: 4292425
1349 req_data varchar2(100);
1350 l_workers_completed boolean;
1351 --End of Bug No: 4292425
1352 --Start of Bug 4915282
1353 l_realtime_sync_value VARCHAR2(15);
1354 CURSOR c_sync is select 1 from hz_dqm_sync_interface where staged_flag  <> 'E' and rownum=1;
1355 l_sync_count NUMBER;
1356 l_profile_save boolean;
1357 --End of Bug 4915282
1358 BEGIN
1359   retcode := 0;
1360  -- req_data will be null the first time, by default
1361  req_data := fnd_conc_global.request_data;
1362  IF (req_data IS NULL) THEN --Bug No: 4292425
1363   l_index_creation := nvl(p_index_creation,'PARALLEL');
1364   l_realtime_sync_value := nvl(FND_PROFILE.VALUE('HZ_DQM_ENABLE_REALTIME_SYNC'), 'Y'); --4915282
1365   IF p_num_workers IS NULL THEN
1366     l_num_workers:=1;
1367   ELSE
1368     l_num_workers := to_number(p_num_workers);
1369   END IF;
1370   log('------------------------------');
1371   outandlog('Starting Concurrent Program ''Stage Party Data''');
1372   outandlog('Start Time ' || TO_CHAR(SYSDATE, 'DD-MON-YYYY HH24:MI:SS'));
1373   outandlog('NEWLINE');
1374 
1375   l_command:=p_command;
1376   l_continue:=nvl(p_continue,'N');
1377   FND_MSG_PUB.initialize;
1378 
1379   l_bool := fnd_installation.GET_APP_INFO('AR',l_status,l_temp,l_index_owner);
1380 
1381   IF l_command = 'ESTIMATE_SIZE' THEN
1382       reco_staging_parties := ceil(get_size('HZ_PARTIES') * 1.5 * safety_factor);
1383       reco_staging_party_sites := ceil(get_size('HZ_PARTY_SITES') * 3.0 * safety_factor);
1384       reco_staging_contacts := ceil(get_size('HZ_ORG_CONTACTS') * 2.5 * safety_factor);
1385       reco_staging_contact_points := ceil(get_size('HZ_CONTACT_POINTS') * 2.0 * safety_factor);
1386       reco_index_size := 0.85 * (reco_staging_parties +  reco_staging_party_sites +  reco_staging_contacts +  reco_staging_contact_points);
1387       reco_staging_size :=  reco_staging_parties +  reco_staging_party_sites +  reco_staging_contacts +  reco_staging_contact_points + reco_index_size;
1388 
1389       outandlog('The estimated disk space required for HZ_STAGED_PARTIES = ' || reco_staging_parties || 'MB' );
1390       outandlog('The estimated disk space required for HZ_STAGED_PARTY_SITES = ' ||reco_staging_party_sites || 'MB' );
1391       outandlog('The estimated disk space required for HZ_STAGED_CONTACTS = ' ||reco_staging_contacts || 'MB' );
1392       outandlog('The estimated disk space required for HZ_STAGED_CONTACT_POINTS = ' || reco_staging_contact_points || 'MB' );
1393       outandlog('The estimated disk space required by text indexes = ' ||reco_index_size || 'MB' );
1394       outandlog(' ');
1395       outandlog('The estimated total disk space required for staging = ' ||reco_staging_size || 'MB' );
1396       outandlog('NEWLINE');
1397    ELSIF l_command = 'ANALYZE_STAGED_TABLES' THEN
1398        outandlog('Staged tables being analyzed');
1399        gather_stats(l_index_owner, 'HZ_STAGED_PARTIES');
1400        gather_stats(l_index_owner, 'HZ_STAGED_PARTY_SITES');
1401        gather_stats(l_index_owner, 'HZ_STAGED_CONTACTS');
1402        gather_stats(l_index_owner, 'HZ_STAGED_CONTACT_POINTS');
1403        outandlog('Staged tables analyzed, End Time : '|| TO_CHAR(SYSDATE, 'MM-DD-YY HH24:MI:SS'));
1404   END IF;
1405 
1406   IF l_command = 'STAGE_NEW_DENORM' THEN
1407           outandlog('Staging new denormalized attributes.');
1408           generate_map_pkg;
1409           FOR I in 1..10 LOOP
1410               l_sub_requests(i) := 1;
1411           END LOOP;
1412           IF FND_PROFILE.value('HZ_DQM_INDEX_PARALLEL') IS NOT NULL THEN
1413               l_num_prll := FND_PROFILE.value('HZ_DQM_INDEX_PARALLEL');
1414           ELSE
1415               l_num_prll := NULL;
1416           END IF;
1417           IF FND_PROFILE.value('HZ_DQM_INDEX_MEMORY') IS NOT NULL THEN
1418               l_idx_mem := FND_PROFILE.value('HZ_DQM_INDEX_MEMORY');
1419           ELSE
1420               BEGIN
1421                    SELECT PAR_VALUE INTO l_idx_mem
1422                    FROM CTX_PARAMETERS
1423                    WHERE PAR_NAME = 'MAX_INDEX_MEMORY';
1424               EXCEPTION
1425                    WHEN NO_DATA_FOUND THEN
1426                    BEGIN
1427                        SELECT PAR_VALUE INTO l_idx_mem
1428                        FROM CTX_PARAMETERS
1429                        WHERE PAR_NAME = 'DEFAULT_INDEX_MEMORY';
1430                    EXCEPTION
1431                        WHEN NO_DATA_FOUND THEN
1432                        l_idx_mem := '0';
1433                   END;
1434                END;
1435            END IF;
1436            l_req_id := FND_REQUEST.SUBMIT_REQUEST('AR', 'ARHDQMCR',
1437                 'DQM Create Index', to_char(sysdate,'DD-MON-YY HH24:MI:SS'), --bug 4641081
1438                 TRUE, to_char(l_sub_requests(1)), to_char(l_sub_requests(2)),
1439                 to_char(l_sub_requests(3)), to_char(l_sub_requests(4)),
1440                 to_char(l_sub_requests(5)), to_char(l_sub_requests(6)),
1441                 to_char(l_sub_requests(7)), to_char(l_sub_requests(8)),
1442                 to_char(l_sub_requests(9)), to_char(l_sub_requests(10)),
1443                 'STAGE_NEW_DENORM', l_idx_mem, l_num_prll, 'STAGE_NEW_DENORM');
1444            IF l_req_id = 0 THEN
1445                 log('Error submitting request');
1446                 log(fnd_message.get);
1447            ELSE
1448                 log('Submitted request ID for Party Index: ' || l_req_id );
1449                 log('Request ID : ' || l_req_id);
1450            END IF;
1451   END IF;
1452 
1453   IF l_command = 'STAGE_ALL_DATA' OR
1454      l_command = 'CREATE_INDEXES' OR
1455      l_command = 'STAGE_NEW_TRANSFORMATIONS' OR
1456      l_command = 'CREATE_MISSING_INVALID_INDEXES' THEN
1457 
1458     IF ((l_command = 'STAGE_ALL_DATA' OR l_command = 'STAGE_NEW_TRANSFORMATIONS') AND l_realtime_sync_value <> 'N') THEN
1459      l_profile_save := FND_PROFILE.save('HZ_DQM_ENABLE_REALTIME_SYNC','N','SITE'); -- Set sync method to BATCH. 4915282
1460     END IF;
1461 
1462     IF FND_PROFILE.value('HZ_DQM_INDEX_MEMORY') IS NOT NULL THEN
1463       l_idx_mem := FND_PROFILE.value('HZ_DQM_INDEX_MEMORY');
1464     ELSE
1465       BEGIN
1466         SELECT PAR_VALUE INTO l_idx_mem
1467         FROM CTX_PARAMETERS
1468         WHERE PAR_NAME = 'MAX_INDEX_MEMORY';
1469       EXCEPTION
1470         WHEN NO_DATA_FOUND THEN
1471           BEGIN
1472             SELECT PAR_VALUE INTO l_idx_mem
1473             FROM CTX_PARAMETERS
1474             WHERE PAR_NAME = 'DEFAULT_INDEX_MEMORY';
1475           EXCEPTION
1476             WHEN NO_DATA_FOUND THEN
1477               l_idx_mem := '0';
1478           END;
1479       END;
1480     END IF;
1481 
1482     IF FND_PROFILE.value('HZ_DQM_INDEX_PARALLEL') IS NOT NULL THEN
1483       l_num_prll := FND_PROFILE.value('HZ_DQM_INDEX_PARALLEL');
1484     ELSE
1485       l_num_prll := NULL;
1486     END IF;
1487 
1488     BEGIN
1489         ctx_ddl.drop_preference('HZ_DQM_STORAGE');
1490       EXCEPTION
1491        WHEN OTHERS THEN
1492          NULL;
1493       END;
1494 
1495     IF p_tablespace IS NOT NULL THEN
1496       ctx_tbsp := p_tablespace;
1497       ctx_index_tbsp := p_tablespace;
1498     ELSE
1499       select tablespace, index_tablespace
1500       into ctx_tbsp, ctx_index_tbsp
1501       from fnd_product_installations
1502       where application_id = '222';
1503     END IF;
1504 
1505       ctx_ddl.create_preference('HZ_DQM_STORAGE', 'BASIC_STORAGE');
1506       ctx_ddl.set_attribute('HZ_DQM_STORAGE', 'I_TABLE_CLAUSE', 'tablespace '|| ctx_tbsp|| ' storage (initial 4K next 8M pctincrease 0)');
1507       ctx_ddl.set_attribute('HZ_DQM_STORAGE', 'K_TABLE_CLAUSE', 'tablespace ' || ctx_tbsp || ' storage (initial 4K next 8M pctincrease 0)');
1508       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) ');
1509       ctx_ddl.set_attribute('HZ_DQM_STORAGE', 'I_INDEX_CLAUSE', 'tablespace '|| ctx_index_tbsp || '  storage (initial 4K next 8M pctincrease 0)  compress 2');
1510 
1511   END IF;
1512 
1513   BEGIN
1514     ctx_ddl.drop_preference('dqm_lexer');
1515   EXCEPTION
1516     WHEN OTHERS THEN
1517       null;
1518   END;
1519 
1520   ctx_ddl.create_preference('dqm_lexer', 'BASIC_LEXER');
1521   ctx_ddl.set_attribute ( 'dqm_lexer', 'index_themes', 'NO');
1522   ctx_ddl.set_attribute ( 'dqm_lexer', 'index_text', 'YES');
1523 
1524   IF l_command = 'GENERATE_MAP_PROC' THEN
1525     log (' In the GENERATE_MAP_PROC flow');
1526     generate_map_pkg;
1527   ELSIF l_command = 'STAGE_NEW_TRANSFORMATIONS' THEN
1528     log (' In the STAGE_NEW_TRANSFORMATIONS flow');
1529     BEGIN
1530       SELECT number_of_workers INTO l_last_num_workers
1531       FROM HZ_DQM_STAGE_LOG
1532       WHERE operation = l_command
1533       AND STEP = 'INIT';
1534 
1535       IF l_last_num_workers<>l_num_workers AND l_continue = 'Y' THEN
1536         log('Cannot continue with different number of workers. Using ' ||
1537              l_last_num_workers ||' workers, as specified in first run');
1538         l_num_workers := l_last_num_workers;
1539       END IF;
1540     EXCEPTION
1541       WHEN NO_DATA_FOUND THEN
1542         l_continue := 'N';
1543     END;
1544     IF l_continue <> 'Y' THEN
1545        verify_all_procs;
1546        generate_map_upd_pkg(l_rebuild_party_idx,l_rebuild_psite_idx,
1547             l_rebuild_contact_idx,l_rebuild_cpt_idx);
1548        log('*** After gen upd '||l_continue);
1549 
1550        -- Generate preferences for all entities based on the corresponding boolean populated
1551        -- by generate_map_upd_pkg.
1552        -- In particular, if the profile option HZ_DQM_INDEX_BUILD_TYPE is chosen to be Optimal
1553        -- datastore preferences will always be rebuilt.
1554 
1555        IF l_rebuild_party_idx THEN
1556          generate_datastore_prefs('PARTY');
1557        END IF;
1558        IF l_rebuild_psite_idx THEN
1559          generate_datastore_prefs('PARTY_SITES');
1560        END IF;
1561        IF l_rebuild_contact_idx THEN
1562          generate_datastore_prefs('CONTACTS');
1563        END IF;
1564        IF l_rebuild_cpt_idx THEN
1565          generate_datastore_prefs('CONTACT_POINTS');
1566        END IF;
1567 
1568       DELETE from HZ_DQM_STAGE_LOG where operation = l_command;
1569       create_log(
1570         p_operation=>l_command,
1571         p_step=>'INIT',
1572         p_num_workers=>l_num_workers);
1573 
1574       l_num_stage_steps := g_num_stage_new_steps;
1575 
1576       FOR I in 1..l_num_stage_steps LOOP
1577         FOR J in 0..(l_num_workers-1) LOOP
1578           create_log(
1579             p_operation=>l_command,
1580             p_step=>'STEP'||I,
1581             p_worker_number=> J,
1582             p_num_workers=>l_num_workers);
1583         END LOOP;
1584       END LOOP;
1585 
1586       DELETE from HZ_DQM_STAGE_LOG where operation = 'CREATE_INDEXES';
1587       IF l_rebuild_party_idx THEN
1588         create_log(
1589           p_operation=>'CREATE_INDEXES',
1590           p_step=>'HZ_PARTIES');
1591       ELSE
1592         create_log(
1593           p_operation=>'CREATE_INDEXES',
1594           p_step=>'HZ_PARTIES_BTREE');
1595       END IF;
1596 
1597       IF l_rebuild_psite_idx THEN
1598         create_log(
1599           p_operation=>'CREATE_INDEXES',
1600           p_step=>'HZ_PARTY_SITES');
1601       ELSE
1602         create_log(
1603           p_operation=>'CREATE_INDEXES',
1604           p_step=>'HZ_PARTY_SITES_BTREE');  ----
1605       END IF;
1606 
1607       IF l_rebuild_contact_idx THEN
1608         create_log(
1609           p_operation=>'CREATE_INDEXES',
1610           p_step=>'HZ_ORG_CONTACTS');
1611       ELSE
1612         create_log(
1613           p_operation=>'CREATE_INDEXES',
1614           p_step=>'HZ_ORG_CONTACTS_BTREE');
1615       END IF;
1616 
1617       IF l_rebuild_cpt_idx THEN
1618         create_log(
1619           p_operation=>'CREATE_INDEXES',
1620           p_step=>'HZ_CONTACT_POINTS');
1621       ELSE
1622         create_log(
1623           p_operation=>'CREATE_INDEXES',
1624           p_step=>'HZ_CONTACT_POINTS_BTREE');
1625       END IF;
1626 
1627     ELSE
1628       SELECT step INTO l_step
1629       FROM HZ_DQM_STAGE_LOG
1630       WHERE OPERATION = 'CREATE_INDEXES'
1631       AND step like 'HZ_PARTIES%';
1632 
1633       IF l_step ='HZ_PARTIES' THEN
1634         l_rebuild_party_idx:=TRUE;
1635       ELSE
1636         l_rebuild_party_idx:=FALSE;
1637       END IF;
1638 
1639       SELECT step INTO l_step
1640       FROM HZ_DQM_STAGE_LOG
1641       WHERE OPERATION = 'CREATE_INDEXES'
1642       AND step like 'HZ_PARTY_SITES%';
1643 
1644       IF l_step ='HZ_PARTY_SITES' THEN
1645         l_rebuild_psite_idx:=TRUE;
1646       ELSE
1647         l_rebuild_psite_idx:=FALSE;
1648       END IF;
1649 
1650       SELECT step INTO l_step
1651       FROM HZ_DQM_STAGE_LOG
1652       WHERE OPERATION = 'CREATE_INDEXES'
1653       AND step like 'HZ_ORG_CONTACTS%';
1654 
1655       IF l_step ='HZ_ORG_CONTACTS' THEN
1656         l_rebuild_contact_idx:=TRUE;
1657       ELSE
1658         l_rebuild_contact_idx:=FALSE;
1659       END IF;
1660 
1661       SELECT step INTO l_step
1662       FROM HZ_DQM_STAGE_LOG
1663       WHERE OPERATION = 'CREATE_INDEXES'
1664       AND step like 'HZ_CONTACT_POINTS%';
1665 
1666       IF l_step ='HZ_CONTACT_POINTS' THEN
1667         l_rebuild_cpt_idx:=TRUE;
1668       ELSE
1669         l_rebuild_cpt_idx:=FALSE;
1670       END IF;
1671     END IF;
1672     FOR I in 1..10 LOOP
1673         l_sub_requests(i) := 1;
1674     END LOOP;
1675     log('Spawning ' || l_num_workers || ' Workers for staging');
1676     FOR I in 1..l_num_workers LOOP
1677       l_sub_requests(i) := FND_REQUEST.SUBMIT_REQUEST('AR', 'ARHDQMSTW',
1678                     'Stage Party Data Worker ' || to_char(i),
1679                     to_char(sysdate,'DD-MON-YY HH24:MI:SS'), --bug 4641081
1680                     TRUE, to_char(l_num_workers), TO_CHAR(I), l_command,l_continue);
1681       IF l_sub_requests(i) = 0 THEN
1682         log('Error submitting worker ' || i);
1683         log(fnd_message.get);
1684       ELSE
1685         log('Submitted request for Worker ' || TO_CHAR(I) );
1686         log('Request ID : ' || l_sub_requests(i));
1687       END IF;
1688       EXIT when l_sub_requests(i) = 0;
1689     END LOOP;
1690 
1691 
1692     l_req_id := l_sub_requests(1);
1693 
1694     IF l_req_id>0 THEN
1695       IF l_rebuild_party_idx THEN
1696         l_index := 'HZ_PARTIES';
1697       ELSE
1698         l_index := 'HZ_PARTIES_BTREE';
1699       END IF;
1700       l_req_id := FND_REQUEST.SUBMIT_REQUEST('AR', 'ARHDQMCR',
1701              'DQM Create Index', to_char(sysdate,'DD-MON-YY HH24:MI:SS'), --bug 4641081
1702              TRUE, to_char(l_sub_requests(1)), to_char(l_sub_requests(2)),
1703              to_char(l_sub_requests(3)), to_char(l_sub_requests(4)),
1704              to_char(l_sub_requests(5)), to_char(l_sub_requests(6)),
1705              to_char(l_sub_requests(7)), to_char(l_sub_requests(8)),
1706              to_char(l_sub_requests(9)), to_char(l_sub_requests(10)),
1707              l_command, l_idx_mem, l_num_prll, l_index);
1708       IF l_req_id = 0 THEN
1709           log('Error submitting request');
1710           log(fnd_message.get);
1711       ELSE
1712           log('Submitted request ID for Party Index: ' || l_req_id );
1713           log('Request ID : ' || l_req_id);
1714       END IF;
1715     END IF;
1716 
1717     IF l_req_id>0 THEN
1718       IF l_rebuild_psite_idx THEN
1719         l_index := 'HZ_PARTY_SITES';
1720       ELSE
1721         l_index := 'HZ_PARTY_SITES_BTREE';
1722       END IF;
1723 
1724       l_req_id := FND_REQUEST.SUBMIT_REQUEST('AR', 'ARHDQMCR',
1725              'DQM Create Index', to_char(sysdate,'DD-MON-YY HH24:MI:SS'), --bug 4641081
1726                TRUE, to_char(l_sub_requests(1)), to_char(l_sub_requests(2)),
1727                to_char(l_sub_requests(3)), to_char(l_sub_requests(4)),
1728                to_char(l_sub_requests(5)), to_char(l_sub_requests(6)),
1729                to_char(l_sub_requests(7)), to_char(l_sub_requests(8)),
1730                to_char(l_sub_requests(9)), to_char(l_sub_requests(10)),
1731                l_command, l_idx_mem, l_num_prll, l_index);
1732       IF l_req_id = 0 THEN
1733           log('Error submitting request');
1734           log(fnd_message.get);
1735       ELSE
1736           log('Submitted request ID for Party Site Index: ' || l_req_id );
1737           log('Request ID : ' || l_req_id);
1738       END IF;
1739     END IF;
1740 
1741     IF l_req_id>0 THEN
1742       IF l_rebuild_contact_idx THEN
1743         l_index := 'HZ_ORG_CONTACTS';
1744       ELSE
1745         l_index := 'HZ_ORG_CONTACTS_BTREE';
1746       END IF;
1747       l_req_id := FND_REQUEST.SUBMIT_REQUEST('AR', 'ARHDQMCR',
1748                'DQM Create Index', to_char(sysdate,'DD-MON-YY HH24:MI:SS'), --bug 4641081
1749                TRUE, to_char(l_sub_requests(1)), to_char(l_sub_requests(2)),
1750                to_char(l_sub_requests(3)), to_char(l_sub_requests(4)),
1751                to_char(l_sub_requests(5)), to_char(l_sub_requests(6)),
1752                to_char(l_sub_requests(7)), to_char(l_sub_requests(8)),
1753                to_char(l_sub_requests(9)), to_char(l_sub_requests(10)),
1754                l_command, l_idx_mem, l_num_prll, l_index);
1755       IF l_req_id = 0 THEN
1756           log('Error submitting request');
1757           log(fnd_message.get);
1758       ELSE
1759           log('Submitted request ID for Party Index: ' || l_req_id );
1760           log('Request ID : ' || l_req_id);
1761       END IF;
1762     END IF;
1763 
1764     IF l_req_id>0 THEN
1765       IF l_rebuild_cpt_idx THEN
1766         l_index := 'HZ_CONTACT_POINTS';
1767       ELSE
1768         l_index := 'HZ_CONTACT_POINTS_BTREE';
1769       END IF;
1770       l_req_id := FND_REQUEST.SUBMIT_REQUEST('AR', 'ARHDQMCR',
1771                'DQM Create Index', to_char(sysdate,'DD-MON-YY HH24:MI:SS'), --bug 4641081
1772                TRUE, to_char(l_sub_requests(1)), to_char(l_sub_requests(2)),
1773                to_char(l_sub_requests(3)), to_char(l_sub_requests(4)),
1774                to_char(l_sub_requests(5)), to_char(l_sub_requests(6)),
1775                to_char(l_sub_requests(7)), to_char(l_sub_requests(8)),
1776                to_char(l_sub_requests(9)), to_char(l_sub_requests(10)),
1777                l_command, l_idx_mem, l_num_prll, l_index);
1778       IF l_req_id = 0 THEN
1779           log('Error submitting request');
1780           log(fnd_message.get);
1781       ELSE
1782           log('Submitted request ID for Contact Point Index: ' || l_req_id );
1783           log('Request ID : ' || l_req_id);
1784       END IF;
1785     END IF;
1786   ELSIF l_command = 'STAGE_NEW_TRANSFORMATIONS_NO_INDEXING' THEN
1787       log (' In the STAGE_NEW_TRANSFORMATIONS_NO_INDEXING flow');
1788       BEGIN
1789           SELECT number_of_workers INTO l_last_num_workers
1790           FROM HZ_DQM_STAGE_LOG
1791           WHERE operation = substr(l_command,1,30)
1792           AND STEP = 'INIT';
1793 
1794 
1795           IF l_last_num_workers<>l_num_workers AND l_continue = 'Y' THEN
1796             log('Cannot continue with different number of workers. Using ' ||
1797                  l_last_num_workers ||' workers, as specified in first run');
1798             l_num_workers := l_last_num_workers;
1799           END IF;
1800           EXCEPTION
1801           WHEN NO_DATA_FOUND THEN
1802             l_continue := 'N';
1803        END;
1804         IF l_continue <> 'Y' THEN
1805                  verify_all_procs;
1806                  generate_map_upd_pkg(l_rebuild_party_idx,l_rebuild_psite_idx,
1807                       l_rebuild_contact_idx,l_rebuild_cpt_idx);
1808                  log('*** After gen upd '||l_continue);
1809 
1810                  -- Generate preferences for all entities regardless
1811                  generate_datastore_prefs ;
1812 
1813 
1814 
1815                 DELETE from HZ_DQM_STAGE_LOG where operation = substr(l_command,1,30) ;
1816                 create_log(
1817                   p_operation=>l_command,
1818                   p_step=>'INIT',
1819                   p_num_workers=>l_num_workers);
1820 
1821                 l_num_stage_steps := g_num_stage_new_steps;
1822 
1823                 FOR I in 1..l_num_stage_steps LOOP
1824                   FOR J in 0..(l_num_workers-1) LOOP
1825                     create_log(
1826                       p_operation=>l_command,
1827                       p_step=>'STEP'||I,
1828                       p_worker_number=> J,
1829                       p_num_workers=>l_num_workers);
1830                   END LOOP;
1831                 END LOOP;
1832               END IF;
1833 
1834               FOR I in 1..10 LOOP
1835                   l_sub_requests(i) := 1;
1836               END LOOP;
1837 
1838               log('Spawning ' || l_num_workers || ' Workers for staging');
1839 
1840               -- Dispatch the Stage Data Worker
1841               FOR I in 1..l_num_workers LOOP
1842                 l_sub_requests(i) := FND_REQUEST.SUBMIT_REQUEST('AR', 'ARHDQMSTW',
1843                               'Stage Party Data Worker ' || to_char(i),
1844                               to_char(sysdate,'DD-MON-YY HH24:MI:SS'), --bug 4641081
1845                               TRUE, to_char(l_num_workers), TO_CHAR(I), l_command,l_continue);
1846                 IF l_sub_requests(i) = 0 THEN
1847                   log('Error submitting worker ' || i);
1848                   log(fnd_message.get);
1849                 ELSE
1850                   log('Submitted request for Worker ' || TO_CHAR(I) );
1851                   log('Request ID : ' || l_sub_requests(i));
1852                 END IF;
1853                 EXIT when l_sub_requests(i) = 0;
1854               END LOOP;
1855 
1856 ELSIF l_command = 'STAGE_ALL_DATA' THEN
1857 
1858     BEGIN
1859       SELECT count(*) into l_is_wildchar from HZ_DQM_STAGE_LOG where operation = 'STAGE_FOR_WILDCHAR_SEARCH' and rownum = 1 ;
1860       IF l_is_wildchar < 1 THEN
1861           INSERT INTO HZ_DQM_STAGE_LOG(operation, number_of_workers, worker_number, step,
1862                             last_update_date, creation_date, created_by, last_updated_by)
1863           VALUES ('STAGE_FOR_WILDCHAR_SEARCH', '-1', '-1', 'Y', SYSDATE, SYSDATE, 0, 0);
1864       END IF;
1865 
1866       SELECT number_of_workers INTO l_last_num_workers
1867       FROM HZ_DQM_STAGE_LOG
1868       WHERE operation = l_command
1869       AND STEP = 'INIT';
1870 
1871       IF l_last_num_workers<>l_num_workers AND l_continue = 'Y' THEN
1872         log('Cannot continue with different number of workers. Using ' ||
1873              l_last_num_workers ||' workers, as specified in first run');
1874         l_num_workers := l_last_num_workers;
1875       END IF;
1876 
1877 	   DELETE FROM AD_PARALLEL_UPDATES
1878 	 WHERE TABLE_NAME = 'HZ_PARTIES' AND script_name = 'HZ_TCA_DQM_STAGING_PROGRAM';
1879 
1880     EXCEPTION
1881       WHEN NO_DATA_FOUND THEN
1882         l_continue := 'N';
1883     END;
1884 
1885     IF l_continue <> 'Y' THEN
1886       verify_all_procs;
1887       IF l_command = 'STAGE_ALL_DATA' THEN
1888         drop_indexes;
1889         delete_existing_data;
1890 	UPDATE HZ_TRANS_FUNCTIONS_B SET STAGED_FLAG='N'; --Bug No: 3907584.
1891       END IF;
1892 
1893       generate_datastore_prefs;
1894       IF l_command = 'STAGE_ALL_DATA' THEN
1895         generate_map_pkg;
1896       END IF;
1897 
1898       DELETE from HZ_DQM_STAGE_LOG where operation = l_command;
1899       create_log(
1900         p_operation=>l_command,
1901         p_step=>'INIT',
1902         p_num_workers=>l_num_workers);
1903 
1904       IF l_command = 'STAGE_ALL_DATA' THEN
1905         l_num_stage_steps := g_num_stage_steps;
1906       ELSE
1907         l_num_stage_steps := g_num_stage_new_steps;
1908       END IF;
1909 
1910       FOR I in 1..l_num_stage_steps LOOP
1911         FOR J in 0..(l_num_workers-1) LOOP
1912           create_log(
1913             p_operation=>l_command,
1914             p_step=>'STEP'||I,
1915             p_worker_number=> J,
1916             p_num_workers=>l_num_workers);
1917         END LOOP;
1918       END LOOP;
1919       DELETE from HZ_DQM_STAGE_LOG where operation = 'CREATE_INDEXES';
1920       create_log(
1921           p_operation=>'CREATE_INDEXES',
1922           p_step=>'HZ_PARTIES');
1923       create_log(
1924           p_operation=>'CREATE_INDEXES',
1925           p_step=>'HZ_PARTY_SITES');
1926       create_log(
1927           p_operation=>'CREATE_INDEXES',
1928           p_step=>'HZ_ORG_CONTACTS');
1929       create_log(
1930           p_operation=>'CREATE_INDEXES',
1931           p_step=>'HZ_CONTACT_POINTS');
1932     END IF;
1933 
1934     FOR I in 1..10 LOOP
1935       l_sub_requests(i) := 1;
1936     END LOOP;
1937 
1938 
1939     log('Spawning ' || l_num_workers || ' Workers for staging');
1940     FOR I in 1..l_num_workers LOOP
1941       l_sub_requests(i) := FND_REQUEST.SUBMIT_REQUEST('AR', 'ARHDQMSTW',
1942                     'Stage Party Data Worker ' || to_char(i),
1943                     to_char(sysdate,'DD-MON-YY HH24:MI:SS'), --bug 4641081
1944                     TRUE, to_char(l_num_workers), TO_CHAR(I), l_command,l_continue);
1945       IF l_sub_requests(i) = 0 THEN
1946         log('Error submitting worker ' || i);
1947         log(fnd_message.get);
1948       ELSE
1949         log('Submitted request for Worker ' || TO_CHAR(I) );
1950         log('Request ID : ' || l_sub_requests(i));
1951       END IF;
1952       EXIT when l_sub_requests(i) = 0;
1953     END LOOP;
1954 
1955     l_req_id := l_sub_requests(1);
1956 
1957     IF l_req_id>0 THEN
1958       l_index := 'HZ_PARTIES';
1959       l_req_id := FND_REQUEST.SUBMIT_REQUEST('AR', 'ARHDQMCR',
1960              'DQM Create Index', to_char(sysdate,'DD-MON-YY HH24:MI:SS'), --bug 4641081
1961              TRUE, to_char(l_sub_requests(1)), to_char(l_sub_requests(2)),
1962              to_char(l_sub_requests(3)), to_char(l_sub_requests(4)),
1963              to_char(l_sub_requests(5)), to_char(l_sub_requests(6)),
1964              to_char(l_sub_requests(7)), to_char(l_sub_requests(8)),
1965              to_char(l_sub_requests(9)), to_char(l_sub_requests(10)),
1966              l_command, l_idx_mem, l_num_prll, l_index);
1967       IF l_req_id = 0 THEN
1968           log('Error submitting request');
1969           log(fnd_message.get);
1970       ELSE
1971           log('Submitted request ID for Party Index: ' || l_req_id );
1972           log('Request ID : ' || l_req_id);
1973       END IF;
1974     END IF;
1975 
1976     IF l_req_id>0 THEN
1977       l_index := 'HZ_PARTY_SITES';
1978       l_req_id := FND_REQUEST.SUBMIT_REQUEST('AR', 'ARHDQMCR',
1979              'DQM Create Index', to_char(sysdate,'DD-MON-YY HH24:MI:SS'), --bug 4641081
1980                TRUE, to_char(l_sub_requests(1)), to_char(l_sub_requests(2)),
1981                to_char(l_sub_requests(3)), to_char(l_sub_requests(4)),
1982                to_char(l_sub_requests(5)), to_char(l_sub_requests(6)),
1983                to_char(l_sub_requests(7)), to_char(l_sub_requests(8)),
1984                to_char(l_sub_requests(9)), to_char(l_sub_requests(10)),
1985                l_command, l_idx_mem, l_num_prll, l_index);
1986       IF l_req_id = 0 THEN
1987           log('Error submitting request');
1988           log(fnd_message.get);
1989       ELSE
1990           log('Submitted request ID for Party Site Index: ' || l_req_id );
1991           log('Request ID : ' || l_req_id);
1992       END IF;
1993     END IF;
1994 
1995     IF l_req_id>0 THEN
1996       l_index := 'HZ_ORG_CONTACTS';
1997       l_req_id := FND_REQUEST.SUBMIT_REQUEST('AR', 'ARHDQMCR',
1998                'DQM Create Index', to_char(sysdate,'DD-MON-YY HH24:MI:SS'), --bug 4641081
1999                TRUE, to_char(l_sub_requests(1)), to_char(l_sub_requests(2)),
2000                to_char(l_sub_requests(3)), to_char(l_sub_requests(4)),
2001                to_char(l_sub_requests(5)), to_char(l_sub_requests(6)),
2002                to_char(l_sub_requests(7)), to_char(l_sub_requests(8)),
2003                to_char(l_sub_requests(9)), to_char(l_sub_requests(10)),
2004                l_command, l_idx_mem, l_num_prll, l_index);
2005       IF l_req_id = 0 THEN
2006           log('Error submitting request');
2007           log(fnd_message.get);
2008       ELSE
2009           log('Submitted request ID for Party Index: ' || l_req_id );
2010           log('Request ID : ' || l_req_id);
2011       END IF;
2012     END IF;
2013 
2014     IF l_req_id>0 THEN
2015       l_index := 'HZ_CONTACT_POINTS';
2016       l_req_id := FND_REQUEST.SUBMIT_REQUEST('AR', 'ARHDQMCR',
2017                'DQM Create Index', to_char(sysdate,'DD-MON-YY HH24:MI:SS'), --bug 4641081
2018                TRUE, to_char(l_sub_requests(1)), to_char(l_sub_requests(2)),
2019                to_char(l_sub_requests(3)), to_char(l_sub_requests(4)),
2020                to_char(l_sub_requests(5)), to_char(l_sub_requests(6)),
2021                to_char(l_sub_requests(7)), to_char(l_sub_requests(8)),
2022                to_char(l_sub_requests(9)), to_char(l_sub_requests(10)),
2023                l_command, l_idx_mem, l_num_prll, l_index);
2024       IF l_req_id = 0 THEN
2025           log('Error submitting request');
2026           log(fnd_message.get);
2027       ELSE
2028           log('Submitted request ID for Contact Point Index: ' || l_req_id );
2029           log('Request ID : ' || l_req_id);
2030       END IF;
2031     END IF;
2032   ELSIF l_command = 'CREATE_INDEXES' THEN
2033     IF l_continue = 'N' THEN
2034       drop_indexes;
2035       generate_datastore_prefs;
2036       DELETE from HZ_DQM_STAGE_LOG where operation = 'CREATE_INDEXES';
2037       create_log(
2038           p_operation=>'CREATE_INDEXES',
2039           p_step=>'HZ_PARTIES');
2040       create_log(
2041           p_operation=>'CREATE_INDEXES',
2042           p_step=>'HZ_PARTY_SITES');
2043       create_log(
2044           p_operation=>'CREATE_INDEXES',
2045           p_step=>'HZ_ORG_CONTACTS');
2046       create_log(
2047           p_operation=>'CREATE_INDEXES',
2048           p_step=>'HZ_CONTACT_POINTS');
2049 
2050     END IF;
2051 
2052     FOR I in 1..10 LOOP
2053       l_sub_requests(i) := 1;
2054     END LOOP;
2055 
2056     l_req_id := 1;
2057     IF l_req_id<>0 THEN
2058       l_req_id := FND_REQUEST.SUBMIT_REQUEST('AR', 'ARHDQMCR',
2059              'DQM Create Index', to_char(sysdate,'DD-MON-YY HH24:MI:SS'), --bug 4641081
2060              TRUE, to_char(l_sub_requests(1)), to_char(l_sub_requests(2)),
2061              to_char(l_sub_requests(3)), to_char(l_sub_requests(4)),
2062              to_char(l_sub_requests(5)), to_char(l_sub_requests(6)),
2063              to_char(l_sub_requests(7)), to_char(l_sub_requests(8)),
2064              to_char(l_sub_requests(9)), to_char(l_sub_requests(10)),
2065              l_command, l_idx_mem, l_num_prll, 'HZ_PARTIES');
2066       IF l_req_id = 0 THEN
2067         log('Error submitting request');
2068         log(fnd_message.get);
2069       ELSE
2070         log('Submitted request ID for Party Index: ' || l_req_id );
2071         log('Request ID : ' || l_req_id);
2072       END IF;
2073     END IF;
2074 
2075     IF l_req_id<>0 THEN
2076       IF l_index_creation = 'SERIAL' THEN
2077         l_sub_requests(1) := l_req_id;
2078       END IF;
2079 
2080       l_req_id := FND_REQUEST.SUBMIT_REQUEST('AR', 'ARHDQMCR',
2081              'DQM Create Index', to_char(sysdate,'DD-MON-YY HH24:MI:SS'), --bug 4641081
2082                TRUE, to_char(l_sub_requests(1)), to_char(l_sub_requests(2)),
2083                to_char(l_sub_requests(3)), to_char(l_sub_requests(4)),
2084                to_char(l_sub_requests(5)), to_char(l_sub_requests(6)),
2085                to_char(l_sub_requests(7)), to_char(l_sub_requests(8)),
2086                to_char(l_sub_requests(9)), to_char(l_sub_requests(10)),
2087                l_command, l_idx_mem, l_num_prll, 'HZ_PARTY_SITES');
2088       IF l_req_id = 0 THEN
2089         log('Error submitting request');
2090         log(fnd_message.get);
2091       ELSE
2092         log('Submitted request ID for Party Site Index: ' || l_req_id );
2093         log('Request ID : ' || l_req_id);
2094       END IF;
2095     END IF;
2096 
2097     IF l_req_id<>0 THEN
2098       IF l_index_creation = 'SERIAL' THEN
2099         l_sub_requests(1) := l_req_id;
2100       END IF;
2101 
2102       l_req_id := FND_REQUEST.SUBMIT_REQUEST('AR', 'ARHDQMCR',
2103                'DQM Create Index', to_char(sysdate,'DD-MON-YY HH24:MI:SS'), --bug 4641081
2104                TRUE, to_char(l_sub_requests(1)), to_char(l_sub_requests(2)),
2105                to_char(l_sub_requests(3)), to_char(l_sub_requests(4)),
2106                to_char(l_sub_requests(5)), to_char(l_sub_requests(6)),
2107                to_char(l_sub_requests(7)), to_char(l_sub_requests(8)),
2108                to_char(l_sub_requests(9)), to_char(l_sub_requests(10)),
2109                l_command, l_idx_mem, l_num_prll, 'HZ_ORG_CONTACTS');
2110       IF l_req_id = 0 THEN
2111         log('Error submitting request');
2112         log(fnd_message.get);
2113       ELSE
2114         log('Submitted request ID for Party Index: ' || l_req_id );
2115         log('Request ID : ' || l_req_id);
2116       END IF;
2117     END IF;
2118 
2119     IF l_req_id<>0 THEN
2120       IF l_index_creation = 'SERIAL' THEN
2121         l_sub_requests(1) := l_req_id;
2122       END IF;
2123 
2124       l_req_id := FND_REQUEST.SUBMIT_REQUEST('AR', 'ARHDQMCR',
2125                'DQM Create Index', to_char(sysdate,'DD-MON-YY HH24:MI:SS'), --bug 4641081
2126                TRUE, to_char(l_sub_requests(1)), to_char(l_sub_requests(2)),
2127                to_char(l_sub_requests(3)), to_char(l_sub_requests(4)),
2128                to_char(l_sub_requests(5)), to_char(l_sub_requests(6)),
2129                to_char(l_sub_requests(7)), to_char(l_sub_requests(8)),
2130                to_char(l_sub_requests(9)), to_char(l_sub_requests(10)),
2131                l_command, l_idx_mem, l_num_prll, 'HZ_CONTACT_POINTS');
2132       IF l_req_id = 0 THEN
2133         log('Error submitting request');
2134         log(fnd_message.get);
2135       ELSE
2136         log('Submitted request ID for Contact Point Index: ' || l_req_id );
2137         log('Request ID : ' || l_req_id);
2138       END IF;
2139     END IF;
2140   ELSIF l_command='CREATE_MISSING_INVALID_INDEXES' THEN
2141     IF l_continue = 'N' THEN
2142       generate_datastore_prefs;
2143       DELETE from HZ_DQM_STAGE_LOG where operation = 'CREATE_INDEXES';
2144       create_log(
2145           p_operation=>'CREATE_INDEXES',
2146           p_step=>'HZ_PARTIES');
2147       create_log(
2148           p_operation=>'CREATE_INDEXES',
2149           p_step=>'HZ_PARTY_SITES');
2150       create_log(
2151           p_operation=>'CREATE_INDEXES',
2152           p_step=>'HZ_ORG_CONTACTS');
2153       create_log(
2154           p_operation=>'CREATE_INDEXES',
2155           p_step=>'HZ_CONTACT_POINTS');
2156     END IF;
2157     FOR I in 1..10 LOOP
2158       l_sub_requests(i) := 1;
2159     END LOOP;
2160 
2161     l_req_id := 1;
2162     BEGIN
2163       SELECT 1 INTO T FROM HZ_STAGED_PARTIES
2164       WHERE ROWNUM=1
2165       AND CONTAINS (concat_col, 'dummy_string')>0;
2166     EXCEPTION
2167       WHEN NO_DATA_FOUND THEN
2168         UPDATE HZ_DQM_STAGE_LOG
2169         SET START_FLAG ='Y', START_TIME=SYSDATE,END_FLAG = 'Y', END_TIME=SYSDATE
2170         WHERE OPERATION = 'CREATE_INDEXES' AND step = 'HZ_PARTIES';
2171       WHEN OTHERS THEN
2172         BEGIN
2173           EXECUTE IMMEDIATE 'DROP INDEX ' || l_index_owner || '.hz_stage_parties_t1 FORCE';
2174           log('Dropped hz_stage_parties_t1');
2175         EXCEPTION
2176           WHEN OTHERS THEN
2177             log('Error dropping hz_stage_parties_t1 ' || SQLERRM);
2178         END;
2179 
2180         l_req_id := FND_REQUEST.SUBMIT_REQUEST('AR', 'ARHDQMCR',
2181                'DQM Create Index', to_char(sysdate,'DD-MON-YY HH24:MI:SS'), --bug 4641081
2182                TRUE, to_char(l_sub_requests(1)), to_char(l_sub_requests(2)),
2183                to_char(l_sub_requests(3)), to_char(l_sub_requests(4)),
2184                to_char(l_sub_requests(5)), to_char(l_sub_requests(6)),
2185                to_char(l_sub_requests(7)), to_char(l_sub_requests(8)),
2186                to_char(l_sub_requests(9)), to_char(l_sub_requests(10)),
2187                l_command, l_idx_mem, l_num_prll, 'HZ_PARTIES');
2188         IF l_req_id = 0 THEN
2189           log('Error submitting request');
2190           log(fnd_message.get);
2191         ELSE
2192           log('Submitted request ID for Party Index: ' || l_req_id );
2193           log('Request ID : ' || l_req_id);
2194         END IF;
2195     END;
2196 
2197     BEGIN
2198       SELECT 1 INTO T FROM HZ_STAGED_PARTY_SITES
2199       WHERE ROWNUM=1
2200       AND CONTAINS (concat_col, 'dummy_string')>0;
2201     EXCEPTION
2202       WHEN NO_DATA_FOUND THEN
2203         UPDATE HZ_DQM_STAGE_LOG
2204         SET START_FLAG ='Y', START_TIME=SYSDATE,END_FLAG = 'Y', END_TIME=SYSDATE
2205         WHERE OPERATION = 'CREATE_INDEXES' AND step = 'HZ_PARTY_SITES';
2206       WHEN OTHERS THEN
2207 
2208         BEGIN
2209           EXECUTE IMMEDIATE 'DROP INDEX ' || l_index_owner || '.hz_stage_party_sites_t1 FORCE';
2210           log('Dropped hz_stage_party_sites_t1');
2211         EXCEPTION
2212           WHEN OTHERS THEN
2213             NULL;
2214         END;
2215 
2216         IF l_index_creation = 'SERIAL' THEN
2217           l_sub_requests(1):=l_req_id;
2218         END IF;
2219 
2220         l_req_id := FND_REQUEST.SUBMIT_REQUEST('AR', 'ARHDQMCR',
2221                'DQM Create Index', to_char(sysdate,'DD-MON-YY HH24:MI:SS'), --bug 4641081
2222                TRUE, to_char(l_sub_requests(1)), to_char(l_sub_requests(2)),
2223                to_char(l_sub_requests(3)), to_char(l_sub_requests(4)),
2224                to_char(l_sub_requests(5)), to_char(l_sub_requests(6)),
2225                to_char(l_sub_requests(7)), to_char(l_sub_requests(8)),
2226                to_char(l_sub_requests(9)), to_char(l_sub_requests(10)),
2227                l_command, l_idx_mem, l_num_prll, 'HZ_PARTY_SITES');
2228         IF l_req_id = 0 THEN
2229           log('Error submitting request');
2230           log(fnd_message.get);
2231         ELSE
2232           log('Submitted request ID for Party Index: ' || l_req_id );
2233           log('Request ID : ' || l_req_id);
2234         END IF;
2235     END;
2236 
2237     BEGIN
2238       SELECT 1 INTO T FROM HZ_STAGED_CONTACTS
2239       WHERE ROWNUM=1
2240       AND CONTAINS (concat_col, 'dummy_string')>0;
2241     EXCEPTION
2242       WHEN NO_DATA_FOUND THEN
2243         UPDATE HZ_DQM_STAGE_LOG
2244         SET START_FLAG ='Y', START_TIME=SYSDATE,END_FLAG = 'Y', END_TIME=SYSDATE
2245         WHERE OPERATION = 'CREATE_INDEXES' AND step = 'HZ_ORG_CONTACTS';
2246       WHEN OTHERS THEN
2247 
2248         BEGIN
2249           EXECUTE IMMEDIATE 'DROP INDEX ' || l_index_owner || '.hz_stage_contact_t1 FORCE';
2250           log('Dropped hz_stage_contact_t1');
2251         EXCEPTION
2252           WHEN OTHERS THEN
2253             NULL;
2254         END;
2255 
2256         IF l_index_creation = 'SERIAL' THEN
2257           l_sub_requests(1):=l_req_id;
2258         END IF;
2259 
2260         l_req_id := FND_REQUEST.SUBMIT_REQUEST('AR', 'ARHDQMCR',
2261                'DQM Create Index', to_char(sysdate,'DD-MON-YY HH24:MI:SS'),  --bug 4641081
2262                TRUE, to_char(l_sub_requests(1)), to_char(l_sub_requests(2)),
2263                to_char(l_sub_requests(3)), to_char(l_sub_requests(4)),
2264                to_char(l_sub_requests(5)), to_char(l_sub_requests(6)),
2265                to_char(l_sub_requests(7)), to_char(l_sub_requests(8)),
2266                to_char(l_sub_requests(9)), to_char(l_sub_requests(10)),
2267                l_command, l_idx_mem, l_num_prll, 'HZ_ORG_CONTACTS');
2268         IF l_req_id = 0 THEN
2269           log('Error submitting request');
2270           log(fnd_message.get);
2271         ELSE
2272           log('Submitted request ID for Contact Index: ' || l_req_id );
2273           log('Request ID : ' || l_req_id);
2274         END IF;
2275     END;
2276 
2277     BEGIN
2278       SELECT 1 INTO T FROM HZ_STAGED_CONTACT_POINTS
2279       WHERE ROWNUM=1
2280       AND CONTAINS (concat_col, 'dummy_string')>0;
2281     EXCEPTION
2282       WHEN NO_DATA_FOUND THEN
2283         UPDATE HZ_DQM_STAGE_LOG
2284         SET START_FLAG ='Y', START_TIME=SYSDATE,END_FLAG = 'Y', END_TIME=SYSDATE
2285         WHERE OPERATION = 'CREATE_INDEXES' AND step = 'HZ_CONTACT_POINTS';
2286       WHEN OTHERS THEN
2287 
2288         BEGIN
2289           EXECUTE IMMEDIATE 'DROP INDEX ' || l_index_owner || '.hz_stage_cpt_t1 FORCE';
2290           log('Dropped hz_stage_cpt_t1');
2291         EXCEPTION
2292           WHEN OTHERS THEN
2293             NULL;
2294         END;
2295 
2296         IF l_index_creation = 'SERIAL' THEN
2297           l_sub_requests(1):=l_req_id;
2298         END IF;
2299 
2300         l_req_id := FND_REQUEST.SUBMIT_REQUEST('AR', 'ARHDQMCR',
2301                'DQM Create Index', to_char(sysdate,'DD-MON-YY HH24:MI:SS'), --bug 4641081
2302                TRUE, to_char(l_sub_requests(1)), to_char(l_sub_requests(2)),
2303                to_char(l_sub_requests(3)), to_char(l_sub_requests(4)),
2304                to_char(l_sub_requests(5)), to_char(l_sub_requests(6)),
2305                to_char(l_sub_requests(7)), to_char(l_sub_requests(8)),
2306                to_char(l_sub_requests(9)), to_char(l_sub_requests(10)),
2307                l_command, l_idx_mem, l_num_prll, 'HZ_CONTACT_POINTS');
2308         IF l_req_id = 0 THEN
2309           log('Error submitting request');
2310           log(fnd_message.get);
2311         ELSE
2312           log('Submitted request ID for Contact Point Index: ' || l_req_id );
2313           log('Request ID : ' || l_req_id);
2314         END IF;
2315     END;
2316   ELSIF p_command='RECREATE_BTREE_INDEXES' THEN
2317     drop_btree_indexes;
2318     FOR I in 1..10 LOOP
2319       l_sub_requests(i) := 1;
2320     END LOOP;
2321 
2322     l_index := 'HZ_PARTIES_BTREE';
2323     l_req_id := FND_REQUEST.SUBMIT_REQUEST('AR', 'ARHDQMCR',
2324              'DQM Create Index', to_char(sysdate,'DD-MON-YY HH24:MI:SS'), --bug 4641081
2325              TRUE, to_char(l_sub_requests(1)), to_char(l_sub_requests(2)),
2326              to_char(l_sub_requests(3)), to_char(l_sub_requests(4)),
2327              to_char(l_sub_requests(5)), to_char(l_sub_requests(6)),
2328              to_char(l_sub_requests(7)), to_char(l_sub_requests(8)),
2329              to_char(l_sub_requests(9)), to_char(l_sub_requests(10)),
2330              l_command, l_idx_mem, l_num_prll, l_index);
2331     IF l_req_id = 0 THEN
2332           log('Error submitting request');
2333           log(fnd_message.get);
2334     ELSE
2335           log('Submitted request ID for Party Index: ' || l_req_id );
2336           log('Request ID : ' || l_req_id);
2337     END IF;
2338 
2339     l_index := 'HZ_PARTY_SITES_BTREE';
2340 
2341     l_req_id := FND_REQUEST.SUBMIT_REQUEST('AR', 'ARHDQMCR',
2342              'DQM Create Index', to_char(sysdate,'DD-MON-YY HH24:MI:SS'), --bug 4641081
2343                TRUE, to_char(l_sub_requests(1)), to_char(l_sub_requests(2)),
2344                to_char(l_sub_requests(3)), to_char(l_sub_requests(4)),
2345                to_char(l_sub_requests(5)), to_char(l_sub_requests(6)),
2346                to_char(l_sub_requests(7)), to_char(l_sub_requests(8)),
2347                to_char(l_sub_requests(9)), to_char(l_sub_requests(10)),
2348                l_command, l_idx_mem, l_num_prll, l_index);
2349     IF l_req_id = 0 THEN
2350           log('Error submitting request');
2351           log(fnd_message.get);
2352     ELSE
2353           log('Submitted request ID for Party Site Index: ' || l_req_id );
2354           log('Request ID : ' || l_req_id);
2355     END IF;
2356 
2357     l_index := 'HZ_ORG_CONTACTS_BTREE';
2358 
2359     l_req_id := FND_REQUEST.SUBMIT_REQUEST('AR', 'ARHDQMCR',
2360                'DQM Create Index', to_char(sysdate,'DD-MON-YY HH24:MI:SS'), --bug 4641081
2361                TRUE, to_char(l_sub_requests(1)), to_char(l_sub_requests(2)),
2362                to_char(l_sub_requests(3)), to_char(l_sub_requests(4)),
2363                to_char(l_sub_requests(5)), to_char(l_sub_requests(6)),
2364                to_char(l_sub_requests(7)), to_char(l_sub_requests(8)),
2365                to_char(l_sub_requests(9)), to_char(l_sub_requests(10)),
2366                l_command, l_idx_mem, l_num_prll, l_index);
2367     IF l_req_id = 0 THEN
2368           log('Error submitting request');
2369           log(fnd_message.get);
2370     ELSE
2371           log('Submitted request ID for Contact Index: ' || l_req_id );
2372           log('Request ID : ' || l_req_id);
2373     END IF;
2374 
2375     l_index := 'HZ_CONTACT_POINTS_BTREE';
2376 
2377     l_req_id := FND_REQUEST.SUBMIT_REQUEST('AR', 'ARHDQMCR',
2378                'DQM Create Index', to_char(sysdate,'DD-MON-YY HH24:MI:SS'), --bug 4641081
2379                TRUE, to_char(l_sub_requests(1)), to_char(l_sub_requests(2)),
2380                to_char(l_sub_requests(3)), to_char(l_sub_requests(4)),
2381                to_char(l_sub_requests(5)), to_char(l_sub_requests(6)),
2382                to_char(l_sub_requests(7)), to_char(l_sub_requests(8)),
2383                to_char(l_sub_requests(9)), to_char(l_sub_requests(10)),
2384                l_command, l_idx_mem, l_num_prll, l_index);
2385     IF l_req_id = 0 THEN
2386           log('Error submitting request');
2387           log(fnd_message.get);
2388     ELSE
2389           log('Submitted request ID for Contact Point Index: ' || l_req_id );
2390           log('Request ID : ' || l_req_id);
2391     END IF;
2392 
2393   END IF;
2394 
2395 --Start of Bug No : 4292425
2396   -- wait for completion of all workers
2397    IF l_command = 'STAGE_ALL_DATA' OR l_command = 'STAGE_NEW_TRANSFORMATIONS' THEN
2398      fnd_conc_global.set_req_globals(conc_status => 'PAUSED', request_data => 'DQM_STAGE_DATA_WORKERS_'||l_realtime_sync_value) ; --4915282
2399    ELSIF l_command = 'GENERATE_MAP_PROC' THEN
2400       NULL;
2401    ELSE
2402      fnd_conc_global.set_req_globals(conc_status => 'PAUSED', request_data => 'DQM_STAGE_DATA_WORKERS') ;
2403    END IF;
2404 
2405 
2406 
2407 ELSIF (req_data IS NOT NULL) then
2408    -- AFTER ALL THE WORKERS ARE DONE, SEE IF THEY HAVE ALL COMPLETED NORMALLY
2409    -- assume that all concurrent workers completed normally, unless found otherwise
2410    l_workers_completed := TRUE;
2411 
2412    Select request_id BULK COLLECT into l_sub_requests
2413    from Fnd_Concurrent_Requests R
2414    Where Parent_Request_Id = FND_GLOBAL.conc_request_id
2415    and (phase_code<>'C' or status_code<>'C');
2416 
2417    IF  l_sub_requests.count>0 THEN
2418       l_workers_completed:=FALSE;
2419       FOR I in 1..l_sub_requests.COUNT LOOP
2420         outandlog('Data worker with request id ' || l_sub_requests(I) );
2421         outandlog(' did not complete normally');
2422         retcode := 2;
2423       END LOOP;
2424    END IF;
2425    if(l_workers_completed)then
2426     outandlog('Concurrent Program Execution completed ');
2427     outandlog('End Time : '|| TO_CHAR(SYSDATE, 'DD-MON-YYYY HH24:MI:SS'));
2428    end if;
2429    --Start of 4915282
2430    l_realtime_sync_value := substr(req_data,instr(req_data,'_',-1)+1);
2431    IF( l_realtime_sync_value IN ('Y','N','DISABLE') ) THEN
2432      IF(l_realtime_sync_value <> 'N') THEN
2433        l_realtime_sync_value := 'Y';
2434        OPEN c_sync;
2435        FETCH c_sync INTO l_sync_count;
2436        IF(c_sync%FOUND) THEN
2437           l_req_id := FND_REQUEST.SUBMIT_REQUEST(
2438                              application    => 'AR',     /**** Application Name ****/
2439                               program        => 'ARHDQSYN',   /*** Program Name ***/
2440                               sub_request    => FALSE,    /*** Sub Request ***/
2441                  	      argument1      => NULL, /* p_num_of_workers */
2442                  	      argument2      => NULL /* p_indexes_only */
2443                              );
2444           IF l_req_id = 0 THEN
2445            log('Error submitting sync request');
2446            log(fnd_message.get);
2447           ELSE
2448            log('Submitted request ID for Sync : ' || l_req_id );
2449            log('Request ID : ' || l_req_id);
2450           END IF;
2451        END IF;
2452        CLOSE c_sync;
2453      END IF;
2454      l_profile_save := FND_PROFILE.save('HZ_DQM_ENABLE_REALTIME_SYNC',l_realtime_sync_value,'SITE');
2455    END IF;
2456    --End of 4915282
2457 END IF;
2458 --End of Bug No : 4292425
2459 
2460 EXCEPTION
2461   WHEN FND_API.G_EXC_ERROR THEN
2462     outandlog('Error: Aborting staging');
2463     retcode := 2;
2464     errbuf := errbuf || logerror || SQLERRM;
2465     FND_FILE.close;
2466   WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
2467     outandlog('Error: Aborting staging');
2468     retcode := 2;
2469     errbuf := errbuf || logerror || SQLERRM;
2470    FND_FILE.close;
2471   WHEN OTHERS THEN
2472     log(fnd_message.get);
2473     outandlog('Error: Aborting staging');
2474     retcode := 2;
2475     errbuf := errbuf || logerror || SQLERRM;
2476     FND_FILE.close;
2477 END;
2478 
2479 
2480 PROCEDURE gather_stats(
2481          table_owner          VARCHAR2,
2482          table_name           VARCHAR2
2483 ) IS
2484 BEGIN
2485      fnd_stats.gather_table_stats(table_owner, table_name);
2486 END gather_stats;
2487 
2488 PROCEDURE Stage_worker(
2489         errbuf                  OUT NOCOPY   VARCHAR2,
2490         retcode                 OUT NOCOPY   VARCHAR2,
2491         p_num_workers           IN      VARCHAR2,
2492         p_worker_number         IN      VARCHAR2,
2493         p_command         	IN      VARCHAR2,
2494         p_continue         	IN      VARCHAR2
2495 
2496 ) IS
2497 
2498 CURSOR l_log_cur(p_command VARCHAR2, l_worker_number NUMBER, l_step VARCHAR2) is
2499    ( SELECT start_flag, end_flag
2500       FROM HZ_DQM_STAGE_LOG
2501       WHERE OPERATION = p_command
2502       AND WORKER_NUMBER = l_worker_number AND step = l_step);
2503 
2504 l_party_id		NUMBER;
2505 l_party_type		HZ_PARTIES.PARTY_TYPE%TYPE;
2506 
2507 l_party_staged VARCHAR2(1);
2508 l_temp_party_id		NUMBER;
2509 l_worker_number		NUMBER;
2510 l_num_workers		NUMBER;
2511 
2512 l_index_owner VARCHAR2(255);
2513 l_temp VARCHAR2(255);
2514 l_bool BOOLEAN;
2515 l_status VARCHAR2(255);
2516 
2517 l_error  VARCHAR2(2000);
2518 
2519 l_party_cur StageCurTyp;
2520 l_party_site_cur StageCurTyp;
2521 l_contact_cur StageCurTyp;
2522 l_cpt_cur StageCurTyp;
2523 
2524 l_start_flag VARCHAR2(30);
2525 l_end_flag VARCHAR2(30);
2526 
2527 l_number_of_workers NUMBER;
2528 l_startdate DATE;
2529 
2530 l_log_step VARCHAR2(30);
2531 
2532 l_product     varchar2(30) := 'AR';
2533 l_table_name  varchar2(30) := 'HZ_PARTIES';
2534 l_update_name varchar2(30) := 'HZ_TCA_DQM_STAGING_PROGRAM';
2535 l_industry    varchar2(30);
2536 l_retstatus   boolean;
2537 l_table_owner          varchar2(30);
2538 l_any_rows_to_process  boolean;
2539 l_start_rowid     rowid;
2540 l_end_rowid       rowid;
2541 l_rows_processed  number;
2542 l_batch_size      NUMBER;
2543 
2544 BEGIN
2545 
2546   retcode := 0;
2547   l_worker_number := TO_NUMBER(p_worker_number);
2548   l_num_workers := TO_NUMBER(p_num_workers);
2549   l_batch_size :=  nvl( FND_PROFILE.value('HZ_DQM_STAGE_BATCH_SIZE'), 500 );
2550   IF l_worker_number = l_num_workers THEN
2551     l_worker_number := 0;
2552   END IF;
2553 
2554 
2555   log('Starting Concurrent Program ''Stage Party Data'', Worker:  ' ||
2556             p_worker_number);
2557   log('Start Time ' || TO_CHAR(SYSDATE, 'MM-DD-YY HH24:MI:SS'));
2558   log('NEWLINE');
2559 
2560   log('This worker stages all parties whose party_id/10 produces a remainder equal to the worker number ');
2561 
2562   log('');
2563   log('Stage Parties begin');
2564 
2565   FND_MSG_PUB.initialize;
2566   HZ_TRANS_PKG.set_staging_context('Y');
2567   IF p_command='STAGE_ALL_DATA' THEN
2568 
2569     SELECT SYSDATE INTO l_startdate FROM DUAL;
2570 
2571     log('Staging Organization Party Records');
2572 
2573     OPEN l_log_cur(p_command, l_worker_number, 'STEP1');
2574     FETCH l_log_cur INTO l_start_flag, l_end_flag;
2575     IF (l_log_cur%NOTFOUND) THEN
2576        l_start_flag:=NULL;
2577        l_end_flag:=NULL;
2578     END IF;
2579     CLOSE l_log_cur;
2580 
2581  /*Start of Dell Enhancement */
2582 
2583      --
2584      -- get schema name of the table for ROWID range processing
2585      --
2586      l_retstatus := fnd_installation.get_app_info(
2587                         l_product, l_status, l_industry, l_table_owner);
2588 
2589      if ((l_retstatus = FALSE)
2590          OR
2591          (l_table_owner is null))
2592      then
2593         raise_application_error(-20001,
2594            'Cannot get schema name for product : '||l_product);
2595      end if;
2596 
2597      fnd_file.put_line(FND_FILE.LOG, '  X_Worker_Id : '||l_worker_number);
2598      fnd_file.put_line(FND_FILE.LOG, 'X_Num_Workers : '||l_num_workers);
2599 
2600      --
2601      -- Worker processing
2602      --
2603 
2604      --
2605      -- The following could be coded to use EXECUTE IMMEDIATE inorder to remove build time
2606      -- dependencies as the processing could potentially reference some tables that could
2607      -- be obsoleted in the current release
2608      --
2609      BEGIN
2610 
2611            ad_parallel_updates_pkg.initialize_rowid_range(
2612                     ad_parallel_updates_pkg.ROWID_RANGE,
2613                     l_table_owner,
2614                     l_table_name,
2615                     l_update_name,
2616                     l_worker_number,
2617                     l_num_workers,
2618                     l_batch_size, 0);
2619 
2620            ad_parallel_updates_pkg.get_rowid_range(
2621                     l_start_rowid,
2622                     l_end_rowid,
2623                     l_any_rows_to_process,
2624                     l_batch_size,
2625                     TRUE);
2626     while (l_any_rows_to_process = TRUE)
2627            LOOP
2628 
2629     IF nvl(l_end_flag,'N') = 'N' THEN
2630       IF nvl(l_start_flag ,'N') = 'N' THEN
2631 
2632         l_log_step := 'STEP1';
2633         UPDATE HZ_DQM_STAGE_LOG set start_flag='Y', start_time = SYSDATE
2634         WHERE OPERATION = p_command
2635         AND WORKER_NUMBER = l_worker_number AND step = l_log_step;
2636         --COMMIT;
2637 
2638 
2639         HZ_TRANS_PKG.set_party_type('ORGANIZATION');
2640         HZ_STAGE_MAP_TRANSFORM.open_party_cursor(
2641          'ALL_PARTIES', 'ORGANIZATION',l_worker_number, l_num_workers, NULL,'N', l_start_rowid,l_end_rowid,l_party_cur);
2642         HZ_STAGE_MAP_TRANSFORM.insert_stage_parties('N',l_party_cur);
2643 
2644 	 l_log_step := 'STEP2';
2645         UPDATE HZ_DQM_STAGE_LOG set start_flag='Y', start_time = SYSDATE
2646         WHERE OPERATION = p_command
2647         AND WORKER_NUMBER = l_worker_number AND step = l_log_step;
2648         COMMIT;
2649 
2650         HZ_TRANS_PKG.set_party_type('PERSON');
2651         HZ_STAGE_MAP_TRANSFORM.open_party_cursor(
2652           'ALL_PARTIES', 'PERSON',l_worker_number, l_num_workers, NULL,'N', l_start_rowid,l_end_rowid,l_party_cur);
2653         HZ_STAGE_MAP_TRANSFORM.insert_stage_parties('N',l_party_cur);
2654 
2655 	  l_log_step := 'STEP3';
2656         UPDATE HZ_DQM_STAGE_LOG set start_flag='Y', start_time = SYSDATE
2657         WHERE OPERATION = p_command
2658         AND WORKER_NUMBER = l_worker_number AND step = l_log_step;
2659         COMMIT;
2660 
2661         HZ_TRANS_PKG.set_party_type('OTHER');
2662         HZ_STAGE_MAP_TRANSFORM.open_party_cursor(
2663           'ALL_PARTIES', 'OTHER',l_worker_number, l_num_workers, NULL,'N',l_start_rowid,l_end_rowid, l_party_cur);
2664         HZ_STAGE_MAP_TRANSFORM.insert_stage_parties('N',l_party_cur);
2665 
2666       ELSE
2667         HZ_TRANS_PKG.set_party_type('ORGANIZATION');
2668         log(' Continue for Org cursor');
2669         HZ_STAGE_MAP_TRANSFORM.open_party_cursor(
2670          'ALL_PARTIES', 'ORGANIZATION',l_worker_number, l_num_workers, NULL,'Y',l_start_rowid,l_end_rowid,l_party_cur);
2671         HZ_STAGE_MAP_TRANSFORM.insert_stage_parties('Y',l_party_cur);
2672 
2673 	log(' Continue for Per cursor');
2674         HZ_TRANS_PKG.set_party_type('PERSON');
2675         HZ_STAGE_MAP_TRANSFORM.open_party_cursor(
2676           'ALL_PARTIES', 'PERSON',l_worker_number, l_num_workers, NULL,'Y', l_start_rowid,l_end_rowid,l_party_cur);
2677         HZ_STAGE_MAP_TRANSFORM.insert_stage_parties('Y',l_party_cur);
2678 
2679 	log(' Continue for Oth cursor');
2680 
2681         HZ_TRANS_PKG.set_party_type('OTHER');
2682         HZ_STAGE_MAP_TRANSFORM.open_party_cursor(
2683           'ALL_PARTIES', 'OTHER',l_worker_number, l_num_workers, NULL,'Y',l_start_rowid,l_end_rowid, l_party_cur);
2684         HZ_STAGE_MAP_TRANSFORM.insert_stage_parties('Y',l_party_cur);
2685 
2686       END IF;
2687 
2688 
2689     END IF;
2690  l_rows_processed := l_batch_size;
2691 
2692               ad_parallel_updates_pkg.processed_rowid_range(
2693                   l_rows_processed,
2694                   l_end_rowid);
2695 
2696               commit;
2697               ad_parallel_updates_pkg.get_rowid_range(
2698                  l_start_rowid,
2699                  l_end_rowid,
2700                  l_any_rows_to_process,
2701                  l_batch_size,
2702                  FALSE);
2703 
2704            end loop;
2705 
2706            retcode := AD_CONC_UTILS_PKG.CONC_SUCCESS;
2707 
2708      EXCEPTION
2709           WHEN OTHERS THEN
2710            -- X_retcode := AD_CONC_UTILS_PKG.CONC_FAILURE;
2711            Dbms_Output.put('error');
2712             raise;
2713      END;
2714      -- CLOSE l_party_cur;
2715       l_log_step := 'STEP1';
2716       UPDATE HZ_DQM_STAGE_LOG set end_flag='Y', end_time = SYSDATE
2717       WHERE OPERATION = p_command
2718       AND WORKER_NUMBER = l_worker_number AND step = l_log_step;
2719 
2720       COMMIT;
2721 
2722   /*  log('Staging Person Party Records');
2723     OPEN l_log_cur(p_command, l_worker_number, 'STEP2');
2724     FETCH l_log_cur INTO l_start_flag, l_end_flag;
2725     IF (l_log_cur%NOTFOUND) THEN
2726        l_start_flag:=NULL;
2727        l_end_flag:=NULL;
2728     END IF;
2729     CLOSE l_log_cur;
2730 
2731     IF nvl(l_end_flag,'N') = 'N' THEN
2732       IF nvl(l_start_flag,'N') = 'N' THEN
2733 
2734       ELSE
2735 
2736       END IF;
2737 
2738      -- CLOSE l_party_cur;
2739       l_log_step := 'STEP2';
2740       UPDATE HZ_DQM_STAGE_LOG set end_flag='Y', end_time = SYSDATE
2741       WHERE OPERATION = p_command
2742       AND WORKER_NUMBER = l_worker_number AND step = l_log_step;
2743 
2744       COMMIT;
2745     END IF;
2746 
2747     log('Staging Group Party Records');
2748     OPEN l_log_cur(p_command, l_worker_number, 'STEP3');
2749     FETCH l_log_cur INTO l_start_flag, l_end_flag;
2750     IF (l_log_cur%NOTFOUND) THEN
2751        l_start_flag:=NULL;
2752        l_end_flag:=NULL;
2753     END IF;
2754     CLOSE l_log_cur;
2755 
2756     IF nvl(l_end_flag,'N') = 'N' THEN
2757       IF nvl(l_start_flag,'N') = 'N' THEN
2758 
2759       ELSE
2760 
2761       END IF;
2762 
2763       --CLOSE l_party_cur;
2764       l_log_step := 'STEP3';
2765       UPDATE HZ_DQM_STAGE_LOG set end_flag='Y', end_time = SYSDATE
2766       WHERE OPERATION = p_command
2767       AND WORKER_NUMBER = l_worker_number AND step = l_log_step;
2768 
2769       COMMIT;
2770 
2771     END IF;*/
2772 
2773     DELETE FROM HZ_DQM_SYNC_INTERFACE WHERE mod(PARTY_ID,l_num_workers) = l_worker_number
2774     AND creation_date<=l_startdate;
2775 
2776   ELSE
2777     log('Updating Organization Party Records');
2778     OPEN l_log_cur(p_command, l_worker_number, 'STEP1');
2779     FETCH l_log_cur INTO l_start_flag, l_end_flag;
2780     IF (l_log_cur%NOTFOUND) THEN
2781        l_start_flag:=NULL;
2782        l_end_flag:=NULL;
2783     END IF;
2784     CLOSE l_log_cur;
2785 
2786     IF nvl(l_end_flag,'N') = 'N' THEN
2787       IF nvl(l_start_flag,'N') = 'N' THEN
2788         l_log_step := 'STEP1';
2789         UPDATE HZ_DQM_STAGE_LOG set start_flag='Y', start_time = SYSDATE
2790         WHERE OPERATION = p_command
2791         AND WORKER_NUMBER = l_worker_number AND step = l_log_step;
2792         COMMIT;
2793 
2794       END IF;
2795 
2796       HZ_TRANS_PKG.set_party_type('ORGANIZATION');
2797       HZ_STAGE_MAP_TRANSFORM_UPD.open_party_cursor(
2798         'ORGANIZATION',l_worker_number, l_num_workers, l_party_cur);
2799       IF l_party_cur IS NOT NULL THEN
2800         HZ_STAGE_MAP_TRANSFORM_UPD.update_stage_parties(l_party_cur);
2801         CLOSE l_party_cur;
2802       END IF;
2803 
2804       l_log_step := 'STEP1';
2805       UPDATE HZ_DQM_STAGE_LOG set end_flag='Y', end_time = SYSDATE
2806       WHERE OPERATION = p_command
2807       AND WORKER_NUMBER = l_worker_number AND step = l_log_step;
2808 
2809       COMMIT;
2810     END IF;
2811 
2812     log('Updating Person Party Records');
2813     OPEN l_log_cur(p_command, l_worker_number, 'STEP2');
2814     FETCH l_log_cur INTO l_start_flag, l_end_flag;
2815     IF (l_log_cur%NOTFOUND) THEN
2816        l_start_flag:=NULL;
2817        l_end_flag:=NULL;
2818     END IF;
2819     CLOSE l_log_cur;
2820 
2821     IF nvl(l_end_flag,'N') = 'N' THEN
2822       IF nvl(l_start_flag,'N') = 'N' THEN
2823         l_log_step := 'STEP2';
2824         UPDATE HZ_DQM_STAGE_LOG set start_flag='Y', start_time = SYSDATE
2825         WHERE OPERATION = p_command
2826         AND WORKER_NUMBER = l_worker_number AND step = l_log_step;
2827 
2828       END IF;
2829 
2830       HZ_TRANS_PKG.set_party_type('PERSON');
2831       HZ_STAGE_MAP_TRANSFORM_UPD.open_party_cursor(
2832         'PERSON',l_worker_number, l_num_workers, l_party_cur);
2833 
2834       IF l_party_cur IS NOT NULL THEN
2835         HZ_STAGE_MAP_TRANSFORM_UPD.update_stage_parties(l_party_cur);
2836         CLOSE l_party_cur;
2837       END IF;
2838       l_log_step := 'STEP2';
2839       UPDATE HZ_DQM_STAGE_LOG set end_flag='Y', end_time = SYSDATE
2840       WHERE OPERATION = p_command
2841       AND WORKER_NUMBER = l_worker_number AND step = l_log_step;
2842 
2843       COMMIT;
2844     END IF;
2845 
2846     log('Updating Group Party Records');
2847 
2848     OPEN l_log_cur(p_command, l_worker_number, 'STEP3');
2849     FETCH l_log_cur INTO l_start_flag, l_end_flag;
2850     IF (l_log_cur%NOTFOUND) THEN
2851        l_start_flag:=NULL;
2852        l_end_flag:=NULL;
2853     END IF;
2854     CLOSE l_log_cur;
2855 
2856     IF nvl(l_end_flag,'N') = 'N' THEN
2857       IF nvl(l_start_flag,'N') = 'N' THEN
2858         l_log_step := 'STEP3';
2859         UPDATE HZ_DQM_STAGE_LOG set start_flag='Y', start_time = SYSDATE
2860         WHERE OPERATION = p_command
2861         AND WORKER_NUMBER = l_worker_number AND step = l_log_step;
2862       END IF;
2863 
2864       HZ_TRANS_PKG.set_party_type('OTHER');
2865       HZ_STAGE_MAP_TRANSFORM_UPD.open_party_cursor(
2866         'OTHER',l_worker_number, l_num_workers, l_party_cur);
2867 
2868       IF l_party_cur IS NOT NULL THEN
2869         HZ_STAGE_MAP_TRANSFORM_UPD.update_stage_parties(l_party_cur);
2870         CLOSE l_party_cur;
2871       END IF;
2872 
2873       l_log_step := 'STEP3';
2874       UPDATE HZ_DQM_STAGE_LOG set end_flag='Y', end_time = SYSDATE
2875       WHERE OPERATION = p_command
2876       AND WORKER_NUMBER = l_worker_number AND step = l_log_step;
2877 
2878       COMMIT;
2879     END IF;
2880 
2881     log('Updating Contact Records');
2882     OPEN l_log_cur(p_command, l_worker_number, 'STEP4');
2883     FETCH l_log_cur INTO l_start_flag, l_end_flag;
2884     IF (l_log_cur%NOTFOUND) THEN
2885        l_start_flag:=NULL;
2886        l_end_flag:=NULL;
2887     END IF;
2888     CLOSE l_log_cur;
2889 
2890 
2891     IF nvl(l_end_flag,'N') = 'N' THEN
2892       IF nvl(l_start_flag,'N') = 'N' THEN
2893         l_log_step := 'STEP4';
2894         UPDATE HZ_DQM_STAGE_LOG set start_flag='Y', start_time = SYSDATE
2895         WHERE OPERATION = p_command
2896         AND WORKER_NUMBER = l_worker_number AND step = l_log_step;
2897 
2898       END IF;
2899 
2900       HZ_STAGE_MAP_TRANSFORM_UPD.open_contact_cursor(
2901         l_worker_number, l_num_workers, l_contact_cur);
2902       IF l_contact_cur IS NOT NULL THEN
2903         HZ_STAGE_MAP_TRANSFORM_UPD.update_stage_contacts(l_contact_cur);
2904         CLOSE l_contact_cur;
2905       END IF;
2906       l_log_step := 'STEP4';
2907       UPDATE HZ_DQM_STAGE_LOG set end_flag='Y', end_time = SYSDATE
2908       WHERE OPERATION = p_command
2909       AND WORKER_NUMBER = l_worker_number AND step = l_log_step;
2910 
2911       COMMIT;
2912     END IF;
2913 
2914     log('Updating Party Site Records');
2915     OPEN l_log_cur(p_command, l_worker_number, 'STEP5');
2916     FETCH l_log_cur INTO l_start_flag, l_end_flag;
2917     IF (l_log_cur%NOTFOUND) THEN
2918        l_start_flag:=NULL;
2919        l_end_flag:=NULL;
2920     END IF;
2921     CLOSE l_log_cur;
2922 
2923 
2924     IF nvl(l_end_flag,'N') = 'N' THEN
2925       IF nvl(l_start_flag,'N') = 'N' THEN
2926         l_log_step := 'STEP5';
2927         UPDATE HZ_DQM_STAGE_LOG set start_flag='Y', start_time = SYSDATE
2928         WHERE OPERATION = p_command
2929         AND WORKER_NUMBER = l_worker_number AND step = l_log_step;
2930 
2931       END IF;
2932 
2933       HZ_STAGE_MAP_TRANSFORM_UPD.open_party_site_cursor(
2934         l_worker_number, l_num_workers, l_party_site_cur);
2935       IF l_party_site_cur IS NOT NULL THEN
2936         HZ_STAGE_MAP_TRANSFORM_UPD.update_stage_party_sites(l_party_site_cur);
2937         CLOSE l_party_site_cur;
2938       END IF;
2939 
2940       l_log_step := 'STEP5';
2941       UPDATE HZ_DQM_STAGE_LOG set end_flag='Y', end_time = SYSDATE
2942       WHERE OPERATION = p_command
2943       AND WORKER_NUMBER = l_worker_number AND step = l_log_step;
2944 
2945       COMMIT;
2946     END IF;
2947 
2948     log('Updating Contact Point Records');
2949     OPEN l_log_cur(p_command, l_worker_number, 'STEP6');
2950     FETCH l_log_cur INTO l_start_flag, l_end_flag;
2951     IF (l_log_cur%NOTFOUND) THEN
2952        l_start_flag:=NULL;
2953        l_end_flag:=NULL;
2954     END IF;
2955     CLOSE l_log_cur;
2956 
2957     IF nvl(l_end_flag,'N') = 'N' THEN
2958       IF nvl(l_start_flag,'N') = 'N' THEN
2959         l_log_step := 'STEP6';
2960         UPDATE HZ_DQM_STAGE_LOG set start_flag='Y', start_time = SYSDATE
2961         WHERE OPERATION = p_command
2962         AND WORKER_NUMBER = l_worker_number AND step = l_log_step;
2963 
2964       END IF;
2965 
2966       HZ_STAGE_MAP_TRANSFORM_UPD.open_contact_pt_cursor(
2967         l_worker_number, l_num_workers, l_cpt_cur);
2968       IF l_cpt_cur IS NOT NULL THEN
2969         HZ_STAGE_MAP_TRANSFORM_UPD.update_stage_contact_pts(l_cpt_cur);
2970         CLOSE l_cpt_cur;
2971       END IF;
2972       l_log_step := 'STEP6';
2973       UPDATE HZ_DQM_STAGE_LOG set end_flag='Y', end_time = SYSDATE
2974       WHERE OPERATION = p_command
2975       AND WORKER_NUMBER = l_worker_number AND step = l_log_step;
2976 
2977       COMMIT;
2978     END IF;
2979 
2980   END IF;
2981   log('Concurrent Program Execution completed ');
2982   log('End Time : '|| TO_CHAR(SYSDATE, 'MM-DD-YY HH24:MI:SS'));
2983 
2984 EXCEPTION
2985   WHEN FND_API.G_EXC_ERROR THEN
2986     outandlog('Error: Aborting staging ' || FND_MESSAGE.GET);
2987     retcode := 2;
2988     errbuf := errbuf || logerror;
2989     FND_FILE.close;
2990   WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
2991     outandlog('Error: Aborting staging ' || FND_MESSAGE.GET);
2992     retcode := 2;
2993     errbuf := errbuf || logerror;
2994    FND_FILE.close;
2995   WHEN OTHERS THEN
2996     outandlog('Error: Aborting staging '|| SQLERRM);
2997     retcode := 2;
2998     errbuf := errbuf || logerror;
2999     FND_FILE.close;
3000 END;
3001 
3002 
3003 FUNCTION new_primary_trans(p_entity VARCHAR2
3004 )    RETURN BOOLEAN IS
3005   cursor is_new_tran (p_entity VARCHAR2) is
3006         select 'Y'
3007         from hz_trans_functions_vl t, hz_trans_attributes_b a
3008         where  a.attribute_id = t.attribute_id
3009         and ENTITY_NAME = p_entity
3010         and  nvl(staged_flag, 'N') = 'N'
3011         and primary_flag = 'Y'
3012         and nvl(active_flag, 'Y') = 'Y'
3013         and rownum = 1;
3014   l_var VARCHAR2(1);
3015 BEGIN
3016      l_var := 'N';
3017      OPEN is_new_tran(p_entity);
3018      FETCH is_new_tran INTO l_var;
3019      CLOSE is_new_tran;
3020      IF (l_var = 'Y') THEN
3021          return true;
3022      ELSE
3023          return false;
3024      END IF;
3025 EXCEPTION WHEN OTHERS THEN
3026      CLOSE is_new_tran;
3027      return true;
3028 END new_primary_trans;
3029 
3030 PROCEDURE update_word_replacements
3031 IS
3032  CURSOR c_delete IS SELECT 1 FROM HZ_WORD_REPLACEMENTS
3033                  WHERE DELETE_FLAG ='Y'
3034 		 AND ROWNUM =1;
3035  CURSOR c_staged IS SELECT 1 FROM HZ_WORD_REPLACEMENTS
3036                  WHERE STAGED_FLAG ='N'
3037 		 AND ROWNUM =1;
3038  l_val NUMBER;
3039 BEGIN
3040  l_val := 0;
3041  OPEN c_delete;
3042  FETCH c_delete INTO l_val;
3043  CLOSE c_delete;
3044  -- Delete the records marked for delete.
3045  IF(l_val > 0)THEN
3046   log('Deleting word replacements that are marked for delete..');
3047   DELETE FROM HZ_WORD_REPLACEMENTS WHERE DELETE_FLAG = 'Y';
3048   log('Done deleting word replacements.');
3049  END IF;
3050  l_val := 0;
3051  OPEN c_staged;
3052  FETCH c_staged INTO l_val;
3053  CLOSE c_staged;
3054  -- Update the staged flag to 'Y'
3055  IF(l_val > 0)THEN
3056   log('Updating the staged_flag of word replacements to Y ..');
3057   UPDATE HZ_WORD_REPLACEMENTS SET STAGED_FLAG = 'Y'
3058   WHERE STAGED_FLAG = 'N';
3059   log('Done updating staged_flag of word replacements.');
3060  END IF;
3061 END update_word_replacements;
3062 
3063 
3064 
3065 PROCEDURE Stage_create_index (
3066         errbuf                  OUT NOCOPY    VARCHAR2,
3067         retcode                 OUT NOCOPY   VARCHAR2,
3068 	p_req1			IN      VARCHAR2,
3069 	p_req2			IN	VARCHAR2,
3070 	p_req3			IN	VARCHAR2,
3071 	p_req4			IN	VARCHAR2,
3072 	p_req5			IN	VARCHAR2,
3073 	p_req6			IN	VARCHAR2,
3074 	p_req7			IN	VARCHAR2,
3075 	p_req8			IN	VARCHAR2,
3076 	p_req9			IN	VARCHAR2,
3077 	p_req10			IN	VARCHAR2,
3078 	p_command		IN	VARCHAR2,
3079 	p_idx_mem		IN	VARCHAR2,
3080 	p_num_prll		IN	VARCHAR2,
3081 	p_index			IN	VARCHAR2
3082 ) IS
3083 
3084   CURSOR c_num_attrs (p_entity VARCHAR2) IS
3085     SELECT count(1) FROM
3086       (SELECT distinct f.staged_attribute_column
3087       FROM HZ_TRANS_FUNCTIONS_VL f, HZ_TRANS_ATTRIBUTES_VL a
3088       WHERE PRIMARY_FLAG = 'Y'
3089       AND nvl(f.ACTIVE_FLAG,'Y') = 'Y'
3090       and f.ATTRIBUTE_ID = a.ATTRIBUTE_ID
3091       AND a.entity_name = p_entity
3092       );
3093 
3094   l_num_sections NUMBER;
3095   l_req1 CONSTANT NUMBER := TO_NUMBER(p_req1);
3096   l_req2 CONSTANT NUMBER := TO_NUMBER(p_req2);
3097   l_req3 CONSTANT NUMBER := TO_NUMBER(p_req3);
3098   l_req4 CONSTANT NUMBER := TO_NUMBER(p_req4);
3099   l_req5 CONSTANT NUMBER := TO_NUMBER(p_req5);
3100   l_req6 CONSTANT NUMBER := TO_NUMBER(p_req6);
3101   l_req7 CONSTANT NUMBER := TO_NUMBER(p_req7);
3102   l_req8 CONSTANT NUMBER := TO_NUMBER(p_req8);
3103   l_req9 CONSTANT NUMBER := TO_NUMBER(p_req9);
3104   l_req10 CONSTANT NUMBER := TO_NUMBER(p_req10);
3105 
3106   uphase VARCHAR2(255);
3107   dphase VARCHAR2(255);
3108   ustatus VARCHAR2(255);
3109   dstatus VARCHAR2(255);
3110   l_index_owner VARCHAR2(255);
3111   message VARCHAR2(32000);
3112 
3113   l_bool BOOLEAN;
3114 
3115   -- VJN created for making code user friendly
3116   CREATE_PARTY_TEXT_INDEX BOOLEAN := FALSE ;
3117   CREATE_PS_TEXT_INDEX BOOLEAN := FALSE ;
3118   CREATE_CONTACT_TEXT_INDEX BOOLEAN := FALSE ;
3119   CREATE_CPT_TEXT_INDEX BOOLEAN := FALSE ;
3120   CREATE_ALL_BTREE_INDEXES BOOLEAN := FALSE ;
3121   CREATE_ALL_TEXT_INDEXES BOOLEAN := FALSE ;
3122   SYNC_PARTY_TEXT_INDEX BOOLEAN := FALSE ;
3123   SYNC_PS_TEXT_INDEX BOOLEAN := FALSE ;
3124   SYNC_CONTACT_TEXT_INDEX BOOLEAN := FALSE ;
3125   SYNC_CPT_TEXT_INDEX BOOLEAN := FALSE ;
3126   SYNC_DENORM_PARTY_TEXT_INDEX BOOLEAN := FALSE ;
3127   index_build_type VARCHAR2(255);
3128 
3129 
3130   l_num_parts NUMBER;
3131   l_num_jobs NUMBER;
3132   l_num_prll NUMBER;
3133 
3134   l_start_flag VARCHAR2(30);
3135   l_end_flag VARCHAR2(30);
3136   l_command VARCHAR2(255);
3137 
3138   l_section_grp VARCHAR2(255);
3139   l_min_id number;
3140   l_max_id number;
3141   tmp number;
3142   l_parallel_degree number;
3143   l_parallel_str varchar2(30);
3144 
3145 
3146 BEGIN
3147 
3148   retcode := 0;
3149   l_command := p_command;
3150   l_parallel_degree := NVL(FND_PROFILE.VALUE('HZ_DQM_INDEX_PARALLEL'),1);
3151   l_parallel_str := ' PARALLEL '||l_parallel_degree||' ';
3152 
3153   log ('--------------------------------------');
3154   outandlog('Starting Concurrent Program ''Create DQM indexes''');
3155   outandlog('Start Time ' || TO_CHAR(SYSDATE, 'MM-DD-YY HH24:MI:SS'));
3156   outandlog('NEWLINE');
3157 
3158   outandlog('Waiting for workers to complete');
3159 
3160   BEGIN
3161     IF l_req1 <> 1 THEN
3162       l_bool := FND_CONCURRENT.wait_for_request(TO_NUMBER(l_req1),
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_req1);
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_req1);
3172         FND_MSG_PUB.ADD;
3173         RAISE FND_API.G_EXC_ERROR;
3174       END IF;
3175     END IF;
3176     IF l_req2 <> 1 THEN
3177       l_bool := FND_CONCURRENT.wait_for_request(TO_NUMBER(l_req2),
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_req2);
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_req2);
3187         FND_MSG_PUB.ADD;
3188         RAISE FND_API.G_EXC_ERROR;
3189       END IF;
3190     END IF;
3191     IF l_req3 <> 1 THEN
3192       l_bool := FND_CONCURRENT.wait_for_request(TO_NUMBER(l_req3),
3193          30, 144000, uphase, ustatus, dphase, dstatus, message);
3194       IF dphase <> 'COMPLETE' THEN
3195         FND_MESSAGE.SET_NAME('AR', 'HZ_STAGE_WORKER_ERROR');
3196         FND_MESSAGE.SET_TOKEN('ID' ,l_req3);
3197         FND_MSG_PUB.ADD;
3198         RAISE FND_API.G_EXC_ERROR;
3199       ELSIF dphase = 'COMPLETE' and dstatus <> 'NORMAL' THEN
3200         FND_MESSAGE.SET_NAME('AR', 'HZ_STAGE_WORKER_ERROR');
3201         FND_MESSAGE.SET_TOKEN('ID' ,l_req3);
3202         FND_MSG_PUB.ADD;
3203         RAISE FND_API.G_EXC_ERROR;
3204       END IF;
3205     END IF;
3206     IF l_req4 <> 1 THEN
3207       l_bool := FND_CONCURRENT.wait_for_request(TO_NUMBER(l_req4),
3208          30, 144000, uphase, ustatus, dphase, dstatus, message);
3209       IF dphase <> 'COMPLETE' THEN
3210         FND_MESSAGE.SET_NAME('AR', 'HZ_STAGE_WORKER_ERROR');
3211         FND_MESSAGE.SET_TOKEN('ID' ,l_req3);
3212         FND_MSG_PUB.ADD;
3213         RAISE FND_API.G_EXC_ERROR;
3214       ELSIF dphase = 'COMPLETE' and dstatus <> 'NORMAL' THEN
3215         FND_MESSAGE.SET_NAME('AR', 'HZ_STAGE_WORKER_ERROR');
3216         FND_MESSAGE.SET_TOKEN('ID' ,l_req4);
3217         FND_MSG_PUB.ADD;
3218         RAISE FND_API.G_EXC_ERROR;
3219       END IF;
3220     END IF;
3221     IF l_req5 <> 1 THEN
3222       l_bool := FND_CONCURRENT.wait_for_request(TO_NUMBER(l_req5),
3223          30, 144000, uphase, ustatus, dphase, dstatus, message);
3224       IF dphase <> 'COMPLETE' THEN
3225         FND_MESSAGE.SET_NAME('AR', 'HZ_STAGE_WORKER_ERROR');
3226         FND_MESSAGE.SET_TOKEN('ID' ,l_req4);
3227         FND_MSG_PUB.ADD;
3228         RAISE FND_API.G_EXC_ERROR;
3229       ELSIF dphase = 'COMPLETE' and dstatus <> 'NORMAL' THEN
3230         FND_MESSAGE.SET_NAME('AR', 'HZ_STAGE_WORKER_ERROR');
3231         FND_MESSAGE.SET_TOKEN('ID' ,l_req5);
3232         FND_MSG_PUB.ADD;
3233         RAISE FND_API.G_EXC_ERROR;
3234       END IF;
3235     END IF;
3236     IF l_req6 <> 1 THEN
3237       l_bool := FND_CONCURRENT.wait_for_request(TO_NUMBER(l_req6),
3238          30, 144000, uphase, ustatus, dphase, dstatus, message);
3239       IF dphase <> 'COMPLETE' THEN
3240         FND_MESSAGE.SET_NAME('AR', 'HZ_STAGE_WORKER_ERROR');
3241         FND_MESSAGE.SET_TOKEN('ID' ,l_req5);
3242         FND_MSG_PUB.ADD;
3243         RAISE FND_API.G_EXC_ERROR;
3244       ELSIF dphase = 'COMPLETE' and dstatus <> 'NORMAL' THEN
3245         FND_MESSAGE.SET_NAME('AR', 'HZ_STAGE_WORKER_ERROR');
3246         FND_MESSAGE.SET_TOKEN('ID' ,l_req6);
3247         FND_MSG_PUB.ADD;
3248         RAISE FND_API.G_EXC_ERROR;
3249       END IF;
3250     END IF;
3251     IF l_req7 <> 1 THEN
3252       l_bool := FND_CONCURRENT.wait_for_request(TO_NUMBER(l_req7),
3253          30, 144000, uphase, ustatus, dphase, dstatus, message);
3254       IF dphase <> 'COMPLETE' THEN
3255         FND_MESSAGE.SET_NAME('AR', 'HZ_STAGE_WORKER_ERROR');
3256         FND_MESSAGE.SET_TOKEN('ID' ,l_req6);
3257         FND_MSG_PUB.ADD;
3258         RAISE FND_API.G_EXC_ERROR;
3259       ELSIF dphase = 'COMPLETE' and dstatus <> 'NORMAL' THEN
3260         FND_MESSAGE.SET_NAME('AR', 'HZ_STAGE_WORKER_ERROR');
3261         FND_MESSAGE.SET_TOKEN('ID' ,l_req7);
3262         FND_MSG_PUB.ADD;
3263         RAISE FND_API.G_EXC_ERROR;
3264       END IF;
3265     END IF;
3266     IF l_req8 <> 1 THEN
3267       l_bool := FND_CONCURRENT.wait_for_request(TO_NUMBER(l_req8),
3268          30, 144000, uphase, ustatus, dphase, dstatus, message);
3269       IF dphase <> 'COMPLETE' THEN
3270         FND_MESSAGE.SET_NAME('AR', 'HZ_STAGE_WORKER_ERROR');
3271         FND_MESSAGE.SET_TOKEN('ID' ,l_req8);
3272         FND_MSG_PUB.ADD;
3273         RAISE FND_API.G_EXC_ERROR;
3274       ELSIF dphase = 'COMPLETE' and dstatus <> 'NORMAL' THEN
3275         FND_MESSAGE.SET_NAME('AR', 'HZ_STAGE_WORKER_ERROR');
3276         FND_MESSAGE.SET_TOKEN('ID' ,l_req8);
3277         FND_MSG_PUB.ADD;
3278         RAISE FND_API.G_EXC_ERROR;
3279       END IF;
3280     END IF;
3281     IF l_req9 <> 1 THEN
3282       l_bool := FND_CONCURRENT.wait_for_request(TO_NUMBER(l_req9),
3283          30, 144000, uphase, ustatus, dphase, dstatus, message);
3284       IF dphase <> 'COMPLETE' THEN
3285         FND_MESSAGE.SET_NAME('AR', 'HZ_STAGE_WORKER_ERROR');
3286         FND_MESSAGE.SET_TOKEN('ID' ,l_req9);
3287         FND_MSG_PUB.ADD;
3288         RAISE FND_API.G_EXC_ERROR;
3289       ELSIF dphase = 'COMPLETE' and dstatus <> 'NORMAL' THEN
3290         FND_MESSAGE.SET_NAME('AR', 'HZ_STAGE_WORKER_ERROR');
3291         FND_MESSAGE.SET_TOKEN('ID' ,l_req9);
3292         FND_MSG_PUB.ADD;
3293         RAISE FND_API.G_EXC_ERROR;
3294       END IF;
3295     END IF;
3296     IF l_req10 <> 1 THEN
3297       l_bool := FND_CONCURRENT.wait_for_request(TO_NUMBER(l_req10),
3298          30, 144000, uphase, ustatus, dphase, dstatus, message);
3299       IF dphase <> 'COMPLETE' THEN
3300         FND_MESSAGE.SET_NAME('AR', 'HZ_STAGE_WORKER_ERROR');
3301         FND_MESSAGE.SET_TOKEN('ID' ,l_req10);
3302         FND_MSG_PUB.ADD;
3303         RAISE FND_API.G_EXC_ERROR;
3304       ELSIF dphase = 'COMPLETE' and dstatus <> 'NORMAL' THEN
3305         FND_MESSAGE.SET_NAME('AR', 'HZ_STAGE_WORKER_ERROR');
3306         FND_MESSAGE.SET_TOKEN('ID' ,l_req10);
3307         FND_MSG_PUB.ADD;
3308         RAISE FND_API.G_EXC_ERROR;
3309       END IF;
3310     END IF;
3311   EXCEPTION
3312     WHEN FND_API.G_EXC_ERROR THEN
3313       RAISE FND_API.G_EXC_ERROR;
3314     WHEN OTHERS THEN
3315       FND_MESSAGE.SET_NAME('AR', 'HZ_STAGE_SQL_ERROR');
3316       FND_MESSAGE.SET_TOKEN('PROC' ,'Index Creation Worker Completion Check');
3317       FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM);
3318       FND_MSG_PUB.ADD;
3319       RAISE FND_API.G_EXC_ERROR;
3320   END;
3321 
3322   COMMIT;
3323   log('Workers have completed successfully');
3324 
3325   l_bool := fnd_installation.GET_APP_INFO('AR',ustatus,dstatus,l_index_owner);
3326 
3327 
3328   -- DECODE WHAT p_index MEANS IN MEANINGFUL TERMS
3329   IF p_index = 'ALL'
3330   THEN
3331         CREATE_ALL_TEXT_INDEXES := TRUE ;
3332         CREATE_PARTY_TEXT_INDEX := TRUE ;
3333         CREATE_PS_TEXT_INDEX := TRUE ;
3334         CREATE_CONTACT_TEXT_INDEX := TRUE ;
3335         CREATE_CPT_TEXT_INDEX := TRUE ;
3336         index_build_type := 'CREATE' ;
3337 
3338   ELSIF p_index = 'ALL_BTREE'
3339   THEN
3340         CREATE_ALL_BTREE_INDEXES := TRUE ;
3341         index_build_type := 'CREATE' ;
3342 
3343   ELSIF p_index = 'HZ_PARTIES'
3344   THEN
3345         CREATE_PARTY_TEXT_INDEX := TRUE ;
3346         index_build_type := 'CREATE' ;
3347 
3348   ELSIF p_index = 'HZ_PARTY_SITES'
3349   THEN
3350         CREATE_PS_TEXT_INDEX := TRUE ;
3351         index_build_type := 'CREATE' ;
3352 
3353   ELSIF p_index = 'HZ_ORG_CONTACTS'
3354   THEN
3355         CREATE_CONTACT_TEXT_INDEX := TRUE ;
3356         index_build_type := 'CREATE' ;
3357 
3358 
3359   ELSIF p_index = 'HZ_CONTACT_POINTS'
3360   THEN
3361         CREATE_CPT_TEXT_INDEX := TRUE ;
3362         index_build_type := 'CREATE' ;
3363 
3364   ELSIF p_index = 'HZ_PARTIES_BTREE'
3365   THEN
3366         SYNC_PARTY_TEXT_INDEX := TRUE ;
3367         index_build_type := 'SYNC' ;
3368 
3369   ELSIF p_index = 'HZ_PARTY_SITES_BTREE'
3370   THEN
3371         SYNC_PS_TEXT_INDEX := TRUE ;
3372         index_build_type := 'SYNC' ;
3373 
3374   ELSIF p_index = 'HZ_ORG_CONTACTS_BTREE'
3375   THEN
3376         SYNC_CONTACT_TEXT_INDEX := TRUE ;
3377         index_build_type := 'SYNC' ;
3378 
3379   ELSIF p_index = 'HZ_CONTACT_POINTS_BTREE'
3380   THEN
3381         SYNC_CPT_TEXT_INDEX := TRUE ;
3382         index_build_type := 'SYNC' ;
3383 
3384   ELSIF p_index = 'STAGE_NEW_DENORM'
3385   THEN
3386         SYNC_DENORM_PARTY_TEXT_INDEX := TRUE ;
3387         index_build_type := 'SYNC' ;
3388 
3389   END IF  ;
3390 
3391   -- NOTE ::
3392   --      TEXT INDEXES -- THESE ARE CREATED OR SYNCED, DEPENDING ON THE FLOW
3393   --      B-TREE INDEXES -- 1. THERE IS NO CONCEPT OF SYNC FOR THESE. IT IS ALWAYS A CREATE FOR THEM WITH THE
3394   --                           UNDERSTANDING THAT CREATION HAPPENS AFTER MAKING SURE THEY DO NOT EXIST ALREADY.
3395   --                        2. THESE ARE ALWAYS CREATED, REGARDLESS OF THE BUILD TYPE.
3396 
3397 
3398 
3399   -- SYNC FLOW
3400   IF index_build_type = 'SYNC'
3401   THEN
3402             log(' Index build type is SYNC for the INDEX Worker');
3403             -- SYNC DENORM PARTY TEXT INDEX
3404             IF SYNC_DENORM_PARTY_TEXT_INDEX THEN
3405                 outandlog('Submitting index request for new denorm attributes.');
3406                 create_btree_indexes ('PARTY');
3407                 BEGIN
3408                        select min(party_id), max(party_id)
3409                        into l_min_id, l_max_id
3410                        from hz_staged_parties;
3411                        WHILE (l_min_id <= l_max_id )
3412                        LOOP
3413                            select party_id into tmp
3414                            from (
3415                                  select party_id, rownum rnum
3416                                  from (  SELECT party_id
3417                                              from hz_staged_parties
3418                                              where party_id>l_min_id
3419                                              and rownum<1001 ) a )
3420                            where rnum = 1000;
3421                            update hz_staged_parties set d_ps = 'SYNC', d_ct = 'SYNC', d_cpt = 'SYNC', concat_col = concat_col
3422                                where party_id between l_min_id and tmp;
3423                            AD_CTX_DDL.sync_index(l_index_owner|| '.hz_stage_parties_t1');
3424                            FND_Concurrent.af_commit;
3425                            l_min_id:=tmp+1;
3426                       END LOOP;
3427                  EXCEPTION
3428                       WHEN NO_DATA_FOUND THEN
3429                           update hz_staged_parties set concat_col = concat_col,
3430                                d_ps = 'SYNC', d_ct = 'SYNC', d_cpt = 'SYNC'
3431                                where party_id between l_min_id and l_max_id ;
3432                           AD_CTX_DDL.sync_index(l_index_owner ||'.hz_stage_parties_t1');
3433                           FND_Concurrent.af_commit;
3434                       WHEN OTHERS THEN
3435                           FND_FILE.put_line(FND_FILE.log, 'Error during DENORM PARTY Index Synchronization SQLEERM=' ||SQLERRM);
3436                           retcode := 2;
3437                          errbuf := SQLERRM;
3438                  END;
3439 
3440                outandlog('Done index request for new denorm attributes.');
3441         -- SYNC DENORM PARTY INDEX
3442         ELSIF SYNC_PARTY_TEXT_INDEX  THEN
3443           create_btree_indexes ('PARTY');
3444           IF (new_primary_trans('PARTY')) THEN
3445              BEGIN
3446                    select min(party_id), max(party_id)
3447                    into l_min_id, l_max_id
3448                    from hz_staged_parties;
3449                    WHILE (l_min_id <= l_max_id )
3450                    LOOP
3451                        select party_id into tmp
3452                        from (
3453                              select party_id, rownum rnum
3454                              from (  SELECT party_id
3455                                          from hz_staged_parties
3456                                          where party_id>l_min_id
3457                                          and rownum<1001 ) a )
3458                        where rnum = 1000;
3459                        update hz_staged_parties set concat_col = concat_col
3460                            where party_id between l_min_id and tmp;
3461                        FND_FILE.put_line(FND_FILE.log, 'Attempting to SYNC the hz_stage_parties_t1 index');
3462                        AD_CTX_DDL.sync_index(l_index_owner|| '.hz_stage_parties_t1');
3463                        FND_FILE.put_line(FND_FILE.log, 'SYNC of the hz_stage_parties_t1 index successful');
3464                        FND_Concurrent.af_commit;
3465                        l_min_id:=tmp+1;
3466                   END LOOP;
3467              EXCEPTION
3468                   WHEN NO_DATA_FOUND THEN
3469                       update hz_staged_parties set concat_col = concat_col
3470                            where party_id between l_min_id and l_max_id ;
3471                       FND_FILE.put_line(FND_FILE.log, 'Attempting to SYNC the hz_stage_parties_t1 index');
3472                       AD_CTX_DDL.sync_index(l_index_owner ||'.hz_stage_parties_t1');
3473                       FND_FILE.put_line(FND_FILE.log, 'SYNC of the hz_stage_parties_t1 index successful');
3474                       FND_Concurrent.af_commit;
3475                   WHEN OTHERS THEN
3476                       FND_FILE.put_line(FND_FILE.log, 'Error during PARTY Index Synchronization SQLEERM=' ||SQLERRM);
3477                       retcode := 2;
3478                      errbuf := SQLERRM;
3479              END;
3480 
3481           END IF;
3482           UPDATE HZ_TRANS_FUNCTIONS_B
3483                 SET STAGED_FLAG='Y'
3484                 WHERE nvl(ACTIVE_FLAG,'Y') = 'Y' and nvl(staged_flag,'N')='N'
3485                 and attribute_id in (
3486                       select attribute_id from hz_trans_attributes_vl where entity_name='PARTY');
3487 		log('Setting STAGED_FLAG=Y in HZ_TRANS_FUNCTIONS_B for PARTY entity transformations after staging');
3488           -- SYNC DENORM PARTY SITE TEXT INDEX
3489           ELSIF SYNC_PS_TEXT_INDEX THEN
3490             create_btree_indexes ('PARTY_SITES');
3491             IF (new_primary_trans('PARTY_SITES')) THEN
3492                BEGIN
3493                      select min(party_site_id), max(party_site_id)
3494                      into l_min_id, l_max_id
3495                      from hz_staged_party_sites;
3496                      WHILE (l_min_id <= l_max_id )
3497                      LOOP
3498                          select party_site_id into tmp
3499                          from (
3500                                select party_site_id, rownum rnum
3501                                from (  SELECT party_site_id
3502                                            from hz_staged_party_sites
3503                                            where party_site_id > l_min_id
3504                                            and rownum<1001 ) a )
3505                          where rnum = 1000;
3506                          update hz_staged_party_sites set concat_col = concat_col
3507                              where party_id between l_min_id and tmp;
3508                          FND_FILE.put_line(FND_FILE.log, 'Attempting to SYNC the hz_stage_party_sites_t1 index');
3509                          AD_CTX_DDL.sync_index(l_index_owner ||'.hz_stage_party_sites_t1');
3510                          FND_FILE.put_line(FND_FILE.log, 'SYNC of the hz_stage_party_sites_t1 index successful');
3511                          FND_Concurrent.af_commit;
3512                          l_min_id:=tmp+1;
3513                     END LOOP;
3514                EXCEPTION
3515                     WHEN NO_DATA_FOUND THEN
3516                         update hz_staged_party_sites set concat_col = concat_col
3517                              where party_site_id between l_min_id and l_max_id ;
3518                          FND_FILE.put_line(FND_FILE.log, 'Attempting to SYNC the hz_stage_party_sites_t1 index');
3519                          AD_CTX_DDL.sync_index(l_index_owner ||'.hz_stage_party_sites_t1');
3520                          FND_FILE.put_line(FND_FILE.log, 'SYNC of the hz_stage_party_sites_t1 index successful');
3521                          FND_Concurrent.af_commit;
3522                     WHEN OTHERS THEN
3523                         FND_FILE.put_line(FND_FILE.log, 'Error during PARTY SITES Index Synchronization SQLEERM=' ||SQLERRM);
3524                         retcode := 2;
3525                        errbuf := SQLERRM;
3526                END;
3527             END IF;
3528             UPDATE HZ_TRANS_FUNCTIONS_B
3529                   SET STAGED_FLAG='Y'
3530                   WHERE nvl(ACTIVE_FLAG,'Y') = 'Y' and nvl(staged_flag,'N')='N'
3531                   and attribute_id in (
3532                         select attribute_id from hz_trans_attributes_vl where entity_name='PARTY_SITES');
3533 			log('Setting STAGED_FLAG=Y in HZ_TRANS_FUNCTIONS_B for PARTY_SITES ENTITY after staging');
3534             create_denorm_attribute_pref ('PARTY_SITES');
3535 
3536             -- SYNC DENORM CONTACT TEXT INDEX
3537             ELSIF SYNC_CONTACT_TEXT_INDEX THEN
3538               create_btree_indexes ('CONTACTS');
3539               IF (new_primary_trans('CONTACTS')) THEN
3540                  BEGIN
3541                        select min(org_contact_id), max(org_contact_id)
3542                        into l_min_id, l_max_id
3543                        from hz_staged_contacts;
3544                        WHILE (l_min_id <= l_max_id )
3545                        LOOP
3546                            select org_contact_id into tmp
3547                            from (
3548                                  select org_contact_id, rownum rnum
3549                                  from (  SELECT org_contact_id
3550                                              from hz_staged_contacts
3551                                              where org_contact_id > l_min_id
3552                                              and rownum<1001 ) a )
3553                            where rnum = 1000;
3554                            update hz_staged_contacts set concat_col = concat_col
3555                                where org_contact_id between l_min_id and tmp;
3556                            FND_FILE.put_line(FND_FILE.log, 'Attempting to SYNC the hz_stage_contact_t1 index');
3557                           AD_CTX_DDL.sync_index(l_index_owner||'.hz_stage_contact_t1');
3558                           FND_FILE.put_line(FND_FILE.log, 'SYNC of the hz_stage_contact_t1 index successful');
3559                            FND_Concurrent.af_commit;
3560                            l_min_id:=tmp+1;
3561                       END LOOP;
3562                  EXCEPTION
3563                       WHEN NO_DATA_FOUND THEN
3564                           update hz_staged_contacts set concat_col = concat_col
3565                                where org_contact_id between l_min_id and l_max_id ;
3566                           FND_FILE.put_line(FND_FILE.log, 'Attempting to SYNC the hz_stage_contact_t1 index');
3567                           AD_CTX_DDL.sync_index(l_index_owner||'.hz_stage_contact_t1');
3568                           FND_FILE.put_line(FND_FILE.log, 'SYNC of the hz_stage_contact_t1 index successful');
3569                           FND_Concurrent.af_commit;
3570                       WHEN OTHERS THEN
3571                           FND_FILE.put_line(FND_FILE.log, 'Error during CONTACTS Index Synchronization SQLEERM=' ||SQLERRM);
3572                           retcode := 2;
3573                          errbuf := SQLERRM;
3574                  END;
3575 
3576               END IF;
3577               UPDATE HZ_TRANS_FUNCTIONS_B
3578                     SET STAGED_FLAG='Y'
3579                     WHERE nvl(ACTIVE_FLAG,'Y') = 'Y' and nvl(staged_flag,'N')='N'
3580                     and attribute_id in (
3581                           select attribute_id from hz_trans_attributes_vl where entity_name='CONTACTS');
3582 			log('Setting STAGED_FLAG=Y in HZ_TRANS_FUNCTIONS_B for CONTACTS ENTITY after staging');
3583               create_denorm_attribute_pref ('CONTACTS');
3584               -- SYNC DENORM CONTACT POINT TEXT INDEX
3585               ELSIF SYNC_CPT_TEXT_INDEX THEN
3586                 create_btree_indexes ('CONTACT_POINTS');
3587                 IF (new_primary_trans('CONTACT_POINTS')) THEN
3588                    BEGIN
3589                          select min(contact_point_id), max(contact_point_id)
3590                          into l_min_id, l_max_id
3591                          from hz_staged_contact_points;
3592                          WHILE (l_min_id <= l_max_id )
3593                          LOOP
3594                              select contact_point_id into tmp
3595                              from (
3596                                    select contact_point_id, rownum rnum
3597                                    from (  SELECT contact_point_id
3598                                                from hz_staged_contact_points
3599                                                where contact_point_id > l_min_id
3600                                                and rownum<1001 ) a )
3601                              where rnum = 1000;
3602                              update hz_staged_contact_points set concat_col = concat_col
3603                                  where contact_point_id between l_min_id and tmp;
3604                              FND_FILE.put_line(FND_FILE.log, 'Attempting to SYNC the hz_stage_cpt_t1 index');
3605                              AD_CTX_DDL.sync_index(l_index_owner||'.hz_stage_cpt_t1');
3606                              FND_FILE.put_line(FND_FILE.log, 'SYNC of the hz_stage_cpt_t1 index successful');
3607                              FND_Concurrent.af_commit;
3608                              l_min_id:=tmp+1;
3609                         END LOOP;
3610                    EXCEPTION
3611                         WHEN NO_DATA_FOUND THEN
3612                             update hz_staged_contact_points set concat_col = concat_col
3613                                  where contact_point_id between l_min_id and l_max_id ;
3614                              FND_FILE.put_line(FND_FILE.log, 'Attempting to SYNC the hz_stage_cpt_t1 index');
3615                              AD_CTX_DDL.sync_index(l_index_owner||'.hz_stage_cpt_t1');
3616                              FND_FILE.put_line(FND_FILE.log, 'SYNC of the hz_stage_cpt_t1 index successful');
3617                             FND_Concurrent.af_commit;
3618                         WHEN OTHERS THEN
3619                             FND_FILE.put_line(FND_FILE.log, 'Error during CONTACT POINTS Index Synchronization SQLEERM=' ||SQLERRM);
3620                             retcode := 2;
3621                            errbuf := SQLERRM;
3622                    END;
3623 
3624 
3625                 END IF;
3626                 UPDATE HZ_TRANS_FUNCTIONS_B
3627                       SET STAGED_FLAG='Y'
3628                       WHERE nvl(ACTIVE_FLAG,'Y') = 'Y' and nvl(staged_flag,'N')='N'
3629                       and attribute_id in (
3630                             select attribute_id from hz_trans_attributes_vl where entity_name='CONTACT_POINTS');
3631                 log('Setting STAGED_FLAG=Y in HZ_TRANS_FUNCTIONS_B for CONTACT_POINTS ENTITY after staging');
3632                 create_denorm_attribute_pref ('CONTACT_POINTS');
3633             END IF;
3634     -- CREATE FLOW
3635     ELSIF index_build_type = 'CREATE'
3636     THEN
3637 
3638                    log(' Index build type is CREATE for the INDEX Worker');
3639                    IF CREATE_ALL_BTREE_INDEXES THEN
3640                           create_btree_indexes ('PARTY');
3641                           create_btree_indexes ('PARTY_SITES');
3642                           create_btree_indexes ('CONTACTS');
3643                           create_btree_indexes ('CONTACT_POINTS');
3644                           UPDATE HZ_TRANS_FUNCTIONS_B
3645                                 SET STAGED_FLAG='Y'
3646                                WHERE nvl(ACTIVE_FLAG,'Y') = 'Y'
3647 							   AND nvl(staged_flag,'N')='N' ;
3648 						log('Setting STAGED_FLAG=Y in HZ_TRANS_FUNCTIONS_B after create_btree_indexes');
3649                           create_denorm_attribute_pref ('PARTY_SITES');
3650                           create_denorm_attribute_pref ('CONTACTS');
3651                           create_denorm_attribute_pref ('CONTACT_POINTS');
3652                    END IF ;
3653 
3654 
3655                  IF CREATE_PARTY_TEXT_INDEX THEN
3656                     create_btree_indexes ('PARTY');
3657                     BEGIN
3658                       SELECT start_flag, end_flag INTO l_start_flag, l_end_flag
3659                       FROM HZ_DQM_STAGE_LOG
3660                       WHERE OPERATION = 'CREATE_INDEXES'
3661                       AND step = 'HZ_PARTIES';
3662                     EXCEPTION
3663                       WHEN no_data_found THEN
3664                         l_start_flag:=NULL;
3665                         l_end_flag:=NULL;
3666                     END;
3667 
3668                     IF nvl(l_end_flag,'N') = 'N' THEN
3669                       BEGIN
3670                         execute immediate 'begin ctx_output.start_log(''party_index''); end;';
3671                       EXCEPTION
3672                         WHEN OTHERS THEN
3673                           NULL;
3674                       END;
3675 
3676                       IF nvl(l_start_flag,'N') = 'Y' THEN
3677                         BEGIN
3678                           log('Attempting restart build of index '||l_index_owner || '.hz_stage_parties_t1');
3679                           EXECUTE IMMEDIATE 'ALTER INDEX ' || l_index_owner ||
3680                               '.hz_stage_parties_t1 rebuild parameters(''resume memory ' || p_idx_mem || ''')';
3681                           log('Index Successfully built');
3682 
3683                           UPDATE HZ_DQM_STAGE_LOG set END_FLAG = 'Y', END_TIME=SYSDATE
3684                           WHERE operation = 'CREATE_INDEXES' AND step ='HZ_PARTIES';
3685                           COMMIT;
3686 
3687                         EXCEPTION
3688                           WHEN OTHERS THEN
3689                             log('Restart Unsuccesful .. Recreating');
3690                             BEGIN
3691                               EXECUTE IMMEDIATE 'DROP INDEX ' || l_index_owner || '.hz_stage_parties_t1 FORCE';
3692                               log('Dropped hz_stage_parties_t1');
3693                             EXCEPTION
3694                               WHEN OTHERS THEN
3695                                 NULL;
3696                             END;
3697                             l_start_flag := 'N';
3698                             l_command := 'STAGE_ALL_DATA';
3699 
3700                         END;
3701                       END IF;
3702 
3703                       IF nvl(l_start_flag,'N') = 'N' THEN
3704                         UPDATE HZ_DQM_STAGE_LOG set START_FLAG = 'Y', START_TIME=SYSDATE
3705                         WHERE operation = 'CREATE_INDEXES' AND step ='HZ_PARTIES';
3706                         COMMIT;
3707 
3708                         l_section_grp := g_schema_name || '.HZ_DQM_PARTY_GRP';
3709 
3710                         IF l_command <> 'STAGE_NEW_TRANSFORMATIONS' THEN
3711                           log(' Creating hz_stage_parties_t1 on hz_staged_parties.');
3712                           log(' Index Memory ' || p_idx_mem);
3713                           log(' Starting at ' || to_char(SYSDATE, 'HH24:MI:SS') );
3714 
3715                           EXECUTE IMMEDIATE 'CREATE INDEX ' || l_index_owner || '.hz_stage_parties_t1 ON ' ||l_index_owner ||
3716                               '.hz_staged_parties(concat_col) indextype is ctxsys.context ' ||
3717                               'parameters (''storage  '||g_schema_name || '.HZ_DQM_STORAGE datastore '||g_schema_name || '.hz_party_ds ' ||
3718                               'SECTION GROUP '||l_section_grp||' STOPLIST CTXSYS.EMPTY_STOPLIST LEXER '||g_schema_name || '.dqm_lexer memory ' || p_idx_mem || ''')'||case when(l_parallel_degree>1) then l_parallel_str else ' '
3719                               END;
3720                         ELSE
3721                           log(' Attempting to drop and create hz_stage_parties_t1 on hz_staged_parties with new transformations.');
3722                           log(' Index Memory ' || p_idx_mem);
3723                           log(' Starting at ' || to_char(SYSDATE, 'HH24:MI:SS') );
3724 
3725                           BEGIN
3726                               -- DROP AND CREATE
3727                               EXECUTE IMMEDIATE 'DROP INDEX ' || l_index_owner || '.hz_stage_parties_t1 FORCE';
3728                               log('Dropped hz_stage_parties_t1');
3729                               EXCEPTION
3730                               WHEN OTHERS THEN
3731                               NULL;
3732 
3733                           END ;
3734                           EXECUTE IMMEDIATE 'CREATE INDEX ' || l_index_owner || '.hz_stage_parties_t1 ON ' ||l_index_owner ||
3735                               '.hz_staged_parties(concat_col) indextype is ctxsys.context ' ||
3736                               'parameters (''storage  '||g_schema_name || '.HZ_DQM_STORAGE datastore '||g_schema_name || '.hz_party_ds ' ||
3737                               'SECTION GROUP '||l_section_grp||' STOPLIST CTXSYS.EMPTY_STOPLIST LEXER '||g_schema_name || '.dqm_lexer memory ' || p_idx_mem || ''')'||case when(l_parallel_degree>1) then l_parallel_str else ' '
3738                               END;
3739                           log('Done creating hz_stage_parties_t1');
3740                         END IF;
3741 
3742                         UPDATE HZ_DQM_STAGE_LOG set END_FLAG = 'Y', END_TIME=SYSDATE
3743                         WHERE operation = 'CREATE_INDEXES' AND step ='HZ_PARTIES';
3744                         COMMIT;
3745                       END IF;
3746                       log(' Completed at ' || to_char(SYSDATE, 'HH24:MI:SS'));
3747 
3748                     END IF;
3749                   END IF;
3750 
3751                   IF CREATE_PS_TEXT_INDEX THEN
3752                     create_btree_indexes ('PARTY_SITES');
3753                     BEGIN
3754                       SELECT start_flag, end_flag INTO l_start_flag, l_end_flag
3755                       FROM HZ_DQM_STAGE_LOG
3756                       WHERE OPERATION = 'CREATE_INDEXES'
3757                       AND step = 'HZ_PARTY_SITES';
3758                     EXCEPTION
3759                       WHEN no_data_found THEN
3760                         l_start_flag:=NULL;
3761                         l_end_flag:=NULL;
3762                     END;
3763 
3764                     IF nvl(l_end_flag,'N') = 'N' THEN
3765                       BEGIN
3766                         execute immediate 'begin ctx_output.start_log(''party_site_index''); end;';
3767                       EXCEPTION
3768                         WHEN OTHERS THEN
3769                           NULL;
3770                       END;
3771 
3772                       IF nvl(l_start_flag,'N') = 'Y' THEN
3773                         BEGIN
3774                           log('Attempting restart build of index '||l_index_owner || '.hz_stage_party_sites_t1');
3775                           EXECUTE IMMEDIATE 'ALTER INDEX ' || l_index_owner ||
3776                               '.hz_stage_party_sites_t1 rebuild parameters(''resume memory ' || p_idx_mem || ''')';
3777                           log('Index Successfully built');
3778 
3779                           UPDATE HZ_DQM_STAGE_LOG set END_FLAG = 'Y', END_TIME=SYSDATE
3780                           WHERE operation = 'CREATE_INDEXES' AND step ='HZ_PARTY_SITES';
3781                           COMMIT;
3782 
3783                         EXCEPTION
3784                           WHEN OTHERS THEN
3785                             log('Restart Unsuccesful .. Recreating');
3786                             BEGIN
3787                               EXECUTE IMMEDIATE 'DROP INDEX ' || l_index_owner || '.hz_stage_party_sites_t1 FORCE';
3788                               log('Dropped hz_stage_party_sites_t1');
3789                             EXCEPTION
3790                               WHEN OTHERS THEN
3791                                 NULL;
3792                             END;
3793                             l_start_flag := 'N';
3794                             l_command := 'STAGE_ALL_DATA';
3795 
3796                         END;
3797                       END IF;
3798 
3799                       IF nvl(l_start_flag,'N') = 'N' THEN
3800                         UPDATE HZ_DQM_STAGE_LOG set START_FLAG = 'Y', START_TIME=SYSDATE
3801                         WHERE operation = 'CREATE_INDEXES' AND step ='HZ_PARTY_SITES';
3802                         COMMIT;
3803 
3804                         l_section_grp := g_schema_name || '.HZ_DQM_PS_GRP';
3805 
3806                         IF l_command <> 'STAGE_NEW_TRANSFORMATIONS' THEN
3807                           log(' Creating hz_stage_party_sites_t1 on hz_staged_party_sites. ');
3808                           log(' Index Memory ' || p_idx_mem);
3809                           log(' Starting at ' || to_char(SYSDATE, 'HH24:MI:SS'));
3810 
3811                           EXECUTE IMMEDIATE 'CREATE INDEX ' || l_index_owner || '.hz_stage_party_sites_t1 ON ' ||l_index_owner ||
3812                               '.hz_staged_party_sites(concat_col) indextype is ctxsys.context ' ||
3813                               'parameters (''storage '||g_schema_name || '.HZ_DQM_STORAGE datastore '||g_schema_name || '.hz_party_site_ds ' ||
3814                               'SECTION GROUP '||l_section_grp||' STOPLIST CTXSYS.EMPTY_STOPLIST LEXER '||g_schema_name || '.dqm_lexer memory ' || p_idx_mem || ''')'||case when(l_parallel_degree>1) then l_parallel_str else ' '
3815                               END;
3816                         ELSE
3817                           log(' Attempting to drop and create hz_stage_party_sites_t1 on hz_staged_party_sites with new transformations.');
3818                           log(' Index Memory ' || p_idx_mem);
3819                           log(' Starting at ' || to_char(SYSDATE, 'HH24:MI:SS') );
3820 
3821                           -- DROP AND CREATE
3822                           BEGIN
3823                               EXECUTE IMMEDIATE 'DROP INDEX ' || l_index_owner || '.hz_stage_party_sites_t1 FORCE';
3824                               log('Dropped hz_stage_party_sites_t1');
3825                               EXCEPTION
3826                               WHEN OTHERS THEN
3827                               NULL;
3828                           END ;
3829                           EXECUTE IMMEDIATE 'CREATE INDEX ' || l_index_owner || '.hz_stage_party_sites_t1 ON ' ||l_index_owner ||
3830                               '.hz_staged_party_sites(concat_col) indextype is ctxsys.context ' ||
3831                               'parameters (''storage '||g_schema_name || '.HZ_DQM_STORAGE datastore '||g_schema_name || '.hz_party_site_ds ' ||
3832                               'SECTION GROUP '||l_section_grp||' STOPLIST CTXSYS.EMPTY_STOPLIST LEXER '||g_schema_name || '.dqm_lexer memory ' || p_idx_mem || ''')'||case when(l_parallel_degree>1) then l_parallel_str else ' '
3833                               END;
3834                           log('Done creating hz_stage_party_sites_t1');
3835                         END IF;
3836 
3837                         UPDATE HZ_DQM_STAGE_LOG set END_FLAG = 'Y', END_TIME=SYSDATE
3838                         WHERE operation = 'CREATE_INDEXES' AND step ='HZ_PARTY_SITES';
3839                         COMMIT;
3840                       END IF;
3841                       log(' Completed at ' || to_char(SYSDATE, 'HH24:MI:SS'));
3842                     END IF;
3843                   END IF;
3844                   log('');
3845 
3846                   IF CREATE_CONTACT_TEXT_INDEX  THEN
3847                     create_btree_indexes ('CONTACTS');
3848                     BEGIN
3849                       SELECT start_flag, end_flag INTO l_start_flag, l_end_flag
3850                       FROM HZ_DQM_STAGE_LOG
3851                       WHERE OPERATION = 'CREATE_INDEXES'
3852                       AND step = 'HZ_ORG_CONTACTS';
3853                     EXCEPTION
3854                       WHEN no_data_found THEN
3855                         l_start_flag:=NULL;
3856                         l_end_flag:=NULL;
3857                     END;
3858 
3859                     IF nvl(l_end_flag,'N') = 'N' THEN
3860                       BEGIN
3861                         execute immediate 'begin ctx_output.start_log(''contact_index''); end;';
3862                       EXCEPTION
3863                         WHEN OTHERS THEN
3864                           NULL;
3865                       END;
3866 
3867                       IF nvl(l_start_flag,'N') = 'Y' THEN
3868                         BEGIN
3869                           log('Attempting restart build of index '||l_index_owner || '.hz_stage_contact_t1');
3870                           EXECUTE IMMEDIATE 'ALTER INDEX ' || l_index_owner ||
3871                               '.hz_stage_contact_t1 rebuild parameters(''resume memory ' || p_idx_mem || ''')';
3872                           log('Index Successfully built');
3873 
3874                           UPDATE HZ_DQM_STAGE_LOG set END_FLAG = 'Y', END_TIME=SYSDATE
3875                           WHERE operation = 'CREATE_INDEXES' AND step ='HZ_ORG_CONTACTS';
3876                           COMMIT;
3877 
3878                         EXCEPTION
3879                           WHEN OTHERS THEN
3880                             log('Restart uncessful. Recreating Index');
3881                             BEGIN
3882                               EXECUTE IMMEDIATE 'DROP INDEX ' || l_index_owner || '.hz_stage_contact_t1 FORCE';
3883                               log('Dropped hz_stage_contact_t1');
3884                             EXCEPTION
3885                               WHEN OTHERS THEN
3886                                 NULL;
3887                             END;
3888                             l_start_flag := 'N';
3889                             l_command := 'STAGE_ALL_DATA';
3890 
3891                         END;
3892                       END IF;
3893 
3894                       IF nvl(l_start_flag,'N') = 'N' THEN
3895                         UPDATE HZ_DQM_STAGE_LOG set START_FLAG = 'Y', START_TIME=SYSDATE
3896                         WHERE operation = 'CREATE_INDEXES' AND step ='HZ_ORG_CONTACTS';
3897                         COMMIT;
3898 
3899                         l_section_grp := g_schema_name || '.HZ_DQM_CONTACT_GRP';
3900 
3901                         IF l_command <> 'STAGE_NEW_TRANSFORMATIONS' THEN
3902                           log(' Creating hz_stage_contact_t1 on hz_staged_contacts. ');
3903                           log(' Index Memory ' || p_idx_mem);
3904                           log(' Starting at ' || to_char(SYSDATE, 'HH24:MI:SS'));
3905 
3906                           EXECUTE IMMEDIATE 'CREATE INDEX ' || l_index_owner || '.hz_stage_contact_t1 ON ' ||l_index_owner ||
3907                               '.hz_staged_contacts(concat_col) indextype is ctxsys.context ' ||
3908                               'parameters (''storage '||g_schema_name || '.HZ_DQM_STORAGE datastore '||g_schema_name || '.hz_contact_ds ' ||
3909                               'SECTION GROUP '||l_section_grp||' STOPLIST CTXSYS.EMPTY_STOPLIST LEXER '||g_schema_name || '.dqm_lexer memory ' || p_idx_mem || ''')'||case when(l_parallel_degree>1) then l_parallel_str else ' '
3910                               END;
3911                         ELSE
3912                           log(' Attempting to drop and create hz_stage_contact_t1 on hz_staged_contacts with new transformations.');
3913                           log(' Index Memory ' || p_idx_mem);
3914                           log(' Starting at ' || to_char(SYSDATE, 'HH24:MI:SS') );
3915 
3916                            BEGIN
3917                               -- DROP AND CREATE
3918                               EXECUTE IMMEDIATE 'DROP INDEX ' || l_index_owner || '.hz_stage_contact_t1 FORCE';
3919                               log('Dropped hz_stage_contact_t1');
3920                               EXCEPTION
3921                               WHEN OTHERS THEN
3922                               NULL;
3923 
3924                           END ;
3925 
3926                           EXECUTE IMMEDIATE 'CREATE INDEX ' || l_index_owner || '.hz_stage_contact_t1 ON ' ||l_index_owner ||
3927                               '.hz_staged_contacts(concat_col) indextype is ctxsys.context ' ||
3928                               'parameters (''storage '||g_schema_name || '.HZ_DQM_STORAGE datastore '||g_schema_name || '.hz_contact_ds ' ||
3929                               'SECTION GROUP '||l_section_grp||' STOPLIST CTXSYS.EMPTY_STOPLIST LEXER '||g_schema_name || '.dqm_lexer memory ' || p_idx_mem || ''')'||case when(l_parallel_degree>1) then l_parallel_str else ' '
3930                               END;
3931                           log('Created hz_stage_contact_t1');
3932 
3933                         END IF;
3934 
3935                         UPDATE HZ_DQM_STAGE_LOG set END_FLAG = 'Y', END_TIME=SYSDATE
3936                         WHERE operation = 'CREATE_INDEXES' AND step ='HZ_ORG_CONTACTS';
3937                         COMMIT;
3938                       END IF;
3939                       log(' Completed at ' || to_char(SYSDATE, 'HH24:MI:SS'));
3940                     END IF;
3941                   END IF;
3942                   log('');
3943 
3944                   IF CREATE_CPT_TEXT_INDEX THEN
3945                     create_btree_indexes ('CONTACT_POINTS');
3946                     BEGIN
3947                       SELECT start_flag, end_flag INTO l_start_flag, l_end_flag
3948                       FROM HZ_DQM_STAGE_LOG
3949                       WHERE OPERATION = 'CREATE_INDEXES'
3950                       AND step = 'HZ_CONTACT_POINTS';
3951                     EXCEPTION
3952                       WHEN no_data_found THEN
3953                         l_start_flag:=NULL;
3954                         l_end_flag:=NULL;
3955                     END;
3956 
3957                     IF nvl(l_end_flag,'N') = 'N' THEN
3958                       BEGIN
3959                         execute immediate 'begin ctx_output.start_log(''contact_point_index''); end;';
3960                       EXCEPTION
3961                         WHEN OTHERS THEN
3962                           NULL;
3963                       END;
3964 
3965                       IF nvl(l_start_flag,'N') = 'Y' THEN
3966                         BEGIN
3967                           log('Attempting restart build of index '||l_index_owner || '.hz_stage_cpt_t1');
3968                           EXECUTE IMMEDIATE 'ALTER INDEX ' || l_index_owner ||
3969                               '.hz_stage_cpt_t1 rebuild parameters(''resume memory ' || p_idx_mem || ''')';
3970 
3971                           log('Index Successfully built');
3972                           UPDATE HZ_DQM_STAGE_LOG set END_FLAG = 'Y', END_TIME=SYSDATE
3973                           WHERE operation = 'CREATE_INDEXES' AND step ='HZ_CONTACT_POINTS';
3974                           COMMIT;
3975 
3976                         EXCEPTION
3977                           WHEN OTHERS THEN
3978                             log('Restart unsuccessful. Rebuilding index.');
3979                             BEGIN
3980                               EXECUTE IMMEDIATE 'DROP INDEX ' || l_index_owner || '.hz_stage_cpt_t1 FORCE';
3981                               log('Dropped hz_stage_cpt_t1');
3982                             EXCEPTION
3983                               WHEN OTHERS THEN
3984                                 NULL;
3985                             END;
3986                             l_start_flag := 'N';
3987                             l_command := 'STAGE_ALL_DATA';
3988 
3989                         END;
3990                       END IF;
3991 
3992                       IF nvl(l_start_flag,'N') = 'N' THEN
3993                         UPDATE HZ_DQM_STAGE_LOG set START_FLAG = 'Y', START_TIME=SYSDATE
3994                         WHERE operation = 'CREATE_INDEXES' AND step ='HZ_CONTACT_POINTS';
3995                         COMMIT;
3996 
3997                         l_section_grp := g_schema_name || '.HZ_DQM_CPT_GRP';
3998 
3999                         IF l_command <> 'STAGE_NEW_TRANSFORMATIONS' THEN
4000                           log(' Creating hz_stage_cpt_t1 on hz_staged_contact_points. ');
4001                           log(' Index Memory ' || p_idx_mem);
4002                           log(' Starting at ' || to_char(SYSDATE, 'HH24:MI:SS'));
4003 
4004                           EXECUTE IMMEDIATE 'CREATE INDEX ' || l_index_owner || '.hz_stage_cpt_t1 ON ' ||l_index_owner ||
4005                               '.hz_staged_contact_points(concat_col) indextype is ctxsys.context ' ||
4006                               'parameters (''storage '||g_schema_name || '.HZ_DQM_STORAGE datastore '||g_schema_name || '.hz_contact_point_ds ' ||
4007                               'SECTION GROUP '||l_section_grp||' STOPLIST CTXSYS.EMPTY_STOPLIST LEXER '||g_schema_name || '.dqm_lexer memory ' || p_idx_mem || ''')'||case when(l_parallel_degree>1) then l_parallel_str else ' '
4008                               END;
4009                         ELSE
4010                           log(' Attempting to drop and create hz_stage_cpt_t1 on hz_staged_contact_points with new transformations.');
4011                           log(' Index Memory ' || p_idx_mem);
4012                           log(' Starting at ' || to_char(SYSDATE, 'HH24:MI:SS') );
4013 
4014 
4015                            BEGIN
4016                               -- DROP AND CREATE
4017                               EXECUTE IMMEDIATE 'DROP INDEX ' || l_index_owner || '.hz_stage_cpt_t1 FORCE';
4018                               log('Dropped hz_stage_contact_t1');
4019                               EXCEPTION
4020                               WHEN OTHERS THEN
4021                               NULL;
4022 
4023                            END ;
4024                           EXECUTE IMMEDIATE 'CREATE INDEX ' || l_index_owner || '.hz_stage_cpt_t1 ON ' ||l_index_owner ||
4025                               '.hz_staged_contact_points(concat_col) indextype is ctxsys.context ' ||
4026                               'parameters (''storage '||g_schema_name || '.HZ_DQM_STORAGE datastore '||g_schema_name || '.hz_contact_point_ds ' ||
4027                               'SECTION GROUP '||l_section_grp||' STOPLIST CTXSYS.EMPTY_STOPLIST LEXER '||g_schema_name || '.dqm_lexer memory ' || p_idx_mem || ''')'||case when(l_parallel_degree>1) then l_parallel_str else ' '
4028                               END;
4029 
4030                           log('Done creating hz_stage_contact_t1');
4031                         END IF;
4032 
4033                         UPDATE HZ_DQM_STAGE_LOG set END_FLAG = 'Y', END_TIME=SYSDATE
4034                         WHERE operation = 'CREATE_INDEXES' AND step ='HZ_CONTACT_POINTS';
4035                         COMMIT;
4036                       END IF;
4037                       log(' Completed at ' || to_char(SYSDATE, 'HH24:MI:SS'));
4038                     END IF;
4039                   END IF;
4040 
4041                    -- FINALLY UPDATE THE STAGED_FLAG IN HZ_TRANS_FUNCTIONS
4042                    UPDATE HZ_TRANS_FUNCTIONS_B
4043                    SET STAGED_FLAG='Y' WHERE nvl(ACTIVE_FLAG,'Y') = 'Y'
4044 				   AND nvl(staged_flag,'N')='N';
4045 				   log('Setting STAGED_FLAG=Y in HZ_TRANS_FUNCTIONS_B after create_indexes');
4046 		   --DELETE THE WORD REPLACEMENTS THAT ARE MARKED FOR DELETE AND
4047 		   --UPDATE THE STAGED FLAG OF WORD REPLACEMENTS TO Y.
4048 		   update_word_replacements;
4049 
4050                    IF CREATE_ALL_TEXT_INDEXES
4051                    THEN
4052                          log(' Creating preferences for all the denorm attributes');
4053                          create_denorm_attribute_pref ('PARTY_SITES');
4054                          create_denorm_attribute_pref ('CONTACTS');
4055                          create_denorm_attribute_pref ('CONTACT_POINTS');
4056                    ELSIF CREATE_PS_TEXT_INDEX
4057                    THEN
4058                         log(' Creating preference for the PARTY SITE denorm attribute');
4059                         create_denorm_attribute_pref ('PARTY_SITES');
4060                    ELSIF CREATE_CONTACT_TEXT_INDEX
4061                    THEN
4062                         log(' Creating preference for the CONTACT denorm attribute');
4063                         create_denorm_attribute_pref ('CONTACTS');
4064                    ELSIF CREATE_CPT_TEXT_INDEX
4065                    THEN
4066                         log(' Creating preference for the CONTACT POINT denorm attribute');
4067                         create_denorm_attribute_pref ('CONTACT_POINTS');
4068                    END IF ;
4069 
4070 
4071   END IF;
4072 
4073   log('');
4074   log('Concurrent Program Execution completed ');
4075   log('End Time : '|| TO_CHAR(SYSDATE, 'MM-DD-YY HH24:MI:SS'));
4076 
4077 EXCEPTION
4078   WHEN FND_API.G_EXC_ERROR THEN
4079     outandlog('Error:  ' || FND_MESSAGE.GET);
4080     log('Error ' || SQLERRM);
4081     retcode := 2;
4082     errbuf := errbuf || logerror;
4083     outandlog('Aborting concurrent program execution');
4084     FND_FILE.close;
4085   WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
4086     outandlog('Error:  ' || FND_MESSAGE.GET);
4087     log('Error ' || SQLERRM);
4088     retcode := 2;
4089     errbuf := errbuf || logerror;
4090     outandlog('Aborting concurrent program execution');
4091     FND_FILE.close;
4092   WHEN OTHERS THEN
4093     outandlog('Error:  ' || FND_MESSAGE.GET);
4094     log('SQL Error ' || SQLERRM);
4095     retcode := 2;
4096     errbuf := errbuf || logerror || SQLERRM;
4097     outandlog('Aborting concurrent program execution');
4098     FND_FILE.close;
4099 END;
4100 
4101 PROCEDURE generate_map_proc (
4102    p_entity 		IN	VARCHAR2,
4103    p_proc_name 		IN	VARCHAR2,
4104    p_command 		IN	VARCHAR2
4105 ) IS
4106   l_update_str VARCHAR2(4000);
4107   FIRST BOOLEAN;
4108 BEGIN
4109 
4110 
4111   l('FUNCTION ' || p_proc_name || '( ');
4112   l('      p_record_id NUMBER,');
4113   IF p_entity = 'PARTY' THEN
4114     l('      p_search_rec HZ_PARTY_SEARCH.party_search_rec_type');
4115     l('  ) RETURN HZ_PARTY_STAGE.party_stage_rec_type IS ');
4116     l('l_stage_rec HZ_PARTY_STAGE.party_stage_rec_type;');
4117     l('BEGIN');
4118     l('  l_stage_rec.party_id := p_record_id;');
4119     l('  l_stage_rec.status := p_search_rec.STATUS;');
4120   ELSIF p_entity = 'PARTY_SITES' THEN
4121     l('      p_party_id NUMBER,');
4122     l('      p_search_rec HZ_PARTY_SEARCH.party_site_search_rec_type');
4123     l('  ) RETURN HZ_PARTY_STAGE.party_site_stage_rec_type IS ');
4124     l('l_stage_rec HZ_PARTY_STAGE.party_site_stage_rec_type;');
4125     l('BEGIN');
4126     l('  l_stage_rec.party_id := p_party_id;');
4127     l('  l_stage_rec.party_site_id := p_record_id;');
4128   ELSIF p_entity = 'CONTACTS' THEN
4129     l('      p_party_id NUMBER,');
4130     l('      p_search_rec HZ_PARTY_SEARCH.contact_search_rec_type');
4131     l('  ) RETURN HZ_PARTY_STAGE.contact_stage_rec_type IS ');
4132     l('l_stage_rec HZ_PARTY_STAGE.contact_stage_rec_type;');
4133     l('BEGIN');
4134     l('  l_stage_rec.party_id := p_party_id;');
4135     l('  l_stage_rec.org_contact_id := p_record_id;');
4136   ELSIF p_entity = 'CONTACT_POINTS' THEN
4137     l('      p_party_id NUMBER,');
4138     l('      p_search_rec HZ_PARTY_SEARCH.contact_point_search_rec_type');
4139     l('  ) RETURN HZ_PARTY_STAGE.contact_pt_stage_rec_type IS ');
4140     l('l_stage_rec HZ_PARTY_STAGE.contact_pt_stage_rec_type;');
4141     l('BEGIN');
4142     l('  l_stage_rec.party_id := p_party_id;');
4143     l('  l_stage_rec.contact_point_id := p_record_id;');
4144     l('  l_stage_rec.contact_point_type := p_search_rec.CONTACT_POINT_TYPE;');
4145   END IF;
4146 
4147   IF p_command = 'STAGE_NEW_TRANSFORMATIONS' THEN
4148     FIRST := TRUE;
4149     l_update_str := null;
4150 
4151     for ATTRS IN (SELECT ATTRIBUTE_ID, ATTRIBUTE_NAME
4152                   FROM HZ_TRANS_ATTRIBUTES_VL
4153                   WHERE ENTITY_NAME = p_entity)
4154 
4155     LOOP
4156        for FUNCS IN (SELECT PROCEDURE_NAME, STAGED_ATTRIBUTE_COLUMN
4157                      FROM HZ_TRANS_FUNCTIONS_VL
4158                      WHERE ATTRIBUTE_ID = ATTRS.ATTRIBUTE_ID
4159                      AND nvl(ACTIVE_FLAG,'Y') = 'Y'
4160                      AND NVL(STAGED_FLAG,'N') <> 'Y')
4161        LOOP
4162           l('  l_stage_rec.'||FUNCS.STAGED_ATTRIBUTE_COLUMN || ' := ');
4163           l('        ' || FUNCS.PROCEDURE_NAME ||'(');
4164           l('             p_search_rec.'||ATTRS.ATTRIBUTE_NAME);
4165           l('             ,null,''' || ATTRS.ATTRIBUTE_NAME || '''');
4166           l('             ,''' ||p_entity||''');');
4167           IF FIRST THEN
4168             l_update_str := ' '|| FUNCS.STAGED_ATTRIBUTE_COLUMN || ' = ' ||
4169                             ' l_stage_rec.'||FUNCS.STAGED_ATTRIBUTE_COLUMN || ' ';
4170             FIRST := FALSE;
4171           ELSE
4172             l_update_str := l_update_str || ','|| FUNCS.STAGED_ATTRIBUTE_COLUMN || ' = ' ||
4173                             ' l_stage_rec.'||FUNCS.STAGED_ATTRIBUTE_COLUMN || ' ';
4174           END IF;
4175        END LOOP;
4176     END LOOP;
4177 
4178     IF l_update_str IS NOT NULL THEN
4179       IF p_entity = 'PARTY' THEN
4180         l('  UPDATE HZ_STAGED_PARTIES SET ');
4181         l('  ' || l_update_str);
4182         l('  WHERE party_id = p_record_id;');
4183       ELSIF p_entity = 'PARTY_SITES' THEN
4184         l('  UPDATE HZ_STAGED_PARTY_SITES SET ');
4185         l('  ' || l_update_str);
4186         l('  WHERE party_site_id = p_record_id;');
4187       ELSIF p_entity = 'CONTACTS' THEN
4188         l('  UPDATE HZ_STAGED_CONTACTS SET ');
4189         l('  ' || l_update_str);
4190         l('  WHERE org_contact_id = p_record_id;');
4191       ELSIF p_entity = 'CONTACT_POINTS' THEN
4192         l('  UPDATE HZ_STAGED_CONTACT_POINTS SET ');
4193         l('  ' || l_update_str);
4194         l('  WHERE contact_point_id = p_record_id;');
4195       END IF;
4196     END IF;
4197 
4198   ELSE
4199 
4200     for ATTRS IN (SELECT ATTRIBUTE_ID, ATTRIBUTE_NAME
4201                   FROM HZ_TRANS_ATTRIBUTES_VL
4202                   WHERE ENTITY_NAME = p_entity)
4203     LOOP
4204        for FUNCS IN (SELECT PROCEDURE_NAME, STAGED_ATTRIBUTE_COLUMN
4205                      FROM HZ_TRANS_FUNCTIONS_VL
4206                      WHERE ATTRIBUTE_ID = ATTRS.ATTRIBUTE_ID
4207                      AND nvl(ACTIVE_FLAG,'Y') = 'Y')
4208        LOOP
4209           l('  l_stage_rec.'||FUNCS.STAGED_ATTRIBUTE_COLUMN || ' := ');
4210           l('        ' || FUNCS.PROCEDURE_NAME ||'(');
4211           l('             p_search_rec.'||ATTRS.ATTRIBUTE_NAME);
4212 
4213           -- Temporary fix for bug 2265498
4214           -- Will be fixed when bug 2269873
4215           l('             ,null,''' || ATTRS.ATTRIBUTE_NAME || '''');
4216           l('             ,''' ||p_entity||''');');
4217        END LOOP;
4218     END LOOP;
4219   END IF;
4220 
4221   l('  RETURN l_stage_rec;');
4222   l('EXCEPTION');
4223   l('  WHEN OTHERS THEN');
4224   l('    FND_MESSAGE.SET_NAME(''AR'', ''HZ_MAP_PROC_ERROR'');');
4225   l('    FND_MESSAGE.SET_TOKEN(''PROC'' ,''' || p_proc_name||''');');
4226   l('    FND_MESSAGE.SET_TOKEN(''ERROR'' ,SQLERRM);');
4227   l('    FND_MSG_PUB.ADD;');
4228   l('    RAISE FND_API.G_EXC_UNEXPECTED_ERROR;');
4229 
4230   l('END;');
4231 
4232 EXCEPTION
4233   WHEN OTHERS THEN
4234     FND_MESSAGE.SET_NAME('AR', 'HZ_STAGE_SQL_ERROR');
4235     FND_MESSAGE.SET_TOKEN('PROC' ,'generate_transform_proc');
4236     FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM);
4237     FND_MSG_PUB.ADD;
4238     RAISE FND_API.G_EXC_ERROR;
4239 END;
4240 
4241 PROCEDURE generate_declarations IS
4242 
4243 BEGIN
4244   l('  TYPE NumberList IS TABLE OF NUMBER INDEX BY BINARY_INTEGER;');
4245   l('  TYPE Char1List IS TABLE OF VARCHAR2(1) INDEX BY BINARY_INTEGER;');
4246   l('  TYPE Char2List IS TABLE OF VARCHAR2(30) INDEX BY BINARY_INTEGER;');
4247   l('  TYPE CharList IS TABLE OF VARCHAR2(2000) INDEX BY BINARY_INTEGER;');
4248   l('  TYPE RowIdList IS TABLE OF ROWID INDEX BY BINARY_INTEGER; ');
4249   l('  ');
4250   l('  H_ROWID RowIdList;');
4251   l('  H_P_PARTY_ID NumberList;');
4252   l('  H_PS_DEN CharList;');
4253   l('  H_CT_DEN CharList;');
4254   l('  H_CPT_DEN CharList;');
4255   l('  H_PARTY_INDEX NumberList;');
4256   l('  H_PARTY_ID NumberList;');
4257   l('  H_C_PARTY_ID NumberList;');
4258   l('  H_PS_PARTY_ID NumberList;');
4259   l('  H_CPT_PARTY_ID NumberList;');
4260   l('  H_R_PARTY_ID NumberList;');
4261   l('  H_STATUS Char1List;');
4262   l('  H_PARTY_SITE_ID NumberList;');
4263   l('  H_CPT_PARTY_SITE_ID NumberList;');
4264   l('  H_ORG_CONTACT_ID NumberList;');
4265   l('  H_PS_ORG_CONTACT_ID NumberList;');
4266   l('  H_CPT_ORG_CONTACT_ID NumberList;');
4267   l('  H_CONTACT_POINT_ID NumberList;');
4268   l('  H_CONTACT_POINT_TYPE Char2List;');
4269   l('  H_TX1 CharList;');
4270   l('  H_TX2 CharList;');
4271   l('  H_TX3 CharList;');
4272   l('  H_TX4 CharList;');
4273   l('  H_TX5 CharList;');
4274   l('  H_TX6 CharList;');
4275   l('  H_TX7 CharList;');
4276   l('  H_TX8 CharList;');
4277   l('  H_TX9 CharList;');
4278   l('  H_TX10 CharList;');
4279   l('  H_TX11 CharList;');
4280   l('  H_TX12 CharList;');
4281   l('  H_TX13 CharList;');
4282   l('  H_TX14 CharList;');
4283   l('  H_TX15 CharList;');
4284   l('  H_TX16 CharList;');
4285   l('  H_TX17 CharList;');
4286   l('  H_TX18 CharList;');
4287   l('  H_TX19 CharList;');
4288   l('  H_TX20 CharList;');
4289   l('  H_TX21 CharList;');
4290   l('  H_TX22 CharList;');
4291   l('  H_TX23 CharList;');
4292   l('  H_TX24 CharList;');
4293   l('  H_TX25 CharList;');
4294   l('  H_TX26 CharList;');
4295   l('  H_TX27 CharList;');
4296   l('  H_TX28 CharList;');
4297   l('  H_TX29 CharList;');
4298   l('  H_TX30 CharList;');
4299   l('  H_TX31 CharList;');
4300   l('  H_TX32 CharList;');
4301   l('  H_TX33 CharList;');
4302   l('  H_TX34 CharList;');
4303   l('  H_TX35 CharList;');
4304   l('  H_TX36 CharList;');
4305   l('  H_TX37 CharList;');
4306   l('  H_TX38 CharList;');
4307   l('  H_TX39 CharList;');
4308   l('  H_TX40 CharList;');
4309   l('  H_TX41 CharList;');
4310   l('  H_TX42 CharList;');
4311   l('  H_TX43 CharList;');
4312   l('  H_TX44 CharList;');
4313   l('  H_TX45 CharList;');
4314   l('  H_TX46 CharList;');
4315   l('  H_TX47 CharList;');
4316   l('  H_TX48 CharList;');
4317   l('  H_TX49 CharList;');
4318   l('  H_TX50 CharList;');
4319   l('  H_TX51 CharList;');
4320   l('  H_TX52 CharList;');
4321   l('  H_TX53 CharList;');
4322   l('  H_TX54 CharList;');
4323   l('  H_TX55 CharList;');
4324   l('  H_TX56 CharList;');
4325   l('  H_TX57 CharList;');
4326   l('  H_TX58 CharList;');
4327   l('  H_TX59 CharList;');
4328   l('  H_TX60 CharList;');
4329   l('  H_TX61 CharList;');
4330   l('  H_TX62 CharList;');
4331   l('  H_TX63 CharList;');
4332   l('  H_TX64 CharList;');
4333   l('  H_TX65 CharList;');
4334   l('  H_TX66 CharList;');
4335   l('  H_TX67 CharList;');
4336   l('  H_TX68 CharList;');
4337   l('  H_TX69 CharList;');
4338   l('  H_TX70 CharList;');
4339   l('  H_TX71 CharList;');
4340   l('  H_TX72 CharList;');
4341   l('  H_TX73 CharList;');
4342   l('  H_TX74 CharList;');
4343   l('  H_TX75 CharList;');
4344   l('  H_TX76 CharList;');
4345   l('  H_TX77 CharList;');
4346   l('  H_TX78 CharList;');
4347   l('  H_TX79 CharList;');
4348   l('  H_TX80 CharList;');
4349   l('  H_TX81 CharList;');
4350   l('  H_TX82 CharList;');
4351   l('  H_TX83 CharList;');
4352   l('  H_TX84 CharList;');
4353   l('  H_TX85 CharList;');
4354   l('  H_TX86 CharList;');
4355   l('  H_TX87 CharList;');
4356   l('  H_TX88 CharList;');
4357   l('  H_TX89 CharList;');
4358   l('  H_TX90 CharList;');
4359   l('  H_TX91 CharList;');
4360   l('  H_TX92 CharList;');
4361   l('  H_TX93 CharList;');
4362   l('  H_TX94 CharList;');
4363   l('  H_TX95 CharList;');
4364   l('  H_TX96 CharList;');
4365   l('  H_TX97 CharList;');
4366   l('  H_TX98 CharList;');
4367   l('  H_TX99 CharList;');
4368   l('  H_TX100 CharList;');
4369   l('  H_TX101 CharList;');
4370   l('  H_TX102 CharList;');
4371   l('  H_TX103 CharList;');
4372   l('  H_TX104 CharList;');
4373   l('  H_TX105 CharList;');
4374   l('  H_TX106 CharList;');
4375   l('  H_TX107 CharList;');
4376   l('  H_TX108 CharList;');
4377   l('  H_TX109 CharList;');
4378   l('  H_TX110 CharList;');
4379   l('  H_TX111 CharList;');
4380   l('  H_TX112 CharList;');
4381   l('  H_TX113 CharList;');
4382   l('  H_TX114 CharList;');
4383   l('  H_TX115 CharList;');
4384   l('  H_TX116 CharList;');
4385   l('  H_TX117 CharList;');
4386   l('  H_TX118 CharList;');
4387   l('  H_TX119 CharList;');
4388   l('  H_TX120 CharList;');
4389   l('  H_TX121 CharList;');
4390   l('  H_TX122 CharList;');
4391   l('  H_TX123 CharList;');
4392   l('  H_TX124 CharList;');
4393   l('  H_TX125 CharList;');
4394   l('  H_TX126 CharList;');
4395   l('  H_TX127 CharList;');
4396   l('  H_TX128 CharList;');
4397   l('  H_TX129 CharList;');
4398   l('  H_TX130 CharList;');
4399   l('  H_TX131 CharList;');
4400   l('  H_TX132 CharList;');
4401   l('  H_TX133 CharList;');
4402   l('  H_TX134 CharList;');
4403   l('  H_TX135 CharList;');
4404   l('  H_TX136 CharList;');
4405   l('  H_TX137 CharList;');
4406   l('  H_TX138 CharList;');
4407   l('  H_TX139 CharList;');
4408   l('  H_TX140 CharList;');
4409   l('  H_TX141 CharList;');
4410   l('  H_TX142 CharList;');
4411   l('  H_TX143 CharList;');
4412   l('  H_TX144 CharList;');
4413   l('  H_TX145 CharList;');
4414   l('  H_TX146 CharList;');
4415   l('  H_TX147 CharList;');
4416   l('  H_TX148 CharList;');
4417   l('  H_TX149 CharList;');
4418   l('  H_TX150 CharList;');
4419   l('  H_TX151 CharList;');
4420   l('  H_TX152 CharList;');
4421   l('  H_TX153 CharList;');
4422   l('  H_TX154 CharList;');
4423   l('  H_TX155 CharList;');
4424   l('  H_TX156 CharList;');
4425   l('  H_TX157 CharList;');
4426   l('  H_TX158 CharList;');
4427   l('  H_TX159 CharList;');
4428   l('  H_TX160 CharList;');
4429   l('  H_TX161 CharList;');
4430   l('  H_TX162 CharList;');
4431   l('  H_TX163 CharList;');
4432   l('  H_TX164 CharList;');
4433   l('  H_TX165 CharList;');
4434   l('  H_TX166 CharList;');
4435   l('  H_TX167 CharList;');
4436   l('  H_TX168 CharList;');
4437   l('  H_TX169 CharList;');
4438   l('  H_TX170 CharList;');
4439   l('  H_TX171 CharList;');
4440   l('  H_TX172 CharList;');
4441   l('  H_TX173 CharList;');
4442   l('  H_TX174 CharList;');
4443   l('  H_TX175 CharList;');
4444   l('  H_TX176 CharList;');
4445   l('  H_TX177 CharList;');
4446   l('  H_TX178 CharList;');
4447   l('  H_TX179 CharList;');
4448   l('  H_TX180 CharList;');
4449   l('  H_TX181 CharList;');
4450   l('  H_TX182 CharList;');
4451   l('  H_TX183 CharList;');
4452   l('  H_TX184 CharList;');
4453   l('  H_TX185 CharList;');
4454   l('  H_TX186 CharList;');
4455   l('  H_TX187 CharList;');
4456   l('  H_TX188 CharList;');
4457   l('  H_TX189 CharList;');
4458   l('  H_TX190 CharList;');
4459   l('  H_TX191 CharList;');
4460   l('  H_TX192 CharList;');
4461   l('  H_TX193 CharList;');
4462   l('  H_TX194 CharList;');
4463   l('  H_TX195 CharList;');
4464   l('  H_TX196 CharList;');
4465   l('  H_TX197 CharList;');
4466   l('  H_TX198 CharList;');
4467   l('  H_TX199 CharList;');
4468   l('  H_TX200 CharList;');
4469   l('  H_TX201 CharList;');
4470   l('  H_TX202 CharList;');
4471   l('  H_TX203 CharList;');
4472   l('  H_TX204 CharList;');
4473   l('  H_TX205 CharList;');
4474   l('  H_TX206 CharList;');
4475   l('  H_TX207 CharList;');
4476   l('  H_TX208 CharList;');
4477   l('  H_TX209 CharList;');
4478   l('  H_TX210 CharList;');
4479   l('  H_TX211 CharList;');
4480   l('  H_TX212 CharList;');
4481   l('  H_TX213 CharList;');
4482   l('  H_TX214 CharList;');
4483   l('  H_TX215 CharList;');
4484   l('  H_TX216 CharList;');
4485   l('  H_TX217 CharList;');
4486   l('  H_TX218 CharList;');
4487   l('  H_TX219 CharList;');
4488   l('  H_TX220 CharList;');
4489   l('  H_TX221 CharList;');
4490   l('  H_TX222 CharList;');
4491   l('  H_TX223 CharList;');
4492   l('  H_TX224 CharList;');
4493   l('  H_TX225 CharList;');
4494   l('  H_TX226 CharList;');
4495   l('  H_TX227 CharList;');
4496   l('  H_TX228 CharList;');
4497   l('  H_TX229 CharList;');
4498   l('  H_TX230 CharList;');
4499   l('  H_TX231 CharList;');
4500   l('  H_TX232 CharList;');
4501   l('  H_TX233 CharList;');
4502   l('  H_TX234 CharList;');
4503   l('  H_TX235 CharList;');
4504   l('  H_TX236 CharList;');
4505   l('  H_TX237 CharList;');
4506   l('  H_TX238 CharList;');
4507   l('  H_TX239 CharList;');
4508   l('  H_TX240 CharList;');
4509   l('  H_TX241 CharList;');
4510   l('  H_TX242 CharList;');
4511   l('  H_TX243 CharList;');
4512   l('  H_TX244 CharList;');
4513   l('  H_TX245 CharList;');
4514   l('  H_TX246 CharList;');
4515   l('  H_TX247 CharList;');
4516   l('  H_TX248 CharList;');
4517   l('  H_TX249 CharList;');
4518   l('  H_TX250 CharList;');
4519   l('  H_TX251 CharList;');
4520   l('  H_TX252 CharList;');
4521   l('  H_TX253 CharList;');
4522   l('  H_TX254 CharList;');
4523   l('  H_TX255 CharList;');
4524 END;
4525 
4526 PROCEDURE generate_ds_proc IS
4527 
4528 FIRST BOOLEAN := TRUE;
4529 uname VARCHAR2(255);
4530 
4531 pref_cols VARCHAR2(1000);
4532 proc_cols VARCHAR2(2000);
4533 fetch_cols VARCHAR2(2000);
4534 CURSOR l_ent_cur(l_ent_name VARCHAR2) IS (SELECT STAGED_ATTRIBUTE_COLUMN
4535                 FROM HZ_TRANS_ATTRIBUTES_VL a, HZ_TRANS_FUNCTIONS_VL f
4536                 WHERE ENTITY_NAME = l_ent_name
4537                 AND nvl(f.ACTIVE_FLAG,'Y') = 'Y'
4538                 AND nvl(f.PRIMARY_FLAG,'Y') = 'Y'
4539                 AND nvl(a.DENORM_FLAG,'N') = 'Y'
4540                 AND f.ATTRIBUTE_ID = a.ATTRIBUTE_ID);
4541 l_attr VARCHAR2(255);
4542 
4543 BEGIN
4544 
4545   SELECT SYS_CONTEXT ('USERENV', 'SESSION_USER') INTO uname
4546   FROM DUAL;
4547 
4548   get_datastore_cols('PARTY', pref_cols, proc_cols, fetch_cols);
4549 
4550   l('  FUNCTION miscp (rid IN ROWID) RETURN CLOB IS');
4551   IF proc_cols IS NULL THEN
4552     l('  BEGIN');
4553     l('    RETURN NULL;');
4554     l('  END;');
4555   ELSE
4556     l('  CURSOR P IS');
4557     l('       SELECT '||proc_cols||' FROM '||uname||'.HZ_STAGED_PARTIES WHERE ROWID=rid;');
4558     l('  val CLOB;');
4559     l('  BEGIN');
4560     l('      val:=null;');
4561     l('      FOR rec in P LOOP');
4562     l('           val:='||fetch_cols||';');
4563     l('      END LOOP;');
4564     l('      return val;');
4565     l('  END;');
4566   END IF;
4567 
4568 
4569   get_datastore_cols('PARTY_SITES', pref_cols, proc_cols, fetch_cols);
4570   l('  FUNCTION miscps (rid IN ROWID) RETURN CLOB IS');
4571   IF proc_cols IS NULL THEN
4572     l('  BEGIN');
4573     l('    RETURN NULL;');
4574     l('  END;');
4575   ELSE
4576     l('  CURSOR P IS');
4577     l('       SELECT '||proc_cols||' FROM '||uname||'.HZ_STAGED_PARTY_SITES WHERE ROWID=rid;');
4578     l('  val CLOB ;');
4579     l('  BEGIN');
4580     l('      val:=null;');
4581     l('      FOR rec in P LOOP');
4582     l('           val:='||fetch_cols||';');
4583     l('      END LOOP;');
4584     l('      return val;');
4585     l('  END;');
4586   END IF;
4587 
4588   get_datastore_cols('CONTACTS', pref_cols, proc_cols, fetch_cols);
4589   l('  FUNCTION miscct (rid IN ROWID) RETURN CLOB IS');
4590   IF proc_cols IS NULL THEN
4591     l('  BEGIN');
4592     l('    RETURN NULL;');
4593     l('  END;');
4594   ELSE
4595     l('  CURSOR P IS');
4596     l('       SELECT '||proc_cols||' FROM '||uname||'.HZ_STAGED_CONTACTS WHERE ROWID=rid;');
4597     l('  val CLOB;');
4598     l('  BEGIN');
4599     l('      val:=null;');
4600     l('      FOR rec in P LOOP');
4601     l('          val:='||fetch_cols||';');
4602     l('      END LOOP;');
4603     l('      return val;');
4604     l('  END;');
4605 
4606   END IF;
4607 
4608   get_datastore_cols('CONTACT_POINTS', pref_cols, proc_cols, fetch_cols);
4609   l('  FUNCTION misccpt (rid IN ROWID) RETURN CLOB IS');
4610   IF proc_cols IS NULL THEN
4611     l('  BEGIN');
4612     l('    RETURN NULL;');
4613     l('  END;');
4614   ELSE
4615     l('  CURSOR P IS');
4616     l('       SELECT '||proc_cols||' FROM '||uname||'.HZ_STAGED_CONTACT_POINTS WHERE ROWID=rid;');
4617     l('  val CLOB;');
4618     l('  BEGIN');
4619     l('      val:=null;');
4620     l('      FOR rec in P LOOP');
4621     l('           val:='||fetch_cols||';');
4622     l('      END LOOP;');
4623     l('      return val;');
4624     l('  END;');
4625   END IF;
4626 
4627   l('  FUNCTION den_ps (party_id NUMBER) RETURN VARCHAR2 IS');
4628   l('   CURSOR party_site_denorm (cp_party_id NUMBER) IS');
4629   l('    SELECT distinct');
4630   OPEN l_ent_cur('PARTY_SITES');
4631   LOOP
4632       FETCH l_ent_cur INTO l_attr;
4633       EXIT WHEN l_ent_cur%NOTFOUND;
4634       l('      '||l_attr ||'||'' ''||');
4635   END LOOP;
4636   CLOSE l_ent_cur;
4637   l('        '' ''');
4638   l('    FROM '||uname||'.HZ_STAGED_PARTY_SITES');
4639   l('    WHERE party_id = cp_party_id;');
4640   l('    l_buffer VARCHAR2(4000);');
4641   l('    l_den_ps VARCHAR2(2000);');
4642   l('  BEGIN');
4643   l('     OPEN party_site_denorm(party_id);');
4644   l('     LOOP');
4645   l('       FETCH party_site_denorm INTO l_den_ps;');
4646   l('       EXIT WHEN party_site_denorm%NOTFOUND;');
4647   l('       l_buffer := l_buffer||'' ''||l_den_ps;');
4648   l('     END LOOP;');
4649   l('     CLOSE party_site_denorm;');
4650   l('     RETURN l_buffer;');
4651   l('  EXCEPTION');
4652   l('    WHEN OTHERS THEN');
4653   l('      RETURN l_buffer;');
4654 
4655   l('  END;');
4656 
4657 
4658   l('  FUNCTION den_ct (party_id NUMBER) RETURN VARCHAR2 IS');
4659   l('   CURSOR contact_denorm (cp_party_id NUMBER) IS');
4660   l('    SELECT distinct');
4661   OPEN l_ent_cur('CONTACTS');
4662   LOOP
4663       FETCH l_ent_cur INTO l_attr;
4664       EXIT WHEN l_ent_cur%NOTFOUND;
4665       l('      '||l_attr ||'||'' ''||');
4666   END LOOP;
4667   CLOSE l_ent_cur;
4668   l('        '' ''');
4669   l('    FROM '||uname||'.HZ_STAGED_CONTACTS');
4670   l('    WHERE party_id = cp_party_id;');
4671   l('    l_buffer VARCHAR2(4000);');
4672   l('    l_den_ct VARCHAR2(2000);');
4673   l('  BEGIN');
4674   l('     OPEN contact_denorm(party_id);');
4675   l('     LOOP');
4676   l('       FETCH contact_denorm INTO l_den_ct;');
4677   l('       EXIT WHEN contact_denorm%NOTFOUND;');
4678   l('       l_buffer := l_buffer||'' ''||l_den_ct;');
4679   l('     END LOOP;');
4680   l('     CLOSE contact_denorm;');
4681   l('     RETURN l_buffer;');
4682   l('  EXCEPTION');
4683   l('    WHEN OTHERS THEN');
4684   l('      RETURN l_buffer;');
4685   l('  END;');
4686 
4687   l('  FUNCTION den_cpt (party_id NUMBER) RETURN VARCHAR2 IS');
4688   l('   CURSOR contact_pt_denorm (cp_party_id NUMBER) IS');
4689   l('    SELECT distinct');
4690   OPEN l_ent_cur('CONTACT_POINTS');
4691   LOOP
4692       FETCH l_ent_cur INTO l_attr;
4693       EXIT WHEN l_ent_cur%NOTFOUND;
4694       l('      '||l_attr ||'||'' ''||');
4695   END LOOP;
4696   CLOSE l_ent_cur;
4697   l('        '' ''');
4698   l('    FROM '||uname||'.HZ_STAGED_CONTACT_POINTS');
4699   l('    WHERE party_id = cp_party_id;');
4700   l('    l_buffer VARCHAR2(4000);');
4701   l('    l_den_cpt VARCHAR2(2000);');
4702   l('  BEGIN');
4703   l('     OPEN contact_pt_denorm(party_id);');
4704   l('     LOOP');
4705   l('       FETCH contact_pt_denorm INTO l_den_cpt;');
4706   l('       EXIT WHEN contact_pt_denorm%NOTFOUND;');
4707   l('       l_buffer := l_buffer||'' ''||l_den_cpt;');
4708   l('     END LOOP;');
4709   l('     CLOSE contact_pt_denorm;');
4710   l('     RETURN l_buffer;');
4711   l('  EXCEPTION');
4712   l('    WHEN OTHERS THEN');
4713   l('      RETURN l_buffer;');
4714   l('  END;');
4715   l('');
4716 
4717   l('    FUNCTION den_acc_number (party_id NUMBER) RETURN VARCHAR2 IS'); --Bug 9155543
4718  	l('    CURSOR all_account_number (p_party_id NUMBER) IS');
4719  	l('    SELECT ACCOUNT_NUMBER');
4720  	l('    FROM  '||uname||'.hz_cust_accounts');
4721  	l('    WHERE PARTY_ID = p_party_id');
4722  	l('    ORDER BY STATUS,CREATION_DATE;');
4723  	l('  ');
4724  	l('    l_acct_number VARCHAR2(30);');
4725  	l('    l_buffer VARCHAR2(4000);');
4726  	l('    ');
4727  	l('    BEGIN');
4728  	l('       OPEN all_account_number(party_id);');
4729  	l('       LOOP');
4730  	l('         FETCH all_account_number INTO l_acct_number;');
4731  	l('         EXIT WHEN all_account_number%NOTFOUND;');
4732  	l('         l_buffer := l_buffer||'' ''||l_acct_number;');
4733  	l('       END LOOP;');
4734  	l('       CLOSE all_account_number;');
4735  	l('       RETURN l_buffer;');
4736  	l('    EXCEPTION');
4737  	l('      WHEN OTHERS THEN');
4738  	l('        RETURN l_buffer;');
4739  	l('    END;');
4740  	l('');
4741 END;
4742 
4743 
4744 -- REPURI. Proccedure to generate the log procedure for error logging.
4745 
4746 PROCEDURE generate_log IS
4747 
4748 BEGIN
4749   l('');
4750   l('  PROCEDURE log( ');
4751   l('    message      IN      VARCHAR2, ');
4752   l('    newline      IN      BOOLEAN DEFAULT TRUE) IS ');
4753   l('  BEGIN ');
4754   l('    IF message = ''NEWLINE'' THEN ');
4755   l('      FND_FILE.NEW_LINE(FND_FILE.LOG, 1); ');
4756   l('    ELSIF (newline) THEN ');
4757   l('      FND_FILE.put_line(fnd_file.log,message); ');
4758   l('    ELSE ');
4759   l('      FND_FILE.put(fnd_file.log,message); ');
4760   l('    END IF; ');
4761   l('  END log; ');
4762   l('');
4763 
4764 END;
4765 
4766 -- REPURI added this procedure for generating a procedure to
4767 -- insert errored records into HZ_DQM_SYNC_INTERFACE table.
4768 
4769 PROCEDURE generate_ins_dqm_sync_err_rec IS
4770 
4771 BEGIN
4772   l('');
4773   l('  PROCEDURE insert_dqm_sync_error_rec ( ');
4774   l('    p_party_id            IN   NUMBER, ');
4775   l('    p_record_id           IN   NUMBER, ');
4776   l('    p_party_site_id       IN   NUMBER, ');
4777   l('    p_org_contact_id      IN   NUMBER, ');
4778   l('    p_entity              IN   VARCHAR2, ');
4779   l('    p_operation           IN   VARCHAR2, ');
4780   l('    p_staged_flag         IN   VARCHAR2 DEFAULT ''E'', ');
4781   l('    p_realtime_sync_flag  IN   VARCHAR2 DEFAULT ''Y'', ');
4782   l('    p_error_data          IN   VARCHAR2 ');
4783   l('  ) IS ');
4784   l('  BEGIN ');
4785   l('    INSERT INTO hz_dqm_sync_interface ( ');
4786   l('      PARTY_ID, ');
4787   l('      RECORD_ID, ');
4788   l('      PARTY_SITE_ID, ');
4789   l('      ORG_CONTACT_ID, ');
4790   l('      ENTITY, ');
4791   l('      OPERATION, ');
4792   l('      STAGED_FLAG, ');
4793   l('      REALTIME_SYNC_FLAG, ');
4794   l('      ERROR_DATA, ');
4795   l('      CREATED_BY, ');
4796   l('      CREATION_DATE, ');
4797   l('      LAST_UPDATE_LOGIN, ');
4798   l('      LAST_UPDATE_DATE, ');
4799   l('      LAST_UPDATED_BY, ');
4800   l('      SYNC_INTERFACE_NUM ');
4801   l('    ) VALUES ( ');
4802   l('      p_party_id, ');
4803   l('      p_record_id, ');
4804   l('      p_party_site_id, ');
4805   l('      p_org_contact_id, ');
4806   l('      p_entity, ');
4807   l('      p_operation, ');
4808   l('      p_staged_flag, ');
4809   l('      p_realtime_sync_flag, ');
4810   l('      p_error_data, ');
4811   l('      hz_utility_pub.created_by, ');
4812   l('      hz_utility_pub.creation_date, ');
4813   l('      hz_utility_pub.last_update_login, ');
4814   l('      hz_utility_pub.last_update_date, ');
4815   l('      hz_utility_pub.user_id, ');
4816   l('      HZ_DQM_SYNC_INTERFACE_S.nextval ');
4817   l('    ); ');
4818   l('  END insert_dqm_sync_error_rec; ');
4819   l('');
4820 
4821 END;
4822 
4823 -- REPURI. Proccedure to generate the code (into HZ_STAGE_MAP_TRANSFORM)
4824 -- for OPEN_BULK_IMP_SYNC_PARTY_CUR procedure. Bug 4884735.
4825 
4826 PROCEDURE gen_bulk_imp_sync_party_query IS
4827 
4828  cur_col_num NUMBER := 1;
4829 
4830  TYPE coltab IS TABLE OF VARCHAR2(2000) INDEX BY BINARY_INTEGER;
4831 
4832  l_org_select coltab;
4833  l_per_select coltab;
4834  l_oth_select coltab;
4835 
4836  l_forall_list coltab;
4837  l_custom_list coltab;
4838  l_mincol_list coltab;
4839  l_min_colnum NUMBER;
4840  idx NUMBER :=1;
4841  is_first boolean := true;
4842 
4843  -- VJN Introduced for conditional word replacements
4844  l_cond_attrib_list coltab ;
4845  l_idx number ;
4846 
4847 BEGIN
4848   l('');
4849   l('  PROCEDURE open_bulk_imp_sync_party_cur( ');
4850   l('    p_batch_id        IN      NUMBER, ');
4851   l('    p_batch_mode_flag IN      VARCHAR2, ');
4852   l('    p_from_osr        IN      VARCHAR2, ');
4853   l('    p_to_osr          IN      VARCHAR2, ');
4854   l('    p_os              IN      VARCHAR2, ');
4855   l('    p_party_type      IN      VARCHAR2, ');
4856   l('    p_operation       IN      VARCHAR2, ');
4857   l('    x_sync_party_cur  IN OUT  HZ_DQM_SYNC.SyncCurTyp) IS ');
4858   l('  BEGIN');
4859 
4860   FOR ATTRS IN (SELECT a.ATTRIBUTE_ID,
4861                        a.ATTRIBUTE_NAME,
4862                        a.SOURCE_TABLE,
4863                        a.CUSTOM_ATTRIBUTE_PROCEDURE,
4864                        f.PROCEDURE_NAME,
4865                        f.STAGED_ATTRIBUTE_COLUMN,
4866                        to_number(substrb(STAGED_ATTRIBUTE_COLUMN, 3)) COLNUM
4867                 FROM HZ_TRANS_ATTRIBUTES_VL a, HZ_TRANS_FUNCTIONS_VL f
4868                 WHERE ENTITY_NAME = 'PARTY'
4869                 AND nvl(f.ACTIVE_FLAG,'Y') = 'Y'
4870                 AND f.ATTRIBUTE_ID = a.ATTRIBUTE_ID
4871                 ORDER BY COLNUM) LOOP
4872 
4873     IF cur_col_num<ATTRS.COLNUM THEN
4874       FOR I in cur_col_num..ATTRS.COLNUM-1 LOOP
4875         l_mincol_list(I) := 'N';
4876         l_forall_list(I) := 'N';
4877         l_custom_list(I) := 'N';
4878       END LOOP;
4879     END IF;
4880     cur_col_num:=ATTRS.COLNUM+1;
4881     IF has_trx_context(ATTRS.PROCEDURE_NAME) THEN
4882       l_forall_list(ATTRS.COLNUM) := ATTRS.PROCEDURE_NAME || '(H_TX'||ATTRS.COLNUM||'(I),NULL, ''' || ATTRS.ATTRIBUTE_NAME || ''',''PARTY'',''STAGE'')';
4883     ELSE
4884       l_forall_list(ATTRS.COLNUM) := ATTRS.PROCEDURE_NAME || '(H_TX'||ATTRS.COLNUM||'(I),NULL, ''' || ATTRS.ATTRIBUTE_NAME || ''',''PARTY'')';
4885     END IF;
4886     l_mincol_list(ATTRS.COLNUM) := 'N';
4887 
4888     SELECT min(to_number(substrb(STAGED_ATTRIBUTE_COLUMN, 3))) INTO l_min_colnum
4889     FROM HZ_TRANS_ATTRIBUTES_VL a, HZ_TRANS_FUNCTIONS_VL f
4890     WHERE ENTITY_NAME = 'PARTY'
4891     AND nvl(f.ACTIVE_FLAG,'Y') = 'Y'
4892     AND f.ATTRIBUTE_ID = a.ATTRIBUTE_ID
4893     AND a.ATTRIBUTE_NAME=ATTRS.ATTRIBUTE_NAME;
4894 
4895     IF ATTRS.colnum>l_min_colnum THEN
4896       l_mincol_list(ATTRS.COLNUM) := 'N';
4897     IF has_trx_context(ATTRS.PROCEDURE_NAME) THEN
4898       l_forall_list(ATTRS.COLNUM) := ATTRS.PROCEDURE_NAME || '(H_TX'||l_min_colnum||'(I),NULL, ''' || ATTRS.ATTRIBUTE_NAME || ''',''PARTY'',''STAGE'')';
4899     ELSE
4900       l_forall_list(ATTRS.COLNUM) := ATTRS.PROCEDURE_NAME || '(H_TX'||l_min_colnum||'(I),NULL, ''' || ATTRS.ATTRIBUTE_NAME || ''',''PARTY'')';
4901     END IF;
4902     ELSE
4903       l_mincol_list(ATTRS.COLNUM) := 'Y';
4904     END IF;
4905 
4906     IF ATTRS.CUSTOM_ATTRIBUTE_PROCEDURE IS NULL THEN
4907       IF l_mincol_list(ATTRS.COLNUM) = 'Y' THEN
4908         IF ATTRS.SOURCE_TABLE='HZ_ORGANIZATION_PROFILES' THEN
4909           l_org_select(idx) := 'op.'||ATTRS.ATTRIBUTE_NAME;
4910           l_per_select(idx) := 'NULL';
4911           l_oth_select(idx) := 'NULL';
4912         ELSIF ATTRS.SOURCE_TABLE='HZ_PERSON_PROFILES' THEN
4913           l_per_select(idx) := 'pe.'||ATTRS.ATTRIBUTE_NAME;
4914           l_org_select(idx) := 'NULL';
4915           l_oth_select(idx) := 'NULL';
4916         ELSIF ATTRS.SOURCE_TABLE='HZ_PERSON_PROFILES, HZ_ORGANIZATION_PROFILES' OR
4917               ATTRS.SOURCE_TABLE='HZ_ORGANIZATION_PROFILES, HZ_PERSON_PROFILES' THEN
4918           l_org_select(idx) := 'op.'||ATTRS.ATTRIBUTE_NAME;
4919           l_per_select(idx) := 'pe.'||ATTRS.ATTRIBUTE_NAME;
4920           l_oth_select(idx) := 'NULL';
4921         ELSE
4922           l_org_select(idx) := 'p.'||ATTRS.ATTRIBUTE_NAME;
4923           l_per_select(idx) := 'p.'||ATTRS.ATTRIBUTE_NAME;
4924           l_oth_select(idx) := 'p.'||ATTRS.ATTRIBUTE_NAME;
4925         END IF;
4926       ELSE
4927         l_org_select(idx):='N';
4928         l_per_select(idx):='N';
4929         l_oth_select(idx):='N';
4930       END IF;
4931 
4932       l_custom_list(ATTRS.COLNUM) := 'N';
4933     ELSE
4934         l_org_select(idx):='N';
4935         l_per_select(idx):='N';
4936         l_oth_select(idx):='N';
4937         l_custom_list(ATTRS.COLNUM) := 'N';
4938         IF ATTRS.ATTRIBUTE_NAME = 'PARTY_ALL_NAMES' THEN
4939           IF l_mincol_list(ATTRS.COLNUM) = 'Y' THEN
4940             l_org_select(idx) := 'p.PARTY_NAME || '' '' || p.KNOWN_AS || '' '' || p.KNOWN_AS2 || '' '' || p.KNOWN_AS3 || '' ''|| p.KNOWN_AS4 || '' ''|| p.KNOWN_AS5';
4941             l_per_select(idx) := 'p.PARTY_NAME || '' '' || p.KNOWN_AS || '' '' || p.KNOWN_AS2 || '' '' || p.KNOWN_AS3 || '' ''|| p.KNOWN_AS4 || '' ''|| p.KNOWN_AS5';
4942             l_oth_select(idx) := 'p.PARTY_NAME || '' '' || p.KNOWN_AS || '' '' || p.KNOWN_AS2 || '' '' || p.KNOWN_AS3 || '' ''|| p.KNOWN_AS4 || '' ''|| p.KNOWN_AS5';
4943           END IF;
4944         ELSE
4945           IF l_mincol_list(ATTRS.COLNUM) = 'Y' THEN
4946             IF has_context(ATTRS.custom_attribute_procedure) THEN
4947               l_custom_list(ATTRS.COLNUM) := ATTRS.custom_attribute_procedure || '(H_P_PARTY_ID(I),''PARTY'','''||ATTRS.ATTRIBUTE_NAME|| ''', ''STAGE'')';
4948             ELSE
4949               l_custom_list(ATTRS.COLNUM) := ATTRS.custom_attribute_procedure || '(H_P_PARTY_ID(I),''PARTY'','''||ATTRS.ATTRIBUTE_NAME|| ''')';
4950             END IF;
4951           END IF;
4952         END IF;
4953     END IF;
4954     idx := idx+1;
4955 
4956     -- VJN ADDED CODE FOR TRACKING CONDITION ATTRIBUTES AT THIS ENTITY LEVEL
4957     IF HZ_WORD_CONDITIONS_PKG.is_a_cond_attrib( ATTRS.attribute_id)
4958      THEN
4959          l_cond_attrib_list(ATTRS.COLNUM) := ATTRS.attribute_id ;
4960     END IF;
4961 
4962 
4963   END LOOP;
4964 
4965   IF cur_col_num<=255 THEN--bug 5977628
4966     FOR I in cur_col_num..255 LOOP
4967       l_mincol_list(I) := 'N';
4968       l_forall_list(I) := 'N';
4969       l_custom_list(I) := 'N';
4970     END LOOP;
4971   END IF;
4972 
4973   l('    IF p_party_type = ''ORGANIZATION'' THEN');
4974   l('      open x_sync_party_cur FOR ' );
4975   l('        SELECT p.PARTY_ID, p.STATUS, p.ROWID ');
4976 
4977   FOR I in 1..l_org_select.COUNT LOOP
4978     IF l_org_select(I) <> 'N' THEN
4979       l('              ,' || l_org_select(I));
4980     END IF;
4981   END LOOP;
4982 
4983   l('        FROM   HZ_PARTIES p, HZ_IMP_PARTIES_SG ps, HZ_IMP_BATCH_DETAILS bd ');
4984   l('              ,HZ_ORGANIZATION_PROFILES op ');
4985   l('        WHERE  p.request_id         = bd.main_conc_req_id ');
4986   l('        AND    bd.batch_id          = ps.batch_id ');
4987   l('        AND    p.PARTY_TYPE         = ''ORGANIZATION'' ');
4988   l('        AND    p.party_id           = ps.party_id ');
4989   l('        AND    ps.batch_id          = p_batch_id ');
4990   l('        AND    ps.party_orig_system = p_os ');
4991   l('        AND    ps.batch_mode_flag   = p_batch_mode_flag ');
4992   l('        AND    ps.action_flag       = p_operation ');
4993   l('        AND    p.party_id           = op.party_id ');
4994   l('        AND    ps.party_orig_system_reference BETWEEN p_from_osr AND p_to_osr ');
4995   l('        AND   (p.status = ''M'' OR op.effective_end_date IS NULL); ');
4996 
4997   l('    ELSIF p_party_type = ''PERSON'' THEN');
4998   l('      open x_sync_party_cur FOR ' );
4999   l('        SELECT p.PARTY_ID, p.STATUS, p.ROWID ');
5000 
5001   FOR I in 1..l_per_select.COUNT LOOP
5002     IF l_per_select(I) <> 'N' THEN
5003       l('                  ,' || l_per_select(I));
5004     END IF;
5005   END LOOP;
5006 
5007   l('        FROM   HZ_PARTIES p, HZ_IMP_PARTIES_SG ps, HZ_IMP_BATCH_DETAILS bd ');
5008   l('              ,HZ_PERSON_PROFILES pe ');
5009   l('        WHERE  p.request_id         = bd.main_conc_req_id ');
5010   l('        AND    bd.batch_id          = ps.batch_id ');
5011   l('        AND    p.PARTY_TYPE         = ''PERSON'' ');
5012   l('        AND    p.party_id           = ps.party_id ');
5013   l('        AND    ps.batch_id          = p_batch_id ');
5014   l('        AND    ps.party_orig_system = p_os ');
5015   l('        AND    ps.batch_mode_flag   = p_batch_mode_flag ');
5016   l('        AND    ps.action_flag       = p_operation ');
5017   l('        AND    p.party_id           = pe.party_id ');
5018   l('        AND    ps.party_orig_system_reference BETWEEN p_from_osr AND p_to_osr ');
5019   l('        AND   (p.status = ''M'' OR pe.effective_end_date IS NULL); ');
5020   l('    ELSE');
5021   l('      open x_sync_party_cur FOR ' );
5022   l('        SELECT p.PARTY_ID, p.STATUS, p.ROWID ');
5023 
5024   FOR I in 1..l_oth_select.COUNT LOOP
5025     IF l_oth_select(I) <> 'N' THEN
5026       l('                  ,' || l_oth_select(I));
5027     END IF;
5028   END LOOP;
5029 
5030   l('        FROM   HZ_PARTIES p, HZ_IMP_PARTIES_SG ps, HZ_IMP_BATCH_DETAILS bd ');
5031   l('        WHERE  p.request_id         = bd.main_conc_req_id ');
5032   l('        AND    bd.batch_id          = ps.batch_id ');
5033   l('        AND    p.party_id           = ps.party_id ');
5034   l('        AND    ps.batch_id          = p_batch_id ');
5035   l('        AND    ps.party_orig_system = p_os ');
5036   l('        AND    ps.batch_mode_flag   = p_batch_mode_flag ');
5037   l('        AND    ps.action_flag       = p_operation ');
5038   l('        AND    p.party_type         <> ''PERSON'' ');
5039   l('        AND    p.party_type         <> ''ORGANIZATION'' ');
5040   l('        AND    p.party_type         <> ''PARTY_RELATIONSHIP'' ');
5041   l('        AND    ps.party_orig_system_reference between p_from_osr and p_to_osr; ');
5042   l('    END IF;');
5043   l('');
5044   l('    hz_trans_pkg.set_party_type(p_party_type); ');
5045   l('');
5046   l('  END open_bulk_imp_sync_party_cur;');
5047   l('');
5048 END gen_bulk_imp_sync_party_query;
5049 
5050 -- REPURI. Proccedure to generate the code (into HZ_STAGE_MAP_TRANSFORM)
5051 -- for OPEN_SYNC_PARTY_CURSOR and SYNC_ALL_PARTIES Procedures.
5052 
5053 PROCEDURE generate_sync_party_query_proc IS
5054 
5055  cur_col_num NUMBER := 1;
5056 
5057  TYPE coltab IS TABLE OF VARCHAR2(2000) INDEX BY BINARY_INTEGER;
5058 
5059  l_org_select coltab;
5060  l_per_select coltab;
5061  l_oth_select coltab;
5062 
5063  l_forall_list coltab;
5064  l_custom_list coltab;
5065  l_mincol_list coltab;
5066  l_min_colnum NUMBER;
5067  idx NUMBER :=1;
5068  is_first boolean := true;
5069 
5070  -- VJN Introduced for conditional word replacements
5071  l_cond_attrib_list coltab ;
5072  l_idx number ;
5073 
5074 BEGIN
5075   l('');
5076   l('  PROCEDURE open_sync_party_cursor( ');
5077   l('    p_operation       IN      VARCHAR2,');
5078   l('    p_party_type      IN      VARCHAR2,');
5079   l('    p_from_rec        IN      VARCHAR2,');
5080   l('    p_to_rec          IN      VARCHAR2,');
5081   l('    x_sync_party_cur  IN OUT  HZ_DQM_SYNC.SyncCurTyp) IS ');
5082   l('');
5083   l('  BEGIN');
5084   l('');
5085 
5086   FOR ATTRS IN (SELECT a.ATTRIBUTE_ID,
5087                        a.ATTRIBUTE_NAME,
5088                        a.SOURCE_TABLE,
5089                        a.CUSTOM_ATTRIBUTE_PROCEDURE,
5090                        f.PROCEDURE_NAME,
5091                        f.STAGED_ATTRIBUTE_COLUMN,
5092                        to_number(substrb(STAGED_ATTRIBUTE_COLUMN, 3)) COLNUM
5093                 FROM HZ_TRANS_ATTRIBUTES_VL a, HZ_TRANS_FUNCTIONS_VL f
5094                 WHERE ENTITY_NAME = 'PARTY'
5095                 AND nvl(f.ACTIVE_FLAG,'Y') = 'Y'
5096                 AND f.ATTRIBUTE_ID = a.ATTRIBUTE_ID
5097                 ORDER BY COLNUM) LOOP
5098 
5099     IF cur_col_num<ATTRS.COLNUM THEN
5100       FOR I in cur_col_num..ATTRS.COLNUM-1 LOOP
5101         l_mincol_list(I) := 'N';
5102         l_forall_list(I) := 'N';
5103         l_custom_list(I) := 'N';
5104       END LOOP;
5105     END IF;
5106     cur_col_num:=ATTRS.COLNUM+1;
5107     IF has_trx_context(ATTRS.PROCEDURE_NAME) THEN
5108       l_forall_list(ATTRS.COLNUM) := ATTRS.PROCEDURE_NAME || '(H_TX'||ATTRS.COLNUM||'(I),NULL, ''' || ATTRS.ATTRIBUTE_NAME || ''',''PARTY'',''STAGE'')';
5109     ELSE
5110       l_forall_list(ATTRS.COLNUM) := ATTRS.PROCEDURE_NAME || '(H_TX'||ATTRS.COLNUM||'(I),NULL, ''' || ATTRS.ATTRIBUTE_NAME || ''',''PARTY'')';
5111     END IF;
5112     l_mincol_list(ATTRS.COLNUM) := 'N';
5113 
5114     SELECT min(to_number(substrb(STAGED_ATTRIBUTE_COLUMN, 3))) INTO l_min_colnum
5115     FROM HZ_TRANS_ATTRIBUTES_VL a, HZ_TRANS_FUNCTIONS_VL f
5116     WHERE ENTITY_NAME = 'PARTY'
5117     AND nvl(f.ACTIVE_FLAG,'Y') = 'Y'
5118     AND f.ATTRIBUTE_ID = a.ATTRIBUTE_ID
5119     AND a.ATTRIBUTE_NAME=ATTRS.ATTRIBUTE_NAME;
5120 
5121     IF ATTRS.colnum>l_min_colnum THEN
5122       l_mincol_list(ATTRS.COLNUM) := 'N';
5123     IF has_trx_context(ATTRS.PROCEDURE_NAME) THEN
5124       l_forall_list(ATTRS.COLNUM) := ATTRS.PROCEDURE_NAME || '(H_TX'||l_min_colnum||'(I),NULL, ''' || ATTRS.ATTRIBUTE_NAME || ''',''PARTY'',''STAGE'')';
5125     ELSE
5126       l_forall_list(ATTRS.COLNUM) := ATTRS.PROCEDURE_NAME || '(H_TX'||l_min_colnum||'(I),NULL, ''' || ATTRS.ATTRIBUTE_NAME || ''',''PARTY'')';
5127     END IF;
5128     ELSE
5129       l_mincol_list(ATTRS.COLNUM) := 'Y';
5130     END IF;
5131 
5132     IF ATTRS.CUSTOM_ATTRIBUTE_PROCEDURE IS NULL THEN
5133       IF l_mincol_list(ATTRS.COLNUM) = 'Y' THEN
5134         IF ATTRS.SOURCE_TABLE='HZ_ORGANIZATION_PROFILES' THEN
5135           l_org_select(idx) := 'op.'||ATTRS.ATTRIBUTE_NAME;
5136           l_per_select(idx) := 'NULL';
5137           l_oth_select(idx) := 'NULL';
5138         ELSIF ATTRS.SOURCE_TABLE='HZ_PERSON_PROFILES' THEN
5139           l_per_select(idx) := 'pe.'||ATTRS.ATTRIBUTE_NAME;
5140           l_org_select(idx) := 'NULL';
5141           l_oth_select(idx) := 'NULL';
5142         ELSIF ATTRS.SOURCE_TABLE='HZ_PERSON_PROFILES, HZ_ORGANIZATION_PROFILES' OR
5143               ATTRS.SOURCE_TABLE='HZ_ORGANIZATION_PROFILES, HZ_PERSON_PROFILES' THEN
5144           l_org_select(idx) := 'op.'||ATTRS.ATTRIBUTE_NAME;
5145           l_per_select(idx) := 'pe.'||ATTRS.ATTRIBUTE_NAME;
5146           l_oth_select(idx) := 'NULL';
5147         ELSE
5148           l_org_select(idx) := 'p.'||ATTRS.ATTRIBUTE_NAME;
5149           l_per_select(idx) := 'p.'||ATTRS.ATTRIBUTE_NAME;
5150           l_oth_select(idx) := 'p.'||ATTRS.ATTRIBUTE_NAME;
5151         END IF;
5152       ELSE
5153         l_org_select(idx):='N';
5154         l_per_select(idx):='N';
5155         l_oth_select(idx):='N';
5156       END IF;
5157 
5158       l_custom_list(ATTRS.COLNUM) := 'N';
5159     ELSE
5160         l_org_select(idx):='N';
5161         l_per_select(idx):='N';
5162         l_oth_select(idx):='N';
5163         l_custom_list(ATTRS.COLNUM) := 'N';
5164         IF ATTRS.ATTRIBUTE_NAME = 'PARTY_ALL_NAMES' THEN
5165           IF l_mincol_list(ATTRS.COLNUM) = 'Y' THEN
5166             l_org_select(idx) := 'p.PARTY_NAME || '' '' || p.KNOWN_AS || '' '' || p.KNOWN_AS2 || '' '' || p.KNOWN_AS3 || '' ''|| p.KNOWN_AS4 || '' ''|| p.KNOWN_AS5';
5167             l_per_select(idx) := 'p.PARTY_NAME || '' '' || p.KNOWN_AS || '' '' || p.KNOWN_AS2 || '' '' || p.KNOWN_AS3 || '' ''|| p.KNOWN_AS4 || '' ''|| p.KNOWN_AS5';
5168             l_oth_select(idx) := 'p.PARTY_NAME || '' '' || p.KNOWN_AS || '' '' || p.KNOWN_AS2 || '' '' || p.KNOWN_AS3 || '' ''|| p.KNOWN_AS4 || '' ''|| p.KNOWN_AS5';
5169           END IF;
5170         ELSE
5171           IF l_mincol_list(ATTRS.COLNUM) = 'Y' THEN
5172             IF has_context(ATTRS.custom_attribute_procedure) THEN
5173               l_custom_list(ATTRS.COLNUM) := ATTRS.custom_attribute_procedure || '(H_P_PARTY_ID(I),''PARTY'','''||ATTRS.ATTRIBUTE_NAME|| ''', ''STAGE'')';
5174             ELSE
5175               l_custom_list(ATTRS.COLNUM) := ATTRS.custom_attribute_procedure || '(H_P_PARTY_ID(I),''PARTY'','''||ATTRS.ATTRIBUTE_NAME|| ''')';
5176             END IF;
5177           END IF;
5178         END IF;
5179     END IF;
5180     idx := idx+1;
5181 
5182     -- VJN ADDED CODE FOR TRACKING CONDITION ATTRIBUTES AT THIS ENTITY LEVEL
5183     IF HZ_WORD_CONDITIONS_PKG.is_a_cond_attrib( ATTRS.attribute_id)
5184      THEN
5185          l_cond_attrib_list(ATTRS.COLNUM) := ATTRS.attribute_id ;
5186     END IF;
5187 
5188 
5189   END LOOP;
5190 
5191   IF cur_col_num<=255 THEN--bug 5977628
5192     FOR I in cur_col_num..255 LOOP
5193       l_mincol_list(I) := 'N';
5194       l_forall_list(I) := 'N';
5195       l_custom_list(I) := 'N';
5196     END LOOP;
5197   END IF;
5198 
5199   l('    IF p_party_type = ''ORGANIZATION'' THEN');
5200   l('      open x_sync_party_cur FOR ' );
5201   l('        SELECT p.PARTY_ID, p.STATUS, dsi.ROWID ');
5202 
5203   FOR I in 1..l_org_select.COUNT LOOP
5204     IF l_org_select(I) <> 'N' THEN
5205       l('              ,' || l_org_select(I));
5206     END IF;
5207   END LOOP;
5208 
5209   l('        FROM HZ_PARTIES p, HZ_ORGANIZATION_PROFILES op, HZ_DQM_SYNC_INTERFACE dsi ');
5210   l('        WHERE p.party_id      = op.party_id ');
5211   l('        AND   p.party_id      = dsi.party_id ');
5212   l('        AND   p.PARTY_TYPE    = ''ORGANIZATION'' ');
5213   l('        AND   dsi.entity      = ''PARTY'' ');
5214   l('        AND   dsi.staged_flag = ''N'' ');
5215   l('        AND   dsi.operation   = p_operation ');
5216   l('        AND   dsi.sync_interface_num >= p_from_rec ');
5217   l('        AND   dsi.sync_interface_num <= p_to_rec ');
5218   l('        AND   (p.status = ''M'' or op.effective_end_date is NULL); ');
5219   l('    ELSIF p_party_type = ''PERSON'' THEN');
5220   l('      open x_sync_party_cur FOR ' );
5221   l('        SELECT p.PARTY_ID, p.STATUS, dsi.ROWID ');
5222 
5223   FOR I in 1..l_per_select.COUNT LOOP
5224     IF l_per_select(I) <> 'N' THEN
5225       l('                  ,' || l_per_select(I));
5226     END IF;
5227   END LOOP;
5228 
5229   l('        FROM HZ_PARTIES p, HZ_PERSON_PROFILES pe, HZ_DQM_SYNC_INTERFACE dsi ');
5230   l('        WHERE p.party_id      = pe.party_id ');
5231   l('        AND   p.party_id      = dsi.party_id ');
5232   l('        AND   p.PARTY_TYPE    = ''PERSON'' ');
5233   l('        AND   dsi.entity      = ''PARTY'' ');
5234   l('        AND   dsi.staged_flag = ''N'' ');
5235   l('        AND   dsi.operation   = p_operation ');
5236   l('        AND   dsi.sync_interface_num >= p_from_rec ');
5237   l('        AND   dsi.sync_interface_num <= p_to_rec ');
5238   l('        AND   (p.status = ''M'' or pe.effective_end_date is NULL); ');
5239   l('    ELSE');
5240   l('      open x_sync_party_cur FOR ' );
5241   l('        SELECT p.PARTY_ID, p.STATUS, dsi.ROWID ');
5242 
5243   FOR I in 1..l_oth_select.COUNT LOOP
5244     IF l_oth_select(I) <> 'N' THEN
5245       l('                  ,' || l_oth_select(I));
5246     END IF;
5247   END LOOP;
5248 
5249   l('        FROM HZ_PARTIES p, HZ_DQM_SYNC_INTERFACE dsi ');
5250   l('        WHERE p.party_id      = dsi.party_id ');
5251   l('        AND   dsi.entity      = ''PARTY'' ');
5252   l('        AND   dsi.staged_flag = ''N'' ');
5253   l('        AND   dsi.operation   = p_operation ');
5254   l('        AND   dsi.sync_interface_num >= p_from_rec ');
5255   l('        AND   dsi.sync_interface_num <= p_to_rec ');
5256   l('        AND   p.party_type <> ''PERSON'' ');
5257   l('        AND   p.party_type <> ''ORGANIZATION'' ');
5258   l('        AND   p.party_type <> ''PARTY_RELATIONSHIP''; ');
5259   l('    END IF;');
5260   l('    hz_trans_pkg.set_party_type(p_party_type); ');
5261   l('  END;');
5262 
5263   l('');
5264   l('  PROCEDURE sync_all_parties ( ');
5265   l('    p_operation             IN VARCHAR2, ');
5266   l('    p_bulk_sync_type        IN VARCHAR2, ');
5267   l('    p_sync_all_party_cur    IN HZ_DQM_SYNC.SyncCurTyp) IS ');
5268   l('');
5269   l('    l_limit         NUMBER  := ' || g_batch_size || ';');
5270   l('    l_last_fetch    BOOLEAN := FALSE;');
5271   l('    l_sql_errm      VARCHAR2(2000); ');
5272   l('    l_st            NUMBER; ');
5273   l('    l_en            NUMBER; ');
5274   l('    l_err_index     NUMBER; ');
5275   l('    l_err_count     NUMBER; ');
5276   l('');
5277   l('    bulk_errors     EXCEPTION; ');
5278   l('    PRAGMA EXCEPTION_INIT(bulk_errors, -24381); ');
5279   l('');
5280   l('  BEGIN');
5281   l('    log (''Begin Synchronizing Parties''); ');
5282   l('    LOOP');
5283   l('      log (''Bulk Collecting Parties Data...'',FALSE); ');
5284   l('      FETCH p_sync_all_party_cur BULK COLLECT INTO');
5285   l('         H_P_PARTY_ID');
5286   l('        ,H_STATUS');
5287   l('        ,H_ROWID');
5288 
5289   FOR I IN 1..255 LOOP
5290     IF l_forall_list(I) <> 'N' AND l_mincol_list(I) = 'Y' AND
5291        l_custom_list(I) = 'N' THEN
5292       l('        ,H_TX'||I);
5293     END IF;
5294   END LOOP;
5295 
5296   l('      LIMIT l_limit;');
5297   l('      log (''Done''); ');
5298   l('');
5299   l('      IF p_sync_all_party_cur%NOTFOUND THEN');
5300   l('        l_last_fetch:=TRUE;');
5301   l('      END IF;');
5302   l('');
5303   l('      IF H_P_PARTY_ID.COUNT=0 AND l_last_fetch THEN');
5304   l('        EXIT;');
5305   l('      END IF;');
5306   l('');
5307   l('      log (''Synchronizing for ''||H_P_PARTY_ID.COUNT||'' Parties''); ');
5308   l('      log (''Populating Party Transformation Functions into Arrays...'',FALSE); ');
5309   l('      FOR I in H_P_PARTY_ID.FIRST..H_P_PARTY_ID.LAST LOOP');
5310 
5311   -- VJN INTRODUCED FOR CONDITIONAL REPLACEMENTS
5312   -- CYCLE THROUGH THE CONDITON LIST AND GENERATE THE CODE
5313   -- FOR POPULATING THE GLOBAL CONDITION RECORD
5314 
5315   l_idx := l_cond_attrib_list.FIRST ;
5316   IF l_idx IS NOT NULL
5317   THEN
5318     l('        ---- SETTING GLOBAL CONDITION RECORD AT THE PARTY LEVEL ----');
5319     l('');
5320   END IF ;
5321 
5322   WHILE l_cond_attrib_list.EXISTS(l_idx)
5323   LOOP
5324       l('        HZ_WORD_CONDITIONS_PKG.set_gbl_condition_rec ('||l_cond_attrib_list(l_idx)||','||'H_TX'||l_idx||'(I));');
5325       l_idx := l_idx+1;
5326   END LOOP;
5327 
5328   l('');
5329 
5330   FOR I IN 1..255 LOOP
5331     IF l_forall_list(I) <> 'N' THEN
5332       IF l_custom_list(I) <> 'N' AND l_mincol_list(I) = 'Y' THEN
5333         l('        H_TX'||I||'(I):='||l_custom_list(I)||';');
5334       END IF;
5335     END IF;
5336   END LOOP;
5337   FOR I IN 1..255 LOOP
5338     IF l_forall_list(I) <> 'N' THEN
5339       IF l_mincol_list(I) <> 'Y' THEN
5340         l('        H_TX'||I||'(I):='||l_forall_list(I)||';');
5341       END IF;
5342     END IF;
5343   END LOOP;
5344   FOR I IN 1..255 LOOP
5345     IF l_forall_list(I) <> 'N' THEN
5346       IF l_mincol_list(I) = 'Y' THEN
5347         l('        H_TX'||I||'(I):='||l_forall_list(I)||';');
5348       END IF;
5349     END IF;
5350   END LOOP;
5351   l('      END LOOP;');
5352   l('      log (''Done''); ');
5353   l('');
5354   l('      l_st := 1;  ');
5355   l('      l_en := H_P_PARTY_ID.COUNT; ');
5356   l('');
5357   l('      IF p_operation = ''C'' THEN ');
5358   l('        BEGIN  ');
5359   l('          log (''Inserting Data into HZ_STAGED_PARTIES...'',FALSE); ');
5360   l('          FORALL I in l_st..l_en SAVE EXCEPTIONS ');
5361   l('            INSERT INTO HZ_STAGED_PARTIES (');
5362   l('               PARTY_ID');
5363   l('  	           ,STATUS');
5364   l('              ,D_PS');
5365   l('              ,D_CT');
5366   l('              ,D_CPT');
5367 
5368   FOR I IN 1..255 LOOP
5369     IF l_forall_list(I) <> 'N' THEN
5370       l('              ,TX'||I);
5371     END IF;
5372   END LOOP;
5373 
5374   l('            ) VALUES (');
5375   l('               H_P_PARTY_ID(I)');
5376   l('              ,H_STATUS(I)');
5377   l('              ,''SYNC'' ');
5378   l('              ,''SYNC'' ');
5379   l('              ,''SYNC'' ');
5380 
5381   FOR I IN 1..255 LOOP
5382     IF l_forall_list(I) <> 'N' THEN
5383       l('              ,decode(H_TX'||I||'(I),null,H_TX'||I||'(I),H_TX'||I||'(I)||'' '')');
5384     END IF;
5385   END LOOP;
5386 
5387   l('            );');
5388   l('          log (''Done''); ');
5389   l('        EXCEPTION  WHEN bulk_errors THEN ');
5390   l('          l_err_count := SQL%BULK_EXCEPTIONS.COUNT; ');
5391   l('          FOR indx IN 1..l_err_count LOOP ');
5392   l('            l_err_index := SQL%BULK_EXCEPTIONS(indx).ERROR_INDEX; ');
5393   l('            l_sql_errm  := sqlerrm(-SQL%BULK_EXCEPTIONS(indx).ERROR_CODE); ');
5394   -- SCHITRAP: Bug:5357970 - Error code is a number. Oracle error for ''DUP_VAL_ON_INDEX'' is ORA-00001
5395   --l('            IF (SQL%BULK_EXCEPTIONS(indx).ERROR_CODE) = ''DUP_VAL_ON_INDEX'' THEN ');
5396   l('            IF (instr(l_sql_errm,''ORA-00001'')>0) THEN  ');
5397   l('              log (''Exception DUP_VAL_ON_INDEX occured while inserting Party with PARTY_ID - ''||H_P_PARTY_ID(l_err_index)); ');
5398   l('              DELETE FROM HZ_DQM_SYNC_INTERFACE WHERE ENTITY=''PARTY'' AND OPERATION=''C'' AND PARTY_ID=H_P_PARTY_ID(l_err_index);	');
5399   l('            ELSE ');
5400   l('              IF p_bulk_sync_type = ''DQM_SYNC'' THEN ');
5401   l('                UPDATE hz_dqm_sync_interface ');
5402   l('                  SET  error_data = l_sql_errm ');
5403   l('                  ,staged_flag    = decode (error_data, NULL, ''N'', ''E'') ');
5404   l('                WHERE rowid       = H_ROWID(l_err_index); ');
5405   l('              ELSIF  p_bulk_sync_type = ''IMPORT_SYNC'' THEN ');
5406   l('                -- Insert the Error Record into HZ_DQM_SYNC_INTERFACE table ');
5407   l('                insert_dqm_sync_error_rec(H_P_PARTY_ID(l_err_index), NULL, NULL, NULL, ''PARTY'', p_operation, ''E'', ''N'', l_sql_errm); ');
5408   l('              END IF; ');
5409   l('            END IF; ');
5410   l('          END LOOP; ');
5411   l('        END; ');
5412   l('      ELSIF p_operation = ''U'' THEN ');
5413   l('        BEGIN ');
5414   l('          log (''Updating Data in HZ_STAGED_PARTIES...'',FALSE); ');
5415   l('          FORALL I in l_st..l_en SAVE EXCEPTIONS ');
5416   l('            UPDATE HZ_STAGED_PARTIES SET ');
5417   l('               status =H_STATUS(I) ');
5418   l('              ,concat_col = concat_col ');
5419 
5420   FOR I IN 1..255 LOOP
5421     IF l_forall_list(I) <> 'N' THEN
5422             l('                ,TX'||I||'=decode(H_TX'||I||'(I),null,H_TX'||I||'(I),H_TX'||I||'(I)||'' '')');
5423     END IF;
5424   END LOOP;
5425 
5426   l('            WHERE PARTY_ID = H_P_PARTY_ID(I);');
5427   l('          log (''Done''); ');
5428   l('        EXCEPTION WHEN bulk_errors THEN ');
5429   l('          l_err_count := SQL%BULK_EXCEPTIONS.COUNT; ');
5430   l('          FOR indx IN 1..l_err_count LOOP ');
5431   l('            l_err_index := SQL%BULK_EXCEPTIONS(indx).ERROR_INDEX; ');
5432   l('            l_sql_errm  := sqlerrm(-SQL%BULK_EXCEPTIONS(indx).ERROR_CODE); ');
5433   -- SCHITRAP: Bug:5357970 - Error code is a number. Oracle error for ''DUP_VAL_ON_INDEX'' is ORA-00001
5434   --l('            IF (SQL%BULK_EXCEPTIONS(indx).ERROR_CODE) = ''DUP_VAL_ON_INDEX'' THEN ');
5435   l('            IF (instr(l_sql_errm,''ORA-00001'')>0) THEN  ');
5436   l('              log (''Exception DUP_VAL_ON_INDEX occured while inserting Party with PARTY_ID - ''||H_P_PARTY_ID(l_err_index)); ');
5437   l('              DELETE FROM HZ_DQM_SYNC_INTERFACE WHERE ENTITY=''PARTY'' AND OPERATION=''U'' AND PARTY_ID=H_P_PARTY_ID(l_err_index);	');
5438   l('            ELSE ');
5439   l('              IF p_bulk_sync_type = ''DQM_SYNC'' THEN ');
5440   l('                UPDATE hz_dqm_sync_interface ');
5441   l('                  SET  error_data  = l_sql_errm ');
5442   l('                  ,staged_flag     = decode (error_data, NULL, ''N'', ''E'') ');
5443   l('                WHERE rowid        = H_ROWID(l_err_index); ');
5444   l('              ELSIF  p_bulk_sync_type = ''IMPORT_SYNC'' THEN ');
5445   l('                -- Insert the Error Record into HZ_DQM_SYNC_INTERFACE table ');
5446   l('                insert_dqm_sync_error_rec(H_P_PARTY_ID(l_err_index), NULL, NULL, NULL, ''PARTY'', p_operation, ''E'', ''N'', l_sql_errm); ');
5447   l('              END IF; ');
5448   l('            END IF; ');
5449   l('          END LOOP; ');
5450   l('        END; ');
5451   l('      END IF; ');
5452   l('');
5453   l('      -- REPURI. Bug 4884742. ');
5454   l('      -- Bulk Insert the Import Parties into  Shadow Sync Interface table ');
5455   l('      -- if Shadow Staging has already run and completed successfully ');
5456   l('      IF ((p_bulk_sync_type = ''IMPORT_SYNC'') AND ');
5457   l('          (HZ_DQM_SYNC.is_shadow_staging_complete)) THEN ');
5458   l('        BEGIN ');
5459   l('           -- REPURI. Bug 4968126. ');
5460   l('           -- Using the Merge instead of Insert statement ');
5461   l('           -- so that duplicate records dont get inserted. ');
5462   l('          log (''Merging data into HZ_DQM_SH_SYNC_INTERFACE...'',FALSE); ');
5463   l('          FORALL I in l_st..l_en  ');
5464   l('            MERGE INTO hz_dqm_sh_sync_interface S ');
5465   l('              USING ( ');
5466   l('                SELECT ');
5467   l('                  H_P_PARTY_ID(I) AS party_id ');
5468   l('                FROM dual ) T ');
5469   l('              ON (S.entity      = ''PARTY''  AND ');
5470   l('                  S.party_id    = T.party_id AND ');
5471   l('                  S.staged_flag <> ''E'') ');
5472   l('              WHEN NOT MATCHED THEN ');
5473   l('              INSERT ( ');
5474   l('                PARTY_ID, ');
5475   l('                RECORD_ID, ');
5476   l('                PARTY_SITE_ID, ');
5477   l('                ORG_CONTACT_ID, ');
5478   l('                ENTITY, ');
5479   l('                OPERATION, ');
5480   l('                STAGED_FLAG, ');
5481   l('                REALTIME_SYNC_FLAG, ');
5482   l('                CREATED_BY, ');
5483   l('                CREATION_DATE, ');
5484   l('                LAST_UPDATE_LOGIN, ');
5485   l('                LAST_UPDATE_DATE, ');
5486   l('                LAST_UPDATED_BY, ');
5487   l('                SYNC_INTERFACE_NUM ');
5488   l('              ) VALUES ( ');
5489   l('                H_P_PARTY_ID(I), ');
5490   l('                NULL, ');
5491   l('                NULL, ');
5492   l('                NULL, ');
5493   l('                ''PARTY'', ');
5494   l('                p_operation, ');
5495   l('                ''N'', ');
5496   l('                ''N'', ');
5497   l('                hz_utility_pub.created_by, ');
5498   l('                hz_utility_pub.creation_date, ');
5499   l('                hz_utility_pub.last_update_login, ');
5500   l('                hz_utility_pub.last_update_date, ');
5501   l('                hz_utility_pub.user_id, ');
5502   l('                HZ_DQM_SH_SYNC_INTERFACE_S.nextval ');
5503   l('            ); ');
5504   l('        log (''Done''); ');
5505   l('        EXCEPTION WHEN OTHERS THEN ');
5506   l('              log (''Exception occured while inserting data into HZ_DQM_SH_SYNC_INTERFACE Table'');   ');
5507   l('              log (''Eror Message is - ''|| sqlerrm);   ');
5508   l('        END; ');
5509   l('      END IF; ');
5510   l('');
5511   l('      IF l_last_fetch THEN');
5512   l('        FND_CONCURRENT.AF_Commit;');
5513   l('        EXIT;');
5514   l('      END IF;');
5515   l('');
5516   l('      FND_CONCURRENT.AF_Commit;');
5517   l('');
5518   l('    END LOOP;');
5519   l('    log (''End Synchronizing Parties''); ');
5520   l('  END;');
5521 
5522 END;
5523 
5524 PROCEDURE generate_party_query_proc IS
5525  cur_col_num NUMBER := 1;
5526 
5527  TYPE coltab IS TABLE OF VARCHAR2(2000) INDEX BY BINARY_INTEGER;
5528 
5529  l_org_select coltab;
5530  l_per_select coltab;
5531  l_oth_select coltab;
5532 
5533  l_forall_list coltab;
5534  l_custom_list coltab;
5535  l_mincol_list coltab;
5536  l_min_colnum NUMBER;
5537  idx NUMBER :=1;
5538  is_first boolean := true;
5539 
5540  -- VJN Introduced for conditional word replacements
5541  l_cond_attrib_list coltab ;
5542  l_idx number ;
5543  l_attr_name     varchar2(2000); --Bug No: 4279469
5544  l_org_attr_name varchar2(2000); --Bug No: 4279469
5545  l_per_attr_name varchar2(2000); --Bug No: 4279469
5546 
5547 BEGIN
5548   l('');
5549   l('  PROCEDURE open_party_cursor( ');
5550   l('    p_select_type	IN	VARCHAR2,');
5551   l('    p_party_type	IN	VARCHAR2,');
5552   l('    p_worker_number IN	NUMBER,');
5553   l('    p_num_workers	IN	NUMBER,');
5554   l('    p_party_id	IN	NUMBER,');
5555   l('    p_continue	IN	VARCHAR2,');
5556   l('    p_start_rowid	IN	ROWID,');
5557   l('    p_end_rowid	IN	ROWID,');
5558   l('    x_party_cur	IN OUT	HZ_PARTY_STAGE.StageCurTyp) IS ');
5559   l('');
5560   l('    l_party_type VARCHAR2(255);');
5561   l('  BEGIN');
5562 
5563   FOR ATTRS IN (SELECT a.ATTRIBUTE_ID,
5564                        a.ATTRIBUTE_NAME,
5565                        a.SOURCE_TABLE,
5566                        a.CUSTOM_ATTRIBUTE_PROCEDURE,
5567                        f.PROCEDURE_NAME,
5568                        f.STAGED_ATTRIBUTE_COLUMN,
5569                        to_number(substrb(STAGED_ATTRIBUTE_COLUMN, 3)) COLNUM,
5570 		       nvl(TAG,'C') column_data_type --Bug No: 4279469
5571                 FROM HZ_TRANS_ATTRIBUTES_VL a, HZ_TRANS_FUNCTIONS_VL f,FND_LOOKUP_VALUES_VL lkp --Bug No: 4279469
5572                 WHERE ENTITY_NAME = 'PARTY'
5573                 AND nvl(f.ACTIVE_FLAG,'Y') = 'Y'
5574                 AND f.ATTRIBUTE_ID = a.ATTRIBUTE_ID
5575 		AND lkp.LOOKUP_TYPE = 'PARTY_LOGICAL_ATTRIBUTE_LIST' --Bug No: 4279469
5576 		AND lkp.LOOKUP_CODE = a.ATTRIBUTE_NAME --Bug No: 4279469
5577                 ORDER BY COLNUM) LOOP
5578 
5579     IF cur_col_num<ATTRS.COLNUM THEN
5580       FOR I in cur_col_num..ATTRS.COLNUM-1 LOOP
5581         l_mincol_list(I) := 'N';
5582         l_forall_list(I) := 'N';
5583         l_custom_list(I) := 'N';
5584       END LOOP;
5585     END IF;
5586     cur_col_num:=ATTRS.COLNUM+1;
5587     IF has_trx_context(ATTRS.PROCEDURE_NAME) THEN
5588       l_forall_list(ATTRS.COLNUM) := ATTRS.PROCEDURE_NAME || '(H_TX'||ATTRS.COLNUM||'(I),NULL, ''' || ATTRS.ATTRIBUTE_NAME || ''',''PARTY'',''STAGE'')';
5589     ELSE
5590       l_forall_list(ATTRS.COLNUM) := ATTRS.PROCEDURE_NAME || '(H_TX'||ATTRS.COLNUM||'(I),NULL, ''' || ATTRS.ATTRIBUTE_NAME || ''',''PARTY'')';
5591     END IF;
5592     l_mincol_list(ATTRS.COLNUM) := 'N';
5593 
5594     SELECT min(to_number(substrb(STAGED_ATTRIBUTE_COLUMN, 3))) INTO l_min_colnum
5595     FROM HZ_TRANS_ATTRIBUTES_VL a, HZ_TRANS_FUNCTIONS_VL f
5596     WHERE ENTITY_NAME = 'PARTY'
5597     AND nvl(f.ACTIVE_FLAG,'Y') = 'Y'
5598     AND f.ATTRIBUTE_ID = a.ATTRIBUTE_ID
5599     AND a.ATTRIBUTE_NAME=ATTRS.ATTRIBUTE_NAME;
5600 
5601     IF ATTRS.colnum>l_min_colnum THEN
5602       l_mincol_list(ATTRS.COLNUM) := 'N';
5603     IF has_trx_context(ATTRS.PROCEDURE_NAME) THEN
5604       l_forall_list(ATTRS.COLNUM) := ATTRS.PROCEDURE_NAME || '(H_TX'||l_min_colnum||'(I),NULL, ''' || ATTRS.ATTRIBUTE_NAME || ''',''PARTY'',''STAGE'')';
5605     ELSE
5606       l_forall_list(ATTRS.COLNUM) := ATTRS.PROCEDURE_NAME || '(H_TX'||l_min_colnum||'(I),NULL, ''' || ATTRS.ATTRIBUTE_NAME || ''',''PARTY'')';
5607     END IF;
5608     ELSE
5609       l_mincol_list(ATTRS.COLNUM) := 'Y';
5610     END IF;
5611 
5612     IF ATTRS.CUSTOM_ATTRIBUTE_PROCEDURE IS NULL THEN
5613       IF l_mincol_list(ATTRS.COLNUM) = 'Y' THEN
5614 	 -----Start of Bug No: 4279469----------
5615 	 l_attr_name := ATTRS.ATTRIBUTE_NAME;
5616          IF(ATTRS.column_data_type ='D') THEN
5617 	  l_org_attr_name := 'TO_CHAR(op.'||l_attr_name||',''DD-MON-YYYY'') '||l_attr_name;
5618 	  l_per_attr_name := 'TO_CHAR(pe.'||l_attr_name||',''DD-MON-YYYY'') '||l_attr_name;
5619 	  l_attr_name     := 'TO_CHAR(p.'||l_attr_name||',''DD-MON-YYYY'') '||l_attr_name;
5620          ELSE
5621 	  l_org_attr_name := 'op.'||l_attr_name;
5622 	  l_per_attr_name := 'pe.'||l_attr_name;
5623           l_attr_name     := 'p.'||l_attr_name;
5624 	 END IF;
5625          -----End of Bug No: 4279469------------
5626         IF ATTRS.SOURCE_TABLE='HZ_ORGANIZATION_PROFILES' THEN
5627           l_org_select(idx) := l_org_attr_name;
5628           l_per_select(idx) := 'NULL';
5629           l_oth_select(idx) := 'NULL';
5630         ELSIF ATTRS.SOURCE_TABLE='HZ_PERSON_PROFILES' THEN
5631           l_per_select(idx) := l_per_attr_name;
5632           l_org_select(idx) := 'NULL';
5633           l_oth_select(idx) := 'NULL';
5634         ELSIF ATTRS.SOURCE_TABLE='HZ_PERSON_PROFILES, HZ_ORGANIZATION_PROFILES' OR
5635               ATTRS.SOURCE_TABLE='HZ_ORGANIZATION_PROFILES, HZ_PERSON_PROFILES' THEN
5636           l_org_select(idx) := l_org_attr_name;
5637           l_per_select(idx) := l_per_attr_name;
5638           l_oth_select(idx) := 'NULL';
5639         ELSE
5640           l_org_select(idx) := l_attr_name;
5641           l_per_select(idx) := l_attr_name;
5642           l_oth_select(idx) := l_attr_name;
5643         END IF;
5644       ELSE
5645         l_org_select(idx):='N';
5646         l_per_select(idx):='N';
5647         l_oth_select(idx):='N';
5648       END IF;
5649 
5650       l_custom_list(ATTRS.COLNUM) := 'N';
5651     ELSE
5652         l_org_select(idx):='N';
5653         l_per_select(idx):='N';
5654         l_oth_select(idx):='N';
5655         l_custom_list(ATTRS.COLNUM) := 'N';
5656         IF ATTRS.ATTRIBUTE_NAME = 'PARTY_ALL_NAMES' THEN
5657           IF l_mincol_list(ATTRS.COLNUM) = 'Y' THEN
5658             l_org_select(idx) := 'p.PARTY_NAME || '' '' || p.KNOWN_AS || '' '' || p.KNOWN_AS2 || '' '' || p.KNOWN_AS3 || '' ''|| p.KNOWN_AS4 || '' ''|| p.KNOWN_AS5';
5659             l_per_select(idx) := 'p.PARTY_NAME || '' '' || p.KNOWN_AS || '' '' || p.KNOWN_AS2 || '' '' || p.KNOWN_AS3 || '' ''|| p.KNOWN_AS4 || '' ''|| p.KNOWN_AS5';
5660             l_oth_select(idx) := 'p.PARTY_NAME || '' '' || p.KNOWN_AS || '' '' || p.KNOWN_AS2 || '' '' || p.KNOWN_AS3 || '' ''|| p.KNOWN_AS4 || '' ''|| p.KNOWN_AS5';
5661           END IF;
5662         ELSE
5663           IF l_mincol_list(ATTRS.COLNUM) = 'Y' THEN
5664             IF has_context(ATTRS.custom_attribute_procedure) THEN
5665               l_custom_list(ATTRS.COLNUM) := ATTRS.custom_attribute_procedure || '(H_P_PARTY_ID(I),''PARTY'','''||ATTRS.ATTRIBUTE_NAME|| ''', ''STAGE'')';
5666             ELSE
5667               l_custom_list(ATTRS.COLNUM) := ATTRS.custom_attribute_procedure || '(H_P_PARTY_ID(I),''PARTY'','''||ATTRS.ATTRIBUTE_NAME|| ''')';
5668             END IF;
5669           END IF;
5670         END IF;
5671     END IF;
5672     idx := idx+1;
5673 
5674     -- VJN ADDED CODE FOR TRACKING CONDITION ATTRIBUTES AT THIS ENTITY LEVEL
5675     IF HZ_WORD_CONDITIONS_PKG.is_a_cond_attrib( ATTRS.attribute_id)
5676      THEN
5677          l_cond_attrib_list(ATTRS.COLNUM) := ATTRS.attribute_id ;
5678     END IF;
5679 
5680 
5681   END LOOP;
5682 
5683   IF cur_col_num<=255 THEN--bug 5977628
5684     FOR I in cur_col_num..255 LOOP
5685       l_mincol_list(I) := 'N';
5686       l_forall_list(I) := 'N';
5687       l_custom_list(I) := 'N';
5688     END LOOP;
5689   END IF;
5690 
5691   l('    IF p_select_type = ''SINGLE_PARTY'' THEN');
5692   l('      NULL;');
5693   l('    ELSIF p_select_type = ''ALL_PARTIES'' THEN');
5694   l('      IF p_continue IS NULL OR p_continue<>''Y'' THEN');
5695   l('        IF p_party_type = ''ORGANIZATION'' THEN');
5696   l('          open x_party_cur FOR ' );
5697   l('            SELECT p.PARTY_ID, p.STATUS ');
5698   FOR I in 1..l_org_select.COUNT LOOP
5699     IF l_org_select(I) <> 'N' THEN
5700       l('                  ,' || l_org_select(I));
5701     END IF;
5702   END LOOP;
5703 
5704   l('            FROM HZ_PARTIES p, HZ_ORGANIZATION_PROFILES op ');
5705   l('            WHERE p.rowid BETWEEN p_start_rowid and p_end_rowid ');
5706   l('            AND p.party_id = op.party_id ');
5707   l('            AND op.effective_end_date is NULL ');
5708   l('            AND p.PARTY_TYPE =''ORGANIZATION''; ');
5709   l('        ELSIF p_party_type = ''PERSON'' THEN');
5710   l('          open x_party_cur FOR ' );
5711   l('            SELECT p.PARTY_ID, p.STATUS ');
5712   FOR I in 1..l_per_select.COUNT LOOP
5713     IF l_per_select(I) <> 'N' THEN
5714       l('                  ,' || l_per_select(I));
5715     END IF;
5716   END LOOP;
5717   l('            FROM HZ_PARTIES p, HZ_PERSON_PROFILES pe ');
5718   l('            WHERE p.rowid BETWEEN p_start_rowid and p_end_rowid ');
5719   l('            AND p.party_id = pe.party_id ');
5720   l('            AND pe.effective_end_date is NULL ');
5721   l('            AND p.PARTY_TYPE =''PERSON''; ');
5722   l('        ELSE');
5723   l('          open x_party_cur FOR ' );
5724   l('            SELECT p.PARTY_ID, p.STATUS ');
5725   FOR I in 1..l_oth_select.COUNT LOOP
5726     IF l_oth_select(I) <> 'N' THEN
5727       l('                  ,' || l_oth_select(I));
5728     END IF;
5729   END LOOP;
5730   l('            FROM HZ_PARTIES p ');
5731   l('            WHERE p.rowid BETWEEN p_start_rowid and p_end_rowid ');
5732   l('            AND p.party_type <> ''PERSON'' ');
5733   l('            AND p.party_type <> ''ORGANIZATION'' ');
5734   l('            AND p.party_type <> ''PARTY_RELATIONSHIP''; ');
5735   l('        END IF;');
5736   l('      ELSE');
5737   l('        IF p_party_type = ''ORGANIZATION'' THEN');
5738   l('          open x_party_cur FOR ' );
5739   l('            SELECT p.PARTY_ID, p.STATUS ');
5740   FOR I in 1..l_org_select.COUNT LOOP
5741     IF l_org_select(I) <> 'N' THEN
5742       l('                  ,' || l_org_select(I));
5743     END IF;
5744   END LOOP;
5745 
5746   l('            FROM HZ_PARTIES p, HZ_ORGANIZATION_PROFILES op ');
5747   l('            WHERE p.rowid BETWEEN p_start_rowid and p_end_rowid ');
5748   l('            AND NOT EXISTS (select 1 FROM HZ_STAGED_PARTIES sp  ');
5749   l('                            WHERE sp.party_id = p.party_id)   ' );
5750   l('            AND p.party_id = op.party_id ');
5751   l('            AND op.effective_end_date is NULL ');
5752   l('            AND p.PARTY_TYPE =''ORGANIZATION''; ');
5753   l('        ELSIF p_party_type = ''PERSON'' THEN');
5754   l('          open x_party_cur FOR ' );
5755   l('            SELECT p.PARTY_ID, p.STATUS ');
5756   FOR I in 1..l_per_select.COUNT LOOP
5757     IF l_per_select(I) <> 'N' THEN
5758       l('                  ,' || l_per_select(I));
5759     END IF;
5760   END LOOP;
5761   l('            FROM HZ_PARTIES p, HZ_PERSON_PROFILES pe ');
5762   l('            WHERE p.rowid BETWEEN p_start_rowid and p_end_rowid ');
5763   l('            AND NOT EXISTS (select 1 FROM HZ_STAGED_PARTIES sp  ');
5764   l('                            WHERE sp.party_id = p.party_id)   ' );
5765   l('            AND p.party_id = pe.party_id ');
5766   l('            AND pe.effective_end_date is NULL ');
5767   l('            AND p.PARTY_TYPE =''PERSON''; ');
5768   l('        ELSE');
5769   l('          open x_party_cur FOR ' );
5770   l('            SELECT p.PARTY_ID, p.STATUS ');
5771   FOR I in 1..l_oth_select.COUNT LOOP
5772     IF l_oth_select(I) <> 'N' THEN
5773       l('                  ,' || l_oth_select(I));
5774     END IF;
5775   END LOOP;
5776   l('            FROM HZ_PARTIES p ');
5777   l('            WHERE p.rowid BETWEEN p_start_rowid and p_end_rowid ');
5778   l('            AND NOT EXISTS (select 1 FROM HZ_STAGED_PARTIES sp  ');
5779   l('                            WHERE sp.party_id = p.party_id)   ' );
5780   l('            AND p.party_type <> ''PERSON'' ');
5781   l('            AND p.party_type <> ''ORGANIZATION'' ');
5782   l('            AND p.party_type <> ''PARTY_RELATIONSHIP''; ');
5783   l('        END IF;');
5784   l('      END IF;');
5785   l('    END IF;');
5786   l('  END;');
5787 
5788   l('');
5789   l('  PROCEDURE insert_stage_parties ( ');
5790   l('    p_continue     IN VARCHAR2, ');
5791   l('    p_party_cur    IN HZ_PARTY_STAGE.StageCurTyp) IS ');
5792   l(' l_limit NUMBER := ' || g_batch_size || ';');
5793   l(' l_contact_cur HZ_PARTY_STAGE.StageCurTyp;');
5794   l(' l_cpt_cur HZ_PARTY_STAGE.StageCurTyp;');
5795   l(' l_party_site_cur HZ_PARTY_STAGE.StageCurTyp;');
5796   l(' l_last_fetch BOOLEAN := FALSE;');
5797   l(' call_status BOOLEAN;');
5798   l(' rphase varchar2(255);');
5799   l(' rstatus varchar2(255);');
5800   l(' dphase varchar2(255);');
5801   l(' dstatus varchar2(255);');
5802   l(' message varchar2(255);');
5803   l(' req_id NUMBER;');
5804   l(' l_st number; ');
5805   l(' l_en number; ');
5806   l(' USER_TERMINATE EXCEPTION;');
5807   l('');
5808   l('  BEGIN');
5809   l('    req_id := FND_GLOBAL.CONC_REQUEST_ID;');
5810   l('    LOOP');
5811   l('      call_status := FND_CONCURRENT.GET_REQUEST_STATUS(');
5812   l('                req_id, null,null,rphase,rstatus,dphase,dstatus,message);');
5813   l('      IF dstatus = ''TERMINATING'' THEN');
5814   l('        FND_FILE.put_line(FND_FILE.log,''Aborted by User'');');
5815   l('        RAISE USER_TERMINATE;');
5816   l('      END IF;');
5817   l('      FETCH p_party_cur BULK COLLECT INTO');
5818   l('        H_P_PARTY_ID');
5819   l('        , H_STATUS');
5820   FOR I IN 1..255 LOOP
5821     IF l_forall_list(I) <> 'N' AND l_mincol_list(I) = 'Y' AND
5822        l_custom_list(I) = 'N' THEN
5823       l('         ,H_TX'||I);
5824     END IF;
5825   END LOOP;
5826   l('      LIMIT l_limit;');
5827   l('');
5828   l('    IF p_party_cur%NOTFOUND THEN');
5829   l('      l_last_fetch:=TRUE;');
5830   l('    END IF;');
5831 
5832   l('    IF H_P_PARTY_ID.COUNT=0 AND l_last_fetch THEN');
5833   l('      EXIT;');
5834   l('    END IF;');
5835 
5836   l('    FOR I in H_P_PARTY_ID.FIRST..H_P_PARTY_ID.LAST LOOP');
5837 
5838  -- VJN INTRODUCED FOR CONDITIONAL REPLACEMENTS
5839   -- CYCLE THROUGH THE CONDITON LIST AND GENERATE THE CODE
5840   -- FOR POPULATING THE GLOBAL CONDITION RECORD
5841 
5842   l_idx := l_cond_attrib_list.FIRST ;
5843   IF l_idx IS NOT NULL
5844   THEN
5845     l('----------- SETTING GLOBAL CONDITION RECORD AT THE PARTY LEVEL ---------');
5846   END IF ;
5847 
5848 
5849   WHILE l_cond_attrib_list.EXISTS(l_idx)
5850   LOOP
5851 
5852       l('     HZ_WORD_CONDITIONS_PKG.set_gbl_condition_rec ('||l_cond_attrib_list(l_idx)||','||'H_TX'||l_idx||'(I));');
5853       l_idx := l_idx+1;
5854   END LOOP;
5855 
5856 
5857   l('');
5858 
5859 
5860   FOR I IN 1..255 LOOP
5861     IF l_forall_list(I) <> 'N' THEN
5862       IF l_custom_list(I) <> 'N' AND l_mincol_list(I) = 'Y' THEN
5863         l('         H_TX'||I||'(I):='||l_custom_list(I)||';');
5864       END IF;
5865     END IF;
5866   END LOOP;
5867   FOR I IN 1..255 LOOP
5868     IF l_forall_list(I) <> 'N' THEN
5869       IF l_mincol_list(I) <> 'Y' THEN
5870         l('         H_TX'||I||'(I):='||l_forall_list(I)||';');
5871       END IF;
5872     END IF;
5873   END LOOP;
5874   FOR I IN 1..255 LOOP
5875     IF l_forall_list(I) <> 'N' THEN
5876       IF l_mincol_list(I) = 'Y' THEN
5877         l('         H_TX'||I||'(I):='||l_forall_list(I)||';');
5878       END IF;
5879     END IF;
5880   END LOOP;
5881   l('      H_PARTY_INDEX(I) := I;');
5882   l('      H_PS_DEN(I) := '' '';');
5883   l('      H_CT_DEN(I) := '' '';');
5884   l('      H_CPT_DEN(I) := '' '';');
5885   l('    END LOOP;');
5886 
5887   l('    SAVEPOINT party_batch;');
5888   l('    BEGIN ');
5889   l('      l_st := 1;  ');
5890   l('      l_en := H_P_PARTY_ID.COUNT; ');
5891   l('      LOOP ');
5892   l('          BEGIN  ');
5893   l('          FORALL I in l_st..l_en');
5894   l('            INSERT INTO HZ_STAGED_PARTIES (');
5895   l('	           PARTY_ID');
5896   l('  	           ,STATUS');
5897   FOR I IN 1..255 LOOP
5898     IF l_forall_list(I) <> 'N' THEN
5899       l('               , TX'||I);
5900     END IF;
5901   END LOOP;
5902   l('             ) VALUES (');
5903   l('             H_P_PARTY_ID(I)');
5904   l('             ,H_STATUS(I)');
5905   FOR I IN 1..255 LOOP
5906     IF l_forall_list(I) <> 'N' THEN
5907       l('             , decode(H_TX'||I||'(I),null,H_TX'||I||'(I),H_TX'||I||'(I)||'' '')');
5908     END IF;
5909   END LOOP;
5910   l('            );');
5911   l('           EXIT; ');
5912   l('        EXCEPTION  WHEN OTHERS THEN ');
5913   l('            l_st:= l_st+SQL%ROWCOUNT+1;');
5914   l('        END; ');
5915   l('      END LOOP; ');
5916   l('      FORALL I in H_P_PARTY_ID.FIRST..H_P_PARTY_ID.LAST');
5917   l('        INSERT INTO HZ_DQM_STAGE_GT ( PARTY_ID, OWNER_ID, PARTY_INDEX) VALUES (');
5918   l('           H_P_PARTY_ID(I),H_P_PARTY_ID(I),H_PARTY_INDEX(I));');
5919 
5920   l('        insert_stage_contacts;');
5921   l('        insert_stage_party_sites;');
5922   l('        insert_stage_contact_pts;');
5923   l('      FORALL I in H_P_PARTY_ID.FIRST..H_P_PARTY_ID.LAST');
5924   l('        UPDATE HZ_STAGED_PARTIES SET ');
5925   l('                D_PS = H_PS_DEN(I),');
5926   l('                D_CT = H_CT_DEN(I),');
5927   l('                D_CPT = H_CPT_DEN(I)');
5928   l('        WHERE PARTY_ID = H_P_PARTY_ID(I);');
5929   l('      EXCEPTION ');
5930   l('        WHEN OTHERS THEN');
5931   l('          ROLLBACK to party_batch;');
5932   l('          RAISE;');
5933   l('      END;');
5934   l('      IF l_last_fetch THEN');
5935   l('        FND_CONCURRENT.AF_Commit;');
5936   l('        EXIT;');
5937   l('      END IF;');
5938   l('      FND_CONCURRENT.AF_Commit;');
5939   l('    END LOOP;');
5940   l('  END;');
5941 
5942   l('');
5943   l('  PROCEDURE sync_single_party (');
5944   l('    p_party_id NUMBER,');
5945   l('    p_party_type VARCHAR2,');
5946   l('    p_operation VARCHAR2) IS');
5947   l('');
5948   l('  l_tryins BOOLEAN;');
5949   l('  l_tryupd BOOLEAN;');
5950   l('   BEGIN');
5951   l('    IF p_party_type = ''ORGANIZATION'' THEN');
5952   l('      SELECT p.PARTY_ID, p.STATUS ');
5953   FOR I in 1..l_org_select.COUNT LOOP
5954     IF l_org_select(I) <> 'N' THEN
5955       l('        ,' || l_org_select(I));
5956     END IF;
5957   END LOOP;
5958   l('      INTO H_P_PARTY_ID(1), H_STATUS(1)');
5959   FOR I IN 1..255 LOOP
5960     IF l_forall_list(I) <> 'N' AND l_mincol_list(I) = 'Y' AND
5961        l_custom_list(I) = 'N' THEN
5962       l('         , H_TX'||I||'(1)');
5963     END IF;
5964   END LOOP;
5965   l('      FROM HZ_PARTIES p, HZ_ORGANIZATION_PROFILES op ');
5966   l('      WHERE p.party_id = p_party_id ');
5967   l('      AND p.party_id = op.party_id ');
5968   l('      AND (p.status = ''M'' or op.effective_end_date is NULL)  AND ROWNUM=1; ');
5969   l('    ELSIF p_party_type = ''PERSON'' THEN');
5970   l('      SELECT p.PARTY_ID, p.STATUS ');
5971   FOR I in 1..l_per_select.COUNT LOOP
5972     IF l_per_select(I) <> 'N' THEN
5973       l('        ,' || l_per_select(I));
5974     END IF;
5975   END LOOP;
5976   l('      INTO H_P_PARTY_ID(1), H_STATUS(1)');
5977   FOR I IN 1..255 LOOP
5978     IF l_forall_list(I) <> 'N' AND l_mincol_list(I) = 'Y' AND
5979        l_custom_list(I) = 'N' THEN
5980       l('         , H_TX'||I||'(1)');
5981     END IF;
5982   END LOOP;
5983   l('      FROM HZ_PARTIES p, HZ_PERSON_PROFILES pe ');
5984   l('      WHERE p.party_id = p_party_id ');
5985   l('      AND p.party_id = pe.party_id ');
5986   l('      AND (p.status = ''M'' or pe.effective_end_date is NULL) AND ROWNUM=1;');
5987   l('    ELSE');
5988   l('      SELECT p.PARTY_ID, p.STATUS ');
5989   FOR I in 1..l_oth_select.COUNT LOOP
5990     IF l_per_select(I) <> 'N' THEN
5991       l('        ,' || l_oth_select(I));
5992     END IF;
5993   END LOOP;
5994 
5995   l('      INTO H_P_PARTY_ID(1), H_STATUS(1)');
5996   FOR I IN 1..255 LOOP
5997     IF l_forall_list(I) <> 'N' AND l_mincol_list(I) = 'Y' AND
5998        l_custom_list(I) = 'N' THEN
5999       l('         , H_TX'||I||'(1)');
6000     END IF;
6001   END LOOP;
6002   l('      FROM HZ_PARTIES p ');
6003   l('      WHERE p.party_id = p_party_id;');
6004   l('    END IF;');
6005   -- VJN INTRODUCED CODE FOR GENERATING THE POPULATION
6006   -- OF THE GLOBAL CONDITION RECORD
6007 
6008   l_idx := l_cond_attrib_list.FIRST ;
6009   IF l_idx IS NOT NULL
6010   THEN
6011     l('----------- SETTING GLOBAL CONDITION RECORD AT THE PARTY LEVEL ---------');
6012   END IF ;
6013 
6014 
6015   WHILE l_cond_attrib_list.EXISTS(l_idx)
6016   LOOP
6017 
6018       l('     HZ_WORD_CONDITIONS_PKG.set_gbl_condition_rec ('||l_cond_attrib_list(l_idx)||','||'H_TX'||l_idx||'(1));');
6019       l_idx := l_idx+1;
6020   END LOOP;
6021 
6022 
6023     FOR I IN 1..255 LOOP
6024     IF l_forall_list(I) <> 'N' THEN
6025       IF l_custom_list(I) <> 'N' AND l_mincol_list(I) = 'Y' THEN
6026         l('   H_TX'||I||'(1):='||replace(l_custom_list(I),'(I)','(1)')||';');
6027       END IF;
6028     END IF;
6029   END LOOP;
6030   FOR I IN 1..255 LOOP
6031     IF l_forall_list(I) <> 'N' THEN
6032       IF l_mincol_list(I) <> 'Y' THEN
6033         l('   H_TX'||I||'(1):='||replace(l_forall_list(I),'(I)','(1)')||';');
6034       END IF;
6035     END IF;
6036   END LOOP;
6037   FOR I IN 1..255 LOOP
6038     IF l_forall_list(I) <> 'N' THEN
6039       IF l_mincol_list(I) = 'Y' THEN
6040         l('   H_TX'||I||'(1):='||replace(l_forall_list(I),'(I)','(1)')||';');
6041       END IF;
6042     END IF;
6043   END LOOP;
6044 
6045   l('   l_tryins := FALSE;');
6046   l('   l_tryupd := FALSE;');
6047   l('   IF p_operation=''C'' THEN');
6048   l('     l_tryins:=TRUE;');
6049   l('   ELSE ');
6050   l('     l_tryupd:=TRUE;');
6051   l('   END IF;');
6052   l('   WHILE (l_tryins OR l_tryupd) LOOP');
6053   l('     IF l_tryins THEN');
6054   l('       BEGIN');
6055   l('         l_tryins:=FALSE;');
6056   l('         INSERT INTO HZ_STAGED_PARTIES (');
6057   l('             PARTY_ID');
6058   l('            ,STATUS');
6059   l('            ,D_PS');
6060   l('            ,D_CT');
6061   l('            ,D_CPT');
6062   FOR I IN 1..255 LOOP
6063     IF l_forall_list(I) <> 'N' THEN
6064       l('              , TX'||I);
6065     END IF;
6066   END LOOP;
6067   l('           ) VALUES (');
6068   l('             H_P_PARTY_ID(1)');
6069   l('            ,H_STATUS(1)');
6070   l('            ,''SYNC''');
6071   l('            ,''SYNC''');
6072   l('            ,''SYNC''');
6073   FOR I IN 1..255 LOOP
6074     IF l_forall_list(I) <> 'N' THEN
6075       l('             , decode(H_TX'||I||'(1),null,H_TX'||I||'(1),H_TX'||I||'(1)||'' '')');
6076     END IF;
6077   END LOOP;
6078   l('         );');
6079   l('       EXCEPTION');
6080   l('         WHEN DUP_VAL_ON_INDEX THEN');
6081   l('           IF p_operation=''C'' THEN');
6082   l('             l_tryupd:=TRUE;');
6083   l('           END IF;');
6084   l('       END;');
6085   l('     END IF;');
6086   l('     IF l_tryupd THEN');
6087   l('       BEGIN');
6088   l('         l_tryupd:=FALSE;');
6089   l('         UPDATE HZ_STAGED_PARTIES SET ');
6090   l('            status =H_STATUS(1) ');
6091   l('            ,concat_col = concat_col ');
6092   FOR I IN 1..255 LOOP
6093     IF l_forall_list(I) <> 'N' THEN
6094             l('            ,TX'||I||'=decode(H_TX'||I||'(1),null,H_TX'||I||'(1),H_TX'||I||'(1)||'' '')');
6095     END IF;
6096   END LOOP;
6097   l('         WHERE PARTY_ID=H_P_PARTY_ID(1);');
6098   l('         IF SQL%ROWCOUNT=0 AND p_operation=''U'' THEN');
6099   l('           l_tryins := TRUE;');
6100   l('         END IF;');
6101   l('       EXCEPTION ');
6102   l('         WHEN NO_DATA_FOUND THEN');
6103   l('           IF p_operation=''U'' THEN');
6104   l('             l_tryins := TRUE;');
6105   l('           END IF;');
6106   l('       END;');
6107   l('     END IF;');
6108   l('   END LOOP;');
6109   l('  END;');
6110 
6111   -- VJN Introduced for SYNC. This is the online version, which would be used to
6112   -- directly insert into the staging tables from SYNC.
6113   l('');
6114   l('  PROCEDURE sync_single_party_online (');
6115   l('    p_party_id    NUMBER,');
6116   l('    p_operation   VARCHAR2) IS');
6117   l('');
6118   l('  l_tryins           BOOLEAN;');
6119   l('  l_tryupd           BOOLEAN;');
6120   l('  l_party_type       VARCHAR2(30); ');
6121   l('  l_org_contact_id   NUMBER; ');
6122   l('  l_sql_err_message  VARCHAR2(2000); ');
6123   l('');
6124   l('  --bug 4500011 replaced hz_party_relationships with hz_relationships ');
6125   l('  CURSOR c_contact IS ');
6126   l('    SELECT oc.org_contact_id ');
6127   l('    FROM HZ_RELATIONSHIPS pr, HZ_ORG_CONTACTS oc ');
6128   l('    WHERE pr.relationship_id    = oc.party_relationship_id ');
6129   l('    AND   pr.subject_id         = p_party_id ');
6130   l('    AND   pr.subject_table_name = ''HZ_PARTIES'' ');
6131   l('    AND   pr.object_table_name  = ''HZ_PARTIES'' ');
6132   l('    AND   pr.directional_flag   = ''F''; ');
6133   l('');
6134   l('  BEGIN');
6135   l('');
6136    l('    -- Get party_type ');
6137    l('    SELECT party_type INTO l_party_type ');
6138    l('    FROM hz_parties WHERE party_id = p_party_id; ');
6139   l('');
6140    l('    -- Set global G_PARTY_TYPE variable value');
6141    l('    hz_trans_pkg.set_party_type(l_party_type); ');
6142    l('');
6143    l('    IF l_party_type = ''PERSON'' THEN ');
6144    l('    ---------------------------------- ');
6145    l('    -- Take care of CONTACT INFORMATION ');
6146    l('    -- When the operation is an update ');
6147    l('    ---------------------------------- ');
6148    l('      IF p_operation = ''U'' THEN ');
6149    l('        OPEN c_contact; ');
6150    l('        LOOP ');
6151    l('          FETCH c_contact INTO l_org_contact_id; ');
6152    l('          EXIT WHEN c_contact%NOTFOUND; ');
6153    l('          BEGIN ');
6154    l('            sync_single_contact_online(l_org_contact_id, p_operation); ');
6155    l('          EXCEPTION WHEN OTHERS THEN ');
6156    l('            -- FAILOVER : REPORT RECORD TO HZ_DQM_SYNC_INTERFACE ');
6157    l('            -- FOR ONLINE FLOWS ');
6158    l('            l_sql_err_message := SQLERRM; ');
6159    l('            insert_dqm_sync_error_rec(p_party_id,l_org_contact_id,null,null,''CONTACTS'',''U'',''E'',''Y'', l_sql_err_message); ');
6160    l('          END ; ');
6161    l('        END LOOP; ');
6162    l('      END IF ; ');
6163    l('    END IF; ');
6164    l('');
6165   l('    IF l_party_type = ''ORGANIZATION'' THEN');
6166   l('      SELECT p.PARTY_ID, p.STATUS ');
6167   FOR I in 1..l_org_select.COUNT LOOP
6168     IF l_org_select(I) <> 'N' THEN
6169       l('        ,' || l_org_select(I));
6170     END IF;
6171   END LOOP;
6172   l('      INTO H_P_PARTY_ID(1), H_STATUS(1)');
6173   FOR I IN 1..255 LOOP
6174     IF l_forall_list(I) <> 'N' AND l_mincol_list(I) = 'Y' AND
6175        l_custom_list(I) = 'N' THEN
6176       l('         , H_TX'||I||'(1)');
6177     END IF;
6178   END LOOP;
6179   l('      FROM HZ_PARTIES p, HZ_ORGANIZATION_PROFILES op ');
6180   l('      WHERE p.party_id = p_party_id ');
6181   l('      AND p.party_id = op.party_id ');
6182   l('      AND (p.status = ''M'' or op.effective_end_date is NULL)  AND ROWNUM=1; ');
6183   l('    ELSIF l_party_type = ''PERSON'' THEN');
6184   l('      SELECT p.PARTY_ID, p.STATUS ');
6185   FOR I in 1..l_per_select.COUNT LOOP
6186     IF l_per_select(I) <> 'N' THEN
6187       l('        ,' || l_per_select(I));
6188     END IF;
6189   END LOOP;
6190   l('      INTO H_P_PARTY_ID(1), H_STATUS(1)');
6191   FOR I IN 1..255 LOOP
6192     IF l_forall_list(I) <> 'N' AND l_mincol_list(I) = 'Y' AND
6193        l_custom_list(I) = 'N' THEN
6194       l('         , H_TX'||I||'(1)');
6195     END IF;
6196   END LOOP;
6197   l('      FROM HZ_PARTIES p, HZ_PERSON_PROFILES pe ');
6198   l('      WHERE p.party_id = p_party_id ');
6199   l('      AND p.party_id = pe.party_id ');
6200   l('      AND (p.status = ''M'' or pe.effective_end_date is NULL) AND ROWNUM=1;');
6201   l('    ELSE');
6202   l('      SELECT p.PARTY_ID, p.STATUS ');
6203   FOR I in 1..l_oth_select.COUNT LOOP
6204     IF l_per_select(I) <> 'N' THEN
6205       l('        ,' || l_oth_select(I));
6206     END IF;
6207   END LOOP;
6208 
6209   l('      INTO H_P_PARTY_ID(1), H_STATUS(1)');
6210   FOR I IN 1..255 LOOP
6211     IF l_forall_list(I) <> 'N' AND l_mincol_list(I) = 'Y' AND
6212        l_custom_list(I) = 'N' THEN
6213       l('         , H_TX'||I||'(1)');
6214     END IF;
6215   END LOOP;
6216   l('      FROM HZ_PARTIES p ');
6217   l('      WHERE p.party_id = p_party_id;');
6218   l('    END IF;');
6219   l('');
6220   -- VJN INTRODUCED CODE FOR GENERATING THE POPULATION
6221   -- OF THE GLOBAL CONDITION RECORD
6222 
6223   l_idx := l_cond_attrib_list.FIRST ;
6224   IF l_idx IS NOT NULL
6225   THEN
6226     l('    ---- SETTING GLOBAL CONDITION RECORD AT THE PARTY LEVEL ----');
6227   END IF ;
6228 
6229 
6230   WHILE l_cond_attrib_list.EXISTS(l_idx)
6231   LOOP
6232 
6233       l('    HZ_WORD_CONDITIONS_PKG.set_gbl_condition_rec ('||l_cond_attrib_list(l_idx)||','||'H_TX'||l_idx||'(1));');
6234       l_idx := l_idx+1;
6235   END LOOP;
6236 
6237 
6238     FOR I IN 1..255 LOOP
6239     IF l_forall_list(I) <> 'N' THEN
6240       IF l_custom_list(I) <> 'N' AND l_mincol_list(I) = 'Y' THEN
6241         l('    H_TX'||I||'(1):='||replace(l_custom_list(I),'(I)','(1)')||';');
6242       END IF;
6243     END IF;
6244   END LOOP;
6245   FOR I IN 1..255 LOOP
6246     IF l_forall_list(I) <> 'N' THEN
6247       IF l_mincol_list(I) <> 'Y' THEN
6248         l('    H_TX'||I||'(1):='||replace(l_forall_list(I),'(I)','(1)')||';');
6249       END IF;
6250     END IF;
6251   END LOOP;
6252   FOR I IN 1..255 LOOP
6253     IF l_forall_list(I) <> 'N' THEN
6254       IF l_mincol_list(I) = 'Y' THEN
6255         l('    H_TX'||I||'(1):='||replace(l_forall_list(I),'(I)','(1)')||';');
6256       END IF;
6257     END IF;
6258   END LOOP;
6259   l('');
6260   l('    l_tryins := FALSE;');
6261   l('    l_tryupd := FALSE;');
6262   l('');
6263   l('    IF p_operation=''C'' THEN');
6264   l('      l_tryins:=TRUE;');
6265   l('    ELSE ');
6266   l('      l_tryupd:=TRUE;');
6267   l('    END IF;');
6268   l('');
6269   l('    WHILE (l_tryins OR l_tryupd) LOOP');
6270   l('      IF l_tryins THEN');
6271   l('        BEGIN');
6272   l('          l_tryins:=FALSE;');
6273   l('          INSERT INTO HZ_STAGED_PARTIES (');
6274   l('             PARTY_ID');
6275   l('            ,STATUS');
6276   l('            ,D_PS');
6277   l('            ,D_CT');
6278   l('            ,D_CPT');
6279   FOR I IN 1..255 LOOP
6280     IF l_forall_list(I) <> 'N' THEN
6281       l('            ,TX'||I);
6282     END IF;
6283   END LOOP;
6284   l('          ) VALUES (');
6285   l('             H_P_PARTY_ID(1)');
6286   l('            ,H_STATUS(1)');
6287   l('            ,''SYNC''');
6288   l('            ,''SYNC''');
6289   l('            ,''SYNC''');
6290   FOR I IN 1..255 LOOP
6291     IF l_forall_list(I) <> 'N' THEN
6292       l('            ,decode(H_TX'||I||'(1),null,H_TX'||I||'(1),H_TX'||I||'(1)||'' '')');
6293     END IF;
6294   END LOOP;
6295   l('          );');
6296   l('        EXCEPTION');
6297   l('          WHEN DUP_VAL_ON_INDEX THEN');
6298   l('            IF p_operation=''C'' THEN');
6299   l('              l_tryupd:=TRUE;');
6300   l('            END IF;');
6301   l('        END;');
6302   l('      END IF;');
6303   l('');
6304   l('      IF l_tryupd THEN');
6305   l('        BEGIN');
6306   l('          l_tryupd:=FALSE;');
6307   l('          UPDATE HZ_STAGED_PARTIES SET ');
6308   l('             concat_col = concat_col ');
6309   l('            ,status =H_STATUS(1) ');
6310   FOR I IN 1..255 LOOP
6311     IF l_forall_list(I) <> 'N' THEN
6312             l('            ,TX'||I||'=decode(H_TX'||I||'(1),null,H_TX'||I||'(1),H_TX'||I||'(1)||'' '')');
6313     END IF;
6314   END LOOP;
6315   l('          WHERE PARTY_ID=H_P_PARTY_ID(1);');
6316   l('          IF SQL%ROWCOUNT=0 AND p_operation=''U'' THEN');
6317   l('            l_tryins := TRUE;');
6318   l('          END IF;');
6319   l('        EXCEPTION ');
6320   l('          WHEN NO_DATA_FOUND THEN');
6321   l('            IF p_operation=''U'' THEN');
6322   l('              l_tryins := TRUE;');
6323   l('            END IF;');
6324   l('        END;');
6325   l('      END IF;');
6326   l('    END LOOP;');
6327   l('');
6328   l('      -- REPURI. Bug 4884742. If shadow staging is completely successfully ');
6329   l('      -- insert a record into hz_dqm_sh_sync_interface table for each record ');
6330   l('    IF (HZ_DQM_SYNC.is_shadow_staging_complete) THEN ');
6331   l('      BEGIN ');
6332   l('        HZ_DQM_SYNC.insert_sh_interface_rec(p_party_id,null,null,null,''PARTY'',p_operation); ');
6333   l('      EXCEPTION WHEN OTHERS THEN ');
6334   l('        NULL; ');
6335   l('      END; ');
6336   l('    END IF; ');
6337   l('');
6338   -- Fix for Bug 4862121.
6339   -- Added the Exception handling at this context, for the procedure.
6340   l('  EXCEPTION WHEN OTHERS THEN ');
6341   l('    -- FAILOVER : REPORT RECORD TO HZ_DQM_SYNC_INTERFACE ');
6342   l('    -- FOR ONLINE FLOWS ');
6343   l('    l_sql_err_message := SQLERRM; ');
6344   l('    insert_dqm_sync_error_rec(p_party_id, NULL, NULL, NULL, ''PARTY'', p_operation, ''E'', ''Y'', l_sql_err_message); ');
6345   l('  END;');
6346 
6347 END;
6348 
6349 -- REPURI. Proccedure to generate the code (into HZ_STAGE_MAP_TRANSFORM)
6350 -- for OPEN_BULK_IMP_SYNC_PSITE_CUR Procedure. Bug 4884735.
6351 
6352 PROCEDURE gen_bulk_imp_sync_psite_query IS
6353  cur_col_num NUMBER := 1;
6354 
6355  TYPE coltab IS TABLE OF VARCHAR2(2000) INDEX BY BINARY_INTEGER;
6356 
6357  l_select coltab;
6358  FIRST BOOLEAN := FALSE;
6359 
6360  l_forall_list coltab;
6361  l_custom_list coltab;
6362  l_mincol_list coltab;
6363  l_min_colnum NUMBER;
6364  idx NUMBER :=1;
6365  is_first boolean := true;
6366 
6367  -- VJN Introduced for conditional word replacements
6368  l_cond_attrib_list coltab ;
6369  l_idx number ;
6370 
6371 BEGIN
6372 
6373   l('');
6374   l('  PROCEDURE open_bulk_imp_sync_psite_cur ( ');
6375   l('    p_batch_id             IN      NUMBER, ');
6376   l('    p_batch_mode_flag      IN      VARCHAR2, ');
6377   l('    p_from_osr             IN      VARCHAR2, ');
6378   l('    p_to_osr               IN      VARCHAR2, ');
6379   l('    p_os                   IN      VARCHAR2, ');
6380   l('    p_operation            IN      VARCHAR2, ');
6381   l('    x_sync_party_site_cur  IN OUT  HZ_DQM_SYNC.SyncCurTyp) IS ');
6382   l('  BEGIN');
6383 
6384   FOR ATTRS IN (SELECT a.ATTRIBUTE_ID,
6385                        a.ATTRIBUTE_NAME,
6386                        a.SOURCE_TABLE,
6387                        a.CUSTOM_ATTRIBUTE_PROCEDURE,
6388                        f.PROCEDURE_NAME,
6389                        f.STAGED_ATTRIBUTE_COLUMN,
6390                        to_number(substrb(STAGED_ATTRIBUTE_COLUMN, 3)) COLNUM
6391                 FROM HZ_TRANS_ATTRIBUTES_VL a, HZ_TRANS_FUNCTIONS_VL f
6392                 WHERE ENTITY_NAME = 'PARTY_SITES'
6393                 AND nvl(f.ACTIVE_FLAG,'Y') = 'Y'
6394                 AND f.ATTRIBUTE_ID = a.ATTRIBUTE_ID
6395                 ORDER BY COLNUM) LOOP
6396     IF cur_col_num<ATTRS.COLNUM THEN
6397       FOR I in cur_col_num..ATTRS.COLNUM-1 LOOP
6398         l_mincol_list(I) := 'N';
6399         l_forall_list(I) := 'N';
6400         l_custom_list(I) := 'N';
6401       END LOOP;
6402     END IF;
6403     cur_col_num:=ATTRS.COLNUM+1;
6404     IF has_trx_context(ATTRS.PROCEDURE_NAME) THEN
6405       l_forall_list(ATTRS.COLNUM) := ATTRS.PROCEDURE_NAME || '(H_TX'||ATTRS.COLNUM||'(I),NULL, ''' || ATTRS.ATTRIBUTE_NAME || ''',''PARTY_SITES'',''STAGE'')';
6406     ELSE
6407       l_forall_list(ATTRS.COLNUM) := ATTRS.PROCEDURE_NAME || '(H_TX'||ATTRS.COLNUM||'(I),NULL, ''' || ATTRS.ATTRIBUTE_NAME || ''',''PARTY_SITES'')';
6408     END IF;
6409 
6410     SELECT min(to_number(substrb(STAGED_ATTRIBUTE_COLUMN, 3))) INTO l_min_colnum
6411     FROM HZ_TRANS_ATTRIBUTES_VL a, HZ_TRANS_FUNCTIONS_VL f
6412     WHERE ENTITY_NAME = 'PARTY_SITES'
6413     AND nvl(f.ACTIVE_FLAG,'Y') = 'Y'
6414     AND f.ATTRIBUTE_ID = a.ATTRIBUTE_ID
6415     AND a.ATTRIBUTE_NAME=ATTRS.ATTRIBUTE_NAME;
6416 
6417     IF ATTRS.colnum>l_min_colnum THEN
6418       l_mincol_list(ATTRS.COLNUM) := 'N';
6419       IF has_trx_context(ATTRS.PROCEDURE_NAME) THEN
6420         l_forall_list(ATTRS.COLNUM) := ATTRS.PROCEDURE_NAME || '(H_TX'||l_min_colnum||'(I),NULL, ''' || ATTRS.ATTRIBUTE_NAME || ''',''PARTY_SITES'',''STAGE'')';
6421       ELSE
6422         l_forall_list(ATTRS.COLNUM) := ATTRS.PROCEDURE_NAME || '(H_TX'||l_min_colnum||'(I),NULL, ''' || ATTRS.ATTRIBUTE_NAME || ''',''PARTY_SITES'')';
6423       END IF;
6424     ELSE
6425       l_mincol_list(ATTRS.COLNUM) := 'Y';
6426     END IF;
6427 
6428     IF ATTRS.CUSTOM_ATTRIBUTE_PROCEDURE IS NULL THEN
6429       IF l_mincol_list(ATTRS.COLNUM) = 'Y' THEN
6430         IF ATTRS.SOURCE_TABLE='HZ_LOCATIONS' THEN
6431           l_select(idx) := 'l.'||ATTRS.ATTRIBUTE_NAME;
6432         ELSIF ATTRS.SOURCE_TABLE='HZ_PARTY_SITES' THEN
6433           l_select(idx) := 'ps.'||ATTRS.ATTRIBUTE_NAME;
6434         END IF;
6435       ELSE
6436         l_select(idx) := 'N';
6437       END IF;
6438 
6439       l_custom_list(ATTRS.COLNUM) := 'N';
6440     ELSE
6441       l_select(idx) := 'N';
6442       l_custom_list(ATTRS.COLNUM) := 'N';
6443       IF ATTRS.ATTRIBUTE_NAME = 'ADDRESS' THEN
6444         IF l_mincol_list(ATTRS.COLNUM) = 'Y' THEN
6445           l_select(idx) := 'rtrim(l.address1 || '' '' || l.address2 || '' '' || l.address3 || '' '' || l.address4)';
6446         END IF;
6447       ELSE
6448         IF l_mincol_list(ATTRS.COLNUM) = 'Y' THEN
6449           IF has_context(ATTRS.custom_attribute_procedure) THEN
6450             l_custom_list(ATTRS.COLNUM) := ATTRS.custom_attribute_procedure || '(H_PARTY_SITE_ID(I),''PARTY_SITES'','''||ATTRS.ATTRIBUTE_NAME|| ''', ''STAGE'')';
6451           ELSE
6452             l_custom_list(ATTRS.COLNUM) := ATTRS.custom_attribute_procedure || '(H_PARTY_SITE_ID(I), ''PARTY_SITES'','''||ATTRS.ATTRIBUTE_NAME|| ''')';
6453           END IF;
6454         END IF;
6455       END IF;
6456     END IF;
6457     idx := idx+1;
6458 
6459     -- VJN ADDED CODE FOR TRACKING CONDITION ATTRIBUTES AT THIS ENTITY LEVEL
6460     IF HZ_WORD_CONDITIONS_PKG.is_a_cond_attrib( ATTRS.attribute_id)
6461      THEN
6462          l_cond_attrib_list(ATTRS.COLNUM) := ATTRS.attribute_id ;
6463     END IF;
6464 
6465   END LOOP;
6466 
6467   IF cur_col_num<=255 THEN--bug 5977628
6468     FOR I in cur_col_num..255 LOOP
6469       l_mincol_list(I) := 'N';
6470       l_forall_list(I) := 'N';
6471       l_custom_list(I) := 'N';
6472     END LOOP;
6473   END IF;
6474 
6475   l('    OPEN x_sync_party_site_cur FOR ' );
6476   l('      SELECT /*+ ORDERED USE_NL(ps l) */ ');
6477   l('         ps.PARTY_SITE_ID ');
6478   l('        ,ps.PARTY_ID ');
6479   l('        ,NULL ');
6480   l('        ,ps.STATUS ');
6481   l('        ,ps.ROWID ');
6482 
6483   FOR I in 1..l_select.COUNT LOOP
6484     IF l_select(I) <> 'N' THEN
6485       l('        ,' || l_select(I));
6486     END IF;
6487   END LOOP;
6488 
6489   l('      FROM hz_locations l, hz_party_sites ps, ');
6490   l('           hz_imp_addresses_sg addr_sg, hz_imp_batch_details bd ');
6491   l('      WHERE l.request_id               = bd.main_conc_req_id ');
6492   l('      AND    bd.batch_id               = addr_sg.batch_id ');
6493   l('      AND    l.location_id             = ps.location_id ');
6494   l('      AND    addr_sg.batch_id          = p_batch_id ');
6495   l('      AND    addr_sg.batch_mode_flag   = p_batch_mode_flag ');
6496   l('      AND    addr_sg.party_orig_system = p_os ');
6497   l('      AND    addr_sg.party_site_id     = ps.party_site_id ');
6498   l('      AND    addr_sg.action_flag       = p_operation ');
6499   l('      AND    addr_sg.party_orig_system_reference BETWEEN p_from_osr AND p_to_osr ');
6500   l('      AND    (ps.status IS NULL OR ps.status = ''A'' OR ps.status = ''I''); ');
6501   l('');
6502   l('  END open_bulk_imp_sync_psite_cur; ');
6503   l('');
6504 END gen_bulk_imp_sync_psite_query;
6505 
6506 
6507 -- REPURI. Proccedure to generate the code (into HZ_STAGE_MAP_TRANSFORM)
6508 -- for OPEN_SYNC_PARTY_SITE_CURSOR and SYNC_ALL_PARTY_SITES Procedures.
6509 
6510 PROCEDURE generate_sync_psite_query_proc IS
6511  cur_col_num NUMBER := 1;
6512 
6513  TYPE coltab IS TABLE OF VARCHAR2(2000) INDEX BY BINARY_INTEGER;
6514 
6515  l_select coltab;
6516  FIRST BOOLEAN := FALSE;
6517 
6518  l_forall_list coltab;
6519  l_custom_list coltab;
6520  l_mincol_list coltab;
6521  l_min_colnum NUMBER;
6522  idx NUMBER :=1;
6523  is_first boolean := true;
6524 
6525  -- VJN Introduced for conditional word replacements
6526  l_cond_attrib_list coltab ;
6527  l_idx number ;
6528 
6529 BEGIN
6530 
6531   l('');
6532   l('  PROCEDURE open_sync_party_site_cursor ( ');
6533   l('    p_operation            IN      VARCHAR2,');
6534   l('    p_from_rec             IN      VARCHAR2,');
6535   l('    p_to_rec               IN      VARCHAR2,');
6536   l('    x_sync_party_site_cur  IN OUT  HZ_DQM_SYNC.SyncCurTyp) IS ');
6537   l('  BEGIN');
6538 
6539   FOR ATTRS IN (SELECT a.ATTRIBUTE_ID,
6540                        a.ATTRIBUTE_NAME,
6541                        a.SOURCE_TABLE,
6542                        a.CUSTOM_ATTRIBUTE_PROCEDURE,
6543                        f.PROCEDURE_NAME,
6544                        f.STAGED_ATTRIBUTE_COLUMN,
6545                        to_number(substrb(STAGED_ATTRIBUTE_COLUMN, 3)) COLNUM
6546                 FROM HZ_TRANS_ATTRIBUTES_VL a, HZ_TRANS_FUNCTIONS_VL f
6547                 WHERE ENTITY_NAME = 'PARTY_SITES'
6548                 AND nvl(f.ACTIVE_FLAG,'Y') = 'Y'
6549                 AND f.ATTRIBUTE_ID = a.ATTRIBUTE_ID
6550                 ORDER BY COLNUM) LOOP
6551     IF cur_col_num<ATTRS.COLNUM THEN
6552       FOR I in cur_col_num..ATTRS.COLNUM-1 LOOP
6553         l_mincol_list(I) := 'N';
6554         l_forall_list(I) := 'N';
6555         l_custom_list(I) := 'N';
6556       END LOOP;
6557     END IF;
6558     cur_col_num:=ATTRS.COLNUM+1;
6559     IF has_trx_context(ATTRS.PROCEDURE_NAME) THEN
6560       l_forall_list(ATTRS.COLNUM) := ATTRS.PROCEDURE_NAME || '(H_TX'||ATTRS.COLNUM||'(I),NULL, ''' || ATTRS.ATTRIBUTE_NAME || ''',''PARTY_SITES'',''STAGE'')';
6561     ELSE
6562       l_forall_list(ATTRS.COLNUM) := ATTRS.PROCEDURE_NAME || '(H_TX'||ATTRS.COLNUM||'(I),NULL, ''' || ATTRS.ATTRIBUTE_NAME || ''',''PARTY_SITES'')';
6563     END IF;
6564 
6565     SELECT min(to_number(substrb(STAGED_ATTRIBUTE_COLUMN, 3))) INTO l_min_colnum
6566     FROM HZ_TRANS_ATTRIBUTES_VL a, HZ_TRANS_FUNCTIONS_VL f
6567     WHERE ENTITY_NAME = 'PARTY_SITES'
6568     AND nvl(f.ACTIVE_FLAG,'Y') = 'Y'
6569     AND f.ATTRIBUTE_ID = a.ATTRIBUTE_ID
6570     AND a.ATTRIBUTE_NAME=ATTRS.ATTRIBUTE_NAME;
6571 
6572     IF ATTRS.colnum>l_min_colnum THEN
6573       l_mincol_list(ATTRS.COLNUM) := 'N';
6574       IF has_trx_context(ATTRS.PROCEDURE_NAME) THEN
6575         l_forall_list(ATTRS.COLNUM) := ATTRS.PROCEDURE_NAME || '(H_TX'||l_min_colnum||'(I),NULL, ''' || ATTRS.ATTRIBUTE_NAME || ''',''PARTY_SITES'',''STAGE'')';
6576       ELSE
6577         l_forall_list(ATTRS.COLNUM) := ATTRS.PROCEDURE_NAME || '(H_TX'||l_min_colnum||'(I),NULL, ''' || ATTRS.ATTRIBUTE_NAME || ''',''PARTY_SITES'')';
6578       END IF;
6579     ELSE
6580       l_mincol_list(ATTRS.COLNUM) := 'Y';
6581     END IF;
6582 
6583     IF ATTRS.CUSTOM_ATTRIBUTE_PROCEDURE IS NULL THEN
6584       IF l_mincol_list(ATTRS.COLNUM) = 'Y' THEN
6585         IF ATTRS.SOURCE_TABLE='HZ_LOCATIONS' THEN
6586           l_select(idx) := 'l.'||ATTRS.ATTRIBUTE_NAME;
6587         ELSIF ATTRS.SOURCE_TABLE='HZ_PARTY_SITES' THEN
6588           l_select(idx) := 'ps.'||ATTRS.ATTRIBUTE_NAME;
6589         END IF;
6590       ELSE
6591         l_select(idx) := 'N';
6592       END IF;
6593 
6594       l_custom_list(ATTRS.COLNUM) := 'N';
6595     ELSE
6596       l_select(idx) := 'N';
6597       l_custom_list(ATTRS.COLNUM) := 'N';
6598       IF ATTRS.ATTRIBUTE_NAME = 'ADDRESS' THEN
6599         IF l_mincol_list(ATTRS.COLNUM) = 'Y' THEN
6600           l_select(idx) := 'rtrim(l.address1 || '' '' || l.address2 || '' '' || l.address3 || '' '' || l.address4)';
6601         END IF;
6602       ELSE
6603         IF l_mincol_list(ATTRS.COLNUM) = 'Y' THEN
6604           IF has_context(ATTRS.custom_attribute_procedure) THEN
6605             l_custom_list(ATTRS.COLNUM) := ATTRS.custom_attribute_procedure || '(H_PARTY_SITE_ID(I),''PARTY_SITES'','''||ATTRS.ATTRIBUTE_NAME|| ''', ''STAGE'')';
6606           ELSE
6607             l_custom_list(ATTRS.COLNUM) := ATTRS.custom_attribute_procedure || '(H_PARTY_SITE_ID(I), ''PARTY_SITES'','''||ATTRS.ATTRIBUTE_NAME|| ''')';
6608           END IF;
6609         END IF;
6610       END IF;
6611     END IF;
6612     idx := idx+1;
6613 
6614     -- VJN ADDED CODE FOR TRACKING CONDITION ATTRIBUTES AT THIS ENTITY LEVEL
6615     IF HZ_WORD_CONDITIONS_PKG.is_a_cond_attrib( ATTRS.attribute_id)
6616      THEN
6617          l_cond_attrib_list(ATTRS.COLNUM) := ATTRS.attribute_id ;
6618     END IF;
6619 
6620   END LOOP;
6621 
6622   IF cur_col_num<=255 THEN--bug 5977628
6623     FOR I in cur_col_num..255 LOOP
6624       l_mincol_list(I) := 'N';
6625       l_forall_list(I) := 'N';
6626       l_custom_list(I) := 'N';
6627     END LOOP;
6628   END IF;
6629 
6630   l('    OPEN x_sync_party_site_cur FOR ' );
6631   l('      SELECT /*+ ORDERED USE_NL(ps l) */ ');
6632   l('         ps.PARTY_SITE_ID ');
6633   l('        ,dsi.party_id ');
6634   l('        ,dsi.org_contact_id ');
6635   l('        ,ps.status ');
6636   l('        ,dsi.ROWID ');
6637 
6638   FOR I in 1..l_select.COUNT LOOP
6639     IF l_select(I) <> 'N' THEN
6640       l('        ,' || l_select(I));
6641     END IF;
6642   END LOOP;
6643 
6644   l('      FROM   HZ_DQM_SYNC_INTERFACE dsi, HZ_PARTY_SITES ps, HZ_LOCATIONS l');
6645   l('      WHERE  dsi.record_id   = ps.party_site_id ');
6646   l('      AND    dsi.entity      = ''PARTY_SITES'' ');
6647   l('      AND    dsi.operation   = p_operation ');
6648   l('      AND    dsi.staged_flag = ''N'' ');
6649   l('      AND    dsi.sync_interface_num >= p_from_rec ');
6650   l('      AND    dsi.sync_interface_num <= p_to_rec ');
6651   l('      AND    (ps.status is null OR ps.status = ''A'' OR ps.status = ''I'') ');
6652   l('      AND    ps.location_id = l.location_id; ');
6653   l('  END; ');
6654 
6655   l('');
6656   l('  PROCEDURE sync_all_party_sites ( ');
6657   l('    p_operation                IN VARCHAR2, ');
6658   l('    p_bulk_sync_type           IN VARCHAR2, ');
6659   l('    p_sync_all_party_site_cur  IN HZ_DQM_SYNC.SyncCurTyp) IS ');
6660   l('');
6661   l('    l_limit         NUMBER  := ' || g_batch_size || ';');
6662   l('    l_last_fetch    BOOLEAN := FALSE;');
6663   l('    l_sql_errm      VARCHAR2(2000); ');
6664   l('    l_st            NUMBER; ');
6665   l('    l_en            NUMBER; ');
6666   l('    l_err_index     NUMBER; ');
6667   l('    l_err_count     NUMBER; ');
6668   l('');
6669   l('    bulk_errors     EXCEPTION; ');
6670   l('    PRAGMA EXCEPTION_INIT(bulk_errors, -24381); ');
6671   l('');
6672   l('  BEGIN');
6673   l('    log (''Begin Synchronizing Party Sites''); ');
6674   l('    LOOP');
6675   l('      log (''Bulk Collecting Party Sites Data...'',FALSE); ');
6676   l('      FETCH p_sync_all_party_site_cur BULK COLLECT INTO');
6677   l('         H_PARTY_SITE_ID');
6678   l('        ,H_PS_PARTY_ID');
6679   l('        ,H_PS_ORG_CONTACT_ID');
6680   l('        ,H_STATUS');
6681   l('        ,H_ROWID');
6682 
6683   FOR I IN 1..255 LOOP
6684     IF l_forall_list(I) <> 'N' AND l_mincol_list(I) = 'Y' AND
6685        l_custom_list(I) = 'N' THEN
6686       l('        ,H_TX'||I);
6687     END IF;
6688   END LOOP;
6689 
6690   l('      LIMIT l_limit;');
6691   l('      log (''Done''); ');
6692   l('');
6693   l('      IF p_sync_all_party_site_cur%NOTFOUND THEN');
6694   l('        l_last_fetch:=TRUE;');
6695   l('     END IF;');
6696   l('');
6697   l('      IF H_PARTY_SITE_ID.COUNT=0 AND l_last_fetch THEN');
6698   l('        EXIT;');
6699   l('      END IF;');
6700   l('');
6701   l('      log (''Synchronizing for ''||H_PARTY_SITE_ID.COUNT||'' Party Sites''); ');
6702   l('      log (''Populating Party Sites Transformation Functions into Arrays...'',FALSE); ');
6703   l('      FOR I in H_PARTY_SITE_ID.FIRST..H_PARTY_SITE_ID.LAST LOOP');
6704 
6705   -- VJN INTRODUCED FOR CONDITIONAL REPLACEMENTS
6706   -- CYCLE THROUGH THE CONDITON LIST AND GENERATE THE CODE
6707   -- FOR POPULATING THE GLOBAL CONDITION RECORD
6708 
6709   l_idx := l_cond_attrib_list.FIRST ;
6710   IF l_idx IS NOT NULL
6711   THEN
6712     l('        ---- SETTING GLOBAL CONDITION RECORD AT THE PARTY SITE LEVEL ----');
6713     l('');
6714   END IF ;
6715 
6716   WHILE l_cond_attrib_list.EXISTS(l_idx)
6717   LOOP
6718       l('        HZ_WORD_CONDITIONS_PKG.set_gbl_condition_rec ('||l_cond_attrib_list(l_idx)||','||'H_TX'||l_idx||'(I));');
6719       l_idx := l_idx+1;
6720   END LOOP;
6721 
6722   l('');
6723 
6724   FOR I IN 1..255 LOOP
6725     IF l_forall_list(I) <> 'N' THEN
6726       IF l_custom_list(I) <> 'N' AND l_mincol_list(I) = 'Y' THEN
6727         l('        H_TX'||I||'(I):='||l_custom_list(I)||';');
6728       END IF;
6729     END IF;
6730   END LOOP;
6731   FOR I IN 1..255 LOOP
6732     IF l_forall_list(I) <> 'N' THEN
6733       IF l_mincol_list(I) <> 'Y' THEN
6734         l('        H_TX'||I||'(I):='||l_forall_list(I)||';');
6735       END IF;
6736     END IF;
6737   END LOOP;
6738   FOR I IN 1..255 LOOP
6739     IF l_forall_list(I) <> 'N' THEN
6740       IF l_mincol_list(I) = 'Y' THEN
6741         l('        H_TX'||I||'(I):='||l_forall_list(I)||';');
6742       END IF;
6743     END IF;
6744   END LOOP;
6745   l('      END LOOP;');
6746   l('      log (''Done''); ');
6747   l('');
6748   l('      l_st := 1;  ');
6749   l('      l_en := H_PARTY_SITE_ID.COUNT; ');
6750   l('');
6751   l('      IF p_operation = ''C'' THEN ');
6752   l('        BEGIN  ');
6753   l('          log (''Inserting Data into HZ_STAGED_PARTY_SITES...'',FALSE); ');
6754   l('          FORALL I in l_st..l_en SAVE EXCEPTIONS ');
6755   l('            INSERT INTO HZ_STAGED_PARTY_SITES (');
6756   l('               PARTY_SITE_ID');
6757   l('              ,PARTY_ID');
6758   l('              ,ORG_CONTACT_ID');
6759   l('              ,STATUS_FLAG'); --Propagating Bug 4299785 fix to sync modifications
6760 
6761   FOR I IN 1..255 LOOP
6762     IF l_forall_list(I) <> 'N' THEN
6763       l('              ,TX'||I);
6764     END IF;
6765   END LOOP;
6766 
6767   l('            ) VALUES (');
6768   l('               H_PARTY_SITE_ID(I)');
6769   l('              ,H_PS_PARTY_ID(I)');
6770   l('              ,H_PS_ORG_CONTACT_ID(I)');
6771   l('              ,H_STATUS(I)'); --Propagating Bug 4299785 fix to sync modifications
6772 
6773   FOR I IN 1..255 LOOP
6774     IF l_forall_list(I) <> 'N' THEN
6775       l('              ,decode(H_TX'||I||'(I),null,H_TX'||I||'(I),H_TX'||I||'(I)||'' '')');
6776     END IF;
6777   END LOOP;
6778 
6779   l('            );');
6780   l('          log (''Done''); ');
6781   l('        EXCEPTION  WHEN bulk_errors THEN ');
6782   l('          l_err_count := SQL%BULK_EXCEPTIONS.COUNT; ');
6783   l('          FOR indx IN 1..l_err_count LOOP ');
6784   l('            l_err_index := SQL%BULK_EXCEPTIONS(indx).ERROR_INDEX; ');
6785   l('            l_sql_errm  := sqlerrm(-SQL%BULK_EXCEPTIONS(indx).ERROR_CODE); ');
6786   -- SCHITRAP: Bug:5357970 - Error code is a number. Oracle error for ''DUP_VAL_ON_INDEX'' is ORA-00001
6787   --l('            IF (SQL%BULK_EXCEPTIONS(indx).ERROR_CODE) = ''DUP_VAL_ON_INDEX'' THEN ');
6788   l('            IF (instr(l_sql_errm,''ORA-00001'')>0) THEN  ');
6789   l('              log (''Exception DUP_VAL_ON_INDEX occured while inserting Party Site with PARTY_SITE_ID - ''||H_PARTY_SITE_ID(l_err_index)); ');
6790   l('              DELETE FROM HZ_DQM_SYNC_INTERFACE WHERE ENTITY=''PARTY_SITES'' AND OPERATION=''C'' AND RECORD_ID=H_PARTY_SITE_ID(l_err_index);	');
6791   l('            ELSE ');
6792   l('              IF p_bulk_sync_type = ''DQM_SYNC'' THEN ');
6793   l('                UPDATE hz_dqm_sync_interface ');
6794   l('                  SET  error_data = l_sql_errm ');
6795   l('                  ,staged_flag    = decode (error_data, NULL, ''N'', ''E'') ');
6796   l('                WHERE rowid       = H_ROWID(l_err_index); ');
6797   l('              ELSIF  p_bulk_sync_type = ''IMPORT_SYNC'' THEN ');
6798   l('                -- Insert the Error Record into HZ_DQM_SYNC_INTERFACE table ');
6799   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); ');
6800   l('              END IF; ');
6801   l('            END IF; ');
6802   l('          END LOOP; ');
6803   l('        END; ');
6804   l('      ELSIF p_operation = ''U'' THEN ');
6805   l('        BEGIN ');
6806   l('          log (''Updating Data in HZ_STAGED_PARTY_SITES...'',FALSE); ');
6807   l('          FORALL I in l_st..l_en SAVE EXCEPTIONS ');
6808   l('            UPDATE HZ_STAGED_PARTY_SITES SET ');
6809   l('               concat_col = concat_col');
6810   l('              ,status_flag = H_STATUS(I)'); --Propagating Bug 4299785 fix to sync modifications
6811 
6812   FOR I IN 1..255 LOOP
6813     IF l_forall_list(I) <> 'N' THEN
6814       	IF (is_first) THEN
6815 	     is_first := false;
6816              l('              ,TX'||I||'=decode(H_TX'||I||'(I),null,H_TX'||I||'(I),H_TX'||I||'(I)||'' '')');
6817 	ELSE
6818              l('              ,TX'||I||'=decode(H_TX'||I||'(I),null,H_TX'||I||'(I),H_TX'||I||'(I)||'' '')');
6819 	END IF;
6820     END IF;
6821   END LOOP;
6822   l('            WHERE PARTY_SITE_ID=H_PARTY_SITE_ID(I);');
6823   l('          log (''Done''); ');
6824   l('        EXCEPTION  WHEN bulk_errors THEN ');
6825   l('          l_err_count := SQL%BULK_EXCEPTIONS.COUNT; ');
6826   l('          FOR indx IN 1..l_err_count LOOP ');
6827   l('            l_err_index := SQL%BULK_EXCEPTIONS(indx).ERROR_INDEX; ');
6828   l('            l_sql_errm  := sqlerrm(-SQL%BULK_EXCEPTIONS(indx).ERROR_CODE); ');
6829   -- SCHITRAP: Bug:5357970 - Error code is a number. Oracle error for ''DUP_VAL_ON_INDEX'' is ORA-00001
6830   --l('            IF (SQL%BULK_EXCEPTIONS(indx).ERROR_CODE) = ''DUP_VAL_ON_INDEX'' THEN ');
6831   l('            IF (instr(l_sql_errm,''ORA-00001'')>0) THEN  ');
6832   l('              log (''Exception DUP_VAL_ON_INDEX occured while inserting Party Site with PARTY_SITE_ID - ''||H_PARTY_SITE_ID(l_err_index)); ');
6833   l('              DELETE FROM HZ_DQM_SYNC_INTERFACE WHERE ENTITY=''PARTY_SITES'' AND OPERATION=''U'' AND RECORD_ID=H_PARTY_SITE_ID(l_err_index);	');
6834   l('            ELSE ');
6835   l('              IF p_bulk_sync_type = ''DQM_SYNC'' THEN ');
6836   l('                UPDATE hz_dqm_sync_interface ');
6837   l('                  SET  error_data = l_sql_errm ');
6838   l('                  ,staged_flag    = decode (error_data, NULL, ''N'', ''E'') ');
6839   l('                WHERE rowid       = H_ROWID(l_err_index); ');
6840   l('              ELSIF  p_bulk_sync_type = ''IMPORT_SYNC'' THEN ');
6841   l('                -- Insert the Error Record into HZ_DQM_SYNC_INTERFACE table ');
6842   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); ');
6843   l('              END IF; ');
6844   l('            END IF; ');
6845   l('          END LOOP; ');
6846   l('        END; ');
6847   l('      END IF;');
6848   l('');
6849   l('      IF l_last_fetch THEN');
6850   l('        -- Update HZ_STAGED_PARTIES, if corresponding child entity records ');
6851   l('        -- PARTY_SITES (in this case), have been inserted/updated ');
6852   l('');
6853   l('        log (''Updating D_PS column to SYNC in HZ_STAGED_PARTIES table for all related records...'',FALSE); ');
6854   l('        --Fix for bug 5048604, to update concat_col during update of denorm column ');
6855   l('        FORALL I IN H_PARTY_SITE_ID.FIRST..H_PARTY_SITE_ID.LAST ');
6856   l('          UPDATE HZ_STAGED_PARTIES set ');
6857   l('            D_PS = ''SYNC'' ');
6858   l('           ,CONCAT_COL = CONCAT_COL ');
6859   l('          WHERE PARTY_ID = H_PS_PARTY_ID(I); ');
6860   l('        log (''Done''); ');
6861   l('');
6862   l('      -- REPURI. Bug 4884742. ');
6863   l('      -- Bulk Insert of Import Party Sites into  Shadow Sync Interface table ');
6864   l('      -- if Shadow Staging has already run and completed successfully ');
6865   l('      IF ((p_bulk_sync_type = ''IMPORT_SYNC'') AND ');
6866   l('          (HZ_DQM_SYNC.is_shadow_staging_complete)) THEN ');
6867   l('        BEGIN ');
6868   l('           -- REPURI. Bug 4968126. ');
6869   l('           -- Using the Merge instead of Insert statement ');
6870   l('           -- so that duplicate records dont get inserted. ');
6871   l('          log (''Merging data into HZ_DQM_SH_SYNC_INTERFACE...'',FALSE); ');
6872   l('          FORALL I in l_st..l_en  ');
6873   l('            MERGE INTO hz_dqm_sh_sync_interface S ');
6874   l('              USING ( ');
6875   l('                SELECT ');
6876   l('                   H_PS_PARTY_ID(I)       AS party_id ');
6877   l('                  ,H_PARTY_SITE_ID(I)     AS record_id ');
6878   l('                  ,H_PS_ORG_CONTACT_ID(I) AS org_contact_id ');
6879   l('                FROM dual ) T ');
6880   l('              ON (S.entity                   = ''PARTY_SITES''              AND ');
6881   l('                  S.party_id                 = T.party_id                 AND ');
6882   l('                  S.record_id                = T.record_id                AND ');
6883   l('                  NVL(S.org_contact_id, -99) = NVL(T.org_contact_id, -99) AND ');
6884   l('                  S.staged_flag             <> ''E'') ');
6885   l('              WHEN NOT MATCHED THEN ');
6886   l('              INSERT ( ');
6887   l('                PARTY_ID, ');
6888   l('                RECORD_ID, ');
6889   l('                PARTY_SITE_ID, ');
6890   l('                ORG_CONTACT_ID, ');
6891   l('                ENTITY, ');
6892   l('                OPERATION, ');
6893   l('                STAGED_FLAG, ');
6894   l('                REALTIME_SYNC_FLAG, ');
6895   l('                CREATED_BY, ');
6896   l('                CREATION_DATE, ');
6897   l('                LAST_UPDATE_LOGIN, ');
6898   l('                LAST_UPDATE_DATE, ');
6899   l('                LAST_UPDATED_BY, ');
6900   l('                SYNC_INTERFACE_NUM ');
6901   l('              ) VALUES ( ');
6902   l('                H_PS_PARTY_ID(I), ');
6903   l('                H_PARTY_SITE_ID(I), ');
6904   l('                NULL, ');
6905   l('                H_PS_ORG_CONTACT_ID(I), ');
6906   l('                ''PARTY_SITES'', ');
6907   l('                p_operation, ');
6908   l('                ''N'', ');
6909   l('                ''N'', ');
6910   l('                hz_utility_pub.created_by, ');
6911   l('                hz_utility_pub.creation_date, ');
6912   l('                hz_utility_pub.last_update_login, ');
6913   l('                hz_utility_pub.last_update_date, ');
6914   l('                hz_utility_pub.user_id, ');
6915   l('                HZ_DQM_SH_SYNC_INTERFACE_S.nextval ');
6916   l('            ); ');
6917   l('        log (''Done''); ');
6918   l('        EXCEPTION WHEN OTHERS THEN ');
6919   l('              log (''Exception occured while inserting data into HZ_DQM_SH_SYNC_INTERFACE Table'');   ');
6920   l('              log (''Eror Message is - ''|| sqlerrm);   ');
6921   l('        END; ');
6922   l('      END IF; ');
6923   l('');
6924   l('        FND_CONCURRENT.AF_Commit;');
6925   l('        EXIT;');
6926   l('      END IF;');
6927   l('');
6928   l('      FND_CONCURRENT.AF_Commit;');
6929   l('');
6930   l('    END LOOP;');
6931   l('    log (''End Synchronizing Party Sites''); ');
6932   l('  END;');
6933 
6934 END;
6935 
6936 PROCEDURE generate_party_site_query_proc IS
6937  cur_col_num NUMBER := 1;
6938 
6939  TYPE coltab IS TABLE OF VARCHAR2(2000) INDEX BY BINARY_INTEGER;
6940 
6941  l_select coltab;
6942  FIRST BOOLEAN := FALSE;
6943 
6944  l_forall_list coltab;
6945  l_custom_list coltab;
6946  l_mincol_list coltab;
6947  l_min_colnum NUMBER;
6948  idx NUMBER :=1;
6949  is_first boolean := true;
6950 
6951  -- VJN Introduced for conditional word replacements
6952  l_cond_attrib_list coltab ;
6953  l_idx number ;
6954  l_attr_name varchar2(2000); --Bug No: 4279469
6955  l_ps_attr_name varchar2(2000); --Bug No: 4279469
6956  l_loc_attr_name varchar2(2000); --Bug No: 4279469
6957 BEGIN
6958   l('');
6959   l('  PROCEDURE insert_stage_party_sites IS ');
6960   l('  l_limit NUMBER := ' || g_batch_size || ';');
6961   l('  l_last_fetch BOOLEAN := FALSE;');
6962   l('  l_denorm VARCHAR2(2000);');
6963   l('  l_st number; ');
6964   l('  l_en number; ');
6965 
6966   l(' ');
6967 
6968   FOR ATTRS IN (SELECT a.ATTRIBUTE_ID,
6969                        a.ATTRIBUTE_NAME,
6970                        a.SOURCE_TABLE,
6971                        a.CUSTOM_ATTRIBUTE_PROCEDURE,
6972                        f.PROCEDURE_NAME,
6973                        f.STAGED_ATTRIBUTE_COLUMN,
6974                        to_number(substrb(STAGED_ATTRIBUTE_COLUMN, 3)) COLNUM,
6975 		       nvl(lkp.tag,'C') column_data_type
6976                 FROM HZ_TRANS_ATTRIBUTES_VL a, HZ_TRANS_FUNCTIONS_VL f,FND_LOOKUP_VALUES_VL lkp --Bug No: 4279469
6977                 WHERE ENTITY_NAME = 'PARTY_SITES'
6978                 AND nvl(f.ACTIVE_FLAG,'Y') = 'Y'
6979                 AND f.ATTRIBUTE_ID = a.ATTRIBUTE_ID
6980 		AND lkp.lookup_type = 'PARTY_SITE_LOGICAL_ATTRIB_LIST'
6981 		and lkp.lookup_code = a.ATTRIBUTE_NAME
6982                 ORDER BY COLNUM) LOOP
6983     IF cur_col_num<ATTRS.COLNUM THEN
6984       FOR I in cur_col_num..ATTRS.COLNUM-1 LOOP
6985         l_mincol_list(I) := 'N';
6986         l_forall_list(I) := 'N';
6987         l_custom_list(I) := 'N';
6988       END LOOP;
6989     END IF;
6990     cur_col_num:=ATTRS.COLNUM+1;
6991     IF has_trx_context(ATTRS.PROCEDURE_NAME) THEN
6992       l_forall_list(ATTRS.COLNUM) := ATTRS.PROCEDURE_NAME || '(H_TX'||ATTRS.COLNUM||'(I),NULL, ''' || ATTRS.ATTRIBUTE_NAME || ''',''PARTY_SITES'',''STAGE'')';
6993     ELSE
6994       l_forall_list(ATTRS.COLNUM) := ATTRS.PROCEDURE_NAME || '(H_TX'||ATTRS.COLNUM||'(I),NULL, ''' || ATTRS.ATTRIBUTE_NAME || ''',''PARTY_SITES'')';
6995     END IF;
6996 
6997     SELECT min(to_number(substrb(STAGED_ATTRIBUTE_COLUMN, 3))) INTO l_min_colnum
6998     FROM HZ_TRANS_ATTRIBUTES_VL a, HZ_TRANS_FUNCTIONS_VL f
6999     WHERE ENTITY_NAME = 'PARTY_SITES'
7000     AND nvl(f.ACTIVE_FLAG,'Y') = 'Y'
7001     AND f.ATTRIBUTE_ID = a.ATTRIBUTE_ID
7002     AND a.ATTRIBUTE_NAME=ATTRS.ATTRIBUTE_NAME;
7003 
7004     IF ATTRS.colnum>l_min_colnum THEN
7005       l_mincol_list(ATTRS.COLNUM) := 'N';
7006       IF has_trx_context(ATTRS.PROCEDURE_NAME) THEN
7007         l_forall_list(ATTRS.COLNUM) := ATTRS.PROCEDURE_NAME || '(H_TX'||l_min_colnum||'(I),NULL, ''' || ATTRS.ATTRIBUTE_NAME || ''',''PARTY_SITES'',''STAGE'')';
7008       ELSE
7009         l_forall_list(ATTRS.COLNUM) := ATTRS.PROCEDURE_NAME || '(H_TX'||l_min_colnum||'(I),NULL, ''' || ATTRS.ATTRIBUTE_NAME || ''',''PARTY_SITES'')';
7010       END IF;
7011     ELSE
7012       l_mincol_list(ATTRS.COLNUM) := 'Y';
7013     END IF;
7014 
7015     IF ATTRS.CUSTOM_ATTRIBUTE_PROCEDURE IS NULL THEN
7016       IF l_mincol_list(ATTRS.COLNUM) = 'Y' THEN
7017        	 -----Start of Bug No: 4279469----------
7018 	 l_attr_name := ATTRS.ATTRIBUTE_NAME;
7019          IF(ATTRS.column_data_type ='D') THEN
7020 	  l_ps_attr_name  := 'TO_CHAR(ps.'||l_attr_name||',''DD-MON-YYYY'') '||l_attr_name;
7021 	  l_loc_attr_name := 'TO_CHAR(l.'||l_attr_name||',''DD-MON-YYYY'') '||l_attr_name;
7022          ELSE
7023 	  l_ps_attr_name  := 'ps.'||l_attr_name;
7024 	  l_loc_attr_name := 'l.'||l_attr_name;
7025 	 END IF;
7026          -----End of Bug No: 4279469------------
7027         IF ATTRS.SOURCE_TABLE='HZ_LOCATIONS' THEN
7028           l_select(idx) := l_loc_attr_name;
7029         ELSIF ATTRS.SOURCE_TABLE='HZ_PARTY_SITES' THEN
7030           l_select(idx) := l_ps_attr_name;
7031         END IF;
7032       ELSE
7033         l_select(idx) := 'N';
7034       END IF;
7035 
7036       l_custom_list(ATTRS.COLNUM) := 'N';
7037     ELSE
7038       l_select(idx) := 'N';
7039       l_custom_list(ATTRS.COLNUM) := 'N';
7040       IF ATTRS.ATTRIBUTE_NAME = 'ADDRESS' THEN
7041         IF l_mincol_list(ATTRS.COLNUM) = 'Y' THEN
7042           l_select(idx) := 'rtrim(l.address1 || '' '' || l.address2 || '' '' || l.address3 || '' '' || l.address4)';
7043         END IF;
7044       ELSE
7045         IF l_mincol_list(ATTRS.COLNUM) = 'Y' THEN
7046           IF has_context(ATTRS.custom_attribute_procedure) THEN
7047             l_custom_list(ATTRS.COLNUM) := ATTRS.custom_attribute_procedure || '(H_PARTY_SITE_ID(I),''PARTY_SITES'','''||ATTRS.ATTRIBUTE_NAME|| ''', ''STAGE'')';
7048           ELSE
7049             l_custom_list(ATTRS.COLNUM) := ATTRS.custom_attribute_procedure || '(H_PARTY_SITE_ID(I), ''PARTY_SITES'','''||ATTRS.ATTRIBUTE_NAME|| ''')';
7050           END IF;
7051         END IF;
7052       END IF;
7053     END IF;
7054     idx := idx+1;
7055 
7056     -- VJN ADDED CODE FOR TRACKING CONDITION ATTRIBUTES AT THIS ENTITY LEVEL
7057     IF HZ_WORD_CONDITIONS_PKG.is_a_cond_attrib( ATTRS.attribute_id)
7058      THEN
7059          l_cond_attrib_list(ATTRS.COLNUM) := ATTRS.attribute_id ;
7060     END IF;
7061 
7062   END LOOP;
7063 
7064   IF cur_col_num<=255 THEN--bug 5977628
7065     FOR I in cur_col_num..255 LOOP
7066       l_mincol_list(I) := 'N';
7067       l_forall_list(I) := 'N';
7068       l_custom_list(I) := 'N';
7069     END LOOP;
7070   END IF;
7071 
7072   l('    CURSOR party_site_cur IS');
7073   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
7074   FOR I in 1..l_select.COUNT LOOP
7075     IF l_select(I) <> 'N' THEN
7076       l('                  ,' || l_select(I));
7077     END IF;
7078   END LOOP;
7079 
7080   l('            FROM HZ_DQM_STAGE_GT g, HZ_PARTY_SITES ps, HZ_LOCATIONS l');
7081   l('            WHERE ps.PARTY_ID = g.owner_id ');
7082   l('            AND (ps.status is null OR ps.status = ''A'' OR ps.status = ''I'')    ');
7083   l('            AND ps.location_id = l.location_id; ');
7084 
7085   l('  BEGIN');
7086   l('    OPEN party_site_cur;');
7087   l('    LOOP');
7088   l('      FETCH party_site_cur BULK COLLECT INTO');
7089   l('        H_PARTY_SITE_ID');
7090   l('        ,H_PS_PARTY_ID');
7091   l('        ,H_PS_ORG_CONTACT_ID');
7092   l('        ,H_PARTY_INDEX');
7093   l('        ,H_STATUS'); --Bug No: 4299785
7094 
7095   FOR I IN 1..255 LOOP
7096     IF l_forall_list(I) <> 'N' AND l_mincol_list(I) = 'Y' AND
7097        l_custom_list(I) = 'N' THEN
7098       l('         ,H_TX'||I);
7099     END IF;
7100   END LOOP;
7101   l('      LIMIT l_limit;');
7102   l('');
7103   l('    IF party_site_cur%NOTFOUND THEN');
7104   l('      l_last_fetch:=TRUE;');
7105   l('    END IF;');
7106 
7107   l('    IF H_PS_PARTY_ID.COUNT=0 AND l_last_fetch THEN');
7108   l('      EXIT;');
7109   l('    END IF;');
7110 
7111   l('    FOR I in H_PS_PARTY_ID.FIRST..H_PS_PARTY_ID.LAST LOOP');
7112 
7113   -- VJN INTRODUCED FOR CONDITIONAL REPLACEMENTS
7114   -- CYCLE THROUGH THE CONDITON LIST AND GENERATE THE CODE
7115   -- FOR POPULATING THE GLOBAL CONDITION RECORD
7116 
7117   l_idx := l_cond_attrib_list.FIRST ;
7118   IF l_idx IS NOT NULL
7119   THEN
7120     l('----------- SETTING GLOBAL CONDITION RECORD AT THE PARTY SITE LEVEL ---------');
7121   END IF ;
7122 
7123 
7124   l('');
7125 
7126 
7127   WHILE l_cond_attrib_list.EXISTS(l_idx)
7128   LOOP
7129 
7130       l('     HZ_WORD_CONDITIONS_PKG.set_gbl_condition_rec ('||l_cond_attrib_list(l_idx)||','||'H_TX'||l_idx||'(I));');
7131       l_idx := l_idx+1;
7132   END LOOP;
7133 
7134 
7135   FOR I IN 1..255 LOOP
7136     IF l_forall_list(I) <> 'N' THEN
7137       IF l_custom_list(I) <> 'N' AND l_mincol_list(I) = 'Y' THEN
7138         l('         H_TX'||I||'(I):='||l_custom_list(I)||';');
7139       END IF;
7140     END IF;
7141   END LOOP;
7142   FOR I IN 1..255 LOOP
7143     IF l_forall_list(I) <> 'N' THEN
7144       IF l_mincol_list(I) <> 'Y' THEN
7145         l('         H_TX'||I||'(I):='||l_forall_list(I)||';');
7146       END IF;
7147     END IF;
7148   END LOOP;
7149   FOR I IN 1..255 LOOP
7150     IF l_forall_list(I) <> 'N' THEN
7151       IF l_mincol_list(I) = 'Y' THEN
7152         l('         H_TX'||I||'(I):='||l_forall_list(I)||';');
7153       END IF;
7154     END IF;
7155   END LOOP;
7156 
7157   FIRST := TRUE;
7158   FOR ATTRS IN (SELECT a.ATTRIBUTE_ID,
7159                        a.ATTRIBUTE_NAME,
7160                        a.SOURCE_TABLE,
7161                        a.CUSTOM_ATTRIBUTE_PROCEDURE,
7162                        f.PROCEDURE_NAME,
7163                        f.STAGED_ATTRIBUTE_COLUMN,
7164                        to_number(substrb(STAGED_ATTRIBUTE_COLUMN, 3)) COLNUM
7165                 FROM HZ_TRANS_ATTRIBUTES_VL a, HZ_TRANS_FUNCTIONS_VL f
7166                 WHERE ENTITY_NAME = 'PARTY_SITES'
7167                 AND nvl(f.ACTIVE_FLAG,'Y') = 'Y'
7168                 AND f.ATTRIBUTE_ID = a.ATTRIBUTE_ID
7169                 AND nvl(a.DENORM_FLAG,'N') = 'Y') LOOP
7170      IF FIRST THEN
7171      -- Fix for bug 4872997
7172      -- Wrapping the 'l_denorm' portion of code into a begin-excpetion block
7173      -- and setting the denorm value to 'SYNC' if sqlcode-6502 error occurs
7174        l('      BEGIN ');
7175        l('        l_denorm := H_TX'||ATTRS.COLNUM||'(I)');
7176        FIRST := FALSE;
7177      ELSE
7178        l('                  || '' '' ||  H_TX'||ATTRS.COLNUM||'(I)');
7179      END IF;
7180   END LOOP;
7181   IF NOT FIRST THEN
7182     l('             ;');
7183     l('         IF H_PS_DEN(H_PARTY_INDEX(I)) = ''SYNC'' THEN');
7184     l('            NULL;');
7185     l('         ELSIF lengthb(H_PS_DEN(H_PARTY_INDEX(I)))+lengthb(l_denorm)<2000 THEN');
7186     l('           IF H_PS_DEN(H_PARTY_INDEX(I)) IS NULL OR instrb(H_PS_DEN(H_PARTY_INDEX(I)),l_denorm)=0 THEN');
7187     l('             H_PS_DEN(H_PARTY_INDEX(I)) := H_PS_DEN(H_PARTY_INDEX(I)) || '' '' || l_denorm;');
7188     l('           END IF;');
7189     l('         ELSE');
7190     l('           H_PS_DEN(H_PARTY_INDEX(I)) := ''SYNC'';');
7191     l('         END IF;');
7192     l('      EXCEPTION WHEN OTHERS THEN ');
7193     l('        IF SQLCODE=-6502 THEN');
7194     l('          H_PS_DEN(H_PARTY_INDEX(I)) := ''SYNC'';');
7195     l('        END IF; ');
7196     l('      END; ');
7197   END IF;
7198 
7199   l('    END LOOP;');
7200   l('      l_st := 1;  ');
7201   l('      l_en :=  H_PS_PARTY_ID.COUNT; ');
7202   l('      LOOP ');
7203   l('          BEGIN  ');
7204   l('          FORALL I in l_st..l_en');
7205   l('             INSERT INTO HZ_STAGED_PARTY_SITES (');
7206   l('	              PARTY_SITE_ID');
7207   l('	              ,PARTY_ID');
7208   l('	              ,ORG_CONTACT_ID');
7209   l('                 ,STATUS_FLAG'); --Bug No: 4299785
7210 
7211   FOR I IN 1..255 LOOP
7212     IF l_forall_list(I) <> 'N' THEN
7213       l('                 , TX'||I);
7214     END IF;
7215   END LOOP;
7216   l('                 ) VALUES (');
7217   l('                 H_PARTY_SITE_ID(I)');
7218   l('                ,H_PS_PARTY_ID(I)');
7219   l('                ,H_PS_ORG_CONTACT_ID(I)');
7220   l('                ,H_STATUS(I)'); --Bug No: 4299785
7221 
7222   FOR I IN 1..255 LOOP
7223     IF l_forall_list(I) <> 'N' THEN
7224       l('                 , decode(H_TX'||I||'(I),null,H_TX'||I||'(I),H_TX'||I||'(I)||'' '')');
7225     END IF;
7226   END LOOP;
7227   l('        );');
7228   l('        EXIT; ');
7229   l('        EXCEPTION  WHEN OTHERS THEN ');
7230   l('            l_st:= l_st+SQL%ROWCOUNT+1;');
7231   l('        END; ');
7232   l('      END LOOP; ');
7233   l('      FORALL I in H_PS_PARTY_ID.FIRST..H_PS_PARTY_ID.LAST ');
7234   l('        INSERT INTO HZ_DQM_STAGE_GT (PARTY_ID, OWNER_ID, OWNER_TABLE, PARTY_SITE_ID,');
7235   l('                                     ORG_CONTACT_ID,PARTY_INDEX) VALUES (');
7236   l('        H_PS_PARTY_ID(I),H_PARTY_SITE_ID(I),''HZ_PARTY_SITES'',H_PARTY_SITE_ID(I),');
7237   l('         H_PS_ORG_CONTACT_ID(I),H_PARTY_INDEX(I));');
7238 
7239   l('      IF l_last_fetch THEN');
7240   l('        EXIT;');
7241   l('      END IF;');
7242   l('    END LOOP;');
7243   l('    CLOSE party_site_cur;');
7244   l('  END;');
7245 
7246   l('');
7247   l('  PROCEDURE sync_single_party_site (');
7248   l('    p_party_site_id NUMBER,');
7249   l('    p_operation VARCHAR2) IS');
7250   l('');
7251   l('  l_tryins BOOLEAN;');
7252   l('  l_tryupd BOOLEAN;');
7253   l('   BEGIN');
7254 
7255   l('     SELECT ps.PARTY_SITE_ID, d.party_id, d.org_contact_id, ps.STATUS '); --Bug No: 4299785
7256   FOR I in 1..l_select.COUNT LOOP
7257     IF l_select(I) <> 'N' THEN
7258       l('                  ,' || l_select(I));
7259     END IF;
7260   END LOOP;
7261   l('      INTO H_PARTY_SITE_ID(1), H_PARTY_ID(1), H_ORG_CONTACT_ID(1), H_STATUS(1)'); --Bug No: 4299785
7262   FOR I IN 1..255 LOOP
7263     IF l_forall_list(I) <> 'N' AND l_mincol_list(I) = 'Y' AND
7264        l_custom_list(I) = 'N' THEN
7265       l('         , H_TX'||I||'(1)');
7266     END IF;
7267   END LOOP;
7268   l('     FROM HZ_PARTY_SITES ps, HZ_DQM_SYNC_INTERFACE d, HZ_LOCATIONS l ');
7269   l('     WHERE d.ENTITY=''PARTY_SITES'' ');
7270   l('     AND ps.party_site_id = p_party_site_id');
7271   l('     AND d.record_id = ps.party_site_id ');
7272   l('     AND ps.location_id = l.location_id ');
7273   l('     AND (ps.status is null OR ps.status = ''A'' OR ps.status = ''I'')    ');
7274   l('     AND ROWNUM=1;');
7275 
7276   -- VJN INTRODUCED CODE FOR GENERATING THE POPULATION
7277   -- OF THE GLOBAL CONDITION RECORD
7278 
7279   l_idx := l_cond_attrib_list.FIRST ;
7280   IF l_idx IS NOT NULL
7281   THEN
7282     l('----------- SETTING GLOBAL CONDITION RECORD AT THE PARTY SITE LEVEL ---------');
7283   END IF ;
7284 
7285 
7286   WHILE l_cond_attrib_list.EXISTS(l_idx)
7287   LOOP
7288 
7289       l('     HZ_WORD_CONDITIONS_PKG.set_gbl_condition_rec ('||l_cond_attrib_list(l_idx)||','||'H_TX'||l_idx||'(1));');
7290       l_idx := l_idx+1;
7291   END LOOP;
7292 
7293   FOR I IN 1..255 LOOP
7294     IF l_forall_list(I) <> 'N' THEN
7295       IF l_custom_list(I) <> 'N' AND l_mincol_list(I) = 'Y' THEN
7296         l('    H_TX'||I||'(1):='||replace(l_custom_list(I),'(I)','(1)')||';');
7297       END IF;
7298     END IF;
7299   END LOOP;
7300   FOR I IN 1..255 LOOP
7301     IF l_forall_list(I) <> 'N' THEN
7302       IF l_mincol_list(I) <> 'Y' THEN
7303         l('    H_TX'||I||'(1):='||replace(l_forall_list(I),'(I)','(1)')||';');
7304       END IF;
7305     END IF;
7306   END LOOP;
7307   FOR I IN 1..255 LOOP
7308     IF l_forall_list(I) <> 'N' THEN
7309       IF l_mincol_list(I) = 'Y' THEN
7310         l('    H_TX'||I||'(1):='||replace(l_forall_list(I),'(I)','(1)')||';');
7311       END IF;
7312     END IF;
7313   END LOOP;
7314 
7315   l('   l_tryins := FALSE;');
7316   l('   l_tryupd := FALSE;');
7317   l('   IF p_operation=''C'' THEN');
7318   l('     l_tryins:=TRUE;');
7319   l('   ELSE ');
7320   l('     l_tryupd:=TRUE;');
7321   l('   END IF;');
7322   l('   WHILE (l_tryins OR l_tryupd) LOOP');
7323   l('     IF l_tryins THEN');
7324   l('       BEGIN');
7325   l('         l_tryins:=FALSE;');
7326   l('         INSERT INTO HZ_STAGED_PARTY_SITES (');
7327   l('           PARTY_SITE_ID');
7328   l('           ,PARTY_ID');
7329   l('           ,ORG_CONTACT_ID');
7330   l('           ,STATUS_FLAG'); --Bug No: 4299785
7331 
7332   FOR I IN 1..255 LOOP
7333     IF l_forall_list(I) <> 'N' THEN
7334       l('              , TX'||I);
7335     END IF;
7336   END LOOP;
7337   l('           ) VALUES (');
7338   l('            H_PARTY_SITE_ID(1)');
7339   l('            ,H_PARTY_ID(1)');
7340   l('            ,H_ORG_CONTACT_ID(1)');
7341   l('            ,H_STATUS(1)'); --Bug No: 4299785
7342 
7343   FOR I IN 1..255 LOOP
7344     IF l_forall_list(I) <> 'N' THEN
7345       l('             , decode(H_TX'||I||'(1),null,H_TX'||I||'(1),H_TX'||I||'(1)||'' '')');
7346     END IF;
7347   END LOOP;
7348   l('         );');
7349   l('       EXCEPTION');
7350   l('         WHEN DUP_VAL_ON_INDEX THEN');
7351   l('           IF p_operation=''C'' THEN');
7352   l('             l_tryupd:=TRUE;');
7353   l('           END IF;');
7354   l('       END;');
7355   l('     END IF;');
7356   l('     IF l_tryupd THEN');
7357   l('       BEGIN');
7358   l('         l_tryupd:=FALSE;');
7359   l('         UPDATE HZ_STAGED_PARTY_SITES SET ');
7360   l('            concat_col = concat_col');
7361   l('           ,status_flag = H_STATUS(1)'); --Bug No: 4299785
7362 
7363   FOR I IN 1..255 LOOP
7364     IF l_forall_list(I) <> 'N' THEN
7365       	IF (is_first) THEN
7366 	     is_first := false;
7367              l('            ,TX'||I||'=decode(H_TX'||I||'(1),null,H_TX'||I||'(1),H_TX'||I||'(1)||'' '')');
7368 	ELSE
7369              l('            ,TX'||I||'=decode(H_TX'||I||'(1),null,H_TX'||I||'(1),H_TX'||I||'(1)||'' '')');
7370 	END IF;
7371     END IF;
7372   END LOOP;
7373   l('         WHERE PARTY_SITE_ID=H_PARTY_SITE_ID(1);');
7374   l('         IF SQL%ROWCOUNT=0 AND p_operation=''U'' THEN');
7375   l('           l_tryins := TRUE;');
7376   l('         END IF;');
7377   l('       EXCEPTION ');
7378   l('         WHEN NO_DATA_FOUND THEN');
7379   l('           IF p_operation=''U'' THEN');
7380   l('             l_tryins := TRUE;');
7381   l('           END IF;');
7382   l('       END;');
7383   l('     END IF;');
7384   l('   END LOOP;');
7385   l('   --Fix for bug 5048604, to update concat_col during update of denorm column ');
7386   l('   UPDATE HZ_STAGED_PARTIES set ');
7387   l('     D_PS = ''SYNC'' ');
7388   l('    ,CONCAT_COL = CONCAT_COL ');
7389   l('   WHERE PARTY_ID = H_PARTY_ID(1); ');
7390   l('  END;');
7391 
7392   -- VJN Introduced for SYNC. This is the online version, which would be used to
7393   -- directly insert into the staging tables from SYNC.
7394   is_first := true ;
7395   l('');
7396   l('  PROCEDURE sync_single_party_site_online (');
7397   l('    p_party_site_id   NUMBER,');
7398   l('    p_operation       VARCHAR2) IS');
7399   l('');
7400   l('    l_tryins          BOOLEAN;');
7401   l('    l_tryupd          BOOLEAN;');
7402   l('    l_party_id        NUMBER; ');
7403   l('    l_party_id1       NUMBER; ');
7404   l('    l_org_contact_id  NUMBER; ');
7405   l('    l_party_type      VARCHAR2(255); ');
7406   l('    l_sql_err_message VARCHAR2(2000); ');
7407   l('');
7408   l('  BEGIN');
7409   l('');
7410   l('    l_party_id        := -1; ');
7411   l('    l_org_contact_id  := -1; ');
7412   l('');
7413   l('    BEGIN ');
7414   l('      SELECT ps.party_id,p.party_type INTO l_party_id1, l_party_type ');
7415   l('      FROM HZ_PARTY_SITES ps, HZ_PARTIES p ');
7416   l('      WHERE party_site_id  = p_party_site_id ');
7417   l('      AND   p.PARTY_ID     = ps.PARTY_ID; ');
7418   l('    -- take care of invalid party ids ');
7419   l('    EXCEPTION  ');
7420   l('      WHEN NO_DATA_FOUND THEN ');
7421   l('        -- dbms_output.put_line ( ''Exception caught in party_site ''); ');
7422   l('        RETURN; ');
7423   l('    END; ');
7424   l('');
7425   l('    IF l_party_type = ''PARTY_RELATIONSHIP'' THEN ');
7426   l('      BEGIN ');
7427   l('        SELECT r.object_id, org_contact_id INTO l_party_id,l_org_contact_id ');
7428   l('        FROM HZ_ORG_CONTACTS oc, HZ_RELATIONSHIPS r ');
7429   l('        WHERE r.party_id            = l_party_id1 '); -- Fix for bug 5207194
7430   l('        AND   r.relationship_id     = oc.party_relationship_id ');
7431   l('        AND   r.directional_flag    = ''F'' ');
7432   l('        AND   r.SUBJECT_TABLE_NAME  = ''HZ_PARTIES'' ');
7433   l('        AND   r.OBJECT_TABLE_NAME   = ''HZ_PARTIES''; ');
7434   l('      -- take care of invalid identifiers ');
7435   l('      EXCEPTION ');
7436   l('        WHEN NO_DATA_FOUND THEN ');
7437   l('          -- dbms_output.put_line ( ''Exception caught in party_rel ''); ');
7438   l('          RETURN; ');
7439   l('      END; ');
7440   l('    ELSE ');
7441   l('      l_party_id :=l_party_id1; ');
7442   l('      l_org_contact_id:=NULL; ');
7443   l('    END IF; ');
7444   l('');
7445   l('    SELECT ps.PARTY_SITE_ID, l_party_id, l_org_contact_id, ps.STATUS '); --Bug No: 4299785
7446   FOR I in 1..l_select.COUNT LOOP
7447     IF l_select(I) <> 'N' THEN
7448       l('          ,' || l_select(I));
7449     END IF;
7450   END LOOP;
7451   l('    INTO H_PARTY_SITE_ID(1), H_PARTY_ID(1), H_ORG_CONTACT_ID(1), H_STATUS(1)'); --Bug No: 4299785
7452   FOR I IN 1..255 LOOP
7453     IF l_forall_list(I) <> 'N' AND l_mincol_list(I) = 'Y' AND
7454        l_custom_list(I) = 'N' THEN
7455       l('        ,H_TX'||I||'(1)');
7456     END IF;
7457   END LOOP;
7458   l('    FROM HZ_PARTY_SITES ps, HZ_LOCATIONS l ');
7459   l('    WHERE ');
7460   l('          ps.party_site_id = p_party_site_id');
7461   l('     AND  ps.location_id = l.location_id ');
7462   l('     AND  (ps.status is null OR ps.status = ''A'' OR ps.status = ''I'')    ');
7463   l('     AND  ROWNUM=1;');
7464   l('');
7465 
7466     -- VJN INTRODUCED CODE FOR GENERATING THE POPULATION
7467     -- OF THE GLOBAL CONDITION RECORD
7468 
7469   l_idx := l_cond_attrib_list.FIRST ;
7470   IF l_idx IS NOT NULL
7471   THEN
7472     l('    ---- SETTING GLOBAL CONDITION RECORD AT THE PARTY SITE LEVEL ----');
7473   END IF ;
7474 
7475   WHILE l_cond_attrib_list.EXISTS(l_idx)
7476   LOOP
7477     l('    HZ_WORD_CONDITIONS_PKG.set_gbl_condition_rec ('||l_cond_attrib_list(l_idx)||','||'H_TX'||l_idx||'(1));');
7478     l_idx := l_idx+1;
7479   END LOOP;
7480 
7481   FOR I IN 1..255 LOOP
7482     IF l_forall_list(I) <> 'N' THEN
7483       IF l_custom_list(I) <> 'N' AND l_mincol_list(I) = 'Y' THEN
7484         l('    H_TX'||I||'(1):='||replace(l_custom_list(I),'(I)','(1)')||';');
7485       END IF;
7486     END IF;
7487   END LOOP;
7488   FOR I IN 1..255 LOOP
7489     IF l_forall_list(I) <> 'N' THEN
7490       IF l_mincol_list(I) <> 'Y' THEN
7491         l('    H_TX'||I||'(1):='||replace(l_forall_list(I),'(I)','(1)')||';');
7492       END IF;
7493     END IF;
7494   END LOOP;
7495   FOR I IN 1..255 LOOP
7496     IF l_forall_list(I) <> 'N' THEN
7497       IF l_mincol_list(I) = 'Y' THEN
7498         l('    H_TX'||I||'(1):='||replace(l_forall_list(I),'(I)','(1)')||';');
7499       END IF;
7500     END IF;
7501   END LOOP;
7502 
7503   l('');
7504   l('    l_tryins := FALSE;');
7505   l('    l_tryupd := FALSE;');
7506   l('');
7507   l('    IF p_operation=''C'' THEN');
7508   l('      l_tryins:=TRUE;');
7509   l('    ELSE ');
7510   l('      l_tryupd:=TRUE;');
7511   l('    END IF;');
7512   l('');
7513   l('    WHILE (l_tryins OR l_tryupd) LOOP');
7514   l('      IF l_tryins THEN');
7515   l('        BEGIN');
7516   l('          l_tryins:=FALSE;');
7517   l('          INSERT INTO HZ_STAGED_PARTY_SITES (');
7518   l('             PARTY_SITE_ID');
7519   l('            ,PARTY_ID');
7520   l('            ,ORG_CONTACT_ID');
7521   l('            ,STATUS_FLAG'); --Bug No: 4299785
7522 
7523   FOR I IN 1..255 LOOP
7524     IF l_forall_list(I) <> 'N' THEN
7525       l('            ,TX'||I);
7526     END IF;
7527   END LOOP;
7528   l('          ) VALUES (');
7529   l('             H_PARTY_SITE_ID(1)');
7530   l('            ,H_PARTY_ID(1)');
7531   l('            ,H_ORG_CONTACT_ID(1)');
7532   l('            ,H_STATUS(1)'); --Bug No: 4299785
7533 
7534   FOR I IN 1..255 LOOP
7535     IF l_forall_list(I) <> 'N' THEN
7536       l('            ,decode(H_TX'||I||'(1),null,H_TX'||I||'(1),H_TX'||I||'(1)||'' '')');
7537     END IF;
7538   END LOOP;
7539   l('          );');
7540   l('        EXCEPTION');
7541   l('          WHEN DUP_VAL_ON_INDEX THEN');
7542   l('            IF p_operation=''C'' THEN');
7543   l('              l_tryupd:=TRUE;');
7544   l('            END IF;');
7545   l('        END;');
7546   l('      END IF;');
7547   l('');
7548   l('      IF l_tryupd THEN');
7549   l('        BEGIN');
7550   l('          l_tryupd:=FALSE;');
7551   l('          UPDATE HZ_STAGED_PARTY_SITES SET ');
7552   l('             concat_col = concat_col');
7553   l('            ,status_flag = H_STATUS(1)'); --Bug No: 4299785
7554 
7555   FOR I IN 1..255 LOOP
7556     IF l_forall_list(I) <> 'N' THEN
7557       	IF (is_first) THEN
7558 	     is_first := false;
7559              l('            ,TX'||I||'=decode(H_TX'||I||'(1),null,H_TX'||I||'(1),H_TX'||I||'(1)||'' '')');
7560 	ELSE
7561              l('            ,TX'||I||'=decode(H_TX'||I||'(1),null,H_TX'||I||'(1),H_TX'||I||'(1)||'' '')');
7562 	END IF;
7563     END IF;
7564   END LOOP;
7565   l('          WHERE PARTY_SITE_ID=H_PARTY_SITE_ID(1);');
7566   l('          IF SQL%ROWCOUNT=0 AND p_operation=''U'' THEN');
7567   l('            l_tryins := TRUE;');
7568   l('          END IF;');
7569   l('        EXCEPTION ');
7570   l('          WHEN NO_DATA_FOUND THEN');
7571   l('            IF p_operation=''U'' THEN');
7572   l('              l_tryins := TRUE;');
7573   l('            END IF;');
7574   l('        END;');
7575   l('      END IF;');
7576   l('    END LOOP;');
7577   l('');
7578   l('    --Fix for bug 5048604, to update concat_col during update of denorm column ');
7579   l('    UPDATE HZ_STAGED_PARTIES set');
7580   l('      D_PS = ''SYNC''');
7581   l('     ,CONCAT_COL = CONCAT_COL ');
7582   l('    WHERE PARTY_ID = H_PARTY_ID(1);');
7583   l('');
7584   l('      -- REPURI. Bug 4884742. If shadow staging is completely successfully ');
7585   l('      -- insert a record into hz_dqm_sh_sync_interface table for each record ');
7586   l('    IF (HZ_DQM_SYNC.is_shadow_staging_complete) THEN ');
7587   l('      BEGIN ');
7588   l('        HZ_DQM_SYNC.insert_sh_interface_rec(l_party_id,p_party_site_id,null,l_org_contact_id,''PARTY_SITES'',p_operation); ');
7589   l('      EXCEPTION WHEN OTHERS THEN ');
7590   l('        NULL; ');
7591   l('      END; ');
7592   l('    END IF; ');
7593   l('');
7594   -- Fix for Bug 4862121.
7595   -- Added the Exception handling at this context, for the procedure.
7596   l('  EXCEPTION WHEN OTHERS THEN ');
7597   l('    -- FAILOVER : REPORT RECORD TO HZ_DQM_SYNC_INTERFACE ');
7598   l('    -- FOR ONLINE FLOWS ');
7599   l('    l_sql_err_message := SQLERRM; ');
7600   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); ');
7601   l('  END;');
7602 
7603 END;
7604 
7605 -- REPURI. Proccedure to generate the code (into HZ_STAGE_MAP_TRANSFORM)
7606 -- for OPEN_BULK_IMP_SYNC_CT_CUR query procedure. Bug 4884735.
7607 
7608 PROCEDURE gen_bulk_imp_sync_ct_query IS
7609  cur_col_num NUMBER := 1;
7610 
7611  TYPE coltab IS TABLE OF VARCHAR2(2000) INDEX BY BINARY_INTEGER;
7612 
7613  l_select coltab;
7614  FIRST BOOLEAN := FALSE;
7615 
7616  l_forall_list coltab;
7617  l_custom_list coltab;
7618  l_mincol_list coltab;
7619  l_min_colnum NUMBER;
7620  idx NUMBER :=1;
7621  is_first boolean := true;
7622 
7623  -- VJN Introduced for conditional word replacements
7624  l_cond_attrib_list coltab ;
7625  l_idx number ;
7626 
7627 BEGIN
7628 
7629   l('');
7630   l('  PROCEDURE open_bulk_imp_sync_ct_cur ( ');
7631   l('    p_batch_id             IN      NUMBER, ');
7632   l('    p_batch_mode_flag      IN      VARCHAR2, ');
7633   l('    p_from_osr             IN      VARCHAR2, ');
7634   l('    p_to_osr               IN      VARCHAR2, ');
7635   l('    p_os                   IN      VARCHAR2, ');
7636   l('    p_operation            IN      VARCHAR2, ');
7637   l('    x_sync_contact_cur     IN OUT  HZ_DQM_SYNC.SyncCurTyp) IS ');
7638   l('  BEGIN');
7639 
7640   FOR ATTRS IN (SELECT a.ATTRIBUTE_ID,
7641                        a.ATTRIBUTE_NAME,
7642                        a.SOURCE_TABLE,
7643                        a.CUSTOM_ATTRIBUTE_PROCEDURE,
7644                        f.PROCEDURE_NAME,
7645                        f.STAGED_ATTRIBUTE_COLUMN,
7646                        to_number(substrb(STAGED_ATTRIBUTE_COLUMN, 3)) COLNUM
7647                 FROM HZ_TRANS_ATTRIBUTES_VL a, HZ_TRANS_FUNCTIONS_VL f
7648                 WHERE ENTITY_NAME = 'CONTACTS'
7649                 AND nvl(f.ACTIVE_FLAG,'Y') = 'Y'
7650                 AND f.ATTRIBUTE_ID = a.ATTRIBUTE_ID
7651                 ORDER BY COLNUM) LOOP
7652     IF cur_col_num<ATTRS.COLNUM THEN
7653       FOR I in cur_col_num..ATTRS.COLNUM-1 LOOP
7654         l_mincol_list(I) := 'N';
7655         l_forall_list(I) := 'N';
7656         l_custom_list(I) := 'N';
7657       END LOOP;
7658     END IF;
7659     cur_col_num:=ATTRS.COLNUM+1;
7660     IF has_trx_context(ATTRS.PROCEDURE_NAME) THEN
7661         l_forall_list(ATTRS.COLNUM) := ATTRS.PROCEDURE_NAME || '(H_TX'||ATTRS.COLNUM||'(I),NULL, ''' || ATTRS.ATTRIBUTE_NAME || ''',''CONTACTS'',''STAGE'')';
7662     ELSE
7663         l_forall_list(ATTRS.COLNUM) := ATTRS.PROCEDURE_NAME || '(H_TX'||ATTRS.COLNUM||'(I),NULL, ''' || ATTRS.ATTRIBUTE_NAME || ''',''CONTACTS'')';
7664     END IF;
7665 
7666     SELECT min(to_number(substrb(STAGED_ATTRIBUTE_COLUMN, 3))) INTO l_min_colnum
7667     FROM HZ_TRANS_ATTRIBUTES_VL a, HZ_TRANS_FUNCTIONS_VL f
7668     WHERE ENTITY_NAME = 'CONTACTS'
7669     AND nvl(f.ACTIVE_FLAG,'Y') = 'Y'
7670     AND f.ATTRIBUTE_ID = a.ATTRIBUTE_ID
7671     AND a.ATTRIBUTE_NAME=ATTRS.ATTRIBUTE_NAME;
7672 
7673     IF ATTRS.colnum>l_min_colnum THEN
7674       l_mincol_list(ATTRS.COLNUM) := 'N';
7675       IF has_trx_context(ATTRS.PROCEDURE_NAME) THEN
7676         l_forall_list(ATTRS.COLNUM) := ATTRS.PROCEDURE_NAME || '(H_TX'||l_min_colnum||'(I),NULL, ''' || ATTRS.ATTRIBUTE_NAME || ''',''CONTACTS'',''STAGE'')';
7677       ELSE
7678         l_forall_list(ATTRS.COLNUM) := ATTRS.PROCEDURE_NAME || '(H_TX'||l_min_colnum||'(I),NULL, ''' || ATTRS.ATTRIBUTE_NAME || ''',''CONTACTS'')';
7679       END IF;
7680 
7681     ELSE
7682       l_mincol_list(ATTRS.COLNUM) := 'Y';
7683     END IF;
7684 
7685     IF ATTRS.CUSTOM_ATTRIBUTE_PROCEDURE IS NULL THEN
7686       IF l_mincol_list(ATTRS.COLNUM) = 'Y' THEN
7687         IF ATTRS.SOURCE_TABLE='HZ_PERSON_PROFILES' THEN
7688           l_select(idx) := 'pp.'||ATTRS.ATTRIBUTE_NAME;
7689         ELSIF ATTRS.SOURCE_TABLE='HZ_ORG_CONTACTS' THEN
7690           l_select(idx) := 'oc.'||ATTRS.ATTRIBUTE_NAME;
7691         ELSIF ATTRS.SOURCE_TABLE='HZ_RELATIONSHIPS' THEN
7692           l_select(idx) := 'r.'||ATTRS.ATTRIBUTE_NAME;
7693         END IF;
7694       ELSE
7695         l_select(idx) := 'N';
7696       END IF;
7697 
7698       l_custom_list(ATTRS.COLNUM) := 'N';
7699     ELSE
7700       l_select(idx) := 'N';
7701       l_custom_list(ATTRS.COLNUM) := 'N';
7702       IF ATTRS.ATTRIBUTE_NAME = 'CONTACT_NAME' THEN
7703         IF l_mincol_list(ATTRS.COLNUM) = 'Y' THEN
7704           l_select(idx) := 'rtrim(pp.person_first_name || '' '' || pp.person_last_name)';
7705         END IF;
7706       ELSE
7707         IF l_mincol_list(ATTRS.COLNUM) = 'Y' THEN
7708           IF has_context(ATTRS.custom_attribute_procedure) THEN
7709             l_custom_list(ATTRS.COLNUM) := ATTRS.custom_attribute_procedure || '(H_ORG_CONTACT_ID(I),''CONTACTS'','''||ATTRS.ATTRIBUTE_NAME|| ''', ''STAGE'')';
7710           ELSE
7711             l_custom_list(ATTRS.COLNUM) := ATTRS.custom_attribute_procedure || '(H_ORG_CONTACT_ID(I), ''CONTACTS'','''||ATTRS.ATTRIBUTE_NAME|| ''')';
7712           END IF;
7713         END IF;
7714       END IF;
7715     END IF;
7716     idx := idx+1;
7717     -- VJN ADDED CODE FOR TRACKING CONDITION ATTRIBUTES AT THIS ENTITY LEVEL
7718     IF HZ_WORD_CONDITIONS_PKG.is_a_cond_attrib( ATTRS.attribute_id)
7719      THEN
7720          l_cond_attrib_list(ATTRS.COLNUM) := ATTRS.attribute_id ;
7721     END IF;
7722   END LOOP;
7723 
7724   IF cur_col_num<=255 THEN--bug 5977628
7725     FOR I in cur_col_num..255 LOOP
7726       l_mincol_list(I) := 'N';
7727       l_forall_list(I) := 'N';
7728       l_custom_list(I) := 'N';
7729     END LOOP;
7730   END IF;
7731 
7732   l('    OPEN x_sync_contact_cur FOR ' );
7733   l('      SELECT ');
7734   l('         /*+ ORDERED USE_NL(R OC PP)*/');
7735   l('         oc.ORG_CONTACT_ID ');
7736   l('        ,r.OBJECT_ID ');
7737   l('        ,r.PARTY_ID ');
7738   l('        ,r.STATUS '); --Propagating Bug 4299785 fix to sync modifications
7739   l('        ,oc.ROWID ');
7740 
7741   FOR I in 1..l_select.COUNT LOOP
7742     IF l_select(I) <> 'N' THEN
7743       l('        ,' || l_select(I));
7744     END IF;
7745   END LOOP;
7746 
7747   l('      FROM hz_org_contacts oc, hz_imp_contacts_sg ocsg, hz_imp_batch_details bd, ');
7748   l('           hz_relationships r, hz_person_profiles pp');
7749   l('      WHERE ocsg.batch_mode_flag     = p_batch_mode_flag ');
7750   l('      AND   oc.party_relationship_id = r.relationship_id ');
7751   l('      AND   ocsg.batch_id            = p_batch_id ');
7752   l('      AND   ocsg.sub_orig_system     = p_os ');
7753   l('      AND   ocsg.contact_id          = oc.org_contact_id ');
7754   l('      AND   oc.request_id            = bd.main_conc_req_id ');
7755   l('      AND   bd.batch_id              = ocsg.batch_id ');
7756   l('      AND   r.subject_id             = pp.party_id ');
7757   l('      AND   r.subject_type           = ''PERSON'' ');
7758   l('      AND   r.SUBJECT_TABLE_NAME     = ''HZ_PARTIES''');
7759   l('      AND   r.OBJECT_TABLE_NAME      = ''HZ_PARTIES''');
7760   l('      AND   DIRECTIONAL_FLAG         = ''F'' ');
7761   l('      AND   ocsg.action_flag          = p_operation ');
7762   l('      AND   pp.effective_end_date  IS NULL ');
7763   l('      AND   ocsg.sub_orig_system_reference BETWEEN p_from_osr AND p_to_osr ');
7764   l('      AND   (oc.status IS NULL OR oc.status = ''A'' OR oc.status = ''I'')');
7765   l('      AND   (r.status  IS NULL OR r.status  = ''A'' OR r.status  = ''I'') ');
7766   l('      UNION ');
7767   l('      SELECT ');
7768   l('         /*+ ORDERED USE_NL(R OC PP)*/');
7769   l('         oc.ORG_CONTACT_ID ');
7770   l('        ,r.OBJECT_ID ');
7771   l('        ,r.PARTY_ID ');
7772   l('        ,r.STATUS '); --Propagating Bug 4299785 fix to sync modifications
7773   l('        ,oc.ROWID ');
7774 
7775   FOR I in 1..l_select.COUNT LOOP
7776     IF l_select(I) <> 'N' THEN
7777       l('        ,' || l_select(I));
7778     END IF;
7779   END LOOP;
7780 
7781   l('      FROM hz_org_contacts oc, hz_imp_relships_sg rsg, hz_imp_batch_details bd ');
7782   l('          ,hz_relationships r, hz_person_profiles pp ');
7783   l('      WHERE rsg.batch_mode_flag     = p_batch_mode_flag ');
7784   l('      AND   rsg.batch_id            = p_batch_id ');
7785   l('      AND   rsg.sub_orig_system     = p_os ');
7786   l('      AND   rsg.relationship_id     = oc.party_relationship_id ');
7787   l('      AND   oc.request_id           = bd.main_conc_req_id ');
7788   l('      AND   bd.batch_id             = rsg.batch_id ');
7789   l('      AND   rsg.relationship_id     = r.relationship_id ');
7790   l('      AND   r.directional_flag      = ''F'' ');
7791   l('      AND   r.subject_id            = pp.party_id ');
7792   l('      AND   r.subject_type          = ''PERSON'' ');
7793   l('      AND   r.object_type           = ''ORGANIZATION'' ');
7794   l('      AND   r.SUBJECT_TABLE_NAME    = ''HZ_PARTIES'' ');
7795   l('      AND   r.OBJECT_TABLE_NAME     = ''HZ_PARTIES'' ');
7796   l('      AND   rsg.action_flag         = p_operation ');
7797   l('      AND   pp.effective_end_date   IS NULL ');
7798   l('      AND   rsg.sub_orig_system_reference BETWEEN p_from_osr AND p_to_osr ');
7799   l('      AND   (oc.status IS NULL OR oc.status = ''A'' OR oc.status = ''I'')');
7800   l('      AND   (r.status  IS NULL OR r.status  = ''A'' OR r.status  = ''I'');');
7801 
7802   l('  END open_bulk_imp_sync_ct_cur; ');
7803 
7804 END gen_bulk_imp_sync_ct_query;
7805 
7806 
7807 
7808 -- REPURI. Proccedure to generate the code (into HZ_STAGE_MAP_TRANSFORM)
7809 -- for OPEN_SYNC_CONTACT_CURSOR and SYNC_ALL_CONTACTS Procedures.
7810 
7811 PROCEDURE generate_sync_ct_query_proc IS
7812  cur_col_num NUMBER := 1;
7813 
7814  TYPE coltab IS TABLE OF VARCHAR2(2000) INDEX BY BINARY_INTEGER;
7815 
7816  l_select coltab;
7817  FIRST BOOLEAN := FALSE;
7818 
7819  l_forall_list coltab;
7820  l_custom_list coltab;
7821  l_mincol_list coltab;
7822  l_min_colnum NUMBER;
7823  idx NUMBER :=1;
7824  is_first boolean := true;
7825 
7826  -- VJN Introduced for conditional word replacements
7827  l_cond_attrib_list coltab ;
7828  l_idx number ;
7829 
7830 BEGIN
7831 
7832   l('');
7833   l('  PROCEDURE open_sync_contact_cursor ( ');
7834   l('    p_operation            IN      VARCHAR2,');
7835   l('    p_from_rec             IN      VARCHAR2,');
7836   l('    p_to_rec               IN      VARCHAR2,');
7837   l('    x_sync_contact_cur     IN OUT  HZ_DQM_SYNC.SyncCurTyp) IS ');
7838   l('  BEGIN');
7839 
7840   FOR ATTRS IN (SELECT a.ATTRIBUTE_ID,
7841                        a.ATTRIBUTE_NAME,
7842                        a.SOURCE_TABLE,
7843                        a.CUSTOM_ATTRIBUTE_PROCEDURE,
7844                        f.PROCEDURE_NAME,
7845                        f.STAGED_ATTRIBUTE_COLUMN,
7846                        to_number(substrb(STAGED_ATTRIBUTE_COLUMN, 3)) COLNUM
7847                 FROM HZ_TRANS_ATTRIBUTES_VL a, HZ_TRANS_FUNCTIONS_VL f
7848                 WHERE ENTITY_NAME = 'CONTACTS'
7849                 AND nvl(f.ACTIVE_FLAG,'Y') = 'Y'
7850                 AND f.ATTRIBUTE_ID = a.ATTRIBUTE_ID
7851                 ORDER BY COLNUM) LOOP
7852     IF cur_col_num<ATTRS.COLNUM THEN
7853       FOR I in cur_col_num..ATTRS.COLNUM-1 LOOP
7854         l_mincol_list(I) := 'N';
7855         l_forall_list(I) := 'N';
7856         l_custom_list(I) := 'N';
7857       END LOOP;
7858     END IF;
7859     cur_col_num:=ATTRS.COLNUM+1;
7860     IF has_trx_context(ATTRS.PROCEDURE_NAME) THEN
7861         l_forall_list(ATTRS.COLNUM) := ATTRS.PROCEDURE_NAME || '(H_TX'||ATTRS.COLNUM||'(I),NULL, ''' || ATTRS.ATTRIBUTE_NAME || ''',''CONTACTS'',''STAGE'')';
7862     ELSE
7863         l_forall_list(ATTRS.COLNUM) := ATTRS.PROCEDURE_NAME || '(H_TX'||ATTRS.COLNUM||'(I),NULL, ''' || ATTRS.ATTRIBUTE_NAME || ''',''CONTACTS'')';
7864     END IF;
7865 
7866     SELECT min(to_number(substrb(STAGED_ATTRIBUTE_COLUMN, 3))) INTO l_min_colnum
7867     FROM HZ_TRANS_ATTRIBUTES_VL a, HZ_TRANS_FUNCTIONS_VL f
7868     WHERE ENTITY_NAME = 'CONTACTS'
7869     AND nvl(f.ACTIVE_FLAG,'Y') = 'Y'
7870     AND f.ATTRIBUTE_ID = a.ATTRIBUTE_ID
7871     AND a.ATTRIBUTE_NAME=ATTRS.ATTRIBUTE_NAME;
7872 
7873     IF ATTRS.colnum>l_min_colnum THEN
7874       l_mincol_list(ATTRS.COLNUM) := 'N';
7875       IF has_trx_context(ATTRS.PROCEDURE_NAME) THEN
7876         l_forall_list(ATTRS.COLNUM) := ATTRS.PROCEDURE_NAME || '(H_TX'||l_min_colnum||'(I),NULL, ''' || ATTRS.ATTRIBUTE_NAME || ''',''CONTACTS'',''STAGE'')';
7877       ELSE
7878         l_forall_list(ATTRS.COLNUM) := ATTRS.PROCEDURE_NAME || '(H_TX'||l_min_colnum||'(I),NULL, ''' || ATTRS.ATTRIBUTE_NAME || ''',''CONTACTS'')';
7879       END IF;
7880 
7881     ELSE
7882       l_mincol_list(ATTRS.COLNUM) := 'Y';
7883     END IF;
7884 
7885     IF ATTRS.CUSTOM_ATTRIBUTE_PROCEDURE IS NULL THEN
7886       IF l_mincol_list(ATTRS.COLNUM) = 'Y' THEN
7887         IF ATTRS.SOURCE_TABLE='HZ_PERSON_PROFILES' THEN
7888           l_select(idx) := 'pp.'||ATTRS.ATTRIBUTE_NAME;
7889         ELSIF ATTRS.SOURCE_TABLE='HZ_ORG_CONTACTS' THEN
7890           l_select(idx) := 'oc.'||ATTRS.ATTRIBUTE_NAME;
7891         ELSIF ATTRS.SOURCE_TABLE='HZ_RELATIONSHIPS' THEN
7892           l_select(idx) := 'r.'||ATTRS.ATTRIBUTE_NAME;
7893         END IF;
7894       ELSE
7895         l_select(idx) := 'N';
7896       END IF;
7897 
7898       l_custom_list(ATTRS.COLNUM) := 'N';
7899     ELSE
7900       l_select(idx) := 'N';
7901       l_custom_list(ATTRS.COLNUM) := 'N';
7902       IF ATTRS.ATTRIBUTE_NAME = 'CONTACT_NAME' THEN
7903         IF l_mincol_list(ATTRS.COLNUM) = 'Y' THEN
7904           l_select(idx) := 'rtrim(pp.person_first_name || '' '' || pp.person_last_name)';
7905         END IF;
7906       ELSE
7907         IF l_mincol_list(ATTRS.COLNUM) = 'Y' THEN
7908           IF has_context(ATTRS.custom_attribute_procedure) THEN
7909             l_custom_list(ATTRS.COLNUM) := ATTRS.custom_attribute_procedure || '(H_ORG_CONTACT_ID(I),''CONTACTS'','''||ATTRS.ATTRIBUTE_NAME|| ''', ''STAGE'')';
7910           ELSE
7911             l_custom_list(ATTRS.COLNUM) := ATTRS.custom_attribute_procedure || '(H_ORG_CONTACT_ID(I), ''CONTACTS'','''||ATTRS.ATTRIBUTE_NAME|| ''')';
7912           END IF;
7913         END IF;
7914       END IF;
7915     END IF;
7916     idx := idx+1;
7917     -- VJN ADDED CODE FOR TRACKING CONDITION ATTRIBUTES AT THIS ENTITY LEVEL
7918     IF HZ_WORD_CONDITIONS_PKG.is_a_cond_attrib( ATTRS.attribute_id)
7919      THEN
7920          l_cond_attrib_list(ATTRS.COLNUM) := ATTRS.attribute_id ;
7921     END IF;
7922   END LOOP;
7923 
7924   IF cur_col_num<=255 THEN--bug 5977628
7925     FOR I in cur_col_num..255 LOOP
7926       l_mincol_list(I) := 'N';
7927       l_forall_list(I) := 'N';
7928       l_custom_list(I) := 'N';
7929     END LOOP;
7930   END IF;
7931 
7932   l('    OPEN x_sync_contact_cur FOR ' );
7933   l('      SELECT ');
7934  -- Start Bug:5460390------
7935   --l('         /*+ ORDERED USE_NL(R OC PP)*/');
7936   l('         /*+ leading(dsi) USE_NL(OC R PP) */ ');
7937  -- End Bug:5460390------
7938   l('         oc.ORG_CONTACT_ID ');
7939   l('        ,r.OBJECT_ID ');
7940   l('        ,r.PARTY_ID ');
7941   l('        ,r.STATUS '); --Propagating Bug 4299785 fix to sync modifications
7942   l('        ,dsi.ROWID ');
7943 
7944   FOR I in 1..l_select.COUNT LOOP
7945     IF l_select(I) <> 'N' THEN
7946       l('        ,' || l_select(I));
7947     END IF;
7948   END LOOP;
7949 
7950   l('      FROM HZ_DQM_SYNC_INTERFACE dsi, HZ_RELATIONSHIPS r,');
7951   l('           HZ_ORG_CONTACTS oc, HZ_PERSON_PROFILES pp');
7952   l('      WHERE oc.party_relationship_id = r.relationship_id ');
7953   l('      AND   dsi.record_id            = oc.org_contact_id ');
7954   l('      AND   r.subject_id             = pp.party_id ');
7955   l('      AND   r.subject_type           = ''PERSON'' ');
7956   l('      AND   r.SUBJECT_TABLE_NAME     = ''HZ_PARTIES''');
7957   l('      AND   r.OBJECT_TABLE_NAME      = ''HZ_PARTIES''');
7958   l('      AND   DIRECTIONAL_FLAG         = ''F'' ');
7959   l('      AND   pp.effective_end_date    is NULL ');
7960   l('      AND   dsi.entity               = ''CONTACTS'' ');
7961   l('      AND   dsi.operation            = p_operation ');
7962   l('      AND   dsi.staged_flag          = ''N'' ');
7963   l('      AND   dsi.sync_interface_num  >= p_from_rec ');
7964   l('      AND   dsi.sync_interface_num  <= p_to_rec ');
7965   l('      AND   (oc.status is null OR oc.status = ''A'' or oc.status = ''I'')');
7966   l('      AND   (r.status is null OR r.status = ''A'' or r.status = ''I'');');
7967   l('  END; ');
7968 
7969   l('');
7970   l('  PROCEDURE sync_all_contacts ( ');
7971   l('    p_operation               IN VARCHAR2, ');
7972   l('    p_bulk_sync_type          IN VARCHAR2, ');
7973   l('    p_sync_all_contact_cur    IN HZ_DQM_SYNC.SyncCurTyp) IS ');
7974   l('');
7975   l('    l_limit         NUMBER  := ' || g_batch_size || ';');
7976   l('    l_last_fetch    BOOLEAN := FALSE;');
7977   l('    l_sql_errm      VARCHAR2(2000); ');
7978   l('    l_st            NUMBER; ');
7979   l('    l_en            NUMBER; ');
7980   l('    l_err_index     NUMBER; ');
7981   l('    l_err_count     NUMBER; ');
7982   l('');
7983   l('    bulk_errors     EXCEPTION; ');
7984   l('    PRAGMA EXCEPTION_INIT(bulk_errors, -24381); ');
7985   l('');
7986   l('  BEGIN');
7987   l('    log (''Begin Synchronizing Contacts''); ');
7988   l('    LOOP');
7989   l('      log (''Bulk Collecting Contacts Data...'',FALSE); ');
7990   l('      FETCH p_sync_all_contact_cur BULK COLLECT INTO');
7991   l('         H_ORG_CONTACT_ID');
7992   l('        ,H_C_PARTY_ID');
7993   l('        ,H_R_PARTY_ID');
7994   l('        ,H_STATUS'); --Propagating Bug 4299785 fix to sync modifications
7995   l('        ,H_ROWID');
7996 
7997   FOR I IN 1..255 LOOP
7998     IF l_forall_list(I) <> 'N' AND l_mincol_list(I) = 'Y' AND
7999        l_custom_list(I) = 'N' THEN
8000       l('        ,H_TX'||I);
8001     END IF;
8002   END LOOP;
8003   l('      LIMIT l_limit;');
8004   l('      log (''Done''); ');
8005   l('');
8006   l('      IF p_sync_all_contact_cur%NOTFOUND THEN');
8007   l('        l_last_fetch:=TRUE;');
8008   l('      END IF;');
8009   l('');
8010   l('      IF H_ORG_CONTACT_ID.COUNT=0 AND l_last_fetch THEN');
8011   l('        EXIT;');
8012   l('      END IF;');
8013   l('');
8014   l('      log (''Synchronizing for ''||H_ORG_CONTACT_ID.COUNT||'' Contacts''); ');
8015   l('      log (''Populating Contacts Transformation Functions into Arrays...'',FALSE); ');
8016   l('');
8017   l('      FOR I in H_ORG_CONTACT_ID.FIRST..H_ORG_CONTACT_ID.LAST LOOP');
8018 
8019   -- VJN INTRODUCED CODE FOR GENERATING THE POPULATION
8020   -- OF THE GLOBAL CONDITION RECORD
8021 
8022   l_idx := l_cond_attrib_list.FIRST ;
8023   IF l_idx IS NOT NULL
8024   THEN
8025     l('        ---- SETTING GLOBAL CONDITION RECORD AT THE CONTACT LEVEL ----');
8026     l('');
8027   END IF ;
8028 
8029   WHILE l_cond_attrib_list.EXISTS(l_idx)
8030   LOOP
8031       l('        HZ_WORD_CONDITIONS_PKG.set_gbl_condition_rec ('||l_cond_attrib_list(l_idx)||','||'H_TX'||l_idx||'(I));');
8032       l_idx := l_idx+1;
8033   END LOOP;
8034 
8035   l('');
8036 
8037   FOR I IN 1..255 LOOP
8038     IF l_forall_list(I) <> 'N' THEN
8039       IF l_custom_list(I) <> 'N' AND l_mincol_list(I) = 'Y' THEN
8040         l('        H_TX'||I||'(I):='||l_custom_list(I)||';');
8041       END IF;
8042     END IF;
8043   END LOOP;
8044   FOR I IN 1..255 LOOP
8045     IF l_forall_list(I) <> 'N' THEN
8046       IF l_mincol_list(I) <> 'Y' THEN
8047         l('        H_TX'||I||'(I):='||l_forall_list(I)||';');
8048       END IF;
8049     END IF;
8050   END LOOP;
8051   FOR I IN 1..255 LOOP
8052     IF l_forall_list(I) <> 'N' THEN
8053       IF l_mincol_list(I) = 'Y' THEN
8054         l('        H_TX'||I||'(I):='||l_forall_list(I)||';');
8055       END IF;
8056     END IF;
8057   END LOOP;
8058 
8059   l('      END LOOP;');
8060   l('      log (''Done''); ');
8061   l('');
8062   l('      l_st :=  1;  ');
8063   l('      l_en :=  H_ORG_CONTACT_ID.COUNT; ');
8064   l('');
8065   l('      IF p_operation = ''C'' THEN ');
8066   l('        BEGIN ');
8067   l('          log (''Inserting Data into HZ_STAGED_CONTACTS...'',FALSE); ');
8068   l('          FORALL I in l_st..l_en SAVE EXCEPTIONS ');
8069   l('            INSERT INTO HZ_STAGED_CONTACTS (');
8070   l('	            ORG_CONTACT_ID');
8071   l('              ,PARTY_ID');
8072   l('              ,STATUS_FLAG '); --Propagating Bug 4299785 fix to sync modifications
8073   FOR I IN 1..255 LOOP
8074     IF l_forall_list(I) <> 'N' THEN
8075       l('              ,TX'||I);
8076     END IF;
8077   END LOOP;
8078   l('            ) VALUES (');
8079   l('               H_ORG_CONTACT_ID(I)');
8080   l('              ,H_C_PARTY_ID(I)');
8081   l('              ,H_STATUS(I)'); --Propagating Bug 4299785 fix to sync modifications
8082 
8083   FOR I IN 1..255 LOOP
8084     IF l_forall_list(I) <> 'N' THEN
8085       l('              ,decode(H_TX'||I||'(I),null,H_TX'||I||'(I),H_TX'||I||'(I)||'' '')');
8086     END IF;
8087   END LOOP;
8088   l('            );');
8089   l('          log (''Done''); ');
8090   l('        EXCEPTION  WHEN bulk_errors THEN ');
8091   l('          l_err_count := SQL%BULK_EXCEPTIONS.COUNT; ');
8092   l('          FOR indx IN 1..l_err_count LOOP ');
8093   l('            l_err_index := SQL%BULK_EXCEPTIONS(indx).ERROR_INDEX; ');
8094   l('            l_sql_errm  := sqlerrm(-SQL%BULK_EXCEPTIONS(indx).ERROR_CODE); ');
8095   -- SCHITRAP: Bug:5357970 - Error code is a number. Oracle error for ''DUP_VAL_ON_INDEX'' is ORA-00001
8096   --l('            IF (SQL%BULK_EXCEPTIONS(indx).ERROR_CODE) = ''DUP_VAL_ON_INDEX'' THEN ');
8097   l('            IF (instr(l_sql_errm,''ORA-00001'')>0) THEN  ');
8098   l('              log (''Exception DUP_VAL_ON_INDEX occured while inserting a Contact with ORG_CONTACT_ID - ''||H_ORG_CONTACT_ID(l_err_index)); ');
8099   l('              DELETE FROM HZ_DQM_SYNC_INTERFACE WHERE ENTITY=''CONTACTS'' AND OPERATION=''C'' AND RECORD_ID=H_ORG_CONTACT_ID(l_err_index);	');
8100   l('            ELSE ');
8101   l('              IF p_bulk_sync_type = ''DQM_SYNC'' THEN ');
8102   l('                UPDATE hz_dqm_sync_interface ');
8103   l('                  SET  error_data = l_sql_errm ');
8104   l('                  ,staged_flag    = decode (error_data, NULL, ''N'', ''E'') ');
8105   l('                WHERE rowid       = H_ROWID(l_err_index); ');
8106   l('              ELSIF  p_bulk_sync_type = ''IMPORT_SYNC'' THEN ');
8107   l('                -- Insert the Error Record into HZ_DQM_SYNC_INTERFACE table ');
8108   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); ');
8109   l('              END IF; ');
8110   l('            END IF; ');
8111   l('          END LOOP; ');
8112   l('        END; ');
8113   l('      ELSIF p_operation = ''U'' THEN ');
8114   l('        BEGIN ');
8115   l('          log (''Updating Data in HZ_STAGED_CONTACTS...'',FALSE); ');
8116   l('          FORALL I in l_st..l_en SAVE EXCEPTIONS ');
8117   l('            UPDATE HZ_STAGED_CONTACTS SET ');
8118   l('              concat_col = concat_col');
8119   l('             ,status_flag = H_STATUS(I)'); --Propagating Bug 4299785 fix to sync modifications
8120 
8121   FOR I IN 1..255 LOOP
8122     IF l_forall_list(I) <> 'N' THEN
8123       IF (is_first) THEN
8124         is_first := false;
8125         l('              ,TX'||I||'=decode(H_TX'||I||'(I),null,H_TX'||I||'(I),H_TX'||I||'(I)||'' '')');
8126 	  ELSE
8127         l('              ,TX'||I||'=decode(H_TX'||I||'(I),null,H_TX'||I||'(I),H_TX'||I||'(I)||'' '')');
8128 	  END IF;
8129     END IF;
8130   END LOOP;
8131   l('            WHERE ORG_CONTACT_ID=H_ORG_CONTACT_ID(I);');
8132   l('          log (''Done''); ');
8133   l('        EXCEPTION  WHEN bulk_errors THEN ');
8134   l('          l_err_count := SQL%BULK_EXCEPTIONS.COUNT; ');
8135   l('          FOR indx IN 1..l_err_count LOOP ');
8136   l('            l_err_index := SQL%BULK_EXCEPTIONS(indx).ERROR_INDEX; ');
8137   l('            l_sql_errm  := sqlerrm(-SQL%BULK_EXCEPTIONS(indx).ERROR_CODE); ');
8138   -- SCHITRAP: Bug:5357970 - Error code is a number. Oracle error for ''DUP_VAL_ON_INDEX'' is ORA-00001
8139   --l('            IF (SQL%BULK_EXCEPTIONS(indx).ERROR_CODE) = ''DUP_VAL_ON_INDEX'' THEN ');
8140   l('            IF (instr(l_sql_errm,''ORA-00001'')>0) THEN  ');
8141   l('              log (''Exception DUP_VAL_ON_INDEX occured while inserting a Contact with ORG_CONTACT_ID - ''||H_ORG_CONTACT_ID(l_err_index)); ');
8142   l('              DELETE FROM HZ_DQM_SYNC_INTERFACE WHERE ENTITY=''CONTACTS'' AND OPERATION=''U'' AND RECORD_ID=H_ORG_CONTACT_ID(l_err_index);	');
8143   l('            ELSE ');
8144   l('              IF p_bulk_sync_type = ''DQM_SYNC'' THEN ');
8145   l('                UPDATE hz_dqm_sync_interface ');
8146   l('                  SET  error_data = l_sql_errm ');
8147   l('                  ,staged_flag    = decode (error_data, NULL, ''N'', ''E'') ');
8148   l('                WHERE rowid       = H_ROWID(l_err_index); ');
8149   l('              ELSIF  p_bulk_sync_type = ''IMPORT_SYNC'' THEN ');
8150   l('                -- Insert the Error Record into HZ_DQM_SYNC_INTERFACE table ');
8151   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); ');
8152   l('              END IF; ');
8153   l('            END IF; ');
8154   l('          END LOOP; ');
8155   l('        END; ');
8156   l('      END IF;');
8157   l('');
8158   l('      IF l_last_fetch THEN');
8159   l('        -- Update HZ_STAGED_PARTIES, if corresponding child entity records ');
8160   l('        -- CONTACTS (in this case), have been inserted/updated ');
8161   l('');
8162   l('        log (''Updating D_CT column to SYNC in HZ_STAGED_PARTIES table for all related records...'',FALSE); ');
8163   l('        --Fix for bug 5048604, to update concat_col during update of denorm column ');
8164   l('        FORALL I IN H_ORG_CONTACT_ID.FIRST..H_ORG_CONTACT_ID.LAST ');
8165   l('          UPDATE HZ_STAGED_PARTIES set ');
8166   l('            D_CT = ''SYNC'' ');
8167   l('           ,CONCAT_COL = CONCAT_COL ');
8168   l('          WHERE PARTY_ID = H_C_PARTY_ID(I); ');
8169   l('        log (''Done''); ');
8170   l('');
8171   l('      -- REPURI. Bug 4884742. ');
8172   l('      -- Bulk Insert of Import Contacts into  Shadow Sync Interface table ');
8173   l('      -- if Shadow Staging has already run and completed successfully ');
8174   l('      IF ((p_bulk_sync_type = ''IMPORT_SYNC'') AND ');
8175   l('          (HZ_DQM_SYNC.is_shadow_staging_complete)) THEN ');
8176   l('        BEGIN ');
8177   l('           -- REPURI. Bug 4968126. ');
8178   l('           -- Using the Merge instead of Insert statement ');
8179   l('           -- so that duplicate records dont get inserted. ');
8180   l('          log (''Merging data into HZ_DQM_SH_SYNC_INTERFACE...'',FALSE); ');
8181   l('          FORALL I in l_st..l_en  ');
8182   l('            MERGE INTO hz_dqm_sh_sync_interface S ');
8183   l('              USING ( ');
8184   l('                SELECT ');
8185   l('                   H_C_PARTY_ID(I)      AS party_id ');
8186   l('                  ,H_ORG_CONTACT_ID(I)  AS record_id ');
8187   l('                FROM dual ) T ');
8188   l('              ON (S.entity        = ''CONTACTS'' AND ');
8189   l('                  S.party_id      = T.party_id   AND ');
8190   l('                  S.record_id     = T.record_id  AND ');
8191   l('                  S.staged_flag   <> ''E'') ');
8192   l('              WHEN NOT MATCHED THEN ');
8193   l('              INSERT ( ');
8194   l('                PARTY_ID, ');
8195   l('                RECORD_ID, ');
8196   l('                PARTY_SITE_ID, ');
8197   l('                ORG_CONTACT_ID, ');
8198   l('                ENTITY, ');
8199   l('                OPERATION, ');
8200   l('                STAGED_FLAG, ');
8201   l('                REALTIME_SYNC_FLAG, ');
8202   l('                CREATED_BY, ');
8203   l('                CREATION_DATE, ');
8204   l('                LAST_UPDATE_LOGIN, ');
8205   l('                LAST_UPDATE_DATE, ');
8206   l('                LAST_UPDATED_BY, ');
8207   l('                SYNC_INTERFACE_NUM ');
8208   l('              ) VALUES ( ');
8209   l('                H_C_PARTY_ID(I), ');
8210   l('                H_ORG_CONTACT_ID(I), ');
8211   l('                NULL, ');
8212   l('                NULL, ');
8213   l('                ''CONTACTS'', ');
8214   l('                p_operation, ');
8215   l('                ''N'', ');
8216   l('                ''N'', ');
8217   l('                hz_utility_pub.created_by, ');
8218   l('                hz_utility_pub.creation_date, ');
8219   l('                hz_utility_pub.last_update_login, ');
8220   l('                hz_utility_pub.last_update_date, ');
8221   l('                hz_utility_pub.user_id, ');
8222   l('                HZ_DQM_SH_SYNC_INTERFACE_S.nextval ');
8223   l('            ); ');
8224   l('        log (''Done''); ');
8225   l('        EXCEPTION WHEN OTHERS THEN ');
8226   l('              log (''Exception occured while inserting data into HZ_DQM_SH_SYNC_INTERFACE Table'');   ');
8227   l('              log (''Eror Message is - ''|| sqlerrm);   ');
8228   l('        END; ');
8229   l('      END IF; ');
8230   l('');
8231   l('        FND_CONCURRENT.AF_Commit;');
8232   l('        EXIT;');
8233   l('      END IF;');
8234   l('');
8235   l('      FND_CONCURRENT.AF_Commit;');
8236   l('');
8237   l('    END LOOP;');
8238   l('    log (''End Synchronizing Contacts''); ');
8239   l('  END;');
8240 
8241 END;
8242 
8243 PROCEDURE generate_contact_query_proc IS
8244  cur_col_num NUMBER := 1;
8245 
8246  TYPE coltab IS TABLE OF VARCHAR2(2000) INDEX BY BINARY_INTEGER;
8247 
8248  l_select coltab;
8249  FIRST BOOLEAN := FALSE;
8250 
8251  l_forall_list coltab;
8252  l_custom_list coltab;
8253  l_mincol_list coltab;
8254  l_min_colnum NUMBER;
8255  idx NUMBER :=1;
8256  is_first boolean := true;
8257 
8258  -- VJN Introduced for conditional word replacements
8259  l_cond_attrib_list coltab ;
8260  l_idx number ;
8261  l_attr_name     varchar2(2000); --Bug No: 4279469
8262  l_pp_attr_name  varchar2(2000); --Bug No: 4279469
8263  l_oc_attr_name  varchar2(2000); --Bug No: 4279469
8264 BEGIN
8265   l('');
8266   l('  PROCEDURE insert_stage_contacts IS ');
8267   l('    l_limit NUMBER := ' || g_batch_size || ';');
8268   l('    l_last_fetch BOOLEAN := FALSE;');
8269   l('    l_denorm VARCHAR2(2000);');
8270   l('    l_st number; ');
8271   l('    l_en number; ');
8272   FOR ATTRS IN (SELECT a.ATTRIBUTE_ID,
8273                        a.ATTRIBUTE_NAME,
8274                        a.SOURCE_TABLE,
8275                        a.CUSTOM_ATTRIBUTE_PROCEDURE,
8276                        f.PROCEDURE_NAME,
8277                        f.STAGED_ATTRIBUTE_COLUMN,
8278                        to_number(substrb(STAGED_ATTRIBUTE_COLUMN, 3)) COLNUM,
8279 		       nvl(lkp.tag,'C') column_data_type
8280                 FROM HZ_TRANS_ATTRIBUTES_VL a, HZ_TRANS_FUNCTIONS_VL f,FND_LOOKUP_VALUES_VL lkp --Bug No: 4279469
8281                 WHERE ENTITY_NAME = 'CONTACTS'
8282                 AND nvl(f.ACTIVE_FLAG,'Y') = 'Y'
8283                 AND f.ATTRIBUTE_ID = a.ATTRIBUTE_ID
8284 		AND lkp.LOOKUP_TYPE='CONTACT_LOGICAL_ATTRIB_LIST'
8285                 AND lkp.LOOKUP_CODE =  a.ATTRIBUTE_NAME
8286                 ORDER BY COLNUM) LOOP
8287     IF cur_col_num<ATTRS.COLNUM THEN
8288       FOR I in cur_col_num..ATTRS.COLNUM-1 LOOP
8289         l_mincol_list(I) := 'N';
8290         l_forall_list(I) := 'N';
8291         l_custom_list(I) := 'N';
8292       END LOOP;
8293     END IF;
8294     cur_col_num:=ATTRS.COLNUM+1;
8295     IF has_trx_context(ATTRS.PROCEDURE_NAME) THEN
8296         l_forall_list(ATTRS.COLNUM) := ATTRS.PROCEDURE_NAME || '(H_TX'||ATTRS.COLNUM||'(I),NULL, ''' || ATTRS.ATTRIBUTE_NAME || ''',''CONTACTS'',''STAGE'')';
8297     ELSE
8298         l_forall_list(ATTRS.COLNUM) := ATTRS.PROCEDURE_NAME || '(H_TX'||ATTRS.COLNUM||'(I),NULL, ''' || ATTRS.ATTRIBUTE_NAME || ''',''CONTACTS'')';
8299     END IF;
8300 
8301     SELECT min(to_number(substrb(STAGED_ATTRIBUTE_COLUMN, 3))) INTO l_min_colnum
8302     FROM HZ_TRANS_ATTRIBUTES_VL a, HZ_TRANS_FUNCTIONS_VL f
8303     WHERE ENTITY_NAME = 'CONTACTS'
8304     AND nvl(f.ACTIVE_FLAG,'Y') = 'Y'
8305     AND f.ATTRIBUTE_ID = a.ATTRIBUTE_ID
8306     AND a.ATTRIBUTE_NAME=ATTRS.ATTRIBUTE_NAME;
8307 
8308     IF ATTRS.colnum>l_min_colnum THEN
8309       l_mincol_list(ATTRS.COLNUM) := 'N';
8310       IF has_trx_context(ATTRS.PROCEDURE_NAME) THEN
8311         l_forall_list(ATTRS.COLNUM) := ATTRS.PROCEDURE_NAME || '(H_TX'||l_min_colnum||'(I),NULL, ''' || ATTRS.ATTRIBUTE_NAME || ''',''CONTACTS'',''STAGE'')';
8312       ELSE
8313         l_forall_list(ATTRS.COLNUM) := ATTRS.PROCEDURE_NAME || '(H_TX'||l_min_colnum||'(I),NULL, ''' || ATTRS.ATTRIBUTE_NAME || ''',''CONTACTS'')';
8314       END IF;
8315 
8316     ELSE
8317       l_mincol_list(ATTRS.COLNUM) := 'Y';
8318     END IF;
8319 
8320     IF ATTRS.CUSTOM_ATTRIBUTE_PROCEDURE IS NULL THEN
8321       IF l_mincol_list(ATTRS.COLNUM) = 'Y' THEN
8322 	 -----Start of Bug No: 4279469----------
8323 	 l_attr_name := ATTRS.ATTRIBUTE_NAME;
8324          IF(ATTRS.column_data_type ='D') THEN
8325 	  l_pp_attr_name := 'TO_CHAR(pp.'||l_attr_name||',''DD-MON-YYYY'') '||l_attr_name;
8326 	  l_oc_attr_name := 'TO_CHAR(oc.'||l_attr_name||',''DD-MON-YYYY'') '||l_attr_name;
8327 	  l_attr_name    := 'TO_CHAR(r.'||l_attr_name||',''DD-MON-YYYY'') '||l_attr_name;
8328          ELSE
8329 	  l_pp_attr_name := 'pp.'||l_attr_name;
8330 	  l_oc_attr_name := 'oc.'||l_attr_name;
8331           l_attr_name    := 'r.'||l_attr_name;
8332 	 END IF;
8333          -----End of Bug No: 4279469------------
8334         IF ATTRS.SOURCE_TABLE='HZ_PERSON_PROFILES' THEN
8335           l_select(idx) := l_pp_attr_name;
8336         ELSIF ATTRS.SOURCE_TABLE='HZ_ORG_CONTACTS' THEN
8337           l_select(idx) := l_oc_attr_name;
8338         ELSIF ATTRS.SOURCE_TABLE='HZ_RELATIONSHIPS' THEN
8339           l_select(idx) := l_attr_name;
8340         END IF;
8341       ELSE
8342         l_select(idx) := 'N';
8343       END IF;
8344 
8345       l_custom_list(ATTRS.COLNUM) := 'N';
8346     ELSE
8347       l_select(idx) := 'N';
8348       l_custom_list(ATTRS.COLNUM) := 'N';
8349       IF ATTRS.ATTRIBUTE_NAME = 'CONTACT_NAME' THEN
8350         IF l_mincol_list(ATTRS.COLNUM) = 'Y' THEN
8351           l_select(idx) := 'rtrim(pp.person_first_name || '' '' || pp.person_last_name)';
8352         END IF;
8353       ELSE
8354         IF l_mincol_list(ATTRS.COLNUM) = 'Y' THEN
8355           IF has_context(ATTRS.custom_attribute_procedure) THEN
8356             l_custom_list(ATTRS.COLNUM) := ATTRS.custom_attribute_procedure || '(H_ORG_CONTACT_ID(I),''CONTACTS'','''||ATTRS.ATTRIBUTE_NAME|| ''', ''STAGE'')';
8357           ELSE
8358             l_custom_list(ATTRS.COLNUM) := ATTRS.custom_attribute_procedure || '(H_ORG_CONTACT_ID(I), ''CONTACTS'','''||ATTRS.ATTRIBUTE_NAME|| ''')';
8359           END IF;
8360         END IF;
8361       END IF;
8362     END IF;
8363     idx := idx+1;
8364     -- VJN ADDED CODE FOR TRACKING CONDITION ATTRIBUTES AT THIS ENTITY LEVEL
8365     IF HZ_WORD_CONDITIONS_PKG.is_a_cond_attrib( ATTRS.attribute_id)
8366      THEN
8367          l_cond_attrib_list(ATTRS.COLNUM) := ATTRS.attribute_id ;
8368     END IF;
8369   END LOOP;
8370 
8371   IF cur_col_num<=255 THEN--bug 5977628
8372     FOR I in cur_col_num..255 LOOP
8373       l_mincol_list(I) := 'N';
8374       l_forall_list(I) := 'N';
8375       l_custom_list(I) := 'N';
8376     END LOOP;
8377   END IF;
8378 
8379   l('  CURSOR contact_cur IS');
8380   l('            SELECT ');
8381   l('              /*+ ORDERED USE_NL(R OC PP)*/');
8382   l('            oc.ORG_CONTACT_ID , r.OBJECT_ID, r.PARTY_ID, g.PARTY_INDEX, r.STATUS '); -- Bug No:4299785
8383   FOR I in 1..l_select.COUNT LOOP
8384     IF l_select(I) <> 'N' THEN
8385       l('                  ,' || l_select(I));
8386     END IF;
8387   END LOOP;
8388   l('           FROM HZ_DQM_STAGE_GT g, HZ_RELATIONSHIPS r,');
8389   l('           HZ_ORG_CONTACTS oc, HZ_PERSON_PROFILES pp');
8390   l('           WHERE oc.party_relationship_id =  r.relationship_id ');
8391   l('           AND r.object_id = g.party_id ');
8392   l('           AND r.subject_id = pp.party_id ');
8393   l('           AND r.SUBJECT_TABLE_NAME = ''HZ_PARTIES''');
8394   l('           AND r.OBJECT_TABLE_NAME = ''HZ_PARTIES''');
8395   l('           AND DIRECTIONAL_FLAG= ''F'' ');
8396   l('           AND pp.effective_end_date is NULL ');
8397   l('           AND (oc.status is null OR oc.status = ''A'' or oc.status = ''I'')');
8398   l('           AND (r.status is null OR r.status = ''A'' or r.status = ''I'');');
8399   l('');
8400   l('  BEGIN');
8401   l('    OPEN contact_cur;');
8402   l('    LOOP');
8403   l('      FETCH contact_cur BULK COLLECT INTO');
8404   l('        H_ORG_CONTACT_ID');
8405   l('        ,H_C_PARTY_ID');
8406   l('        ,H_R_PARTY_ID');
8407   l('        ,H_PARTY_INDEX');
8408   l('        ,H_STATUS'); --Bug No: 4299785
8409 
8410   FOR I IN 1..255 LOOP
8411     IF l_forall_list(I) <> 'N' AND l_mincol_list(I) = 'Y' AND
8412        l_custom_list(I) = 'N' THEN
8413       l('         ,H_TX'||I);
8414     END IF;
8415   END LOOP;
8416   l('      LIMIT l_limit;');
8417   l('');
8418   l('    IF contact_cur%NOTFOUND THEN');
8419   l('      l_last_fetch:=TRUE;');
8420   l('    END IF;');
8421 
8422   l('    IF H_C_PARTY_ID.COUNT=0 AND l_last_fetch THEN');
8423   l('      EXIT;');
8424   l('    END IF;');
8425 
8426   l('    FOR I in H_C_PARTY_ID.FIRST..H_C_PARTY_ID.LAST LOOP');
8427 
8428 
8429   -- VJN INTRODUCED CODE FOR GENERATING THE POPULATION
8430   -- OF THE GLOBAL CONDITION RECORD
8431   l_idx := l_cond_attrib_list.FIRST ;
8432   IF l_idx IS NOT NULL
8433   THEN
8434     l('----------- SETTING GLOBAL CONDITION RECORD AT THE CONTACT LEVEL ---------');
8435   END IF ;
8436 
8437 
8438   WHILE l_cond_attrib_list.EXISTS(l_idx)
8439   LOOP
8440 
8441       l('     HZ_WORD_CONDITIONS_PKG.set_gbl_condition_rec ('||l_cond_attrib_list(l_idx)||','||'H_TX'||l_idx||'(I));');
8442       l_idx := l_idx+1;
8443   END LOOP;
8444 
8445   l('');
8446 
8447   FOR I IN 1..255 LOOP
8448     IF l_forall_list(I) <> 'N' THEN
8449       IF l_custom_list(I) <> 'N' AND l_mincol_list(I) = 'Y' THEN
8450         l('         H_TX'||I||'(I):='||l_custom_list(I)||';');
8451       END IF;
8452     END IF;
8453   END LOOP;
8454   FOR I IN 1..255 LOOP
8455     IF l_forall_list(I) <> 'N' THEN
8456       IF l_mincol_list(I) <> 'Y' THEN
8457         l('         H_TX'||I||'(I):='||l_forall_list(I)||';');
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||'(I):='||l_forall_list(I)||';');
8465       END IF;
8466     END IF;
8467   END LOOP;
8468 
8469   FIRST := TRUE;
8470   FOR ATTRS IN (SELECT a.ATTRIBUTE_ID,
8471                        a.ATTRIBUTE_NAME,
8472                        a.SOURCE_TABLE,
8473                        a.CUSTOM_ATTRIBUTE_PROCEDURE,
8474                        f.PROCEDURE_NAME,
8475                        f.STAGED_ATTRIBUTE_COLUMN,
8476                        to_number(substrb(STAGED_ATTRIBUTE_COLUMN, 3)) COLNUM
8477                 FROM HZ_TRANS_ATTRIBUTES_VL a, HZ_TRANS_FUNCTIONS_VL f
8478                 WHERE ENTITY_NAME = 'CONTACTS'
8479                 AND nvl(f.ACTIVE_FLAG,'Y') = 'Y'
8480                 AND f.ATTRIBUTE_ID = a.ATTRIBUTE_ID
8481                 AND nvl(a.DENORM_FLAG,'N') = 'Y') LOOP
8482      IF FIRST THEN
8483      -- Fix for bug 4872997
8484      -- Wrapping the 'l_denorm' portion of code into a begin-excpetion block
8485      -- and setting the denorm value to 'SYNC' if sqlcode-6502 error occurs
8486        l('      BEGIN ');
8487        l('        l_denorm := H_TX'||ATTRS.COLNUM||'(I)');
8488        FIRST := FALSE;
8489      ELSE
8490        l('                  ||'' '' ||  H_TX'||ATTRS.COLNUM||'(I)');
8491      END IF;
8492   END LOOP;
8493   IF NOT FIRST THEN
8494     l('             ;');
8495     l('        IF H_CT_DEN(H_PARTY_INDEX(I)) = ''SYNC'' THEN');
8496     l('          NULL;');
8497     l('        ELSIF lengthb(H_CT_DEN(H_PARTY_INDEX(I)))+lengthb(l_denorm)<2000 THEN');
8498     l('          IF H_CT_DEN(H_PARTY_INDEX(I)) IS NULL OR instrb(H_CT_DEN(H_PARTY_INDEX(I)),l_denorm)= 0 THEN');
8499     l('            H_CT_DEN(H_PARTY_INDEX(I)) := H_CT_DEN(H_PARTY_INDEX(I)) || '' '' || l_denorm;');
8500     l('          END IF;');
8501     l('        ELSE');
8502     l('          H_CT_DEN(H_PARTY_INDEX(I)) := ''SYNC'';');
8503     l('        END IF;');
8504     l('      EXCEPTION WHEN OTHERS THEN ');
8505     l('        IF SQLCODE=-6502 THEN');
8506     l('          H_CT_DEN(H_PARTY_INDEX(I)) := ''SYNC'';');
8507     l('        END IF; ');
8508     l('      END; ');
8509 
8510   END IF;
8511 
8512   l('    END LOOP;');
8513   l('      l_st :=  1;  ');
8514   l('      l_en :=  H_C_PARTY_ID.COUNT; ');
8515   l('      LOOP ');
8516   l('          BEGIN  ');
8517   l('             FORALL I in l_st..l_en');
8518   l('             INSERT INTO HZ_STAGED_CONTACTS (');
8519   l('	            ORG_CONTACT_ID');
8520   l('	            ,PARTY_ID');
8521   l('                ,STATUS_FLAG '); --Bug No: 4299785
8522 
8523   FOR I IN 1..255 LOOP
8524     IF l_forall_list(I) <> 'N' THEN
8525       l('                , TX'||I);
8526     END IF;
8527   END LOOP;
8528   l('             ) VALUES (');
8529   l('             H_ORG_CONTACT_ID(I)');
8530   l('             ,H_C_PARTY_ID(I)');
8531   l('             ,H_STATUS(I)'); --Bug No: 4299785
8532 
8533   FOR I IN 1..255 LOOP
8534     IF l_forall_list(I) <> 'N' THEN
8535       l('             , decode(H_TX'||I||'(I),null,H_TX'||I||'(I),H_TX'||I||'(I)||'' '')');
8536     END IF;
8537   END LOOP;
8538   l('          );');
8539   l('        EXIT; ');
8540   l('        EXCEPTION  WHEN OTHERS THEN ');
8541   l('            l_st:= l_st+SQL%ROWCOUNT+1;');
8542   l('        END; ');
8543   l('      END LOOP; ');
8544   l('      FORALL I in H_C_PARTY_ID.FIRST..H_C_PARTY_ID.LAST ');
8545   l('        INSERT INTO HZ_DQM_STAGE_GT(PARTY_ID,OWNER_ID,ORG_CONTACT_ID,PARTY_INDEX) ');
8546   l('           SELECT H_C_PARTY_ID(I), H_R_PARTY_ID(I), H_ORG_CONTACT_ID(I), H_PARTY_INDEX(I)');
8547   l('           FROM DUAL WHERE H_R_PARTY_ID(I) IS NOT NULL;');
8548   l('      IF l_last_fetch THEN');
8549   l('        EXIT;');
8550   l('      END IF;');
8551   l('    END LOOP;');
8552   l('     CLOSE contact_cur;');
8553   l('  END;');
8554 
8555   l('');
8556   l('  PROCEDURE sync_single_contact (');
8557   l('    p_org_contact_id NUMBER,');
8558   l('    p_operation VARCHAR2) IS');
8559   l('');
8560   l('  l_tryins BOOLEAN;');
8561   l('  l_tryupd BOOLEAN;');
8562   l('   BEGIN');
8563   l('     SELECT oc.ORG_CONTACT_ID, d.PARTY_ID, r.STATUS '); --Bug No: 4299785
8564   FOR I in 1..l_select.COUNT LOOP
8565     IF l_select(I) <> 'N' THEN
8566       l('          ,' || l_select(I));
8567     END IF;
8568   END LOOP;
8569   l('      INTO H_ORG_CONTACT_ID(1), H_PARTY_ID(1), H_STATUS(1)'); --Bug No: 4299785
8570   FOR I IN 1..255 LOOP
8571     IF l_forall_list(I) <> 'N' AND l_mincol_list(I) = 'Y' AND
8572        l_custom_list(I) = 'N' THEN
8573       l('         , H_TX'||I||'(1)');
8574     END IF;
8575   END LOOP;
8576 
8577   l('     FROM HZ_ORG_CONTACTS oc, HZ_DQM_SYNC_INTERFACE d, ');
8578   l('          HZ_RELATIONSHIPS r, HZ_PERSON_PROFILES pp');
8579   l('     WHERE d.ENTITY = ''CONTACTS'' ');
8580   l('     AND oc.org_contact_id = p_org_contact_id');
8581   l('     AND oc.org_contact_id = d.RECORD_ID');
8582   l('     AND oc.party_relationship_id =  r.relationship_id ');
8583   l('     AND r.subject_id = pp.party_id ');
8584   l('     AND r.SUBJECT_TABLE_NAME = ''HZ_PARTIES''');
8585   l('     AND r.OBJECT_TABLE_NAME = ''HZ_PARTIES''');
8586   l('     AND DIRECTIONAL_FLAG= ''F'' ');
8587   l('     AND pp.effective_end_date is NULL ');
8588   l('     AND (oc.status is null OR oc.status = ''A'' or oc.status = ''I'')');
8589   l('     AND (r.status is null OR r.status = ''A'' or r.status = ''I'')');
8590   l('     AND ROWNUM=1;');
8591 
8592   -- VJN INTRODUCED CODE FOR GENERATING THE POPULATION
8593   -- OF THE GLOBAL CONDITION RECORD
8594 
8595   l_idx := l_cond_attrib_list.FIRST ;
8596   IF l_idx IS NOT NULL
8597   THEN
8598     l('----------- SETTING GLOBAL CONDITION RECORD AT THE CONTACT LEVEL ---------');
8599   END IF ;
8600 
8601 
8602   WHILE l_cond_attrib_list.EXISTS(l_idx)
8603   LOOP
8604 
8605       l('     HZ_WORD_CONDITIONS_PKG.set_gbl_condition_rec ('||l_cond_attrib_list(l_idx)||','||'H_TX'||l_idx||'(1));');
8606       l_idx := l_idx+1;
8607   END LOOP;
8608   FOR I IN 1..255 LOOP
8609     IF l_forall_list(I) <> 'N' THEN
8610       IF l_custom_list(I) <> 'N' AND l_mincol_list(I) = 'Y' THEN
8611         l('    H_TX'||I||'(1):='||replace(l_custom_list(I),'(I)','(1)')||';');
8612       END IF;
8613     END IF;
8614   END LOOP;
8615   FOR I IN 1..255 LOOP
8616     IF l_forall_list(I) <> 'N' THEN
8617       IF l_mincol_list(I) <> 'Y' THEN
8618         l('    H_TX'||I||'(1):='||replace(l_forall_list(I),'(I)','(1)')||';');
8619       END IF;
8620     END IF;
8621   END LOOP;
8622   FOR I IN 1..255 LOOP
8623     IF l_forall_list(I) <> 'N' THEN
8624       IF l_mincol_list(I) = 'Y' THEN
8625         l('    H_TX'||I||'(1):='||replace(l_forall_list(I),'(I)','(1)')||';');
8626       END IF;
8627     END IF;
8628   END LOOP;
8629 
8630   l('   l_tryins := FALSE;');
8631   l('   l_tryupd := FALSE;');
8632   l('   IF p_operation=''C'' THEN');
8633   l('     l_tryins:=TRUE;');
8634   l('   ELSE ');
8635   l('     l_tryupd:=TRUE;');
8636   l('   END IF;');
8637   l('   WHILE (l_tryins OR l_tryupd) LOOP');
8638   l('     IF l_tryins THEN');
8639   l('       BEGIN');
8640   l('         l_tryins:=FALSE;');
8641   l('         INSERT INTO HZ_STAGED_CONTACTS (');
8642   l('           ORG_CONTACT_ID');
8643   l('           ,PARTY_ID');
8644   l('           ,STATUS_FLAG '); --Bug No: 4299785
8645 
8646   FOR I IN 1..255 LOOP
8647     IF l_forall_list(I) <> 'N' THEN
8648       l('              , TX'||I);
8649     END IF;
8650   END LOOP;
8651   l('           ) VALUES (');
8652   l('            H_ORG_CONTACT_ID(1)');
8653   l('            , H_PARTY_ID(1)');
8654   l('            , H_STATUS(1)'); --Bug No: 4299785
8655 
8656   FOR I IN 1..255 LOOP
8657     IF l_forall_list(I) <> 'N' THEN
8658       l('             , decode(H_TX'||I||'(1),null,H_TX'||I||'(1),H_TX'||I||'(1)||'' '')');
8659     END IF;
8660   END LOOP;
8661   l('         );');
8662   l('       EXCEPTION');
8663   l('         WHEN DUP_VAL_ON_INDEX THEN');
8664   l('           IF p_operation=''C'' THEN');
8665   l('             l_tryupd:=TRUE;');
8666   l('           END IF;');
8667   l('       END;');
8668   l('     END IF;');
8669   l('     IF l_tryupd THEN');
8670   l('       BEGIN');
8671   l('         l_tryupd:=FALSE;');
8672   l('         UPDATE HZ_STAGED_CONTACTS SET ');
8673   l('            concat_col = concat_col');
8674   l('           ,status_flag = H_STATUS(1)'); --Bug No: 4299785
8675 
8676   FOR I IN 1..255 LOOP
8677     IF l_forall_list(I) <> 'N' THEN
8678       	IF (is_first) THEN
8679              is_first := false;
8680              l('            ,TX'||I||'=decode(H_TX'||I||'(1),null,H_TX'||I||'(1),H_TX'||I||'(1)||'' '')');
8681 	ELSE
8682              l('            ,TX'||I||'=decode(H_TX'||I||'(1),null,H_TX'||I||'(1),H_TX'||I||'(1)||'' '')');
8683 	END IF;
8684     END IF;
8685   END LOOP;
8686   l('         WHERE ORG_CONTACT_ID=H_ORG_CONTACT_ID(1);');
8687   l('         IF SQL%ROWCOUNT=0 AND p_operation=''U'' THEN');
8688   l('           l_tryins := TRUE;');
8689   l('         END IF;');
8690   l('       EXCEPTION ');
8691   l('         WHEN NO_DATA_FOUND THEN');
8692   l('           IF p_operation=''U'' THEN');
8693   l('             l_tryins := TRUE;');
8694   l('           END IF;');
8695   l('       END;');
8696   l('     END IF;');
8697   l('   END LOOP;');
8698   l('   --Fix for bug 5048604, to update concat_col during update of denorm column ');
8699   l('   UPDATE HZ_STAGED_PARTIES set');
8700   l('     D_CT = ''SYNC''');
8701   l('    ,CONCAT_COL = CONCAT_COL ');
8702   l('   WHERE PARTY_ID = H_PARTY_ID(1);');
8703   l('  END;');
8704 
8705   -- VJN Introduced for SYNC. This is the online version, which would be used to
8706   -- directly insert into the staging tables from SYNC.
8707   is_first := true ;
8708   l('');
8709   l('  PROCEDURE sync_single_contact_online (');
8710   l('    p_org_contact_id   NUMBER,');
8711   l('    p_operation        VARCHAR2) IS');
8712   l('');
8713   l('    l_tryins BOOLEAN;');
8714   l('    l_tryupd BOOLEAN;');
8715   l('    l_party_id NUMBER; ');
8716   l('    l_sql_err_message VARCHAR2(2000); ');
8717   l('');
8718   l('  BEGIN');
8719   l('');
8720   l('    l_party_id := -1; ');
8721   l('');
8722   l('    SELECT r.object_id INTO l_party_id ');
8723   l('    FROM HZ_ORG_CONTACTS oc, HZ_RELATIONSHIPS r ');
8724   l('    WHERE oc.org_contact_id         = p_org_contact_id ');
8725   l('    AND   oc.party_relationship_id  =  r.relationship_id ');
8726   l('    AND   r.SUBJECT_TABLE_NAME      = ''HZ_PARTIES'' ');
8727   l('    AND   r.OBJECT_TABLE_NAME       = ''HZ_PARTIES'' ');
8728   l('    AND   subject_type              = ''PERSON'' ');
8729   l('    AND   DIRECTIONAL_FLAG          = ''F'' ');
8730   l('    AND   (oc.status is null OR oc.status = ''A'' or oc.status = ''I'') ');
8731   l('    AND   (r.status is null OR r.status = ''A'' or r.status = ''I'') ; ');
8732   l('');
8733   l('    SELECT oc.ORG_CONTACT_ID, l_party_id, r.status '); --Bug No: 4299785
8734   FOR I in 1..l_select.COUNT LOOP
8735     IF l_select(I) <> 'N' THEN
8736       l('          ,' || l_select(I));
8737     END IF;
8738   END LOOP;
8739   l('    INTO H_ORG_CONTACT_ID(1), H_PARTY_ID(1), H_STATUS(1)'); --Bug No: 4299785
8740   FOR I IN 1..255 LOOP
8741     IF l_forall_list(I) <> 'N' AND l_mincol_list(I) = 'Y' AND
8742        l_custom_list(I) = 'N' THEN
8743       l('        ,H_TX'||I||'(1)');
8744     END IF;
8745   END LOOP;
8746 
8747   l('    FROM HZ_ORG_CONTACTS oc, ');
8748   l('         HZ_RELATIONSHIPS r, HZ_PERSON_PROFILES pp');
8749   l('    WHERE ');
8750   l('          oc.org_contact_id         = p_org_contact_id');
8751   l('     AND  oc.party_relationship_id  = r.relationship_id ');
8752   l('     AND  r.subject_id              = pp.party_id ');
8753   l('     AND  r.SUBJECT_TABLE_NAME      = ''HZ_PARTIES''');
8754   l('     AND  r.OBJECT_TABLE_NAME       = ''HZ_PARTIES''');
8755   l('     AND  DIRECTIONAL_FLAG          = ''F'' ');
8756   l('     AND  pp.effective_end_date is NULL ');
8757   l('     AND  (oc.status is null OR oc.status = ''A'' or oc.status = ''I'')');
8758   l('     AND  (r.status is null OR r.status = ''A'' or r.status = ''I'')');
8759   l('     AND  ROWNUM=1;');
8760   l('');
8761   -- VJN INTRODUCED CODE FOR GENERATING THE POPULATION
8762   -- OF THE GLOBAL CONDITION RECORD
8763 
8764   l_idx := l_cond_attrib_list.FIRST ;
8765   IF l_idx IS NOT NULL
8766   THEN
8767     l('    ---- SETTING GLOBAL CONDITION RECORD AT THE CONTACT LEVEL ----');
8768   END IF ;
8769 
8770   WHILE l_cond_attrib_list.EXISTS(l_idx)
8771   LOOP
8772     l('    HZ_WORD_CONDITIONS_PKG.set_gbl_condition_rec ('||l_cond_attrib_list(l_idx)||','||'H_TX'||l_idx||'(1));');
8773     l_idx := l_idx+1;
8774   END LOOP;
8775   FOR I IN 1..255 LOOP
8776     IF l_forall_list(I) <> 'N' THEN
8777       IF l_custom_list(I) <> 'N' AND l_mincol_list(I) = 'Y' THEN
8778         l('    H_TX'||I||'(1):='||replace(l_custom_list(I),'(I)','(1)')||';');
8779       END IF;
8780     END IF;
8781   END LOOP;
8782   FOR I IN 1..255 LOOP
8783     IF l_forall_list(I) <> 'N' THEN
8784       IF l_mincol_list(I) <> 'Y' THEN
8785         l('    H_TX'||I||'(1):='||replace(l_forall_list(I),'(I)','(1)')||';');
8786       END IF;
8787     END IF;
8788   END LOOP;
8789   FOR I IN 1..255 LOOP
8790     IF l_forall_list(I) <> 'N' THEN
8791       IF l_mincol_list(I) = 'Y' THEN
8792         l('    H_TX'||I||'(1):='||replace(l_forall_list(I),'(I)','(1)')||';');
8793       END IF;
8794     END IF;
8795   END LOOP;
8796 
8797   l('');
8798   l('    l_tryins := FALSE;');
8799   l('    l_tryupd := FALSE;');
8800   l('');
8801   l('    IF p_operation=''C'' THEN');
8802   l('      l_tryins:=TRUE;');
8803   l('    ELSE ');
8804   l('      l_tryupd:=TRUE;');
8805   l('    END IF;');
8806   l('');
8807   l('    WHILE (l_tryins OR l_tryupd) LOOP');
8808   l('      IF l_tryins THEN');
8809   l('        BEGIN');
8810   l('          l_tryins:=FALSE;');
8811   l('          INSERT INTO HZ_STAGED_CONTACTS (');
8812   l('             ORG_CONTACT_ID');
8813   l('            ,PARTY_ID');
8814   l('            ,STATUS_FLAG'); --Bug No: 4299785
8815 
8816   FOR I IN 1..255 LOOP
8817     IF l_forall_list(I) <> 'N' THEN
8818       l('            ,TX'||I);
8819     END IF;
8820   END LOOP;
8821   l('          ) VALUES (');
8822   l('             H_ORG_CONTACT_ID(1)');
8823   l('            ,H_PARTY_ID(1)');
8824   l('            ,H_STATUS(1)');--Bug No: 4299785
8825 
8826   FOR I IN 1..255 LOOP
8827     IF l_forall_list(I) <> 'N' THEN
8828       l('            ,decode(H_TX'||I||'(1),null,H_TX'||I||'(1),H_TX'||I||'(1)||'' '')');
8829     END IF;
8830   END LOOP;
8831   l('          );');
8832   l('        EXCEPTION');
8833   l('          WHEN DUP_VAL_ON_INDEX THEN');
8834   l('            IF p_operation=''C'' THEN');
8835   l('              l_tryupd:=TRUE;');
8836   l('            END IF;');
8837   l('        END;');
8838   l('      END IF;');
8839   l('');
8840   l('      IF l_tryupd THEN');
8841   l('        BEGIN');
8842   l('          l_tryupd:=FALSE;');
8843   l('          UPDATE HZ_STAGED_CONTACTS SET ');
8844   l('             concat_col = concat_col');
8845   l('            ,status_flag = H_STATUS(1) ');--Bug No: 4299785
8846 
8847   FOR I IN 1..255 LOOP
8848     IF l_forall_list(I) <> 'N' THEN
8849       	IF (is_first) THEN
8850              is_first := false;
8851              l('            ,TX'||I||'=decode(H_TX'||I||'(1),null,H_TX'||I||'(1),H_TX'||I||'(1)||'' '')');
8852 	ELSE
8853              l('            ,TX'||I||'=decode(H_TX'||I||'(1),null,H_TX'||I||'(1),H_TX'||I||'(1)||'' '')');
8854 	END IF;
8855     END IF;
8856   END LOOP;
8857   l('          WHERE ORG_CONTACT_ID=H_ORG_CONTACT_ID(1);');
8858   l('          IF SQL%ROWCOUNT=0 AND p_operation=''U'' THEN');
8859   l('            l_tryins := TRUE;');
8860   l('          END IF;');
8861   l('        EXCEPTION ');
8862   l('          WHEN NO_DATA_FOUND THEN');
8863   l('            IF p_operation=''U'' THEN');
8864   l('              l_tryins := TRUE;');
8865   l('            END IF;');
8866   l('        END;');
8867   l('      END IF;');
8868   l('    END LOOP;');
8869   l('');
8870   l('    --Fix for bug 5048604, to update concat_col during update of denorm column ');
8871   l('    UPDATE HZ_STAGED_PARTIES set');
8872   l('      D_CT = ''SYNC''');
8873   l('     ,CONCAT_COL = CONCAT_COL ');
8874   l('    WHERE PARTY_ID = H_PARTY_ID(1);');
8875   l('');
8876   l('      -- REPURI. Bug 4884742. If shadow staging is completely successfully ');
8877   l('      -- insert a record into hz_dqm_sh_sync_interface table for each record ');
8878   l('    IF (HZ_DQM_SYNC.is_shadow_staging_complete) THEN ');
8879   l('      BEGIN ');
8880   l('        HZ_DQM_SYNC.insert_sh_interface_rec(l_party_id,p_org_contact_id,null,null,''CONTACTS'',p_operation); ');
8881   l('      EXCEPTION WHEN OTHERS THEN ');
8882   l('        NULL; ');
8883   l('      END; ');
8884   l('    END IF; ');
8885   l('');
8886   -- Fix for Bug 4862121.
8887   -- Added the Exception handling at this context, for the procedure.
8888   l('  EXCEPTION WHEN OTHERS THEN ');
8889   l('    -- FAILOVER : REPORT RECORD TO HZ_DQM_SYNC_INTERFACE ');
8890   l('    -- FOR ONLINE FLOWS ');
8891   l('    l_sql_err_message := SQLERRM; ');
8892   l('    insert_dqm_sync_error_rec(l_party_id, p_org_contact_id, NULL, NULL, ''CONTACTS'', p_operation, ''E'', ''Y'', l_sql_err_message); ');
8893   l('  END;');
8894 
8895 END;
8896 
8897 
8898 -- REPURI. Proccedure to generate the code (into HZ_STAGE_MAP_TRANSFORM)
8899 -- for OPEN_BULK_IMP_SYNC_CPT_CUR query procedure. Bug 4884735.
8900 
8901 
8902 PROCEDURE gen_bulk_imp_sync_cpt_query IS
8903 
8904  cur_col_num NUMBER := 1;
8905 
8906  TYPE coltab IS TABLE OF VARCHAR2(2000) INDEX BY BINARY_INTEGER;
8907 
8908  l_select coltab;
8909  FIRST BOOLEAN := FALSE;
8910 
8911  l_forall_list coltab;
8912  l_custom_list coltab;
8913  l_mincol_list coltab;
8914  l_min_colnum NUMBER;
8915  idx NUMBER :=1;
8916  is_first boolean := true;
8917 
8918  -- VJN Introduced for conditional word replacements
8919  l_cond_attrib_list coltab ;
8920  l_idx number ;
8921 
8922 BEGIN
8923 
8924   l('');
8925   l('  PROCEDURE open_bulk_imp_sync_cpt_cur ( ');
8926   l('    p_batch_id             IN      NUMBER, ');
8927   l('    p_batch_mode_flag      IN      VARCHAR2, ');
8928   l('    p_from_osr             IN      VARCHAR2, ');
8929   l('    p_to_osr               IN      VARCHAR2, ');
8930   l('    p_os                   IN      VARCHAR2, ');
8931   l('    p_operation            IN      VARCHAR2, ');
8932   l('    x_sync_cpt_cur         IN OUT  HZ_DQM_SYNC.SyncCurTyp) IS ');
8933   l('  BEGIN');
8934 
8935   FOR ATTRS IN (SELECT a.ATTRIBUTE_ID,
8936                        a.ATTRIBUTE_NAME,
8937                        a.SOURCE_TABLE,
8938                        a.CUSTOM_ATTRIBUTE_PROCEDURE,
8939                        f.PROCEDURE_NAME,
8940                        f.STAGED_ATTRIBUTE_COLUMN,
8941                        to_number(substrb(STAGED_ATTRIBUTE_COLUMN, 3)) COLNUM
8942                 FROM HZ_TRANS_ATTRIBUTES_VL a, HZ_TRANS_FUNCTIONS_VL f
8943                 WHERE ENTITY_NAME = 'CONTACT_POINTS'
8944                 AND nvl(f.ACTIVE_FLAG,'Y') = 'Y'
8945                 AND f.ATTRIBUTE_ID = a.ATTRIBUTE_ID
8946                 ORDER BY COLNUM) LOOP
8947     IF cur_col_num<ATTRS.COLNUM THEN
8948       FOR I in cur_col_num..ATTRS.COLNUM-1 LOOP
8949         l_mincol_list(I) := 'N';
8950         l_forall_list(I) := 'N';
8951       END LOOP;
8952     END IF;
8953     cur_col_num:=ATTRS.COLNUM+1;
8954     IF has_trx_context(ATTRS.PROCEDURE_NAME) THEN
8955       l_forall_list(ATTRS.COLNUM) := ATTRS.PROCEDURE_NAME || '(H_TX'||ATTRS.COLNUM||'(I),NULL, ''' || ATTRS.ATTRIBUTE_NAME || ''',''CONTACT_POINTS'',''STAGE'')';
8956     ELSE
8957       l_forall_list(ATTRS.COLNUM) := ATTRS.PROCEDURE_NAME || '(H_TX'||ATTRS.COLNUM||'(I),NULL, ''' || ATTRS.ATTRIBUTE_NAME || ''',''CONTACT_POINTS'')';
8958     END IF;
8959 
8960     SELECT min(to_number(substrb(STAGED_ATTRIBUTE_COLUMN, 3))) INTO l_min_colnum
8961     FROM HZ_TRANS_ATTRIBUTES_VL a, HZ_TRANS_FUNCTIONS_VL f
8962     WHERE ENTITY_NAME = 'CONTACT_POINTS'
8963     AND nvl(f.ACTIVE_FLAG,'Y') = 'Y'
8964     AND f.ATTRIBUTE_ID = a.ATTRIBUTE_ID
8965     AND a.ATTRIBUTE_NAME=ATTRS.ATTRIBUTE_NAME;
8966 
8967     IF ATTRS.colnum>l_min_colnum THEN
8968       l_mincol_list(ATTRS.COLNUM) := 'N';
8969       IF has_trx_context(ATTRS.PROCEDURE_NAME) THEN
8970         l_forall_list(ATTRS.COLNUM) := ATTRS.PROCEDURE_NAME || '(H_TX'||l_min_colnum||'(I),NULL, ''' || ATTRS.ATTRIBUTE_NAME || ''',''CONTACT_POINTS'',''STAGE'')';
8971       ELSE
8972         l_forall_list(ATTRS.COLNUM) := ATTRS.PROCEDURE_NAME || '(H_TX'||l_min_colnum||'(I),NULL, ''' || ATTRS.ATTRIBUTE_NAME || ''',''CONTACT_POINTS'')';
8973       END IF;
8974 
8975     ELSE
8976       l_mincol_list(ATTRS.COLNUM) := 'Y';
8977     END IF;
8978 
8979     IF ATTRS.CUSTOM_ATTRIBUTE_PROCEDURE IS NULL THEN
8980       IF l_mincol_list(ATTRS.COLNUM) = 'Y' THEN
8981         l_select(idx) := 'cp.'||ATTRS.ATTRIBUTE_NAME;
8982       ELSE
8983         l_select(idx) := 'N';
8984       END IF;
8985 
8986       l_custom_list(ATTRS.COLNUM) := 'N';
8987     ELSE
8988       l_select(idx) := 'N';
8989       l_custom_list(ATTRS.COLNUM) := 'N';
8990       IF ATTRS.ATTRIBUTE_NAME = 'FLEX_FORMAT_PHONE_NUMBER' THEN
8991         IF l_mincol_list(ATTRS.COLNUM) = 'Y' THEN
8992           l_select(idx) := 'translate(phone_number,''0123456789ABCDEFGHIJKLMNOPQRSTUV'||
8993 'WXYZabcdefghijklmnopqrstuvwxyz!"#$%&()''''*+,-./:;<=>?@[\]^'||
8994 '_`{|}~ '',''0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ'') || '' '' || ' ||
8995                            'translate(phone_area_code||'' '' || phone_number,''0123456789ABCDEFGHIJKLMNOPQRSTUV'||
8996 'WXYZabcdefghijklmnopqrstuvwxyz!"#$%&()''''*+,-./:;<=>?@[\]^'||
8997 '_`{|}~ '',''0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ'') || '' '' || '||
8998                            ' translate(phone_country_code|| '' '' || phone_area_code||'' '' || phone_number,''0123456789ABCDEFGHIJKLMNOPQRSTUV'||
8999 'WXYZabcdefghijklmnopqrstuvwxyz!"#$%&()''''*+,-./:;<=>?@[\]^'||
9000 '_`{|}~ '',''0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ'')';
9001         END IF;
9002       ELSIF ATTRS.ATTRIBUTE_NAME = 'RAW_PHONE_NUMBER' THEN
9003         IF l_mincol_list(ATTRS.COLNUM) = 'Y' THEN
9004           l_select(idx) := 'translate(phone_country_code|| '' '' || phone_area_code||'' '' || phone_number,''0123456789ABCDEFGHIJKLMNOPQRSTUV'||
9005 'WXYZabcdefghijklmnopqrstuvwxyz!"#$%&()''''*+,-./:;<=>?@[\]^_'||
9006 '`{|}~ '',''0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ'')';
9007 
9008         END IF;
9009       ELSE
9010         IF l_mincol_list(ATTRS.COLNUM) = 'Y' THEN
9011           IF has_context(ATTRS.custom_attribute_procedure) THEN
9012             l_custom_list(ATTRS.COLNUM) := ATTRS.custom_attribute_procedure || '(H_CONTACT_POINT_ID(I),''CONTACT_POINTS'','''||ATTRS.ATTRIBUTE_NAME|| ''', ''STAGE'')';
9013           ELSE
9014             l_custom_list(ATTRS.COLNUM) := ATTRS.custom_attribute_procedure || '(H_CONTACT_POINT_ID(I), ''CONTACT_POINTS'','''||ATTRS.ATTRIBUTE_NAME|| ''')';
9015           END IF;
9016         END IF;
9017       END IF;
9018     END IF;
9019     idx := idx+1;
9020 
9021     -- VJN ADDED CODE FOR TRACKING CONDITION ATTRIBUTES AT THIS ENTITY LEVEL
9022     IF HZ_WORD_CONDITIONS_PKG.is_a_cond_attrib( ATTRS.attribute_id)
9023      THEN
9024          l_cond_attrib_list(ATTRS.COLNUM) := ATTRS.attribute_id ;
9025     END IF;
9026 
9027   END LOOP;
9028 
9029   IF cur_col_num<=255 THEN--bug 5977628
9030     FOR I in cur_col_num..255 LOOP
9031       l_mincol_list(I) := 'N';
9032       l_forall_list(I) := 'N';
9033       l_custom_list(I) := 'N';
9034     END LOOP;
9035   END IF;
9036 
9037   l('    OPEN x_sync_cpt_cur FOR ' );
9038   l('      SELECT ');
9039   l('         /*+ ORDERED USE_NL(cp) */ ');
9040   l('         cp.CONTACT_POINT_ID ');
9041   l('        ,cps.party_id ');
9042   l('        ,decode (cp.owner_table_name, ''HZ_PARTY_SITES'', cp.owner_table_id, NULL) party_site_id ');
9043   l('        ,NULL ');
9044   l('        ,cp.CONTACT_POINT_TYPE ');
9045   l('        ,cp.STATUS '); -- Propagating Bug 4299785 fix to sync modifications
9046   l('        ,cp.ROWID ');
9047 
9048   FOR I in 1..l_select.COUNT LOOP
9049     IF l_select(I) <> 'N' THEN
9050       l('        ,' || l_select(I));
9051     END IF;
9052   END LOOP;
9053 
9054   l('      FROM hz_contact_points cp, hz_imp_contactpts_sg cps, hz_imp_batch_details bd ');
9055   l('      WHERE cp.request_id         = bd.main_conc_req_id ');
9056   l('      AND   bd.batch_id           = cps.batch_id ');
9057   l('      AND   cp.contact_point_id   = cps.contact_point_id ');
9058   l('      AND   cps.batch_id          = p_batch_id ');
9059   l('      AND   cps.party_orig_system = p_os ');
9060   l('      AND   cps.batch_mode_flag   = p_batch_mode_flag ');
9061   l('      AND   cps.action_flag       = p_operation');
9062   l('      AND   cps.party_orig_system_reference BETWEEN p_from_osr AND p_to_osr ');
9063   l('      AND   (cp.status IS NULL OR cp.status = ''A'' OR cp.status = ''I''); ');
9064   l('');
9065   l('    END open_bulk_imp_sync_cpt_cur; ');
9066   l('');
9067 
9068 END gen_bulk_imp_sync_cpt_query;
9069 
9070 
9071 -- REPURI. Proccedure to generate the code (into HZ_STAGE_MAP_TRANSFORM)
9072 -- for OPEN_SYNC_CPT_CURSOR and SYNC_ALL_CONTACT_POINTS Procedures.
9073 
9074 PROCEDURE generate_sync_cpt_query_proc IS
9075 
9076  cur_col_num NUMBER := 1;
9077 
9078  TYPE coltab IS TABLE OF VARCHAR2(2000) INDEX BY BINARY_INTEGER;
9079 
9080  l_select coltab;
9081  FIRST BOOLEAN := FALSE;
9082 
9083  l_forall_list coltab;
9084  l_custom_list coltab;
9085  l_mincol_list coltab;
9086  l_min_colnum NUMBER;
9087  idx NUMBER :=1;
9088  is_first boolean := true;
9089 
9090  -- VJN Introduced for conditional word replacements
9091  l_cond_attrib_list coltab ;
9092  l_idx number ;
9093 
9094 BEGIN
9095 
9096   l('');
9097   l('  PROCEDURE open_sync_cpt_cursor ( ');
9098   l('    p_operation            IN      VARCHAR2,');
9099   l('    p_from_rec             IN      VARCHAR2,');
9100   l('    p_to_rec               IN      VARCHAR2,');
9101   l('    x_sync_cpt_cur         IN OUT  HZ_DQM_SYNC.SyncCurTyp) IS ');
9102   l('  BEGIN');
9103 
9104   FOR ATTRS IN (SELECT a.ATTRIBUTE_ID,
9105                        a.ATTRIBUTE_NAME,
9106                        a.SOURCE_TABLE,
9107                        a.CUSTOM_ATTRIBUTE_PROCEDURE,
9108                        f.PROCEDURE_NAME,
9109                        f.STAGED_ATTRIBUTE_COLUMN,
9110                        to_number(substrb(STAGED_ATTRIBUTE_COLUMN, 3)) COLNUM
9111                 FROM HZ_TRANS_ATTRIBUTES_VL a, HZ_TRANS_FUNCTIONS_VL f
9112                 WHERE ENTITY_NAME = 'CONTACT_POINTS'
9113                 AND nvl(f.ACTIVE_FLAG,'Y') = 'Y'
9114                 AND f.ATTRIBUTE_ID = a.ATTRIBUTE_ID
9115                 ORDER BY COLNUM) LOOP
9116     IF cur_col_num<ATTRS.COLNUM THEN
9117       FOR I in cur_col_num..ATTRS.COLNUM-1 LOOP
9118         l_mincol_list(I) := 'N';
9119         l_forall_list(I) := 'N';
9120       END LOOP;
9121     END IF;
9122     cur_col_num:=ATTRS.COLNUM+1;
9123     IF has_trx_context(ATTRS.PROCEDURE_NAME) THEN
9124       l_forall_list(ATTRS.COLNUM) := ATTRS.PROCEDURE_NAME || '(H_TX'||ATTRS.COLNUM||'(I),NULL, ''' || ATTRS.ATTRIBUTE_NAME || ''',''CONTACT_POINTS'',''STAGE'')';
9125     ELSE
9126       l_forall_list(ATTRS.COLNUM) := ATTRS.PROCEDURE_NAME || '(H_TX'||ATTRS.COLNUM||'(I),NULL, ''' || ATTRS.ATTRIBUTE_NAME || ''',''CONTACT_POINTS'')';
9127     END IF;
9128 
9129     SELECT min(to_number(substrb(STAGED_ATTRIBUTE_COLUMN, 3))) INTO l_min_colnum
9130     FROM HZ_TRANS_ATTRIBUTES_VL a, HZ_TRANS_FUNCTIONS_VL f
9131     WHERE ENTITY_NAME = 'CONTACT_POINTS'
9132     AND nvl(f.ACTIVE_FLAG,'Y') = 'Y'
9133     AND f.ATTRIBUTE_ID = a.ATTRIBUTE_ID
9134     AND a.ATTRIBUTE_NAME=ATTRS.ATTRIBUTE_NAME;
9135 
9136     IF ATTRS.colnum>l_min_colnum THEN
9137       l_mincol_list(ATTRS.COLNUM) := 'N';
9138       IF has_trx_context(ATTRS.PROCEDURE_NAME) THEN
9139         l_forall_list(ATTRS.COLNUM) := ATTRS.PROCEDURE_NAME || '(H_TX'||l_min_colnum||'(I),NULL, ''' || ATTRS.ATTRIBUTE_NAME || ''',''CONTACT_POINTS'',''STAGE'')';
9140       ELSE
9141         l_forall_list(ATTRS.COLNUM) := ATTRS.PROCEDURE_NAME || '(H_TX'||l_min_colnum||'(I),NULL, ''' || ATTRS.ATTRIBUTE_NAME || ''',''CONTACT_POINTS'')';
9142       END IF;
9143 
9144     ELSE
9145       l_mincol_list(ATTRS.COLNUM) := 'Y';
9146     END IF;
9147 
9148     IF ATTRS.CUSTOM_ATTRIBUTE_PROCEDURE IS NULL THEN
9149       IF l_mincol_list(ATTRS.COLNUM) = 'Y' THEN
9150         l_select(idx) := 'cp.'||ATTRS.ATTRIBUTE_NAME;
9151       ELSE
9152         l_select(idx) := 'N';
9153       END IF;
9154 
9155       l_custom_list(ATTRS.COLNUM) := 'N';
9156     ELSE
9157       l_select(idx) := 'N';
9158       l_custom_list(ATTRS.COLNUM) := 'N';
9159       IF ATTRS.ATTRIBUTE_NAME = 'FLEX_FORMAT_PHONE_NUMBER' THEN
9160         IF l_mincol_list(ATTRS.COLNUM) = 'Y' THEN
9161           l_select(idx) := 'translate(phone_number,''0123456789ABCDEFGHIJKLMNOPQRSTUV'||
9162 'WXYZabcdefghijklmnopqrstuvwxyz!"#$%&()''''*+,-./:;<=>?@[\]^'||
9163 '_`{|}~ '',''0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ'') || '' '' || ' ||
9164                            'translate(phone_area_code||'' '' || phone_number,''0123456789ABCDEFGHIJKLMNOPQRSTUV'||
9165 'WXYZabcdefghijklmnopqrstuvwxyz!"#$%&()''''*+,-./:;<=>?@[\]^'||
9166 '_`{|}~ '',''0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ'') || '' '' || '||
9167                            ' translate(phone_country_code|| '' '' || phone_area_code||'' '' || phone_number,''0123456789ABCDEFGHIJKLMNOPQRSTUV'||
9168 'WXYZabcdefghijklmnopqrstuvwxyz!"#$%&()''''*+,-./:;<=>?@[\]^'||
9169 '_`{|}~ '',''0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ'')';
9170         END IF;
9171       ELSIF ATTRS.ATTRIBUTE_NAME = 'RAW_PHONE_NUMBER' THEN
9172         IF l_mincol_list(ATTRS.COLNUM) = 'Y' THEN
9173           l_select(idx) := 'translate(phone_country_code|| '' '' || phone_area_code||'' '' || phone_number,''0123456789ABCDEFGHIJKLMNOPQRSTUV'||
9174 'WXYZabcdefghijklmnopqrstuvwxyz!"#$%&()''''*+,-./:;<=>?@[\]^_'||
9175 '`{|}~ '',''0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ'')';
9176 
9177         END IF;
9178       ELSE
9179         IF l_mincol_list(ATTRS.COLNUM) = 'Y' THEN
9180           IF has_context(ATTRS.custom_attribute_procedure) THEN
9181             l_custom_list(ATTRS.COLNUM) := ATTRS.custom_attribute_procedure || '(H_CONTACT_POINT_ID(I),''CONTACT_POINTS'','''||ATTRS.ATTRIBUTE_NAME|| ''', ''STAGE'')';
9182           ELSE
9183             l_custom_list(ATTRS.COLNUM) := ATTRS.custom_attribute_procedure || '(H_CONTACT_POINT_ID(I), ''CONTACT_POINTS'','''||ATTRS.ATTRIBUTE_NAME|| ''')';
9184           END IF;
9185         END IF;
9186       END IF;
9187     END IF;
9188     idx := idx+1;
9189 
9190     -- VJN ADDED CODE FOR TRACKING CONDITION ATTRIBUTES AT THIS ENTITY LEVEL
9191     IF HZ_WORD_CONDITIONS_PKG.is_a_cond_attrib( ATTRS.attribute_id)
9192      THEN
9193          l_cond_attrib_list(ATTRS.COLNUM) := ATTRS.attribute_id ;
9194     END IF;
9195 
9196   END LOOP;
9197 
9198   IF cur_col_num<=255 THEN--bug 5977628
9199     FOR I in cur_col_num..255 LOOP
9200       l_mincol_list(I) := 'N';
9201       l_forall_list(I) := 'N';
9202       l_custom_list(I) := 'N';
9203     END LOOP;
9204   END IF;
9205 
9206   l('    OPEN x_sync_cpt_cur FOR ' );
9207   l('      SELECT ');
9208   l('         /*+ ORDERED USE_NL(cp) */ ');
9209   l('         cp.CONTACT_POINT_ID ');
9210   l('        ,dsi.party_id ');
9211   l('        ,dsi.party_site_id ');
9212   l('        ,dsi.org_contact_id ');
9213   l('        ,cp.CONTACT_POINT_TYPE ');
9214   l('        ,cp.STATUS '); -- Propagating Bug 4299785 fix to sync modifications
9215   l('        ,dsi.ROWID ');
9216 
9217   FOR I in 1..l_select.COUNT LOOP
9218     IF l_select(I) <> 'N' THEN
9219       l('        ,' || l_select(I));
9220     END IF;
9221   END LOOP;
9222 
9223   l('      FROM HZ_DQM_SYNC_INTERFACE dsi,HZ_CONTACT_POINTS cp');
9224   l('      WHERE dsi.record_id            = cp.contact_point_id ');
9225   l('      AND   dsi.entity               = ''CONTACT_POINTS'' ');
9226   l('      AND   dsi.operation            = p_operation ');
9227   l('      AND   dsi.staged_flag          = ''N'' ');
9228   l('      AND   dsi.sync_interface_num  >= p_from_rec ');
9229   l('      AND   dsi.sync_interface_num  <= p_to_rec ');
9230   l('      AND (cp.status is null OR cp.status = ''A'' or cp.status = ''I''); ');
9231   l('    END; ');
9232 
9233   l('');
9234   l('  PROCEDURE sync_all_contact_points ( ');
9235   l('    p_operation               IN VARCHAR2, ');
9236   l('    p_bulk_sync_type          IN VARCHAR2, ');
9237   l('    p_sync_all_cpt_cur        IN HZ_DQM_SYNC.SyncCurTyp) IS ');
9238   l('');
9239   l('    l_limit         NUMBER  := ' || g_batch_size || ';');
9240   l('    l_last_fetch    BOOLEAN := FALSE;');
9241   l('    l_sql_errm      VARCHAR2(2000); ');
9242   l('    l_st            NUMBER; ');
9243   l('    l_en            NUMBER; ');
9244   l('    l_err_index     NUMBER; ');
9245   l('    l_err_count     NUMBER; ');
9246   l('');
9247   l('    bulk_errors     EXCEPTION; ');
9248   l('    PRAGMA EXCEPTION_INIT(bulk_errors, -24381); ');
9249   l('');
9250   l('  BEGIN');
9251   l('    log (''Begin Synchronizing Contact Points''); ');
9252   l('    LOOP');
9253   l('      log (''Bulk Collecting Contact Points Data...'',FALSE); ');
9254   l('      FETCH p_sync_all_cpt_cur BULK COLLECT INTO');
9255   l('         H_CONTACT_POINT_ID');
9256   l('        ,H_CPT_PARTY_ID');
9257   l('        ,H_CPT_PARTY_SITE_ID');
9258   l('        ,H_CPT_ORG_CONTACT_ID');
9259   l('        ,H_CONTACT_POINT_TYPE');
9260   l('        ,H_STATUS'); -- Propagating Bug 4299785 fix to sync modifications
9261   l('        ,H_ROWID ');
9262 
9263   FOR I IN 1..255 LOOP
9264     IF l_forall_list(I) <> 'N' AND l_mincol_list(I) = 'Y' AND
9265        l_custom_list(I) = 'N' THEN
9266       l('         ,H_TX'||I);
9267     END IF;
9268   END LOOP;
9269 
9270   l('      LIMIT l_limit;');
9271   l('      log (''Done''); ');
9272   l('');
9273   l('      IF p_sync_all_cpt_cur%NOTFOUND THEN');
9274   l('        l_last_fetch:=TRUE;');
9275   l('      END IF;');
9276   l('');
9277   l('      IF H_CONTACT_POINT_ID.COUNT=0 AND l_last_fetch THEN');
9278   l('        EXIT;');
9279   l('      END IF;');
9280   l('');
9281   l('      log (''Synchronizing for ''||H_CONTACT_POINT_ID.COUNT||'' Contact Points''); ');
9282   l('      log (''Populating Contact Points Transformation Functions into Arrays...'',FALSE); ');
9283   l('');
9284   l('      FOR I in H_CONTACT_POINT_ID.FIRST..H_CONTACT_POINT_ID.LAST LOOP');
9285 
9286   -- VJN INTRODUCED CODE FOR GENERATING THE POPULATION
9287   -- OF THE GLOBAL CONDITION RECORD
9288 
9289   l_idx := l_cond_attrib_list.FIRST ;
9290   IF l_idx IS NOT NULL
9291   THEN
9292     l('        ---- SETTING GLOBAL CONDITION RECORD AT THE CONTACT POINT LEVEL ----');
9293   END IF ;
9294 
9295   l('');
9296 
9297   WHILE l_cond_attrib_list.EXISTS(l_idx)
9298   LOOP
9299     l('        HZ_WORD_CONDITIONS_PKG.set_gbl_condition_rec ('||l_cond_attrib_list(l_idx)||','||'H_TX'||l_idx||'(I));');
9300     l_idx := l_idx+1;
9301   END LOOP;
9302   FOR I IN 1..255 LOOP
9303     IF l_forall_list(I) <> 'N' THEN
9304       IF l_custom_list(I) <> 'N' AND l_mincol_list(I) = 'Y' THEN
9305         l('        H_TX'||I||'(I):='||l_custom_list(I)||';');
9306       END IF;
9307     END IF;
9308   END LOOP;
9309   FOR I IN 1..255 LOOP
9310     IF l_forall_list(I) <> 'N' THEN
9311       IF l_mincol_list(I) <> 'Y' THEN
9312         l('        H_TX'||I||'(I):='||l_forall_list(I)||';');
9313       END IF;
9314     END IF;
9315   END LOOP;
9316   FOR I IN 1..255 LOOP
9317     IF l_forall_list(I) <> 'N' THEN
9318       IF l_mincol_list(I) = 'Y' THEN
9319         l('        H_TX'||I||'(I):='||l_forall_list(I)||';');
9320       END IF;
9321     END IF;
9322   END LOOP;
9323 
9324   l('      END LOOP;');
9325   l('      log (''Done''); ');
9326   l('');
9327   l('      l_st :=  1;  ');
9328   l('      l_en :=  H_CONTACT_POINT_ID.COUNT; ');
9329   l('');
9330   l('      IF p_operation = ''C'' THEN ');
9331   l('        BEGIN ');
9332   l('          log (''Inserting Data into HZ_STAGED_CONTACT_POINTS...'',FALSE); ');
9333   l('          FORALL I in l_st..l_en SAVE EXCEPTIONS ');
9334   l('            INSERT INTO HZ_STAGED_CONTACT_POINTS (');
9335   l('               CONTACT_POINT_ID');
9336   l('              ,PARTY_ID');
9337   l('              ,PARTY_SITE_ID');
9338   l('	           ,ORG_CONTACT_ID');
9339   l('              ,CONTACT_POINT_TYPE');
9340   l('              ,STATUS_FLAG'); --Propagating Bug 4299785 fix to sync modifications
9341 
9342   FOR I IN 1..255 LOOP
9343     IF l_forall_list(I) <> 'N' THEN
9344       l('              ,TX'||I);
9345     END IF;
9346   END LOOP;
9347 
9348   l('            ) VALUES (');
9349   l('               H_CONTACT_POINT_ID(I)');
9350   l('              ,H_CPT_PARTY_ID(I)');
9351   l('              ,H_CPT_PARTY_SITE_ID(I)');
9352   l('              ,H_CPT_ORG_CONTACT_ID(I)');
9353   l('              ,H_CONTACT_POINT_TYPE(I)');
9354   l('              ,H_STATUS(I)'); --Propagating Bug 4299785 fix to sync modifications
9355 
9356   FOR I IN 1..255 LOOP
9357     IF l_forall_list(I) <> 'N' THEN
9358       l('              ,decode(H_TX'||I||'(I),null,H_TX'||I||'(I),H_TX'||I||'(I)||'' '')');
9359     END IF;
9360   END LOOP;
9361   l('            );');
9362   l('          log (''Done''); ');
9363   l('        EXCEPTION  WHEN bulk_errors THEN ');
9364   l('          l_err_count := SQL%BULK_EXCEPTIONS.COUNT; ');
9365   l('          FOR indx IN 1..l_err_count LOOP ');
9366   l('            l_err_index := SQL%BULK_EXCEPTIONS(indx).ERROR_INDEX; ');
9367   l('            l_sql_errm  := sqlerrm(-SQL%BULK_EXCEPTIONS(indx).ERROR_CODE); ');
9368   -- SCHITRAP: Bug:5357970 - Error code is a number. Oracle error for ''DUP_VAL_ON_INDEX'' is ORA-00001
9369   --l('            IF (SQL%BULK_EXCEPTIONS(indx).ERROR_CODE) = ''DUP_VAL_ON_INDEX'' THEN ');
9370   l('            IF (instr(l_sql_errm,''ORA-00001'')>0) THEN  ');
9371   l('              log (''Exception DUP_VAL_ON_INDEX occured while inserting a Contact Point with CONTACT_POINT_ID - ''||H_CONTACT_POINT_ID(l_err_index)); ');
9372   l('              DELETE FROM HZ_DQM_SYNC_INTERFACE WHERE ENTITY=''CONTACT_POINTS'' AND OPERATION=''C'' AND RECORD_ID=H_CONTACT_POINT_ID(l_err_index);	');
9373   l('            ELSE ');
9374   l('              IF p_bulk_sync_type = ''DQM_SYNC'' THEN ');
9375   l('                UPDATE hz_dqm_sync_interface ');
9376   l('                  SET  error_data = l_sql_errm ');
9377   l('                  ,staged_flag    = decode (error_data, NULL, ''N'', ''E'') ');
9378   l('                WHERE rowid       = H_ROWID(l_err_index); ');
9379   l('              ELSIF  p_bulk_sync_type = ''IMPORT_SYNC'' THEN ');
9380   l('                -- Insert the Error Record into HZ_DQM_SYNC_INTERFACE table ');
9381   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); ');
9382   l('              END IF; ');
9383   l('            END IF; ');
9384   l('          END LOOP; ');
9385   l('        END; ');
9386   l('      ELSIF p_operation = ''U'' THEN ');
9387   l('        BEGIN ');
9388   l('          log (''Updating Data in HZ_STAGED_CONTACT_POINTS...'',FALSE); ');
9389   l('          FORALL I in l_st..l_en SAVE EXCEPTIONS ');
9390   l('            UPDATE HZ_STAGED_CONTACT_POINTS SET ');
9391   l('              concat_col = concat_col');
9392   l('             ,status_flag    = H_STATUS(I) ');--Propagating Bug 4299785 fix to sync modifications
9393 
9394   FOR I IN 1..255 LOOP
9395     IF l_forall_list(I) <> 'N' THEN
9396    	  IF (is_first) THEN
9397 	    is_first := false;
9398 	    l('              ,TX'||I||'=decode(H_TX'||I||'(I),null,H_TX'||I||'(I),H_TX'||I||'(I)||'' '')');
9399 	  ELSE
9400 	    l('              ,TX'||I||'=decode(H_TX'||I||'(I),null,H_TX'||I||'(I),H_TX'||I||'(I)||'' '')');
9401 	  END IF;
9402     END IF;
9403   END LOOP;
9404   l('            WHERE CONTACT_POINT_ID=H_CONTACT_POINT_ID(I);');
9405   l('            log (''Done''); ');
9406   l('        EXCEPTION  WHEN bulk_errors THEN ');
9407   l('          l_err_count := SQL%BULK_EXCEPTIONS.COUNT; ');
9408   l('          FOR indx IN 1..l_err_count LOOP ');
9409   l('            l_err_index := SQL%BULK_EXCEPTIONS(indx).ERROR_INDEX; ');
9410   l('            l_sql_errm  := sqlerrm(-SQL%BULK_EXCEPTIONS(indx).ERROR_CODE); ');
9411   -- SCHITRAP: Bug:5357970 - Error code is a number. Oracle error for ''DUP_VAL_ON_INDEX'' is ORA-00001
9412   --l('            IF (SQL%BULK_EXCEPTIONS(indx).ERROR_CODE) = ''DUP_VAL_ON_INDEX'' THEN ');
9413   l('            IF (instr(l_sql_errm,''ORA-00001'')>0) THEN  ');
9414   l('              log (''Exception DUP_VAL_ON_INDEX occured while inserting a Contact Point with CONTACT_POINT_ID - ''||H_CONTACT_POINT_ID(l_err_index)); ');
9415   l('              DELETE FROM HZ_DQM_SYNC_INTERFACE WHERE ENTITY=''CONTACT_POINTS'' AND OPERATION=''U'' AND RECORD_ID=H_CONTACT_POINT_ID(l_err_index);	');
9416   l('            ELSE ');
9417   l('              IF p_bulk_sync_type = ''DQM_SYNC'' THEN ');
9418   l('                UPDATE hz_dqm_sync_interface ');
9419   l('                  SET  error_data = l_sql_errm ');
9420   l('                  ,staged_flag    = decode (error_data, NULL, ''N'', ''E'') ');
9421   l('                WHERE rowid       = H_ROWID(l_err_index); ');
9422   l('              ELSIF  p_bulk_sync_type = ''IMPORT_SYNC'' THEN ');
9423   l('                -- Insert the Error Record into HZ_DQM_SYNC_INTERFACE table ');
9424   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); ');
9425   l('              END IF; ');
9426   l('            END IF; ');
9427   l('          END LOOP; ');
9428   l('        END; ');
9429   l('      END IF;');
9430   l('');
9431   l('      IF l_last_fetch THEN');
9432   l('        -- Update HZ_STAGED_PARTIES, if corresponding child entity records ');
9433   l('        -- CONTACT_POINTS (in this case), have been inserted/updated ');
9434   l('');
9435  l('        log (''Updating D_CPT column to SYNC in HZ_STAGED_PARTIES table for all related records...'',FALSE); ');
9436   l('        --Fix for bug 5048604, to update concat_col during update of denorm column ');
9437   l('        FORALL I IN H_CONTACT_POINT_ID.FIRST..H_CONTACT_POINT_ID.LAST ');
9438   l('          UPDATE HZ_STAGED_PARTIES set ');
9439   l('            D_CPT = ''SYNC'' ');
9440   l('           ,CONCAT_COL = CONCAT_COL ');
9441   l('          WHERE PARTY_ID = H_CPT_PARTY_ID(I); ');
9442   l('        log (''Done''); ');
9443   l('');
9444   l('      -- REPURI. Bug 4884742. ');
9445   l('      -- Bulk Insert the Import of Contact Points into  Shadow Sync Interface table ');
9446   l('      -- if Shadow Staging has already run and completed successfully ');
9447   l('      IF ((p_bulk_sync_type = ''IMPORT_SYNC'') AND ');
9448   l('          (HZ_DQM_SYNC.is_shadow_staging_complete)) THEN ');
9449   l('        BEGIN ');
9450   l('           -- REPURI. Bug 4968126. ');
9451   l('           -- Using the Merge instead of Insert statement ');
9452   l('           -- so that duplicate records dont get inserted. ');
9453   l('          log (''Merging data into HZ_DQM_SH_SYNC_INTERFACE...'',FALSE); ');
9454   l('          FORALL I in l_st..l_en  ');
9455   l('            MERGE INTO hz_dqm_sh_sync_interface S ');
9456   l('              USING ( ');
9457   l('                SELECT ');
9458   l('                   H_CPT_PARTY_ID(I)       AS party_id ');
9459   l('                  ,H_CONTACT_POINT_ID(I)   AS record_id ');
9460   l('                  ,H_CPT_PARTY_SITE_ID(I)  AS party_site_id ');
9461   l('                  ,H_CPT_ORG_CONTACT_ID(I) AS org_contact_id ');
9462   l('                FROM dual ) T ');
9463   l('              ON (S.entity                   = ''CONTACT_POINTS''           AND ');
9464   l('                  S.party_id                 = T.party_id                 AND ');
9465   l('                  S.record_id                = T.record_id                AND ');
9466   l('                  NVL(S.party_site_id, -99)  = NVL(T.party_site_id, -99)  AND ');
9467   l('                  NVL(S.org_contact_id, -99) = NVL(T.org_contact_id, -99) AND ');
9468   l('                  S.staged_flag              <> ''E'') ');
9469   l('              WHEN NOT MATCHED THEN ');
9470   l('              INSERT ( ');
9471   l('                PARTY_ID, ');
9472   l('                RECORD_ID, ');
9473   l('                PARTY_SITE_ID, ');
9474   l('                ORG_CONTACT_ID, ');
9475   l('                ENTITY, ');
9476   l('                OPERATION, ');
9477   l('                STAGED_FLAG, ');
9478   l('                REALTIME_SYNC_FLAG, ');
9479   l('                CREATED_BY, ');
9480   l('                CREATION_DATE, ');
9481   l('                LAST_UPDATE_LOGIN, ');
9482   l('                LAST_UPDATE_DATE, ');
9483   l('                LAST_UPDATED_BY, ');
9484   l('                SYNC_INTERFACE_NUM ');
9485   l('              ) VALUES ( ');
9486   l('                H_CPT_PARTY_ID(I), ');
9487   l('                H_CONTACT_POINT_ID(I), ');
9488   l('                H_CPT_PARTY_SITE_ID(I), ');
9489   l('                H_CPT_ORG_CONTACT_ID(I), ');
9490   l('                ''CONTACT_POINTS'', ');
9491   l('                p_operation, ');
9492   l('                ''N'', ');
9493   l('                ''N'', ');
9494   l('                hz_utility_pub.created_by, ');
9495   l('                hz_utility_pub.creation_date, ');
9496   l('                hz_utility_pub.last_update_login, ');
9497   l('                hz_utility_pub.last_update_date, ');
9498   l('                hz_utility_pub.user_id, ');
9499   l('                HZ_DQM_SH_SYNC_INTERFACE_S.nextval ');
9500   l('            ); ');
9501   l('        log (''Done''); ');
9502   l('        EXCEPTION WHEN OTHERS THEN ');
9503   l('              log (''Exception occured while inserting data into HZ_DQM_SH_SYNC_INTERFACE Table'');   ');
9504   l('              log (''Eror Message is - ''|| sqlerrm);   ');
9505   l('        END; ');
9506   l('      END IF; ');
9507   l('');
9508   l('        FND_CONCURRENT.AF_Commit;');
9509   l('        EXIT;');
9510   l('      END IF;');
9511   l('');
9512   l('      FND_CONCURRENT.AF_Commit;');
9513   l('');
9514   l('    END LOOP;');
9515   l('    log (''End Synchronizing Contact Points''); ');
9516   l('  END;');
9517 
9518 END;
9519 
9520 PROCEDURE generate_contact_pt_query_proc IS
9521  cur_col_num NUMBER := 1;
9522 
9523  TYPE coltab IS TABLE OF VARCHAR2(2000) INDEX BY BINARY_INTEGER;
9524 
9525  l_select coltab;
9526  FIRST BOOLEAN := FALSE;
9527 
9528  l_forall_list coltab;
9529  l_custom_list coltab;
9530  l_mincol_list coltab;
9531  l_min_colnum NUMBER;
9532  idx NUMBER :=1;
9533  is_first boolean := true;
9534 
9535  -- VJN Introduced for conditional word replacements
9536  l_cond_attrib_list coltab ;
9537  l_idx number ;
9538  l_attr_name varchar2(2000);
9539 
9540 BEGIN
9541   l('');
9542   l('  PROCEDURE insert_stage_contact_pts IS ');
9543   l('   l_limit NUMBER := ' || g_batch_size || ';');
9544   l('   l_last_fetch BOOLEAN := FALSE;');
9545   l('   l_denorm VARCHAR2(2000);');
9546   l('   l_st number; ');
9547   l('   l_en number; ');
9548 
9549   l('');
9550 
9551   FOR ATTRS IN (SELECT a.ATTRIBUTE_ID,
9552                        a.ATTRIBUTE_NAME,
9553                        a.SOURCE_TABLE,
9554                        a.CUSTOM_ATTRIBUTE_PROCEDURE,
9555                        f.PROCEDURE_NAME,
9556                        f.STAGED_ATTRIBUTE_COLUMN,
9557                        to_number(substrb(STAGED_ATTRIBUTE_COLUMN, 3)) COLNUM,
9558 		       nvl(lkp.tag,'C') column_data_type
9559                 FROM HZ_TRANS_ATTRIBUTES_VL a, HZ_TRANS_FUNCTIONS_VL f,FND_LOOKUP_VALUES_VL lkp --Bug No: 4279469
9560                 WHERE ENTITY_NAME = 'CONTACT_POINTS'
9561                 AND nvl(f.ACTIVE_FLAG,'Y') = 'Y'
9562                 AND f.ATTRIBUTE_ID = a.ATTRIBUTE_ID
9563                 -- REPURI. Added the 2 lines here for bug 4957189, which were missed in bug 4279469 fix.
9564                 AND lkp.LOOKUP_TYPE='CONTACT_PT_LOGICAL_ATTRIB_LIST'
9565                 AND lkp.LOOKUP_CODE =  a.ATTRIBUTE_NAME
9566                 ORDER BY COLNUM) LOOP
9567     IF cur_col_num<ATTRS.COLNUM THEN
9568       FOR I in cur_col_num..ATTRS.COLNUM-1 LOOP
9569         l_mincol_list(I) := 'N';
9570         l_forall_list(I) := 'N';
9571       END LOOP;
9572     END IF;
9573     cur_col_num:=ATTRS.COLNUM+1;
9574     IF has_trx_context(ATTRS.PROCEDURE_NAME) THEN
9575       l_forall_list(ATTRS.COLNUM) := ATTRS.PROCEDURE_NAME || '(H_TX'||ATTRS.COLNUM||'(I),NULL, ''' || ATTRS.ATTRIBUTE_NAME || ''',''CONTACT_POINTS'',''STAGE'')';
9576     ELSE
9577       l_forall_list(ATTRS.COLNUM) := ATTRS.PROCEDURE_NAME || '(H_TX'||ATTRS.COLNUM||'(I),NULL, ''' || ATTRS.ATTRIBUTE_NAME || ''',''CONTACT_POINTS'')';
9578     END IF;
9579 
9580     SELECT min(to_number(substrb(STAGED_ATTRIBUTE_COLUMN, 3))) INTO l_min_colnum
9581     FROM HZ_TRANS_ATTRIBUTES_VL a, HZ_TRANS_FUNCTIONS_VL f
9582     WHERE ENTITY_NAME = 'CONTACT_POINTS'
9583     AND nvl(f.ACTIVE_FLAG,'Y') = 'Y'
9584     AND f.ATTRIBUTE_ID = a.ATTRIBUTE_ID
9585     AND a.ATTRIBUTE_NAME=ATTRS.ATTRIBUTE_NAME;
9586 
9587     IF ATTRS.colnum>l_min_colnum THEN
9588       l_mincol_list(ATTRS.COLNUM) := 'N';
9589       IF has_trx_context(ATTRS.PROCEDURE_NAME) THEN
9590         l_forall_list(ATTRS.COLNUM) := ATTRS.PROCEDURE_NAME || '(H_TX'||l_min_colnum||'(I),NULL, ''' || ATTRS.ATTRIBUTE_NAME || ''',''CONTACT_POINTS'',''STAGE'')';
9591       ELSE
9592         l_forall_list(ATTRS.COLNUM) := ATTRS.PROCEDURE_NAME || '(H_TX'||l_min_colnum||'(I),NULL, ''' || ATTRS.ATTRIBUTE_NAME || ''',''CONTACT_POINTS'')';
9593       END IF;
9594 
9595     ELSE
9596       l_mincol_list(ATTRS.COLNUM) := 'Y';
9597     END IF;
9598 
9599     IF ATTRS.CUSTOM_ATTRIBUTE_PROCEDURE IS NULL THEN
9600 	-----Start of Bug No: 4279469----------
9601 	l_attr_name := ATTRS.ATTRIBUTE_NAME;
9602         IF(ATTRS.column_data_type ='D') THEN
9603 	   l_attr_name    := 'TO_CHAR(cp.'||l_attr_name||',''DD-MON-YYYY'') '||l_attr_name;
9604         ELSE
9605           l_attr_name    := 'cp.'||l_attr_name;
9606 	END IF;
9607         -----End of Bug No: 4279469------------
9608       IF l_mincol_list(ATTRS.COLNUM) = 'Y' THEN
9609         l_select(idx) := l_attr_name;
9610       ELSE
9611         l_select(idx) := 'N';
9612       END IF;
9613 
9614       l_custom_list(ATTRS.COLNUM) := 'N';
9615     ELSE
9616       l_select(idx) := 'N';
9617       l_custom_list(ATTRS.COLNUM) := 'N';
9618       IF ATTRS.ATTRIBUTE_NAME = 'FLEX_FORMAT_PHONE_NUMBER' THEN
9619         IF l_mincol_list(ATTRS.COLNUM) = 'Y' THEN
9620           l_select(idx) := 'translate(phone_number,''0123456789ABCDEFGHIJKLMNOPQRSTUV'||
9621 'WXYZabcdefghijklmnopqrstuvwxyz!"#$%&()''''*+,-./:;<=>?@[\]^'||
9622 '_`{|}~ '',''0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ'') || '' '' || ' ||
9623                            'translate(phone_area_code||'' '' || phone_number,''0123456789ABCDEFGHIJKLMNOPQRSTUV'||
9624 'WXYZabcdefghijklmnopqrstuvwxyz!"#$%&()''''*+,-./:;<=>?@[\]^'||
9625 '_`{|}~ '',''0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ'') || '' '' || '||
9626                            ' translate(phone_country_code|| '' '' || phone_area_code||'' '' || phone_number,''0123456789ABCDEFGHIJKLMNOPQRSTUV'||
9627 'WXYZabcdefghijklmnopqrstuvwxyz!"#$%&()''''*+,-./:;<=>?@[\]^'||
9628 '_`{|}~ '',''0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ'')';
9629         END IF;
9630       ELSIF ATTRS.ATTRIBUTE_NAME = 'RAW_PHONE_NUMBER' THEN
9631         IF l_mincol_list(ATTRS.COLNUM) = 'Y' THEN
9632           l_select(idx) := 'translate(phone_country_code|| '' '' || phone_area_code||'' '' || phone_number,''0123456789ABCDEFGHIJKLMNOPQRSTUV'||
9633 'WXYZabcdefghijklmnopqrstuvwxyz!"#$%&()''''*+,-./:;<=>?@[\]^_'||
9634 '`{|}~ '',''0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ'')';
9635 
9636         END IF;
9637       ELSE
9638         IF l_mincol_list(ATTRS.COLNUM) = 'Y' THEN
9639           IF has_context(ATTRS.custom_attribute_procedure) THEN
9640             l_custom_list(ATTRS.COLNUM) := ATTRS.custom_attribute_procedure || '(H_CONTACT_POINT_ID(I),''CONTACT_POINTS'','''||ATTRS.ATTRIBUTE_NAME|| ''', ''STAGE'')';
9641           ELSE
9642             l_custom_list(ATTRS.COLNUM) := ATTRS.custom_attribute_procedure || '(H_CONTACT_POINT_ID(I), ''CONTACT_POINTS'','''||ATTRS.ATTRIBUTE_NAME|| ''')';
9643           END IF;
9644         END IF;
9645       END IF;
9646     END IF;
9647     idx := idx+1;
9648 
9649     -- VJN ADDED CODE FOR TRACKING CONDITION ATTRIBUTES AT THIS ENTITY LEVEL
9650     IF HZ_WORD_CONDITIONS_PKG.is_a_cond_attrib( ATTRS.attribute_id)
9651      THEN
9652          l_cond_attrib_list(ATTRS.COLNUM) := ATTRS.attribute_id ;
9653     END IF;
9654 
9655   END LOOP;
9656 
9657   IF cur_col_num<=255 THEN--bug 5977628
9658     FOR I in cur_col_num..255 LOOP
9659       l_mincol_list(I) := 'N';
9660       l_forall_list(I) := 'N';
9661       l_custom_list(I) := 'N';
9662     END LOOP;
9663   END IF;
9664 
9665   l('  CURSOR contact_pt_cur IS');
9666   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
9667   FOR I in 1..l_select.COUNT LOOP
9668     IF l_select(I) <> 'N' THEN
9669       l('                  ,' || l_select(I));
9670     END IF;
9671   END LOOP;
9672   l('           FROM HZ_DQM_STAGE_GT g,HZ_CONTACT_POINTS cp');
9673   l('           WHERE cp.owner_table_id  =  g.owner_id ');
9674   l('           AND cp.OWNER_TABLE_NAME = nvl(g.owner_table,''HZ_PARTIES'') ');
9675   l('           AND (cp.status is null OR cp.status = ''A'' or cp.status = ''I''); ');
9676   l('');
9677   l('  BEGIN');
9678   l('    OPEN contact_pt_cur;');
9679   l('    LOOP');
9680   l('      FETCH contact_pt_cur BULK COLLECT INTO');
9681   l('        H_CONTACT_POINT_ID');
9682   l('        ,H_CPT_PARTY_ID');
9683   l('        ,H_CPT_PARTY_SITE_ID');
9684   l('        ,H_CPT_ORG_CONTACT_ID');
9685   l('        ,H_CONTACT_POINT_TYPE');
9686   l('        ,H_PARTY_INDEX');
9687   l('        ,H_STATUS'); -- Bug No:4299785
9688 
9689   FOR I IN 1..255 LOOP
9690     IF l_forall_list(I) <> 'N' AND l_mincol_list(I) = 'Y' AND
9691        l_custom_list(I) = 'N' THEN
9692       l('         ,H_TX'||I);
9693     END IF;
9694   END LOOP;
9695   l('      LIMIT l_limit;');
9696   l('');
9697   l('    IF contact_pt_cur%NOTFOUND THEN');
9698   l('      l_last_fetch:=TRUE;');
9699   l('    END IF;');
9700 
9701   l('    IF H_CPT_PARTY_ID.COUNT=0 AND l_last_fetch THEN');
9702   l('      EXIT;');
9703   l('    END IF;');
9704 
9705   l('    FOR I in H_CPT_PARTY_ID.FIRST..H_CPT_PARTY_ID.LAST LOOP');
9706 
9707   -- VJN INTRODUCED CODE FOR GENERATING THE POPULATION
9708   -- OF THE GLOBAL CONDITION RECORD
9709 
9710   l_idx := l_cond_attrib_list.FIRST ;
9711   IF l_idx IS NOT NULL
9712   THEN
9713     l('----------- SETTING GLOBAL CONDITION RECORD AT THE CONTACT POINT LEVEL ---------');
9714   END IF ;
9715 
9716   l('');
9717 
9718 
9719   WHILE l_cond_attrib_list.EXISTS(l_idx)
9720   LOOP
9721 
9722       l('     HZ_WORD_CONDITIONS_PKG.set_gbl_condition_rec ('||l_cond_attrib_list(l_idx)||','||'H_TX'||l_idx||'(I));');
9723       l_idx := l_idx+1;
9724   END LOOP;
9725   FOR I IN 1..255 LOOP
9726     IF l_forall_list(I) <> 'N' THEN
9727       IF l_custom_list(I) <> 'N' AND l_mincol_list(I) = 'Y' THEN
9728         l('         H_TX'||I||'(I):='||l_custom_list(I)||';');
9729       END IF;
9730     END IF;
9731   END LOOP;
9732   FOR I IN 1..255 LOOP
9733     IF l_forall_list(I) <> 'N' THEN
9734       IF l_mincol_list(I) <> 'Y' THEN
9735         l('         H_TX'||I||'(I):='||l_forall_list(I)||';');
9736       END IF;
9737     END IF;
9738   END LOOP;
9739   FOR I IN 1..255 LOOP
9740     IF l_forall_list(I) <> 'N' THEN
9741       IF l_mincol_list(I) = 'Y' THEN
9742         l('         H_TX'||I||'(I):='||l_forall_list(I)||';');
9743       END IF;
9744     END IF;
9745   END LOOP;
9746   FIRST := TRUE;
9747   FOR ATTRS IN (SELECT a.ATTRIBUTE_ID,
9748                        a.ATTRIBUTE_NAME,
9749                        a.SOURCE_TABLE,
9750                        a.CUSTOM_ATTRIBUTE_PROCEDURE,
9751                        f.PROCEDURE_NAME,
9752                        f.STAGED_ATTRIBUTE_COLUMN,
9753                        to_number(substrb(STAGED_ATTRIBUTE_COLUMN, 3)) COLNUM
9754                 FROM HZ_TRANS_ATTRIBUTES_VL a, HZ_TRANS_FUNCTIONS_VL f
9755                 WHERE ENTITY_NAME = 'CONTACT_POINTS'
9756                 AND nvl(f.ACTIVE_FLAG,'Y') = 'Y'
9757                 AND f.ATTRIBUTE_ID = a.ATTRIBUTE_ID
9758                 AND nvl(a.DENORM_FLAG,'N') = 'Y') LOOP
9759      IF FIRST THEN
9760      -- Fix for bug 4872997
9761      -- Wrapping the 'l_denorm' portion of code into a begin-excpetion block
9762      -- and setting the denorm value to 'SYNC' if sqlcode-6502 error occurs
9763        l('      BEGIN ');
9764        l('        l_denorm := H_TX'||ATTRS.COLNUM||'(I)');
9765        FIRST := FALSE;
9766      ELSE
9767        l('                  || '' '' || H_TX'||ATTRS.COLNUM||'(I)');
9768      END IF;
9769   END LOOP;
9770   IF NOT FIRST THEN
9771     l('             ;');
9772     l('        IF H_CPT_DEN(H_PARTY_INDEX(I)) = ''SYNC'' THEN');
9773     l('          NULL;');
9774     l('        ELSIF lengthb(H_CPT_DEN(H_PARTY_INDEX(I)))+lengthb(l_denorm)<2000 THEN');
9775     l('          IF H_CPT_DEN(H_PARTY_INDEX(I)) IS NULL OR instrb(H_CPT_DEN(H_PARTY_INDEX(I)),l_denorm)= 0 THEN');
9776     l('            H_CPT_DEN(H_PARTY_INDEX(I)) := H_CPT_DEN(H_PARTY_INDEX(I)) || '' '' || l_denorm;');
9777     l('          END IF;');
9778     l('        ELSE');
9779     l('          H_CPT_DEN(H_PARTY_INDEX(I)) := ''SYNC'';');
9780     l('        END IF;');
9781     l('      EXCEPTION WHEN OTHERS THEN ');
9782     l('        IF SQLCODE=-6502 THEN');
9783     l('          H_CPT_DEN(H_PARTY_INDEX(I)) := ''SYNC'';');
9784     l('        END IF; ');
9785     l('      END; ');
9786   END IF;
9787 
9788   l('    END LOOP;');
9789   l('      l_st := 1;  ');
9790   l('      l_en := H_CPT_PARTY_ID.COUNT; ');
9791   l('      LOOP ');
9792   l('          BEGIN  ');
9793   l('              FORALL I in l_st..l_en');
9794   l('                INSERT INTO HZ_STAGED_CONTACT_POINTS (');
9795   l('	               CONTACT_POINT_ID');
9796   l('	               ,PARTY_ID');
9797   l('	               ,PARTY_SITE_ID');
9798   l('	               ,ORG_CONTACT_ID');
9799   l('	               ,CONTACT_POINT_TYPE');
9800   l('                  ,STATUS_FLAG'); --Bug No: 4299785
9801 
9802   FOR I IN 1..255 LOOP
9803     IF l_forall_list(I) <> 'N' THEN
9804       l('                   , TX'||I);
9805     END IF;
9806   END LOOP;
9807 
9808   l('                   ) VALUES (');
9809   l('                   H_CONTACT_POINT_ID(I)');
9810   l('                   ,H_CPT_PARTY_ID(I)');
9811   l('                   ,H_CPT_PARTY_SITE_ID(I)');
9812   l('                   ,H_CPT_ORG_CONTACT_ID(I)');
9813   l('                   ,H_CONTACT_POINT_TYPE(I)');
9814   l('                   ,H_STATUS(I)'); --Bug No: 4299785
9815 
9816   FOR I IN 1..255 LOOP
9817     IF l_forall_list(I) <> 'N' THEN
9818       l('                  , decode(H_TX'||I||'(I),null,H_TX'||I||'(I),H_TX'||I||'(I)||'' '')');
9819     END IF;
9820   END LOOP;
9821   l('          );');
9822   l('        EXIT; ');
9823   l('        EXCEPTION  WHEN OTHERS THEN ');
9824   l('            l_st:= l_st+SQL%ROWCOUNT+1;');
9825   l('        END; ');
9826   l('      END LOOP; ');
9827   l('      IF l_last_fetch THEN');
9828   l('        EXIT;');
9829   l('      END IF;');
9830   l('    END LOOP;');
9831   l('    CLOSE contact_pt_cur;');
9832   l('  END;');
9833 
9834   l('');
9835   l('  PROCEDURE sync_single_contact_point (');
9836   l('    p_contact_point_id NUMBER,');
9837   l('    p_operation VARCHAR2) IS');
9838   l('');
9839   l('  l_tryins BOOLEAN;');
9840   l('  l_tryupd BOOLEAN;');
9841   l('   BEGIN');
9842   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
9843   FOR I in 1..l_select.COUNT LOOP
9844     IF l_select(I) <> 'N' THEN
9845       l('            ,' || l_select(I));
9846     END IF;
9847   END LOOP;
9848   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
9849   FOR I IN 1..255 LOOP
9850     IF l_forall_list(I) <> 'N' AND l_mincol_list(I) = 'Y' AND
9851        l_custom_list(I) = 'N' THEN
9852       l('         , H_TX'||I||'(1)');
9853     END IF;
9854   END LOOP;
9855   l('     FROM HZ_CONTACT_POINTS cp, HZ_DQM_SYNC_INTERFACE d ');
9856   l('     WHERE  d.ENTITY = ''CONTACT_POINTS'' ');
9857   l('     AND cp.contact_point_id  =  p_contact_point_id ');
9858   l('     AND cp.contact_point_id  =  d.RECORD_ID ');
9859   l('     AND (cp.status is null OR cp.status = ''A'' or cp.status = ''I'') and rownum = 1 ; ');
9860    -- VJN INTRODUCED CODE FOR GENERATING THE POPULATION
9861   -- OF THE GLOBAL CONDITION RECORD
9862 
9863   l_idx := l_cond_attrib_list.FIRST ;
9864   IF l_idx IS NOT NULL
9865   THEN
9866     l('----------- SETTING GLOBAL CONDITION RECORD AT THE CONTACT POINT LEVEL ---------');
9867   END IF ;
9868 
9869 
9870   WHILE l_cond_attrib_list.EXISTS(l_idx)
9871   LOOP
9872 
9873       l('     HZ_WORD_CONDITIONS_PKG.set_gbl_condition_rec ('||l_cond_attrib_list(l_idx)||','||'H_TX'||l_idx||'(1));');
9874       l_idx := l_idx+1;
9875   END LOOP;
9876   FOR I IN 1..255 LOOP
9877     IF l_forall_list(I) <> 'N' THEN
9878       IF l_custom_list(I) <> 'N' AND l_mincol_list(I) = 'Y' THEN
9879         l('    H_TX'||I||'(1):='||replace(l_custom_list(I),'(I)','(1)')||';');
9880       END IF;
9881     END IF;
9882   END LOOP;
9883   FOR I IN 1..255 LOOP
9884     IF l_forall_list(I) <> 'N' THEN
9885       IF l_mincol_list(I) <> 'Y' THEN
9886         l('    H_TX'||I||'(1):='||replace(l_forall_list(I),'(I)','(1)')||';');
9887       END IF;
9888     END IF;
9889   END LOOP;
9890   FOR I IN 1..255 LOOP
9891     IF l_forall_list(I) <> 'N' THEN
9892       IF l_mincol_list(I) = 'Y' THEN
9893         l('    H_TX'||I||'(1):='||replace(l_forall_list(I),'(I)','(1)')||';');
9894       END IF;
9895     END IF;
9896   END LOOP;
9897   l('   l_tryins := FALSE;');
9898   l('   l_tryupd := FALSE;');
9899   l('   IF p_operation=''C'' THEN');
9900   l('     l_tryins:=TRUE;');
9901   l('   ELSE ');
9902   l('     l_tryupd:=TRUE;');
9903   l('   END IF;');
9904   l('   WHILE (l_tryins OR l_tryupd) LOOP');
9905   l('     IF l_tryins THEN');
9906   l('       BEGIN');
9907   l('         l_tryins:=FALSE;');
9908   l('         INSERT INTO HZ_STAGED_CONTACT_POINTS (');
9909   l('           CONTACT_POINT_ID');
9910   l('           ,PARTY_ID');
9911   l('           ,PARTY_SITE_ID');
9912   l('           ,ORG_CONTACT_ID');
9913   l('           ,CONTACT_POINT_TYPE');
9914   l('           ,STATUS_FLAG');--Bug No: 4299785
9915 
9916   FOR I IN 1..255 LOOP
9917     IF l_forall_list(I) <> 'N' THEN
9918       l('              , TX'||I);
9919     END IF;
9920   END LOOP;
9921 
9922   l('           ) VALUES (');
9923   l('             H_CONTACT_POINT_ID(1)');
9924   l('            ,H_PARTY_ID(1)');
9925   l('            ,H_PARTY_SITE_ID(1)');
9926   l('            ,H_ORG_CONTACT_ID(1)');
9927   l('            ,H_CONTACT_POINT_TYPE(1)');
9928   l('            ,H_STATUS(1)'); --Bug No: 4299785
9929 
9930   FOR I IN 1..255 LOOP
9931     IF l_forall_list(I) <> 'N' THEN
9932       l('             , decode(H_TX'||I||'(1),null,H_TX'||I||'(1),H_TX'||I||'(1)||'' '')');
9933     END IF;
9934   END LOOP;
9935 
9936   l('         );');
9937   l('       EXCEPTION');
9938   l('         WHEN DUP_VAL_ON_INDEX THEN');
9939   l('           IF p_operation=''C'' THEN');
9940   l('             l_tryupd:=TRUE;');
9941   l('           END IF;');
9942   l('       END;');
9943   l('     END IF;');
9944   l('     IF l_tryupd THEN');
9945   l('       BEGIN');
9946   l('         l_tryupd:=FALSE;');
9947   l('         UPDATE HZ_STAGED_CONTACT_POINTS SET ');
9948   l('            concat_col = concat_col');
9949   l('           ,status_flag    = H_STATUS(1) ');--Bug No: 4299785
9950 
9951   FOR I IN 1..255 LOOP
9952     IF l_forall_list(I) <> 'N' THEN
9953    	IF (is_first) THEN
9954 	      is_first := false;
9955 	      l('            ,TX'||I||'=decode(H_TX'||I||'(1),null,H_TX'||I||'(1),H_TX'||I||'(1)||'' '')');
9956 	ELSE
9957 	      l('            ,TX'||I||'=decode(H_TX'||I||'(1),null,H_TX'||I||'(1),H_TX'||I||'(1)||'' '')');
9958 	END IF;
9959     END IF;
9960   END LOOP;
9961   l('         WHERE CONTACT_POINT_ID=H_CONTACT_POINT_ID(1);');
9962   l('         IF SQL%ROWCOUNT=0 AND p_operation=''U'' THEN');
9963   l('           l_tryins := TRUE;');
9964   l('         END IF;');
9965   l('       EXCEPTION ');
9966   l('         WHEN NO_DATA_FOUND THEN');
9967   l('           IF p_operation=''U'' THEN');
9968   l('             l_tryins := TRUE;');
9969   l('           END IF;');
9970   l('       END;');
9971   l('     END IF;');
9972   l('   END LOOP;');
9973   l('   --Fix for bug 5048604, to update concat_col during update of denorm column ');
9974   l('   UPDATE HZ_STAGED_PARTIES set');
9975   l('     D_CPT = ''SYNC''');
9976   l('    ,CONCAT_COL = CONCAT_COL ');
9977   l('   WHERE PARTY_ID = H_PARTY_ID(1);');
9978   l('  END;');
9979 
9980   -- VJN Introduced for SYNC.
9981   is_first := true ;
9982   l('');
9983   l('  PROCEDURE sync_single_cpt_online (');
9984   l('    p_contact_point_id   NUMBER,');
9985   l('    p_operation          VARCHAR2) IS');
9986   l('');
9987   l('    l_tryins          BOOLEAN;');
9988   l('    l_tryupd          BOOLEAN;');
9989   l('    l_party_id        NUMBER := 0; ');
9990   l('    l_party_id1       NUMBER; ');
9991   l('    l_org_contact_id  NUMBER; ');
9992   l('    l_party_site_id   NUMBER; ');
9993   l('    l_pr_id           NUMBER; ');
9994   l('    l_num_ocs         NUMBER; ');
9995   l('    l_ot_id           NUMBER; ');
9996   l('    l_ot_table        VARCHAR2(60); ');
9997   l('    l_party_type      VARCHAR2(60); ');
9998   l('    l_sql_err_message VARCHAR2(2000); ');
9999   l('');
10000   l('  BEGIN');
10001   l('');
10002   l('    l_org_contact_id := -1; ');
10003   l('    l_party_site_id  := -1; ');
10004   l('');
10005   l('    SELECT owner_table_name,owner_table_id INTO l_ot_table, l_ot_id ');
10006   l('    FROM hz_contact_points ');
10007   l('    WHERE contact_point_id = p_contact_point_id; ');
10008   l('');
10009   l('    IF l_ot_table = ''HZ_PARTY_SITES'' THEN ');
10010   l('      SELECT p.party_id, ps.party_site_id, party_type ');
10011   l('      INTO l_party_id1, l_party_site_id, l_party_type ');
10012   l('      FROM HZ_PARTY_SITES ps, HZ_PARTIES p ');
10013   l('      WHERE party_site_id  = l_ot_id ');
10014   l('      AND   p.party_id     = ps.party_id; ');
10015   l('');
10016   l('      IF l_party_type = ''PARTY_RELATIONSHIP'' THEN ');
10017   l('        BEGIN ');
10018   l('          SELECT r.object_id, org_contact_id INTO l_party_id,l_org_contact_id ');
10019   l('          FROM HZ_ORG_CONTACTS oc, HZ_RELATIONSHIPS r ');
10020   l('          WHERE r.party_id            = l_party_id1 ');
10021   l('          AND   r.relationship_id     = oc.party_relationship_id ');
10022   l('          AND   r.directional_flag    = ''F'' ');
10023   l('          AND   r.SUBJECT_TABLE_NAME  = ''HZ_PARTIES'' ');
10024   l('          AND   r.OBJECT_TABLE_NAME   = ''HZ_PARTIES''; ');
10025   l('        EXCEPTION ');
10026   l('          WHEN NO_DATA_FOUND THEN ');
10027   l('            RETURN; ');
10028   l('        END; ');
10029   l('      ELSE ');
10030   l('        l_party_id:=l_party_id1; ');
10031   l('        l_org_contact_id:=NULL; ');
10032   l('      END IF; ');
10033   l('');
10034   l('    ELSIF l_ot_table = ''HZ_PARTIES'' THEN ');
10035   l('      l_party_site_id := NULL; ');
10036   l('      SELECT party_type INTO l_party_type ');
10037   l('      FROM hz_parties ');
10038   l('      WHERE party_id = l_ot_id; ');
10039   l('');
10040   l('      IF l_party_type <> ''PARTY_RELATIONSHIP'' THEN ');
10041   l('        l_party_id := l_ot_id; ');
10042   l('        l_org_contact_id:=NULL; ');
10043   l('      ELSE ');
10044   l('        BEGIN ');
10045   l('          SELECT r.object_id, org_contact_id INTO l_party_id,l_org_contact_id ');
10046   l('          FROM HZ_ORG_CONTACTS oc, HZ_RELATIONSHIPS r ');
10047   l('          WHERE r.party_id            = l_ot_id ');
10048   l('          AND   r.relationship_id     = oc.party_relationship_id ');
10049   l('          AND   r.directional_flag    = ''F'' ');
10050   l('          AND   r.SUBJECT_TABLE_NAME  = ''HZ_PARTIES'' ');
10051   l('          AND   r.OBJECT_TABLE_NAME   = ''HZ_PARTIES''; ');
10052   l('        EXCEPTION ');
10053   l('          WHEN NO_DATA_FOUND THEN ');
10054   l('            RETURN; ');
10055   l('        END; ');
10056   l('      END IF; ');
10057   l('    END IF; ');
10058   l('');
10059   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
10060   FOR I in 1..l_select.COUNT LOOP
10061     IF l_select(I) <> 'N' THEN
10062       l('          ,' || l_select(I));
10063     END IF;
10064   END LOOP;
10065   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
10066   FOR I IN 1..255 LOOP
10067     IF l_forall_list(I) <> 'N' AND l_mincol_list(I) = 'Y' AND
10068        l_custom_list(I) = 'N' THEN
10069       l('        ,H_TX'||I||'(1)');
10070     END IF;
10071   END LOOP;
10072   l('    FROM HZ_CONTACT_POINTS cp ');
10073   l('    WHERE ');
10074   l('          cp.contact_point_id  =  p_contact_point_id ');
10075   l('      AND (cp.status is null OR cp.status = ''A'' or cp.status = ''I'') and rownum = 1 ; ');
10076   l('');
10077 
10078    -- VJN INTRODUCED CODE FOR GENERATING THE POPULATION
10079   -- OF THE GLOBAL CONDITION RECORD
10080 
10081   l_idx := l_cond_attrib_list.FIRST ;
10082   IF l_idx IS NOT NULL
10083   THEN
10084     l('    ---- SETTING GLOBAL CONDITION RECORD AT THE CONTACT POINT LEVEL ----');
10085   END IF ;
10086 
10087 
10088   WHILE l_cond_attrib_list.EXISTS(l_idx)
10089   LOOP
10090 
10091       l('    HZ_WORD_CONDITIONS_PKG.set_gbl_condition_rec ('||l_cond_attrib_list(l_idx)||','||'H_TX'||l_idx||'(1));');
10092       l_idx := l_idx+1;
10093   END LOOP;
10094   FOR I IN 1..255 LOOP
10095     IF l_forall_list(I) <> 'N' THEN
10096       IF l_custom_list(I) <> 'N' AND l_mincol_list(I) = 'Y' THEN
10097         l('    H_TX'||I||'(1):='||replace(l_custom_list(I),'(I)','(1)')||';');
10098       END IF;
10099     END IF;
10100   END LOOP;
10101   FOR I IN 1..255 LOOP
10102     IF l_forall_list(I) <> 'N' THEN
10103       IF l_mincol_list(I) <> 'Y' THEN
10104         l('    H_TX'||I||'(1):='||replace(l_forall_list(I),'(I)','(1)')||';');
10105       END IF;
10106     END IF;
10107   END LOOP;
10108   FOR I IN 1..255 LOOP
10109     IF l_forall_list(I) <> 'N' THEN
10110       IF l_mincol_list(I) = 'Y' THEN
10111         l('    H_TX'||I||'(1):='||replace(l_forall_list(I),'(I)','(1)')||';');
10112       END IF;
10113     END IF;
10114   END LOOP;
10115   l('');
10116   l('    l_tryins := FALSE;');
10117   l('    l_tryupd := FALSE;');
10118   l('');
10119   l('    IF p_operation=''C'' THEN');
10120   l('      l_tryins:=TRUE;');
10121   l('    ELSE ');
10122   l('      l_tryupd:=TRUE;');
10123   l('    END IF;');
10124   l('');
10125   l('    WHILE (l_tryins OR l_tryupd) LOOP');
10126   l('      IF l_tryins THEN');
10127   l('        BEGIN');
10128   l('          l_tryins:=FALSE;');
10129   l('          INSERT INTO HZ_STAGED_CONTACT_POINTS (');
10130   l('             CONTACT_POINT_ID');
10131   l('            ,PARTY_ID');
10132   l('            ,PARTY_SITE_ID');
10133   l('            ,ORG_CONTACT_ID');
10134   l('            ,CONTACT_POINT_TYPE');
10135   l('            ,STATUS_FLAG'); --Bug No: 4299785
10136 
10137   FOR I IN 1..255 LOOP
10138     IF l_forall_list(I) <> 'N' THEN
10139       l('            ,TX'||I);
10140     END IF;
10141   END LOOP;
10142 
10143   l('          ) VALUES (');
10144   l('             H_CONTACT_POINT_ID(1)');
10145   l('            ,H_PARTY_ID(1)');
10146   l('            ,H_PARTY_SITE_ID(1)');
10147   l('            ,H_ORG_CONTACT_ID(1)');
10148   l('            ,H_CONTACT_POINT_TYPE(1)');
10149   l('            ,H_STATUS(1)'); --Bug No: 4299785
10150 
10151   FOR I IN 1..255 LOOP
10152     IF l_forall_list(I) <> 'N' THEN
10153       l('            ,decode(H_TX'||I||'(1),null,H_TX'||I||'(1),H_TX'||I||'(1)||'' '')');
10154     END IF;
10155   END LOOP;
10156 
10157   l('          );');
10158   l('        EXCEPTION');
10159   l('          WHEN DUP_VAL_ON_INDEX THEN');
10160   l('            IF p_operation=''C'' THEN');
10161   l('              l_tryupd:=TRUE;');
10162   l('            END IF;');
10163   l('        END;');
10164   l('      END IF;');
10165   l('');
10166   l('      IF l_tryupd THEN');
10167   l('        BEGIN');
10168   l('          l_tryupd:=FALSE;');
10169   l('          UPDATE HZ_STAGED_CONTACT_POINTS SET ');
10170   l('             concat_col = concat_col');
10171   l('            ,status_flag = H_STATUS(1) '); --Bug No: 4299785
10172 
10173   FOR I IN 1..255 LOOP
10174     IF l_forall_list(I) <> 'N' THEN
10175    	  IF (is_first) THEN
10176         is_first := false;
10177 	    l('            ,TX'||I||'=decode(H_TX'||I||'(1),null,H_TX'||I||'(1),H_TX'||I||'(1)||'' '')');
10178 	  ELSE
10179 	    l('            ,TX'||I||'=decode(H_TX'||I||'(1),null,H_TX'||I||'(1),H_TX'||I||'(1)||'' '')');
10180 	  END IF;
10181     END IF;
10182   END LOOP;
10183   l('          WHERE CONTACT_POINT_ID=H_CONTACT_POINT_ID(1);');
10184   l('          IF SQL%ROWCOUNT=0 AND p_operation=''U'' THEN');
10185   l('            l_tryins := TRUE;');
10186   l('          END IF;');
10187   l('        EXCEPTION ');
10188   l('          WHEN NO_DATA_FOUND THEN');
10189   l('            IF p_operation=''U'' THEN');
10190   l('              l_tryins := TRUE;');
10191   l('            END IF;');
10192   l('        END;');
10193   l('      END IF;');
10194   l('    END LOOP;');
10195   l('');
10196   l('    --Fix for bug 5048604, to update concat_col during update of denorm column ');
10197   l('    UPDATE HZ_STAGED_PARTIES set');
10198   l('      D_CPT = ''SYNC''');
10199   l('     ,CONCAT_COL = CONCAT_COL ');
10200   l('    WHERE PARTY_ID = H_PARTY_ID(1);');
10201   l('');
10202   l('      -- REPURI. Bug 4884742. If shadow staging is completely successfully ');
10203   l('      -- insert a record into hz_dqm_sh_sync_interface table for each record ');
10204   l('    IF (HZ_DQM_SYNC.is_shadow_staging_complete) THEN ');
10205   l('      BEGIN ');
10206   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); ');
10207   l('      EXCEPTION WHEN OTHERS THEN ');
10208   l('        NULL; ');
10209   l('      END; ');
10210   l('    END IF; ');
10211   l('');
10212   -- Fix for Bug 4862121.
10213   -- Added the Exception handling at this context, for the procedure.
10214   l('  EXCEPTION WHEN OTHERS THEN ');
10215   l('    -- FAILOVER : REPORT RECORD TO HZ_DQM_SYNC_INTERFACE ');
10216   l('    -- FOR ONLINE FLOWS ');
10217   l('    l_sql_err_message := SQLERRM; ');
10218   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); ');
10219   l('  END;');
10220 
10221 END;
10222 
10223 PROCEDURE generate_party_query_upd(
10224   x_rebuild_party_idx OUT NOCOPY BOOLEAN) IS
10225  cur_col_num NUMBER := 1;
10226 
10227  TYPE coltab IS TABLE OF VARCHAR2(2000) INDEX BY BINARY_INTEGER;
10228 
10229  l_org_select coltab;
10230  l_per_select coltab;
10231  l_oth_select coltab;
10232 
10233  l_forall_list coltab;
10234  l_custom_list coltab;
10235  l_mincol_list coltab;
10236  l_min_colnum NUMBER;
10237  idx NUMBER :=1;
10238  FIRST BOOLEAN;
10239 -- VJN Introduced for conditional word replacements
10240  l_cond_attrib_list coltab ;
10241  l_idx number ;
10242 
10243 BEGIN
10244   l('');
10245   l('  PROCEDURE open_party_cursor( ');
10246   l('    p_party_type	IN	VARCHAR2,');
10247   l('    p_worker_number IN	NUMBER,');
10248   l('    p_num_workers	IN	NUMBER,');
10249   l('    x_party_cur	IN OUT	HZ_PARTY_STAGE.StageCurTyp) IS ');
10250   l('');
10251   l('    l_party_type VARCHAR2(255);');
10252   l('  BEGIN');
10253 
10254   FOR ATTRS IN (SELECT a.ATTRIBUTE_ID,
10255                        a.ATTRIBUTE_NAME,
10256                        a.SOURCE_TABLE,
10257                        a.CUSTOM_ATTRIBUTE_PROCEDURE,
10258                        f.PROCEDURE_NAME,
10259                        f.STAGED_ATTRIBUTE_COLUMN,
10260                        to_number(substrb(STAGED_ATTRIBUTE_COLUMN, 3)) COLNUM
10261                 FROM HZ_TRANS_ATTRIBUTES_VL a, HZ_TRANS_FUNCTIONS_VL f
10262                 WHERE ENTITY_NAME = 'PARTY'
10263                 AND nvl(f.ACTIVE_FLAG,'Y') = 'Y'
10264                 AND f.ATTRIBUTE_ID = a.ATTRIBUTE_ID
10265                 AND f.STAGED_FLAG='N'
10266                 ORDER BY COLNUM) LOOP
10267     IF cur_col_num<ATTRS.COLNUM THEN
10268       FOR I in cur_col_num..ATTRS.COLNUM-1 LOOP
10269         l_mincol_list(I) := 'N';
10270         l_forall_list(I) := 'N';
10271       END LOOP;
10272     END IF;
10273     cur_col_num:=ATTRS.COLNUM+1;
10274     IF has_trx_context(ATTRS.PROCEDURE_NAME) THEN
10275       l_forall_list(ATTRS.COLNUM) := ATTRS.PROCEDURE_NAME || '(H_TX'||ATTRS.COLNUM||'(I),NULL, ''' || ATTRS.ATTRIBUTE_NAME || ''',''PARTY'',''STAGE'')';
10276     ELSE
10277       l_forall_list(ATTRS.COLNUM) := ATTRS.PROCEDURE_NAME || '(H_TX'||ATTRS.COLNUM||'(I),NULL, ''' || ATTRS.ATTRIBUTE_NAME || ''',''PARTY'')';
10278     END IF;
10279 
10280     l_mincol_list(ATTRS.COLNUM) := 'N';
10281     IF ATTRS.CUSTOM_ATTRIBUTE_PROCEDURE IS NULL THEN
10282       IF ATTRS.SOURCE_TABLE='HZ_ORGANIZATION_PROFILES' THEN
10283         l_org_select(idx) := 'op.'||ATTRS.ATTRIBUTE_NAME;
10284         l_per_select(idx) := 'NULL';
10285         l_oth_select(idx) := 'NULL';
10286       ELSIF ATTRS.SOURCE_TABLE='HZ_PERSON_PROFILES' THEN
10287         l_per_select(idx) := 'pe.'||ATTRS.ATTRIBUTE_NAME;
10288         l_org_select(idx) := 'NULL';
10289         l_oth_select(idx) := 'NULL';
10290       ELSIF ATTRS.SOURCE_TABLE='HZ_PERSON_PROFILES, HZ_ORGANIZATION_PROFILES' OR
10291             ATTRS.SOURCE_TABLE='HZ_ORGANIZATION_PROFILES, HZ_PERSON_PROFILES' THEN
10292         l_org_select(idx) := 'op.'||ATTRS.ATTRIBUTE_NAME;
10293         l_per_select(idx) := 'pe.'||ATTRS.ATTRIBUTE_NAME;
10294         l_oth_select(idx) := 'NULL';
10295       ELSE
10296         l_org_select(idx) := 'p.'||ATTRS.ATTRIBUTE_NAME;
10297         l_per_select(idx) := 'p.'||ATTRS.ATTRIBUTE_NAME;
10298         l_oth_select(idx) := 'p.'||ATTRS.ATTRIBUTE_NAME;
10299       END IF;
10300     ELSE
10301         SELECT min(to_number(substrb(STAGED_ATTRIBUTE_COLUMN, 3))) INTO l_min_colnum
10302         FROM HZ_TRANS_ATTRIBUTES_VL a, HZ_TRANS_FUNCTIONS_VL f
10303         WHERE ENTITY_NAME = 'PARTY'
10304         AND nvl(f.ACTIVE_FLAG,'Y') = 'Y'
10305         AND f.ATTRIBUTE_ID = a.ATTRIBUTE_ID
10306         AND a.ATTRIBUTE_NAME=ATTRS.ATTRIBUTE_NAME
10307         AND f.STAGED_FLAG='N';
10308 
10309         l_org_select(idx) := 'NULL';
10310         l_oth_select(idx) := 'NULL';
10311         l_per_select(idx) := 'NULL';
10312         IF ATTRS.colnum>l_min_colnum THEN
10313          IF has_trx_context(ATTRS.PROCEDURE_NAME) THEN
10314            l_forall_list(ATTRS.COLNUM) := ATTRS.PROCEDURE_NAME || '(H_TX'||l_min_colnum||'(I),NULL, ''' || ATTRS.ATTRIBUTE_NAME || ''',''PARTY'',''STAGE'')';
10315          ELSE
10316            l_forall_list(ATTRS.COLNUM) := ATTRS.PROCEDURE_NAME || '(H_TX'||l_min_colnum||'(I),NULL, ''' || ATTRS.ATTRIBUTE_NAME || ''',''PARTY'')';
10317          END IF;
10318 
10319           l_mincol_list(ATTRS.COLNUM) := 'N';
10320         ELSE
10321           l_mincol_list(ATTRS.COLNUM) := 'Y';
10322           IF has_context(ATTRS.custom_attribute_procedure) THEN
10323             l_custom_list(ATTRS.COLNUM) := ATTRS.custom_attribute_procedure || '(H_PARTY_ID(I),''PARTY'','''||ATTRS.ATTRIBUTE_NAME|| ''', ''STAGE'')';
10324           ELSE
10325             l_custom_list(ATTRS.COLNUM) := ATTRS.custom_attribute_procedure || '(H_PARTY_ID(I), ''PARTY'','''||ATTRS.ATTRIBUTE_NAME|| ''')';
10326           END IF;
10327         END IF;
10328     END IF;
10329     idx := idx+1;
10330     -- VJN ADDED CODE FOR TRACKING CONDITION ATTRIBUTES AT THIS ENTITY LEVEL
10331     IF HZ_WORD_CONDITIONS_PKG.is_a_cond_attrib( ATTRS.attribute_id)
10332      THEN
10333          l_cond_attrib_list(ATTRS.COLNUM) := ATTRS.attribute_id ;
10334     END IF;
10335 
10336   END LOOP;
10337   IF idx=1 THEN
10338     x_rebuild_party_idx:=FALSE;
10339     l('    RETURN;');
10340     l('  END;');
10341   ELSE
10342     x_rebuild_party_idx:=check_rebuild('PARTY');
10343 
10344     IF cur_col_num<=255 THEN--bug 5977628
10345       FOR I in cur_col_num..255 LOOP
10346         l_mincol_list(I) := 'N';
10347         l_forall_list(I) := 'N';
10348       END LOOP;
10349     END IF;
10350 
10351     l('    IF p_party_type = ''ORGANIZATION'' THEN');
10352     l('      open x_party_cur FOR ' );
10353     l('        SELECT p.PARTY_ID ');
10354     FOR I in 1..l_org_select.COUNT LOOP
10355       l('              ,' || l_org_select(I));
10356     END LOOP;
10357 
10358     l('        FROM HZ_STAGED_PARTIES s, HZ_PARTIES p, HZ_ORGANIZATION_PROFILES op ');
10359     l('        WHERE s.PARTY_ID = p.PARTY_ID ');
10360     l('        AND mod(p.PARTY_ID, p_num_workers) = p_worker_number ');
10361     l('        AND p.party_id = op.party_id ');
10362     l('        AND op.effective_end_date is NULL; ');
10363     l('    ELSIF p_party_type = ''PERSON'' THEN');
10364     l('      open x_party_cur FOR ' );
10365     l('        SELECT p.PARTY_ID ');
10366     FOR I in 1..l_per_select.COUNT LOOP
10367       l('              ,' || l_per_select(I));
10368     END LOOP;
10369     l('        FROM HZ_STAGED_PARTIES s,HZ_PARTIES p, HZ_PERSON_PROFILES pe ');
10370     l('        WHERE s.PARTY_ID = p.PARTY_ID ');
10371     l('        AND mod(p.PARTY_ID, p_num_workers) = p_worker_number ');
10372     l('        AND p.party_id = pe.party_id ');
10373     l('        AND pe.effective_end_date is NULL; ');
10374     l('    ELSE');
10375     l('      open x_party_cur FOR ' );
10376     l('        SELECT p.PARTY_ID ');
10377     FOR I in 1..l_oth_select.COUNT LOOP
10378       l('              ,' || l_oth_select(I));
10379     END LOOP;
10380     l('        FROM HZ_STAGED_PARTIES s, HZ_PARTIES p ');
10381     l('        WHERE s.PARTY_ID = p.PARTY_ID ');
10382     l('        AND mod(p.PARTY_ID, p_num_workers) = p_worker_number ');
10383     l('        AND p.party_type <> ''PERSON'' ');
10384     l('        AND p.party_type <> ''ORGANIZATION'' ');
10385     l('        AND p.party_type <> ''PARTY_RELATIONSHIP''; ');
10386     l('    END IF;');
10387     l('  END;');
10388   END IF;
10389   l('');
10390   l('  PROCEDURE update_stage_parties ( ');
10391   l('    p_party_cur    IN HZ_PARTY_STAGE.StageCurTyp) IS ');
10392   l('  l_limit NUMBER := ' || g_batch_size || ';');
10393   l(' l_last_fetch BOOLEAN := FALSE;');
10394   l('');
10395   l('  BEGIN');
10396   IF idx=1 THEN
10397     l('      RETURN;');
10398     l('  END;');
10399   ELSE
10400     l('    LOOP');
10401     l('      FETCH p_party_cur BULK COLLECT INTO');
10402     l('        H_PARTY_ID');
10403     FOR I IN 1..255 LOOP
10404       IF l_forall_list(I) <> 'N' THEN
10405         l('         ,H_TX'||I);
10406       END IF;
10407     END LOOP;
10408     l('      LIMIT l_limit;');
10409     l('');
10410     l('    IF p_party_cur%NOTFOUND THEN');
10411     l('      l_last_fetch:=TRUE;');
10412     l('    END IF;');
10413 
10414     l('    IF H_PARTY_ID.COUNT=0 AND l_last_fetch THEN');
10415     l('      EXIT;');
10416     l('    END IF;');
10417 
10418     l('    FOR I in H_PARTY_ID.FIRST..H_PARTY_ID.LAST LOOP');
10419   -- VJN INTRODUCED CODE FOR GENERATING THE POPULATION
10420   -- OF THE GLOBAL CONDITION RECORD
10421 
10422   l_idx := l_cond_attrib_list.FIRST ;
10423   IF l_idx IS NOT NULL
10424   THEN
10425     l('----------- SETTING GLOBAL CONDITION RECORD AT THE PARTY LEVEL ---------');
10426   END IF ;
10427 
10428 
10429   WHILE l_cond_attrib_list.EXISTS(l_idx)
10430   LOOP
10431 
10432       l('     HZ_WORD_CONDITIONS_PKG.set_gbl_condition_rec ('||l_cond_attrib_list(l_idx)||','||'H_TX'||l_idx||'(I));');
10433       l_idx := l_idx+1;
10434   END LOOP;
10435     FOR I IN 1..255 LOOP
10436       IF l_forall_list(I) <> 'N' THEN
10437         IF l_mincol_list(I) = 'Y' THEN
10438           l('         H_TX'||I||'(I):='||l_custom_list(I)||';');
10439         END IF;
10440       END IF;
10441     END LOOP;
10442     FOR I IN 1..255 LOOP
10443       IF l_forall_list(I) <> 'N' THEN
10444         IF l_mincol_list(I) <> 'Y' THEN
10445           l('         H_TX'||I||'(I):='||l_forall_list(I)||';');
10446         END IF;
10447       END IF;
10448     END LOOP;
10449     FOR I IN 1..255 LOOP
10450       IF l_forall_list(I) <> 'N' THEN
10451         IF l_mincol_list(I) = 'Y' THEN
10452           l('         H_TX'||I||'(I):='||l_forall_list(I)||';');
10453         END IF;
10454       END IF;
10455     END LOOP;
10456     l('    END LOOP;');
10457 
10458     l('    FORALL I in H_PARTY_ID.FIRST..H_PARTY_ID.LAST');
10459     l('      UPDATE HZ_STAGED_PARTIES SET ');
10460     FIRST:=TRUE;
10461     FOR I IN 1..255 LOOP
10462       IF l_forall_list(I) <> 'N' THEN
10463           IF (FIRST) THEN
10464 	        FIRST := false;
10465                 l('            TX'||I||'=decode(H_TX'||I||'(I),null,H_TX'||I||'(I),H_TX'||I||'(I)||'' '')');
10466           ELSE
10467                 l('            ,TX'||I||'=decode(H_TX'||I||'(I),null,H_TX'||I||'(I),H_TX'||I||'(I)||'' '')');
10468           END IF;
10469       END IF;
10470     END LOOP;
10471     l('      WHERE PARTY_ID=H_PARTY_ID(I);');
10472     l('      IF l_last_fetch THEN');
10473     l('        FND_CONCURRENT.AF_Commit;');
10474     l('        EXIT;');
10475     l('      END IF;');
10476     l('      FND_CONCURRENT.AF_Commit;');
10477     l('    END LOOP;');
10478     l('  END;');
10479   END IF;
10480 END;
10481 
10482 
10483 PROCEDURE generate_contact_query_upd(
10484   x_rebuild_contact_idx OUT NOCOPY BOOLEAN) IS
10485  cur_col_num NUMBER := 1;
10486 
10487  TYPE coltab IS TABLE OF VARCHAR2(2000) INDEX BY BINARY_INTEGER;
10488 
10489  l_select coltab;
10490 
10491  l_forall_list coltab;
10492  l_custom_list coltab;
10493  l_mincol_list coltab;
10494  l_min_colnum NUMBER;
10495  idx NUMBER :=1;
10496  FIRST BOOLEAN;
10497 -- VJN Introduced for conditional word replacements
10498  l_cond_attrib_list coltab ;
10499  l_idx number ;
10500 
10501 BEGIN
10502  log('Generating upd procedures for CONTACTS' );
10503  IF new_transformations_exist('CONTACTS') = TRUE
10504                       OR
10505      ( new_transformations_exist('CONTACTS') = FALSE AND get_missing_denorm_attrib_cols('CONTACTS') IS NULL )
10506   THEN
10507                     log('If block of code -- new transformations exist or there are no missing denorm attrib columns' );
10508                     l('');
10509                     l('  PROCEDURE open_contact_cursor( ');
10510                     l('    p_worker_number IN	NUMBER,');
10511                     l('    p_num_workers	IN	NUMBER,');
10512                     l('    x_contact_cur	IN OUT	HZ_PARTY_STAGE.StageCurTyp) IS ');
10513                     l('');
10514                     l('  BEGIN');
10515 
10516                     FOR ATTRS IN (SELECT a.ATTRIBUTE_ID,
10517                                          a.ATTRIBUTE_NAME,
10518                                          a.SOURCE_TABLE,
10519                                          a.CUSTOM_ATTRIBUTE_PROCEDURE,
10520                                          f.PROCEDURE_NAME,
10521                                          f.STAGED_ATTRIBUTE_COLUMN,
10522                                          to_number(substrb(STAGED_ATTRIBUTE_COLUMN, 3)) COLNUM
10523                                   FROM HZ_TRANS_ATTRIBUTES_VL a, HZ_TRANS_FUNCTIONS_VL f
10524                                   WHERE ENTITY_NAME = 'CONTACTS'
10525                                   AND nvl(f.ACTIVE_FLAG,'Y') = 'Y'
10526                                   AND f.ATTRIBUTE_ID = a.ATTRIBUTE_ID
10527                                   AND f.staged_flag='N'
10528                                   ORDER BY COLNUM) LOOP
10529                       IF cur_col_num<ATTRS.COLNUM THEN
10530                         FOR I in cur_col_num..ATTRS.COLNUM-1 LOOP
10531                           l_mincol_list(I) := 'N';
10532                           l_forall_list(I) := 'N';
10533                         END LOOP;
10534                       END IF;
10535                       cur_col_num:=ATTRS.COLNUM+1;
10536                       IF has_trx_context(ATTRS.PROCEDURE_NAME) THEN
10537                         l_forall_list(ATTRS.COLNUM) := ATTRS.PROCEDURE_NAME || '(H_TX'||ATTRS.COLNUM||'(I),NULL, ''' || ATTRS.ATTRIBUTE_NAME || ''',''CONTACTS'',''STAGE'')';
10538                       ELSE
10539                         l_forall_list(ATTRS.COLNUM) := ATTRS.PROCEDURE_NAME || '(H_TX'||ATTRS.COLNUM||'(I),NULL, ''' || ATTRS.ATTRIBUTE_NAME || ''',''CONTACTS'')';
10540                       END IF;
10541 
10542                       l_mincol_list(ATTRS.COLNUM) := 'N';
10543                       IF ATTRS.CUSTOM_ATTRIBUTE_PROCEDURE IS NULL THEN
10544                         IF ATTRS.SOURCE_TABLE='HZ_PERSON_PROFILES' THEN
10545                           l_select(idx) := 'pp.'||ATTRS.ATTRIBUTE_NAME;
10546                         ELSIF ATTRS.SOURCE_TABLE='HZ_ORG_CONTACTS' THEN
10547                           l_select(idx) := 'oc.'||ATTRS.ATTRIBUTE_NAME;
10548                         ELSIF ATTRS.SOURCE_TABLE='HZ_RELATIONSHIPS' THEN
10549                           l_select(idx) := 'r.'||ATTRS.ATTRIBUTE_NAME;
10550                         END IF;
10551                       ELSE
10552                           SELECT min(to_number(substrb(STAGED_ATTRIBUTE_COLUMN, 3))) INTO l_min_colnum
10553                           FROM HZ_TRANS_ATTRIBUTES_VL a, HZ_TRANS_FUNCTIONS_VL f
10554                           WHERE ENTITY_NAME = 'CONTACTS'
10555                           AND nvl(f.ACTIVE_FLAG,'Y') = 'Y'
10556                           AND f.ATTRIBUTE_ID = a.ATTRIBUTE_ID
10557                           AND a.ATTRIBUTE_NAME=ATTRS.ATTRIBUTE_NAME
10558                           AND f.staged_flag='N';
10559 
10560                           l_select(idx) := 'NULL';
10561                           IF ATTRS.colnum>l_min_colnum THEN
10562                             IF has_trx_context(ATTRS.PROCEDURE_NAME) THEN
10563                               l_forall_list(ATTRS.COLNUM) := ATTRS.PROCEDURE_NAME || '(H_TX'||l_min_colnum||'(I),NULL, ''' || ATTRS.ATTRIBUTE_NAME || ''',''CONTACTS'',''STAGE'')';
10564                             ELSE
10565                               l_forall_list(ATTRS.COLNUM) := ATTRS.PROCEDURE_NAME || '(H_TX'||l_min_colnum||'(I),NULL, ''' || ATTRS.ATTRIBUTE_NAME || ''',''CONTACTS'')';
10566                             END IF;
10567 
10568                             l_mincol_list(ATTRS.COLNUM) := 'N';
10569                           ELSE
10570                             l_mincol_list(ATTRS.COLNUM) := 'Y';
10571                             IF has_context(ATTRS.custom_attribute_procedure) THEN
10572                               l_custom_list(ATTRS.COLNUM) := ATTRS.custom_attribute_procedure || '(H_ORG_CONTACT_ID(I),''CONTACTS'','''||ATTRS.ATTRIBUTE_NAME|| ''', ''STAGE'')';
10573                             ELSE
10574                               l_custom_list(ATTRS.COLNUM) := ATTRS.custom_attribute_procedure || '(H_ORG_CONTACT_ID(I), ''CONTACTS'','''||ATTRS.ATTRIBUTE_NAME|| ''')';
10575                             END IF;
10576                           END IF;
10577                       END IF;
10578                       idx := idx+1;
10579                       -- VJN ADDED CODE FOR TRACKING CONDITION ATTRIBUTES AT THIS ENTITY LEVEL
10580                       IF HZ_WORD_CONDITIONS_PKG.is_a_cond_attrib( ATTRS.attribute_id)
10581                       THEN
10582                             l_cond_attrib_list(ATTRS.COLNUM) := ATTRS.attribute_id ;
10583                       END IF;
10584 
10585                     END LOOP;
10586 
10587                     IF idx=1 THEN
10588                       x_rebuild_contact_idx:=FALSE;
10589                       l('    RETURN;');
10590                       l('  END;');
10591                     ELSE
10592                       x_rebuild_contact_idx:=check_rebuild('CONTACTS');
10593                       IF cur_col_num<=255 THEN--bug 5977628
10594                         FOR I in cur_col_num..255 LOOP
10595                           l_mincol_list(I) := 'N';
10596                           l_forall_list(I) := 'N';
10597                         END LOOP;
10598                       END IF;
10599 
10600                       l('        open x_contact_cur FOR');
10601                       l('            SELECT oc.ORG_CONTACT_ID ');
10602                       FOR I in 1..l_select.COUNT LOOP
10603                         l('                  ,' || l_select(I));
10604                       END LOOP;
10605                       l('           FROM HZ_STAGED_CONTACTS s, HZ_ORG_CONTACTS oc, ');
10606                       l('           HZ_RELATIONSHIPS r, HZ_PERSON_PROFILES pp');
10607                       l('           WHERE mod(s.PARTY_ID, p_num_workers) = p_worker_number ');
10608                       l('           AND s.ORG_CONTACT_ID=oc.ORG_CONTACT_ID');
10609                       l('           AND oc.party_relationship_id =  r.relationship_id ');
10610                       l('           AND r.object_id = s.party_id ');
10611                       l('           AND r.subject_id = pp.party_id ');
10612                       l('           AND r.SUBJECT_TABLE_NAME = ''HZ_PARTIES''');
10613                       l('           AND r.OBJECT_TABLE_NAME = ''HZ_PARTIES''');
10614                       l('           AND DIRECTIONAL_FLAG= ''F'' ');
10615                       l('           AND pp.effective_end_date is NULL ');
10616                       l('           AND (oc.status is null OR oc.status = ''A'' or oc.status = ''I'')');
10617                       l('           AND (r.status is null OR r.status = ''A'' or r.status = ''I'');');
10618                       l('  END;');
10619                     END IF;
10620                     l('');
10621                     l('  PROCEDURE update_stage_contacts ( ');
10622                     l('    p_contact_cur    IN HZ_PARTY_STAGE.StageCurTyp) IS ');
10623                     l('  l_limit NUMBER := ' || g_batch_size || ';');
10624                     l('  H_DENORM_PARTY_ID NumberList ;');
10625                     l('  H_DENORM_VALUE CharList ;');
10626                     l('  H_ROW_OFFSET Number ;');
10627                     l(' l_last_fetch BOOLEAN := FALSE;');
10628                     l('');
10629                     l('  BEGIN');
10630                     IF idx=1 THEN
10631                       l('      RETURN;');
10632                       l('  END;');
10633                     ELSE
10634                       l('    LOOP');
10635                       l('      H_ROW_OFFSET := 1 ;');
10636                       l('      FETCH p_contact_cur BULK COLLECT INTO');
10637                       l('        H_ORG_CONTACT_ID');
10638                       FOR I IN 1..255 LOOP
10639                         IF l_forall_list(I) <> 'N' THEN
10640                           l('         ,H_TX'||I);
10641                         END IF;
10642                       END LOOP;
10643                       l('      LIMIT l_limit;');
10644                       l('');
10645                       l('    IF p_contact_cur%NOTFOUND THEN');
10646                       l('      l_last_fetch:=TRUE;');
10647                       l('    END IF;');
10648 
10649                       l('    IF H_ORG_CONTACT_ID.COUNT=0 AND l_last_fetch THEN');
10650                       l('      EXIT;');
10651                       l('    END IF;');
10652 
10653                       l('    FOR I in H_ORG_CONTACT_ID.FIRST..H_ORG_CONTACT_ID.LAST LOOP');
10654                        -- VJN INTRODUCED CODE FOR GENERATING THE POPULATION
10655                       -- OF THE GLOBAL CONDITION RECORD
10656 
10657                       l_idx := l_cond_attrib_list.FIRST ;
10658                       IF l_idx IS NOT NULL
10659                       THEN
10660                             l('----------- SETTING GLOBAL CONDITION RECORD AT THE CONTACT LEVEL ---------');
10661                       END IF ;
10662 
10663 
10664                       WHILE l_cond_attrib_list.EXISTS(l_idx)
10665                       LOOP
10666 
10667                         l('     HZ_WORD_CONDITIONS_PKG.set_gbl_condition_rec ('||l_cond_attrib_list(l_idx)||','||'H_TX'||l_idx||'(I));');
10668                         l_idx := l_idx+1;
10669                        END LOOP;
10670                       FOR I IN 1..255 LOOP
10671                         IF l_forall_list(I) <> 'N' THEN
10672                           IF l_mincol_list(I) = 'Y' THEN
10673                             l('         H_TX'||I||'(I):='||l_custom_list(I)||';');
10674                           END IF;
10675                         END IF;
10676                       END LOOP;
10677                       FOR I IN 1..255 LOOP
10678                         IF l_forall_list(I) <> 'N' THEN
10679                           IF l_mincol_list(I) <> 'Y' THEN
10680                             l('         H_TX'||I||'(I):='||l_forall_list(I)||';');
10681                           END IF;
10682                         END IF;
10683                       END LOOP;
10684                       FOR I IN 1..255 LOOP
10685                         IF l_forall_list(I) <> 'N' THEN
10686                           IF l_mincol_list(I) = 'Y' THEN
10687                             l('         H_TX'||I||'(I):='||l_forall_list(I)||';');
10688                           END IF;
10689                         END IF;
10690                       END LOOP;
10691                       l('    END LOOP;');
10692 
10693                       l('    FORALL I in H_ORG_CONTACT_ID.FIRST..H_ORG_CONTACT_ID.LAST');
10694                       l('      UPDATE HZ_STAGED_CONTACTS SET ');
10695                       FIRST:=TRUE;
10696                       FOR I IN 1..255 LOOP
10697                         IF l_forall_list(I) <> 'N' THEN
10698                   	IF (FIRST) THEN
10699                                FIRST := false;
10700                                l('            TX'||I||'=decode(H_TX'||I||'(I),null,H_TX'||I||'(I),H_TX'||I||'(I)||'' '')');
10701                   	ELSE
10702                                l('            ,TX'||I||'=decode(H_TX'||I||'(I),null,H_TX'||I||'(I),H_TX'||I||'(I)||'' '')');
10703                   	END IF;
10704 
10705                         END IF;
10706                       END LOOP;
10707 
10708                       l('        WHERE ORG_CONTACT_ID = H_ORG_CONTACT_ID(I)');
10709                       -- ADD CODE FOR UPDATING HZ_STAGED_PARTIES IF THERE ARE ANY NEW CONTACT DENORM ATTRIBUTES
10710                       IF get_missing_denorm_attrib_cols('CONTACTS') IS NOT NULL
10711                       THEN
10712                            l('RETURNING PARTY_ID, ');
10713                            l(get_missing_denorm_attrib_cols('CONTACTS'));
10714                            -- THIS BULK COLLECT WILL CHOSE THE PARTY ID COLUMNS OF THE ROWS THAT ARE UPDATED
10715                            -- AND UPDATE THESE PARTY IDS IN HZ_STAGED_PARTIES, BY APPENDING TO THE D_CT COLUMNS
10716                            -- VALUES FROM THE NEW DENORM ATTRIBUTE COLUMNS
10717                            l('BULK COLLECT INTO  H_DENORM_PARTY_ID, H_DENORM_VALUE ;');
10718                            l('LOOP');
10719         		           l('BEGIN');
10720         			       l('   FORALL I IN H_ROW_OFFSET..H_DENORM_PARTY_ID.COUNT');
10721         			       l('           UPDATE HZ_STAGED_PARTIES');
10722         				   l('           SET D_CT = D_CT||'' ''||H_DENORM_VALUE(I)');
10723         			       l('           WHERE PARTY_ID = H_DENORM_PARTY_ID(I) AND D_CT <> ''SYNC'' ;');
10724                            l('EXIT ;');
10725         			       l('EXCEPTION');
10726         			       l('WHEN OTHERS THEN');
10727         			       l('           H_ROW_OFFSET := H_ROW_OFFSET+SQL%ROWCOUNT;');
10728                            l('           UPDATE HZ_STAGED_PARTIES');
10729         				   l('           SET D_CT = ''SYNC'' ');
10730         				   l('           WHERE PARTY_ID = H_DENORM_PARTY_ID(H_ROW_OFFSET) ;');
10731                            l('           H_ROW_OFFSET := H_ROW_OFFSET+1 ;');
10732         		           l('END ;');
10733                            l('END LOOP ;');
10734                       ELSE
10735                            l(';');
10736                       END IF ;
10737 
10738                       l('      IF l_last_fetch THEN');
10739                       l('        FND_CONCURRENT.AF_Commit;');
10740                       l('        EXIT;');
10741                       l('      END IF;');
10742                       l('      FND_CONCURRENT.AF_Commit;');
10743                       l('    END LOOP;');
10744                       l('  END;');
10745                 END IF ;
10746 -- NO NEW TRANSFORMATIONS BUT THERE ARE SOME NEW DENORM ATTRIBUTES
10747 ELSE
10748                     log('Else block of code -- No new transformations exist' );
10749                     l('');
10750                     l('  PROCEDURE open_contact_cursor( ');
10751                     l('    p_worker_number IN	NUMBER,');
10752                     l('    p_num_workers	IN	NUMBER,');
10753                     l('    x_contact_cur	IN OUT	HZ_PARTY_STAGE.StageCurTyp) IS ');
10754                     l('');
10755                     l('  BEGIN');
10756                     l('    open x_contact_cur FOR');
10757                     l('      SELECT ct.PARTY_ID,');
10758                     l(get_missing_denorm_attrib_cols('CONTACTS'));
10759                     l('      FROM HZ_STAGED_CONTACTS ct');
10760                     l('      WHERE mod(ct.PARTY_ID, p_num_workers) = p_worker_number ; ');
10761                     l('  END;');
10762 
10763                     l('');
10764                     l('  PROCEDURE update_stage_contacts ( ');
10765                     l('    p_contact_cur    IN HZ_PARTY_STAGE.StageCurTyp) IS ');
10766                     l('  l_limit NUMBER := ' || g_batch_size || ';');
10767                     l('  H_DENORM_PARTY_ID NumberList ;');
10768                     l('  H_DENORM_VALUE CharList ;');
10769                     l('  H_ROW_OFFSET Number ;');
10770                     l(' l_last_fetch BOOLEAN := FALSE;');
10771                     l('');
10772                     l('  BEGIN');
10773                     l('    LOOP');
10774                     l('      H_ROW_OFFSET := 1 ; ');
10775                     l('      FETCH p_contact_cur BULK COLLECT INTO');
10776                     l('        H_DENORM_PARTY_ID, H_DENORM_VALUE');
10777                     l('      LIMIT l_limit;');
10778                     l('');
10779                     l('    IF p_contact_cur%NOTFOUND THEN');
10780                     l('      l_last_fetch:=TRUE;');
10781                     l('    END IF;');
10782                     l('    IF H_DENORM_PARTY_ID.COUNT=0 AND l_last_fetch THEN');
10783                     l('      EXIT;');
10784                     l('    END IF;');
10785 
10786                     l('LOOP');
10787   		            l('BEGIN');
10788   			        l('   FORALL I IN H_ROW_OFFSET..H_DENORM_PARTY_ID.COUNT');
10789   			        l('           UPDATE HZ_STAGED_PARTIES');
10790   				    l('           SET D_CT = D_CT||'' ''||H_DENORM_VALUE(I)');
10791   				    l('           WHERE PARTY_ID = H_DENORM_PARTY_ID(I) AND D_CT <> ''SYNC'' ;');
10792                     l('EXIT ;');
10793   			        l('EXCEPTION');
10794   			        l('WHEN OTHERS THEN');
10795   			        l('           H_ROW_OFFSET := H_ROW_OFFSET+SQL%ROWCOUNT;');
10796                     l('           UPDATE HZ_STAGED_PARTIES');
10797   				    l('           SET D_CT = ''SYNC'' ');
10798   				    l('           WHERE PARTY_ID = H_DENORM_PARTY_ID(H_ROW_OFFSET) ;');
10799                     l('           H_ROW_OFFSET := H_ROW_OFFSET+1 ;');
10800   		            l('END ;');
10801                     l('END LOOP ;');
10802 
10803 
10804 
10805 
10806 
10807                     l('        IF l_last_fetch THEN');
10808                     l('          FND_CONCURRENT.AF_Commit;');
10809                     l('          EXIT;');
10810                     l('        END IF;');
10811                     l('        FND_CONCURRENT.AF_Commit;');
10812                     l('    END LOOP ; ');
10813                     l('  END ; ');
10814 END IF ;
10815 
10816 END;
10817 
10818 
10819 PROCEDURE generate_party_site_query_upd(
10820   x_rebuild_psite_idx OUT NOCOPY BOOLEAN) IS
10821  cur_col_num NUMBER := 1;
10822 
10823  TYPE coltab IS TABLE OF VARCHAR2(2000) INDEX BY BINARY_INTEGER;
10824 
10825  l_select coltab;
10826 
10827  l_forall_list coltab;
10828  l_custom_list coltab;
10829  l_mincol_list coltab;
10830  l_min_colnum NUMBER;
10831  idx NUMBER :=1;
10832  FIRST BOOLEAN;
10833 -- VJN Introduced for conditional word replacements
10834  l_cond_attrib_list coltab ;
10835  l_idx number ;
10836 
10837 BEGIN
10838   log('Generating upd procedures for PARTY SITES' );
10839   IF new_transformations_exist('PARTY_SITES') = TRUE
10840                       OR
10841      ( new_transformations_exist('PARTY_SITES') = FALSE AND get_missing_denorm_attrib_cols('PARTY_SITES') IS NULL )
10842   THEN
10843 
10844                     log('If block of code -- new transformations exist or there are no missing denorm attrib columns' );
10845                     l('');
10846                     l('  PROCEDURE open_party_site_cursor( ');
10847                     l('    p_worker_number IN	NUMBER,');
10848                     l('    p_num_workers	IN	NUMBER,');
10849                     l('    x_party_site_cur	IN OUT	HZ_PARTY_STAGE.StageCurTyp) IS ');
10850                     l('');
10851                     l('  BEGIN');
10852 
10853                     FOR ATTRS IN (SELECT a.ATTRIBUTE_ID,
10854                                          a.ATTRIBUTE_NAME,
10855                                          a.SOURCE_TABLE,
10856                                          a.CUSTOM_ATTRIBUTE_PROCEDURE,
10857                                          f.PROCEDURE_NAME,
10858                                          f.STAGED_ATTRIBUTE_COLUMN,
10859                                          to_number(substrb(STAGED_ATTRIBUTE_COLUMN, 3)) COLNUM
10860                                   FROM HZ_TRANS_ATTRIBUTES_VL a, HZ_TRANS_FUNCTIONS_VL f
10861                                   WHERE ENTITY_NAME = 'PARTY_SITES'
10862                                   AND nvl(f.ACTIVE_FLAG,'Y') = 'Y'
10863                                   AND f.ATTRIBUTE_ID = a.ATTRIBUTE_ID
10864                                   AND f.staged_flag='N'
10865                                   ORDER BY COLNUM) LOOP
10866                       IF cur_col_num<ATTRS.COLNUM THEN
10867                         FOR I in cur_col_num..ATTRS.COLNUM-1 LOOP
10868                           l_mincol_list(I) := 'N';
10869                           l_forall_list(I) := 'N';
10870                         END LOOP;
10871                       END IF;
10872                       cur_col_num:=ATTRS.COLNUM+1;
10873                       IF has_trx_context(ATTRS.PROCEDURE_NAME) THEN
10874                         l_forall_list(ATTRS.COLNUM) := ATTRS.PROCEDURE_NAME || '(H_TX'||ATTRS.COLNUM||'(I),NULL, ''' || ATTRS.ATTRIBUTE_NAME || ''',''PARTY_SITES'',''STAGE'')';
10875                       ELSE
10876                         l_forall_list(ATTRS.COLNUM) := ATTRS.PROCEDURE_NAME || '(H_TX'||ATTRS.COLNUM||'(I),NULL, ''' || ATTRS.ATTRIBUTE_NAME || ''',''PARTY_SITES'')';
10877                       END IF;
10878 
10879                       l_mincol_list(ATTRS.COLNUM) := 'N';
10880                       IF ATTRS.CUSTOM_ATTRIBUTE_PROCEDURE IS NULL THEN
10881                         IF ATTRS.SOURCE_TABLE='HZ_LOCATIONS' THEN
10882                           l_select(idx) := 'l.'||ATTRS.ATTRIBUTE_NAME;
10883                         ELSIF ATTRS.SOURCE_TABLE='HZ_PARTY_SITES' THEN
10884                           l_select(idx) := 'ps.'||ATTRS.ATTRIBUTE_NAME;
10885                         END IF;
10886                       ELSE
10887                           SELECT min(to_number(substrb(STAGED_ATTRIBUTE_COLUMN, 3))) INTO l_min_colnum
10888                           FROM HZ_TRANS_ATTRIBUTES_VL a, HZ_TRANS_FUNCTIONS_VL f
10889                           WHERE ENTITY_NAME = 'PARTY_SITES'
10890                           AND nvl(f.ACTIVE_FLAG,'Y') = 'Y'
10891                           AND f.ATTRIBUTE_ID = a.ATTRIBUTE_ID
10892                           AND a.ATTRIBUTE_NAME=ATTRS.ATTRIBUTE_NAME
10893                           AND f.staged_flag='N';
10894 
10895                           l_select(idx) := 'NULL';
10896                           IF ATTRS.colnum>l_min_colnum THEN
10897                             IF has_trx_context(ATTRS.PROCEDURE_NAME) THEN
10898                               l_forall_list(ATTRS.COLNUM) := ATTRS.PROCEDURE_NAME || '(H_TX'||l_min_colnum||'(I),NULL, ''' || ATTRS.ATTRIBUTE_NAME || ''',''PARTY_SITES'',''STAGE'')';
10899                             ELSE
10900                               l_forall_list(ATTRS.COLNUM) := ATTRS.PROCEDURE_NAME || '(H_TX'||l_min_colnum||'(I),NULL, ''' || ATTRS.ATTRIBUTE_NAME || ''',''PARTY_SITES'')';
10901                             END IF;
10902 
10903                             l_mincol_list(ATTRS.COLNUM) := 'N';
10904                           ELSE
10905                             l_mincol_list(ATTRS.COLNUM) := 'Y';
10906                             IF has_context(ATTRS.custom_attribute_procedure) THEN
10907                               l_custom_list(ATTRS.COLNUM) := ATTRS.custom_attribute_procedure || '(H_PARTY_SITE_ID(I),''PARTY_SITES'','''||ATTRS.ATTRIBUTE_NAME|| ''', ''STAGE'')';
10908                             ELSE
10909                               l_custom_list(ATTRS.COLNUM) := ATTRS.custom_attribute_procedure || '(H_PARTY_SITE_ID(I), ''PARTY_SITES'','''||ATTRS.ATTRIBUTE_NAME|| ''')';
10910                             END IF;
10911                           END IF;
10912                       END IF;
10913                       idx := idx+1;
10914                       -- VJN ADDED CODE FOR TRACKING CONDITION ATTRIBUTES AT THIS ENTITY LEVEL
10915                       IF HZ_WORD_CONDITIONS_PKG.is_a_cond_attrib( ATTRS.attribute_id)
10916                       THEN
10917                             l_cond_attrib_list(ATTRS.COLNUM) := ATTRS.attribute_id ;
10918                       END IF;
10919 
10920                     END LOOP;
10921 
10922                     IF idx=1 THEN
10923                       x_rebuild_psite_idx:=FALSE;
10924                       l('    RETURN;');
10925                       l('  END;');
10926                     ELSE
10927                       x_rebuild_psite_idx:=check_rebuild('PARTY_SITES');
10928                       IF cur_col_num<=255 THEN--bug 5977628
10929                         FOR I in cur_col_num..255 LOOP
10930                           l_mincol_list(I) := 'N';
10931                           l_forall_list(I) := 'N';
10932                         END LOOP;
10933                       END IF;
10934 
10935                       l('    open x_party_site_cur FOR');
10936                       l('      SELECT ps.PARTY_SITE_ID ');
10937                       FOR I in 1..l_select.COUNT LOOP
10938                         l('            ,' || l_select(I));
10939                       END LOOP;
10940                       l('      FROM HZ_PARTY_SITES ps, HZ_STAGED_PARTY_SITES s, HZ_LOCATIONS l ');
10941                       l('      WHERE mod(s.PARTY_ID, p_num_workers) = p_worker_number ');
10942                       l('      AND ps.party_site_id = s.party_site_id ');
10943                       l('      AND ps.party_id = s.party_id ');
10944                       l('      AND ps.location_id = l.location_id; ');
10945 
10946                       l('  END;');
10947                     END IF;
10948 
10949                     l('');
10950                     l('  PROCEDURE update_stage_party_sites ( ');
10951                     l('    p_party_site_cur    IN HZ_PARTY_STAGE.StageCurTyp) IS ');
10952                     l('  l_limit NUMBER := ' || g_batch_size || ';');
10953                     l('  H_DENORM_PARTY_ID NumberList ;');
10954                     l('  H_DENORM_VALUE CharList ;');
10955                     l('  H_ROW_OFFSET Number ;');
10956                     l(' l_last_fetch BOOLEAN := FALSE;');
10957                     l('');
10958                     l('  BEGIN');
10959                     IF idx=1 THEN
10960                       l('      RETURN;');
10961                       l('  END;');
10962                     ELSE
10963                       l('    LOOP');
10964                       l('    H_ROW_OFFSET := 1 ;');
10965                       l('      FETCH p_party_site_cur BULK COLLECT INTO');
10966                       l('        H_PARTY_SITE_ID');
10967                       FOR I IN 1..255 LOOP
10968                         IF l_forall_list(I) <> 'N' THEN
10969                           l('         ,H_TX'||I);
10970                         END IF;
10971                       END LOOP;
10972                       l('      LIMIT l_limit;');
10973                       l('');
10974                       l('    IF p_party_site_cur%NOTFOUND THEN');
10975                       l('      l_last_fetch:=TRUE;');
10976                       l('    END IF;');
10977 
10978                       l('    IF H_PARTY_SITE_ID.COUNT=0 AND l_last_fetch THEN');
10979                       l('      EXIT;');
10980                       l('    END IF;');
10981 
10982                       l('    FOR I in H_PARTY_SITE_ID.FIRST..H_PARTY_SITE_ID.LAST LOOP');
10983                       -- VJN INTRODUCED CODE FOR GENERATING THE POPULATION
10984                       -- OF THE GLOBAL CONDITION RECORD
10985 
10986                       l_idx := l_cond_attrib_list.FIRST ;
10987                       IF l_idx IS NOT NULL
10988                       THEN
10989                             l('----------- SETTING GLOBAL CONDITION RECORD AT THE PARTY SITE LEVEL ---------');
10990                       END IF ;
10991 
10992 
10993                       WHILE l_cond_attrib_list.EXISTS(l_idx)
10994                       LOOP
10995 
10996                         l('     HZ_WORD_CONDITIONS_PKG.set_gbl_condition_rec ('||l_cond_attrib_list(l_idx)||','||'H_TX'||l_idx||'(I));');
10997                         l_idx := l_idx+1;
10998                        END LOOP;
10999                       FOR I IN 1..255 LOOP
11000                         IF l_forall_list(I) <> 'N' THEN
11001                           IF l_mincol_list(I) = 'Y' THEN
11002                             l('         H_TX'||I||'(I):='||l_custom_list(I)||';');
11003                           END IF;
11004                         END IF;
11005                       END LOOP;
11006                       FOR I IN 1..255 LOOP
11007                         IF l_forall_list(I) <> 'N' THEN
11008                           IF l_mincol_list(I) <> 'Y' THEN
11009                             l('         H_TX'||I||'(I):='||l_forall_list(I)||';');
11010                           END IF;
11011                         END IF;
11012                       END LOOP;
11013                       FOR I IN 1..255 LOOP
11014                         IF l_forall_list(I) <> 'N' THEN
11015                           IF l_mincol_list(I) = 'Y' THEN
11016                             l('         H_TX'||I||'(I):='||l_forall_list(I)||';');
11017                           END IF;
11018                         END IF;
11019                       END LOOP;
11020                       l('    END LOOP;');
11021                       l('    FORALL I in H_PARTY_SITE_ID.FIRST..H_PARTY_SITE_ID.LAST');
11022                       l('      UPDATE HZ_STAGED_PARTY_SITES SET');
11023                       FIRST := TRUE;
11024                       FOR I IN 1..255 LOOP
11025                         IF l_forall_list(I) <> 'N' THEN
11026                           IF (FIRST) THEN
11027                   	      FIRST := false;
11028                                 l('            TX'||I||'=decode(H_TX'||I||'(I),null,H_TX'||I||'(I),H_TX'||I||'(I)||'' '')');
11029                           ELSE
11030                                 l('            ,TX'||I||'=decode(H_TX'||I||'(I),null,H_TX'||I||'(I),H_TX'||I||'(I)||'' '')');
11031                           END IF;
11032                         END IF;
11033                       END LOOP;
11034                       l('        WHERE PARTY_SITE_ID=H_PARTY_SITE_ID(I)');
11035 
11036                       -- ADD CODE FOR UPDATING HZ_STAGED_PARTIES IF THERE ARE ANY NEW PARTY SITE DENORM ATTRIBUTES
11037                       IF get_missing_denorm_attrib_cols('PARTY_SITES') IS NOT NULL
11038                       THEN
11039                            l('RETURNING PARTY_ID, ');
11040                            l(get_missing_denorm_attrib_cols('PARTY_SITES'));
11041                            -- THIS BULK COLLECT WILL CHOSE THE PARTY ID COLUMNS OF THE ROWS THAT ARE UPDATED
11042                            -- AND UPDATE THESE PARTY IDS IN HZ_STAGED_PARTIES, BY APPENDING TO THE D_PS COLUMNS
11043                            -- VALUES FROM THE NEW DENORM ATTRIBUTE COLUMNS
11044                            l('BULK COLLECT INTO  H_DENORM_PARTY_ID, H_DENORM_VALUE ;');
11045                            l('LOOP');
11046 		                   l('BEGIN');
11047 			               l('   FORALL I IN H_ROW_OFFSET..H_DENORM_PARTY_ID.COUNT');
11048 			               l('           UPDATE HZ_STAGED_PARTIES');
11049 				           l('           SET D_PS = D_PS||'' ''||H_DENORM_VALUE(I)');
11050 				           l('           WHERE PARTY_ID = H_DENORM_PARTY_ID(I) AND D_PS <> ''SYNC'' ;');
11051                            l('EXIT ;');
11052 			               l('EXCEPTION');
11053 			               l('WHEN OTHERS THEN');
11054 			               l('           H_ROW_OFFSET := H_ROW_OFFSET+SQL%ROWCOUNT;');
11055                            l('           UPDATE HZ_STAGED_PARTIES');
11056 				           l('           SET D_PS = ''SYNC'' ');
11057 				           l('           WHERE PARTY_ID = H_DENORM_PARTY_ID(H_ROW_OFFSET) ;');
11058                            l('           H_ROW_OFFSET := H_ROW_OFFSET+1;');
11059 		                   l('END ; ');
11060                            l('END LOOP ;');
11061                       ELSE
11062                            l(';');
11063                       END IF ;
11064                       l('      IF l_last_fetch THEN');
11065                       l('        FND_CONCURRENT.AF_Commit;');
11066                       l('        EXIT;');
11067                       l('      END IF;');
11068                       l('      FND_CONCURRENT.AF_Commit;');
11069                       l('    END LOOP;');
11070                       l('  END;');
11071                 END IF ;
11072      -- NO NEW TRANSFORMATIONS BUT THERE ARE SOME NEW DENORM ATTRIBUTES
11073      ELSE
11074                     log('Else block of code -- No new transformations exist' );
11075                     l('');
11076                     l('  PROCEDURE open_party_site_cursor( ');
11077                     l('    p_worker_number IN	NUMBER,');
11078                     l('    p_num_workers	IN	NUMBER,');
11079                     l('    x_party_site_cur	IN OUT	HZ_PARTY_STAGE.StageCurTyp) IS ');
11080                     l('');
11081                     l('  BEGIN');
11082                     l('    open x_party_site_cur FOR');
11083                     l('      SELECT ps.PARTY_ID,');
11084                     l(get_missing_denorm_attrib_cols('PARTY_SITES'));
11085                     l('      FROM HZ_STAGED_PARTY_SITES ps');
11086                     l('      WHERE mod(ps.PARTY_ID, p_num_workers) = p_worker_number ; ');
11087                     l('  END;');
11088 
11089                     l('  PROCEDURE update_stage_party_sites ( ');
11090                     l('    p_party_site_cur    IN HZ_PARTY_STAGE.StageCurTyp) IS ');
11091                     l('  l_limit NUMBER := ' || g_batch_size || ';');
11092                     l('  H_DENORM_PARTY_ID NumberList ;');
11093                     l('  H_DENORM_VALUE CharList ;');
11094                     l('  H_ROW_OFFSET Number ;');
11095                     l(' l_last_fetch BOOLEAN := FALSE;');
11096                     l('');
11097                     l('  BEGIN');
11098                     l('    LOOP');
11099                     l('      H_ROW_OFFSET := 1 ;');
11100                     l('      FETCH p_party_site_cur BULK COLLECT INTO');
11101                     l('        H_DENORM_PARTY_ID, H_DENORM_VALUE');
11102                     l('      LIMIT l_limit;');
11103                     l('');
11104                     l('    IF p_party_site_cur%NOTFOUND THEN');
11105                     l('      l_last_fetch:=TRUE;');
11106                     l('    END IF;');
11107                     l('    IF H_DENORM_PARTY_ID.COUNT=0 AND l_last_fetch THEN');
11108                     l('      EXIT;');
11109                     l('    END IF;');
11110 
11111                     l('LOOP');
11112   		            l('BEGIN');
11113   			        l('   FORALL I IN H_ROW_OFFSET..H_DENORM_PARTY_ID.COUNT');
11114   			        l('           UPDATE HZ_STAGED_PARTIES');
11115   				    l('           SET D_PS = D_PS||'' ''||H_DENORM_VALUE(I)');
11116   				    l('           WHERE PARTY_ID = H_DENORM_PARTY_ID(I) AND D_PS <> ''SYNC'' ;');
11117                     l('EXIT ;');
11118   			        l('EXCEPTION');
11119   			        l('WHEN OTHERS THEN');
11120   			        l('           H_ROW_OFFSET := H_ROW_OFFSET+SQL%ROWCOUNT;');
11121                     l('           UPDATE HZ_STAGED_PARTIES');
11122   				    l('           SET D_PS = ''SYNC'' ');
11123   				    l('           WHERE PARTY_ID = H_DENORM_PARTY_ID(H_ROW_OFFSET) ;');
11124                     l('           H_ROW_OFFSET := H_ROW_OFFSET+1 ;');
11125   		            l('END ;');
11126                     l('END LOOP ;');
11127 
11128                     l('        IF l_last_fetch THEN');
11129                     l('          FND_CONCURRENT.AF_Commit;');
11130                     l('          EXIT;');
11131                     l('        END IF;');
11132                     l('        FND_CONCURRENT.AF_Commit;');
11133                     l('    END LOOP ;');
11134                     l('  END ; ');
11135   END IF ;
11136 END;
11137 
11138 
11139 PROCEDURE generate_contact_pt_query_upd(
11140   x_rebuild_cpt_idx OUT NOCOPY BOOLEAN) IS
11141  cur_col_num NUMBER := 1;
11142 
11143  TYPE coltab IS TABLE OF VARCHAR2(2000) INDEX BY BINARY_INTEGER;
11144 
11145  l_select coltab;
11146 
11147  l_forall_list coltab;
11148  l_custom_list coltab;
11149  l_mincol_list coltab;
11150  l_min_colnum NUMBER;
11151  idx NUMBER :=1;
11152  FIRST BOOLEAN;
11153 -- VJN Introduced for conditional word replacements
11154  l_cond_attrib_list coltab ;
11155  l_idx number ;
11156 
11157 BEGIN
11158 log('Generating upd procedures for CONTACT POINTS' );
11159 IF new_transformations_exist('CONTACT_POINTS') = TRUE
11160                       OR
11161      ( new_transformations_exist('CONTACT_POINTS') = FALSE AND get_missing_denorm_attrib_cols('CONTACT_POINTS') IS NULL )
11162 THEN
11163                   log('If block of code -- new transformations exist or there are no missing denorm attrib columns' );
11164                   l('');
11165                   l('  PROCEDURE open_contact_pt_cursor( ');
11166                   l('    p_worker_number IN	NUMBER,');
11167                   l('    p_num_workers	IN	NUMBER,');
11168                   l('    x_contact_pt_cur	IN OUT	HZ_PARTY_STAGE.StageCurTyp) IS ');
11169                   l('');
11170                   l('  BEGIN');
11171 
11172                   FOR ATTRS IN (SELECT a.ATTRIBUTE_ID,
11173                                        a.ATTRIBUTE_NAME,
11174                                        a.SOURCE_TABLE,
11175                                        a.CUSTOM_ATTRIBUTE_PROCEDURE,
11176                                        f.PROCEDURE_NAME,
11177                                        f.STAGED_ATTRIBUTE_COLUMN,
11178                                        to_number(substrb(STAGED_ATTRIBUTE_COLUMN, 3)) COLNUM
11179                                 FROM HZ_TRANS_ATTRIBUTES_VL a, HZ_TRANS_FUNCTIONS_VL f
11180                                 WHERE ENTITY_NAME = 'CONTACT_POINTS'
11181                                 AND nvl(f.ACTIVE_FLAG,'Y') = 'Y'
11182                                 AND f.ATTRIBUTE_ID = a.ATTRIBUTE_ID
11183                                 AND f.STAGED_FLAG='N'
11184                                 ORDER BY COLNUM) LOOP
11185                     IF cur_col_num<ATTRS.COLNUM THEN
11186                       FOR I in cur_col_num..ATTRS.COLNUM-1 LOOP
11187                         l_mincol_list(I) := 'N';
11188                         l_forall_list(I) := 'N';
11189                       END LOOP;
11190                     END IF;
11191                     cur_col_num:=ATTRS.COLNUM+1;
11192                     IF has_trx_context(ATTRS.PROCEDURE_NAME) THEN
11193                       l_forall_list(ATTRS.COLNUM) := ATTRS.PROCEDURE_NAME || '(H_TX'||ATTRS.COLNUM||'(I),NULL, ''' || ATTRS.ATTRIBUTE_NAME || ''',''CONTACT_POINTS'',''STAGE'')';
11194                     ELSE
11195                       l_forall_list(ATTRS.COLNUM) := ATTRS.PROCEDURE_NAME || '(H_TX'||ATTRS.COLNUM||'(I),NULL, ''' || ATTRS.ATTRIBUTE_NAME || ''',''CONTACT_POINTS'')';
11196                     END IF;
11197 
11198                     l_mincol_list(ATTRS.COLNUM) := 'N';
11199                     IF ATTRS.CUSTOM_ATTRIBUTE_PROCEDURE IS NULL THEN
11200                       l_select(idx) := 'cp.'||ATTRS.ATTRIBUTE_NAME;
11201                     ELSE
11202                         SELECT min(to_number(substrb(STAGED_ATTRIBUTE_COLUMN, 3))) INTO l_min_colnum
11203                         FROM HZ_TRANS_ATTRIBUTES_VL a, HZ_TRANS_FUNCTIONS_VL f
11204                         WHERE ENTITY_NAME = 'CONTACT_POINTS'
11205                         AND nvl(f.ACTIVE_FLAG,'Y') = 'Y'
11206                         AND f.ATTRIBUTE_ID = a.ATTRIBUTE_ID
11207                         AND a.ATTRIBUTE_NAME=ATTRS.ATTRIBUTE_NAME
11208                         AND f.STAGED_FLAG='N';
11209 
11210                         l_select(idx) := 'NULL';
11211                         IF ATTRS.colnum>l_min_colnum THEN
11212                           IF has_trx_context(ATTRS.PROCEDURE_NAME) THEN
11213                             l_forall_list(ATTRS.COLNUM) := ATTRS.PROCEDURE_NAME || '(H_TX'||l_min_colnum||'(I),NULL, ''' || ATTRS.ATTRIBUTE_NAME || ''',''CONTACT_POINTS'',''STAGE'')';
11214                           ELSE
11215                             l_forall_list(ATTRS.COLNUM) := ATTRS.PROCEDURE_NAME || '(H_TX'||l_min_colnum||'(I),NULL, ''' || ATTRS.ATTRIBUTE_NAME || ''',''CONTACT_POINTS'')';
11216                           END IF;
11217 
11218                           l_mincol_list(ATTRS.COLNUM) := 'N';
11219                         ELSE
11220                           l_mincol_list(ATTRS.COLNUM) := 'Y';
11221                           IF has_context(ATTRS.custom_attribute_procedure) THEN
11222                             l_custom_list(ATTRS.COLNUM) := ATTRS.custom_attribute_procedure || '(H_CONTACT_POINT_ID(I),''CONTACT_POINTS'','''||ATTRS.ATTRIBUTE_NAME|| ''', ''STAGE'')';
11223                           ELSE
11224                             l_custom_list(ATTRS.COLNUM) := ATTRS.custom_attribute_procedure || '(H_CONTACT_POINT_ID(I), ''CONTACT_POINTS'','''||ATTRS.ATTRIBUTE_NAME|| ''')';
11225                           END IF;
11226                         END IF;
11227                     END IF;
11228                     idx := idx+1;
11229                     -- VJN ADDED CODE FOR TRACKING CONDITION ATTRIBUTES AT THIS ENTITY LEVEL
11230                     IF HZ_WORD_CONDITIONS_PKG.is_a_cond_attrib( ATTRS.attribute_id)
11231                     THEN
11232                         l_cond_attrib_list(ATTRS.COLNUM) := ATTRS.attribute_id ;
11233                     END IF;
11234 
11235                   END LOOP;
11236 
11237                   IF idx=1 THEN
11238                     x_rebuild_cpt_idx:=FALSE;
11239                     l('    RETURN;');
11240                     l('  END;');
11241                   ELSE
11242                     x_rebuild_cpt_idx:=check_rebuild('CONTACT_POINTS');
11243                     IF cur_col_num<=255 THEN--bug 5977628
11244                       FOR I in cur_col_num..255 LOOP
11245                         l_mincol_list(I) := 'N';
11246                         l_forall_list(I) := 'N';
11247                       END LOOP;
11248                     END IF;
11249                     l('        open x_contact_pt_cur FOR');
11250                     l('           SELECT cp.CONTACT_POINT_ID ');
11251                     FOR I in 1..l_select.COUNT LOOP
11252                       l('                  ,' || l_select(I));
11253                     END LOOP;
11254                     l('           FROM HZ_CONTACT_POINTS cp, HZ_STAGED_CONTACT_POINTS s ');
11255                     l('           WHERE mod(s.PARTY_ID, p_num_workers) = p_worker_number ');
11256                     l('           AND cp.contact_point_id  =  s.contact_point_id ');
11257                     l('           AND cp.owner_table_id  =  s.PARTY_ID ');
11258                     l('           AND cp.OWNER_TABLE_NAME = ''HZ_PARTIES'' ');
11259                     l('           AND (cp.status is null OR cp.status = ''A'' or cp.status = ''I''); ');
11260                     l('  END;');
11261                   END IF;
11262                   l('');
11263                   l('  PROCEDURE update_stage_contact_pts ( ');
11264                   l('    p_contact_pt_cur    IN HZ_PARTY_STAGE.StageCurTyp) IS ');
11265                   l('  l_limit NUMBER := ' || g_batch_size || ';');
11266                   l('  H_DENORM_PARTY_ID NumberList ;');
11267                   l('  H_DENORM_VALUE CharList ;');
11268                   l('  H_ROW_OFFSET Number ;');
11269                   l(' l_last_fetch BOOLEAN := FALSE;');
11270                   l('');
11271                   l('  BEGIN');
11272                   IF idx=1 THEN
11273                     l('      RETURN;');
11274                     l('  END;');
11275                   ELSE
11276                     l('    LOOP');
11277                     l('      H_ROW_OFFSET := 1 ;');
11278                     l('      FETCH p_contact_pt_cur BULK COLLECT INTO');
11279                     l('        H_CONTACT_POINT_ID');
11280                     FOR I IN 1..255 LOOP
11281                       IF l_forall_list(I) <> 'N' THEN
11282                         l('         ,H_TX'||I);
11283                       END IF;
11284                     END LOOP;
11285                     l('      LIMIT l_limit;');
11286                     l('');
11287                     l('    IF p_contact_pt_cur%NOTFOUND THEN');
11288                     l('      l_last_fetch:=TRUE;');
11289                     l('    END IF;');
11290 
11291                     l('    IF H_CONTACT_POINT_ID.COUNT=0 AND l_last_fetch THEN');
11292                     l('      EXIT;');
11293                     l('    END IF;');
11294 
11295                     l('    FOR I in H_CONTACT_POINT_ID.FIRST..H_CONTACT_POINT_ID.LAST LOOP');
11296                      -- VJN INTRODUCED CODE FOR GENERATING THE POPULATION
11297                       -- OF THE GLOBAL CONDITION RECORD
11298 
11299                       l_idx := l_cond_attrib_list.FIRST ;
11300                       IF l_idx IS NOT NULL
11301                       THEN
11302                             l('----------- SETTING GLOBAL CONDITION RECORD AT THE CONTACT POINT LEVEL ---------');
11303                       END IF ;
11304 
11305 
11306                       WHILE l_cond_attrib_list.EXISTS(l_idx)
11307                       LOOP
11308 
11309                         l('     HZ_WORD_CONDITIONS_PKG.set_gbl_condition_rec ('||l_cond_attrib_list(l_idx)||','||'H_TX'||l_idx||'(I));');
11310                         l_idx := l_idx+1;
11311                        END LOOP;
11312 
11313                     FOR I IN 1..255 LOOP
11314                       IF l_forall_list(I) <> 'N' THEN
11315                         IF l_mincol_list(I) = 'Y' THEN
11316                           l('         H_TX'||I||'(I):='||l_custom_list(I)||';');
11317                         END IF;
11318                       END IF;
11319                     END LOOP;
11320 
11321                     FOR I IN 1..255 LOOP
11322                       IF l_forall_list(I) <> 'N' THEN
11323                         IF l_mincol_list(I) <> 'Y' THEN
11324                           l('         H_TX'||I||'(I):='||l_forall_list(I)||';');
11325                         END IF;
11326                       END IF;
11327                     END LOOP;
11328                     FOR I IN 1..255 LOOP
11329                       IF l_forall_list(I) <> 'N' THEN
11330                         IF l_mincol_list(I) = 'Y' THEN
11331                           l('         H_TX'||I||'(I):='||l_forall_list(I)||';');
11332                         END IF;
11333                       END IF;
11334                     END LOOP;
11335                     l('    END LOOP;');
11336 
11337                     l('    FORALL I in H_CONTACT_POINT_ID.FIRST..H_CONTACT_POINT_ID.LAST');
11338                     l('      UPDATE HZ_STAGED_CONTACT_POINTS SET');
11339                     FIRST:=TRUE;
11340                     FOR I IN 1..255 LOOP
11341                       IF l_forall_list(I) <> 'N' THEN
11342                           IF (FIRST) THEN
11343                 	       FIRST := false;
11344                                l('            TX'||I||'=decode(H_TX'||I||'(I),null,H_TX'||I||'(I),H_TX'||I||'(I)||'' '')');
11345                           ELSE
11346                                l('            ,TX'||I||'=decode(H_TX'||I||'(I),null,H_TX'||I||'(I),H_TX'||I||'(I)||'' '')');
11347                           END IF;
11348                       END IF;
11349                     END LOOP;
11350                       l('        WHERE CONTACT_POINT_ID = H_CONTACT_POINT_ID(I)');
11351 
11352                       -- ADD CODE FOR UPDATING HZ_STAGED_PARTIES IF THERE ARE ANY NEW CONTACT POINT DENORM ATTRIBUTES
11353                       IF get_missing_denorm_attrib_cols('CONTACT_POINTS') IS NOT NULL
11354                       THEN
11355                            l('RETURNING PARTY_ID, ');
11356                            l(get_missing_denorm_attrib_cols('CONTACT_POINTS'));
11357                            -- THIS BULK COLLECT WILL CHOSE THE PARTY ID COLUMNS OF THE ROWS THAT ARE UPDATED
11358                            -- AND UPDATE THESE PARTY IDS IN HZ_STAGED_PARTIES, BY APPENDING TO THE D_CPT COLUMNS
11359                            -- VALUES FROM THE NEW DENORM ATTRIBUTE COLUMNS
11360                             l('BULK COLLECT INTO  H_DENORM_PARTY_ID, H_DENORM_VALUE ;');
11361                             l('LOOP');
11362           		            l('BEGIN');
11363           			        l('   FORALL I IN H_ROW_OFFSET..H_DENORM_PARTY_ID.COUNT');
11364           			        l('           UPDATE HZ_STAGED_PARTIES');
11365           				    l('           SET D_CPT = D_CPT||'' ''||H_DENORM_VALUE(I)');
11366           				    l('           WHERE PARTY_ID = H_DENORM_PARTY_ID(I) AND D_CPT <> ''SYNC'' ;');
11367                             l('EXIT ;');
11368           			        l('EXCEPTION');
11369           			        l('WHEN OTHERS THEN');
11370           			        l('           H_ROW_OFFSET := H_ROW_OFFSET+SQL%ROWCOUNT;');
11371                             l('           UPDATE HZ_STAGED_PARTIES');
11372           				    l('           SET D_CPT = ''SYNC'' ');
11373           				    l('           WHERE PARTY_ID = H_DENORM_PARTY_ID(H_ROW_OFFSET) ;');
11374                             l('           H_ROW_OFFSET := H_ROW_OFFSET+1 ;');
11375           		            l('END ;');
11376                             l('END LOOP ;');
11377                       ELSE
11378                            l(';');
11379                       END IF ;
11380                       l('      IF l_last_fetch THEN');
11381                       l('        FND_CONCURRENT.AF_Commit;');
11382                       l('        EXIT;');
11383                       l('      END IF;');
11384                       l('      FND_CONCURRENT.AF_Commit;');
11385                       l('    END LOOP;');
11386                       l('  END;');
11387                   END IF;
11388 ELSE
11389                     log('Else block of code -- No new transformations exist' );
11390                     l('');
11391                     l('  PROCEDURE open_contact_pt_cursor( ');
11392                     l('    p_worker_number IN	NUMBER,');
11393                     l('    p_num_workers	IN	NUMBER,');
11394                     l('    x_contact_pt_cur	IN OUT	HZ_PARTY_STAGE.StageCurTyp) IS ');
11395                     l('');
11396                     l('  BEGIN');
11397                     l('    open x_contact_pt_cur FOR');
11398                     l('      SELECT cpt.PARTY_ID,');
11399                     l(get_missing_denorm_attrib_cols('CONTACT_POINTS'));
11400                     l('      FROM HZ_STAGED_CONTACT_POINTS cpt');
11401                     l('      WHERE mod(cpt.PARTY_ID, p_num_workers) = p_worker_number ; ');
11402                     l('  END;');
11403 
11404                     l('  PROCEDURE update_stage_contact_pts ( ');
11405                     l('    p_contact_pt_cur    IN HZ_PARTY_STAGE.StageCurTyp) IS ');
11406                     l('  l_limit NUMBER := ' || g_batch_size || ';');
11407                     l('  H_DENORM_PARTY_ID NumberList ;');
11408                     l('  H_DENORM_VALUE CharList ;');
11409                     l('  H_ROW_OFFSET Number ;');
11410                     l(' l_last_fetch BOOLEAN := FALSE;');
11411                     l('');
11412                     l('  BEGIN');
11413                     l('    LOOP');
11414                     l('      H_ROW_OFFSET := 1 ; ');
11415                     l('      FETCH p_contact_pt_cur BULK COLLECT INTO');
11416                     l('        H_DENORM_PARTY_ID, H_DENORM_VALUE');
11417                     l('      LIMIT l_limit;');
11418                     l('');
11419                     l('    IF p_contact_pt_cur%NOTFOUND THEN');
11420                     l('      l_last_fetch:=TRUE;');
11421                     l('    END IF;');
11422                     l('    IF H_DENORM_PARTY_ID.COUNT=0 AND l_last_fetch THEN');
11423                     l('      EXIT;');
11424                     l('    END IF;');
11425 
11426                     l('LOOP');
11427   		            l('BEGIN');
11428   			        l('   FORALL I IN H_ROW_OFFSET..H_DENORM_PARTY_ID.COUNT');
11429   			        l('           UPDATE HZ_STAGED_PARTIES');
11430   				    l('           SET D_CPT = D_CPT||'' ''||H_DENORM_VALUE(I)');
11431   				    l('           WHERE PARTY_ID = H_DENORM_PARTY_ID(I) AND D_CPT <> ''SYNC'' ;');
11432                     l('EXIT ;');
11433   			        l('EXCEPTION');
11434   			        l('WHEN OTHERS THEN');
11435   			        l('           H_ROW_OFFSET := H_ROW_OFFSET+SQL%ROWCOUNT;');
11436                     l('           UPDATE HZ_STAGED_PARTIES');
11437   				    l('           SET D_CPT = ''SYNC'' ');
11438   				    l('           WHERE PARTY_ID = H_DENORM_PARTY_ID(H_ROW_OFFSET) ;');
11439                     l('           H_ROW_OFFSET := H_ROW_OFFSET+1 ;');
11440   		            l('END ;');
11441                     l('END LOOP ;');
11442 
11443 
11444 
11445 
11446 
11447                     l('        IF l_last_fetch THEN');
11448                     l('          FND_CONCURRENT.AF_Commit;');
11449                     l('          EXIT;');
11450                     l('        END IF;');
11451                     l('        FND_CONCURRENT.AF_Commit;');
11452                     l('    END LOOP ; ');
11453                     l('  END ; ');
11454 END IF ;
11455 
11456 END;
11457 
11458 
11459 PROCEDURE create_btree_indexes (p_entity VARCHAR2)
11460  IS
11461   l_index_owner VARCHAR2(255);
11462 
11463   CURSOR indexes_reqd IS
11464     SELECT decode(a.entity_name,'PARTY','HZ_STAGED_PARTIES',
11465                   'PARTY_SITES','HZ_STAGED_PARTY_SITES','CONTACTS','HZ_STAGED_CONTACTS',
11466                   'CONTACT_POINTS','HZ_STAGED_CONTACT_POINTS')||'_N0'||substrb(staged_attribute_column,3) index_name,
11467            decode(a.entity_name,'PARTY','HZ_STAGED_PARTIES',
11468                   'PARTY_SITES','HZ_STAGED_PARTY_SITES','CONTACTS','HZ_STAGED_CONTACTS',
11469                   'CONTACT_POINTS','HZ_STAGED_CONTACT_POINTS') table_name,
11470            decode(a.entity_name,'PARTY','HZ_SRCH_PARTIES',
11471                   'PARTY_SITES','HZ_SRCH_PSITES','CONTACTS','HZ_SRCH_CONTACTS',
11472                   'CONTACT_POINTS','HZ_SRCH_CPTS')||'_N0'||substrb(staged_attribute_column,3) srch_index_name,
11473            decode(a.entity_name,'PARTY','HZ_SRCH_PARTIES',
11474                   'PARTY_SITES','HZ_SRCH_PSITES','CONTACTS','HZ_SRCH_CONTACTS',
11475                   'CONTACT_POINTS','HZ_SRCH_CPTS') srch_table_name,
11476            f.staged_attribute_column column_name
11477    FROM hz_trans_attributes_vl a, hz_trans_functions_vl f
11478    WHERE f.attribute_id = a.attribute_id
11479    AND f.index_required_flag = 'Y'
11480    AND a.entity_name = p_entity;
11481 
11482  CURSOR check_index(cp_index_name VARCHAR2,cp_table_name VARCHAR2) IS
11483    SELECT 1 FROM sys.all_indexes
11484    WHERE INDEX_NAME=cp_index_name
11485    AND TABLE_NAME=cp_table_name and owner = l_index_owner;
11486 
11487  l_index_name VARCHAR2(255);
11488  l_table_name VARCHAR2(255);
11489  l_srch_index_name VARCHAR2(255);
11490  l_srch_table_name VARCHAR2(255);
11491  l_column_name VARCHAR2(255);
11492 
11493  ar_index_tbsp VARCHAR2(255);
11494  l_storage_params VARCHAR2(2000);
11495  tmp NUMBER;
11496 
11497 l_status VARCHAR2(255);
11498 l_temp VARCHAR2(255);
11499 
11500 l_bool BOOLEAN;
11501 
11502 BEGIN
11503 
11504   l_bool := fnd_installation.GET_APP_INFO('AR',l_status,l_temp,l_index_owner);
11505 
11506   select index_tablespace
11507   into ar_index_tbsp
11508   from fnd_product_installations
11509   where application_id = '222';
11510 
11511   l_storage_params := 'LOGGING STORAGE (INITIAL 4K NEXT 1M MINEXTENTS 1 '||
11512                       'MAXEXTENTS unlimited PCTINCREASE 0 FREELIST GROUPS 4 '||
11513                       'FREELISTS 4) PCTFREE 10 INITRANS 4 MAXTRANS 255 '||
11514                       'COMPUTE STATISTICS TABLESPACE '||ar_index_tbsp;
11515 
11516   OPEN indexes_reqd;
11517   LOOP
11518     FETCH indexes_reqd INTO l_index_name, l_table_name,l_srch_index_name, l_srch_table_name, l_column_name;
11519     EXIT WHEN indexes_reqd%NOTFOUND;
11520 
11521     OPEN check_index(l_index_name,l_table_name);
11522     FETCH check_index INTO tmp;
11523     IF check_index%NOTFOUND THEN
11524       EXECUTE IMMEDIATE 'CREATE INDEX '||l_index_owner||'.'||l_index_name||' ON '||l_index_owner||'.'||l_table_name||'('||l_column_name||') '||
11525                         l_storage_params;
11526     END IF;
11527     CLOSE check_index;
11528 
11529     OPEN check_index(l_srch_index_name,l_srch_table_name);
11530     FETCH check_index INTO tmp;
11531     IF check_index%NOTFOUND THEN
11532       EXECUTE IMMEDIATE 'CREATE INDEX '||l_index_owner||'.'||l_srch_index_name||' ON '||l_index_owner||'.'||l_srch_table_name||'('||l_column_name||') '||
11533                         l_storage_params;
11534     END IF;
11535     CLOSE check_index;
11536   END LOOP;
11537   CLOSE indexes_reqd;
11538 END;
11539 
11540 FUNCTION has_trx_context(proc VARCHAR2) RETURN BOOLEAN IS
11541 
11542   l_sql VARCHAR2(255);
11543   l_entity VARCHAR2(255);
11544   l_procedure VARCHAR2(255);
11545   l_attribute VARCHAR2(255);
11546   c NUMBER;
11547   n NUMBER;
11548   l_custom BOOLEAN;
11549 
11550 BEGIN
11551   c := dbms_sql.open_cursor;
11552   l_sql := 'select ' || proc ||
11553            '(:attrval,:lang,:attr,:entity,:ctx) from dual';
11554   dbms_sql.parse(c,l_sql,2);
11555   DBMS_SQL.BIND_VARIABLE(c,':attrval','x');
11556   DBMS_SQL.BIND_VARIABLE(c,':lang','x');
11557   DBMS_SQL.BIND_VARIABLE(c,':attr','x');
11558   DBMS_SQL.BIND_VARIABLE(c,':entity','x');
11559   DBMS_SQL.BIND_VARIABLE(c,':ctx','x');
11560   n:=DBMS_SQL.execute(c);
11561   dbms_sql.close_cursor(c);
11562   RETURN TRUE;
11563 EXCEPTION
11564   WHEN OTHERS THEN
11565     dbms_sql.close_cursor(c);
11566     RETURN FALSE;
11567 END;
11568 
11569 FUNCTION has_context(proc VARCHAR2) RETURN BOOLEAN IS
11570 
11571   l_sql VARCHAR2(255);
11572   l_entity VARCHAR2(255);
11573   l_procedure VARCHAR2(255);
11574   l_attribute VARCHAR2(255);
11575   c NUMBER;
11576   n NUMBER;
11577   l_custom BOOLEAN;
11578 
11579 BEGIN
11580   c := dbms_sql.open_cursor;
11581   l_sql := 'select ' || proc ||
11582            '(:record_id,:entity,:attr,:ctx) from dual';
11583   dbms_sql.parse(c,l_sql,2);
11584   DBMS_SQL.BIND_VARIABLE(c,':record_id','x');
11585   DBMS_SQL.BIND_VARIABLE(c,':entity','x');
11586   DBMS_SQL.BIND_VARIABLE(c,':attr','x');
11587   DBMS_SQL.BIND_VARIABLE(c,':ctx','x');
11588   n:=DBMS_SQL.execute(c);
11589   dbms_sql.close_cursor(c);
11590   RETURN TRUE;
11591 EXCEPTION
11592   WHEN OTHERS THEN
11593     dbms_sql.close_cursor(c);
11594     RETURN FALSE;
11595 END;
11596 
11597 
11598 PROCEDURE verify_all_procs IS
11599 
11600   l_sql VARCHAR2(255);
11601   l_entity VARCHAR2(255);
11602   l_procedure VARCHAR2(255);
11603   l_attribute VARCHAR2(255);
11604   l_trans_name VARCHAR2(255);
11605   c NUMBER;
11606   l_custom BOOLEAN;
11607 BEGIN
11608   FOR FUNCS IN (SELECT PROCEDURE_NAME, a.ENTITY_NAME, a.ATTRIBUTE_NAME, f.TRANSFORMATION_NAME
11609                 FROM HZ_TRANS_FUNCTIONS_VL f, HZ_TRANS_ATTRIBUTES_VL a
11610                 WHERE a.ATTRIBUTE_ID = f.ATTRIBUTE_ID
11611                 AND nvl(f.ACTIVE_FLAG,'Y') = 'Y' )
11612     LOOP
11613         BEGIN
11614              l_custom := FALSE;
11615              l_entity := FUNCS.ENTITY_NAME;
11616              l_attribute := FUNCS.ATTRIBUTE_NAME;
11617              l_procedure := FUNCS.PROCEDURE_NAME;
11618              l_trans_name := FUNCS.TRANSFORMATION_NAME;
11619              c := dbms_sql.open_cursor;
11620              l_sql := 'select ' || FUNCS.PROCEDURE_NAME ||
11621                '(:attrval,:lang,:attr,:entity) from dual';
11622              dbms_sql.parse(c,l_sql,2);
11623              dbms_sql.close_cursor(c);
11624           EXCEPTION WHEN OTHERS THEN
11625                FND_MESSAGE.SET_NAME('AR', 'HZ_TRANS_PROC_ERROR1');
11626                FND_MESSAGE.SET_TOKEN('PROC' ,l_procedure);
11627                FND_MESSAGE.SET_TOKEN('ENTITY' ,l_entity);
11628                FND_MESSAGE.SET_TOKEN('ATTRIBUTE' ,l_attribute);
11629                FND_MESSAGE.SET_TOKEN('TRANS' ,l_trans_name);
11630                FND_MSG_PUB.ADD;
11631           END;
11632     END LOOP;
11633    FOR FUNCS IN (SELECT custom_attribute_procedure, ENTITY_NAME, ATTRIBUTE_NAME
11634                  FROM HZ_TRANS_ATTRIBUTES_VL a
11635                  WHERE source_table = 'CUSTOM' OR
11636                  custom_attribute_procedure is NOT NULL
11637                  AND EXISTS (select 1 from HZ_TRANS_FUNCTIONS_VL f
11638                              WHERE f.attribute_id = a.attribute_id
11639                              AND nvl(f.ACTIVE_FLAG,'Y') = 'Y'))
11640      LOOP
11641          BEGIN
11642               l_custom := TRUE;
11643               l_entity := FUNCS.ENTITY_NAME;
11644               l_attribute := FUNCS.ATTRIBUTE_NAME;
11645               l_procedure := FUNCS.custom_attribute_procedure;
11646               c := dbms_sql.open_cursor;
11647               l_sql := 'select ' || FUNCS.custom_attribute_procedure ||
11648                '(:record_id,:entity,:attr) from dual';
11649               dbms_sql.parse(c,l_sql,2);
11650               dbms_sql.close_cursor(c);
11651           EXCEPTION WHEN OTHERS THEN
11652                FND_MESSAGE.SET_NAME('AR', 'HZ_CUSTOM_PROC_ERROR1');
11653                FND_MESSAGE.SET_TOKEN('PROC' ,l_procedure);
11654                FND_MESSAGE.SET_TOKEN('ENTITY' ,l_entity);
11655                FND_MESSAGE.SET_TOKEN('ATTRIBUTE' ,l_attribute);
11656                FND_MSG_PUB.ADD;
11657           END;
11658     END LOOP;
11659 EXCEPTION
11660   WHEN OTHERS THEN
11661     dbms_sql.close_cursor(c);
11662     RAISE FND_API.G_EXC_ERROR;
11663 END ;
11664 
11665 
11666 
11667 /**
11668 * Procedure to write a message to the out NOCOPY file
11669 **/
11670 PROCEDURE out(
11671    message      IN      VARCHAR2,
11672    newline      IN      BOOLEAN DEFAULT TRUE) IS
11673 BEGIN
11674   IF message = 'NEWLINE' THEN
11675     FND_FILE.NEW_LINE(FND_FILE.OUTPUT, 1);
11676   ELSIF (newline) THEN
11677     FND_FILE.put_line(fnd_file.output,message);
11678   ELSE
11679     FND_FILE.put(fnd_file.output,message);
11680   END IF;
11681 END out;
11682 
11683 /**
11684 * Procedure to write a message to the log file
11685 **/
11686 PROCEDURE log(
11687    message      IN      VARCHAR2,
11688    newline      IN      BOOLEAN DEFAULT TRUE) IS
11689 BEGIN
11690 
11691   IF message = 'NEWLINE' THEN
11692    FND_FILE.NEW_LINE(FND_FILE.LOG, 1);
11693   ELSIF (newline) THEN
11694     FND_FILE.put_line(fnd_file.log,message);
11695   ELSE
11696     FND_FILE.put(fnd_file.log,message);
11697   END IF;
11698 END log;
11699 
11700 /**
11701 * Procedure to write a message to the out NOCOPY and log files
11702 **/
11703 PROCEDURE outandlog(
11704    message      IN      VARCHAR2,
11705    newline      IN      BOOLEAN DEFAULT TRUE) IS
11706 BEGIN
11707   out(message, newline);
11708   log(message, newline);
11709 END outandlog;
11710 
11711 /**
11712 * Function to fetch messages of the stack and log the error
11713 * Also returns the error
11714 **/
11715 FUNCTION logerror(SQLERRM VARCHAR2 DEFAULT NULL)
11716 RETURN VARCHAR2 IS
11717 
11718   l_msg_data VARCHAR2(2000);
11719 BEGIN
11720   FND_MSG_PUB.Reset;
11721 
11722   FOR I IN 1..FND_MSG_PUB.Count_Msg LOOP
11723     l_msg_data := l_msg_data || FND_MSG_PUB.Get(p_encoded => FND_API.G_FALSE );
11724   END LOOP;
11725   IF (SQLERRM IS NOT NULL) THEN
11726     l_msg_data := l_msg_data || SQLERRM;
11727   END IF;
11728   log(l_msg_data);
11729   RETURN l_msg_data;
11730 END logerror;
11731 
11732 FUNCTION wait_for_request(
11733     p_request_id NUMBER) RETURN VARCHAR2 IS
11734 
11735 uphase VARCHAR2(255);
11736 dphase VARCHAR2(255);
11737 ustatus VARCHAR2(255);
11738 dstatus VARCHAR2(255);
11739 message VARCHAR2(32000);
11740 
11741 l_bool BOOLEAN;
11742 
11743 BEGIN
11744   l_bool := FND_CONCURRENT.wait_for_request(p_request_id,
11745              60, 144000, uphase, ustatus, dphase, dstatus, message);
11746 
11747   IF dphase <> 'COMPLETE' and dstatus <> 'NORMAL' THEN
11748     return 'ERROR';
11749   ELSE
11750     return 'SUCCESS';
11751   END IF;
11752 END wait_for_request;
11753 
11754 BEGIN
11755     g_schema_name := hz_utility_v2pub.get_appsschemaname;
11756 
11757 
11758 END HZ_PARTY_STAGE;
11759