[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