[Home] [Help]
PACKAGE BODY: APPS.HZ_PARTY_STAGE
Source
1 PACKAGE BODY HZ_PARTY_STAGE AS
2 /*$Header: ARHDSTGB.pls 120.77.12000000.2 2007/04/19 10:31:07 rarajend ship $ */
3
4
5 g_batch_size NUMBER := 200;
6 g_num_stage_steps NUMBER := 3;
7 g_num_stage_new_steps NUMBER := 6;
8 g_schema_name VARCHAR2(30) ;
9
10 PROCEDURE l(str VARCHAR2) IS
11 BEGIN
12 HZ_GEN_PLSQL.add_line(str);
13 END;
14
15 PROCEDURE verify_all_procs;
16
17 PROCEDURE create_btree_indexes (p_entity VARCHAR2);
18
19 PROCEDURE log(
20 message IN VARCHAR2,
21 newline IN BOOLEAN DEFAULT TRUE);
22
23 PROCEDURE outandlog(
24 message IN VARCHAR2,
25 newline IN BOOLEAN DEFAULT TRUE);
26
27 FUNCTION logerror(SQLERRM VARCHAR2 DEFAULT NULL)
28 RETURN VARCHAR2;
29
30 PROCEDURE generate_map_proc (
31 p_entity IN VARCHAR2,
32 p_proc_name IN VARCHAR2,
33 p_command IN VARCHAR2
34 );
35
36 PROCEDURE gather_stats (
37 table_owner IN VARCHAR2,
38 table_name IN VARCHAR2
39 );
40
41 PROCEDURE generate_party_query_proc;
42
43 -- REPURI. Added the following 4 new proccedures for
44 -- open_sync_xxx_cursor query and sync_all_xxx API logic.
45 PROCEDURE generate_sync_party_query_proc;
46 PROCEDURE generate_sync_psite_query_proc;
47 PROCEDURE generate_sync_ct_query_proc;
48 PROCEDURE generate_sync_cpt_query_proc;
49
50 -- REPURI. Added the following 4 new proccedures for
51 -- open_bulk_imp_sync_xxx_cur query logic procedures.
52 -- Bug 4884735.
53 PROCEDURE gen_bulk_imp_sync_party_query;
54 PROCEDURE gen_bulk_imp_sync_psite_query;
55 PROCEDURE gen_bulk_imp_sync_ct_query;
56 PROCEDURE gen_bulk_imp_sync_cpt_query;
57
58 PROCEDURE generate_party_query_upd(x_rebuild_party_idx OUT NOCOPY BOOLEAN);
59 PROCEDURE generate_declarations;
60 PROCEDURE generate_ds_proc;
61 PROCEDURE generate_log;
62 PROCEDURE generate_ins_dqm_sync_err_rec;
63 PROCEDURE generate_contact_query_proc;
64 PROCEDURE generate_contact_query_upd(x_rebuild_contact_idx OUT NOCOPY BOOLEAN);
65 PROCEDURE generate_contact_pt_query_proc;
66 PROCEDURE generate_contact_pt_query_upd(x_rebuild_cpt_idx OUT NOCOPY BOOLEAN);
67 PROCEDURE generate_party_site_query_proc;
68 PROCEDURE generate_party_site_query_upd(x_rebuild_psite_idx OUT NOCOPY BOOLEAN);
69
70 FUNCTION wait_for_request(
71 p_request_id NUMBER) RETURN VARCHAR2;
72
73 FUNCTION has_trx_context(proc VARCHAR2) RETURN BOOLEAN;
74 FUNCTION has_context(proc VARCHAR2) RETURN BOOLEAN;
75 FUNCTION get_size(p_table_name VARCHAR2) RETURN NUMBER;
76
77 procedure create_pref (
78 p_ds_name VARCHAR2,
79 p_columns VARCHAR2) IS
80 BEGIN
81 log ('-----------------------------------------------------------');
82 log( 'In create_pref '); -- VJN ADDED
83 log ('length of p_columns is ' || length(p_columns) ); -- VJN ADDED
84 BEGIN
85 ad_ctx_ddl.drop_preference(p_ds_name);
86 EXCEPTION
87 WHEN OTHERS THEN
88 log('exception thrown while dropping preference for ' || p_ds_name );
89 null;
90 END;
91
92 -- Bug Fix for 4359525 ( This is a forward port for bug 4382012 originally reported on 11i.HZ.M )
93 -- Create preference only if there are any columns to be associated to the preference
94 IF length(p_columns) > 0 THEN
95 ad_ctx_ddl.create_preference(p_ds_name, 'MULTI_COLUMN_DATASTORE');
96 ad_ctx_ddl.set_attribute(p_ds_name,'columns',p_columns);
97 log('Preference successfully created for ' || p_ds_name );
98 ELSE
99 log('Preference ' || p_ds_name || ' not created since there are no associated columns');
100 END IF ;
101 END;
102
103 -- THIS WILL CREATE PREFERENCES FOR ALL THE DENORM ATTRIBUTES
104 -- AT THE DETAIL LEVEL ( PARTY SITES, CONTACTS, CONTACT POINTS )
105 -- AT EACH LEVEL, THE PREFERENCE WOULD BE USED TO STORE THE CONCATENATION
106 -- OF THE STAGING COLUMNS OF ALL ACTIVE TRANSFORMATIONS OF A DENORM ATTRIBUTE
107
108 PROCEDURE create_denorm_attribute_pref ( p_entity varchar2)
109 IS
110 concat_trfn varchar2(2000);
111 row_count number := 0 ;
112 BEGIN
113 log ('--------------------------------------');
114 log(' Calling create_denorm_attribute_pref for ' || p_entity);
115 IF p_entity = 'PARTY_SITES'
116 THEN
117 -- SET PREFERENCE FOR PARTY SITE DENORM ATTRIBUTES
118 FOR col_cur in
119 (
120 -- will get all staged attribute columns corresponding to active transformations
121 -- that are defined on party site denorm attributes
122 SELECT b.staged_attribute_column as attrib_column
123 from HZ_TRANS_ATTRIBUTES_VL a, hz_trans_functions_vl b
124 where a.entity_name = 'PARTY_SITES'
125 and nvl(a.denorm_flag,'N') = 'Y'
126 and a.attribute_id = b.attribute_id
127 and nvl( b.active_flag, 'Y') = 'Y'
128 and b.staged_attribute_table = 'HZ_STAGED_PARTY_SITES'
129 )
130 LOOP
131 row_count := row_count + 1 ;
132 IF row_count > 1
133 THEN
134 concat_trfn := concat_trfn || ' ' || col_cur.attrib_column ;
135 ELSE
136 concat_trfn := col_cur.attrib_column ;
137 END IF;
138
139 END LOOP ;
140
141 create_pref('DENORM_PS', concat_trfn);
142 ELSIF p_entity = 'CONTACTS'
143 THEN
144
145 -- SET PREFERENCE FOR CONTACTS DENORM ATTRIBUTES
146 FOR col_cur in
147 (
148 -- will get all staged attribute columns corresponding to active transformations
149 -- that are defined on contact denorm attributes
150 SELECT b.staged_attribute_column as attrib_column
151 from HZ_TRANS_ATTRIBUTES_VL a, hz_trans_functions_vl b
152 where a.entity_name = 'CONTACTS'
153 and nvl(a.denorm_flag,'N') = 'Y'
154 and a.attribute_id = b.attribute_id
155 and nvl( b.active_flag, 'Y') = 'Y'
156 and b.staged_attribute_table = 'HZ_STAGED_CONTACTS'
157 )
158 LOOP
159 row_count := row_count + 1 ;
160 IF row_count > 1
161 THEN
162 concat_trfn := concat_trfn || ' ' || col_cur.attrib_column ;
163 ELSE
164 concat_trfn := col_cur.attrib_column ;
165 END IF;
166
167 END LOOP ;
168
169 create_pref('DENORM_CT', concat_trfn);
170
171 ELSIF p_entity = 'CONTACT_POINTS'
172 THEN
173
174 -- SET PREFERENCE FOR CONTACT POINT DENORM ATTRIBUTES
175 FOR col_cur in
176 (
177 -- will get all staged attribute columns corresponding to active transformations
178 -- that are defined on contact point denorm attributes
179 SELECT b.staged_attribute_column as attrib_column
180 from HZ_TRANS_ATTRIBUTES_VL a, hz_trans_functions_vl b
181 where a.entity_name = 'CONTACT_POINTS'
182 and nvl(a.denorm_flag,'N') = 'Y'
183 and a.attribute_id = b.attribute_id
184 and nvl( b.active_flag, 'Y') = 'Y'
185 and b.staged_attribute_table = 'HZ_STAGED_CONTACT_POINTS'
186 )
187 LOOP
188 row_count := row_count + 1 ;
189 IF row_count > 1
190 THEN
191 concat_trfn := concat_trfn || ' ' || col_cur.attrib_column ;
192 ELSE
193 concat_trfn := col_cur.attrib_column ;
194 END IF;
195
196 END LOOP ;
197 create_pref('DENORM_CPT', concat_trfn);
198 END IF;
199
200 END;
201
202 -- WILL RETURN THE STAGING COLUMNS CORRESPONDING TO ALL ACTIVE DENORM ATTRIBUTES
203 -- THAT ARE NOT IN THE PREFERENCE, BY CONCATENATING THEM WITH A HARCODED || IN BETWEEN
204 FUNCTION get_missing_denorm_attrib_cols( p_entity varchar2)
205 RETURN VARCHAR2
206 IS
207 cols varchar2(2000);
208 concat_pref_cols varchar2(2000);
209 row_count number := 0 ;
210 BEGIN
211 log ('--------------------------------------');
212 IF p_entity = 'PARTY_SITES'
213 THEN
214 BEGIN
215 select prv_value into concat_pref_cols
216 from ctx_preference_values c
217 where prv_preference = 'DENORM_PS'
218 and prv_attribute = 'COLUMNS' ;
219
220 EXCEPTION WHEN OTHERS
221 THEN
222 log('Data not found for DENORM_PS in get_missing_denorm_attrib_cols');
223 concat_pref_cols := null ;
224 END ;
225
226 FOR col_cur in
227 (
228 SELECT b.staged_attribute_column as attrib_column
229 from HZ_TRANS_ATTRIBUTES_VL a, hz_trans_functions_vl b
230 where a.entity_name = 'PARTY_SITES'
231 and nvl(a.denorm_flag,'N') = 'Y'
232 and a.attribute_id = b.attribute_id
233 and nvl( b.active_flag, 'Y') = 'Y'
234 and b.staged_attribute_table = 'HZ_STAGED_PARTY_SITES'
235
236 )
237 LOOP
238 -- if any attribute columns do not exist in the preference
239 IF instr(concat_pref_cols || ' ', col_cur.attrib_column || ' ') = 0
240 THEN
241 row_count := row_count + 1 ;
242 IF row_count > 1
243 THEN
244 cols := cols || '||'' ''||' || col_cur.attrib_column ;
245 ELSE
246 cols := col_cur.attrib_column ;
247 END IF;
248 END IF ;
249 END LOOP ;
250 log('Missing denorm columns after concatenation for' || p_entity || '--' || cols );
251 RETURN cols ;
252 ELSIF p_entity = 'CONTACTS'
253 THEN
254 BEGIN
255 select prv_value into concat_pref_cols
256 from ctx_preference_values c
257 where prv_preference = 'DENORM_CT'
258 and prv_attribute = 'COLUMNS' ;
259
260 EXCEPTION WHEN OTHERS
261 THEN
262 log('Data not found for DENORM_CT in get_missing_denorm_attrib_cols');
263 concat_pref_cols := null ;
264 END ;
265
266 FOR col_cur in
267 (
268 SELECT b.staged_attribute_column as attrib_column
269 from HZ_TRANS_ATTRIBUTES_VL a, hz_trans_functions_vl b
270 where a.entity_name = 'CONTACTS'
271 and nvl(a.denorm_flag,'N') = 'Y'
272 and a.attribute_id = b.attribute_id
273 and nvl( b.active_flag, 'Y') = 'Y'
274 and b.staged_attribute_table = 'HZ_STAGED_CONTACTS'
275
276 )
277 LOOP
278 -- if any attribute columns do not exist in the preference
279 IF instr(concat_pref_cols || ' ', col_cur.attrib_column || ' ') = 0
280 THEN
281 row_count := row_count + 1 ;
282 IF row_count > 1
283 THEN
284 cols := cols || '||'' ''||' || col_cur.attrib_column ;
285 ELSE
286 cols := col_cur.attrib_column ;
287 END IF;
288 END IF ;
289 END LOOP ;
290 log('Missing denorm columns after concatenation for' || p_entity || '--' || cols );
291 RETURN cols ;
292
293 ELSIF p_entity = 'CONTACT_POINTS'
294 THEN
295 BEGIN
296 select prv_value into concat_pref_cols
297 from ctx_preference_values c
298 where prv_preference = 'DENORM_CPT'
299 and prv_attribute = 'COLUMNS' ;
300
301 EXCEPTION WHEN OTHERS
302 THEN
303 log('Data not found for DENORM_CPT in get_missing_denorm_attrib_cols');
304 concat_pref_cols := null ;
305 END ;
306
307 FOR col_cur in
308 (
309 SELECT b.staged_attribute_column as attrib_column
310 from HZ_TRANS_ATTRIBUTES_VL a, hz_trans_functions_vl b
311 where a.entity_name = 'CONTACT_POINTS'
312 and nvl(a.denorm_flag,'N') = 'Y'
313 and a.attribute_id = b.attribute_id
314 and nvl( b.active_flag, 'Y') = 'Y'
315 and b.staged_attribute_table = 'HZ_STAGED_CONTACT_POINTS'
316
317 )
318 LOOP
319 -- if any attribute columns do not exist in the preference
320 IF instr(concat_pref_cols || ' ', col_cur.attrib_column || ' ') = 0
321 THEN
322 row_count := row_count + 1 ;
323 IF row_count > 1
324 THEN
325 cols := cols || '||'' ''||' || col_cur.attrib_column ;
326 ELSE
327 cols := col_cur.attrib_column ;
328 END IF;
329 END IF ;
330 END LOOP ;
331 log('Missing denorm columns after concatenation for' || p_entity || '--' || cols );
332 RETURN cols ;
333 END IF ;
334
335 END;
336
337 FUNCTION new_transformations_exist (p_entity varchar2)
338 RETURN BOOLEAN
339 IS
340 l_count NUMBER := 0;
341 BEGIN
342 log ('--------------------------------------');
343 SELECT count(1) into l_count
344 from hz_trans_attributes_vl a
345 where a.entity_name = p_entity
346 and exists (
347 SELECT 1 from hz_trans_functions_vl f
348 where a.attribute_id = f.attribute_id
349 and nvl(f.ACTIVE_FLAG,'Y') = 'Y'
350 and primary_flag = 'Y'
351 AND NVL(STAGED_FLAG,'N') ='N');
352 IF l_count > 0
353 THEN
354 log('There are new transformations that have been created for ' || p_entity );
355 RETURN TRUE ;
356 ELSE
357 log('No new transformations have been created for ' || p_entity );
358 RETURN FALSE ;
359 END IF ;
360 END;
361
362
363 PROCEDURE delete_existing_data IS
364
365 l_owner VARCHAR2(255);
366 l_status VARCHAR2(255);
367 l_owner1 VARCHAR2(255);
368 l_temp VARCHAR2(255);
369 BEGIN
370 IF (fnd_installation.GET_APP_INFO('AR',l_status,l_temp,l_owner1)) THEN
371 select owner into l_owner from sys.all_objects
372 where object_name = 'HZ_STAGED_PARTIES' and OBJECT_TYPE = 'TABLE' and owner = l_owner1;
373 END IF;
374 log('Deleting existing staged data');
375 log('Truncating HZ_STAGED_PARTIES .. ', FALSE);
376 EXECUTE IMMEDIATE 'TRUNCATE TABLE '||l_owner||'.HZ_STAGED_PARTIES';
377 log('Done');
378
379 log('Truncating HZ_STAGED_PARTY_SITES .. ', FALSE);
380 EXECUTE IMMEDIATE 'TRUNCATE TABLE '||l_owner||'.HZ_STAGED_PARTY_SITES';
381 log('Done');
382
383 log('Truncating HZ_STAGED_CONTACTS .. ', FALSE);
384 EXECUTE IMMEDIATE 'TRUNCATE TABLE '||l_owner||'.HZ_STAGED_CONTACTS';
385 log('Done');
386
387 log('Truncating HZ_STAGED_CONTACT_POINTS .. ', FALSE);
388 EXECUTE IMMEDIATE 'TRUNCATE TABLE '||l_owner||'.HZ_STAGED_CONTACT_POINTS';
389 log('Done');
390
391 log('Attempting to truncate HZ_DQM_SYNC_INTERFACE ..',FALSE);
392 BEGIN
393 EXECUTE IMMEDIATE 'TRUNCATE TABLE '||l_owner||'.hz_dqm_sync_interface';
394 log('Done Successfully');
395 EXCEPTION
396 WHEN OTHERS THEN
397 log('Lock on table. Unable to truncate');
398 END;
399
400 END;
401
402 PROCEDURE generate_map_pkg_nolog IS
403 BEGIN
404 HZ_GEN_PLSQL.new('HZ_STAGE_MAP_TRANSFORM', 'PACKAGE BODY');
405 l('CREATE OR REPLACE PACKAGE BODY HZ_STAGE_MAP_TRANSFORM AS');
409 generate_log;
406
407 generate_declarations;
408 generate_ds_proc;
410 generate_ins_dqm_sync_err_rec;
411 generate_party_query_proc;
412 generate_contact_query_proc;
413 generate_contact_pt_query_proc;
414 generate_party_site_query_proc;
415
416 -- REPURI. Added calls to the following 4 new proccedures for
417 -- open_sync_xxx_cursor query and sync_all_xxx API logic.
418
419 generate_sync_party_query_proc;
420 generate_sync_psite_query_proc;
421 generate_sync_ct_query_proc;
422 generate_sync_cpt_query_proc;
423
424 -- REPURI. Added calls to the following 4 new proccedures for
425 -- open_bulk_imp_sync_xxx_cur query logic.
426 -- Bug 4884735.
427
428 gen_bulk_imp_sync_party_query;
429 gen_bulk_imp_sync_psite_query;
430 gen_bulk_imp_sync_ct_query;
431 gen_bulk_imp_sync_cpt_query;
432
433 l('END;');
434
435 HZ_GEN_PLSQL.compile_code;
436 END;
437
438 PROCEDURE get_datastore_cols (
439 entity IN VARCHAR2,
440 pref_cols OUT NOCOPY VARCHAR2,
441 proc_cols OUT NOCOPY VARCHAR2,
442 fetch_cols OUT NOCOPY VARCHAR2) IS
443
444 FUNCSF BOOLEAN := FALSE;
445 EXTRAF BOOLEAN := TRUE;
446 PREFF BOOLEAN := TRUE;
447
448 prefattrs VARCHAR2(2000);
449 prefcols VARCHAR2(500);
450 extracols VARCHAR2(2000);
451 fetchcols VARCHAR2(2000);
452
453 limit NUMBER := 450;
454
455 CURSOR check_ds_misc_tx(p_stg_col varchar2) IS
456 select 1 from ctx_preference_values
457 where prv_preference =
458 decode(entity,'PARTY','HZ_PARTY_DS',
459 'PARTY_SITES','HZ_PARTY_SITE_DS',
460 'CONTACTS','HZ_CONTACT_DS',
461 'CONTACT_POINTS','HZ_CONTACT_POINT_DS',
462 'NOMATCH')
463 AND prv_owner = g_schema_name
464 AND prv_attribute='COLUMNS'
465 AND (upper(prv_value) like '%'||p_stg_col||' %'
466 OR upper(prv_value) like '%'||p_stg_col||'||%');
467
468 CURSOR check_any_tx(p_ATTRIBUTE_ID NUMBER) IS
469 SELECT 1 FROM hz_trans_functions_vl f
470 where f.attribute_id = p_attribute_id
471 and nvl(f.ACTIVE_FLAG,'Y') = 'Y'
472 and primary_flag = 'Y'
473 AND NVL(STAGED_FLAG,'N') ='Y';
474
475 tmp NUMBER;
476 BEGIN
477 log('-------------------------------') ; -- VJN ADDED
478 log('Inside procedure get_datastore_cols '); -- VJN ADDED
479
480 -- Note: For creating preferences in intermedia, using the multicolumn datastore approach
481 -- the length of the string that connotes the concatenation of the attributes
482 -- cannot exceed 500 bytes. In other words, limit = the max allowed length of the actual concatenation
483 -- of the attributes. So, limit + length of other strings, that are part of the pref value <= 500
484
485 -- changed this from 300 to 275, since the denorm part of the party preference itself takes 215
486 IF entity = 'PARTY' THEN
487 limit := 275 ;
488 END IF;
489
490 prefcols := '';
491 FOR ATTRS IN (
492 SELECT ATTRIBUTE_ID
493 FROM HZ_TRANS_ATTRIBUTES_VL a
494 WHERE ENTITY_NAME = entity
495 AND TEMP_SECTION IS NULL
496 ORDER BY ATTRIBUTE_ID) LOOP
497
498 prefattrs := '';
499 FUNCSF:=FALSE;
500 FOR FUNCS IN (
501 SELECT STAGED_ATTRIBUTE_COLUMN
502 FROM HZ_TRANS_FUNCTIONS_VL f
503 WHERE ATTRIBUTE_ID = ATTRS.ATTRIBUTE_ID
504 AND nvl(f.ACTIVE_FLAG,'Y') = 'Y'
505 AND nvl(f.PRIMARY_FLAG,'Y') = 'Y') LOOP
506
507 FUNCSF:=TRUE;
508
509 prefattrs := prefattrs||'||'||FUNCS.STAGED_ATTRIBUTE_COLUMN;
510 END LOOP;
511
512 IF FUNCSF THEN
513 IF lengthb(prefcols)+lengthb(prefattrs)+5>limit THEN
514 IF EXTRAF THEN
515 extracols:=replace(substrb(prefattrs,3),'||',',');
516 fetchcols:='''<A'||ATTRS.ATTRIBUTE_ID||'>''||rec.'||replace(substrb(prefattrs,3),'||','||rec.')||'||''</A'||ATTRS.ATTRIBUTE_ID||'>''';
517 EXTRAF:=FALSE;
518 ELSE
519 extracols:=extracols||','||replace(substrb(prefattrs,3),'||',',');
520 fetchcols:=fetchcols||'||'||'''<A'||ATTRS.ATTRIBUTE_ID||'>''||rec.'||replace(substrb(prefattrs,3),'||','||rec.')||'||''</A'||ATTRS.ATTRIBUTE_ID||'>''';
521 END IF;
522 ELSE
523 IF PREFF THEN
524 prefcols := substrb(prefattrs,3)||' A'||ATTRS.ATTRIBUTE_ID;
525 PREFF:=FALSE;
526 ELSE
527 prefcols := prefcols||','||substrb(prefattrs,3)||' A'||ATTRS.ATTRIBUTE_ID;
528 END IF;
529 END IF;
530 END IF;
531 END LOOP;
532
533
534 log('In get_datastore_cols before appending ctxsys procedure sections --- length of prefcols = ' || length(prefcols) ); -- VJN ADDED
535
536 IF entity = 'PARTY' THEN
537 prefcols := prefcols||',decode(D_PS,''SYNC'',ctxsys.HZDQM.dps(party_id),D_PS) D_PS, decode(D_CT,''SYNC'',ctxsys.HZDQM.dct(party_id),D_CT) D_CT,decode(D_CPT,''SYNC'',ctxsys.HZDQM.dcpt(party_id),D_CPT) D_CPT';
538 END IF;
539 IF entity = 'PARTY' THEN
540 prefcols := prefcols||',STATUS';
541 ELSIF entity = 'CONTACT_POINTS' THEN
542 prefcols := prefcols||',CONTACT_POINT_TYPE';
543 END IF;
544 IF entity = 'PARTY' THEN
545 prefcols := prefcols||',ctxsys.HZDQM.mp(ROWID) MS';
546 ELSIF entity = 'PARTY_SITES' THEN
547 prefcols := prefcols||',ctxsys.HZDQM.mps(ROWID) MS';
551 prefcols := prefcols||',ctxsys.HZDQM.mcpt(ROWID) MS';
548 ELSIF entity = 'CONTACTS' THEN
549 prefcols := prefcols||',ctxsys.HZDQM.mct(ROWID) MS';
550 ELSIF entity = 'CONTACT_POINTS' THEN
552 END IF;
553
554 IF extracols IS NOT NULL THEN
555 EXTRAF := FALSE;
556 ELSE
557 EXTRAF := TRUE;
558 END IF;
559
560 FOR ATTRS IN (
561 SELECT ATTRIBUTE_ID, TEMP_SECTION
562 FROM HZ_TRANS_ATTRIBUTES_VL a
563 WHERE ENTITY_NAME = entity
564 ORDER BY ATTRIBUTE_ID) LOOP
565 prefattrs := '';
566 FUNCSF:=FALSE;
567 FOR FUNCS IN (
568 SELECT STAGED_ATTRIBUTE_COLUMN
569 FROM HZ_TRANS_FUNCTIONS_VL f
570 WHERE ATTRIBUTE_ID = ATTRS.ATTRIBUTE_ID
571 AND nvl(f.ACTIVE_FLAG,'Y') = 'Y'
572 AND nvl(f.PRIMARY_FLAG,'Y') = 'Y') LOOP
573
574 IF ATTRS.TEMP_SECTION IS NULL THEN
575 OPEN check_any_tx(ATTRS.ATTRIBUTE_ID);
576 FETCH check_any_tx INTO tmp;
577 IF check_any_tx%FOUND THEN
578 CLOSE check_any_tx;
579 OPEN check_ds_misc_tx(FUNCS.STAGED_ATTRIBUTE_COLUMN);
580 FETCH check_ds_misc_tx INTO tmp;
581 IF check_ds_misc_tx%NOTFOUND THEN
582 IF instrb(extracols,FUNCS.STAGED_ATTRIBUTE_COLUMN) < 1 THEN
583 FUNCSF:=TRUE;
584 prefattrs := prefattrs||'||'||FUNCS.STAGED_ATTRIBUTE_COLUMN;
585 END IF;
586 END IF;
587 CLOSE check_ds_misc_tx;
588 ELSE
589 CLOSE check_any_tx;
590 END IF;
591
592 ELSE
593 FUNCSF:=TRUE;
594 prefattrs := prefattrs||'||'||FUNCS.STAGED_ATTRIBUTE_COLUMN;
595 END IF;
596 END LOOP;
597
598 IF FUNCSF THEN
599 IF EXTRAF THEN
600 extracols:=replace(substrb(prefattrs,3),'||',',');
601 fetchcols:='''<'||nvl(ATTRS.TEMP_SECTION,'A'||ATTRS.ATTRIBUTE_ID)||'>''||rec.'||replace(substrb(prefattrs,3),'||','||rec.')||'||''</'||nvl(ATTRS.TEMP_SECTION,'A'||ATTRS.ATTRIBUTE_ID)||'>''';
602 -- extracols := '''<'||nvl(ATTRS.TEMP_SECTION,'A'||ATTRS.ATTRIBUTE_ID)||'>'''||prefattrs||'||''</'||nvl(ATTRS.TEMP_SECTION,'A'||ATTRS.ATTRIBUTE_ID)||'>''';
603 EXTRAF:=FALSE;
604 ELSE
605 extracols:=extracols||','||replace(substrb(prefattrs,3),'||',',');
606 fetchcols:=fetchcols||'||'||'''<'||nvl(ATTRS.TEMP_SECTION,'A'||ATTRS.ATTRIBUTE_ID)||'>''||rec.'||replace(substrb(prefattrs,3),'||','||rec.')||'||''</'||nvl(ATTRS.TEMP_SECTION,'A'||ATTRS.ATTRIBUTE_ID)||'>''';
607 -- extracols := extracols||'||'||'''<'||nvl(ATTRS.TEMP_SECTION,'A'||ATTRS.ATTRIBUTE_ID)||'>'''||prefattrs||'||''</'||nvl(ATTRS.TEMP_SECTION,'A'||ATTRS.ATTRIBUTE_ID)||'>''';
608 END IF;
609 END IF;
610 END LOOP;
611
612
613 pref_cols := prefcols;
614 proc_cols := extracols;
615 fetch_cols := fetchcols;
616
617 exception
618 when others then
619 log('Exception raised in get_datastore_cols for ' || entity ); -- VJN ADDED
620 log('Error Message is ' || SQLERRM ); -- VJN ADDED
621 RAISE;
622 END;
623
624
625 PROCEDURE generate_map_pkg IS
626 BEGIN
627 log('Generating package body for HZ_STAGE_MAP_TRANSFORM');
628 HZ_GEN_PLSQL.new('HZ_STAGE_MAP_TRANSFORM', 'PACKAGE BODY');
629 l('CREATE OR REPLACE PACKAGE BODY HZ_STAGE_MAP_TRANSFORM AS');
630
631 generate_declarations;
632 generate_ds_proc;
633 generate_log;
634 generate_ins_dqm_sync_err_rec;
635 generate_party_query_proc;
636 generate_contact_query_proc;
637 generate_contact_pt_query_proc;
638 generate_party_site_query_proc;
639
640 -- REPURI. Added calls to the following 4 new proccedures for
641 -- open_sync_xxx_cursor query and sync_all_xxx API logic.
642
643 generate_sync_party_query_proc;
644 generate_sync_psite_query_proc;
645 generate_sync_ct_query_proc;
646 generate_sync_cpt_query_proc;
647
648 -- REPURI. Added calls to the following 4 new proccedures for
649 -- open_bulk_imp_sync_xxx_cur query logic.
650 -- Bug 4884735.
651
652 gen_bulk_imp_sync_party_query;
653 gen_bulk_imp_sync_psite_query;
654 gen_bulk_imp_sync_ct_query;
655 gen_bulk_imp_sync_cpt_query;
656
657 l('END;');
658
659 log('Compiling package body .. ', false);
660 HZ_GEN_PLSQL.compile_code;
661 log('Done');
662 END;
663
664 PROCEDURE set_misc (p_entity VARCHAR2) IS
665 CURSOR check_ds_misc_proc(p_attr_id NUMBER) IS
666 select 1 from ctx_preference_values
667 where prv_preference =
668 decode(p_entity,'PARTY','HZ_PARTY_DS',
669 'PARTY_SITES','HZ_PARTY_SITE_DS',
670 'CONTACTS','HZ_CONTACT_DS',
671 'CONTACT_POINTS','HZ_CONTACT_POINT_DS',
672 'NOMATCH')
673 AND prv_owner = g_schema_name
674 AND prv_attribute='COLUMNS'
675 AND upper(prv_value) like '% A'||p_attr_id||',%';
676 tmp NUMBER;
677 l_next_misc NUMBER;
678 BEGIN
679 BEGIN
680 SELECT max(to_number(substrb(temp_section,2)))
681 INTO l_next_misc
682 from hz_trans_attributes_vl a
683 where a.entity_name = p_entity
684 and a.temp_section IS NOT NULL;
685 IF l_next_misc is null THEN
686 l_next_misc := 0;
687 END IF;
688 EXCEPTION
692
689 WHEN NO_DATA_FOUND THEN
690 l_next_misc := 0;
691 END;
693 FOR ATTRS IN (
694 SELECT ATTRIBUTE_ID
695 from hz_trans_attributes_vl a
696 where a.entity_name = p_entity
697 and exists (
698 SELECT 1 from hz_trans_functions_vl f
699 where a.attribute_id = f.attribute_id
700 and nvl(f.ACTIVE_FLAG,'Y') = 'Y'
701 and primary_flag = 'Y'
702 AND NVL(STAGED_FLAG,'N') ='N')
703 AND TEMP_SECTION IS NULL) LOOP
704 OPEN check_ds_misc_proc(ATTRS.ATTRIBUTE_ID);
705 FETCH check_ds_misc_proc INTO tmp;
706 IF check_ds_misc_proc%NOTFOUND THEN
707 l_next_misc:=l_next_misc+1;
708
709 UPDATE HZ_TRANS_ATTRIBUTES_B
710 SET TEMP_SECTION='M'||l_next_misc
711 WHERE ATTRIBUTE_ID = ATTRS.ATTRIBUTE_ID;
712 END IF;
713 CLOSE check_ds_misc_proc;
714 END LOOP;
715 END;
716
717 PROCEDURE generate_map_upd_pkg(
718 x_rebuild_party_idx OUT NOCOPY BOOLEAN,
719 x_rebuild_psite_idx OUT NOCOPY BOOLEAN,
720 x_rebuild_contact_idx OUT NOCOPY BOOLEAN,
721 x_rebuild_cpt_idx OUT NOCOPY BOOLEAN) IS
722
723 BEGIN
724
725 log('Generating package body for HZ_STAGE_MAP_TRANSFORM_UPD');
726 HZ_GEN_PLSQL.new('HZ_STAGE_MAP_TRANSFORM_UPD', 'PACKAGE BODY');
727 l('CREATE OR REPLACE PACKAGE BODY HZ_STAGE_MAP_TRANSFORM_UPD AS');
728
729 generate_declarations;
730 generate_party_query_upd(x_rebuild_party_idx);
731 generate_contact_query_upd(x_rebuild_psite_idx);
732 generate_party_site_query_upd(x_rebuild_contact_idx);
733 generate_contact_pt_query_upd(x_rebuild_cpt_idx);
734
735 l('END;');
736 log('Compiling package body .. ', false);
737 HZ_GEN_PLSQL.compile_code;
738 log('Done');
739
740 IF NOT x_rebuild_party_idx THEN
741 set_misc('PARTY');
742 END IF;
743 IF NOT x_rebuild_psite_idx THEN
744 set_misc('PARTY_SITES');
745 END IF;
746 IF NOT x_rebuild_contact_idx THEN
747 set_misc('CONTACTS');
748 END IF;
749 IF NOT x_rebuild_cpt_idx THEN
750 set_misc('CONTACT_POINTS');
751 END IF;
752 generate_map_pkg;
753 END;
754
755 PROCEDURE add_section (
756 p_dsname VARCHAR2,
757 p_attr VARCHAR2,
758 p_stype VARCHAR2) IS
759 BEGIN
760 IF p_stype = 'ZONE' THEN
761 ctx_ddl.add_zone_section(p_dsname, p_attr,p_attr);
762 ELSE
763 ctx_ddl.add_field_section(p_dsname, p_attr,p_attr,TRUE);
764 END IF;
765 END;
766
767
768 PROCEDURE generate_datastore_prefs(p_entity VARCHAR2) IS
769 CURSOR c_num_attrs(cp_entity VARCHAR2) IS
770 SELECT COUNT(1)
771 FROM HZ_TRANS_ATTRIBUTES_VL a
772 WHERE ENTITY_NAME = cp_entity
773 AND EXISTS (SELECT 1 FROM HZ_TRANS_FUNCTIONS_VL f
774 WHERE f.ATTRIBUTE_ID = a.ATTRIBUTE_ID
775 AND nvl(f.ACTIVE_FLAG,'Y') = 'Y'
776 AND nvl(f.PRIMARY_FLAG,'Y') = 'Y');
777
778 CURSOR c_attrs(cp_entity VARCHAR2) IS
779 SELECT 'A'||ATTRIBUTE_ID
780 FROM HZ_TRANS_ATTRIBUTES_VL a
781 WHERE ENTITY_NAME = cp_entity
782 AND EXISTS (SELECT 1 FROM HZ_TRANS_FUNCTIONS_VL f
783 WHERE f.ATTRIBUTE_ID = a.ATTRIBUTE_ID
784 AND nvl(f.ACTIVE_FLAG,'Y') = 'Y'
785 AND nvl(f.PRIMARY_FLAG,'Y') = 'Y');
786
787 l_cnt NUMBER;
788 l_stype VARCHAR2(255);
789 l_attr VARCHAR2(255);
790
791 pref_cols VARCHAR2(1000);
792 proc_cols VARCHAR2(2000);
793 tmp VARCHAR2(2000);
794
795 BEGIN
796 log('-------------------------------------');
797 log('In generate_datastore_prefs for ' || p_entity);
798 log('Trying to update the temp_section of HZ_TRANS_ATTRIBUTES_B for ' || p_entity);
799 BEGIN
800 IF p_entity='PARTY' THEN
801 ctx_ddl.drop_section_group(g_schema_name || '.HZ_DQM_PARTY_GRP');
802 UPDATE HZ_TRANS_ATTRIBUTES_B set TEMP_SECTION=NULL
803 WHERE ENTITY_NAME='PARTY';
804 END IF;
805
806 IF p_entity='PARTY_SITES' THEN
807 ctx_ddl.drop_section_group(G_SCHEMA_NAME || '.HZ_DQM_PS_GRP');
808 UPDATE HZ_TRANS_ATTRIBUTES_B set TEMP_SECTION=NULL
809 WHERE ENTITY_NAME='PARTY_SITES';
810 END IF;
811
812 IF p_entity='CONTACTS' THEN
813 ctx_ddl.drop_section_group(G_SCHEMA_NAME || '.HZ_DQM_CONTACT_GRP');
814 UPDATE HZ_TRANS_ATTRIBUTES_B set TEMP_SECTION=NULL
815 WHERE ENTITY_NAME='CONTACTS';
816 END IF;
817
818 IF p_entity='CONTACT_POINTS' THEN
819 ctx_ddl.drop_section_group(G_SCHEMA_NAME || '.HZ_DQM_CPT_GRP');
820 UPDATE HZ_TRANS_ATTRIBUTES_B set TEMP_SECTION=NULL
821 WHERE ENTITY_NAME='CONTACT_POINTS';
822 END IF;
823 log('Update of HZ_TRANS_ATTRIBUTES_B successful for ' || p_entity);
824 EXCEPTION
825 WHEN OTHERS THEN
826 NULL;
827 END;
828
829 IF p_entity='PARTY' THEN
830 log('Creating party_ds..',FALSE);
831 ctx_ddl.create_section_group(G_SCHEMA_NAME || '.HZ_DQM_PARTY_GRP','BASIC_SECTION_GROUP');
832 OPEN c_num_attrs('PARTY');
833 FETCH c_num_attrs INTO l_cnt;
834 CLOSE c_num_attrs;
835 l_cnt := l_cnt+4;
836 IF l_cnt>54 THEN
837 l_stype := 'ZONE';
838 ELSE
839 l_stype := 'FIELD';
840 END IF;
844 add_section(G_SCHEMA_NAME || '.HZ_DQM_PARTY_GRP','STATUS',l_stype);
841 add_section(G_SCHEMA_NAME || '.HZ_DQM_PARTY_GRP','D_PS',l_stype);
842 add_section(G_SCHEMA_NAME || '.HZ_DQM_PARTY_GRP','D_CT',l_stype);
843 add_section(G_SCHEMA_NAME || '.HZ_DQM_PARTY_GRP','D_CPT',l_stype);
845 OPEN c_attrs('PARTY');
846 LOOP
847 FETCH c_attrs INTO l_attr;
848 EXIT WHEN c_attrs%NOTFOUND;
849 add_section(G_SCHEMA_NAME || '.HZ_DQM_PARTY_GRP',l_attr,l_stype);
850 END LOOP;
851 CLOSE c_attrs;
852 IF l_stype='FIELD' THEN
853 FOR I in 1..(64-l_cnt) LOOP
854 add_section(G_SCHEMA_NAME || '.HZ_DQM_PARTY_GRP','M'||I,l_stype);
855 END LOOP;
856 ELSE
857 FOR I in 1..(255-l_cnt) LOOP
858 add_section(G_SCHEMA_NAME || '.HZ_DQM_PARTY_GRP','M'||I,l_stype);
859 END LOOP;
860 END IF;
861
862
863 END IF;
864
865 IF p_entity='PARTY_SITES' THEN
866 log('Creating party_site_ds..',FALSE);
867 ctx_ddl.create_section_group(G_SCHEMA_NAME || '.HZ_DQM_PS_GRP','BASIC_SECTION_GROUP');
868 OPEN c_num_attrs('PARTY_SITES');
869 FETCH c_num_attrs INTO l_cnt;
870 CLOSE c_num_attrs;
871 l_cnt := l_cnt;
872 IF l_cnt>54 THEN
873 l_stype := 'ZONE';
874 ELSE
875 l_stype := 'FIELD';
876 END IF;
877 OPEN c_attrs('PARTY_SITES');
878 LOOP
879 FETCH c_attrs INTO l_attr;
880 EXIT WHEN c_attrs%NOTFOUND;
881 add_section(G_SCHEMA_NAME || '.HZ_DQM_PS_GRP',l_attr,l_stype);
882 END LOOP;
883 CLOSE c_attrs;
884 IF l_stype='FIELD' THEN
885 FOR I in 1..(64-l_cnt) LOOP
886 add_section(G_SCHEMA_NAME || '.HZ_DQM_PS_GRP','M'||I,l_stype);
887 END LOOP;
888 ELSE
889 FOR I in 1..(255-l_cnt) LOOP
890 add_section(G_SCHEMA_NAME || '.HZ_DQM_PS_GRP','M'||I,l_stype);
891 END LOOP;
892 END IF;
893
894 END IF;
895
896 IF p_entity='CONTACTS' THEN
897 log('Creating contact_ds..',FALSE);
898 ctx_ddl.create_section_group(G_SCHEMA_NAME || '.HZ_DQM_CONTACT_GRP','BASIC_SECTION_GROUP');
899 OPEN c_num_attrs('CONTACTS');
900 FETCH c_num_attrs INTO l_cnt;
901 CLOSE c_num_attrs;
902 l_cnt := l_cnt;
903 IF l_cnt>64 THEN
904 l_stype := 'ZONE';
905 ELSE
906 l_stype := 'FIELD';
907 END IF;
908 OPEN c_attrs('CONTACTS');
909 LOOP
910 FETCH c_attrs INTO l_attr;
911 EXIT WHEN c_attrs%NOTFOUND;
912 add_section(G_SCHEMA_NAME || '.HZ_DQM_CONTACT_GRP',l_attr,l_stype);
913 END LOOP;
914 CLOSE c_attrs;
915 IF l_stype='FIELD' THEN
916 FOR I in 1..(64-l_cnt) LOOP
917 add_section(G_SCHEMA_NAME || '.HZ_DQM_CONTACT_GRP','M'||I,l_stype);
918 END LOOP;
919 ELSE
920 FOR I in 1..(255-l_cnt) LOOP
921 add_section(G_SCHEMA_NAME || '.HZ_DQM_CONTACT_GRP','M'||I,l_stype);
922 END LOOP;
923 END IF;
924
925 END IF;
926
927 IF p_entity='CONTACT_POINTS' THEN
928 log('Creating contact_pt_ds..',FALSE);
929 ctx_ddl.create_section_group(G_SCHEMA_NAME || '.HZ_DQM_CPT_GRP','BASIC_SECTION_GROUP');
930 add_section(G_SCHEMA_NAME || '.HZ_DQM_CPT_GRP','CONTACT_POINT_TYPE',l_stype);
931 OPEN c_num_attrs('CONTACT_POINTS');
932 FETCH c_num_attrs INTO l_cnt;
933 CLOSE c_num_attrs;
934 l_cnt := l_cnt+1;
935 IF l_cnt>64 THEN
936 l_stype := 'ZONE';
937 ELSE
938 l_stype := 'FIELD';
939 END IF;
940 OPEN c_attrs('CONTACT_POINTS');
941 LOOP
942 FETCH c_attrs INTO l_attr;
943 EXIT WHEN c_attrs%NOTFOUND;
944 add_section(G_SCHEMA_NAME || '.HZ_DQM_CPT_GRP',l_attr,l_stype);
945 END LOOP;
946 CLOSE c_attrs;
947 IF l_stype='FIELD' THEN
948 FOR I in 1..(64-l_cnt) LOOP
949 add_section(G_SCHEMA_NAME || '.HZ_DQM_CPT_GRP','M'||I,l_stype);
950 END LOOP;
951 ELSE
952 FOR I in 1..(255-l_cnt) LOOP
953 add_section(G_SCHEMA_NAME || '.HZ_DQM_CPT_GRP','M'||I,l_stype);
954 END LOOP;
955 END IF;
956 END IF;
957
958 IF p_entity='PARTY' THEN
959 get_datastore_cols('PARTY', pref_cols, proc_cols, tmp);
960 create_pref(G_SCHEMA_NAME || '.hz_party_ds',pref_cols);
961 END IF;
962
963 IF p_entity='PARTY_SITES' THEN
964 get_datastore_cols('PARTY_SITES', pref_cols, proc_cols, tmp);
965 create_pref(G_SCHEMA_NAME || '.hz_party_site_ds',pref_cols);
966 END IF;
967
968 IF p_entity='CONTACTS' THEN
969 get_datastore_cols('CONTACTS', pref_cols, proc_cols, tmp);
970 create_pref(G_SCHEMA_NAME || '.hz_contact_ds',pref_cols);
971 END IF;
972
973 IF p_entity='CONTACT_POINTS' THEN
974 get_datastore_cols('CONTACT_POINTS', pref_cols, proc_cols, tmp);
975 create_pref(G_SCHEMA_NAME || '.hz_contact_point_ds',pref_cols);
976 END IF;
977
978 log('Done creating datastore prefs for ' || p_entity );
979 EXCEPTION
980 WHEN OTHERS THEN
981 log('Error in gen ds '||SQLERRM);
982 RAISE;
983 END;
984
985
986 PROCEDURE generate_datastore_prefs IS
987
988 BEGIN
989 generate_datastore_prefs('PARTY');
990 generate_datastore_prefs('PARTY_SITES');
991 generate_datastore_prefs('CONTACTS');
992 generate_datastore_prefs('CONTACT_POINTS');
996
993 END;
994
995 PROCEDURE drop_indexes IS
997 l_status VARCHAR2(255);
998 l_index_owner VARCHAR2(255);
999 l_temp VARCHAR2(255);
1000
1001 l_bool BOOLEAN;
1002
1003 BEGIN
1004
1005 l_bool := fnd_installation.GET_APP_INFO('AR',l_status,l_temp,l_index_owner);
1006
1007 log('Dropping Indexes');
1008 BEGIN
1009 EXECUTE IMMEDIATE 'DROP INDEX ' || l_index_owner || '.hz_stage_parties_t1 FORCE';
1010 log('Dropped hz_stage_parties_t1');
1011 EXCEPTION
1012 WHEN OTHERS THEN
1013 NULL;
1014 END;
1015 BEGIN
1016 EXECUTE IMMEDIATE 'DROP INDEX ' || l_index_owner || '.hz_stage_party_sites_t1 FORCE';
1017 log('Dropped hz_stage_party_sites_t1');
1018 EXCEPTION
1019 WHEN OTHERS THEN
1020 NULL;
1021 END;
1022 BEGIN
1023 EXECUTE IMMEDIATE 'DROP INDEX ' || l_index_owner || '.hz_stage_contact_t1 FORCE';
1024 log('Dropped hz_stage_contact_t1');
1025 EXCEPTION
1026 WHEN OTHERS THEN
1027 NULL;
1028 END;
1029 BEGIN
1030 EXECUTE IMMEDIATE 'DROP INDEX ' || l_index_owner || '.hz_stage_cpt_t1 FORCE';
1031 log('Dropped hz_stage_cpt_t1');
1032 EXCEPTION
1033 WHEN OTHERS THEN
1034 NULL;
1035 END;
1036 log('Done with dropping indexes');
1037 END;
1038
1039 PROCEDURE drop_btree_indexes IS
1040 l_status VARCHAR2(255);
1041 l_owner1 VARCHAR2(255);
1042 l_temp VARCHAR2(255);
1043 BEGIN
1044 IF (fnd_installation.GET_APP_INFO('AR',l_status,l_temp,l_owner1)) THEN
1045 FOR IDX in (
1046 SELECT OWNER||'.'||INDEX_NAME idx_name
1047 FROM sys.all_indexes i, hz_trans_attributes_vl a, hz_trans_functions_vl f
1048 WHERE f.attribute_id = a.attribute_id
1049 AND i.owner = l_owner1
1050 AND f.index_required_flag in ('Y','T')
1051 AND i.INDEX_NAME = decode(a.entity_name,'PARTY','HZ_STAGED_PARTIES',
1052 'PARTY_SITES','HZ_STAGED_PARTY_SITES','CONTACTS','HZ_STAGED_CONTACTS',
1053 'CONTACT_POINTS','HZ_STAGED_CONTACT_POINTS')||'_N'||f.function_id) LOOP
1054 EXECUTE IMMEDIATE 'DROP INDEX '||IDX.idx_name;
1055 END LOOP;
1056 UPDATE hz_trans_functions_b set index_required_flag='N' where index_required_flag='T';
1057 END IF;
1058 END;
1059
1060 PROCEDURE create_log(
1061 p_operation VARCHAR2,
1062 p_step VARCHAR2,
1063 p_worker_number NUMBER DEFAULT 0,
1064 p_num_workers NUMBER DEFAULT 0) IS
1065
1066 BEGIN
1067
1068 INSERT INTO HZ_DQM_STAGE_LOG (
1069 OPERATION,
1070 NUMBER_OF_WORKERS,
1071 WORKER_NUMBER,
1072 STEP,
1073 START_FLAG,
1074 START_TIME,
1075 END_FLAG,
1076 END_TIME,
1077 CREATED_BY,
1078 CREATION_DATE,
1079 LAST_UPDATE_LOGIN,
1080 LAST_UPDATE_DATE,
1081 LAST_UPDATED_BY)
1082 VALUES (
1083 substr(p_operation,1,30),
1084 p_num_workers,
1085 p_worker_number,
1086 p_step,
1087 NULL,
1088 NULL,
1089 NULL,
1090 NULL,
1091 hz_utility_pub.created_by,
1092 hz_utility_pub.creation_date,
1093 hz_utility_pub.last_update_login,
1094 hz_utility_pub.last_update_date,
1095 hz_utility_pub.user_id
1096 );
1097 END;
1098
1099 FUNCTION get_size (
1100 p_table_name IN VARCHAR2
1101 ) RETURN NUMBER IS
1102 l_status VARCHAR2(255);
1103 l_owner1 VARCHAR2(255);
1104 l_temp VARCHAR2(255);
1105
1106 CURSOR c_number_of_blocks is
1107 SELECT blocks - empty_blocks
1108 FROM sys.dba_tables
1109 WHERE table_name = p_table_name and owner = l_owner1;
1110 CURSOR c_db_block_size is SELECT value
1111 FROM v$parameter
1112 WHERE name = 'db_block_size' ;
1113 l_db_block_size NUMBER;
1114 l_number_of_blocks NUMBER;
1115
1116 BEGIN
1117 IF (fnd_installation.GET_APP_INFO('AR',l_status,l_temp,l_owner1)) THEN
1118 OPEN c_number_of_blocks;
1119 FETCH c_number_of_blocks into l_number_of_blocks;
1120 CLOSE c_number_of_blocks;
1121 OPEN c_db_block_size;
1122 FETCH c_db_block_size into l_db_block_size;
1123 CLOSE c_db_block_size;
1124 END IF;
1125 RETURN (l_number_of_blocks * l_db_block_size) / 1000000;
1126 EXCEPTION
1127 WHEN OTHERS THEN
1128 RETURN 0;
1129 END;
1130
1131 FUNCTION check_rebuild(p_entity VARCHAR2)
1132 RETURN BOOLEAN IS
1133 -- this cursor will return the number of active transformations
1134 -- that have not been staged, corresponding to the passed in entity
1135 CURSOR check_any_acq IS
1136 SELECT count(1)
1137 from hz_trans_attributes_vl a
1138 where a.entity_name = p_entity
1139 and exists (
1140 SELECT 1 from hz_trans_functions_vl f
1141 where a.attribute_id = f.attribute_id
1142 and nvl(f.ACTIVE_FLAG,'Y') = 'Y'
1143 and primary_flag = 'Y'
1144 AND NVL(STAGED_FLAG,'N') ='N');
1145 -- this cursor will return if there are any preference values
1146 -- that exist, for the passed in entity
1147 CURSOR check_ds_misc_proc IS
1148 select 1 from ctx_preference_values
1149 where prv_preference =
1150 decode(p_entity,'PARTY','HZ_PARTY_DS',
1154 'NOMATCH')
1151 'PARTY_SITES','HZ_PARTY_SITE_DS',
1152 'CONTACTS','HZ_CONTACT_DS',
1153 'CONTACT_POINTS','HZ_CONTACT_POINT_DS',
1155 AND prv_owner = g_schema_name
1156 AND prv_attribute='COLUMNS'
1157 AND upper(prv_value) like '%HZDQM.M%';
1158
1159 tmp NUMBER;
1160 l_num_primary NUMBER;
1161 l_next_misc_section NUMBER;
1162 check_section_str VARCHAR2(2000);
1163 l_table_name VARCHAR2(255);
1164 BEGIN
1165 log ('--------------------------------------');
1166 -- If profile option is Optimal we FORCE A REBUILD.
1167 IF upper ( nvl( FND_PROFILE.value('HZ_DQM_INDEX_BUILD_TYPE'), 'Optimal') ) = upper('Optimal')
1168 THEN
1169 IF new_transformations_exist(p_entity)
1170 THEN
1171 log(' Chosen Profile Option is OPTIMAL');
1172 log(' check rebuild returns TRUE -- Do a REBUILD');
1173 RETURN TRUE ;
1174 ELSE
1175 log(' Chosen Profile Option is OPTIMAL');
1176 log(' But there are no new transformations to be staged for ' || p_entity );
1177 log(' check rebuild returns FALSE -- Do not REBUILD');
1178 RETURN FALSE ;
1179 END IF ;
1180 -- If profile option is incremental, we attempt TO SEE IF WE CAN AVOID A REBUILD
1181 ELSE
1182 log(' Chosen Profile Option is INCREMENTAL ');
1183 log(' Starting to figure out, if a REBUILD can be avoided');
1184 -- if no active unstaged transformatons exist for the passed in entity return FALSE
1185 -- ie., DO NOT REBUILD
1186 OPEN check_any_acq;
1187 FETCH check_any_acq INTO l_num_primary;
1188 IF l_num_primary=0 THEN
1189 CLOSE check_any_acq;
1190 log(' check rebuild returns FALSE -- Do not REBUILD');
1191 RETURN FALSE;
1192 END IF;
1193 CLOSE check_any_acq;
1194 -- if atleast one active unstaged transformation exists, check if the preference
1195 -- values exist for this entity. If preference values do not exist, return TRUE
1196 -- ie., DO A REBUILD
1197 OPEN check_ds_misc_proc;
1198 FETCH check_ds_misc_proc INTO tmp;
1199 IF check_ds_misc_proc%NOTFOUND THEN
1200 CLOSE check_ds_misc_proc;
1201 log(' check rebuild returns TRUE -- Do a REBUILD');
1202 RETURN TRUE;
1203 END IF;
1204 CLOSE check_ds_misc_proc;
1205
1206 -- if preference values exist for this entity, find the maximum temp_section for this entity
1207 -- and offset it by how many ever unstaged active transformations are found
1208 BEGIN
1209 SELECT max(to_number(substrb(temp_section,2)))+l_num_primary
1210 INTO l_next_misc_section
1211 from hz_trans_attributes_vl a
1212 where a.entity_name = p_entity
1213 and a.temp_section IS NOT NULL;
1214 IF l_next_misc_section IS NULL THEN
1215 l_next_misc_section := l_num_primary;
1216 END IF;
1217 EXCEPTION
1218 WHEN NO_DATA_FOUND THEN
1219 l_next_misc_section := l_num_primary;
1220 END;
1221
1222 SELECT decode(p_entity,'PARTY','HZ_STAGED_PARTIES',
1223 'PARTY_SITES','HZ_STAGED_PARTIES',
1224 'CONTACTS','HZ_STAGED_CONTACTS',
1225 'CONTACT_POINTS','HZ_STAGED_CONTACT_POINTS','DUMMY')
1226 INTO l_table_name
1227 from DUAL;
1228
1229 -- See if the intermedia index on the corresponding staging table for the entity
1230 -- has the placeholders for these sections.
1231 -- The check that is done here is to see if the dummy string CHECK exists with in the section
1232 -- by executing the folowing SQL. If this SQL errors out, it means the section doesnt exist
1233 -- or equivalently there are no placeholders.
1234 check_section_str :=
1235 'SELECT 1 FROM '||l_table_name||
1236 ' WHERE ROWNUM=1 AND CONTAINS(concat_col,''({CHECK} within M'||l_next_misc_section||')'')>0';
1237 log('Check STR ' ||check_section_str);
1238 BEGIN
1239 EXECUTE IMMEDIATE check_section_str;
1240 -- if section exists DO NOT REBUILD
1241 log(' check rebuild returns FALSE -- Do not REBUILD');
1242 RETURN FALSE;
1243 EXCEPTION
1244 WHEN OTHERS THEN
1245 log('Error ' ||SQLERRM);
1246 -- if section does not exist REBUILD
1247 log(' check rebuild returns TRUE -- Do a REBUILD');
1248 RETURN TRUE;
1249 END;
1250 END IF ;
1251 END;
1252
1253
1254 PROCEDURE Stage (
1255 errbuf OUT NOCOPY VARCHAR2,
1256 retcode OUT NOCOPY VARCHAR2,
1257 p_num_workers IN VARCHAR2,
1258 p_command IN VARCHAR2,
1259 p_continue IN VARCHAR2,
1260 p_tablespace IN VARCHAR2,
1261 p_index_creation IN VARCHAR2
1262 ) IS
1263
1264 TYPE nTable IS TABLE OF NUMBER index by binary_integer;
1265 TYPE vTable IS TABLE OF VARCHAR2(255) index by binary_integer;
1266 l_sub_requests nTable;
1267 l_req_status vTable;
1268
1269 uphase VARCHAR2(255);
1270 dphase VARCHAR2(255);
1271 ustatus VARCHAR2(255);
1272 dstatus VARCHAR2(255);
1273 message VARCHAR2(32000);
1274
1278 WHERE PRIMARY_FLAG = 'Y'
1275 CURSOR c_primary(cp_entity_name VARCHAR2) IS
1276 SELECT f.TRANSFORMATION_NAME, f.STAGED_ATTRIBUTE_COLUMN
1277 FROM HZ_TRANS_FUNCTIONS_VL f, HZ_TRANS_ATTRIBUTES_VL a
1279 AND nvl(f.ACTIVE_FLAG,'Y') = 'Y'
1280 AND f.ATTRIBUTE_ID = a.ATTRIBUTE_ID
1281 AND a.ENTITY_NAME = cp_entity_name;
1282
1283 l_trans_name HZ_TRANS_FUNCTIONS_VL.TRANSFORMATION_NAME%TYPE;
1284 l_stg_attr HZ_TRANS_FUNCTIONS_VL.STAGED_ATTRIBUTE_COLUMN%TYPE;
1285
1286 l_cols VARCHAR2(4000);
1287 l_message VARCHAR2(4000);
1288 l_status VARCHAR2(255) := 'NORMAL';
1289
1290 l_num_workers NUMBER;
1291 l_num_funcs NUMBER;
1292 l_req_id NUMBER;
1293 l_bool BOOLEAN;
1294 l_continue VARCHAR2(1) := 'N';
1295
1296 l_party_prim_tx NUMBER := 1;
1297 l_ps_prim_tx NUMBER := 1;
1298 l_contact_prim_tx NUMBER := 1;
1299 l_cpt_prim_tx NUMBER := 1;
1300
1301 l_index_owner VARCHAR2(255);
1302 l_temp VARCHAR2(255);
1303
1304 l_num_prll VARCHAR2(255);
1305 l_idx_mem VARCHAR2(255);
1306
1307
1308 T NUMBER;
1309
1310 l_index_creation VARCHAR2(255) := 'PARALLEL';
1311
1312 l_command VARCHAR2(255);
1313 l_last_num_workers NUMBER;
1314 l_num_stage_stepS NUMBER;
1315 reco_staging_size NUMBER;
1316 reco_staging_parties NUMBER;
1317 reco_staging_party_sites NUMBER;
1318 reco_staging_contacts NUMBER;
1319 reco_staging_contact_points NUMBER;
1320 reco_index_size NUMBER;
1321 safety_factor NUMBER(5, 1) := 2.0 ;
1322 sizing_factor NUMBER(5, 1) := 5;
1323
1324 l_index VARCHAR2(255);
1325
1326 ctx_tbsp VARCHAR2(255);
1327 ctx_index_tbsp VARCHAR2(255);
1328
1329 l_rebuild_party_idx BOOLEAN:=FALSE;
1330 l_rebuild_psite_idx BOOLEAN:=FALSE;
1331 l_rebuild_contact_idx BOOLEAN:=FALSE;
1332 l_rebuild_cpt_idx BOOLEAN:=FALSE;
1333
1334 l_step VARCHAR2(255);
1335 l_is_wildchar NUMBER;
1336 --Start of Bug No: 4292425
1337 req_data varchar2(100);
1338 l_workers_completed boolean;
1339 --End of Bug No: 4292425
1340 --Start of Bug 4915282
1341 l_realtime_sync_value VARCHAR2(15);
1342 CURSOR c_sync is select 1 from hz_dqm_sync_interface where staged_flag <> 'E' and rownum=1;
1343 l_sync_count NUMBER;
1344 l_profile_save boolean;
1345 --End of Bug 4915282
1346 BEGIN
1347 retcode := 0;
1348 -- req_data will be null the first time, by default
1349 req_data := fnd_conc_global.request_data;
1350 IF (req_data IS NULL) THEN --Bug No: 4292425
1351 l_index_creation := nvl(p_index_creation,'PARALLEL');
1352 l_realtime_sync_value := nvl(FND_PROFILE.VALUE('HZ_DQM_ENABLE_REALTIME_SYNC'), 'Y'); --4915282
1353 IF p_num_workers IS NULL THEN
1354 l_num_workers:=1;
1355 ELSE
1356 l_num_workers := to_number(p_num_workers);
1357 END IF;
1358 log('------------------------------');
1359 outandlog('Starting Concurrent Program ''Stage Party Data''');
1360 outandlog('Start Time ' || TO_CHAR(SYSDATE, 'DD-MON-YYYY HH24:MI:SS'));
1361 outandlog('NEWLINE');
1362
1363 l_command:=p_command;
1364 l_continue:=nvl(p_continue,'N');
1365 FND_MSG_PUB.initialize;
1366
1367 l_bool := fnd_installation.GET_APP_INFO('AR',l_status,l_temp,l_index_owner);
1368
1369 IF l_command = 'ESTIMATE_SIZE' THEN
1370 reco_staging_parties := ceil(get_size('HZ_PARTIES') * 1.5 * safety_factor);
1371 reco_staging_party_sites := ceil(get_size('HZ_PARTY_SITES') * 3.0 * safety_factor);
1372 reco_staging_contacts := ceil(get_size('HZ_ORG_CONTACTS') * 2.5 * safety_factor);
1373 reco_staging_contact_points := ceil(get_size('HZ_CONTACT_POINTS') * 2.0 * safety_factor);
1374 reco_index_size := 0.85 * (reco_staging_parties + reco_staging_party_sites + reco_staging_contacts + reco_staging_contact_points);
1375 reco_staging_size := reco_staging_parties + reco_staging_party_sites + reco_staging_contacts + reco_staging_contact_points + reco_index_size;
1376
1377 outandlog('The estimated disk space required for HZ_STAGED_PARTIES = ' || reco_staging_parties || 'MB' );
1378 outandlog('The estimated disk space required for HZ_STAGED_PARTY_SITES = ' ||reco_staging_party_sites || 'MB' );
1379 outandlog('The estimated disk space required for HZ_STAGED_CONTACTS = ' ||reco_staging_contacts || 'MB' );
1380 outandlog('The estimated disk space required for HZ_STAGED_CONTACT_POINTS = ' || reco_staging_contact_points || 'MB' );
1381 outandlog('The estimated disk space required by text indexes = ' ||reco_index_size || 'MB' );
1382 outandlog(' ');
1383 outandlog('The estimated total disk space required for staging = ' ||reco_staging_size || 'MB' );
1384 outandlog('NEWLINE');
1385 ELSIF l_command = 'ANALYZE_STAGED_TABLES' THEN
1386 outandlog('Staged tables being analyzed');
1387 gather_stats(l_index_owner, 'HZ_STAGED_PARTIES');
1388 gather_stats(l_index_owner, 'HZ_STAGED_PARTY_SITES');
1389 gather_stats(l_index_owner, 'HZ_STAGED_CONTACTS');
1390 gather_stats(l_index_owner, 'HZ_STAGED_CONTACT_POINTS');
1391 outandlog('Staged tables analyzed, End Time : '|| TO_CHAR(SYSDATE, 'MM-DD-YY HH24:MI:SS'));
1392 END IF;
1393
1394 IF l_command = 'STAGE_NEW_DENORM' THEN
1395 outandlog('Staging new denormalized attributes.');
1396 generate_map_pkg;
1397 FOR I in 1..10 LOOP
1398 l_sub_requests(i) := 1;
1399 END LOOP;
1400 IF FND_PROFILE.value('HZ_DQM_INDEX_PARALLEL') IS NOT NULL THEN
1401 l_num_prll := FND_PROFILE.value('HZ_DQM_INDEX_PARALLEL');
1402 ELSE
1403 l_num_prll := NULL;
1404 END IF;
1408 BEGIN
1405 IF FND_PROFILE.value('HZ_DQM_INDEX_MEMORY') IS NOT NULL THEN
1406 l_idx_mem := FND_PROFILE.value('HZ_DQM_INDEX_MEMORY');
1407 ELSE
1409 SELECT PAR_VALUE INTO l_idx_mem
1410 FROM CTX_PARAMETERS
1411 WHERE PAR_NAME = 'MAX_INDEX_MEMORY';
1412 EXCEPTION
1413 WHEN NO_DATA_FOUND THEN
1414 BEGIN
1415 SELECT PAR_VALUE INTO l_idx_mem
1416 FROM CTX_PARAMETERS
1417 WHERE PAR_NAME = 'DEFAULT_INDEX_MEMORY';
1418 EXCEPTION
1419 WHEN NO_DATA_FOUND THEN
1420 l_idx_mem := '0';
1421 END;
1422 END;
1423 END IF;
1424 l_req_id := FND_REQUEST.SUBMIT_REQUEST('AR', 'ARHDQMCR',
1425 'DQM Create Index', to_char(sysdate,'DD-MON-YY HH24:MI:SS'), --bug 4641081
1426 TRUE, to_char(l_sub_requests(1)), to_char(l_sub_requests(2)),
1427 to_char(l_sub_requests(3)), to_char(l_sub_requests(4)),
1428 to_char(l_sub_requests(5)), to_char(l_sub_requests(6)),
1429 to_char(l_sub_requests(7)), to_char(l_sub_requests(8)),
1430 to_char(l_sub_requests(9)), to_char(l_sub_requests(10)),
1431 'STAGE_NEW_DENORM', l_idx_mem, l_num_prll, 'STAGE_NEW_DENORM');
1432 IF l_req_id = 0 THEN
1433 log('Error submitting request');
1434 log(fnd_message.get);
1435 ELSE
1436 log('Submitted request ID for Party Index: ' || l_req_id );
1437 log('Request ID : ' || l_req_id);
1438 END IF;
1439 END IF;
1440
1441 IF l_command = 'STAGE_ALL_DATA' OR
1442 l_command = 'CREATE_INDEXES' OR
1443 l_command = 'STAGE_NEW_TRANSFORMATIONS' OR
1444 l_command = 'CREATE_MISSING_INVALID_INDEXES' THEN
1445
1446 IF ((l_command = 'STAGE_ALL_DATA' OR l_command = 'STAGE_NEW_TRANSFORMATIONS') AND l_realtime_sync_value <> 'N') THEN
1447 l_profile_save := FND_PROFILE.save('HZ_DQM_ENABLE_REALTIME_SYNC','N','SITE'); -- Set sync method to BATCH. 4915282
1448 END IF;
1449
1450 IF FND_PROFILE.value('HZ_DQM_INDEX_MEMORY') IS NOT NULL THEN
1451 l_idx_mem := FND_PROFILE.value('HZ_DQM_INDEX_MEMORY');
1452 ELSE
1453 BEGIN
1454 SELECT PAR_VALUE INTO l_idx_mem
1455 FROM CTX_PARAMETERS
1456 WHERE PAR_NAME = 'MAX_INDEX_MEMORY';
1457 EXCEPTION
1458 WHEN NO_DATA_FOUND THEN
1459 BEGIN
1460 SELECT PAR_VALUE INTO l_idx_mem
1461 FROM CTX_PARAMETERS
1462 WHERE PAR_NAME = 'DEFAULT_INDEX_MEMORY';
1463 EXCEPTION
1464 WHEN NO_DATA_FOUND THEN
1465 l_idx_mem := '0';
1466 END;
1467 END;
1468 END IF;
1469
1470 IF FND_PROFILE.value('HZ_DQM_INDEX_PARALLEL') IS NOT NULL THEN
1471 l_num_prll := FND_PROFILE.value('HZ_DQM_INDEX_PARALLEL');
1472 ELSE
1473 l_num_prll := NULL;
1474 END IF;
1475
1476 BEGIN
1477 ctx_ddl.drop_preference('HZ_DQM_STORAGE');
1478 EXCEPTION
1479 WHEN OTHERS THEN
1480 NULL;
1481 END;
1482
1483 IF p_tablespace IS NOT NULL THEN
1484 ctx_tbsp := p_tablespace;
1485 ctx_index_tbsp := p_tablespace;
1486 ELSE
1487 select tablespace, index_tablespace
1488 into ctx_tbsp, ctx_index_tbsp
1489 from fnd_product_installations
1490 where application_id = '222';
1491 END IF;
1492
1493 ctx_ddl.create_preference('HZ_DQM_STORAGE', 'BASIC_STORAGE');
1494 ctx_ddl.set_attribute('HZ_DQM_STORAGE', 'I_TABLE_CLAUSE', 'tablespace '|| ctx_tbsp|| ' storage (initial 4K next 8M pctincrease 0)');
1495 ctx_ddl.set_attribute('HZ_DQM_STORAGE', 'K_TABLE_CLAUSE', 'tablespace ' || ctx_tbsp || ' storage (initial 4K next 8M pctincrease 0)');
1496 ctx_ddl.set_attribute('HZ_DQM_STORAGE', 'R_TABLE_CLAUSE', 'tablespace '|| ctx_tbsp || ' storage (initial 4K next 8M pctincrease 0) lob (data) store as (cache) ');
1497 ctx_ddl.set_attribute('HZ_DQM_STORAGE', 'I_INDEX_CLAUSE', 'tablespace '|| ctx_index_tbsp || ' storage (initial 4K next 8M pctincrease 0) compress 2');
1498
1499 END IF;
1500
1501 BEGIN
1502 ctx_ddl.drop_preference('dqm_lexer');
1503 EXCEPTION
1504 WHEN OTHERS THEN
1505 null;
1506 END;
1507
1508 ctx_ddl.create_preference('dqm_lexer', 'BASIC_LEXER');
1509 ctx_ddl.set_attribute ( 'dqm_lexer', 'index_themes', 'NO');
1510 ctx_ddl.set_attribute ( 'dqm_lexer', 'index_text', 'YES');
1511
1512 IF l_command = 'GENERATE_MAP_PROC' THEN
1513 log (' In the GENERATE_MAP_PROC flow');
1514 generate_map_pkg;
1515 ELSIF l_command = 'STAGE_NEW_TRANSFORMATIONS' THEN
1516 log (' In the STAGE_NEW_TRANSFORMATIONS flow');
1517 BEGIN
1518 SELECT number_of_workers INTO l_last_num_workers
1519 FROM HZ_DQM_STAGE_LOG
1520 WHERE operation = l_command
1521 AND STEP = 'INIT';
1522
1523 IF l_last_num_workers<>l_num_workers AND l_continue = 'Y' THEN
1524 log('Cannot continue with different number of workers. Using ' ||
1525 l_last_num_workers ||' workers, as specified in first run');
1526 l_num_workers := l_last_num_workers;
1527 END IF;
1531 END;
1528 EXCEPTION
1529 WHEN NO_DATA_FOUND THEN
1530 l_continue := 'N';
1532 IF l_continue <> 'Y' THEN
1533 verify_all_procs;
1534 generate_map_upd_pkg(l_rebuild_party_idx,l_rebuild_psite_idx,
1535 l_rebuild_contact_idx,l_rebuild_cpt_idx);
1536 log('*** After gen upd '||l_continue);
1537
1538 -- Generate preferences for all entities based on the corresponding boolean populated
1539 -- by generate_map_upd_pkg.
1540 -- In particular, if the profile option HZ_DQM_INDEX_BUILD_TYPE is chosen to be Optimal
1541 -- datastore preferences will always be rebuilt.
1542
1543 IF l_rebuild_party_idx THEN
1544 generate_datastore_prefs('PARTY');
1545 END IF;
1546 IF l_rebuild_psite_idx THEN
1547 generate_datastore_prefs('PARTY_SITES');
1548 END IF;
1549 IF l_rebuild_contact_idx THEN
1550 generate_datastore_prefs('CONTACTS');
1551 END IF;
1552 IF l_rebuild_cpt_idx THEN
1553 generate_datastore_prefs('CONTACT_POINTS');
1554 END IF;
1555
1556 DELETE from HZ_DQM_STAGE_LOG where operation = l_command;
1557 create_log(
1558 p_operation=>l_command,
1559 p_step=>'INIT',
1560 p_num_workers=>l_num_workers);
1561
1562 l_num_stage_steps := g_num_stage_new_steps;
1563
1564 FOR I in 1..l_num_stage_steps LOOP
1565 FOR J in 0..(l_num_workers-1) LOOP
1566 create_log(
1567 p_operation=>l_command,
1568 p_step=>'STEP'||I,
1569 p_worker_number=> J,
1570 p_num_workers=>l_num_workers);
1571 END LOOP;
1572 END LOOP;
1573
1574 DELETE from HZ_DQM_STAGE_LOG where operation = 'CREATE_INDEXES';
1575 IF l_rebuild_party_idx THEN
1576 create_log(
1577 p_operation=>'CREATE_INDEXES',
1578 p_step=>'HZ_PARTIES');
1579 ELSE
1580 create_log(
1581 p_operation=>'CREATE_INDEXES',
1582 p_step=>'HZ_PARTIES_BTREE');
1583 END IF;
1584
1585 IF l_rebuild_psite_idx THEN
1586 create_log(
1587 p_operation=>'CREATE_INDEXES',
1588 p_step=>'HZ_PARTY_SITES');
1589 ELSE
1590 create_log(
1591 p_operation=>'CREATE_INDEXES',
1592 p_step=>'HZ_PARTY_SITES_BTREE'); ----
1593 END IF;
1594
1595 IF l_rebuild_contact_idx THEN
1596 create_log(
1597 p_operation=>'CREATE_INDEXES',
1598 p_step=>'HZ_ORG_CONTACTS');
1599 ELSE
1600 create_log(
1601 p_operation=>'CREATE_INDEXES',
1602 p_step=>'HZ_ORG_CONTACTS_BTREE');
1603 END IF;
1604
1605 IF l_rebuild_cpt_idx THEN
1606 create_log(
1607 p_operation=>'CREATE_INDEXES',
1608 p_step=>'HZ_CONTACT_POINTS');
1609 ELSE
1610 create_log(
1611 p_operation=>'CREATE_INDEXES',
1612 p_step=>'HZ_CONTACT_POINTS_BTREE');
1613 END IF;
1614
1615 ELSE
1616 SELECT step INTO l_step
1617 FROM HZ_DQM_STAGE_LOG
1618 WHERE OPERATION = 'CREATE_INDEXES'
1619 AND step like 'HZ_PARTIES%';
1620
1621 IF l_step ='HZ_PARTIES' THEN
1622 l_rebuild_party_idx:=TRUE;
1623 ELSE
1624 l_rebuild_party_idx:=FALSE;
1625 END IF;
1626
1627 SELECT step INTO l_step
1628 FROM HZ_DQM_STAGE_LOG
1629 WHERE OPERATION = 'CREATE_INDEXES'
1630 AND step like 'HZ_PARTY_SITES%';
1631
1632 IF l_step ='HZ_PARTY_SITES' THEN
1633 l_rebuild_psite_idx:=TRUE;
1634 ELSE
1635 l_rebuild_psite_idx:=FALSE;
1636 END IF;
1637
1638 SELECT step INTO l_step
1639 FROM HZ_DQM_STAGE_LOG
1640 WHERE OPERATION = 'CREATE_INDEXES'
1641 AND step like 'HZ_ORG_CONTACTS%';
1642
1643 IF l_step ='HZ_ORG_CONTACTS' THEN
1644 l_rebuild_contact_idx:=TRUE;
1645 ELSE
1646 l_rebuild_contact_idx:=FALSE;
1647 END IF;
1648
1649 SELECT step INTO l_step
1650 FROM HZ_DQM_STAGE_LOG
1651 WHERE OPERATION = 'CREATE_INDEXES'
1652 AND step like 'HZ_CONTACT_POINTS%';
1653
1654 IF l_step ='HZ_CONTACT_POINTS' THEN
1655 l_rebuild_cpt_idx:=TRUE;
1656 ELSE
1657 l_rebuild_cpt_idx:=FALSE;
1658 END IF;
1659 END IF;
1660 FOR I in 1..10 LOOP
1661 l_sub_requests(i) := 1;
1662 END LOOP;
1663 log('Spawning ' || l_num_workers || ' Workers for staging');
1664 FOR I in 1..l_num_workers LOOP
1665 l_sub_requests(i) := FND_REQUEST.SUBMIT_REQUEST('AR', 'ARHDQMSTW',
1666 'Stage Party Data Worker ' || to_char(i),
1667 to_char(sysdate,'DD-MON-YY HH24:MI:SS'), --bug 4641081
1668 TRUE, to_char(l_num_workers), TO_CHAR(I), l_command,l_continue);
1669 IF l_sub_requests(i) = 0 THEN
1670 log('Error submitting worker ' || i);
1671 log(fnd_message.get);
1672 ELSE
1673 log('Submitted request for Worker ' || TO_CHAR(I) );
1674 log('Request ID : ' || l_sub_requests(i));
1675 END IF;
1676 EXIT when l_sub_requests(i) = 0;
1677 END LOOP;
1678
1679
1683 IF l_rebuild_party_idx THEN
1680 l_req_id := l_sub_requests(1);
1681
1682 IF l_req_id>0 THEN
1684 l_index := 'HZ_PARTIES';
1685 ELSE
1686 l_index := 'HZ_PARTIES_BTREE';
1687 END IF;
1688 l_req_id := FND_REQUEST.SUBMIT_REQUEST('AR', 'ARHDQMCR',
1689 'DQM Create Index', to_char(sysdate,'DD-MON-YY HH24:MI:SS'), --bug 4641081
1690 TRUE, to_char(l_sub_requests(1)), to_char(l_sub_requests(2)),
1691 to_char(l_sub_requests(3)), to_char(l_sub_requests(4)),
1692 to_char(l_sub_requests(5)), to_char(l_sub_requests(6)),
1693 to_char(l_sub_requests(7)), to_char(l_sub_requests(8)),
1694 to_char(l_sub_requests(9)), to_char(l_sub_requests(10)),
1695 l_command, l_idx_mem, l_num_prll, l_index);
1696 IF l_req_id = 0 THEN
1697 log('Error submitting request');
1698 log(fnd_message.get);
1699 ELSE
1700 log('Submitted request ID for Party Index: ' || l_req_id );
1701 log('Request ID : ' || l_req_id);
1702 END IF;
1703 END IF;
1704
1705 IF l_req_id>0 THEN
1706 IF l_rebuild_psite_idx THEN
1707 l_index := 'HZ_PARTY_SITES';
1708 ELSE
1709 l_index := 'HZ_PARTY_SITES_BTREE';
1710 END IF;
1711
1712 l_req_id := FND_REQUEST.SUBMIT_REQUEST('AR', 'ARHDQMCR',
1713 'DQM Create Index', to_char(sysdate,'DD-MON-YY HH24:MI:SS'), --bug 4641081
1714 TRUE, to_char(l_sub_requests(1)), to_char(l_sub_requests(2)),
1715 to_char(l_sub_requests(3)), to_char(l_sub_requests(4)),
1716 to_char(l_sub_requests(5)), to_char(l_sub_requests(6)),
1717 to_char(l_sub_requests(7)), to_char(l_sub_requests(8)),
1718 to_char(l_sub_requests(9)), to_char(l_sub_requests(10)),
1719 l_command, l_idx_mem, l_num_prll, l_index);
1720 IF l_req_id = 0 THEN
1721 log('Error submitting request');
1722 log(fnd_message.get);
1723 ELSE
1724 log('Submitted request ID for Party Site Index: ' || l_req_id );
1725 log('Request ID : ' || l_req_id);
1726 END IF;
1727 END IF;
1728
1729 IF l_req_id>0 THEN
1730 IF l_rebuild_contact_idx THEN
1731 l_index := 'HZ_ORG_CONTACTS';
1732 ELSE
1733 l_index := 'HZ_ORG_CONTACTS_BTREE';
1734 END IF;
1735 l_req_id := FND_REQUEST.SUBMIT_REQUEST('AR', 'ARHDQMCR',
1736 'DQM Create Index', to_char(sysdate,'DD-MON-YY HH24:MI:SS'), --bug 4641081
1737 TRUE, to_char(l_sub_requests(1)), to_char(l_sub_requests(2)),
1738 to_char(l_sub_requests(3)), to_char(l_sub_requests(4)),
1739 to_char(l_sub_requests(5)), to_char(l_sub_requests(6)),
1740 to_char(l_sub_requests(7)), to_char(l_sub_requests(8)),
1741 to_char(l_sub_requests(9)), to_char(l_sub_requests(10)),
1742 l_command, l_idx_mem, l_num_prll, l_index);
1743 IF l_req_id = 0 THEN
1744 log('Error submitting request');
1745 log(fnd_message.get);
1746 ELSE
1747 log('Submitted request ID for Party Index: ' || l_req_id );
1748 log('Request ID : ' || l_req_id);
1749 END IF;
1750 END IF;
1751
1752 IF l_req_id>0 THEN
1753 IF l_rebuild_cpt_idx THEN
1754 l_index := 'HZ_CONTACT_POINTS';
1755 ELSE
1756 l_index := 'HZ_CONTACT_POINTS_BTREE';
1757 END IF;
1758 l_req_id := FND_REQUEST.SUBMIT_REQUEST('AR', 'ARHDQMCR',
1759 'DQM Create Index', to_char(sysdate,'DD-MON-YY HH24:MI:SS'), --bug 4641081
1760 TRUE, to_char(l_sub_requests(1)), to_char(l_sub_requests(2)),
1761 to_char(l_sub_requests(3)), to_char(l_sub_requests(4)),
1762 to_char(l_sub_requests(5)), to_char(l_sub_requests(6)),
1763 to_char(l_sub_requests(7)), to_char(l_sub_requests(8)),
1764 to_char(l_sub_requests(9)), to_char(l_sub_requests(10)),
1765 l_command, l_idx_mem, l_num_prll, l_index);
1766 IF l_req_id = 0 THEN
1767 log('Error submitting request');
1768 log(fnd_message.get);
1769 ELSE
1770 log('Submitted request ID for Contact Point Index: ' || l_req_id );
1771 log('Request ID : ' || l_req_id);
1772 END IF;
1773 END IF;
1774 ELSIF l_command = 'STAGE_NEW_TRANSFORMATIONS_NO_INDEXING' THEN
1775 log (' In the STAGE_NEW_TRANSFORMATIONS_NO_INDEXING flow');
1776 BEGIN
1777 SELECT number_of_workers INTO l_last_num_workers
1778 FROM HZ_DQM_STAGE_LOG
1779 WHERE operation = substr(l_command,1,30)
1780 AND STEP = 'INIT';
1781
1782
1783 IF l_last_num_workers<>l_num_workers AND l_continue = 'Y' THEN
1784 log('Cannot continue with different number of workers. Using ' ||
1785 l_last_num_workers ||' workers, as specified in first run');
1786 l_num_workers := l_last_num_workers;
1787 END IF;
1788 EXCEPTION
1789 WHEN NO_DATA_FOUND THEN
1790 l_continue := 'N';
1791 END;
1792 IF l_continue <> 'Y' THEN
1793 verify_all_procs;
1794 generate_map_upd_pkg(l_rebuild_party_idx,l_rebuild_psite_idx,
1795 l_rebuild_contact_idx,l_rebuild_cpt_idx);
1799 generate_datastore_prefs ;
1796 log('*** After gen upd '||l_continue);
1797
1798 -- Generate preferences for all entities regardless
1800
1801
1802
1803 DELETE from HZ_DQM_STAGE_LOG where operation = substr(l_command,1,30) ;
1804 create_log(
1805 p_operation=>l_command,
1806 p_step=>'INIT',
1807 p_num_workers=>l_num_workers);
1808
1809 l_num_stage_steps := g_num_stage_new_steps;
1810
1811 FOR I in 1..l_num_stage_steps LOOP
1812 FOR J in 0..(l_num_workers-1) LOOP
1813 create_log(
1814 p_operation=>l_command,
1815 p_step=>'STEP'||I,
1816 p_worker_number=> J,
1817 p_num_workers=>l_num_workers);
1818 END LOOP;
1819 END LOOP;
1820 END IF;
1821
1822 FOR I in 1..10 LOOP
1823 l_sub_requests(i) := 1;
1824 END LOOP;
1825
1826 log('Spawning ' || l_num_workers || ' Workers for staging');
1827
1828 -- Dispatch the Stage Data Worker
1829 FOR I in 1..l_num_workers LOOP
1830 l_sub_requests(i) := FND_REQUEST.SUBMIT_REQUEST('AR', 'ARHDQMSTW',
1831 'Stage Party Data Worker ' || to_char(i),
1832 to_char(sysdate,'DD-MON-YY HH24:MI:SS'), --bug 4641081
1833 TRUE, to_char(l_num_workers), TO_CHAR(I), l_command,l_continue);
1834 IF l_sub_requests(i) = 0 THEN
1835 log('Error submitting worker ' || i);
1836 log(fnd_message.get);
1837 ELSE
1838 log('Submitted request for Worker ' || TO_CHAR(I) );
1839 log('Request ID : ' || l_sub_requests(i));
1840 END IF;
1841 EXIT when l_sub_requests(i) = 0;
1842 END LOOP;
1843
1844 ELSIF l_command = 'STAGE_ALL_DATA' THEN
1845
1846 BEGIN
1847 SELECT count(*) into l_is_wildchar from HZ_DQM_STAGE_LOG where operation = 'STAGE_FOR_WILDCHAR_SEARCH' and rownum = 1 ;
1848 IF l_is_wildchar < 1 THEN
1849 INSERT INTO HZ_DQM_STAGE_LOG(operation, number_of_workers, worker_number, step,
1850 last_update_date, creation_date, created_by, last_updated_by)
1851 VALUES ('STAGE_FOR_WILDCHAR_SEARCH', '-1', '-1', 'Y', SYSDATE, SYSDATE, 0, 0);
1852 END IF;
1853
1854 SELECT number_of_workers INTO l_last_num_workers
1855 FROM HZ_DQM_STAGE_LOG
1856 WHERE operation = l_command
1857 AND STEP = 'INIT';
1858
1859 IF l_last_num_workers<>l_num_workers AND l_continue = 'Y' THEN
1860 log('Cannot continue with different number of workers. Using ' ||
1861 l_last_num_workers ||' workers, as specified in first run');
1862 l_num_workers := l_last_num_workers;
1863 END IF;
1864 EXCEPTION
1865 WHEN NO_DATA_FOUND THEN
1866 l_continue := 'N';
1867 END;
1868
1869 IF l_continue <> 'Y' THEN
1870 verify_all_procs;
1871 IF l_command = 'STAGE_ALL_DATA' THEN
1872 drop_indexes;
1873 delete_existing_data;
1874 UPDATE HZ_TRANS_FUNCTIONS_B SET STAGED_FLAG='N'; --Bug No: 3907584.
1875 END IF;
1876
1877 generate_datastore_prefs;
1878 IF l_command = 'STAGE_ALL_DATA' THEN
1879 generate_map_pkg;
1880 END IF;
1881
1882 DELETE from HZ_DQM_STAGE_LOG where operation = l_command;
1883 create_log(
1884 p_operation=>l_command,
1885 p_step=>'INIT',
1886 p_num_workers=>l_num_workers);
1887
1888 IF l_command = 'STAGE_ALL_DATA' THEN
1889 l_num_stage_steps := g_num_stage_steps;
1890 ELSE
1891 l_num_stage_steps := g_num_stage_new_steps;
1892 END IF;
1893
1894 FOR I in 1..l_num_stage_steps LOOP
1895 FOR J in 0..(l_num_workers-1) LOOP
1896 create_log(
1897 p_operation=>l_command,
1898 p_step=>'STEP'||I,
1899 p_worker_number=> J,
1900 p_num_workers=>l_num_workers);
1901 END LOOP;
1902 END LOOP;
1903 DELETE from HZ_DQM_STAGE_LOG where operation = 'CREATE_INDEXES';
1904 create_log(
1905 p_operation=>'CREATE_INDEXES',
1906 p_step=>'HZ_PARTIES');
1907 create_log(
1908 p_operation=>'CREATE_INDEXES',
1909 p_step=>'HZ_PARTY_SITES');
1910 create_log(
1911 p_operation=>'CREATE_INDEXES',
1912 p_step=>'HZ_ORG_CONTACTS');
1913 create_log(
1914 p_operation=>'CREATE_INDEXES',
1915 p_step=>'HZ_CONTACT_POINTS');
1916 END IF;
1917
1918 FOR I in 1..10 LOOP
1919 l_sub_requests(i) := 1;
1920 END LOOP;
1921
1922
1923 log('Spawning ' || l_num_workers || ' Workers for staging');
1924 FOR I in 1..l_num_workers LOOP
1925 l_sub_requests(i) := FND_REQUEST.SUBMIT_REQUEST('AR', 'ARHDQMSTW',
1926 'Stage Party Data Worker ' || to_char(i),
1927 to_char(sysdate,'DD-MON-YY HH24:MI:SS'), --bug 4641081
1931 log(fnd_message.get);
1928 TRUE, to_char(l_num_workers), TO_CHAR(I), l_command,l_continue);
1929 IF l_sub_requests(i) = 0 THEN
1930 log('Error submitting worker ' || i);
1932 ELSE
1933 log('Submitted request for Worker ' || TO_CHAR(I) );
1934 log('Request ID : ' || l_sub_requests(i));
1935 END IF;
1936 EXIT when l_sub_requests(i) = 0;
1937 END LOOP;
1938
1939 l_req_id := l_sub_requests(1);
1940
1941 IF l_req_id>0 THEN
1942 l_index := 'HZ_PARTIES';
1943 l_req_id := FND_REQUEST.SUBMIT_REQUEST('AR', 'ARHDQMCR',
1944 'DQM Create Index', to_char(sysdate,'DD-MON-YY HH24:MI:SS'), --bug 4641081
1945 TRUE, to_char(l_sub_requests(1)), to_char(l_sub_requests(2)),
1946 to_char(l_sub_requests(3)), to_char(l_sub_requests(4)),
1947 to_char(l_sub_requests(5)), to_char(l_sub_requests(6)),
1948 to_char(l_sub_requests(7)), to_char(l_sub_requests(8)),
1949 to_char(l_sub_requests(9)), to_char(l_sub_requests(10)),
1950 l_command, l_idx_mem, l_num_prll, l_index);
1951 IF l_req_id = 0 THEN
1952 log('Error submitting request');
1953 log(fnd_message.get);
1954 ELSE
1955 log('Submitted request ID for Party Index: ' || l_req_id );
1956 log('Request ID : ' || l_req_id);
1957 END IF;
1958 END IF;
1959
1960 IF l_req_id>0 THEN
1961 l_index := 'HZ_PARTY_SITES';
1962 l_req_id := FND_REQUEST.SUBMIT_REQUEST('AR', 'ARHDQMCR',
1963 'DQM Create Index', to_char(sysdate,'DD-MON-YY HH24:MI:SS'), --bug 4641081
1964 TRUE, to_char(l_sub_requests(1)), to_char(l_sub_requests(2)),
1965 to_char(l_sub_requests(3)), to_char(l_sub_requests(4)),
1966 to_char(l_sub_requests(5)), to_char(l_sub_requests(6)),
1967 to_char(l_sub_requests(7)), to_char(l_sub_requests(8)),
1968 to_char(l_sub_requests(9)), to_char(l_sub_requests(10)),
1969 l_command, l_idx_mem, l_num_prll, l_index);
1970 IF l_req_id = 0 THEN
1971 log('Error submitting request');
1972 log(fnd_message.get);
1973 ELSE
1974 log('Submitted request ID for Party Site Index: ' || l_req_id );
1975 log('Request ID : ' || l_req_id);
1976 END IF;
1977 END IF;
1978
1979 IF l_req_id>0 THEN
1980 l_index := 'HZ_ORG_CONTACTS';
1981 l_req_id := FND_REQUEST.SUBMIT_REQUEST('AR', 'ARHDQMCR',
1982 'DQM Create Index', to_char(sysdate,'DD-MON-YY HH24:MI:SS'), --bug 4641081
1983 TRUE, to_char(l_sub_requests(1)), to_char(l_sub_requests(2)),
1984 to_char(l_sub_requests(3)), to_char(l_sub_requests(4)),
1985 to_char(l_sub_requests(5)), to_char(l_sub_requests(6)),
1986 to_char(l_sub_requests(7)), to_char(l_sub_requests(8)),
1987 to_char(l_sub_requests(9)), to_char(l_sub_requests(10)),
1988 l_command, l_idx_mem, l_num_prll, l_index);
1989 IF l_req_id = 0 THEN
1990 log('Error submitting request');
1991 log(fnd_message.get);
1992 ELSE
1993 log('Submitted request ID for Party Index: ' || l_req_id );
1994 log('Request ID : ' || l_req_id);
1995 END IF;
1996 END IF;
1997
1998 IF l_req_id>0 THEN
1999 l_index := 'HZ_CONTACT_POINTS';
2000 l_req_id := FND_REQUEST.SUBMIT_REQUEST('AR', 'ARHDQMCR',
2001 'DQM Create Index', to_char(sysdate,'DD-MON-YY HH24:MI:SS'), --bug 4641081
2002 TRUE, to_char(l_sub_requests(1)), to_char(l_sub_requests(2)),
2003 to_char(l_sub_requests(3)), to_char(l_sub_requests(4)),
2004 to_char(l_sub_requests(5)), to_char(l_sub_requests(6)),
2005 to_char(l_sub_requests(7)), to_char(l_sub_requests(8)),
2006 to_char(l_sub_requests(9)), to_char(l_sub_requests(10)),
2007 l_command, l_idx_mem, l_num_prll, l_index);
2008 IF l_req_id = 0 THEN
2009 log('Error submitting request');
2010 log(fnd_message.get);
2011 ELSE
2012 log('Submitted request ID for Contact Point Index: ' || l_req_id );
2013 log('Request ID : ' || l_req_id);
2014 END IF;
2015 END IF;
2016 ELSIF l_command = 'CREATE_INDEXES' THEN
2017 IF l_continue = 'N' THEN
2018 drop_indexes;
2019 generate_datastore_prefs;
2020 DELETE from HZ_DQM_STAGE_LOG where operation = 'CREATE_INDEXES';
2021 create_log(
2022 p_operation=>'CREATE_INDEXES',
2023 p_step=>'HZ_PARTIES');
2024 create_log(
2025 p_operation=>'CREATE_INDEXES',
2026 p_step=>'HZ_PARTY_SITES');
2027 create_log(
2028 p_operation=>'CREATE_INDEXES',
2029 p_step=>'HZ_ORG_CONTACTS');
2030 create_log(
2031 p_operation=>'CREATE_INDEXES',
2032 p_step=>'HZ_CONTACT_POINTS');
2033
2034 END IF;
2035
2036 FOR I in 1..10 LOOP
2037 l_sub_requests(i) := 1;
2038 END LOOP;
2039
2040 l_req_id := 1;
2041 IF l_req_id<>0 THEN
2042 l_req_id := FND_REQUEST.SUBMIT_REQUEST('AR', 'ARHDQMCR',
2043 'DQM Create Index', to_char(sysdate,'DD-MON-YY HH24:MI:SS'), --bug 4641081
2044 TRUE, to_char(l_sub_requests(1)), to_char(l_sub_requests(2)),
2048 to_char(l_sub_requests(9)), to_char(l_sub_requests(10)),
2045 to_char(l_sub_requests(3)), to_char(l_sub_requests(4)),
2046 to_char(l_sub_requests(5)), to_char(l_sub_requests(6)),
2047 to_char(l_sub_requests(7)), to_char(l_sub_requests(8)),
2049 l_command, l_idx_mem, l_num_prll, 'HZ_PARTIES');
2050 IF l_req_id = 0 THEN
2051 log('Error submitting request');
2052 log(fnd_message.get);
2053 ELSE
2054 log('Submitted request ID for Party Index: ' || l_req_id );
2055 log('Request ID : ' || l_req_id);
2056 END IF;
2057 END IF;
2058
2059 IF l_req_id<>0 THEN
2060 IF l_index_creation = 'SERIAL' THEN
2061 l_sub_requests(1) := l_req_id;
2062 END IF;
2063
2064 l_req_id := FND_REQUEST.SUBMIT_REQUEST('AR', 'ARHDQMCR',
2065 'DQM Create Index', to_char(sysdate,'DD-MON-YY HH24:MI:SS'), --bug 4641081
2066 TRUE, to_char(l_sub_requests(1)), to_char(l_sub_requests(2)),
2067 to_char(l_sub_requests(3)), to_char(l_sub_requests(4)),
2068 to_char(l_sub_requests(5)), to_char(l_sub_requests(6)),
2069 to_char(l_sub_requests(7)), to_char(l_sub_requests(8)),
2070 to_char(l_sub_requests(9)), to_char(l_sub_requests(10)),
2071 l_command, l_idx_mem, l_num_prll, 'HZ_PARTY_SITES');
2072 IF l_req_id = 0 THEN
2073 log('Error submitting request');
2074 log(fnd_message.get);
2075 ELSE
2076 log('Submitted request ID for Party Site Index: ' || l_req_id );
2077 log('Request ID : ' || l_req_id);
2078 END IF;
2079 END IF;
2080
2081 IF l_req_id<>0 THEN
2082 IF l_index_creation = 'SERIAL' THEN
2083 l_sub_requests(1) := l_req_id;
2084 END IF;
2085
2086 l_req_id := FND_REQUEST.SUBMIT_REQUEST('AR', 'ARHDQMCR',
2087 'DQM Create Index', to_char(sysdate,'DD-MON-YY HH24:MI:SS'), --bug 4641081
2088 TRUE, to_char(l_sub_requests(1)), to_char(l_sub_requests(2)),
2089 to_char(l_sub_requests(3)), to_char(l_sub_requests(4)),
2090 to_char(l_sub_requests(5)), to_char(l_sub_requests(6)),
2091 to_char(l_sub_requests(7)), to_char(l_sub_requests(8)),
2092 to_char(l_sub_requests(9)), to_char(l_sub_requests(10)),
2093 l_command, l_idx_mem, l_num_prll, 'HZ_ORG_CONTACTS');
2094 IF l_req_id = 0 THEN
2095 log('Error submitting request');
2096 log(fnd_message.get);
2097 ELSE
2098 log('Submitted request ID for Party Index: ' || l_req_id );
2099 log('Request ID : ' || l_req_id);
2100 END IF;
2101 END IF;
2102
2103 IF l_req_id<>0 THEN
2104 IF l_index_creation = 'SERIAL' THEN
2105 l_sub_requests(1) := l_req_id;
2106 END IF;
2107
2108 l_req_id := FND_REQUEST.SUBMIT_REQUEST('AR', 'ARHDQMCR',
2109 'DQM Create Index', to_char(sysdate,'DD-MON-YY HH24:MI:SS'), --bug 4641081
2110 TRUE, to_char(l_sub_requests(1)), to_char(l_sub_requests(2)),
2111 to_char(l_sub_requests(3)), to_char(l_sub_requests(4)),
2112 to_char(l_sub_requests(5)), to_char(l_sub_requests(6)),
2113 to_char(l_sub_requests(7)), to_char(l_sub_requests(8)),
2114 to_char(l_sub_requests(9)), to_char(l_sub_requests(10)),
2115 l_command, l_idx_mem, l_num_prll, 'HZ_CONTACT_POINTS');
2116 IF l_req_id = 0 THEN
2117 log('Error submitting request');
2118 log(fnd_message.get);
2119 ELSE
2120 log('Submitted request ID for Contact Point Index: ' || l_req_id );
2121 log('Request ID : ' || l_req_id);
2122 END IF;
2123 END IF;
2124 ELSIF l_command='CREATE_MISSING_INVALID_INDEXES' THEN
2125 IF l_continue = 'N' THEN
2126 generate_datastore_prefs;
2127 DELETE from HZ_DQM_STAGE_LOG where operation = 'CREATE_INDEXES';
2128 create_log(
2129 p_operation=>'CREATE_INDEXES',
2130 p_step=>'HZ_PARTIES');
2131 create_log(
2132 p_operation=>'CREATE_INDEXES',
2133 p_step=>'HZ_PARTY_SITES');
2134 create_log(
2135 p_operation=>'CREATE_INDEXES',
2136 p_step=>'HZ_ORG_CONTACTS');
2137 create_log(
2138 p_operation=>'CREATE_INDEXES',
2139 p_step=>'HZ_CONTACT_POINTS');
2140 END IF;
2141 FOR I in 1..10 LOOP
2142 l_sub_requests(i) := 1;
2143 END LOOP;
2144
2145 l_req_id := 1;
2146 BEGIN
2147 SELECT 1 INTO T FROM HZ_STAGED_PARTIES
2148 WHERE ROWNUM=1
2149 AND CONTAINS (concat_col, 'dummy_string')>0;
2150 EXCEPTION
2151 WHEN NO_DATA_FOUND THEN
2152 UPDATE HZ_DQM_STAGE_LOG
2153 SET START_FLAG ='Y', START_TIME=SYSDATE,END_FLAG = 'Y', END_TIME=SYSDATE
2154 WHERE OPERATION = 'CREATE_INDEXES' AND step = 'HZ_PARTIES';
2155 WHEN OTHERS THEN
2156 BEGIN
2157 EXECUTE IMMEDIATE 'DROP INDEX ' || l_index_owner || '.hz_stage_parties_t1 FORCE';
2158 log('Dropped hz_stage_parties_t1');
2159 EXCEPTION
2160 WHEN OTHERS THEN
2161 log('Error dropping hz_stage_parties_t1 ' || SQLERRM);
2162 END;
2163
2164 l_req_id := FND_REQUEST.SUBMIT_REQUEST('AR', 'ARHDQMCR',
2168 to_char(l_sub_requests(5)), to_char(l_sub_requests(6)),
2165 'DQM Create Index', to_char(sysdate,'DD-MON-YY HH24:MI:SS'), --bug 4641081
2166 TRUE, to_char(l_sub_requests(1)), to_char(l_sub_requests(2)),
2167 to_char(l_sub_requests(3)), to_char(l_sub_requests(4)),
2169 to_char(l_sub_requests(7)), to_char(l_sub_requests(8)),
2170 to_char(l_sub_requests(9)), to_char(l_sub_requests(10)),
2171 l_command, l_idx_mem, l_num_prll, 'HZ_PARTIES');
2172 IF l_req_id = 0 THEN
2173 log('Error submitting request');
2174 log(fnd_message.get);
2175 ELSE
2176 log('Submitted request ID for Party Index: ' || l_req_id );
2177 log('Request ID : ' || l_req_id);
2178 END IF;
2179 END;
2180
2181 BEGIN
2182 SELECT 1 INTO T FROM HZ_STAGED_PARTY_SITES
2183 WHERE ROWNUM=1
2184 AND CONTAINS (concat_col, 'dummy_string')>0;
2185 EXCEPTION
2186 WHEN NO_DATA_FOUND THEN
2187 UPDATE HZ_DQM_STAGE_LOG
2188 SET START_FLAG ='Y', START_TIME=SYSDATE,END_FLAG = 'Y', END_TIME=SYSDATE
2189 WHERE OPERATION = 'CREATE_INDEXES' AND step = 'HZ_PARTY_SITES';
2190 WHEN OTHERS THEN
2191
2192 BEGIN
2193 EXECUTE IMMEDIATE 'DROP INDEX ' || l_index_owner || '.hz_stage_party_sites_t1 FORCE';
2194 log('Dropped hz_stage_party_sites_t1');
2195 EXCEPTION
2196 WHEN OTHERS THEN
2197 NULL;
2198 END;
2199
2200 IF l_index_creation = 'SERIAL' THEN
2201 l_sub_requests(1):=l_req_id;
2202 END IF;
2203
2204 l_req_id := FND_REQUEST.SUBMIT_REQUEST('AR', 'ARHDQMCR',
2205 'DQM Create Index', to_char(sysdate,'DD-MON-YY HH24:MI:SS'), --bug 4641081
2206 TRUE, to_char(l_sub_requests(1)), to_char(l_sub_requests(2)),
2207 to_char(l_sub_requests(3)), to_char(l_sub_requests(4)),
2208 to_char(l_sub_requests(5)), to_char(l_sub_requests(6)),
2209 to_char(l_sub_requests(7)), to_char(l_sub_requests(8)),
2210 to_char(l_sub_requests(9)), to_char(l_sub_requests(10)),
2211 l_command, l_idx_mem, l_num_prll, 'HZ_PARTY_SITES');
2212 IF l_req_id = 0 THEN
2213 log('Error submitting request');
2214 log(fnd_message.get);
2215 ELSE
2216 log('Submitted request ID for Party Index: ' || l_req_id );
2217 log('Request ID : ' || l_req_id);
2218 END IF;
2219 END;
2220
2221 BEGIN
2222 SELECT 1 INTO T FROM HZ_STAGED_CONTACTS
2223 WHERE ROWNUM=1
2224 AND CONTAINS (concat_col, 'dummy_string')>0;
2225 EXCEPTION
2226 WHEN NO_DATA_FOUND THEN
2227 UPDATE HZ_DQM_STAGE_LOG
2228 SET START_FLAG ='Y', START_TIME=SYSDATE,END_FLAG = 'Y', END_TIME=SYSDATE
2229 WHERE OPERATION = 'CREATE_INDEXES' AND step = 'HZ_ORG_CONTACTS';
2230 WHEN OTHERS THEN
2231
2232 BEGIN
2233 EXECUTE IMMEDIATE 'DROP INDEX ' || l_index_owner || '.hz_stage_contact_t1 FORCE';
2234 log('Dropped hz_stage_contact_t1');
2235 EXCEPTION
2236 WHEN OTHERS THEN
2237 NULL;
2238 END;
2239
2240 IF l_index_creation = 'SERIAL' THEN
2241 l_sub_requests(1):=l_req_id;
2242 END IF;
2243
2244 l_req_id := FND_REQUEST.SUBMIT_REQUEST('AR', 'ARHDQMCR',
2245 'DQM Create Index', to_char(sysdate,'DD-MON-YY HH24:MI:SS'), --bug 4641081
2246 TRUE, to_char(l_sub_requests(1)), to_char(l_sub_requests(2)),
2247 to_char(l_sub_requests(3)), to_char(l_sub_requests(4)),
2248 to_char(l_sub_requests(5)), to_char(l_sub_requests(6)),
2249 to_char(l_sub_requests(7)), to_char(l_sub_requests(8)),
2250 to_char(l_sub_requests(9)), to_char(l_sub_requests(10)),
2251 l_command, l_idx_mem, l_num_prll, 'HZ_ORG_CONTACTS');
2252 IF l_req_id = 0 THEN
2253 log('Error submitting request');
2254 log(fnd_message.get);
2255 ELSE
2256 log('Submitted request ID for Contact Index: ' || l_req_id );
2257 log('Request ID : ' || l_req_id);
2258 END IF;
2259 END;
2260
2261 BEGIN
2262 SELECT 1 INTO T FROM HZ_STAGED_CONTACT_POINTS
2263 WHERE ROWNUM=1
2264 AND CONTAINS (concat_col, 'dummy_string')>0;
2265 EXCEPTION
2266 WHEN NO_DATA_FOUND THEN
2267 UPDATE HZ_DQM_STAGE_LOG
2268 SET START_FLAG ='Y', START_TIME=SYSDATE,END_FLAG = 'Y', END_TIME=SYSDATE
2269 WHERE OPERATION = 'CREATE_INDEXES' AND step = 'HZ_CONTACT_POINTS';
2270 WHEN OTHERS THEN
2271
2272 BEGIN
2273 EXECUTE IMMEDIATE 'DROP INDEX ' || l_index_owner || '.hz_stage_cpt_t1 FORCE';
2274 log('Dropped hz_stage_cpt_t1');
2275 EXCEPTION
2276 WHEN OTHERS THEN
2277 NULL;
2278 END;
2279
2280 IF l_index_creation = 'SERIAL' THEN
2281 l_sub_requests(1):=l_req_id;
2282 END IF;
2283
2284 l_req_id := FND_REQUEST.SUBMIT_REQUEST('AR', 'ARHDQMCR',
2285 'DQM Create Index', to_char(sysdate,'DD-MON-YY HH24:MI:SS'), --bug 4641081
2286 TRUE, to_char(l_sub_requests(1)), to_char(l_sub_requests(2)),
2287 to_char(l_sub_requests(3)), to_char(l_sub_requests(4)),
2291 l_command, l_idx_mem, l_num_prll, 'HZ_CONTACT_POINTS');
2288 to_char(l_sub_requests(5)), to_char(l_sub_requests(6)),
2289 to_char(l_sub_requests(7)), to_char(l_sub_requests(8)),
2290 to_char(l_sub_requests(9)), to_char(l_sub_requests(10)),
2292 IF l_req_id = 0 THEN
2293 log('Error submitting request');
2294 log(fnd_message.get);
2295 ELSE
2296 log('Submitted request ID for Contact Point Index: ' || l_req_id );
2297 log('Request ID : ' || l_req_id);
2298 END IF;
2299 END;
2300 ELSIF p_command='RECREATE_BTREE_INDEXES' THEN
2301 drop_btree_indexes;
2302 FOR I in 1..10 LOOP
2303 l_sub_requests(i) := 1;
2304 END LOOP;
2305
2306 l_index := 'HZ_PARTIES_BTREE';
2307 l_req_id := FND_REQUEST.SUBMIT_REQUEST('AR', 'ARHDQMCR',
2308 'DQM Create Index', to_char(sysdate,'DD-MON-YY HH24:MI:SS'), --bug 4641081
2309 TRUE, to_char(l_sub_requests(1)), to_char(l_sub_requests(2)),
2310 to_char(l_sub_requests(3)), to_char(l_sub_requests(4)),
2311 to_char(l_sub_requests(5)), to_char(l_sub_requests(6)),
2312 to_char(l_sub_requests(7)), to_char(l_sub_requests(8)),
2313 to_char(l_sub_requests(9)), to_char(l_sub_requests(10)),
2314 l_command, l_idx_mem, l_num_prll, l_index);
2315 IF l_req_id = 0 THEN
2316 log('Error submitting request');
2317 log(fnd_message.get);
2318 ELSE
2319 log('Submitted request ID for Party Index: ' || l_req_id );
2320 log('Request ID : ' || l_req_id);
2321 END IF;
2322
2323 l_index := 'HZ_PARTY_SITES_BTREE';
2324
2325 l_req_id := FND_REQUEST.SUBMIT_REQUEST('AR', 'ARHDQMCR',
2326 'DQM Create Index', to_char(sysdate,'DD-MON-YY HH24:MI:SS'), --bug 4641081
2327 TRUE, to_char(l_sub_requests(1)), to_char(l_sub_requests(2)),
2328 to_char(l_sub_requests(3)), to_char(l_sub_requests(4)),
2329 to_char(l_sub_requests(5)), to_char(l_sub_requests(6)),
2330 to_char(l_sub_requests(7)), to_char(l_sub_requests(8)),
2331 to_char(l_sub_requests(9)), to_char(l_sub_requests(10)),
2332 l_command, l_idx_mem, l_num_prll, l_index);
2333 IF l_req_id = 0 THEN
2334 log('Error submitting request');
2335 log(fnd_message.get);
2336 ELSE
2337 log('Submitted request ID for Party Site Index: ' || l_req_id );
2338 log('Request ID : ' || l_req_id);
2339 END IF;
2340
2341 l_index := 'HZ_ORG_CONTACTS_BTREE';
2342
2343 l_req_id := FND_REQUEST.SUBMIT_REQUEST('AR', 'ARHDQMCR',
2344 'DQM Create Index', to_char(sysdate,'DD-MON-YY HH24:MI:SS'), --bug 4641081
2345 TRUE, to_char(l_sub_requests(1)), to_char(l_sub_requests(2)),
2346 to_char(l_sub_requests(3)), to_char(l_sub_requests(4)),
2347 to_char(l_sub_requests(5)), to_char(l_sub_requests(6)),
2348 to_char(l_sub_requests(7)), to_char(l_sub_requests(8)),
2349 to_char(l_sub_requests(9)), to_char(l_sub_requests(10)),
2350 l_command, l_idx_mem, l_num_prll, l_index);
2351 IF l_req_id = 0 THEN
2352 log('Error submitting request');
2353 log(fnd_message.get);
2354 ELSE
2355 log('Submitted request ID for Contact Index: ' || l_req_id );
2356 log('Request ID : ' || l_req_id);
2357 END IF;
2358
2359 l_index := 'HZ_CONTACT_POINTS_BTREE';
2360
2361 l_req_id := FND_REQUEST.SUBMIT_REQUEST('AR', 'ARHDQMCR',
2362 'DQM Create Index', to_char(sysdate,'DD-MON-YY HH24:MI:SS'), --bug 4641081
2363 TRUE, to_char(l_sub_requests(1)), to_char(l_sub_requests(2)),
2364 to_char(l_sub_requests(3)), to_char(l_sub_requests(4)),
2365 to_char(l_sub_requests(5)), to_char(l_sub_requests(6)),
2366 to_char(l_sub_requests(7)), to_char(l_sub_requests(8)),
2367 to_char(l_sub_requests(9)), to_char(l_sub_requests(10)),
2368 l_command, l_idx_mem, l_num_prll, l_index);
2369 IF l_req_id = 0 THEN
2370 log('Error submitting request');
2371 log(fnd_message.get);
2372 ELSE
2373 log('Submitted request ID for Contact Point Index: ' || l_req_id );
2374 log('Request ID : ' || l_req_id);
2375 END IF;
2376
2377 END IF;
2378
2379 --Start of Bug No : 4292425
2380 -- wait for completion of all workers
2381 IF l_command = 'STAGE_ALL_DATA' OR l_command = 'STAGE_NEW_TRANSFORMATIONS' THEN
2382 fnd_conc_global.set_req_globals(conc_status => 'PAUSED', request_data => 'DQM_STAGE_DATA_WORKERS_'||l_realtime_sync_value) ; --4915282
2383 ELSE
2384 fnd_conc_global.set_req_globals(conc_status => 'PAUSED', request_data => 'DQM_STAGE_DATA_WORKERS') ;
2385 END IF;
2386
2387
2388
2389 ELSIF (req_data IS NOT NULL) then
2390 -- AFTER ALL THE WORKERS ARE DONE, SEE IF THEY HAVE ALL COMPLETED NORMALLY
2391 -- assume that all concurrent workers completed normally, unless found otherwise
2392 l_workers_completed := TRUE;
2393
2394 Select request_id BULK COLLECT into l_sub_requests
2395 from Fnd_Concurrent_Requests R
2396 Where Parent_Request_Id = FND_GLOBAL.conc_request_id
2397 and (phase_code<>'C' or status_code<>'C');
2398
2399 IF l_sub_requests.count>0 THEN
2400 l_workers_completed:=FALSE;
2401 FOR I in 1..l_sub_requests.COUNT LOOP
2405 END LOOP;
2402 outandlog('Data worker with request id ' || l_sub_requests(I) );
2403 outandlog(' did not complete normally');
2404 retcode := 2;
2406 END IF;
2407 if(l_workers_completed)then
2408 outandlog('Concurrent Program Execution completed ');
2409 outandlog('End Time : '|| TO_CHAR(SYSDATE, 'DD-MON-YYYY HH24:MI:SS'));
2410 end if;
2411 --Start of 4915282
2412 l_realtime_sync_value := substr(req_data,instr(req_data,'_',-1)+1);
2413 IF( l_realtime_sync_value IN ('Y','N','DISABLE') ) THEN
2414 IF(l_realtime_sync_value <> 'N') THEN
2415 l_realtime_sync_value := 'Y';
2416 OPEN c_sync;
2417 FETCH c_sync INTO l_sync_count;
2418 IF(c_sync%FOUND) THEN
2419 l_req_id := FND_REQUEST.SUBMIT_REQUEST(
2420 application => 'AR', /**** Application Name ****/
2421 program => 'ARHDQSYN', /*** Program Name ***/
2422 sub_request => FALSE, /*** Sub Request ***/
2423 argument1 => NULL, /* p_num_of_workers */
2424 argument2 => NULL /* p_indexes_only */
2425 );
2426 IF l_req_id = 0 THEN
2427 log('Error submitting sync request');
2428 log(fnd_message.get);
2429 ELSE
2430 log('Submitted request ID for Sync : ' || l_req_id );
2431 log('Request ID : ' || l_req_id);
2432 END IF;
2433 END IF;
2434 CLOSE c_sync;
2435 END IF;
2436 l_profile_save := FND_PROFILE.save('HZ_DQM_ENABLE_REALTIME_SYNC',l_realtime_sync_value,'SITE');
2437 END IF;
2438 --End of 4915282
2439 END IF;
2440 --End of Bug No : 4292425
2441
2442 EXCEPTION
2443 WHEN FND_API.G_EXC_ERROR THEN
2444 outandlog('Error: Aborting staging');
2445 retcode := 2;
2446 errbuf := errbuf || logerror || SQLERRM;
2447 FND_FILE.close;
2448 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
2449 outandlog('Error: Aborting staging');
2450 retcode := 2;
2451 errbuf := errbuf || logerror || SQLERRM;
2452 FND_FILE.close;
2453 WHEN OTHERS THEN
2454 log(fnd_message.get);
2455 outandlog('Error: Aborting staging');
2456 retcode := 2;
2457 errbuf := errbuf || logerror || SQLERRM;
2458 FND_FILE.close;
2459 END;
2460
2461
2462 PROCEDURE gather_stats(
2463 table_owner VARCHAR2,
2464 table_name VARCHAR2
2465 ) IS
2466 BEGIN
2467 fnd_stats.gather_table_stats(table_owner, table_name);
2468 END gather_stats;
2469
2470 PROCEDURE Stage_worker(
2471 errbuf OUT NOCOPY VARCHAR2,
2472 retcode OUT NOCOPY VARCHAR2,
2473 p_num_workers IN VARCHAR2,
2474 p_worker_number IN VARCHAR2,
2475 p_command IN VARCHAR2,
2476 p_continue IN VARCHAR2
2477
2478 ) IS
2479
2480 CURSOR l_log_cur(p_command VARCHAR2, l_worker_number NUMBER, l_step VARCHAR2) is
2481 ( SELECT start_flag, end_flag
2482 FROM HZ_DQM_STAGE_LOG
2483 WHERE OPERATION = p_command
2484 AND WORKER_NUMBER = l_worker_number AND step = l_step);
2485
2486 l_party_id NUMBER;
2487 l_party_type HZ_PARTIES.PARTY_TYPE%TYPE;
2488
2489 l_party_staged VARCHAR2(1);
2490 l_temp_party_id NUMBER;
2491 l_worker_number NUMBER;
2492 l_num_workers NUMBER;
2493
2494 l_index_owner VARCHAR2(255);
2495 l_temp VARCHAR2(255);
2496 l_bool BOOLEAN;
2497 l_status VARCHAR2(255);
2498
2499 l_error VARCHAR2(2000);
2500
2501 l_party_cur StageCurTyp;
2502 l_party_site_cur StageCurTyp;
2503 l_contact_cur StageCurTyp;
2504 l_cpt_cur StageCurTyp;
2505
2506 l_start_flag VARCHAR2(30);
2507 l_end_flag VARCHAR2(30);
2508
2509 l_number_of_workers NUMBER;
2510 l_startdate DATE;
2511
2512 l_log_step VARCHAR2(30);
2513
2514 BEGIN
2515
2516 retcode := 0;
2517 l_worker_number := TO_NUMBER(p_worker_number);
2518 l_num_workers := TO_NUMBER(p_num_workers);
2519 IF l_worker_number = l_num_workers THEN
2520 l_worker_number := 0;
2521 END IF;
2522
2523
2524 log('Starting Concurrent Program ''Stage Party Data'', Worker: ' ||
2525 p_worker_number);
2526 log('Start Time ' || TO_CHAR(SYSDATE, 'MM-DD-YY HH24:MI:SS'));
2527 log('NEWLINE');
2528
2529 log('This worker stages all parties whose party_id/10 produces a remainder equal to the worker number ');
2530
2531 log('');
2532 log('Stage Parties begin');
2533
2534 FND_MSG_PUB.initialize;
2535 HZ_TRANS_PKG.set_staging_context('Y');
2536 IF p_command='STAGE_ALL_DATA' THEN
2537
2538 SELECT SYSDATE INTO l_startdate FROM DUAL;
2539
2540 log('Staging Organization Party Records');
2541
2542 OPEN l_log_cur(p_command, l_worker_number, 'STEP1');
2543 FETCH l_log_cur INTO l_start_flag, l_end_flag;
2544 IF (l_log_cur%NOTFOUND) THEN
2545 l_start_flag:=NULL;
2546 l_end_flag:=NULL;
2547 END IF;
2548 CLOSE l_log_cur;
2549
2550 IF nvl(l_end_flag,'N') = 'N' THEN
2551 IF nvl(l_start_flag ,'N') = 'N' THEN
2552
2553 l_log_step := 'STEP1';
2554 UPDATE HZ_DQM_STAGE_LOG set start_flag='Y', start_time = SYSDATE
2555 WHERE OPERATION = p_command
2556 AND WORKER_NUMBER = l_worker_number AND step = l_log_step;
2557 COMMIT;
2558
2559 HZ_TRANS_PKG.set_party_type('ORGANIZATION');
2560 HZ_STAGE_MAP_TRANSFORM.open_party_cursor(
2561 'ALL_PARTIES', 'ORGANIZATION',l_worker_number, l_num_workers, NULL,'N', l_party_cur);
2562 HZ_STAGE_MAP_TRANSFORM.insert_stage_parties('N',l_party_cur);
2563 ELSE
2564 HZ_TRANS_PKG.set_party_type('ORGANIZATION');
2565 log(' Continue for Org cursor');
2566 HZ_STAGE_MAP_TRANSFORM.open_party_cursor(
2567 'ALL_PARTIES', 'ORGANIZATION',l_worker_number, l_num_workers, NULL,'Y', l_party_cur);
2568 HZ_STAGE_MAP_TRANSFORM.insert_stage_parties('Y',l_party_cur);
2569 END IF;
2570
2571 CLOSE l_party_cur;
2572 l_log_step := 'STEP1';
2573 UPDATE HZ_DQM_STAGE_LOG set end_flag='Y', end_time = SYSDATE
2574 WHERE OPERATION = p_command
2575 AND WORKER_NUMBER = l_worker_number AND step = l_log_step;
2576
2577 COMMIT;
2578 END IF;
2579
2580 log('Staging Person Party Records');
2581 OPEN l_log_cur(p_command, l_worker_number, 'STEP2');
2582 FETCH l_log_cur INTO l_start_flag, l_end_flag;
2583 IF (l_log_cur%NOTFOUND) THEN
2584 l_start_flag:=NULL;
2585 l_end_flag:=NULL;
2586 END IF;
2587 CLOSE l_log_cur;
2588
2589 IF nvl(l_end_flag,'N') = 'N' THEN
2590 IF nvl(l_start_flag,'N') = 'N' THEN
2591 l_log_step := 'STEP2';
2592 UPDATE HZ_DQM_STAGE_LOG set start_flag='Y', start_time = SYSDATE
2593 WHERE OPERATION = p_command
2594 AND WORKER_NUMBER = l_worker_number AND step = l_log_step;
2595 COMMIT;
2596
2597 HZ_TRANS_PKG.set_party_type('PERSON');
2598 HZ_STAGE_MAP_TRANSFORM.open_party_cursor(
2599 'ALL_PARTIES', 'PERSON',l_worker_number, l_num_workers, NULL,'N', l_party_cur);
2600 HZ_STAGE_MAP_TRANSFORM.insert_stage_parties('N',l_party_cur);
2601 ELSE
2602 log(' Continue for Per cursor');
2603 HZ_TRANS_PKG.set_party_type('PERSON');
2604 HZ_STAGE_MAP_TRANSFORM.open_party_cursor(
2605 'ALL_PARTIES', 'PERSON',l_worker_number, l_num_workers, NULL,'Y', l_party_cur);
2606 HZ_STAGE_MAP_TRANSFORM.insert_stage_parties('Y',l_party_cur);
2607 END IF;
2608
2609 CLOSE l_party_cur;
2610 l_log_step := 'STEP2';
2611 UPDATE HZ_DQM_STAGE_LOG set end_flag='Y', end_time = SYSDATE
2612 WHERE OPERATION = p_command
2613 AND WORKER_NUMBER = l_worker_number AND step = l_log_step;
2614
2615 COMMIT;
2616 END IF;
2617
2618 log('Staging Group Party Records');
2619 OPEN l_log_cur(p_command, l_worker_number, 'STEP3');
2620 FETCH l_log_cur INTO l_start_flag, l_end_flag;
2621 IF (l_log_cur%NOTFOUND) THEN
2622 l_start_flag:=NULL;
2623 l_end_flag:=NULL;
2624 END IF;
2625 CLOSE l_log_cur;
2626
2627 IF nvl(l_end_flag,'N') = 'N' THEN
2628 IF nvl(l_start_flag,'N') = 'N' THEN
2629 l_log_step := 'STEP3';
2630 UPDATE HZ_DQM_STAGE_LOG set start_flag='Y', start_time = SYSDATE
2631 WHERE OPERATION = p_command
2632 AND WORKER_NUMBER = l_worker_number AND step = l_log_step;
2633 COMMIT;
2634
2635 HZ_TRANS_PKG.set_party_type('OTHER');
2636 HZ_STAGE_MAP_TRANSFORM.open_party_cursor(
2637 'ALL_PARTIES', 'OTHER',l_worker_number, l_num_workers, NULL,'N', l_party_cur);
2638 HZ_STAGE_MAP_TRANSFORM.insert_stage_parties('N',l_party_cur);
2639 ELSE
2640 log(' Continue for Oth cursor');
2641
2642 HZ_TRANS_PKG.set_party_type('OTHER');
2643 HZ_STAGE_MAP_TRANSFORM.open_party_cursor(
2644 'ALL_PARTIES', 'OTHER',l_worker_number, l_num_workers, NULL,'Y', l_party_cur);
2645 HZ_STAGE_MAP_TRANSFORM.insert_stage_parties('Y',l_party_cur);
2646 END IF;
2647
2648 CLOSE l_party_cur;
2649 l_log_step := 'STEP3';
2650 UPDATE HZ_DQM_STAGE_LOG set end_flag='Y', end_time = SYSDATE
2651 WHERE OPERATION = p_command
2652 AND WORKER_NUMBER = l_worker_number AND step = l_log_step;
2653
2654 COMMIT;
2655
2656 END IF;
2657
2658 DELETE FROM HZ_DQM_SYNC_INTERFACE WHERE mod(PARTY_ID,l_num_workers) = l_worker_number
2659 AND creation_date<=l_startdate;
2660
2661 ELSE
2662 log('Updating Organization Party Records');
2663 OPEN l_log_cur(p_command, l_worker_number, 'STEP1');
2664 FETCH l_log_cur INTO l_start_flag, l_end_flag;
2665 IF (l_log_cur%NOTFOUND) THEN
2666 l_start_flag:=NULL;
2667 l_end_flag:=NULL;
2668 END IF;
2669 CLOSE l_log_cur;
2670
2671 IF nvl(l_end_flag,'N') = 'N' THEN
2672 IF nvl(l_start_flag,'N') = 'N' THEN
2673 l_log_step := 'STEP1';
2677 COMMIT;
2674 UPDATE HZ_DQM_STAGE_LOG set start_flag='Y', start_time = SYSDATE
2675 WHERE OPERATION = p_command
2676 AND WORKER_NUMBER = l_worker_number AND step = l_log_step;
2678
2679 END IF;
2680
2681 HZ_TRANS_PKG.set_party_type('ORGANIZATION');
2682 HZ_STAGE_MAP_TRANSFORM_UPD.open_party_cursor(
2683 'ORGANIZATION',l_worker_number, l_num_workers, l_party_cur);
2684 IF l_party_cur IS NOT NULL THEN
2685 HZ_STAGE_MAP_TRANSFORM_UPD.update_stage_parties(l_party_cur);
2686 CLOSE l_party_cur;
2687 END IF;
2688
2689 l_log_step := 'STEP1';
2690 UPDATE HZ_DQM_STAGE_LOG set end_flag='Y', end_time = SYSDATE
2691 WHERE OPERATION = p_command
2692 AND WORKER_NUMBER = l_worker_number AND step = l_log_step;
2693
2694 COMMIT;
2695 END IF;
2696
2697 log('Updating Person Party Records');
2698 OPEN l_log_cur(p_command, l_worker_number, 'STEP2');
2699 FETCH l_log_cur INTO l_start_flag, l_end_flag;
2700 IF (l_log_cur%NOTFOUND) THEN
2701 l_start_flag:=NULL;
2702 l_end_flag:=NULL;
2703 END IF;
2704 CLOSE l_log_cur;
2705
2706 IF nvl(l_end_flag,'N') = 'N' THEN
2707 IF nvl(l_start_flag,'N') = 'N' THEN
2708 l_log_step := 'STEP2';
2709 UPDATE HZ_DQM_STAGE_LOG set start_flag='Y', start_time = SYSDATE
2710 WHERE OPERATION = p_command
2711 AND WORKER_NUMBER = l_worker_number AND step = l_log_step;
2712
2713 END IF;
2714
2715 HZ_TRANS_PKG.set_party_type('PERSON');
2716 HZ_STAGE_MAP_TRANSFORM_UPD.open_party_cursor(
2717 'PERSON',l_worker_number, l_num_workers, l_party_cur);
2718
2719 IF l_party_cur IS NOT NULL THEN
2720 HZ_STAGE_MAP_TRANSFORM_UPD.update_stage_parties(l_party_cur);
2721 CLOSE l_party_cur;
2722 END IF;
2723 l_log_step := 'STEP2';
2724 UPDATE HZ_DQM_STAGE_LOG set end_flag='Y', end_time = SYSDATE
2725 WHERE OPERATION = p_command
2726 AND WORKER_NUMBER = l_worker_number AND step = l_log_step;
2727
2728 COMMIT;
2729 END IF;
2730
2731 log('Updating Group Party Records');
2732
2733 OPEN l_log_cur(p_command, l_worker_number, 'STEP3');
2734 FETCH l_log_cur INTO l_start_flag, l_end_flag;
2735 IF (l_log_cur%NOTFOUND) THEN
2736 l_start_flag:=NULL;
2737 l_end_flag:=NULL;
2738 END IF;
2739 CLOSE l_log_cur;
2740
2741 IF nvl(l_end_flag,'N') = 'N' THEN
2742 IF nvl(l_start_flag,'N') = 'N' THEN
2743 l_log_step := 'STEP3';
2744 UPDATE HZ_DQM_STAGE_LOG set start_flag='Y', start_time = SYSDATE
2745 WHERE OPERATION = p_command
2746 AND WORKER_NUMBER = l_worker_number AND step = l_log_step;
2747 END IF;
2748
2749 HZ_TRANS_PKG.set_party_type('OTHER');
2750 HZ_STAGE_MAP_TRANSFORM_UPD.open_party_cursor(
2751 'OTHER',l_worker_number, l_num_workers, l_party_cur);
2752
2753 IF l_party_cur IS NOT NULL THEN
2754 HZ_STAGE_MAP_TRANSFORM_UPD.update_stage_parties(l_party_cur);
2755 CLOSE l_party_cur;
2756 END IF;
2757
2758 l_log_step := 'STEP3';
2759 UPDATE HZ_DQM_STAGE_LOG set end_flag='Y', end_time = SYSDATE
2760 WHERE OPERATION = p_command
2761 AND WORKER_NUMBER = l_worker_number AND step = l_log_step;
2762
2763 COMMIT;
2764 END IF;
2765
2766 log('Updating Contact Records');
2767 OPEN l_log_cur(p_command, l_worker_number, 'STEP4');
2768 FETCH l_log_cur INTO l_start_flag, l_end_flag;
2769 IF (l_log_cur%NOTFOUND) THEN
2770 l_start_flag:=NULL;
2771 l_end_flag:=NULL;
2772 END IF;
2773 CLOSE l_log_cur;
2774
2775
2776 IF nvl(l_end_flag,'N') = 'N' THEN
2777 IF nvl(l_start_flag,'N') = 'N' THEN
2778 l_log_step := 'STEP4';
2779 UPDATE HZ_DQM_STAGE_LOG set start_flag='Y', start_time = SYSDATE
2780 WHERE OPERATION = p_command
2781 AND WORKER_NUMBER = l_worker_number AND step = l_log_step;
2782
2783 END IF;
2784
2785 HZ_STAGE_MAP_TRANSFORM_UPD.open_contact_cursor(
2786 l_worker_number, l_num_workers, l_contact_cur);
2787 IF l_contact_cur IS NOT NULL THEN
2788 HZ_STAGE_MAP_TRANSFORM_UPD.update_stage_contacts(l_contact_cur);
2789 CLOSE l_contact_cur;
2790 END IF;
2791 l_log_step := 'STEP4';
2792 UPDATE HZ_DQM_STAGE_LOG set end_flag='Y', end_time = SYSDATE
2793 WHERE OPERATION = p_command
2794 AND WORKER_NUMBER = l_worker_number AND step = l_log_step;
2795
2796 COMMIT;
2797 END IF;
2798
2799 log('Updating Party Site Records');
2800 OPEN l_log_cur(p_command, l_worker_number, 'STEP5');
2801 FETCH l_log_cur INTO l_start_flag, l_end_flag;
2802 IF (l_log_cur%NOTFOUND) THEN
2803 l_start_flag:=NULL;
2804 l_end_flag:=NULL;
2805 END IF;
2806 CLOSE l_log_cur;
2807
2808
2809 IF nvl(l_end_flag,'N') = 'N' THEN
2810 IF nvl(l_start_flag,'N') = 'N' THEN
2811 l_log_step := 'STEP5';
2812 UPDATE HZ_DQM_STAGE_LOG set start_flag='Y', start_time = SYSDATE
2813 WHERE OPERATION = p_command
2814 AND WORKER_NUMBER = l_worker_number AND step = l_log_step;
2815
2816 END IF;
2820 IF l_party_site_cur IS NOT NULL THEN
2817
2818 HZ_STAGE_MAP_TRANSFORM_UPD.open_party_site_cursor(
2819 l_worker_number, l_num_workers, l_party_site_cur);
2821 HZ_STAGE_MAP_TRANSFORM_UPD.update_stage_party_sites(l_party_site_cur);
2822 CLOSE l_party_site_cur;
2823 END IF;
2824
2825 l_log_step := 'STEP5';
2826 UPDATE HZ_DQM_STAGE_LOG set end_flag='Y', end_time = SYSDATE
2827 WHERE OPERATION = p_command
2828 AND WORKER_NUMBER = l_worker_number AND step = l_log_step;
2829
2830 COMMIT;
2831 END IF;
2832
2833 log('Updating Contact Point Records');
2834 OPEN l_log_cur(p_command, l_worker_number, 'STEP6');
2835 FETCH l_log_cur INTO l_start_flag, l_end_flag;
2836 IF (l_log_cur%NOTFOUND) THEN
2837 l_start_flag:=NULL;
2838 l_end_flag:=NULL;
2839 END IF;
2840 CLOSE l_log_cur;
2841
2842 IF nvl(l_end_flag,'N') = 'N' THEN
2843 IF nvl(l_start_flag,'N') = 'N' THEN
2844 l_log_step := 'STEP6';
2845 UPDATE HZ_DQM_STAGE_LOG set start_flag='Y', start_time = SYSDATE
2846 WHERE OPERATION = p_command
2847 AND WORKER_NUMBER = l_worker_number AND step = l_log_step;
2848
2849 END IF;
2850
2851 HZ_STAGE_MAP_TRANSFORM_UPD.open_contact_pt_cursor(
2852 l_worker_number, l_num_workers, l_cpt_cur);
2853 IF l_cpt_cur IS NOT NULL THEN
2854 HZ_STAGE_MAP_TRANSFORM_UPD.update_stage_contact_pts(l_cpt_cur);
2855 CLOSE l_cpt_cur;
2856 END IF;
2857 l_log_step := 'STEP6';
2858 UPDATE HZ_DQM_STAGE_LOG set end_flag='Y', end_time = SYSDATE
2859 WHERE OPERATION = p_command
2860 AND WORKER_NUMBER = l_worker_number AND step = l_log_step;
2861
2862 COMMIT;
2863 END IF;
2864
2865 END IF;
2866 log('Concurrent Program Execution completed ');
2867 log('End Time : '|| TO_CHAR(SYSDATE, 'MM-DD-YY HH24:MI:SS'));
2868
2869 EXCEPTION
2870 WHEN FND_API.G_EXC_ERROR THEN
2871 outandlog('Error: Aborting staging ' || FND_MESSAGE.GET);
2872 retcode := 2;
2873 errbuf := errbuf || logerror;
2874 FND_FILE.close;
2875 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
2876 outandlog('Error: Aborting staging ' || FND_MESSAGE.GET);
2877 retcode := 2;
2878 errbuf := errbuf || logerror;
2879 FND_FILE.close;
2880 WHEN OTHERS THEN
2881 outandlog('Error: Aborting staging '|| SQLERRM);
2882 retcode := 2;
2883 errbuf := errbuf || logerror;
2884 FND_FILE.close;
2885 END;
2886
2887 FUNCTION new_primary_trans(p_entity VARCHAR2
2888 ) RETURN BOOLEAN IS
2889 cursor is_new_tran (p_entity VARCHAR2) is
2890 select 'Y'
2891 from hz_trans_functions_vl t, hz_trans_attributes_b a
2892 where a.attribute_id = t.attribute_id
2893 and ENTITY_NAME = p_entity
2894 and nvl(staged_flag, 'N') = 'N'
2895 and primary_flag = 'Y'
2896 and nvl(active_flag, 'Y') = 'Y'
2897 and rownum = 1;
2898 l_var VARCHAR2(1);
2899 BEGIN
2900 l_var := 'N';
2901 OPEN is_new_tran(p_entity);
2902 FETCH is_new_tran INTO l_var;
2903 CLOSE is_new_tran;
2904 IF (l_var = 'Y') THEN
2905 return true;
2906 ELSE
2907 return false;
2908 END IF;
2909 EXCEPTION WHEN OTHERS THEN
2910 CLOSE is_new_tran;
2911 return true;
2912 END new_primary_trans;
2913
2914 PROCEDURE update_word_replacements
2915 IS
2916 CURSOR c_delete IS SELECT 1 FROM HZ_WORD_REPLACEMENTS
2917 WHERE DELETE_FLAG ='Y'
2918 AND ROWNUM =1;
2919 CURSOR c_staged IS SELECT 1 FROM HZ_WORD_REPLACEMENTS
2920 WHERE STAGED_FLAG ='N'
2921 AND ROWNUM =1;
2922 l_val NUMBER;
2923 BEGIN
2924 l_val := 0;
2925 OPEN c_delete;
2926 FETCH c_delete INTO l_val;
2927 CLOSE c_delete;
2928 -- Delete the records marked for delete.
2929 IF(l_val > 0)THEN
2930 log('Deleting word replacements that are marked for delete..');
2931 DELETE FROM HZ_WORD_REPLACEMENTS WHERE DELETE_FLAG = 'Y';
2932 log('Done deleting word replacements.');
2933 END IF;
2934 l_val := 0;
2935 OPEN c_staged;
2936 FETCH c_staged INTO l_val;
2937 CLOSE c_staged;
2938 -- Update the staged flag to 'Y'
2939 IF(l_val > 0)THEN
2940 log('Updating the staged_flag of word replacements to Y ..');
2941 UPDATE HZ_WORD_REPLACEMENTS SET STAGED_FLAG = 'Y'
2942 WHERE STAGED_FLAG = 'N';
2943 log('Done updating staged_flag of word replacements.');
2944 END IF;
2945 END update_word_replacements;
2946
2947
2948
2949 PROCEDURE Stage_create_index (
2950 errbuf OUT NOCOPY VARCHAR2,
2951 retcode OUT NOCOPY VARCHAR2,
2952 p_req1 IN VARCHAR2,
2953 p_req2 IN VARCHAR2,
2954 p_req3 IN VARCHAR2,
2955 p_req4 IN VARCHAR2,
2956 p_req5 IN VARCHAR2,
2957 p_req6 IN VARCHAR2,
2958 p_req7 IN VARCHAR2,
2959 p_req8 IN VARCHAR2,
2960 p_req9 IN VARCHAR2,
2961 p_req10 IN VARCHAR2,
2962 p_command IN VARCHAR2,
2963 p_idx_mem IN VARCHAR2,
2964 p_num_prll IN VARCHAR2,
2965 p_index IN VARCHAR2
2966 ) IS
2967
2968 CURSOR c_num_attrs (p_entity VARCHAR2) IS
2969 SELECT count(1) FROM
2973 AND nvl(f.ACTIVE_FLAG,'Y') = 'Y'
2970 (SELECT distinct f.staged_attribute_column
2971 FROM HZ_TRANS_FUNCTIONS_VL f, HZ_TRANS_ATTRIBUTES_VL a
2972 WHERE PRIMARY_FLAG = 'Y'
2974 and f.ATTRIBUTE_ID = a.ATTRIBUTE_ID
2975 AND a.entity_name = p_entity
2976 );
2977
2978 l_num_sections NUMBER;
2979 l_req1 CONSTANT NUMBER := TO_NUMBER(p_req1);
2980 l_req2 CONSTANT NUMBER := TO_NUMBER(p_req2);
2981 l_req3 CONSTANT NUMBER := TO_NUMBER(p_req3);
2982 l_req4 CONSTANT NUMBER := TO_NUMBER(p_req4);
2983 l_req5 CONSTANT NUMBER := TO_NUMBER(p_req5);
2984 l_req6 CONSTANT NUMBER := TO_NUMBER(p_req6);
2985 l_req7 CONSTANT NUMBER := TO_NUMBER(p_req7);
2986 l_req8 CONSTANT NUMBER := TO_NUMBER(p_req8);
2987 l_req9 CONSTANT NUMBER := TO_NUMBER(p_req9);
2988 l_req10 CONSTANT NUMBER := TO_NUMBER(p_req10);
2989
2990 uphase VARCHAR2(255);
2991 dphase VARCHAR2(255);
2992 ustatus VARCHAR2(255);
2993 dstatus VARCHAR2(255);
2994 l_index_owner VARCHAR2(255);
2995 message VARCHAR2(32000);
2996
2997 l_bool BOOLEAN;
2998
2999 -- VJN created for making code user friendly
3000 CREATE_PARTY_TEXT_INDEX BOOLEAN := FALSE ;
3001 CREATE_PS_TEXT_INDEX BOOLEAN := FALSE ;
3002 CREATE_CONTACT_TEXT_INDEX BOOLEAN := FALSE ;
3003 CREATE_CPT_TEXT_INDEX BOOLEAN := FALSE ;
3004 CREATE_ALL_BTREE_INDEXES BOOLEAN := FALSE ;
3005 CREATE_ALL_TEXT_INDEXES BOOLEAN := FALSE ;
3006 SYNC_PARTY_TEXT_INDEX BOOLEAN := FALSE ;
3007 SYNC_PS_TEXT_INDEX BOOLEAN := FALSE ;
3008 SYNC_CONTACT_TEXT_INDEX BOOLEAN := FALSE ;
3009 SYNC_CPT_TEXT_INDEX BOOLEAN := FALSE ;
3010 SYNC_DENORM_PARTY_TEXT_INDEX BOOLEAN := FALSE ;
3011 index_build_type VARCHAR2(255);
3012
3013
3014 l_num_parts NUMBER;
3015 l_num_jobs NUMBER;
3016 l_num_prll NUMBER;
3017
3018 l_start_flag VARCHAR2(30);
3019 l_end_flag VARCHAR2(30);
3020 l_command VARCHAR2(255);
3021
3022 l_section_grp VARCHAR2(255);
3023 l_min_id number;
3024 l_max_id number;
3025 tmp number;
3026
3027
3028 BEGIN
3029
3030 retcode := 0;
3031 l_command := p_command;
3032
3033 log ('--------------------------------------');
3034 outandlog('Starting Concurrent Program ''Create DQM indexes''');
3035 outandlog('Start Time ' || TO_CHAR(SYSDATE, 'MM-DD-YY HH24:MI:SS'));
3036 outandlog('NEWLINE');
3037
3038 outandlog('Waiting for workers to complete');
3039
3040 BEGIN
3041 IF l_req1 <> 1 THEN
3042 l_bool := FND_CONCURRENT.wait_for_request(TO_NUMBER(l_req1),
3043 30, 144000, uphase, ustatus, dphase, dstatus, message);
3044 IF dphase <> 'COMPLETE' THEN
3045 FND_MESSAGE.SET_NAME('AR', 'HZ_STAGE_WORKER_ERROR');
3046 FND_MESSAGE.SET_TOKEN('ID' ,l_req1);
3047 FND_MSG_PUB.ADD;
3048 RAISE FND_API.G_EXC_ERROR;
3049 ELSIF dphase = 'COMPLETE' and dstatus <> 'NORMAL' THEN
3050 FND_MESSAGE.SET_NAME('AR', 'HZ_STAGE_WORKER_ERROR');
3051 FND_MESSAGE.SET_TOKEN('ID' ,l_req1);
3052 FND_MSG_PUB.ADD;
3053 RAISE FND_API.G_EXC_ERROR;
3054 END IF;
3055 END IF;
3056 IF l_req2 <> 1 THEN
3057 l_bool := FND_CONCURRENT.wait_for_request(TO_NUMBER(l_req2),
3058 30, 144000, uphase, ustatus, dphase, dstatus, message);
3059 IF dphase <> 'COMPLETE' THEN
3060 FND_MESSAGE.SET_NAME('AR', 'HZ_STAGE_WORKER_ERROR');
3061 FND_MESSAGE.SET_TOKEN('ID' ,l_req2);
3062 FND_MSG_PUB.ADD;
3063 RAISE FND_API.G_EXC_ERROR;
3064 ELSIF dphase = 'COMPLETE' and dstatus <> 'NORMAL' THEN
3065 FND_MESSAGE.SET_NAME('AR', 'HZ_STAGE_WORKER_ERROR');
3066 FND_MESSAGE.SET_TOKEN('ID' ,l_req2);
3067 FND_MSG_PUB.ADD;
3068 RAISE FND_API.G_EXC_ERROR;
3069 END IF;
3070 END IF;
3071 IF l_req3 <> 1 THEN
3072 l_bool := FND_CONCURRENT.wait_for_request(TO_NUMBER(l_req3),
3073 30, 144000, uphase, ustatus, dphase, dstatus, message);
3074 IF dphase <> 'COMPLETE' THEN
3075 FND_MESSAGE.SET_NAME('AR', 'HZ_STAGE_WORKER_ERROR');
3076 FND_MESSAGE.SET_TOKEN('ID' ,l_req3);
3077 FND_MSG_PUB.ADD;
3078 RAISE FND_API.G_EXC_ERROR;
3079 ELSIF dphase = 'COMPLETE' and dstatus <> 'NORMAL' THEN
3080 FND_MESSAGE.SET_NAME('AR', 'HZ_STAGE_WORKER_ERROR');
3081 FND_MESSAGE.SET_TOKEN('ID' ,l_req3);
3082 FND_MSG_PUB.ADD;
3083 RAISE FND_API.G_EXC_ERROR;
3084 END IF;
3085 END IF;
3086 IF l_req4 <> 1 THEN
3087 l_bool := FND_CONCURRENT.wait_for_request(TO_NUMBER(l_req4),
3088 30, 144000, uphase, ustatus, dphase, dstatus, message);
3089 IF dphase <> 'COMPLETE' THEN
3090 FND_MESSAGE.SET_NAME('AR', 'HZ_STAGE_WORKER_ERROR');
3091 FND_MESSAGE.SET_TOKEN('ID' ,l_req3);
3092 FND_MSG_PUB.ADD;
3093 RAISE FND_API.G_EXC_ERROR;
3094 ELSIF dphase = 'COMPLETE' and dstatus <> 'NORMAL' THEN
3095 FND_MESSAGE.SET_NAME('AR', 'HZ_STAGE_WORKER_ERROR');
3096 FND_MESSAGE.SET_TOKEN('ID' ,l_req4);
3097 FND_MSG_PUB.ADD;
3098 RAISE FND_API.G_EXC_ERROR;
3099 END IF;
3100 END IF;
3101 IF l_req5 <> 1 THEN
3102 l_bool := FND_CONCURRENT.wait_for_request(TO_NUMBER(l_req5),
3103 30, 144000, uphase, ustatus, dphase, dstatus, message);
3107 FND_MSG_PUB.ADD;
3104 IF dphase <> 'COMPLETE' THEN
3105 FND_MESSAGE.SET_NAME('AR', 'HZ_STAGE_WORKER_ERROR');
3106 FND_MESSAGE.SET_TOKEN('ID' ,l_req4);
3108 RAISE FND_API.G_EXC_ERROR;
3109 ELSIF dphase = 'COMPLETE' and dstatus <> 'NORMAL' THEN
3110 FND_MESSAGE.SET_NAME('AR', 'HZ_STAGE_WORKER_ERROR');
3111 FND_MESSAGE.SET_TOKEN('ID' ,l_req5);
3112 FND_MSG_PUB.ADD;
3113 RAISE FND_API.G_EXC_ERROR;
3114 END IF;
3115 END IF;
3116 IF l_req6 <> 1 THEN
3117 l_bool := FND_CONCURRENT.wait_for_request(TO_NUMBER(l_req6),
3118 30, 144000, uphase, ustatus, dphase, dstatus, message);
3119 IF dphase <> 'COMPLETE' THEN
3120 FND_MESSAGE.SET_NAME('AR', 'HZ_STAGE_WORKER_ERROR');
3121 FND_MESSAGE.SET_TOKEN('ID' ,l_req5);
3122 FND_MSG_PUB.ADD;
3123 RAISE FND_API.G_EXC_ERROR;
3124 ELSIF dphase = 'COMPLETE' and dstatus <> 'NORMAL' THEN
3125 FND_MESSAGE.SET_NAME('AR', 'HZ_STAGE_WORKER_ERROR');
3126 FND_MESSAGE.SET_TOKEN('ID' ,l_req6);
3127 FND_MSG_PUB.ADD;
3128 RAISE FND_API.G_EXC_ERROR;
3129 END IF;
3130 END IF;
3131 IF l_req7 <> 1 THEN
3132 l_bool := FND_CONCURRENT.wait_for_request(TO_NUMBER(l_req7),
3133 30, 144000, uphase, ustatus, dphase, dstatus, message);
3134 IF dphase <> 'COMPLETE' THEN
3135 FND_MESSAGE.SET_NAME('AR', 'HZ_STAGE_WORKER_ERROR');
3136 FND_MESSAGE.SET_TOKEN('ID' ,l_req6);
3137 FND_MSG_PUB.ADD;
3138 RAISE FND_API.G_EXC_ERROR;
3139 ELSIF dphase = 'COMPLETE' and dstatus <> 'NORMAL' THEN
3140 FND_MESSAGE.SET_NAME('AR', 'HZ_STAGE_WORKER_ERROR');
3141 FND_MESSAGE.SET_TOKEN('ID' ,l_req7);
3142 FND_MSG_PUB.ADD;
3143 RAISE FND_API.G_EXC_ERROR;
3144 END IF;
3145 END IF;
3146 IF l_req8 <> 1 THEN
3147 l_bool := FND_CONCURRENT.wait_for_request(TO_NUMBER(l_req8),
3148 30, 144000, uphase, ustatus, dphase, dstatus, message);
3149 IF dphase <> 'COMPLETE' THEN
3150 FND_MESSAGE.SET_NAME('AR', 'HZ_STAGE_WORKER_ERROR');
3151 FND_MESSAGE.SET_TOKEN('ID' ,l_req8);
3152 FND_MSG_PUB.ADD;
3153 RAISE FND_API.G_EXC_ERROR;
3154 ELSIF dphase = 'COMPLETE' and dstatus <> 'NORMAL' THEN
3155 FND_MESSAGE.SET_NAME('AR', 'HZ_STAGE_WORKER_ERROR');
3156 FND_MESSAGE.SET_TOKEN('ID' ,l_req8);
3157 FND_MSG_PUB.ADD;
3158 RAISE FND_API.G_EXC_ERROR;
3159 END IF;
3160 END IF;
3161 IF l_req9 <> 1 THEN
3162 l_bool := FND_CONCURRENT.wait_for_request(TO_NUMBER(l_req9),
3163 30, 144000, uphase, ustatus, dphase, dstatus, message);
3164 IF dphase <> 'COMPLETE' THEN
3165 FND_MESSAGE.SET_NAME('AR', 'HZ_STAGE_WORKER_ERROR');
3166 FND_MESSAGE.SET_TOKEN('ID' ,l_req9);
3167 FND_MSG_PUB.ADD;
3168 RAISE FND_API.G_EXC_ERROR;
3169 ELSIF dphase = 'COMPLETE' and dstatus <> 'NORMAL' THEN
3170 FND_MESSAGE.SET_NAME('AR', 'HZ_STAGE_WORKER_ERROR');
3171 FND_MESSAGE.SET_TOKEN('ID' ,l_req9);
3172 FND_MSG_PUB.ADD;
3173 RAISE FND_API.G_EXC_ERROR;
3174 END IF;
3175 END IF;
3176 IF l_req10 <> 1 THEN
3177 l_bool := FND_CONCURRENT.wait_for_request(TO_NUMBER(l_req10),
3178 30, 144000, uphase, ustatus, dphase, dstatus, message);
3179 IF dphase <> 'COMPLETE' THEN
3180 FND_MESSAGE.SET_NAME('AR', 'HZ_STAGE_WORKER_ERROR');
3181 FND_MESSAGE.SET_TOKEN('ID' ,l_req10);
3182 FND_MSG_PUB.ADD;
3183 RAISE FND_API.G_EXC_ERROR;
3184 ELSIF dphase = 'COMPLETE' and dstatus <> 'NORMAL' THEN
3185 FND_MESSAGE.SET_NAME('AR', 'HZ_STAGE_WORKER_ERROR');
3186 FND_MESSAGE.SET_TOKEN('ID' ,l_req10);
3187 FND_MSG_PUB.ADD;
3188 RAISE FND_API.G_EXC_ERROR;
3189 END IF;
3190 END IF;
3191 EXCEPTION
3192 WHEN FND_API.G_EXC_ERROR THEN
3193 RAISE FND_API.G_EXC_ERROR;
3194 WHEN OTHERS THEN
3195 FND_MESSAGE.SET_NAME('AR', 'HZ_STAGE_SQL_ERROR');
3196 FND_MESSAGE.SET_TOKEN('PROC' ,'Index Creation Worker Completion Check');
3197 FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM);
3198 FND_MSG_PUB.ADD;
3199 RAISE FND_API.G_EXC_ERROR;
3200 END;
3201
3202 COMMIT;
3203 log('Workers have completed successfully');
3204
3205 l_bool := fnd_installation.GET_APP_INFO('AR',ustatus,dstatus,l_index_owner);
3206
3207
3208 -- DECODE WHAT p_index MEANS IN MEANINGFUL TERMS
3209 IF p_index = 'ALL'
3210 THEN
3211 CREATE_ALL_TEXT_INDEXES := TRUE ;
3212 CREATE_PARTY_TEXT_INDEX := TRUE ;
3213 CREATE_PS_TEXT_INDEX := TRUE ;
3214 CREATE_CONTACT_TEXT_INDEX := TRUE ;
3215 CREATE_CPT_TEXT_INDEX := TRUE ;
3216 index_build_type := 'CREATE' ;
3217
3218 ELSIF p_index = 'ALL_BTREE'
3219 THEN
3220 CREATE_ALL_BTREE_INDEXES := TRUE ;
3221 index_build_type := 'CREATE' ;
3222
3223 ELSIF p_index = 'HZ_PARTIES'
3224 THEN
3225 CREATE_PARTY_TEXT_INDEX := TRUE ;
3226 index_build_type := 'CREATE' ;
3227
3228 ELSIF p_index = 'HZ_PARTY_SITES'
3229 THEN
3230 CREATE_PS_TEXT_INDEX := TRUE ;
3231 index_build_type := 'CREATE' ;
3232
3233 ELSIF p_index = 'HZ_ORG_CONTACTS'
3234 THEN
3238
3235 CREATE_CONTACT_TEXT_INDEX := TRUE ;
3236 index_build_type := 'CREATE' ;
3237
3239 ELSIF p_index = 'HZ_CONTACT_POINTS'
3240 THEN
3241 CREATE_CPT_TEXT_INDEX := TRUE ;
3242 index_build_type := 'CREATE' ;
3243
3244 ELSIF p_index = 'HZ_PARTIES_BTREE'
3245 THEN
3246 SYNC_PARTY_TEXT_INDEX := TRUE ;
3247 index_build_type := 'SYNC' ;
3248
3249 ELSIF p_index = 'HZ_PARTY_SITES_BTREE'
3250 THEN
3251 SYNC_PS_TEXT_INDEX := TRUE ;
3252 index_build_type := 'SYNC' ;
3253
3254 ELSIF p_index = 'HZ_ORG_CONTACTS_BTREE'
3255 THEN
3256 SYNC_CONTACT_TEXT_INDEX := TRUE ;
3257 index_build_type := 'SYNC' ;
3258
3259 ELSIF p_index = 'HZ_CONTACT_POINTS_BTREE'
3260 THEN
3261 SYNC_CPT_TEXT_INDEX := TRUE ;
3262 index_build_type := 'SYNC' ;
3263
3264 ELSIF p_index = 'STAGE_NEW_DENORM'
3265 THEN
3266 SYNC_DENORM_PARTY_TEXT_INDEX := TRUE ;
3267 index_build_type := 'SYNC' ;
3268
3269 END IF ;
3270
3271 -- NOTE ::
3272 -- TEXT INDEXES -- THESE ARE CREATED OR SYNCED, DEPENDING ON THE FLOW
3273 -- B-TREE INDEXES -- 1. THERE IS NO CONCEPT OF SYNC FOR THESE. IT IS ALWAYS A CREATE FOR THEM WITH THE
3274 -- UNDERSTANDING THAT CREATION HAPPENS AFTER MAKING SURE THEY DO NOT EXIST ALREADY.
3275 -- 2. THESE ARE ALWAYS CREATED, REGARDLESS OF THE BUILD TYPE.
3276
3277
3278
3279 -- SYNC FLOW
3280 IF index_build_type = 'SYNC'
3281 THEN
3282 log(' Index build type is SYNC for the INDEX Worker');
3283 -- SYNC DENORM PARTY TEXT INDEX
3284 IF SYNC_DENORM_PARTY_TEXT_INDEX THEN
3285 outandlog('Submitting index request for new denorm attributes.');
3286 create_btree_indexes ('PARTY');
3287 BEGIN
3288 select min(party_id), max(party_id)
3289 into l_min_id, l_max_id
3290 from hz_staged_parties;
3291 WHILE (l_min_id <= l_max_id )
3292 LOOP
3293 select party_id into tmp
3294 from (
3295 select party_id, rownum rnum
3296 from ( SELECT party_id
3297 from hz_staged_parties
3298 where party_id>l_min_id
3299 and rownum<1001 ) a )
3300 where rnum = 1000;
3301 update hz_staged_parties set d_ps = 'SYNC', d_ct = 'SYNC', d_cpt = 'SYNC', concat_col = concat_col
3302 where party_id between l_min_id and tmp;
3303 AD_CTX_DDL.sync_index(l_index_owner|| '.hz_stage_parties_t1');
3304 FND_Concurrent.af_commit;
3305 l_min_id:=tmp+1;
3306 END LOOP;
3307 EXCEPTION
3308 WHEN NO_DATA_FOUND THEN
3309 update hz_staged_parties set concat_col = concat_col,
3310 d_ps = 'SYNC', d_ct = 'SYNC', d_cpt = 'SYNC'
3311 where party_id between l_min_id and l_max_id ;
3312 AD_CTX_DDL.sync_index(l_index_owner ||'.hz_stage_parties_t1');
3313 FND_Concurrent.af_commit;
3314 WHEN OTHERS THEN
3315 FND_FILE.put_line(FND_FILE.log, 'Error during DENORM PARTY Index Synchronization SQLEERM=' ||SQLERRM);
3316 retcode := 2;
3317 errbuf := SQLERRM;
3318 END;
3319
3320 outandlog('Done index request for new denorm attributes.');
3321 -- SYNC DENORM PARTY INDEX
3322 ELSIF SYNC_PARTY_TEXT_INDEX THEN
3323 create_btree_indexes ('PARTY');
3324 IF (new_primary_trans('PARTY')) THEN
3325 BEGIN
3326 select min(party_id), max(party_id)
3327 into l_min_id, l_max_id
3328 from hz_staged_parties;
3329 WHILE (l_min_id <= l_max_id )
3330 LOOP
3331 select party_id into tmp
3332 from (
3333 select party_id, rownum rnum
3334 from ( SELECT party_id
3335 from hz_staged_parties
3336 where party_id>l_min_id
3337 and rownum<1001 ) a )
3338 where rnum = 1000;
3339 update hz_staged_parties set concat_col = concat_col
3340 where party_id between l_min_id and tmp;
3341 FND_FILE.put_line(FND_FILE.log, 'Attempting to SYNC the hz_stage_parties_t1 index');
3342 AD_CTX_DDL.sync_index(l_index_owner|| '.hz_stage_parties_t1');
3343 FND_FILE.put_line(FND_FILE.log, 'SYNC of the hz_stage_parties_t1 index successful');
3344 FND_Concurrent.af_commit;
3345 l_min_id:=tmp+1;
3346 END LOOP;
3347 EXCEPTION
3348 WHEN NO_DATA_FOUND THEN
3352 AD_CTX_DDL.sync_index(l_index_owner ||'.hz_stage_parties_t1');
3349 update hz_staged_parties set concat_col = concat_col
3350 where party_id between l_min_id and l_max_id ;
3351 FND_FILE.put_line(FND_FILE.log, 'Attempting to SYNC the hz_stage_parties_t1 index');
3353 FND_FILE.put_line(FND_FILE.log, 'SYNC of the hz_stage_parties_t1 index successful');
3354 FND_Concurrent.af_commit;
3355 WHEN OTHERS THEN
3356 FND_FILE.put_line(FND_FILE.log, 'Error during PARTY Index Synchronization SQLEERM=' ||SQLERRM);
3357 retcode := 2;
3358 errbuf := SQLERRM;
3359 END;
3360
3361 END IF;
3362 UPDATE HZ_TRANS_FUNCTIONS_B
3363 SET STAGED_FLAG='Y'
3364 WHERE nvl(ACTIVE_FLAG,'Y') = 'Y' and nvl(staged_flag,'N')='N'
3365 and attribute_id in (
3366 select attribute_id from hz_trans_attributes_vl where entity_name='PARTY');
3367 log('Setting STAGED_FLAG=Y in HZ_TRANS_FUNCTIONS_B for PARTY entity transformations after staging');
3368 -- SYNC DENORM PARTY SITE TEXT INDEX
3369 ELSIF SYNC_PS_TEXT_INDEX THEN
3370 create_btree_indexes ('PARTY_SITES');
3371 IF (new_primary_trans('PARTY_SITES')) THEN
3372 BEGIN
3373 select min(party_site_id), max(party_site_id)
3374 into l_min_id, l_max_id
3375 from hz_staged_party_sites;
3376 WHILE (l_min_id <= l_max_id )
3377 LOOP
3378 select party_site_id into tmp
3379 from (
3380 select party_site_id, rownum rnum
3381 from ( SELECT party_site_id
3382 from hz_staged_party_sites
3383 where party_site_id > l_min_id
3384 and rownum<1001 ) a )
3385 where rnum = 1000;
3386 update hz_staged_party_sites set concat_col = concat_col
3387 where party_id between l_min_id and tmp;
3388 FND_FILE.put_line(FND_FILE.log, 'Attempting to SYNC the hz_stage_party_sites_t1 index');
3389 AD_CTX_DDL.sync_index(l_index_owner ||'.hz_stage_party_sites_t1');
3390 FND_FILE.put_line(FND_FILE.log, 'SYNC of the hz_stage_party_sites_t1 index successful');
3391 FND_Concurrent.af_commit;
3392 l_min_id:=tmp+1;
3393 END LOOP;
3394 EXCEPTION
3395 WHEN NO_DATA_FOUND THEN
3396 update hz_staged_party_sites set concat_col = concat_col
3397 where party_site_id between l_min_id and l_max_id ;
3398 FND_FILE.put_line(FND_FILE.log, 'Attempting to SYNC the hz_stage_party_sites_t1 index');
3399 AD_CTX_DDL.sync_index(l_index_owner ||'.hz_stage_party_sites_t1');
3400 FND_FILE.put_line(FND_FILE.log, 'SYNC of the hz_stage_party_sites_t1 index successful');
3401 FND_Concurrent.af_commit;
3402 WHEN OTHERS THEN
3403 FND_FILE.put_line(FND_FILE.log, 'Error during PARTY SITES Index Synchronization SQLEERM=' ||SQLERRM);
3404 retcode := 2;
3405 errbuf := SQLERRM;
3406 END;
3407 END IF;
3408 UPDATE HZ_TRANS_FUNCTIONS_B
3409 SET STAGED_FLAG='Y'
3410 WHERE nvl(ACTIVE_FLAG,'Y') = 'Y' and nvl(staged_flag,'N')='N'
3411 and attribute_id in (
3412 select attribute_id from hz_trans_attributes_vl where entity_name='PARTY_SITES');
3413 log('Setting STAGED_FLAG=Y in HZ_TRANS_FUNCTIONS_B for PARTY_SITES ENTITY after staging');
3414 create_denorm_attribute_pref ('PARTY_SITES');
3415
3416 -- SYNC DENORM CONTACT TEXT INDEX
3417 ELSIF SYNC_CONTACT_TEXT_INDEX THEN
3418 create_btree_indexes ('CONTACTS');
3419 IF (new_primary_trans('CONTACTS')) THEN
3420 BEGIN
3421 select min(org_contact_id), max(org_contact_id)
3422 into l_min_id, l_max_id
3423 from hz_staged_contacts;
3424 WHILE (l_min_id <= l_max_id )
3425 LOOP
3426 select org_contact_id into tmp
3427 from (
3428 select org_contact_id, rownum rnum
3429 from ( SELECT org_contact_id
3430 from hz_staged_contacts
3431 where org_contact_id > l_min_id
3432 and rownum<1001 ) a )
3433 where rnum = 1000;
3434 update hz_staged_contacts set concat_col = concat_col
3435 where org_contact_id between l_min_id and tmp;
3436 FND_FILE.put_line(FND_FILE.log, 'Attempting to SYNC the hz_stage_contact_t1 index');
3437 AD_CTX_DDL.sync_index(l_index_owner||'.hz_stage_contact_t1');
3441 END LOOP;
3438 FND_FILE.put_line(FND_FILE.log, 'SYNC of the hz_stage_contact_t1 index successful');
3439 FND_Concurrent.af_commit;
3440 l_min_id:=tmp+1;
3442 EXCEPTION
3443 WHEN NO_DATA_FOUND THEN
3444 update hz_staged_contacts set concat_col = concat_col
3445 where org_contact_id between l_min_id and l_max_id ;
3446 FND_FILE.put_line(FND_FILE.log, 'Attempting to SYNC the hz_stage_contact_t1 index');
3447 AD_CTX_DDL.sync_index(l_index_owner||'.hz_stage_contact_t1');
3448 FND_FILE.put_line(FND_FILE.log, 'SYNC of the hz_stage_contact_t1 index successful');
3449 FND_Concurrent.af_commit;
3450 WHEN OTHERS THEN
3451 FND_FILE.put_line(FND_FILE.log, 'Error during CONTACTS Index Synchronization SQLEERM=' ||SQLERRM);
3452 retcode := 2;
3453 errbuf := SQLERRM;
3454 END;
3455
3456 END IF;
3457 UPDATE HZ_TRANS_FUNCTIONS_B
3458 SET STAGED_FLAG='Y'
3459 WHERE nvl(ACTIVE_FLAG,'Y') = 'Y' and nvl(staged_flag,'N')='N'
3460 and attribute_id in (
3461 select attribute_id from hz_trans_attributes_vl where entity_name='CONTACTS');
3462 log('Setting STAGED_FLAG=Y in HZ_TRANS_FUNCTIONS_B for CONTACTS ENTITY after staging');
3463 create_denorm_attribute_pref ('CONTACTS');
3464 -- SYNC DENORM CONTACT POINT TEXT INDEX
3465 ELSIF SYNC_CPT_TEXT_INDEX THEN
3466 create_btree_indexes ('CONTACT_POINTS');
3467 IF (new_primary_trans('CONTACT_POINTS')) THEN
3468 BEGIN
3469 select min(contact_point_id), max(contact_point_id)
3470 into l_min_id, l_max_id
3471 from hz_staged_contact_points;
3472 WHILE (l_min_id <= l_max_id )
3473 LOOP
3474 select contact_point_id into tmp
3475 from (
3476 select contact_point_id, rownum rnum
3477 from ( SELECT contact_point_id
3478 from hz_staged_contact_points
3479 where contact_point_id > l_min_id
3480 and rownum<1001 ) a )
3481 where rnum = 1000;
3482 update hz_staged_contact_points set concat_col = concat_col
3483 where contact_point_id between l_min_id and tmp;
3484 FND_FILE.put_line(FND_FILE.log, 'Attempting to SYNC the hz_stage_cpt_t1 index');
3485 AD_CTX_DDL.sync_index(l_index_owner||'.hz_stage_cpt_t1');
3486 FND_FILE.put_line(FND_FILE.log, 'SYNC of the hz_stage_cpt_t1 index successful');
3487 FND_Concurrent.af_commit;
3488 l_min_id:=tmp+1;
3489 END LOOP;
3490 EXCEPTION
3491 WHEN NO_DATA_FOUND THEN
3492 update hz_staged_contact_points set concat_col = concat_col
3493 where contact_point_id between l_min_id and l_max_id ;
3494 FND_FILE.put_line(FND_FILE.log, 'Attempting to SYNC the hz_stage_cpt_t1 index');
3495 AD_CTX_DDL.sync_index(l_index_owner||'.hz_stage_cpt_t1');
3496 FND_FILE.put_line(FND_FILE.log, 'SYNC of the hz_stage_cpt_t1 index successful');
3497 FND_Concurrent.af_commit;
3498 WHEN OTHERS THEN
3499 FND_FILE.put_line(FND_FILE.log, 'Error during CONTACT POINTS Index Synchronization SQLEERM=' ||SQLERRM);
3500 retcode := 2;
3501 errbuf := SQLERRM;
3502 END;
3503
3504
3505 END IF;
3506 UPDATE HZ_TRANS_FUNCTIONS_B
3507 SET STAGED_FLAG='Y'
3508 WHERE nvl(ACTIVE_FLAG,'Y') = 'Y' and nvl(staged_flag,'N')='N'
3509 and attribute_id in (
3510 select attribute_id from hz_trans_attributes_vl where entity_name='CONTACT_POINTS');
3511 log('Setting STAGED_FLAG=Y in HZ_TRANS_FUNCTIONS_B for CONTACT_POINTS ENTITY after staging');
3512 create_denorm_attribute_pref ('CONTACT_POINTS');
3513 END IF;
3514 -- CREATE FLOW
3515 ELSIF index_build_type = 'CREATE'
3516 THEN
3517
3518 log(' Index build type is CREATE for the INDEX Worker');
3519 IF CREATE_ALL_BTREE_INDEXES THEN
3520 create_btree_indexes ('PARTY');
3521 create_btree_indexes ('PARTY_SITES');
3522 create_btree_indexes ('CONTACTS');
3523 create_btree_indexes ('CONTACT_POINTS');
3524 UPDATE HZ_TRANS_FUNCTIONS_B
3525 SET STAGED_FLAG='Y'
3526 WHERE nvl(ACTIVE_FLAG,'Y') = 'Y'
3527 AND nvl(staged_flag,'N')='N' ;
3531 create_denorm_attribute_pref ('CONTACT_POINTS');
3528 log('Setting STAGED_FLAG=Y in HZ_TRANS_FUNCTIONS_B after create_btree_indexes');
3529 create_denorm_attribute_pref ('PARTY_SITES');
3530 create_denorm_attribute_pref ('CONTACTS');
3532 END IF ;
3533
3534
3535 IF CREATE_PARTY_TEXT_INDEX THEN
3536 create_btree_indexes ('PARTY');
3537 BEGIN
3538 SELECT start_flag, end_flag INTO l_start_flag, l_end_flag
3539 FROM HZ_DQM_STAGE_LOG
3540 WHERE OPERATION = 'CREATE_INDEXES'
3541 AND step = 'HZ_PARTIES';
3542 EXCEPTION
3543 WHEN no_data_found THEN
3544 l_start_flag:=NULL;
3545 l_end_flag:=NULL;
3546 END;
3547
3548 IF nvl(l_end_flag,'N') = 'N' THEN
3549 BEGIN
3550 execute immediate 'begin ctx_output.start_log(''party_index''); end;';
3551 EXCEPTION
3552 WHEN OTHERS THEN
3553 NULL;
3554 END;
3555
3556 IF nvl(l_start_flag,'N') = 'Y' THEN
3557 BEGIN
3558 log('Attempting restart build of index '||l_index_owner || '.hz_stage_parties_t1');
3559 EXECUTE IMMEDIATE 'ALTER INDEX ' || l_index_owner ||
3560 '.hz_stage_parties_t1 rebuild parameters(''resume memory ' || p_idx_mem || ''')';
3561 log('Index Successfully built');
3562
3563 UPDATE HZ_DQM_STAGE_LOG set END_FLAG = 'Y', END_TIME=SYSDATE
3564 WHERE operation = 'CREATE_INDEXES' AND step ='HZ_PARTIES';
3565 COMMIT;
3566
3567 EXCEPTION
3568 WHEN OTHERS THEN
3569 log('Restart Unsuccesful .. Recreating');
3570 BEGIN
3571 EXECUTE IMMEDIATE 'DROP INDEX ' || l_index_owner || '.hz_stage_parties_t1 FORCE';
3572 log('Dropped hz_stage_parties_t1');
3573 EXCEPTION
3574 WHEN OTHERS THEN
3575 NULL;
3576 END;
3577 l_start_flag := 'N';
3578 l_command := 'STAGE_ALL_DATA';
3579
3580 END;
3581 END IF;
3582
3583 IF nvl(l_start_flag,'N') = 'N' THEN
3584 UPDATE HZ_DQM_STAGE_LOG set START_FLAG = 'Y', START_TIME=SYSDATE
3585 WHERE operation = 'CREATE_INDEXES' AND step ='HZ_PARTIES';
3586 COMMIT;
3587
3588 l_section_grp := g_schema_name || '.HZ_DQM_PARTY_GRP';
3589
3590 IF l_command <> 'STAGE_NEW_TRANSFORMATIONS' THEN
3591 log(' Creating hz_stage_parties_t1 on hz_staged_parties.');
3592 log(' Index Memory ' || p_idx_mem);
3593 log(' Starting at ' || to_char(SYSDATE, 'HH24:MI:SS') );
3594
3595 EXECUTE IMMEDIATE 'CREATE INDEX ' || l_index_owner || '.hz_stage_parties_t1 ON ' ||
3596 'hz_staged_parties(concat_col) indextype is ctxsys.context ' ||
3597 'parameters (''storage '||g_schema_name || '.HZ_DQM_STORAGE datastore '||g_schema_name || '.hz_party_ds ' ||
3598 'SECTION GROUP '||l_section_grp||' STOPLIST CTXSYS.EMPTY_STOPLIST LEXER '||g_schema_name || '.dqm_lexer memory ' || p_idx_mem || ''')';
3599 ELSE
3600 log(' Attempting to drop and create hz_stage_parties_t1 on hz_staged_parties with new transformations.');
3601 log(' Index Memory ' || p_idx_mem);
3602 log(' Starting at ' || to_char(SYSDATE, 'HH24:MI:SS') );
3603
3604 BEGIN
3605 -- DROP AND CREATE
3606 EXECUTE IMMEDIATE 'DROP INDEX ' || l_index_owner || '.hz_stage_parties_t1 FORCE';
3607 log('Dropped hz_stage_parties_t1');
3608 EXCEPTION
3609 WHEN OTHERS THEN
3610 NULL;
3611
3612 END ;
3613 EXECUTE IMMEDIATE 'CREATE INDEX ' || l_index_owner || '.hz_stage_parties_t1 ON ' ||
3614 'hz_staged_parties(concat_col) indextype is ctxsys.context ' ||
3615 'parameters (''storage '||g_schema_name || '.HZ_DQM_STORAGE datastore '||g_schema_name || '.hz_party_ds ' ||
3616 'SECTION GROUP '||l_section_grp||' STOPLIST CTXSYS.EMPTY_STOPLIST LEXER '||g_schema_name || '.dqm_lexer memory ' || p_idx_mem || ''')';
3617 log('Done creating hz_stage_parties_t1');
3618 END IF;
3619
3620 UPDATE HZ_DQM_STAGE_LOG set END_FLAG = 'Y', END_TIME=SYSDATE
3621 WHERE operation = 'CREATE_INDEXES' AND step ='HZ_PARTIES';
3622 COMMIT;
3623 END IF;
3624 log(' Completed at ' || to_char(SYSDATE, 'HH24:MI:SS'));
3625
3626 END IF;
3627 END IF;
3628
3632 SELECT start_flag, end_flag INTO l_start_flag, l_end_flag
3629 IF CREATE_PS_TEXT_INDEX THEN
3630 create_btree_indexes ('PARTY_SITES');
3631 BEGIN
3633 FROM HZ_DQM_STAGE_LOG
3634 WHERE OPERATION = 'CREATE_INDEXES'
3635 AND step = 'HZ_PARTY_SITES';
3636 EXCEPTION
3637 WHEN no_data_found THEN
3638 l_start_flag:=NULL;
3639 l_end_flag:=NULL;
3640 END;
3641
3642 IF nvl(l_end_flag,'N') = 'N' THEN
3643 BEGIN
3644 execute immediate 'begin ctx_output.start_log(''party_site_index''); end;';
3645 EXCEPTION
3646 WHEN OTHERS THEN
3647 NULL;
3648 END;
3649
3650 IF nvl(l_start_flag,'N') = 'Y' THEN
3651 BEGIN
3652 log('Attempting restart build of index '||l_index_owner || '.hz_stage_party_sites_t1');
3653 EXECUTE IMMEDIATE 'ALTER INDEX ' || l_index_owner ||
3654 '.hz_stage_party_sites_t1 rebuild parameters(''resume memory ' || p_idx_mem || ''')';
3655 log('Index Successfully built');
3656
3657 UPDATE HZ_DQM_STAGE_LOG set END_FLAG = 'Y', END_TIME=SYSDATE
3658 WHERE operation = 'CREATE_INDEXES' AND step ='HZ_PARTY_SITES';
3659 COMMIT;
3660
3661 EXCEPTION
3662 WHEN OTHERS THEN
3663 log('Restart Unsuccesful .. Recreating');
3664 BEGIN
3665 EXECUTE IMMEDIATE 'DROP INDEX ' || l_index_owner || '.hz_stage_party_sites_t1 FORCE';
3666 log('Dropped hz_stage_party_sites_t1');
3667 EXCEPTION
3668 WHEN OTHERS THEN
3669 NULL;
3670 END;
3671 l_start_flag := 'N';
3672 l_command := 'STAGE_ALL_DATA';
3673
3674 END;
3675 END IF;
3676
3677 IF nvl(l_start_flag,'N') = 'N' THEN
3678 UPDATE HZ_DQM_STAGE_LOG set START_FLAG = 'Y', START_TIME=SYSDATE
3679 WHERE operation = 'CREATE_INDEXES' AND step ='HZ_PARTY_SITES';
3680 COMMIT;
3681
3682 l_section_grp := g_schema_name || '.HZ_DQM_PS_GRP';
3683
3684 IF l_command <> 'STAGE_NEW_TRANSFORMATIONS' THEN
3685 log(' Creating hz_stage_party_sites_t1 on hz_staged_party_sites. ');
3686 log(' Index Memory ' || p_idx_mem);
3687 log(' Starting at ' || to_char(SYSDATE, 'HH24:MI:SS'));
3688
3689 EXECUTE IMMEDIATE 'CREATE INDEX ' || l_index_owner || '.hz_stage_party_sites_t1 ON ' ||
3690 'hz_staged_party_sites(concat_col) indextype is ctxsys.context ' ||
3691 'parameters (''storage '||g_schema_name || '.HZ_DQM_STORAGE datastore '||g_schema_name || '.hz_party_site_ds ' ||
3692 'SECTION GROUP '||l_section_grp||' STOPLIST CTXSYS.EMPTY_STOPLIST LEXER '||g_schema_name || '.dqm_lexer memory ' || p_idx_mem || ''')';
3693 ELSE
3694 log(' Attempting to drop and create hz_stage_party_sites_t1 on hz_staged_party_sites with new transformations.');
3695 log(' Index Memory ' || p_idx_mem);
3696 log(' Starting at ' || to_char(SYSDATE, 'HH24:MI:SS') );
3697
3698 -- DROP AND CREATE
3699 BEGIN
3700 EXECUTE IMMEDIATE 'DROP INDEX ' || l_index_owner || '.hz_stage_party_sites_t1 FORCE';
3701 log('Dropped hz_stage_party_sites_t1');
3702 EXCEPTION
3703 WHEN OTHERS THEN
3704 NULL;
3705 END ;
3706 EXECUTE IMMEDIATE 'CREATE INDEX ' || l_index_owner || '.hz_stage_party_sites_t1 ON ' ||
3707 'hz_staged_party_sites(concat_col) indextype is ctxsys.context ' ||
3708 'parameters (''storage '||g_schema_name || '.HZ_DQM_STORAGE datastore '||g_schema_name || '.hz_party_site_ds ' ||
3709 'SECTION GROUP '||l_section_grp||' STOPLIST CTXSYS.EMPTY_STOPLIST LEXER '||g_schema_name || '.dqm_lexer memory ' || p_idx_mem || ''')';
3710 log('Done creating hz_stage_party_sites_t1');
3711 END IF;
3712
3713 UPDATE HZ_DQM_STAGE_LOG set END_FLAG = 'Y', END_TIME=SYSDATE
3714 WHERE operation = 'CREATE_INDEXES' AND step ='HZ_PARTY_SITES';
3715 COMMIT;
3716 END IF;
3717 log(' Completed at ' || to_char(SYSDATE, 'HH24:MI:SS'));
3718 END IF;
3719 END IF;
3720 log('');
3721
3722 IF CREATE_CONTACT_TEXT_INDEX THEN
3723 create_btree_indexes ('CONTACTS');
3727 WHERE OPERATION = 'CREATE_INDEXES'
3724 BEGIN
3725 SELECT start_flag, end_flag INTO l_start_flag, l_end_flag
3726 FROM HZ_DQM_STAGE_LOG
3728 AND step = 'HZ_ORG_CONTACTS';
3729 EXCEPTION
3730 WHEN no_data_found THEN
3731 l_start_flag:=NULL;
3732 l_end_flag:=NULL;
3733 END;
3734
3735 IF nvl(l_end_flag,'N') = 'N' THEN
3736 BEGIN
3737 execute immediate 'begin ctx_output.start_log(''contact_index''); end;';
3738 EXCEPTION
3739 WHEN OTHERS THEN
3740 NULL;
3741 END;
3742
3743 IF nvl(l_start_flag,'N') = 'Y' THEN
3744 BEGIN
3745 log('Attempting restart build of index '||l_index_owner || '.hz_stage_contact_t1');
3746 EXECUTE IMMEDIATE 'ALTER INDEX ' || l_index_owner ||
3747 '.hz_stage_contact_t1 rebuild parameters(''resume memory ' || p_idx_mem || ''')';
3748 log('Index Successfully built');
3749
3750 UPDATE HZ_DQM_STAGE_LOG set END_FLAG = 'Y', END_TIME=SYSDATE
3751 WHERE operation = 'CREATE_INDEXES' AND step ='HZ_ORG_CONTACTS';
3752 COMMIT;
3753
3754 EXCEPTION
3755 WHEN OTHERS THEN
3756 log('Restart uncessful. Recreating Index');
3757 BEGIN
3758 EXECUTE IMMEDIATE 'DROP INDEX ' || l_index_owner || '.hz_stage_contact_t1 FORCE';
3759 log('Dropped hz_stage_contact_t1');
3760 EXCEPTION
3761 WHEN OTHERS THEN
3762 NULL;
3763 END;
3764 l_start_flag := 'N';
3765 l_command := 'STAGE_ALL_DATA';
3766
3767 END;
3768 END IF;
3769
3770 IF nvl(l_start_flag,'N') = 'N' THEN
3771 UPDATE HZ_DQM_STAGE_LOG set START_FLAG = 'Y', START_TIME=SYSDATE
3772 WHERE operation = 'CREATE_INDEXES' AND step ='HZ_ORG_CONTACTS';
3773 COMMIT;
3774
3775 l_section_grp := g_schema_name || '.HZ_DQM_CONTACT_GRP';
3776
3777 IF l_command <> 'STAGE_NEW_TRANSFORMATIONS' THEN
3778 log(' Creating hz_stage_contact_t1 on hz_staged_contacts. ');
3779 log(' Index Memory ' || p_idx_mem);
3780 log(' Starting at ' || to_char(SYSDATE, 'HH24:MI:SS'));
3781
3782 EXECUTE IMMEDIATE 'CREATE INDEX ' || l_index_owner || '.hz_stage_contact_t1 ON ' ||
3783 'hz_staged_contacts(concat_col) indextype is ctxsys.context ' ||
3784 'parameters (''storage '||g_schema_name || '.HZ_DQM_STORAGE datastore '||g_schema_name || '.hz_contact_ds ' ||
3785 'SECTION GROUP '||l_section_grp||' STOPLIST CTXSYS.EMPTY_STOPLIST LEXER '||g_schema_name || '.dqm_lexer memory ' || p_idx_mem || ''')';
3786 ELSE
3787 log(' Attempting to drop and create hz_stage_contact_t1 on hz_staged_contacts with new transformations.');
3788 log(' Index Memory ' || p_idx_mem);
3789 log(' Starting at ' || to_char(SYSDATE, 'HH24:MI:SS') );
3790
3791 BEGIN
3792 -- DROP AND CREATE
3793 EXECUTE IMMEDIATE 'DROP INDEX ' || l_index_owner || '.hz_stage_contact_t1 FORCE';
3794 log('Dropped hz_stage_contact_t1');
3795 EXCEPTION
3796 WHEN OTHERS THEN
3797 NULL;
3798
3799 END ;
3800
3801 EXECUTE IMMEDIATE 'CREATE INDEX ' || l_index_owner || '.hz_stage_contact_t1 ON ' ||
3802 'hz_staged_contacts(concat_col) indextype is ctxsys.context ' ||
3803 'parameters (''storage '||g_schema_name || '.HZ_DQM_STORAGE datastore '||g_schema_name || '.hz_contact_ds ' ||
3804 'SECTION GROUP '||l_section_grp||' STOPLIST CTXSYS.EMPTY_STOPLIST LEXER '||g_schema_name || '.dqm_lexer memory ' || p_idx_mem || ''')';
3805 log('Created hz_stage_contact_t1');
3806
3807 END IF;
3808
3809 UPDATE HZ_DQM_STAGE_LOG set END_FLAG = 'Y', END_TIME=SYSDATE
3810 WHERE operation = 'CREATE_INDEXES' AND step ='HZ_ORG_CONTACTS';
3811 COMMIT;
3812 END IF;
3813 log(' Completed at ' || to_char(SYSDATE, 'HH24:MI:SS'));
3814 END IF;
3815 END IF;
3816 log('');
3817
3818 IF CREATE_CPT_TEXT_INDEX THEN
3819 create_btree_indexes ('CONTACT_POINTS');
3820 BEGIN
3821 SELECT start_flag, end_flag INTO l_start_flag, l_end_flag
3825 EXCEPTION
3822 FROM HZ_DQM_STAGE_LOG
3823 WHERE OPERATION = 'CREATE_INDEXES'
3824 AND step = 'HZ_CONTACT_POINTS';
3826 WHEN no_data_found THEN
3827 l_start_flag:=NULL;
3828 l_end_flag:=NULL;
3829 END;
3830
3831 IF nvl(l_end_flag,'N') = 'N' THEN
3832 BEGIN
3833 execute immediate 'begin ctx_output.start_log(''contact_point_index''); end;';
3834 EXCEPTION
3835 WHEN OTHERS THEN
3836 NULL;
3837 END;
3838
3839 IF nvl(l_start_flag,'N') = 'Y' THEN
3840 BEGIN
3841 log('Attempting restart build of index '||l_index_owner || '.hz_stage_cpt_t1');
3842 EXECUTE IMMEDIATE 'ALTER INDEX ' || l_index_owner ||
3843 '.hz_stage_cpt_t1 rebuild parameters(''resume memory ' || p_idx_mem || ''')';
3844
3845 log('Index Successfully built');
3846 UPDATE HZ_DQM_STAGE_LOG set END_FLAG = 'Y', END_TIME=SYSDATE
3847 WHERE operation = 'CREATE_INDEXES' AND step ='HZ_CONTACT_POINTS';
3848 COMMIT;
3849
3850 EXCEPTION
3851 WHEN OTHERS THEN
3852 log('Restart unsuccessful. Rebuilding index.');
3853 BEGIN
3854 EXECUTE IMMEDIATE 'DROP INDEX ' || l_index_owner || '.hz_stage_cpt_t1 FORCE';
3855 log('Dropped hz_stage_cpt_t1');
3856 EXCEPTION
3857 WHEN OTHERS THEN
3858 NULL;
3859 END;
3860 l_start_flag := 'N';
3861 l_command := 'STAGE_ALL_DATA';
3862
3863 END;
3864 END IF;
3865
3866 IF nvl(l_start_flag,'N') = 'N' THEN
3867 UPDATE HZ_DQM_STAGE_LOG set START_FLAG = 'Y', START_TIME=SYSDATE
3868 WHERE operation = 'CREATE_INDEXES' AND step ='HZ_CONTACT_POINTS';
3869 COMMIT;
3870
3871 l_section_grp := g_schema_name || '.HZ_DQM_CPT_GRP';
3872
3873 IF l_command <> 'STAGE_NEW_TRANSFORMATIONS' THEN
3874 log(' Creating hz_stage_cpt_t1 on hz_staged_contact_points. ');
3875 log(' Index Memory ' || p_idx_mem);
3876 log(' Starting at ' || to_char(SYSDATE, 'HH24:MI:SS'));
3877
3878 EXECUTE IMMEDIATE 'CREATE INDEX ' || l_index_owner || '.hz_stage_cpt_t1 ON ' ||
3879 'hz_staged_contact_points(concat_col) indextype is ctxsys.context ' ||
3880 'parameters (''storage '||g_schema_name || '.HZ_DQM_STORAGE datastore '||g_schema_name || '.hz_contact_point_ds ' ||
3881 'SECTION GROUP '||l_section_grp||' STOPLIST CTXSYS.EMPTY_STOPLIST LEXER '||g_schema_name || '.dqm_lexer memory ' || p_idx_mem || ''')';
3882 ELSE
3883 log(' Attempting to drop and create hz_stage_cpt_t1 on hz_staged_contact_points with new transformations.');
3884 log(' Index Memory ' || p_idx_mem);
3885 log(' Starting at ' || to_char(SYSDATE, 'HH24:MI:SS') );
3886
3887
3888 BEGIN
3889 -- DROP AND CREATE
3890 EXECUTE IMMEDIATE 'DROP INDEX ' || l_index_owner || '.hz_stage_cpt_t1 FORCE';
3891 log('Dropped hz_stage_contact_t1');
3892 EXCEPTION
3893 WHEN OTHERS THEN
3894 NULL;
3895
3896 END ;
3897 EXECUTE IMMEDIATE 'CREATE INDEX ' || l_index_owner || '.hz_stage_cpt_t1 ON ' ||
3898 'hz_staged_contact_points(concat_col) indextype is ctxsys.context ' ||
3899 'parameters (''storage '||g_schema_name || '.HZ_DQM_STORAGE datastore '||g_schema_name || '.hz_contact_point_ds ' ||
3900 'SECTION GROUP '||l_section_grp||' STOPLIST CTXSYS.EMPTY_STOPLIST LEXER '||g_schema_name || '.dqm_lexer memory ' || p_idx_mem || ''')';
3901
3902 log('Done creating hz_stage_contact_t1');
3903 END IF;
3904
3905 UPDATE HZ_DQM_STAGE_LOG set END_FLAG = 'Y', END_TIME=SYSDATE
3906 WHERE operation = 'CREATE_INDEXES' AND step ='HZ_CONTACT_POINTS';
3907 COMMIT;
3908 END IF;
3909 log(' Completed at ' || to_char(SYSDATE, 'HH24:MI:SS'));
3910 END IF;
3911 END IF;
3912
3913 -- FINALLY UPDATE THE STAGED_FLAG IN HZ_TRANS_FUNCTIONS
3914 UPDATE HZ_TRANS_FUNCTIONS_B
3915 SET STAGED_FLAG='Y' WHERE nvl(ACTIVE_FLAG,'Y') = 'Y'
3916 AND nvl(staged_flag,'N')='N';
3917 log('Setting STAGED_FLAG=Y in HZ_TRANS_FUNCTIONS_B after create_indexes');
3918 --DELETE THE WORD REPLACEMENTS THAT ARE MARKED FOR DELETE AND
3922 IF CREATE_ALL_TEXT_INDEXES
3919 --UPDATE THE STAGED FLAG OF WORD REPLACEMENTS TO Y.
3920 update_word_replacements;
3921
3923 THEN
3924 log(' Creating preferences for all the denorm attributes');
3925 create_denorm_attribute_pref ('PARTY_SITES');
3926 create_denorm_attribute_pref ('CONTACTS');
3927 create_denorm_attribute_pref ('CONTACT_POINTS');
3928 ELSIF CREATE_PS_TEXT_INDEX
3929 THEN
3930 log(' Creating preference for the PARTY SITE denorm attribute');
3931 create_denorm_attribute_pref ('PARTY_SITES');
3932 ELSIF CREATE_CONTACT_TEXT_INDEX
3933 THEN
3934 log(' Creating preference for the CONTACT denorm attribute');
3935 create_denorm_attribute_pref ('CONTACTS');
3936 ELSIF CREATE_CPT_TEXT_INDEX
3937 THEN
3938 log(' Creating preference for the CONTACT POINT denorm attribute');
3939 create_denorm_attribute_pref ('CONTACT_POINTS');
3940 END IF ;
3941
3942
3943 END IF;
3944
3945 log('');
3946 log('Concurrent Program Execution completed ');
3947 log('End Time : '|| TO_CHAR(SYSDATE, 'MM-DD-YY HH24:MI:SS'));
3948
3949 EXCEPTION
3950 WHEN FND_API.G_EXC_ERROR THEN
3951 outandlog('Error: ' || FND_MESSAGE.GET);
3952 log('Error ' || SQLERRM);
3953 retcode := 2;
3954 errbuf := errbuf || logerror;
3955 outandlog('Aborting concurrent program execution');
3956 FND_FILE.close;
3957 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
3958 outandlog('Error: ' || FND_MESSAGE.GET);
3959 log('Error ' || SQLERRM);
3960 retcode := 2;
3961 errbuf := errbuf || logerror;
3962 outandlog('Aborting concurrent program execution');
3963 FND_FILE.close;
3964 WHEN OTHERS THEN
3965 outandlog('Error: ' || FND_MESSAGE.GET);
3966 log('SQL Error ' || SQLERRM);
3967 retcode := 2;
3968 errbuf := errbuf || logerror || SQLERRM;
3969 outandlog('Aborting concurrent program execution');
3970 FND_FILE.close;
3971 END;
3972
3973 PROCEDURE generate_map_proc (
3974 p_entity IN VARCHAR2,
3975 p_proc_name IN VARCHAR2,
3976 p_command IN VARCHAR2
3977 ) IS
3978 l_update_str VARCHAR2(4000);
3979 FIRST BOOLEAN;
3980 BEGIN
3981
3982
3983 l('FUNCTION ' || p_proc_name || '( ');
3984 l(' p_record_id NUMBER,');
3985 IF p_entity = 'PARTY' THEN
3986 l(' p_search_rec HZ_PARTY_SEARCH.party_search_rec_type');
3987 l(' ) RETURN HZ_PARTY_STAGE.party_stage_rec_type IS ');
3988 l('l_stage_rec HZ_PARTY_STAGE.party_stage_rec_type;');
3989 l('BEGIN');
3990 l(' l_stage_rec.party_id := p_record_id;');
3991 l(' l_stage_rec.status := p_search_rec.STATUS;');
3992 ELSIF p_entity = 'PARTY_SITES' THEN
3993 l(' p_party_id NUMBER,');
3994 l(' p_search_rec HZ_PARTY_SEARCH.party_site_search_rec_type');
3995 l(' ) RETURN HZ_PARTY_STAGE.party_site_stage_rec_type IS ');
3996 l('l_stage_rec HZ_PARTY_STAGE.party_site_stage_rec_type;');
3997 l('BEGIN');
3998 l(' l_stage_rec.party_id := p_party_id;');
3999 l(' l_stage_rec.party_site_id := p_record_id;');
4000 ELSIF p_entity = 'CONTACTS' THEN
4001 l(' p_party_id NUMBER,');
4002 l(' p_search_rec HZ_PARTY_SEARCH.contact_search_rec_type');
4003 l(' ) RETURN HZ_PARTY_STAGE.contact_stage_rec_type IS ');
4004 l('l_stage_rec HZ_PARTY_STAGE.contact_stage_rec_type;');
4005 l('BEGIN');
4006 l(' l_stage_rec.party_id := p_party_id;');
4007 l(' l_stage_rec.org_contact_id := p_record_id;');
4008 ELSIF p_entity = 'CONTACT_POINTS' THEN
4009 l(' p_party_id NUMBER,');
4010 l(' p_search_rec HZ_PARTY_SEARCH.contact_point_search_rec_type');
4011 l(' ) RETURN HZ_PARTY_STAGE.contact_pt_stage_rec_type IS ');
4012 l('l_stage_rec HZ_PARTY_STAGE.contact_pt_stage_rec_type;');
4013 l('BEGIN');
4014 l(' l_stage_rec.party_id := p_party_id;');
4015 l(' l_stage_rec.contact_point_id := p_record_id;');
4016 l(' l_stage_rec.contact_point_type := p_search_rec.CONTACT_POINT_TYPE;');
4017 END IF;
4018
4019 IF p_command = 'STAGE_NEW_TRANSFORMATIONS' THEN
4020 FIRST := TRUE;
4021 l_update_str := null;
4022
4023 for ATTRS IN (SELECT ATTRIBUTE_ID, ATTRIBUTE_NAME
4024 FROM HZ_TRANS_ATTRIBUTES_VL
4025 WHERE ENTITY_NAME = p_entity)
4026
4027 LOOP
4028 for FUNCS IN (SELECT PROCEDURE_NAME, STAGED_ATTRIBUTE_COLUMN
4029 FROM HZ_TRANS_FUNCTIONS_VL
4030 WHERE ATTRIBUTE_ID = ATTRS.ATTRIBUTE_ID
4031 AND nvl(ACTIVE_FLAG,'Y') = 'Y'
4032 AND NVL(STAGED_FLAG,'N') <> 'Y')
4033 LOOP
4034 l(' l_stage_rec.'||FUNCS.STAGED_ATTRIBUTE_COLUMN || ' := ');
4035 l(' ' || FUNCS.PROCEDURE_NAME ||'(');
4036 l(' p_search_rec.'||ATTRS.ATTRIBUTE_NAME);
4037 l(' ,null,''' || ATTRS.ATTRIBUTE_NAME || '''');
4038 l(' ,''' ||p_entity||''');');
4039 IF FIRST THEN
4040 l_update_str := ' '|| FUNCS.STAGED_ATTRIBUTE_COLUMN || ' = ' ||
4044 l_update_str := l_update_str || ','|| FUNCS.STAGED_ATTRIBUTE_COLUMN || ' = ' ||
4041 ' l_stage_rec.'||FUNCS.STAGED_ATTRIBUTE_COLUMN || ' ';
4042 FIRST := FALSE;
4043 ELSE
4045 ' l_stage_rec.'||FUNCS.STAGED_ATTRIBUTE_COLUMN || ' ';
4046 END IF;
4047 END LOOP;
4048 END LOOP;
4049
4050 IF l_update_str IS NOT NULL THEN
4051 IF p_entity = 'PARTY' THEN
4052 l(' UPDATE HZ_STAGED_PARTIES SET ');
4053 l(' ' || l_update_str);
4054 l(' WHERE party_id = p_record_id;');
4055 ELSIF p_entity = 'PARTY_SITES' THEN
4056 l(' UPDATE HZ_STAGED_PARTY_SITES SET ');
4057 l(' ' || l_update_str);
4058 l(' WHERE party_site_id = p_record_id;');
4059 ELSIF p_entity = 'CONTACTS' THEN
4060 l(' UPDATE HZ_STAGED_CONTACTS SET ');
4061 l(' ' || l_update_str);
4062 l(' WHERE org_contact_id = p_record_id;');
4063 ELSIF p_entity = 'CONTACT_POINTS' THEN
4064 l(' UPDATE HZ_STAGED_CONTACT_POINTS SET ');
4065 l(' ' || l_update_str);
4066 l(' WHERE contact_point_id = p_record_id;');
4067 END IF;
4068 END IF;
4069
4070 ELSE
4071
4072 for ATTRS IN (SELECT ATTRIBUTE_ID, ATTRIBUTE_NAME
4073 FROM HZ_TRANS_ATTRIBUTES_VL
4074 WHERE ENTITY_NAME = p_entity)
4075 LOOP
4076 for FUNCS IN (SELECT PROCEDURE_NAME, STAGED_ATTRIBUTE_COLUMN
4077 FROM HZ_TRANS_FUNCTIONS_VL
4078 WHERE ATTRIBUTE_ID = ATTRS.ATTRIBUTE_ID
4079 AND nvl(ACTIVE_FLAG,'Y') = 'Y')
4080 LOOP
4081 l(' l_stage_rec.'||FUNCS.STAGED_ATTRIBUTE_COLUMN || ' := ');
4082 l(' ' || FUNCS.PROCEDURE_NAME ||'(');
4083 l(' p_search_rec.'||ATTRS.ATTRIBUTE_NAME);
4084
4085 -- Temporary fix for bug 2265498
4086 -- Will be fixed when bug 2269873
4087 l(' ,null,''' || ATTRS.ATTRIBUTE_NAME || '''');
4088 l(' ,''' ||p_entity||''');');
4089 END LOOP;
4090 END LOOP;
4091 END IF;
4092
4093 l(' RETURN l_stage_rec;');
4094 l('EXCEPTION');
4095 l(' WHEN OTHERS THEN');
4096 l(' FND_MESSAGE.SET_NAME(''AR'', ''HZ_MAP_PROC_ERROR'');');
4097 l(' FND_MESSAGE.SET_TOKEN(''PROC'' ,''' || p_proc_name||''');');
4098 l(' FND_MESSAGE.SET_TOKEN(''ERROR'' ,SQLERRM);');
4099 l(' FND_MSG_PUB.ADD;');
4100 l(' RAISE FND_API.G_EXC_UNEXPECTED_ERROR;');
4101
4102 l('END;');
4103
4104 EXCEPTION
4105 WHEN OTHERS THEN
4106 FND_MESSAGE.SET_NAME('AR', 'HZ_STAGE_SQL_ERROR');
4107 FND_MESSAGE.SET_TOKEN('PROC' ,'generate_transform_proc');
4108 FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM);
4109 FND_MSG_PUB.ADD;
4110 RAISE FND_API.G_EXC_ERROR;
4111 END;
4112
4113 PROCEDURE generate_declarations IS
4114
4115 BEGIN
4116 l(' TYPE NumberList IS TABLE OF NUMBER INDEX BY BINARY_INTEGER;');
4117 l(' TYPE Char1List IS TABLE OF VARCHAR2(1) INDEX BY BINARY_INTEGER;');
4118 l(' TYPE Char2List IS TABLE OF VARCHAR2(30) INDEX BY BINARY_INTEGER;');
4119 l(' TYPE CharList IS TABLE OF VARCHAR2(2000) INDEX BY BINARY_INTEGER;');
4120 l(' TYPE RowIdList IS TABLE OF ROWID INDEX BY BINARY_INTEGER; ');
4121 l(' ');
4122 l(' H_ROWID RowIdList;');
4123 l(' H_P_PARTY_ID NumberList;');
4124 l(' H_PS_DEN CharList;');
4125 l(' H_CT_DEN CharList;');
4126 l(' H_CPT_DEN CharList;');
4127 l(' H_PARTY_INDEX NumberList;');
4128 l(' H_PARTY_ID NumberList;');
4129 l(' H_C_PARTY_ID NumberList;');
4130 l(' H_PS_PARTY_ID NumberList;');
4131 l(' H_CPT_PARTY_ID NumberList;');
4132 l(' H_R_PARTY_ID NumberList;');
4133 l(' H_STATUS Char1List;');
4134 l(' H_PARTY_SITE_ID NumberList;');
4135 l(' H_CPT_PARTY_SITE_ID NumberList;');
4136 l(' H_ORG_CONTACT_ID NumberList;');
4137 l(' H_PS_ORG_CONTACT_ID NumberList;');
4138 l(' H_CPT_ORG_CONTACT_ID NumberList;');
4139 l(' H_CONTACT_POINT_ID NumberList;');
4140 l(' H_CONTACT_POINT_TYPE Char2List;');
4141 l(' H_TX1 CharList;');
4142 l(' H_TX2 CharList;');
4143 l(' H_TX3 CharList;');
4144 l(' H_TX4 CharList;');
4145 l(' H_TX5 CharList;');
4146 l(' H_TX6 CharList;');
4147 l(' H_TX7 CharList;');
4148 l(' H_TX8 CharList;');
4149 l(' H_TX9 CharList;');
4150 l(' H_TX10 CharList;');
4151 l(' H_TX11 CharList;');
4152 l(' H_TX12 CharList;');
4153 l(' H_TX13 CharList;');
4154 l(' H_TX14 CharList;');
4155 l(' H_TX15 CharList;');
4156 l(' H_TX16 CharList;');
4157 l(' H_TX17 CharList;');
4158 l(' H_TX18 CharList;');
4159 l(' H_TX19 CharList;');
4160 l(' H_TX20 CharList;');
4161 l(' H_TX21 CharList;');
4162 l(' H_TX22 CharList;');
4163 l(' H_TX23 CharList;');
4164 l(' H_TX24 CharList;');
4165 l(' H_TX25 CharList;');
4166 l(' H_TX26 CharList;');
4167 l(' H_TX27 CharList;');
4168 l(' H_TX28 CharList;');
4169 l(' H_TX29 CharList;');
4170 l(' H_TX30 CharList;');
4171 l(' H_TX31 CharList;');
4172 l(' H_TX32 CharList;');
4173 l(' H_TX33 CharList;');
4174 l(' H_TX34 CharList;');
4175 l(' H_TX35 CharList;');
4176 l(' H_TX36 CharList;');
4180 l(' H_TX40 CharList;');
4177 l(' H_TX37 CharList;');
4178 l(' H_TX38 CharList;');
4179 l(' H_TX39 CharList;');
4181 l(' H_TX41 CharList;');
4182 l(' H_TX42 CharList;');
4183 l(' H_TX43 CharList;');
4184 l(' H_TX44 CharList;');
4185 l(' H_TX45 CharList;');
4186 l(' H_TX46 CharList;');
4187 l(' H_TX47 CharList;');
4188 l(' H_TX48 CharList;');
4189 l(' H_TX49 CharList;');
4190 l(' H_TX50 CharList;');
4191 l(' H_TX51 CharList;');
4192 l(' H_TX52 CharList;');
4193 l(' H_TX53 CharList;');
4194 l(' H_TX54 CharList;');
4195 l(' H_TX55 CharList;');
4196 l(' H_TX56 CharList;');
4197 l(' H_TX57 CharList;');
4198 l(' H_TX58 CharList;');
4199 l(' H_TX59 CharList;');
4200 l(' H_TX60 CharList;');
4201 l(' H_TX61 CharList;');
4202 l(' H_TX62 CharList;');
4203 l(' H_TX63 CharList;');
4204 l(' H_TX64 CharList;');
4205 l(' H_TX65 CharList;');
4206 l(' H_TX66 CharList;');
4207 l(' H_TX67 CharList;');
4208 l(' H_TX68 CharList;');
4209 l(' H_TX69 CharList;');
4210 l(' H_TX70 CharList;');
4211 l(' H_TX71 CharList;');
4212 l(' H_TX72 CharList;');
4213 l(' H_TX73 CharList;');
4214 l(' H_TX74 CharList;');
4215 l(' H_TX75 CharList;');
4216 l(' H_TX76 CharList;');
4217 l(' H_TX77 CharList;');
4218 l(' H_TX78 CharList;');
4219 l(' H_TX79 CharList;');
4220 l(' H_TX80 CharList;');
4221 l(' H_TX81 CharList;');
4222 l(' H_TX82 CharList;');
4223 l(' H_TX83 CharList;');
4224 l(' H_TX84 CharList;');
4225 l(' H_TX85 CharList;');
4226 l(' H_TX86 CharList;');
4227 l(' H_TX87 CharList;');
4228 l(' H_TX88 CharList;');
4229 l(' H_TX89 CharList;');
4230 l(' H_TX90 CharList;');
4231 l(' H_TX91 CharList;');
4232 l(' H_TX92 CharList;');
4233 l(' H_TX93 CharList;');
4234 l(' H_TX94 CharList;');
4235 l(' H_TX95 CharList;');
4236 l(' H_TX96 CharList;');
4237 l(' H_TX97 CharList;');
4238 l(' H_TX98 CharList;');
4239 l(' H_TX99 CharList;');
4240 l(' H_TX100 CharList;');
4241 l(' H_TX101 CharList;');
4242 l(' H_TX102 CharList;');
4243 l(' H_TX103 CharList;');
4244 l(' H_TX104 CharList;');
4245 l(' H_TX105 CharList;');
4246 l(' H_TX106 CharList;');
4247 l(' H_TX107 CharList;');
4248 l(' H_TX108 CharList;');
4249 l(' H_TX109 CharList;');
4250 l(' H_TX110 CharList;');
4251 l(' H_TX111 CharList;');
4252 l(' H_TX112 CharList;');
4253 l(' H_TX113 CharList;');
4254 l(' H_TX114 CharList;');
4255 l(' H_TX115 CharList;');
4256 l(' H_TX116 CharList;');
4257 l(' H_TX117 CharList;');
4258 l(' H_TX118 CharList;');
4259 l(' H_TX119 CharList;');
4260 l(' H_TX120 CharList;');
4261 l(' H_TX121 CharList;');
4262 l(' H_TX122 CharList;');
4263 l(' H_TX123 CharList;');
4264 l(' H_TX124 CharList;');
4265 l(' H_TX125 CharList;');
4266 l(' H_TX126 CharList;');
4267 l(' H_TX127 CharList;');
4268 l(' H_TX128 CharList;');
4269 l(' H_TX129 CharList;');
4270 l(' H_TX130 CharList;');
4271 l(' H_TX131 CharList;');
4272 l(' H_TX132 CharList;');
4273 l(' H_TX133 CharList;');
4274 l(' H_TX134 CharList;');
4275 l(' H_TX135 CharList;');
4276 l(' H_TX136 CharList;');
4277 l(' H_TX137 CharList;');
4278 l(' H_TX138 CharList;');
4279 l(' H_TX139 CharList;');
4280 l(' H_TX140 CharList;');
4281 l(' H_TX141 CharList;');
4282 l(' H_TX142 CharList;');
4283 l(' H_TX143 CharList;');
4284 l(' H_TX144 CharList;');
4285 l(' H_TX145 CharList;');
4286 l(' H_TX146 CharList;');
4287 l(' H_TX147 CharList;');
4288 l(' H_TX148 CharList;');
4289 l(' H_TX149 CharList;');
4290 l(' H_TX150 CharList;');
4291 l(' H_TX151 CharList;');
4292 l(' H_TX152 CharList;');
4293 l(' H_TX153 CharList;');
4294 l(' H_TX154 CharList;');
4295 l(' H_TX155 CharList;');
4296 l(' H_TX156 CharList;');
4297 l(' H_TX157 CharList;');
4298 l(' H_TX158 CharList;');
4299 l(' H_TX159 CharList;');
4300 l(' H_TX160 CharList;');
4301 l(' H_TX161 CharList;');
4302 l(' H_TX162 CharList;');
4303 l(' H_TX163 CharList;');
4304 l(' H_TX164 CharList;');
4305 l(' H_TX165 CharList;');
4306 l(' H_TX166 CharList;');
4307 l(' H_TX167 CharList;');
4308 l(' H_TX168 CharList;');
4309 l(' H_TX169 CharList;');
4310 l(' H_TX170 CharList;');
4311 l(' H_TX171 CharList;');
4312 l(' H_TX172 CharList;');
4313 l(' H_TX173 CharList;');
4314 l(' H_TX174 CharList;');
4315 l(' H_TX175 CharList;');
4316 l(' H_TX176 CharList;');
4317 l(' H_TX177 CharList;');
4318 l(' H_TX178 CharList;');
4319 l(' H_TX179 CharList;');
4320 l(' H_TX180 CharList;');
4321 l(' H_TX181 CharList;');
4322 l(' H_TX182 CharList;');
4323 l(' H_TX183 CharList;');
4324 l(' H_TX184 CharList;');
4325 l(' H_TX185 CharList;');
4326 l(' H_TX186 CharList;');
4327 l(' H_TX187 CharList;');
4328 l(' H_TX188 CharList;');
4329 l(' H_TX189 CharList;');
4330 l(' H_TX190 CharList;');
4331 l(' H_TX191 CharList;');
4332 l(' H_TX192 CharList;');
4333 l(' H_TX193 CharList;');
4337 l(' H_TX197 CharList;');
4334 l(' H_TX194 CharList;');
4335 l(' H_TX195 CharList;');
4336 l(' H_TX196 CharList;');
4338 l(' H_TX198 CharList;');
4339 l(' H_TX199 CharList;');
4340 l(' H_TX200 CharList;');
4341 l(' H_TX201 CharList;');
4342 l(' H_TX202 CharList;');
4343 l(' H_TX203 CharList;');
4344 l(' H_TX204 CharList;');
4345 l(' H_TX205 CharList;');
4346 l(' H_TX206 CharList;');
4347 l(' H_TX207 CharList;');
4348 l(' H_TX208 CharList;');
4349 l(' H_TX209 CharList;');
4350 l(' H_TX210 CharList;');
4351 l(' H_TX211 CharList;');
4352 l(' H_TX212 CharList;');
4353 l(' H_TX213 CharList;');
4354 l(' H_TX214 CharList;');
4355 l(' H_TX215 CharList;');
4356 l(' H_TX216 CharList;');
4357 l(' H_TX217 CharList;');
4358 l(' H_TX218 CharList;');
4359 l(' H_TX219 CharList;');
4360 l(' H_TX220 CharList;');
4361 l(' H_TX221 CharList;');
4362 l(' H_TX222 CharList;');
4363 l(' H_TX223 CharList;');
4364 l(' H_TX224 CharList;');
4365 l(' H_TX225 CharList;');
4366 l(' H_TX226 CharList;');
4367 l(' H_TX227 CharList;');
4368 l(' H_TX228 CharList;');
4369 l(' H_TX229 CharList;');
4370 l(' H_TX230 CharList;');
4371 l(' H_TX231 CharList;');
4372 l(' H_TX232 CharList;');
4373 l(' H_TX233 CharList;');
4374 l(' H_TX234 CharList;');
4375 l(' H_TX235 CharList;');
4376 l(' H_TX236 CharList;');
4377 l(' H_TX237 CharList;');
4378 l(' H_TX238 CharList;');
4379 l(' H_TX239 CharList;');
4380 l(' H_TX240 CharList;');
4381 l(' H_TX241 CharList;');
4382 l(' H_TX242 CharList;');
4383 l(' H_TX243 CharList;');
4384 l(' H_TX244 CharList;');
4385 l(' H_TX245 CharList;');
4386 l(' H_TX246 CharList;');
4387 l(' H_TX247 CharList;');
4388 l(' H_TX248 CharList;');
4389 l(' H_TX249 CharList;');
4390 l(' H_TX250 CharList;');
4391 l(' H_TX251 CharList;');
4392 l(' H_TX252 CharList;');
4393 l(' H_TX253 CharList;');
4394 l(' H_TX254 CharList;');
4395 l(' H_TX255 CharList;');
4396 END;
4397
4398 PROCEDURE generate_ds_proc IS
4399
4400 FIRST BOOLEAN := TRUE;
4401 uname VARCHAR2(255);
4402
4403 pref_cols VARCHAR2(1000);
4404 proc_cols VARCHAR2(2000);
4405 fetch_cols VARCHAR2(2000);
4406 CURSOR l_ent_cur(l_ent_name VARCHAR2) IS (SELECT STAGED_ATTRIBUTE_COLUMN
4407 FROM HZ_TRANS_ATTRIBUTES_VL a, HZ_TRANS_FUNCTIONS_VL f
4408 WHERE ENTITY_NAME = l_ent_name
4409 AND nvl(f.ACTIVE_FLAG,'Y') = 'Y'
4410 AND nvl(f.PRIMARY_FLAG,'Y') = 'Y'
4411 AND nvl(a.DENORM_FLAG,'N') = 'Y'
4412 AND f.ATTRIBUTE_ID = a.ATTRIBUTE_ID);
4413 l_attr VARCHAR2(255);
4414
4415 BEGIN
4416
4417 SELECT SYS_CONTEXT ('USERENV', 'SESSION_USER') INTO uname
4418 FROM DUAL;
4419
4420 get_datastore_cols('PARTY', pref_cols, proc_cols, fetch_cols);
4421
4422 l(' FUNCTION miscp (rid IN ROWID) RETURN CLOB IS');
4423 IF proc_cols IS NULL THEN
4424 l(' BEGIN');
4425 l(' RETURN NULL;');
4426 l(' END;');
4427 ELSE
4428 l(' CURSOR P IS');
4429 l(' SELECT '||proc_cols||' FROM '||uname||'.HZ_STAGED_PARTIES WHERE ROWID=rid;');
4430 l(' val CLOB;');
4431 l(' BEGIN');
4432 l(' val:=null;');
4433 l(' FOR rec in P LOOP');
4434 l(' val:='||fetch_cols||';');
4435 l(' END LOOP;');
4436 l(' return val;');
4437 l(' END;');
4438 END IF;
4439
4440
4441 get_datastore_cols('PARTY_SITES', pref_cols, proc_cols, fetch_cols);
4442 l(' FUNCTION miscps (rid IN ROWID) RETURN CLOB IS');
4443 IF proc_cols IS NULL THEN
4444 l(' BEGIN');
4445 l(' RETURN NULL;');
4446 l(' END;');
4447 ELSE
4448 l(' CURSOR P IS');
4449 l(' SELECT '||proc_cols||' FROM '||uname||'.HZ_STAGED_PARTY_SITES WHERE ROWID=rid;');
4450 l(' val CLOB ;');
4451 l(' BEGIN');
4452 l(' val:=null;');
4453 l(' FOR rec in P LOOP');
4454 l(' val:='||fetch_cols||';');
4455 l(' END LOOP;');
4456 l(' return val;');
4457 l(' END;');
4458 END IF;
4459
4460 get_datastore_cols('CONTACTS', pref_cols, proc_cols, fetch_cols);
4461 l(' FUNCTION miscct (rid IN ROWID) RETURN CLOB IS');
4462 IF proc_cols IS NULL THEN
4463 l(' BEGIN');
4464 l(' RETURN NULL;');
4465 l(' END;');
4466 ELSE
4467 l(' CURSOR P IS');
4468 l(' SELECT '||proc_cols||' FROM '||uname||'.HZ_STAGED_CONTACTS WHERE ROWID=rid;');
4469 l(' val CLOB;');
4470 l(' BEGIN');
4471 l(' val:=null;');
4472 l(' FOR rec in P LOOP');
4473 l(' val:='||fetch_cols||';');
4474 l(' END LOOP;');
4475 l(' return val;');
4476 l(' END;');
4477
4478 END IF;
4479
4480 get_datastore_cols('CONTACT_POINTS', pref_cols, proc_cols, fetch_cols);
4481 l(' FUNCTION misccpt (rid IN ROWID) RETURN CLOB IS');
4482 IF proc_cols IS NULL THEN
4483 l(' BEGIN');
4484 l(' RETURN NULL;');
4485 l(' END;');
4486 ELSE
4487 l(' CURSOR P IS');
4491 l(' val:=null;');
4488 l(' SELECT '||proc_cols||' FROM '||uname||'.HZ_STAGED_CONTACT_POINTS WHERE ROWID=rid;');
4489 l(' val CLOB;');
4490 l(' BEGIN');
4492 l(' FOR rec in P LOOP');
4493 l(' val:='||fetch_cols||';');
4494 l(' END LOOP;');
4495 l(' return val;');
4496 l(' END;');
4497 END IF;
4498
4499 l(' FUNCTION den_ps (party_id NUMBER) RETURN VARCHAR2 IS');
4500 l(' CURSOR party_site_denorm (cp_party_id NUMBER) IS');
4501 l(' SELECT distinct');
4502 OPEN l_ent_cur('PARTY_SITES');
4503 LOOP
4504 FETCH l_ent_cur INTO l_attr;
4505 EXIT WHEN l_ent_cur%NOTFOUND;
4506 l(' '||l_attr ||'||'' ''||');
4507 END LOOP;
4508 CLOSE l_ent_cur;
4509 l(' '' ''');
4510 l(' FROM '||uname||'.HZ_STAGED_PARTY_SITES');
4511 l(' WHERE party_id = cp_party_id;');
4512 l(' l_buffer VARCHAR2(4000);');
4513 l(' l_den_ps VARCHAR2(2000);');
4514 l(' BEGIN');
4515 l(' OPEN party_site_denorm(party_id);');
4516 l(' LOOP');
4517 l(' FETCH party_site_denorm INTO l_den_ps;');
4518 l(' EXIT WHEN party_site_denorm%NOTFOUND;');
4519 l(' l_buffer := l_buffer||'' ''||l_den_ps;');
4520 l(' END LOOP;');
4521 l(' CLOSE party_site_denorm;');
4522 l(' RETURN l_buffer;');
4523 l(' EXCEPTION');
4524 l(' WHEN OTHERS THEN');
4525 l(' RETURN l_buffer;');
4526
4527 l(' END;');
4528
4529
4530 l(' FUNCTION den_ct (party_id NUMBER) RETURN VARCHAR2 IS');
4531 l(' CURSOR contact_denorm (cp_party_id NUMBER) IS');
4532 l(' SELECT distinct');
4533 OPEN l_ent_cur('CONTACTS');
4534 LOOP
4535 FETCH l_ent_cur INTO l_attr;
4536 EXIT WHEN l_ent_cur%NOTFOUND;
4537 l(' '||l_attr ||'||'' ''||');
4538 END LOOP;
4539 CLOSE l_ent_cur;
4540 l(' '' ''');
4541 l(' FROM '||uname||'.HZ_STAGED_CONTACTS');
4542 l(' WHERE party_id = cp_party_id;');
4543 l(' l_buffer VARCHAR2(4000);');
4544 l(' l_den_ct VARCHAR2(2000);');
4545 l(' BEGIN');
4546 l(' OPEN contact_denorm(party_id);');
4547 l(' LOOP');
4548 l(' FETCH contact_denorm INTO l_den_ct;');
4549 l(' EXIT WHEN contact_denorm%NOTFOUND;');
4550 l(' l_buffer := l_buffer||'' ''||l_den_ct;');
4551 l(' END LOOP;');
4552 l(' CLOSE contact_denorm;');
4553 l(' RETURN l_buffer;');
4554 l(' EXCEPTION');
4555 l(' WHEN OTHERS THEN');
4556 l(' RETURN l_buffer;');
4557 l(' END;');
4558
4559 l(' FUNCTION den_cpt (party_id NUMBER) RETURN VARCHAR2 IS');
4560 l(' CURSOR contact_pt_denorm (cp_party_id NUMBER) IS');
4561 l(' SELECT distinct');
4562 OPEN l_ent_cur('CONTACT_POINTS');
4563 LOOP
4564 FETCH l_ent_cur INTO l_attr;
4565 EXIT WHEN l_ent_cur%NOTFOUND;
4566 l(' '||l_attr ||'||'' ''||');
4567 END LOOP;
4568 CLOSE l_ent_cur;
4569 l(' '' ''');
4570 l(' FROM '||uname||'.HZ_STAGED_CONTACT_POINTS');
4571 l(' WHERE party_id = cp_party_id;');
4572 l(' l_buffer VARCHAR2(4000);');
4573 l(' l_den_cpt VARCHAR2(2000);');
4574 l(' BEGIN');
4575 l(' OPEN contact_pt_denorm(party_id);');
4576 l(' LOOP');
4577 l(' FETCH contact_pt_denorm INTO l_den_cpt;');
4578 l(' EXIT WHEN contact_pt_denorm%NOTFOUND;');
4579 l(' l_buffer := l_buffer||'' ''||l_den_cpt;');
4580 l(' END LOOP;');
4581 l(' CLOSE contact_pt_denorm;');
4582 l(' RETURN l_buffer;');
4583 l(' EXCEPTION');
4584 l(' WHEN OTHERS THEN');
4585 l(' RETURN l_buffer;');
4586 l(' END;');
4587 l('');
4588
4589 END;
4590
4591
4592 -- REPURI. Proccedure to generate the log procedure for error logging.
4593
4594 PROCEDURE generate_log IS
4595
4596 BEGIN
4597 l('');
4598 l(' PROCEDURE log( ');
4599 l(' message IN VARCHAR2, ');
4600 l(' newline IN BOOLEAN DEFAULT TRUE) IS ');
4601 l(' BEGIN ');
4602 l(' IF message = ''NEWLINE'' THEN ');
4603 l(' FND_FILE.NEW_LINE(FND_FILE.LOG, 1); ');
4604 l(' ELSIF (newline) THEN ');
4605 l(' FND_FILE.put_line(fnd_file.log,message); ');
4606 l(' ELSE ');
4607 l(' FND_FILE.put(fnd_file.log,message); ');
4608 l(' END IF; ');
4609 l(' END log; ');
4610 l('');
4611
4612 END;
4613
4614 -- REPURI added this procedure for generating a procedure to
4615 -- insert errored records into HZ_DQM_SYNC_INTERFACE table.
4616
4617 PROCEDURE generate_ins_dqm_sync_err_rec IS
4618
4619 BEGIN
4620 l('');
4621 l(' PROCEDURE insert_dqm_sync_error_rec ( ');
4622 l(' p_party_id IN NUMBER, ');
4623 l(' p_record_id IN NUMBER, ');
4624 l(' p_party_site_id IN NUMBER, ');
4625 l(' p_org_contact_id IN NUMBER, ');
4626 l(' p_entity IN VARCHAR2, ');
4627 l(' p_operation IN VARCHAR2, ');
4628 l(' p_staged_flag IN VARCHAR2 DEFAULT ''E'', ');
4629 l(' p_realtime_sync_flag IN VARCHAR2 DEFAULT ''Y'', ');
4630 l(' p_error_data IN VARCHAR2 ');
4631 l(' ) IS ');
4632 l(' BEGIN ');
4633 l(' INSERT INTO hz_dqm_sync_interface ( ');
4637 l(' ORG_CONTACT_ID, ');
4634 l(' PARTY_ID, ');
4635 l(' RECORD_ID, ');
4636 l(' PARTY_SITE_ID, ');
4638 l(' ENTITY, ');
4639 l(' OPERATION, ');
4640 l(' STAGED_FLAG, ');
4641 l(' REALTIME_SYNC_FLAG, ');
4642 l(' ERROR_DATA, ');
4643 l(' CREATED_BY, ');
4644 l(' CREATION_DATE, ');
4645 l(' LAST_UPDATE_LOGIN, ');
4646 l(' LAST_UPDATE_DATE, ');
4647 l(' LAST_UPDATED_BY, ');
4648 l(' SYNC_INTERFACE_NUM ');
4649 l(' ) VALUES ( ');
4650 l(' p_party_id, ');
4651 l(' p_record_id, ');
4652 l(' p_party_site_id, ');
4653 l(' p_org_contact_id, ');
4654 l(' p_entity, ');
4655 l(' p_operation, ');
4656 l(' p_staged_flag, ');
4657 l(' p_realtime_sync_flag, ');
4658 l(' p_error_data, ');
4659 l(' hz_utility_pub.created_by, ');
4660 l(' hz_utility_pub.creation_date, ');
4661 l(' hz_utility_pub.last_update_login, ');
4662 l(' hz_utility_pub.last_update_date, ');
4663 l(' hz_utility_pub.user_id, ');
4664 l(' HZ_DQM_SYNC_INTERFACE_S.nextval ');
4665 l(' ); ');
4666 l(' END insert_dqm_sync_error_rec; ');
4667 l('');
4668
4669 END;
4670
4671 -- REPURI. Proccedure to generate the code (into HZ_STAGE_MAP_TRANSFORM)
4672 -- for OPEN_BULK_IMP_SYNC_PARTY_CUR procedure. Bug 4884735.
4673
4674 PROCEDURE gen_bulk_imp_sync_party_query IS
4675
4676 cur_col_num NUMBER := 1;
4677
4678 TYPE coltab IS TABLE OF VARCHAR2(2000) INDEX BY BINARY_INTEGER;
4679
4680 l_org_select coltab;
4681 l_per_select coltab;
4682 l_oth_select coltab;
4683
4684 l_forall_list coltab;
4685 l_custom_list coltab;
4686 l_mincol_list coltab;
4687 l_min_colnum NUMBER;
4688 idx NUMBER :=1;
4689 is_first boolean := true;
4690
4691 -- VJN Introduced for conditional word replacements
4692 l_cond_attrib_list coltab ;
4693 l_idx number ;
4694
4695 BEGIN
4696 l('');
4697 l(' PROCEDURE open_bulk_imp_sync_party_cur( ');
4698 l(' p_batch_id IN NUMBER, ');
4699 l(' p_batch_mode_flag IN VARCHAR2, ');
4700 l(' p_from_osr IN VARCHAR2, ');
4701 l(' p_to_osr IN VARCHAR2, ');
4702 l(' p_os IN VARCHAR2, ');
4703 l(' p_party_type IN VARCHAR2, ');
4704 l(' p_operation IN VARCHAR2, ');
4705 l(' x_sync_party_cur IN OUT HZ_DQM_SYNC.SyncCurTyp) IS ');
4706 l(' BEGIN');
4707
4708 FOR ATTRS IN (SELECT a.ATTRIBUTE_ID,
4709 a.ATTRIBUTE_NAME,
4710 a.SOURCE_TABLE,
4711 a.CUSTOM_ATTRIBUTE_PROCEDURE,
4712 f.PROCEDURE_NAME,
4713 f.STAGED_ATTRIBUTE_COLUMN,
4714 to_number(substrb(STAGED_ATTRIBUTE_COLUMN, 3)) COLNUM
4715 FROM HZ_TRANS_ATTRIBUTES_VL a, HZ_TRANS_FUNCTIONS_VL f
4716 WHERE ENTITY_NAME = 'PARTY'
4717 AND nvl(f.ACTIVE_FLAG,'Y') = 'Y'
4718 AND f.ATTRIBUTE_ID = a.ATTRIBUTE_ID
4719 ORDER BY COLNUM) LOOP
4720
4721 IF cur_col_num<ATTRS.COLNUM THEN
4722 FOR I in cur_col_num..ATTRS.COLNUM-1 LOOP
4723 l_mincol_list(I) := 'N';
4724 l_forall_list(I) := 'N';
4725 l_custom_list(I) := 'N';
4726 END LOOP;
4727 END IF;
4728 cur_col_num:=ATTRS.COLNUM+1;
4729 IF has_trx_context(ATTRS.PROCEDURE_NAME) THEN
4730 l_forall_list(ATTRS.COLNUM) := ATTRS.PROCEDURE_NAME || '(H_TX'||ATTRS.COLNUM||'(I),NULL, ''' || ATTRS.ATTRIBUTE_NAME || ''',''PARTY'',''STAGE'')';
4731 ELSE
4732 l_forall_list(ATTRS.COLNUM) := ATTRS.PROCEDURE_NAME || '(H_TX'||ATTRS.COLNUM||'(I),NULL, ''' || ATTRS.ATTRIBUTE_NAME || ''',''PARTY'')';
4733 END IF;
4734 l_mincol_list(ATTRS.COLNUM) := 'N';
4735
4736 SELECT min(to_number(substrb(STAGED_ATTRIBUTE_COLUMN, 3))) INTO l_min_colnum
4737 FROM HZ_TRANS_ATTRIBUTES_VL a, HZ_TRANS_FUNCTIONS_VL f
4738 WHERE ENTITY_NAME = 'PARTY'
4739 AND nvl(f.ACTIVE_FLAG,'Y') = 'Y'
4740 AND f.ATTRIBUTE_ID = a.ATTRIBUTE_ID
4741 AND a.ATTRIBUTE_NAME=ATTRS.ATTRIBUTE_NAME;
4742
4743 IF ATTRS.colnum>l_min_colnum THEN
4744 l_mincol_list(ATTRS.COLNUM) := 'N';
4745 IF has_trx_context(ATTRS.PROCEDURE_NAME) THEN
4746 l_forall_list(ATTRS.COLNUM) := ATTRS.PROCEDURE_NAME || '(H_TX'||l_min_colnum||'(I),NULL, ''' || ATTRS.ATTRIBUTE_NAME || ''',''PARTY'',''STAGE'')';
4747 ELSE
4748 l_forall_list(ATTRS.COLNUM) := ATTRS.PROCEDURE_NAME || '(H_TX'||l_min_colnum||'(I),NULL, ''' || ATTRS.ATTRIBUTE_NAME || ''',''PARTY'')';
4749 END IF;
4750 ELSE
4751 l_mincol_list(ATTRS.COLNUM) := 'Y';
4752 END IF;
4753
4754 IF ATTRS.CUSTOM_ATTRIBUTE_PROCEDURE IS NULL THEN
4755 IF l_mincol_list(ATTRS.COLNUM) = 'Y' THEN
4756 IF ATTRS.SOURCE_TABLE='HZ_ORGANIZATION_PROFILES' THEN
4757 l_org_select(idx) := 'op.'||ATTRS.ATTRIBUTE_NAME;
4758 l_per_select(idx) := 'NULL';
4759 l_oth_select(idx) := 'NULL';
4760 ELSIF ATTRS.SOURCE_TABLE='HZ_PERSON_PROFILES' THEN
4761 l_per_select(idx) := 'pe.'||ATTRS.ATTRIBUTE_NAME;
4762 l_org_select(idx) := 'NULL';
4763 l_oth_select(idx) := 'NULL';
4764 ELSIF ATTRS.SOURCE_TABLE='HZ_PERSON_PROFILES, HZ_ORGANIZATION_PROFILES' OR
4768 l_oth_select(idx) := 'NULL';
4765 ATTRS.SOURCE_TABLE='HZ_ORGANIZATION_PROFILES, HZ_PERSON_PROFILES' THEN
4766 l_org_select(idx) := 'op.'||ATTRS.ATTRIBUTE_NAME;
4767 l_per_select(idx) := 'pe.'||ATTRS.ATTRIBUTE_NAME;
4769 ELSE
4770 l_org_select(idx) := 'p.'||ATTRS.ATTRIBUTE_NAME;
4771 l_per_select(idx) := 'p.'||ATTRS.ATTRIBUTE_NAME;
4772 l_oth_select(idx) := 'p.'||ATTRS.ATTRIBUTE_NAME;
4773 END IF;
4774 ELSE
4775 l_org_select(idx):='N';
4776 l_per_select(idx):='N';
4777 l_oth_select(idx):='N';
4778 END IF;
4779
4780 l_custom_list(ATTRS.COLNUM) := 'N';
4781 ELSE
4782 l_org_select(idx):='N';
4783 l_per_select(idx):='N';
4784 l_oth_select(idx):='N';
4785 l_custom_list(ATTRS.COLNUM) := 'N';
4786 IF ATTRS.ATTRIBUTE_NAME = 'PARTY_ALL_NAMES' THEN
4787 IF l_mincol_list(ATTRS.COLNUM) = 'Y' THEN
4788 l_org_select(idx) := 'p.PARTY_NAME || '' '' || p.KNOWN_AS || '' '' || p.KNOWN_AS2 || '' '' || p.KNOWN_AS3 || '' ''|| p.KNOWN_AS4 || '' ''|| p.KNOWN_AS5';
4789 l_per_select(idx) := 'p.PARTY_NAME || '' '' || p.KNOWN_AS || '' '' || p.KNOWN_AS2 || '' '' || p.KNOWN_AS3 || '' ''|| p.KNOWN_AS4 || '' ''|| p.KNOWN_AS5';
4790 l_oth_select(idx) := 'p.PARTY_NAME || '' '' || p.KNOWN_AS || '' '' || p.KNOWN_AS2 || '' '' || p.KNOWN_AS3 || '' ''|| p.KNOWN_AS4 || '' ''|| p.KNOWN_AS5';
4791 END IF;
4792 ELSE
4793 IF l_mincol_list(ATTRS.COLNUM) = 'Y' THEN
4794 IF has_context(ATTRS.custom_attribute_procedure) THEN
4795 l_custom_list(ATTRS.COLNUM) := ATTRS.custom_attribute_procedure || '(H_P_PARTY_ID(I),''PARTY'','''||ATTRS.ATTRIBUTE_NAME|| ''', ''STAGE'')';
4796 ELSE
4797 l_custom_list(ATTRS.COLNUM) := ATTRS.custom_attribute_procedure || '(H_P_PARTY_ID(I),''PARTY'','''||ATTRS.ATTRIBUTE_NAME|| ''')';
4798 END IF;
4799 END IF;
4800 END IF;
4801 END IF;
4802 idx := idx+1;
4803
4804 -- VJN ADDED CODE FOR TRACKING CONDITION ATTRIBUTES AT THIS ENTITY LEVEL
4805 IF HZ_WORD_CONDITIONS_PKG.is_a_cond_attrib( ATTRS.attribute_id)
4806 THEN
4807 l_cond_attrib_list(ATTRS.COLNUM) := ATTRS.attribute_id ;
4808 END IF;
4809
4810
4811 END LOOP;
4812
4813 IF cur_col_num<=255 THEN--bug 5977628
4814 FOR I in cur_col_num..255 LOOP
4815 l_mincol_list(I) := 'N';
4816 l_forall_list(I) := 'N';
4817 l_custom_list(I) := 'N';
4818 END LOOP;
4819 END IF;
4820
4821 l(' IF p_party_type = ''ORGANIZATION'' THEN');
4822 l(' open x_sync_party_cur FOR ' );
4823 l(' SELECT p.PARTY_ID, p.STATUS, p.ROWID ');
4824
4825 FOR I in 1..l_org_select.COUNT LOOP
4826 IF l_org_select(I) <> 'N' THEN
4827 l(' ,' || l_org_select(I));
4828 END IF;
4829 END LOOP;
4830
4831 l(' FROM HZ_PARTIES p, HZ_IMP_PARTIES_SG ps, HZ_IMP_BATCH_DETAILS bd ');
4832 l(' ,HZ_ORGANIZATION_PROFILES op ');
4833 l(' WHERE p.request_id = bd.main_conc_req_id ');
4834 l(' AND bd.batch_id = ps.batch_id ');
4835 l(' AND p.PARTY_TYPE = ''ORGANIZATION'' ');
4836 l(' AND p.party_id = ps.party_id ');
4837 l(' AND ps.batch_id = p_batch_id ');
4838 l(' AND ps.party_orig_system = p_os ');
4839 l(' AND ps.batch_mode_flag = p_batch_mode_flag ');
4840 l(' AND ps.action_flag = p_operation ');
4841 l(' AND p.party_id = op.party_id ');
4842 l(' AND ps.party_orig_system_reference BETWEEN p_from_osr AND p_to_osr ');
4843 l(' AND (p.status = ''M'' OR op.effective_end_date IS NULL); ');
4844
4845 l(' ELSIF p_party_type = ''PERSON'' THEN');
4846 l(' open x_sync_party_cur FOR ' );
4847 l(' SELECT p.PARTY_ID, p.STATUS, p.ROWID ');
4848
4849 FOR I in 1..l_per_select.COUNT LOOP
4850 IF l_per_select(I) <> 'N' THEN
4851 l(' ,' || l_per_select(I));
4852 END IF;
4853 END LOOP;
4854
4855 l(' FROM HZ_PARTIES p, HZ_IMP_PARTIES_SG ps, HZ_IMP_BATCH_DETAILS bd ');
4856 l(' ,HZ_PERSON_PROFILES pe ');
4857 l(' WHERE p.request_id = bd.main_conc_req_id ');
4858 l(' AND bd.batch_id = ps.batch_id ');
4859 l(' AND p.PARTY_TYPE = ''PERSON'' ');
4860 l(' AND p.party_id = ps.party_id ');
4861 l(' AND ps.batch_id = p_batch_id ');
4862 l(' AND ps.party_orig_system = p_os ');
4863 l(' AND ps.batch_mode_flag = p_batch_mode_flag ');
4864 l(' AND ps.action_flag = p_operation ');
4865 l(' AND p.party_id = pe.party_id ');
4866 l(' AND ps.party_orig_system_reference BETWEEN p_from_osr AND p_to_osr ');
4867 l(' AND (p.status = ''M'' OR pe.effective_end_date IS NULL); ');
4868 l(' ELSE');
4869 l(' open x_sync_party_cur FOR ' );
4870 l(' SELECT p.PARTY_ID, p.STATUS, p.ROWID ');
4871
4872 FOR I in 1..l_oth_select.COUNT LOOP
4873 IF l_oth_select(I) <> 'N' THEN
4874 l(' ,' || l_oth_select(I));
4875 END IF;
4876 END LOOP;
4877
4878 l(' FROM HZ_PARTIES p, HZ_IMP_PARTIES_SG ps, HZ_IMP_BATCH_DETAILS bd ');
4879 l(' WHERE p.request_id = bd.main_conc_req_id ');
4880 l(' AND bd.batch_id = ps.batch_id ');
4884 l(' AND ps.batch_mode_flag = p_batch_mode_flag ');
4881 l(' AND p.party_id = ps.party_id ');
4882 l(' AND ps.batch_id = p_batch_id ');
4883 l(' AND ps.party_orig_system = p_os ');
4885 l(' AND ps.action_flag = p_operation ');
4886 l(' AND p.party_type <> ''PERSON'' ');
4887 l(' AND p.party_type <> ''ORGANIZATION'' ');
4888 l(' AND p.party_type <> ''PARTY_RELATIONSHIP'' ');
4889 l(' AND ps.party_orig_system_reference between p_from_osr and p_to_osr; ');
4890 l(' END IF;');
4891 l('');
4892 l(' hz_trans_pkg.set_party_type(p_party_type); ');
4893 l('');
4894 l(' END open_bulk_imp_sync_party_cur;');
4895 l('');
4896 END gen_bulk_imp_sync_party_query;
4897
4898 -- REPURI. Proccedure to generate the code (into HZ_STAGE_MAP_TRANSFORM)
4899 -- for OPEN_SYNC_PARTY_CURSOR and SYNC_ALL_PARTIES Procedures.
4900
4901 PROCEDURE generate_sync_party_query_proc IS
4902
4903 cur_col_num NUMBER := 1;
4904
4905 TYPE coltab IS TABLE OF VARCHAR2(2000) INDEX BY BINARY_INTEGER;
4906
4907 l_org_select coltab;
4908 l_per_select coltab;
4909 l_oth_select coltab;
4910
4911 l_forall_list coltab;
4912 l_custom_list coltab;
4913 l_mincol_list coltab;
4914 l_min_colnum NUMBER;
4915 idx NUMBER :=1;
4916 is_first boolean := true;
4917
4918 -- VJN Introduced for conditional word replacements
4919 l_cond_attrib_list coltab ;
4920 l_idx number ;
4921
4922 BEGIN
4923 l('');
4924 l(' PROCEDURE open_sync_party_cursor( ');
4925 l(' p_operation IN VARCHAR2,');
4926 l(' p_party_type IN VARCHAR2,');
4927 l(' p_from_rec IN VARCHAR2,');
4928 l(' p_to_rec IN VARCHAR2,');
4929 l(' x_sync_party_cur IN OUT HZ_DQM_SYNC.SyncCurTyp) IS ');
4930 l('');
4931 l(' BEGIN');
4932 l('');
4933
4934 FOR ATTRS IN (SELECT a.ATTRIBUTE_ID,
4935 a.ATTRIBUTE_NAME,
4936 a.SOURCE_TABLE,
4937 a.CUSTOM_ATTRIBUTE_PROCEDURE,
4938 f.PROCEDURE_NAME,
4939 f.STAGED_ATTRIBUTE_COLUMN,
4940 to_number(substrb(STAGED_ATTRIBUTE_COLUMN, 3)) COLNUM
4941 FROM HZ_TRANS_ATTRIBUTES_VL a, HZ_TRANS_FUNCTIONS_VL f
4942 WHERE ENTITY_NAME = 'PARTY'
4943 AND nvl(f.ACTIVE_FLAG,'Y') = 'Y'
4944 AND f.ATTRIBUTE_ID = a.ATTRIBUTE_ID
4945 ORDER BY COLNUM) LOOP
4946
4947 IF cur_col_num<ATTRS.COLNUM THEN
4948 FOR I in cur_col_num..ATTRS.COLNUM-1 LOOP
4949 l_mincol_list(I) := 'N';
4950 l_forall_list(I) := 'N';
4951 l_custom_list(I) := 'N';
4952 END LOOP;
4953 END IF;
4954 cur_col_num:=ATTRS.COLNUM+1;
4955 IF has_trx_context(ATTRS.PROCEDURE_NAME) THEN
4956 l_forall_list(ATTRS.COLNUM) := ATTRS.PROCEDURE_NAME || '(H_TX'||ATTRS.COLNUM||'(I),NULL, ''' || ATTRS.ATTRIBUTE_NAME || ''',''PARTY'',''STAGE'')';
4957 ELSE
4958 l_forall_list(ATTRS.COLNUM) := ATTRS.PROCEDURE_NAME || '(H_TX'||ATTRS.COLNUM||'(I),NULL, ''' || ATTRS.ATTRIBUTE_NAME || ''',''PARTY'')';
4959 END IF;
4960 l_mincol_list(ATTRS.COLNUM) := 'N';
4961
4962 SELECT min(to_number(substrb(STAGED_ATTRIBUTE_COLUMN, 3))) INTO l_min_colnum
4963 FROM HZ_TRANS_ATTRIBUTES_VL a, HZ_TRANS_FUNCTIONS_VL f
4964 WHERE ENTITY_NAME = 'PARTY'
4965 AND nvl(f.ACTIVE_FLAG,'Y') = 'Y'
4966 AND f.ATTRIBUTE_ID = a.ATTRIBUTE_ID
4967 AND a.ATTRIBUTE_NAME=ATTRS.ATTRIBUTE_NAME;
4968
4969 IF ATTRS.colnum>l_min_colnum THEN
4970 l_mincol_list(ATTRS.COLNUM) := 'N';
4971 IF has_trx_context(ATTRS.PROCEDURE_NAME) THEN
4972 l_forall_list(ATTRS.COLNUM) := ATTRS.PROCEDURE_NAME || '(H_TX'||l_min_colnum||'(I),NULL, ''' || ATTRS.ATTRIBUTE_NAME || ''',''PARTY'',''STAGE'')';
4973 ELSE
4974 l_forall_list(ATTRS.COLNUM) := ATTRS.PROCEDURE_NAME || '(H_TX'||l_min_colnum||'(I),NULL, ''' || ATTRS.ATTRIBUTE_NAME || ''',''PARTY'')';
4975 END IF;
4976 ELSE
4977 l_mincol_list(ATTRS.COLNUM) := 'Y';
4978 END IF;
4979
4980 IF ATTRS.CUSTOM_ATTRIBUTE_PROCEDURE IS NULL THEN
4981 IF l_mincol_list(ATTRS.COLNUM) = 'Y' THEN
4982 IF ATTRS.SOURCE_TABLE='HZ_ORGANIZATION_PROFILES' THEN
4983 l_org_select(idx) := 'op.'||ATTRS.ATTRIBUTE_NAME;
4984 l_per_select(idx) := 'NULL';
4985 l_oth_select(idx) := 'NULL';
4986 ELSIF ATTRS.SOURCE_TABLE='HZ_PERSON_PROFILES' THEN
4987 l_per_select(idx) := 'pe.'||ATTRS.ATTRIBUTE_NAME;
4988 l_org_select(idx) := 'NULL';
4989 l_oth_select(idx) := 'NULL';
4990 ELSIF ATTRS.SOURCE_TABLE='HZ_PERSON_PROFILES, HZ_ORGANIZATION_PROFILES' OR
4991 ATTRS.SOURCE_TABLE='HZ_ORGANIZATION_PROFILES, HZ_PERSON_PROFILES' THEN
4992 l_org_select(idx) := 'op.'||ATTRS.ATTRIBUTE_NAME;
4993 l_per_select(idx) := 'pe.'||ATTRS.ATTRIBUTE_NAME;
4994 l_oth_select(idx) := 'NULL';
4995 ELSE
4996 l_org_select(idx) := 'p.'||ATTRS.ATTRIBUTE_NAME;
4997 l_per_select(idx) := 'p.'||ATTRS.ATTRIBUTE_NAME;
4998 l_oth_select(idx) := 'p.'||ATTRS.ATTRIBUTE_NAME;
4999 END IF;
5000 ELSE
5001 l_org_select(idx):='N';
5002 l_per_select(idx):='N';
5006 l_custom_list(ATTRS.COLNUM) := 'N';
5003 l_oth_select(idx):='N';
5004 END IF;
5005
5007 ELSE
5008 l_org_select(idx):='N';
5009 l_per_select(idx):='N';
5010 l_oth_select(idx):='N';
5011 l_custom_list(ATTRS.COLNUM) := 'N';
5012 IF ATTRS.ATTRIBUTE_NAME = 'PARTY_ALL_NAMES' THEN
5013 IF l_mincol_list(ATTRS.COLNUM) = 'Y' THEN
5014 l_org_select(idx) := 'p.PARTY_NAME || '' '' || p.KNOWN_AS || '' '' || p.KNOWN_AS2 || '' '' || p.KNOWN_AS3 || '' ''|| p.KNOWN_AS4 || '' ''|| p.KNOWN_AS5';
5015 l_per_select(idx) := 'p.PARTY_NAME || '' '' || p.KNOWN_AS || '' '' || p.KNOWN_AS2 || '' '' || p.KNOWN_AS3 || '' ''|| p.KNOWN_AS4 || '' ''|| p.KNOWN_AS5';
5016 l_oth_select(idx) := 'p.PARTY_NAME || '' '' || p.KNOWN_AS || '' '' || p.KNOWN_AS2 || '' '' || p.KNOWN_AS3 || '' ''|| p.KNOWN_AS4 || '' ''|| p.KNOWN_AS5';
5017 END IF;
5018 ELSE
5019 IF l_mincol_list(ATTRS.COLNUM) = 'Y' THEN
5020 IF has_context(ATTRS.custom_attribute_procedure) THEN
5021 l_custom_list(ATTRS.COLNUM) := ATTRS.custom_attribute_procedure || '(H_P_PARTY_ID(I),''PARTY'','''||ATTRS.ATTRIBUTE_NAME|| ''', ''STAGE'')';
5022 ELSE
5023 l_custom_list(ATTRS.COLNUM) := ATTRS.custom_attribute_procedure || '(H_P_PARTY_ID(I),''PARTY'','''||ATTRS.ATTRIBUTE_NAME|| ''')';
5024 END IF;
5025 END IF;
5026 END IF;
5027 END IF;
5028 idx := idx+1;
5029
5030 -- VJN ADDED CODE FOR TRACKING CONDITION ATTRIBUTES AT THIS ENTITY LEVEL
5031 IF HZ_WORD_CONDITIONS_PKG.is_a_cond_attrib( ATTRS.attribute_id)
5032 THEN
5033 l_cond_attrib_list(ATTRS.COLNUM) := ATTRS.attribute_id ;
5034 END IF;
5035
5036
5037 END LOOP;
5038
5039 IF cur_col_num<=255 THEN--bug 5977628
5040 FOR I in cur_col_num..255 LOOP
5041 l_mincol_list(I) := 'N';
5042 l_forall_list(I) := 'N';
5043 l_custom_list(I) := 'N';
5044 END LOOP;
5045 END IF;
5046
5047 l(' IF p_party_type = ''ORGANIZATION'' THEN');
5048 l(' open x_sync_party_cur FOR ' );
5049 l(' SELECT p.PARTY_ID, p.STATUS, dsi.ROWID ');
5050
5051 FOR I in 1..l_org_select.COUNT LOOP
5052 IF l_org_select(I) <> 'N' THEN
5053 l(' ,' || l_org_select(I));
5054 END IF;
5055 END LOOP;
5056
5057 l(' FROM HZ_PARTIES p, HZ_ORGANIZATION_PROFILES op, HZ_DQM_SYNC_INTERFACE dsi ');
5058 l(' WHERE p.party_id = op.party_id ');
5059 l(' AND p.party_id = dsi.party_id ');
5060 l(' AND p.PARTY_TYPE = ''ORGANIZATION'' ');
5061 l(' AND dsi.entity = ''PARTY'' ');
5062 l(' AND dsi.staged_flag = ''N'' ');
5063 l(' AND dsi.operation = p_operation ');
5064 l(' AND dsi.sync_interface_num >= p_from_rec ');
5065 l(' AND dsi.sync_interface_num <= p_to_rec ');
5066 l(' AND (p.status = ''M'' or op.effective_end_date is NULL); ');
5067 l(' ELSIF p_party_type = ''PERSON'' THEN');
5068 l(' open x_sync_party_cur FOR ' );
5069 l(' SELECT p.PARTY_ID, p.STATUS, dsi.ROWID ');
5070
5071 FOR I in 1..l_per_select.COUNT LOOP
5072 IF l_per_select(I) <> 'N' THEN
5073 l(' ,' || l_per_select(I));
5074 END IF;
5075 END LOOP;
5076
5077 l(' FROM HZ_PARTIES p, HZ_PERSON_PROFILES pe, HZ_DQM_SYNC_INTERFACE dsi ');
5078 l(' WHERE p.party_id = pe.party_id ');
5079 l(' AND p.party_id = dsi.party_id ');
5080 l(' AND p.PARTY_TYPE = ''PERSON'' ');
5081 l(' AND dsi.entity = ''PARTY'' ');
5082 l(' AND dsi.staged_flag = ''N'' ');
5083 l(' AND dsi.operation = p_operation ');
5084 l(' AND dsi.sync_interface_num >= p_from_rec ');
5085 l(' AND dsi.sync_interface_num <= p_to_rec ');
5086 l(' AND (p.status = ''M'' or pe.effective_end_date is NULL); ');
5087 l(' ELSE');
5088 l(' open x_sync_party_cur FOR ' );
5089 l(' SELECT p.PARTY_ID, p.STATUS, dsi.ROWID ');
5090
5091 FOR I in 1..l_oth_select.COUNT LOOP
5092 IF l_oth_select(I) <> 'N' THEN
5093 l(' ,' || l_oth_select(I));
5094 END IF;
5095 END LOOP;
5096
5097 l(' FROM HZ_PARTIES p, HZ_DQM_SYNC_INTERFACE dsi ');
5098 l(' WHERE p.party_id = dsi.party_id ');
5099 l(' AND dsi.entity = ''PARTY'' ');
5100 l(' AND dsi.staged_flag = ''N'' ');
5101 l(' AND dsi.operation = p_operation ');
5102 l(' AND dsi.sync_interface_num >= p_from_rec ');
5103 l(' AND dsi.sync_interface_num <= p_to_rec ');
5104 l(' AND p.party_type <> ''PERSON'' ');
5105 l(' AND p.party_type <> ''ORGANIZATION'' ');
5106 l(' AND p.party_type <> ''PARTY_RELATIONSHIP''; ');
5107 l(' END IF;');
5108 l(' hz_trans_pkg.set_party_type(p_party_type); ');
5109 l(' END;');
5110
5111 l('');
5112 l(' PROCEDURE sync_all_parties ( ');
5113 l(' p_operation IN VARCHAR2, ');
5114 l(' p_bulk_sync_type IN VARCHAR2, ');
5115 l(' p_sync_all_party_cur IN HZ_DQM_SYNC.SyncCurTyp) IS ');
5116 l('');
5117 l(' l_limit NUMBER := ' || g_batch_size || ';');
5118 l(' l_last_fetch BOOLEAN := FALSE;');
5119 l(' l_sql_errm VARCHAR2(2000); ');
5120 l(' l_st NUMBER; ');
5124 l('');
5121 l(' l_en NUMBER; ');
5122 l(' l_err_index NUMBER; ');
5123 l(' l_err_count NUMBER; ');
5125 l(' bulk_errors EXCEPTION; ');
5126 l(' PRAGMA EXCEPTION_INIT(bulk_errors, -24381); ');
5127 l('');
5128 l(' BEGIN');
5129 l(' log (''Begin Synchronizing Parties''); ');
5130 l(' LOOP');
5131 l(' log (''Bulk Collecting Parties Data...'',FALSE); ');
5132 l(' FETCH p_sync_all_party_cur BULK COLLECT INTO');
5133 l(' H_P_PARTY_ID');
5134 l(' ,H_STATUS');
5135 l(' ,H_ROWID');
5136
5137 FOR I IN 1..255 LOOP
5138 IF l_forall_list(I) <> 'N' AND l_mincol_list(I) = 'Y' AND
5139 l_custom_list(I) = 'N' THEN
5140 l(' ,H_TX'||I);
5141 END IF;
5142 END LOOP;
5143
5144 l(' LIMIT l_limit;');
5145 l(' log (''Done''); ');
5146 l('');
5147 l(' IF p_sync_all_party_cur%NOTFOUND THEN');
5148 l(' l_last_fetch:=TRUE;');
5149 l(' END IF;');
5150 l('');
5151 l(' IF H_P_PARTY_ID.COUNT=0 AND l_last_fetch THEN');
5152 l(' EXIT;');
5153 l(' END IF;');
5154 l('');
5155 l(' log (''Synchronizing for ''||H_P_PARTY_ID.COUNT||'' Parties''); ');
5156 l(' log (''Populating Party Transformation Functions into Arrays...'',FALSE); ');
5157 l(' FOR I in H_P_PARTY_ID.FIRST..H_P_PARTY_ID.LAST LOOP');
5158
5159 -- VJN INTRODUCED FOR CONDITIONAL REPLACEMENTS
5160 -- CYCLE THROUGH THE CONDITON LIST AND GENERATE THE CODE
5161 -- FOR POPULATING THE GLOBAL CONDITION RECORD
5162
5163 l_idx := l_cond_attrib_list.FIRST ;
5164 IF l_idx IS NOT NULL
5165 THEN
5166 l(' ---- SETTING GLOBAL CONDITION RECORD AT THE PARTY LEVEL ----');
5167 l('');
5168 END IF ;
5169
5170 WHILE l_cond_attrib_list.EXISTS(l_idx)
5171 LOOP
5172 l(' HZ_WORD_CONDITIONS_PKG.set_gbl_condition_rec ('||l_cond_attrib_list(l_idx)||','||'H_TX'||l_idx||'(I));');
5173 l_idx := l_idx+1;
5174 END LOOP;
5175
5176 l('');
5177
5178 FOR I IN 1..255 LOOP
5179 IF l_forall_list(I) <> 'N' THEN
5180 IF l_custom_list(I) <> 'N' AND l_mincol_list(I) = 'Y' THEN
5181 l(' H_TX'||I||'(I):='||l_custom_list(I)||';');
5182 END IF;
5183 END IF;
5184 END LOOP;
5185 FOR I IN 1..255 LOOP
5186 IF l_forall_list(I) <> 'N' THEN
5187 IF l_mincol_list(I) <> 'Y' THEN
5188 l(' H_TX'||I||'(I):='||l_forall_list(I)||';');
5189 END IF;
5190 END IF;
5191 END LOOP;
5192 FOR I IN 1..255 LOOP
5193 IF l_forall_list(I) <> 'N' THEN
5194 IF l_mincol_list(I) = 'Y' THEN
5195 l(' H_TX'||I||'(I):='||l_forall_list(I)||';');
5196 END IF;
5197 END IF;
5198 END LOOP;
5199 l(' END LOOP;');
5200 l(' log (''Done''); ');
5201 l('');
5202 l(' l_st := 1; ');
5203 l(' l_en := H_P_PARTY_ID.COUNT; ');
5204 l('');
5205 l(' IF p_operation = ''C'' THEN ');
5206 l(' BEGIN ');
5207 l(' log (''Inserting Data into HZ_STAGED_PARTIES...'',FALSE); ');
5208 l(' FORALL I in l_st..l_en SAVE EXCEPTIONS ');
5209 l(' INSERT INTO HZ_STAGED_PARTIES (');
5210 l(' PARTY_ID');
5211 l(' ,STATUS');
5212 l(' ,D_PS');
5213 l(' ,D_CT');
5214 l(' ,D_CPT');
5215
5216 FOR I IN 1..255 LOOP
5217 IF l_forall_list(I) <> 'N' THEN
5218 l(' ,TX'||I);
5219 END IF;
5220 END LOOP;
5221
5222 l(' ) VALUES (');
5223 l(' H_P_PARTY_ID(I)');
5224 l(' ,H_STATUS(I)');
5225 l(' ,''SYNC'' ');
5226 l(' ,''SYNC'' ');
5227 l(' ,''SYNC'' ');
5228
5229 FOR I IN 1..255 LOOP
5230 IF l_forall_list(I) <> 'N' THEN
5231 l(' ,decode(H_TX'||I||'(I),null,H_TX'||I||'(I),H_TX'||I||'(I)||'' '')');
5232 END IF;
5233 END LOOP;
5234
5235 l(' );');
5236 l(' log (''Done''); ');
5237 l(' EXCEPTION WHEN bulk_errors THEN ');
5238 l(' l_err_count := SQL%BULK_EXCEPTIONS.COUNT; ');
5239 l(' FOR indx IN 1..l_err_count LOOP ');
5240 l(' l_err_index := SQL%BULK_EXCEPTIONS(indx).ERROR_INDEX; ');
5241 l(' l_sql_errm := sqlerrm(-SQL%BULK_EXCEPTIONS(indx).ERROR_CODE); ');
5242 -- SCHITRAP: Bug:5357970 - Error code is a number. Oracle error for ''DUP_VAL_ON_INDEX'' is ORA-00001
5243 --l(' IF (SQL%BULK_EXCEPTIONS(indx).ERROR_CODE) = ''DUP_VAL_ON_INDEX'' THEN ');
5244 l(' IF (instr(l_sql_errm,''ORA-00001'')>0) THEN ');
5245 l(' log (''Exception DUP_VAL_ON_INDEX occured while inserting Party with PARTY_ID - ''||H_P_PARTY_ID(l_err_index)); ');
5246 l(' DELETE FROM HZ_DQM_SYNC_INTERFACE WHERE ENTITY=''PARTY'' AND OPERATION=''C'' AND PARTY_ID=H_P_PARTY_ID(l_err_index); ');
5247 l(' ELSE ');
5248 l(' IF p_bulk_sync_type = ''DQM_SYNC'' THEN ');
5249 l(' UPDATE hz_dqm_sync_interface ');
5250 l(' SET error_data = l_sql_errm ');
5251 l(' ,staged_flag = decode (error_data, NULL, ''N'', ''E'') ');
5252 l(' WHERE rowid = H_ROWID(l_err_index); ');
5253 l(' ELSIF p_bulk_sync_type = ''IMPORT_SYNC'' THEN ');
5257 l(' END IF; ');
5254 l(' -- Insert the Error Record into HZ_DQM_SYNC_INTERFACE table ');
5255 l(' insert_dqm_sync_error_rec(H_P_PARTY_ID(l_err_index), NULL, NULL, NULL, ''PARTY'', p_operation, ''E'', ''N'', l_sql_errm); ');
5256 l(' END IF; ');
5258 l(' END LOOP; ');
5259 l(' END; ');
5260 l(' ELSIF p_operation = ''U'' THEN ');
5261 l(' BEGIN ');
5262 l(' log (''Updating Data in HZ_STAGED_PARTIES...'',FALSE); ');
5263 l(' FORALL I in l_st..l_en SAVE EXCEPTIONS ');
5264 l(' UPDATE HZ_STAGED_PARTIES SET ');
5265 l(' status =H_STATUS(I) ');
5266 l(' ,concat_col = concat_col ');
5267
5268 FOR I IN 1..255 LOOP
5269 IF l_forall_list(I) <> 'N' THEN
5270 l(' ,TX'||I||'=decode(H_TX'||I||'(I),null,H_TX'||I||'(I),H_TX'||I||'(I)||'' '')');
5271 END IF;
5272 END LOOP;
5273
5274 l(' WHERE PARTY_ID = H_P_PARTY_ID(I);');
5275 l(' log (''Done''); ');
5276 l(' EXCEPTION WHEN bulk_errors THEN ');
5277 l(' l_err_count := SQL%BULK_EXCEPTIONS.COUNT; ');
5278 l(' FOR indx IN 1..l_err_count LOOP ');
5279 l(' l_err_index := SQL%BULK_EXCEPTIONS(indx).ERROR_INDEX; ');
5280 l(' l_sql_errm := sqlerrm(-SQL%BULK_EXCEPTIONS(indx).ERROR_CODE); ');
5281 -- SCHITRAP: Bug:5357970 - Error code is a number. Oracle error for ''DUP_VAL_ON_INDEX'' is ORA-00001
5282 --l(' IF (SQL%BULK_EXCEPTIONS(indx).ERROR_CODE) = ''DUP_VAL_ON_INDEX'' THEN ');
5283 l(' IF (instr(l_sql_errm,''ORA-00001'')>0) THEN ');
5284 l(' log (''Exception DUP_VAL_ON_INDEX occured while inserting Party with PARTY_ID - ''||H_P_PARTY_ID(l_err_index)); ');
5285 l(' DELETE FROM HZ_DQM_SYNC_INTERFACE WHERE ENTITY=''PARTY'' AND OPERATION=''U'' AND PARTY_ID=H_P_PARTY_ID(l_err_index); ');
5286 l(' ELSE ');
5287 l(' IF p_bulk_sync_type = ''DQM_SYNC'' THEN ');
5288 l(' UPDATE hz_dqm_sync_interface ');
5289 l(' SET error_data = l_sql_errm ');
5290 l(' ,staged_flag = decode (error_data, NULL, ''N'', ''E'') ');
5291 l(' WHERE rowid = H_ROWID(l_err_index); ');
5292 l(' ELSIF p_bulk_sync_type = ''IMPORT_SYNC'' THEN ');
5293 l(' -- Insert the Error Record into HZ_DQM_SYNC_INTERFACE table ');
5294 l(' insert_dqm_sync_error_rec(H_P_PARTY_ID(l_err_index), NULL, NULL, NULL, ''PARTY'', p_operation, ''E'', ''N'', l_sql_errm); ');
5295 l(' END IF; ');
5296 l(' END IF; ');
5297 l(' END LOOP; ');
5298 l(' END; ');
5299 l(' END IF; ');
5300 l('');
5301 l(' -- REPURI. Bug 4884742. ');
5302 l(' -- Bulk Insert the Import Parties into Shadow Sync Interface table ');
5303 l(' -- if Shadow Staging has already run and completed successfully ');
5304 l(' IF ((p_bulk_sync_type = ''IMPORT_SYNC'') AND ');
5305 l(' (HZ_DQM_SYNC.is_shadow_staging_complete)) THEN ');
5306 l(' BEGIN ');
5307 l(' -- REPURI. Bug 4968126. ');
5308 l(' -- Using the Merge instead of Insert statement ');
5309 l(' -- so that duplicate records dont get inserted. ');
5310 l(' log (''Merging data into HZ_DQM_SH_SYNC_INTERFACE...'',FALSE); ');
5311 l(' FORALL I in l_st..l_en ');
5312 l(' MERGE INTO hz_dqm_sh_sync_interface S ');
5313 l(' USING ( ');
5314 l(' SELECT ');
5315 l(' H_P_PARTY_ID(I) AS party_id ');
5316 l(' FROM dual ) T ');
5317 l(' ON (S.entity = ''PARTY'' AND ');
5318 l(' S.party_id = T.party_id AND ');
5319 l(' S.staged_flag <> ''E'') ');
5320 l(' WHEN NOT MATCHED THEN ');
5321 l(' INSERT ( ');
5322 l(' PARTY_ID, ');
5323 l(' RECORD_ID, ');
5324 l(' PARTY_SITE_ID, ');
5325 l(' ORG_CONTACT_ID, ');
5326 l(' ENTITY, ');
5327 l(' OPERATION, ');
5328 l(' STAGED_FLAG, ');
5329 l(' REALTIME_SYNC_FLAG, ');
5330 l(' CREATED_BY, ');
5331 l(' CREATION_DATE, ');
5332 l(' LAST_UPDATE_LOGIN, ');
5333 l(' LAST_UPDATE_DATE, ');
5334 l(' LAST_UPDATED_BY, ');
5335 l(' SYNC_INTERFACE_NUM ');
5336 l(' ) VALUES ( ');
5337 l(' H_P_PARTY_ID(I), ');
5338 l(' NULL, ');
5339 l(' NULL, ');
5340 l(' NULL, ');
5341 l(' ''PARTY'', ');
5342 l(' p_operation, ');
5343 l(' ''N'', ');
5344 l(' ''N'', ');
5345 l(' hz_utility_pub.created_by, ');
5346 l(' hz_utility_pub.creation_date, ');
5347 l(' hz_utility_pub.last_update_login, ');
5348 l(' hz_utility_pub.last_update_date, ');
5349 l(' hz_utility_pub.user_id, ');
5350 l(' HZ_DQM_SH_SYNC_INTERFACE_S.nextval ');
5351 l(' ); ');
5352 l(' log (''Done''); ');
5353 l(' EXCEPTION WHEN OTHERS THEN ');
5354 l(' log (''Exception occured while inserting data into HZ_DQM_SH_SYNC_INTERFACE Table''); ');
5358 l('');
5355 l(' log (''Eror Message is - ''|| sqlerrm); ');
5356 l(' END; ');
5357 l(' END IF; ');
5359 l(' IF l_last_fetch THEN');
5360 l(' FND_CONCURRENT.AF_Commit;');
5361 l(' EXIT;');
5362 l(' END IF;');
5363 l('');
5364 l(' FND_CONCURRENT.AF_Commit;');
5365 l('');
5366 l(' END LOOP;');
5367 l(' log (''End Synchronizing Parties''); ');
5368 l(' END;');
5369
5370 END;
5371
5372 PROCEDURE generate_party_query_proc IS
5373 cur_col_num NUMBER := 1;
5374
5375 TYPE coltab IS TABLE OF VARCHAR2(2000) INDEX BY BINARY_INTEGER;
5376
5377 l_org_select coltab;
5378 l_per_select coltab;
5379 l_oth_select coltab;
5380
5381 l_forall_list coltab;
5382 l_custom_list coltab;
5383 l_mincol_list coltab;
5384 l_min_colnum NUMBER;
5385 idx NUMBER :=1;
5386 is_first boolean := true;
5387
5388 -- VJN Introduced for conditional word replacements
5389 l_cond_attrib_list coltab ;
5390 l_idx number ;
5391 l_attr_name varchar2(2000); --Bug No: 4279469
5392 l_org_attr_name varchar2(2000); --Bug No: 4279469
5393 l_per_attr_name varchar2(2000); --Bug No: 4279469
5394
5395 BEGIN
5396 l('');
5397 l(' PROCEDURE open_party_cursor( ');
5398 l(' p_select_type IN VARCHAR2,');
5399 l(' p_party_type IN VARCHAR2,');
5400 l(' p_worker_number IN NUMBER,');
5401 l(' p_num_workers IN NUMBER,');
5402 l(' p_party_id IN NUMBER,');
5403 l(' p_continue IN VARCHAR2,');
5404 l(' x_party_cur IN OUT HZ_PARTY_STAGE.StageCurTyp) IS ');
5405 l('');
5406 l(' l_party_type VARCHAR2(255);');
5407 l(' BEGIN');
5408
5409 FOR ATTRS IN (SELECT a.ATTRIBUTE_ID,
5410 a.ATTRIBUTE_NAME,
5411 a.SOURCE_TABLE,
5412 a.CUSTOM_ATTRIBUTE_PROCEDURE,
5413 f.PROCEDURE_NAME,
5414 f.STAGED_ATTRIBUTE_COLUMN,
5415 to_number(substrb(STAGED_ATTRIBUTE_COLUMN, 3)) COLNUM,
5416 nvl(TAG,'C') column_data_type --Bug No: 4279469
5417 FROM HZ_TRANS_ATTRIBUTES_VL a, HZ_TRANS_FUNCTIONS_VL f,FND_LOOKUP_VALUES_VL lkp --Bug No: 4279469
5418 WHERE ENTITY_NAME = 'PARTY'
5419 AND nvl(f.ACTIVE_FLAG,'Y') = 'Y'
5420 AND f.ATTRIBUTE_ID = a.ATTRIBUTE_ID
5421 AND lkp.LOOKUP_TYPE = 'PARTY_LOGICAL_ATTRIBUTE_LIST' --Bug No: 4279469
5422 AND lkp.LOOKUP_CODE = a.ATTRIBUTE_NAME --Bug No: 4279469
5423 ORDER BY COLNUM) LOOP
5424
5425 IF cur_col_num<ATTRS.COLNUM THEN
5426 FOR I in cur_col_num..ATTRS.COLNUM-1 LOOP
5427 l_mincol_list(I) := 'N';
5428 l_forall_list(I) := 'N';
5429 l_custom_list(I) := 'N';
5430 END LOOP;
5431 END IF;
5432 cur_col_num:=ATTRS.COLNUM+1;
5433 IF has_trx_context(ATTRS.PROCEDURE_NAME) THEN
5434 l_forall_list(ATTRS.COLNUM) := ATTRS.PROCEDURE_NAME || '(H_TX'||ATTRS.COLNUM||'(I),NULL, ''' || ATTRS.ATTRIBUTE_NAME || ''',''PARTY'',''STAGE'')';
5435 ELSE
5436 l_forall_list(ATTRS.COLNUM) := ATTRS.PROCEDURE_NAME || '(H_TX'||ATTRS.COLNUM||'(I),NULL, ''' || ATTRS.ATTRIBUTE_NAME || ''',''PARTY'')';
5437 END IF;
5438 l_mincol_list(ATTRS.COLNUM) := 'N';
5439
5440 SELECT min(to_number(substrb(STAGED_ATTRIBUTE_COLUMN, 3))) INTO l_min_colnum
5441 FROM HZ_TRANS_ATTRIBUTES_VL a, HZ_TRANS_FUNCTIONS_VL f
5442 WHERE ENTITY_NAME = 'PARTY'
5443 AND nvl(f.ACTIVE_FLAG,'Y') = 'Y'
5444 AND f.ATTRIBUTE_ID = a.ATTRIBUTE_ID
5445 AND a.ATTRIBUTE_NAME=ATTRS.ATTRIBUTE_NAME;
5446
5447 IF ATTRS.colnum>l_min_colnum THEN
5448 l_mincol_list(ATTRS.COLNUM) := 'N';
5449 IF has_trx_context(ATTRS.PROCEDURE_NAME) THEN
5450 l_forall_list(ATTRS.COLNUM) := ATTRS.PROCEDURE_NAME || '(H_TX'||l_min_colnum||'(I),NULL, ''' || ATTRS.ATTRIBUTE_NAME || ''',''PARTY'',''STAGE'')';
5451 ELSE
5452 l_forall_list(ATTRS.COLNUM) := ATTRS.PROCEDURE_NAME || '(H_TX'||l_min_colnum||'(I),NULL, ''' || ATTRS.ATTRIBUTE_NAME || ''',''PARTY'')';
5453 END IF;
5454 ELSE
5455 l_mincol_list(ATTRS.COLNUM) := 'Y';
5456 END IF;
5457
5458 IF ATTRS.CUSTOM_ATTRIBUTE_PROCEDURE IS NULL THEN
5459 IF l_mincol_list(ATTRS.COLNUM) = 'Y' THEN
5460 -----Start of Bug No: 4279469----------
5461 l_attr_name := ATTRS.ATTRIBUTE_NAME;
5462 IF(ATTRS.column_data_type ='D') THEN
5463 l_org_attr_name := 'TO_CHAR(op.'||l_attr_name||',''DD-MON-YYYY'') '||l_attr_name;
5464 l_per_attr_name := 'TO_CHAR(pe.'||l_attr_name||',''DD-MON-YYYY'') '||l_attr_name;
5465 l_attr_name := 'TO_CHAR(p.'||l_attr_name||',''DD-MON-YYYY'') '||l_attr_name;
5466 ELSE
5467 l_org_attr_name := 'op.'||l_attr_name;
5468 l_per_attr_name := 'pe.'||l_attr_name;
5469 l_attr_name := 'p.'||l_attr_name;
5470 END IF;
5471 -----End of Bug No: 4279469------------
5472 IF ATTRS.SOURCE_TABLE='HZ_ORGANIZATION_PROFILES' THEN
5473 l_org_select(idx) := l_org_attr_name;
5474 l_per_select(idx) := 'NULL';
5475 l_oth_select(idx) := 'NULL';
5476 ELSIF ATTRS.SOURCE_TABLE='HZ_PERSON_PROFILES' THEN
5477 l_per_select(idx) := l_per_attr_name;
5478 l_org_select(idx) := 'NULL';
5479 l_oth_select(idx) := 'NULL';
5480 ELSIF ATTRS.SOURCE_TABLE='HZ_PERSON_PROFILES, HZ_ORGANIZATION_PROFILES' OR
5481 ATTRS.SOURCE_TABLE='HZ_ORGANIZATION_PROFILES, HZ_PERSON_PROFILES' THEN
5482 l_org_select(idx) := l_org_attr_name;
5483 l_per_select(idx) := l_per_attr_name;
5484 l_oth_select(idx) := 'NULL';
5485 ELSE
5486 l_org_select(idx) := l_attr_name;
5487 l_per_select(idx) := l_attr_name;
5488 l_oth_select(idx) := l_attr_name;
5489 END IF;
5490 ELSE
5491 l_org_select(idx):='N';
5492 l_per_select(idx):='N';
5493 l_oth_select(idx):='N';
5494 END IF;
5495
5496 l_custom_list(ATTRS.COLNUM) := 'N';
5497 ELSE
5498 l_org_select(idx):='N';
5499 l_per_select(idx):='N';
5500 l_oth_select(idx):='N';
5501 l_custom_list(ATTRS.COLNUM) := 'N';
5502 IF ATTRS.ATTRIBUTE_NAME = 'PARTY_ALL_NAMES' THEN
5503 IF l_mincol_list(ATTRS.COLNUM) = 'Y' THEN
5504 l_org_select(idx) := 'p.PARTY_NAME || '' '' || p.KNOWN_AS || '' '' || p.KNOWN_AS2 || '' '' || p.KNOWN_AS3 || '' ''|| p.KNOWN_AS4 || '' ''|| p.KNOWN_AS5';
5505 l_per_select(idx) := 'p.PARTY_NAME || '' '' || p.KNOWN_AS || '' '' || p.KNOWN_AS2 || '' '' || p.KNOWN_AS3 || '' ''|| p.KNOWN_AS4 || '' ''|| p.KNOWN_AS5';
5506 l_oth_select(idx) := 'p.PARTY_NAME || '' '' || p.KNOWN_AS || '' '' || p.KNOWN_AS2 || '' '' || p.KNOWN_AS3 || '' ''|| p.KNOWN_AS4 || '' ''|| p.KNOWN_AS5';
5507 END IF;
5508 ELSE
5509 IF l_mincol_list(ATTRS.COLNUM) = 'Y' THEN
5510 IF has_context(ATTRS.custom_attribute_procedure) THEN
5511 l_custom_list(ATTRS.COLNUM) := ATTRS.custom_attribute_procedure || '(H_P_PARTY_ID(I),''PARTY'','''||ATTRS.ATTRIBUTE_NAME|| ''', ''STAGE'')';
5512 ELSE
5513 l_custom_list(ATTRS.COLNUM) := ATTRS.custom_attribute_procedure || '(H_P_PARTY_ID(I),''PARTY'','''||ATTRS.ATTRIBUTE_NAME|| ''')';
5514 END IF;
5515 END IF;
5516 END IF;
5517 END IF;
5518 idx := idx+1;
5519
5520 -- VJN ADDED CODE FOR TRACKING CONDITION ATTRIBUTES AT THIS ENTITY LEVEL
5521 IF HZ_WORD_CONDITIONS_PKG.is_a_cond_attrib( ATTRS.attribute_id)
5522 THEN
5523 l_cond_attrib_list(ATTRS.COLNUM) := ATTRS.attribute_id ;
5524 END IF;
5525
5526
5527 END LOOP;
5528
5529 IF cur_col_num<=255 THEN--bug 5977628
5530 FOR I in cur_col_num..255 LOOP
5531 l_mincol_list(I) := 'N';
5532 l_forall_list(I) := 'N';
5533 l_custom_list(I) := 'N';
5534 END LOOP;
5535 END IF;
5536
5537 l(' IF p_select_type = ''SINGLE_PARTY'' THEN');
5538 l(' NULL;');
5539 l(' ELSIF p_select_type = ''ALL_PARTIES'' THEN');
5540 l(' IF p_continue IS NULL OR p_continue<>''Y'' THEN');
5541 l(' IF p_party_type = ''ORGANIZATION'' THEN');
5542 l(' open x_party_cur FOR ' );
5543 l(' SELECT p.PARTY_ID, p.STATUS ');
5544 FOR I in 1..l_org_select.COUNT LOOP
5545 IF l_org_select(I) <> 'N' THEN
5546 l(' ,' || l_org_select(I));
5547 END IF;
5548 END LOOP;
5549
5550 l(' FROM HZ_PARTIES p, HZ_ORGANIZATION_PROFILES op ');
5551 l(' WHERE mod(p.PARTY_ID, p_num_workers) = p_worker_number ');
5552 l(' AND p.party_id = op.party_id ');
5556 l(' open x_party_cur FOR ' );
5553 l(' AND op.effective_end_date is NULL ');
5554 l(' AND p.PARTY_TYPE =''ORGANIZATION''; ');
5555 l(' ELSIF p_party_type = ''PERSON'' THEN');
5557 l(' SELECT p.PARTY_ID, p.STATUS ');
5558 FOR I in 1..l_per_select.COUNT LOOP
5559 IF l_per_select(I) <> 'N' THEN
5560 l(' ,' || l_per_select(I));
5561 END IF;
5562 END LOOP;
5563 l(' FROM HZ_PARTIES p, HZ_PERSON_PROFILES pe ');
5564 l(' WHERE mod(p.PARTY_ID, p_num_workers) = p_worker_number ');
5565 l(' AND p.party_id = pe.party_id ');
5566 l(' AND pe.effective_end_date is NULL ');
5567 l(' AND p.PARTY_TYPE =''PERSON''; ');
5568 l(' ELSE');
5569 l(' open x_party_cur FOR ' );
5570 l(' SELECT p.PARTY_ID, p.STATUS ');
5571 FOR I in 1..l_oth_select.COUNT LOOP
5572 IF l_oth_select(I) <> 'N' THEN
5573 l(' ,' || l_oth_select(I));
5574 END IF;
5575 END LOOP;
5576 l(' FROM HZ_PARTIES p ');
5577 l(' WHERE mod(p.PARTY_ID, p_num_workers) = p_worker_number ');
5578 l(' AND p.party_type <> ''PERSON'' ');
5579 l(' AND p.party_type <> ''ORGANIZATION'' ');
5580 l(' AND p.party_type <> ''PARTY_RELATIONSHIP''; ');
5581 l(' END IF;');
5582 l(' ELSE');
5583 l(' IF p_party_type = ''ORGANIZATION'' THEN');
5584 l(' open x_party_cur FOR ' );
5585 l(' SELECT p.PARTY_ID, p.STATUS ');
5586 FOR I in 1..l_org_select.COUNT LOOP
5587 IF l_org_select(I) <> 'N' THEN
5588 l(' ,' || l_org_select(I));
5589 END IF;
5590 END LOOP;
5591
5592 l(' FROM HZ_PARTIES p, HZ_ORGANIZATION_PROFILES op ');
5593 l(' WHERE mod(p.PARTY_ID, p_num_workers) = p_worker_number ');
5594 l(' AND NOT EXISTS (select 1 FROM HZ_STAGED_PARTIES sp ');
5595 l(' WHERE sp.party_id = p.party_id) ' );
5596 l(' AND p.party_id = op.party_id ');
5597 l(' AND op.effective_end_date is NULL ');
5598 l(' AND p.PARTY_TYPE =''ORGANIZATION''; ');
5599 l(' ELSIF p_party_type = ''PERSON'' THEN');
5600 l(' open x_party_cur FOR ' );
5601 l(' SELECT p.PARTY_ID, p.STATUS ');
5602 FOR I in 1..l_per_select.COUNT LOOP
5603 IF l_per_select(I) <> 'N' THEN
5604 l(' ,' || l_per_select(I));
5605 END IF;
5606 END LOOP;
5607 l(' FROM HZ_PARTIES p, HZ_PERSON_PROFILES pe ');
5608 l(' WHERE mod(p.PARTY_ID, p_num_workers) = p_worker_number ');
5609 l(' AND NOT EXISTS (select 1 FROM HZ_STAGED_PARTIES sp ');
5610 l(' WHERE sp.party_id = p.party_id) ' );
5611 l(' AND p.party_id = pe.party_id ');
5612 l(' AND pe.effective_end_date is NULL ');
5613 l(' AND p.PARTY_TYPE =''PERSON''; ');
5614 l(' ELSE');
5615 l(' open x_party_cur FOR ' );
5616 l(' SELECT p.PARTY_ID, p.STATUS ');
5617 FOR I in 1..l_oth_select.COUNT LOOP
5618 IF l_oth_select(I) <> 'N' THEN
5619 l(' ,' || l_oth_select(I));
5620 END IF;
5621 END LOOP;
5622 l(' FROM HZ_PARTIES p ');
5623 l(' WHERE mod(p.PARTY_ID, p_num_workers) = p_worker_number ');
5624 l(' AND NOT EXISTS (select 1 FROM HZ_STAGED_PARTIES sp ');
5625 l(' WHERE sp.party_id = p.party_id) ' );
5626 l(' AND p.party_type <> ''PERSON'' ');
5627 l(' AND p.party_type <> ''ORGANIZATION'' ');
5628 l(' AND p.party_type <> ''PARTY_RELATIONSHIP''; ');
5629 l(' END IF;');
5630 l(' END IF;');
5631 l(' END IF;');
5632 l(' END;');
5633
5634 l('');
5635 l(' PROCEDURE insert_stage_parties ( ');
5636 l(' p_continue IN VARCHAR2, ');
5637 l(' p_party_cur IN HZ_PARTY_STAGE.StageCurTyp) IS ');
5638 l(' l_limit NUMBER := ' || g_batch_size || ';');
5639 l(' l_contact_cur HZ_PARTY_STAGE.StageCurTyp;');
5640 l(' l_cpt_cur HZ_PARTY_STAGE.StageCurTyp;');
5641 l(' l_party_site_cur HZ_PARTY_STAGE.StageCurTyp;');
5642 l(' l_last_fetch BOOLEAN := FALSE;');
5643 l(' call_status BOOLEAN;');
5644 l(' rphase varchar2(255);');
5645 l(' rstatus varchar2(255);');
5646 l(' dphase varchar2(255);');
5647 l(' dstatus varchar2(255);');
5648 l(' message varchar2(255);');
5649 l(' req_id NUMBER;');
5650 l(' l_st number; ');
5651 l(' l_en number; ');
5652 l(' USER_TERMINATE EXCEPTION;');
5653 l('');
5654 l(' BEGIN');
5655 l(' req_id := FND_GLOBAL.CONC_REQUEST_ID;');
5656 l(' LOOP');
5657 l(' call_status := FND_CONCURRENT.GET_REQUEST_STATUS(');
5658 l(' req_id, null,null,rphase,rstatus,dphase,dstatus,message);');
5659 l(' IF dstatus = ''TERMINATING'' THEN');
5660 l(' FND_FILE.put_line(FND_FILE.log,''Aborted by User'');');
5661 l(' RAISE USER_TERMINATE;');
5662 l(' END IF;');
5663 l(' FETCH p_party_cur BULK COLLECT INTO');
5664 l(' H_P_PARTY_ID');
5665 l(' , H_STATUS');
5666 FOR I IN 1..255 LOOP
5667 IF l_forall_list(I) <> 'N' AND l_mincol_list(I) = 'Y' AND
5668 l_custom_list(I) = 'N' THEN
5669 l(' ,H_TX'||I);
5670 END IF;
5671 END LOOP;
5672 l(' LIMIT l_limit;');
5673 l('');
5677
5674 l(' IF p_party_cur%NOTFOUND THEN');
5675 l(' l_last_fetch:=TRUE;');
5676 l(' END IF;');
5678 l(' IF H_P_PARTY_ID.COUNT=0 AND l_last_fetch THEN');
5679 l(' EXIT;');
5680 l(' END IF;');
5681
5682 l(' FOR I in H_P_PARTY_ID.FIRST..H_P_PARTY_ID.LAST LOOP');
5683
5684 -- VJN INTRODUCED FOR CONDITIONAL REPLACEMENTS
5685 -- CYCLE THROUGH THE CONDITON LIST AND GENERATE THE CODE
5686 -- FOR POPULATING THE GLOBAL CONDITION RECORD
5687
5688 l_idx := l_cond_attrib_list.FIRST ;
5689 IF l_idx IS NOT NULL
5690 THEN
5691 l('----------- SETTING GLOBAL CONDITION RECORD AT THE PARTY LEVEL ---------');
5692 END IF ;
5693
5694
5695 WHILE l_cond_attrib_list.EXISTS(l_idx)
5696 LOOP
5697
5698 l(' HZ_WORD_CONDITIONS_PKG.set_gbl_condition_rec ('||l_cond_attrib_list(l_idx)||','||'H_TX'||l_idx||'(I));');
5699 l_idx := l_idx+1;
5700 END LOOP;
5701
5702
5703 l('');
5704
5705
5706 FOR I IN 1..255 LOOP
5707 IF l_forall_list(I) <> 'N' THEN
5708 IF l_custom_list(I) <> 'N' AND l_mincol_list(I) = 'Y' THEN
5709 l(' H_TX'||I||'(I):='||l_custom_list(I)||';');
5710 END IF;
5711 END IF;
5712 END LOOP;
5713 FOR I IN 1..255 LOOP
5714 IF l_forall_list(I) <> 'N' THEN
5715 IF l_mincol_list(I) <> 'Y' THEN
5716 l(' H_TX'||I||'(I):='||l_forall_list(I)||';');
5717 END IF;
5718 END IF;
5719 END LOOP;
5720 FOR I IN 1..255 LOOP
5721 IF l_forall_list(I) <> 'N' THEN
5722 IF l_mincol_list(I) = 'Y' THEN
5723 l(' H_TX'||I||'(I):='||l_forall_list(I)||';');
5724 END IF;
5725 END IF;
5726 END LOOP;
5727 l(' H_PARTY_INDEX(I) := I;');
5728 l(' H_PS_DEN(I) := '' '';');
5729 l(' H_CT_DEN(I) := '' '';');
5730 l(' H_CPT_DEN(I) := '' '';');
5731 l(' END LOOP;');
5732
5733 l(' SAVEPOINT party_batch;');
5734 l(' BEGIN ');
5735 l(' l_st := 1; ');
5736 l(' l_en := H_P_PARTY_ID.COUNT; ');
5737 l(' LOOP ');
5738 l(' BEGIN ');
5739 l(' FORALL I in l_st..l_en');
5740 l(' INSERT INTO HZ_STAGED_PARTIES (');
5741 l(' PARTY_ID');
5742 l(' ,STATUS');
5743 FOR I IN 1..255 LOOP
5744 IF l_forall_list(I) <> 'N' THEN
5745 l(' , TX'||I);
5746 END IF;
5747 END LOOP;
5748 l(' ) VALUES (');
5749 l(' H_P_PARTY_ID(I)');
5750 l(' ,H_STATUS(I)');
5751 FOR I IN 1..255 LOOP
5752 IF l_forall_list(I) <> 'N' THEN
5753 l(' , decode(H_TX'||I||'(I),null,H_TX'||I||'(I),H_TX'||I||'(I)||'' '')');
5754 END IF;
5755 END LOOP;
5756 l(' );');
5757 l(' EXIT; ');
5758 l(' EXCEPTION WHEN OTHERS THEN ');
5759 l(' l_st:= l_st+SQL%ROWCOUNT+1;');
5760 l(' END; ');
5761 l(' END LOOP; ');
5762 l(' FORALL I in H_P_PARTY_ID.FIRST..H_P_PARTY_ID.LAST');
5763 l(' INSERT INTO HZ_DQM_STAGE_GT ( PARTY_ID, OWNER_ID, PARTY_INDEX) VALUES (');
5764 l(' H_P_PARTY_ID(I),H_P_PARTY_ID(I),H_PARTY_INDEX(I));');
5765
5766 l(' insert_stage_contacts;');
5767 l(' insert_stage_party_sites;');
5768 l(' insert_stage_contact_pts;');
5769 l(' FORALL I in H_P_PARTY_ID.FIRST..H_P_PARTY_ID.LAST');
5770 l(' UPDATE HZ_STAGED_PARTIES SET ');
5771 l(' D_PS = H_PS_DEN(I),');
5772 l(' D_CT = H_CT_DEN(I),');
5773 l(' D_CPT = H_CPT_DEN(I)');
5774 l(' WHERE PARTY_ID = H_P_PARTY_ID(I);');
5775 l(' EXCEPTION ');
5776 l(' WHEN OTHERS THEN');
5777 l(' ROLLBACK to party_batch;');
5778 l(' RAISE;');
5779 l(' END;');
5780 l(' IF l_last_fetch THEN');
5781 l(' FND_CONCURRENT.AF_Commit;');
5782 l(' EXIT;');
5783 l(' END IF;');
5784 l(' FND_CONCURRENT.AF_Commit;');
5785 l(' END LOOP;');
5786 l(' END;');
5787
5788 l('');
5789 l(' PROCEDURE sync_single_party (');
5790 l(' p_party_id NUMBER,');
5791 l(' p_party_type VARCHAR2,');
5792 l(' p_operation VARCHAR2) IS');
5793 l('');
5794 l(' l_tryins BOOLEAN;');
5795 l(' l_tryupd BOOLEAN;');
5796 l(' BEGIN');
5797 l(' IF p_party_type = ''ORGANIZATION'' THEN');
5798 l(' SELECT p.PARTY_ID, p.STATUS ');
5799 FOR I in 1..l_org_select.COUNT LOOP
5800 IF l_org_select(I) <> 'N' THEN
5801 l(' ,' || l_org_select(I));
5802 END IF;
5803 END LOOP;
5804 l(' INTO H_P_PARTY_ID(1), H_STATUS(1)');
5805 FOR I IN 1..255 LOOP
5806 IF l_forall_list(I) <> 'N' AND l_mincol_list(I) = 'Y' AND
5807 l_custom_list(I) = 'N' THEN
5808 l(' , H_TX'||I||'(1)');
5809 END IF;
5810 END LOOP;
5811 l(' FROM HZ_PARTIES p, HZ_ORGANIZATION_PROFILES op ');
5812 l(' WHERE p.party_id = p_party_id ');
5813 l(' AND p.party_id = op.party_id ');
5814 l(' AND (p.status = ''M'' or op.effective_end_date is NULL) AND ROWNUM=1; ');
5815 l(' ELSIF p_party_type = ''PERSON'' THEN');
5816 l(' SELECT p.PARTY_ID, p.STATUS ');
5817 FOR I in 1..l_per_select.COUNT LOOP
5818 IF l_per_select(I) <> 'N' THEN
5819 l(' ,' || l_per_select(I));
5820 END IF;
5821 END LOOP;
5825 l_custom_list(I) = 'N' THEN
5822 l(' INTO H_P_PARTY_ID(1), H_STATUS(1)');
5823 FOR I IN 1..255 LOOP
5824 IF l_forall_list(I) <> 'N' AND l_mincol_list(I) = 'Y' AND
5826 l(' , H_TX'||I||'(1)');
5827 END IF;
5828 END LOOP;
5829 l(' FROM HZ_PARTIES p, HZ_PERSON_PROFILES pe ');
5830 l(' WHERE p.party_id = p_party_id ');
5831 l(' AND p.party_id = pe.party_id ');
5832 l(' AND (p.status = ''M'' or pe.effective_end_date is NULL) AND ROWNUM=1;');
5833 l(' ELSE');
5834 l(' SELECT p.PARTY_ID, p.STATUS ');
5835 FOR I in 1..l_oth_select.COUNT LOOP
5836 IF l_per_select(I) <> 'N' THEN
5837 l(' ,' || l_oth_select(I));
5838 END IF;
5839 END LOOP;
5840
5841 l(' INTO H_P_PARTY_ID(1), H_STATUS(1)');
5842 FOR I IN 1..255 LOOP
5843 IF l_forall_list(I) <> 'N' AND l_mincol_list(I) = 'Y' AND
5844 l_custom_list(I) = 'N' THEN
5845 l(' , H_TX'||I||'(1)');
5846 END IF;
5847 END LOOP;
5848 l(' FROM HZ_PARTIES p ');
5849 l(' WHERE p.party_id = p_party_id;');
5850 l(' END IF;');
5851 -- VJN INTRODUCED CODE FOR GENERATING THE POPULATION
5852 -- OF THE GLOBAL CONDITION RECORD
5853
5854 l_idx := l_cond_attrib_list.FIRST ;
5855 IF l_idx IS NOT NULL
5856 THEN
5857 l('----------- SETTING GLOBAL CONDITION RECORD AT THE PARTY LEVEL ---------');
5858 END IF ;
5859
5860
5861 WHILE l_cond_attrib_list.EXISTS(l_idx)
5862 LOOP
5863
5864 l(' HZ_WORD_CONDITIONS_PKG.set_gbl_condition_rec ('||l_cond_attrib_list(l_idx)||','||'H_TX'||l_idx||'(1));');
5865 l_idx := l_idx+1;
5866 END LOOP;
5867
5868
5869 FOR I IN 1..255 LOOP
5870 IF l_forall_list(I) <> 'N' THEN
5871 IF l_custom_list(I) <> 'N' AND l_mincol_list(I) = 'Y' THEN
5872 l(' H_TX'||I||'(1):='||replace(l_custom_list(I),'(I)','(1)')||';');
5873 END IF;
5874 END IF;
5875 END LOOP;
5876 FOR I IN 1..255 LOOP
5877 IF l_forall_list(I) <> 'N' THEN
5878 IF l_mincol_list(I) <> 'Y' THEN
5879 l(' H_TX'||I||'(1):='||replace(l_forall_list(I),'(I)','(1)')||';');
5880 END IF;
5881 END IF;
5882 END LOOP;
5883 FOR I IN 1..255 LOOP
5884 IF l_forall_list(I) <> 'N' THEN
5885 IF l_mincol_list(I) = 'Y' THEN
5886 l(' H_TX'||I||'(1):='||replace(l_forall_list(I),'(I)','(1)')||';');
5887 END IF;
5888 END IF;
5889 END LOOP;
5890
5891 l(' l_tryins := FALSE;');
5892 l(' l_tryupd := FALSE;');
5893 l(' IF p_operation=''C'' THEN');
5894 l(' l_tryins:=TRUE;');
5895 l(' ELSE ');
5896 l(' l_tryupd:=TRUE;');
5897 l(' END IF;');
5898 l(' WHILE (l_tryins OR l_tryupd) LOOP');
5899 l(' IF l_tryins THEN');
5900 l(' BEGIN');
5901 l(' l_tryins:=FALSE;');
5902 l(' INSERT INTO HZ_STAGED_PARTIES (');
5903 l(' PARTY_ID');
5904 l(' ,STATUS');
5905 l(' ,D_PS');
5906 l(' ,D_CT');
5907 l(' ,D_CPT');
5908 FOR I IN 1..255 LOOP
5909 IF l_forall_list(I) <> 'N' THEN
5910 l(' , TX'||I);
5911 END IF;
5912 END LOOP;
5913 l(' ) VALUES (');
5914 l(' H_P_PARTY_ID(1)');
5915 l(' ,H_STATUS(1)');
5916 l(' ,''SYNC''');
5917 l(' ,''SYNC''');
5918 l(' ,''SYNC''');
5919 FOR I IN 1..255 LOOP
5920 IF l_forall_list(I) <> 'N' THEN
5921 l(' , decode(H_TX'||I||'(1),null,H_TX'||I||'(1),H_TX'||I||'(1)||'' '')');
5922 END IF;
5923 END LOOP;
5924 l(' );');
5925 l(' EXCEPTION');
5926 l(' WHEN DUP_VAL_ON_INDEX THEN');
5927 l(' IF p_operation=''C'' THEN');
5928 l(' l_tryupd:=TRUE;');
5929 l(' END IF;');
5930 l(' END;');
5931 l(' END IF;');
5932 l(' IF l_tryupd THEN');
5933 l(' BEGIN');
5934 l(' l_tryupd:=FALSE;');
5935 l(' UPDATE HZ_STAGED_PARTIES SET ');
5936 l(' status =H_STATUS(1) ');
5937 l(' ,concat_col = concat_col ');
5938 FOR I IN 1..255 LOOP
5939 IF l_forall_list(I) <> 'N' THEN
5940 l(' ,TX'||I||'=decode(H_TX'||I||'(1),null,H_TX'||I||'(1),H_TX'||I||'(1)||'' '')');
5941 END IF;
5942 END LOOP;
5943 l(' WHERE PARTY_ID=H_P_PARTY_ID(1);');
5944 l(' IF SQL%ROWCOUNT=0 AND p_operation=''U'' THEN');
5945 l(' l_tryins := TRUE;');
5946 l(' END IF;');
5947 l(' EXCEPTION ');
5948 l(' WHEN NO_DATA_FOUND THEN');
5949 l(' IF p_operation=''U'' THEN');
5950 l(' l_tryins := TRUE;');
5951 l(' END IF;');
5952 l(' END;');
5953 l(' END IF;');
5954 l(' END LOOP;');
5955 l(' END;');
5956
5957 -- VJN Introduced for SYNC. This is the online version, which would be used to
5958 -- directly insert into the staging tables from SYNC.
5959 l('');
5960 l(' PROCEDURE sync_single_party_online (');
5961 l(' p_party_id NUMBER,');
5962 l(' p_operation VARCHAR2) IS');
5963 l('');
5964 l(' l_tryins BOOLEAN;');
5965 l(' l_tryupd BOOLEAN;');
5966 l(' l_party_type VARCHAR2(30); ');
5967 l(' l_org_contact_id NUMBER; ');
5971 l(' CURSOR c_contact IS ');
5968 l(' l_sql_err_message VARCHAR2(2000); ');
5969 l('');
5970 l(' --bug 4500011 replaced hz_party_relationships with hz_relationships ');
5972 l(' SELECT oc.org_contact_id ');
5973 l(' FROM HZ_RELATIONSHIPS pr, HZ_ORG_CONTACTS oc ');
5974 l(' WHERE pr.relationship_id = oc.party_relationship_id ');
5975 l(' AND pr.subject_id = p_party_id ');
5976 l(' AND pr.subject_table_name = ''HZ_PARTIES'' ');
5977 l(' AND pr.object_table_name = ''HZ_PARTIES'' ');
5978 l(' AND pr.directional_flag = ''F''; ');
5979 l('');
5980 l(' BEGIN');
5981 l('');
5982 l(' -- Get party_type ');
5983 l(' SELECT party_type INTO l_party_type ');
5984 l(' FROM hz_parties WHERE party_id = p_party_id; ');
5985 l('');
5986 l(' -- Set global G_PARTY_TYPE variable value');
5987 l(' hz_trans_pkg.set_party_type(l_party_type); ');
5988 l('');
5989 l(' IF l_party_type = ''PERSON'' THEN ');
5990 l(' ---------------------------------- ');
5991 l(' -- Take care of CONTACT INFORMATION ');
5992 l(' -- When the operation is an update ');
5993 l(' ---------------------------------- ');
5994 l(' IF p_operation = ''U'' THEN ');
5995 l(' OPEN c_contact; ');
5996 l(' LOOP ');
5997 l(' FETCH c_contact INTO l_org_contact_id; ');
5998 l(' EXIT WHEN c_contact%NOTFOUND; ');
5999 l(' BEGIN ');
6000 l(' sync_single_contact_online(l_org_contact_id, p_operation); ');
6001 l(' EXCEPTION WHEN OTHERS THEN ');
6002 l(' -- FAILOVER : REPORT RECORD TO HZ_DQM_SYNC_INTERFACE ');
6003 l(' -- FOR ONLINE FLOWS ');
6004 l(' l_sql_err_message := SQLERRM; ');
6005 l(' insert_dqm_sync_error_rec(p_party_id,l_org_contact_id,null,null,''CONTACTS'',''U'',''E'',''Y'', l_sql_err_message); ');
6006 l(' END ; ');
6007 l(' END LOOP; ');
6008 l(' END IF ; ');
6009 l(' END IF; ');
6010 l('');
6011 l(' IF l_party_type = ''ORGANIZATION'' THEN');
6012 l(' SELECT p.PARTY_ID, p.STATUS ');
6013 FOR I in 1..l_org_select.COUNT LOOP
6014 IF l_org_select(I) <> 'N' THEN
6015 l(' ,' || l_org_select(I));
6016 END IF;
6017 END LOOP;
6018 l(' INTO H_P_PARTY_ID(1), H_STATUS(1)');
6019 FOR I IN 1..255 LOOP
6020 IF l_forall_list(I) <> 'N' AND l_mincol_list(I) = 'Y' AND
6021 l_custom_list(I) = 'N' THEN
6022 l(' , H_TX'||I||'(1)');
6023 END IF;
6024 END LOOP;
6025 l(' FROM HZ_PARTIES p, HZ_ORGANIZATION_PROFILES op ');
6026 l(' WHERE p.party_id = p_party_id ');
6027 l(' AND p.party_id = op.party_id ');
6028 l(' AND (p.status = ''M'' or op.effective_end_date is NULL) AND ROWNUM=1; ');
6029 l(' ELSIF l_party_type = ''PERSON'' THEN');
6030 l(' SELECT p.PARTY_ID, p.STATUS ');
6031 FOR I in 1..l_per_select.COUNT LOOP
6032 IF l_per_select(I) <> 'N' THEN
6033 l(' ,' || l_per_select(I));
6034 END IF;
6035 END LOOP;
6036 l(' INTO H_P_PARTY_ID(1), H_STATUS(1)');
6037 FOR I IN 1..255 LOOP
6038 IF l_forall_list(I) <> 'N' AND l_mincol_list(I) = 'Y' AND
6039 l_custom_list(I) = 'N' THEN
6040 l(' , H_TX'||I||'(1)');
6041 END IF;
6042 END LOOP;
6043 l(' FROM HZ_PARTIES p, HZ_PERSON_PROFILES pe ');
6044 l(' WHERE p.party_id = p_party_id ');
6045 l(' AND p.party_id = pe.party_id ');
6046 l(' AND (p.status = ''M'' or pe.effective_end_date is NULL) AND ROWNUM=1;');
6047 l(' ELSE');
6048 l(' SELECT p.PARTY_ID, p.STATUS ');
6049 FOR I in 1..l_oth_select.COUNT LOOP
6050 IF l_per_select(I) <> 'N' THEN
6051 l(' ,' || l_oth_select(I));
6052 END IF;
6053 END LOOP;
6054
6055 l(' INTO H_P_PARTY_ID(1), H_STATUS(1)');
6056 FOR I IN 1..255 LOOP
6057 IF l_forall_list(I) <> 'N' AND l_mincol_list(I) = 'Y' AND
6058 l_custom_list(I) = 'N' THEN
6059 l(' , H_TX'||I||'(1)');
6060 END IF;
6061 END LOOP;
6062 l(' FROM HZ_PARTIES p ');
6063 l(' WHERE p.party_id = p_party_id;');
6064 l(' END IF;');
6065 l('');
6066 -- VJN INTRODUCED CODE FOR GENERATING THE POPULATION
6067 -- OF THE GLOBAL CONDITION RECORD
6068
6069 l_idx := l_cond_attrib_list.FIRST ;
6070 IF l_idx IS NOT NULL
6071 THEN
6072 l(' ---- SETTING GLOBAL CONDITION RECORD AT THE PARTY LEVEL ----');
6073 END IF ;
6074
6075
6076 WHILE l_cond_attrib_list.EXISTS(l_idx)
6077 LOOP
6078
6079 l(' HZ_WORD_CONDITIONS_PKG.set_gbl_condition_rec ('||l_cond_attrib_list(l_idx)||','||'H_TX'||l_idx||'(1));');
6080 l_idx := l_idx+1;
6081 END LOOP;
6082
6083
6084 FOR I IN 1..255 LOOP
6085 IF l_forall_list(I) <> 'N' THEN
6086 IF l_custom_list(I) <> 'N' AND l_mincol_list(I) = 'Y' THEN
6087 l(' H_TX'||I||'(1):='||replace(l_custom_list(I),'(I)','(1)')||';');
6088 END IF;
6089 END IF;
6090 END LOOP;
6091 FOR I IN 1..255 LOOP
6092 IF l_forall_list(I) <> 'N' THEN
6093 IF l_mincol_list(I) <> 'Y' THEN
6094 l(' H_TX'||I||'(1):='||replace(l_forall_list(I),'(I)','(1)')||';');
6095 END IF;
6096 END IF;
6097 END LOOP;
6098 FOR I IN 1..255 LOOP
6099 IF l_forall_list(I) <> 'N' THEN
6100 IF l_mincol_list(I) = 'Y' THEN
6104 END LOOP;
6101 l(' H_TX'||I||'(1):='||replace(l_forall_list(I),'(I)','(1)')||';');
6102 END IF;
6103 END IF;
6105 l('');
6106 l(' l_tryins := FALSE;');
6107 l(' l_tryupd := FALSE;');
6108 l('');
6109 l(' IF p_operation=''C'' THEN');
6110 l(' l_tryins:=TRUE;');
6111 l(' ELSE ');
6112 l(' l_tryupd:=TRUE;');
6113 l(' END IF;');
6114 l('');
6115 l(' WHILE (l_tryins OR l_tryupd) LOOP');
6116 l(' IF l_tryins THEN');
6117 l(' BEGIN');
6118 l(' l_tryins:=FALSE;');
6119 l(' INSERT INTO HZ_STAGED_PARTIES (');
6120 l(' PARTY_ID');
6121 l(' ,STATUS');
6122 l(' ,D_PS');
6123 l(' ,D_CT');
6124 l(' ,D_CPT');
6125 FOR I IN 1..255 LOOP
6126 IF l_forall_list(I) <> 'N' THEN
6127 l(' ,TX'||I);
6128 END IF;
6129 END LOOP;
6130 l(' ) VALUES (');
6131 l(' H_P_PARTY_ID(1)');
6132 l(' ,H_STATUS(1)');
6133 l(' ,''SYNC''');
6134 l(' ,''SYNC''');
6135 l(' ,''SYNC''');
6136 FOR I IN 1..255 LOOP
6137 IF l_forall_list(I) <> 'N' THEN
6138 l(' ,decode(H_TX'||I||'(1),null,H_TX'||I||'(1),H_TX'||I||'(1)||'' '')');
6139 END IF;
6140 END LOOP;
6141 l(' );');
6142 l(' EXCEPTION');
6143 l(' WHEN DUP_VAL_ON_INDEX THEN');
6144 l(' IF p_operation=''C'' THEN');
6145 l(' l_tryupd:=TRUE;');
6146 l(' END IF;');
6147 l(' END;');
6148 l(' END IF;');
6149 l('');
6150 l(' IF l_tryupd THEN');
6151 l(' BEGIN');
6152 l(' l_tryupd:=FALSE;');
6153 l(' UPDATE HZ_STAGED_PARTIES SET ');
6154 l(' concat_col = concat_col ');
6155 l(' ,status =H_STATUS(1) ');
6156 FOR I IN 1..255 LOOP
6157 IF l_forall_list(I) <> 'N' THEN
6158 l(' ,TX'||I||'=decode(H_TX'||I||'(1),null,H_TX'||I||'(1),H_TX'||I||'(1)||'' '')');
6159 END IF;
6160 END LOOP;
6161 l(' WHERE PARTY_ID=H_P_PARTY_ID(1);');
6162 l(' IF SQL%ROWCOUNT=0 AND p_operation=''U'' THEN');
6163 l(' l_tryins := TRUE;');
6164 l(' END IF;');
6165 l(' EXCEPTION ');
6166 l(' WHEN NO_DATA_FOUND THEN');
6167 l(' IF p_operation=''U'' THEN');
6168 l(' l_tryins := TRUE;');
6169 l(' END IF;');
6170 l(' END;');
6171 l(' END IF;');
6172 l(' END LOOP;');
6173 l('');
6174 l(' -- REPURI. Bug 4884742. If shadow staging is completely successfully ');
6175 l(' -- insert a record into hz_dqm_sh_sync_interface table for each record ');
6176 l(' IF (HZ_DQM_SYNC.is_shadow_staging_complete) THEN ');
6177 l(' BEGIN ');
6178 l(' HZ_DQM_SYNC.insert_sh_interface_rec(p_party_id,null,null,null,''PARTY'',p_operation); ');
6179 l(' EXCEPTION WHEN OTHERS THEN ');
6180 l(' NULL; ');
6181 l(' END; ');
6182 l(' END IF; ');
6183 l('');
6184 -- Fix for Bug 4862121.
6185 -- Added the Exception handling at this context, for the procedure.
6186 l(' EXCEPTION WHEN OTHERS THEN ');
6187 l(' -- FAILOVER : REPORT RECORD TO HZ_DQM_SYNC_INTERFACE ');
6188 l(' -- FOR ONLINE FLOWS ');
6189 l(' l_sql_err_message := SQLERRM; ');
6190 l(' insert_dqm_sync_error_rec(p_party_id, NULL, NULL, NULL, ''PARTY'', p_operation, ''E'', ''Y'', l_sql_err_message); ');
6191 l(' END;');
6192
6193 END;
6194
6195 -- REPURI. Proccedure to generate the code (into HZ_STAGE_MAP_TRANSFORM)
6196 -- for OPEN_BULK_IMP_SYNC_PSITE_CUR Procedure. Bug 4884735.
6197
6198 PROCEDURE gen_bulk_imp_sync_psite_query IS
6199 cur_col_num NUMBER := 1;
6200
6201 TYPE coltab IS TABLE OF VARCHAR2(2000) INDEX BY BINARY_INTEGER;
6202
6203 l_select coltab;
6204 FIRST BOOLEAN := FALSE;
6205
6206 l_forall_list coltab;
6207 l_custom_list coltab;
6208 l_mincol_list coltab;
6209 l_min_colnum NUMBER;
6210 idx NUMBER :=1;
6211 is_first boolean := true;
6212
6213 -- VJN Introduced for conditional word replacements
6214 l_cond_attrib_list coltab ;
6215 l_idx number ;
6216
6217 BEGIN
6218
6219 l('');
6220 l(' PROCEDURE open_bulk_imp_sync_psite_cur ( ');
6221 l(' p_batch_id IN NUMBER, ');
6222 l(' p_batch_mode_flag IN VARCHAR2, ');
6223 l(' p_from_osr IN VARCHAR2, ');
6224 l(' p_to_osr IN VARCHAR2, ');
6225 l(' p_os IN VARCHAR2, ');
6226 l(' p_operation IN VARCHAR2, ');
6227 l(' x_sync_party_site_cur IN OUT HZ_DQM_SYNC.SyncCurTyp) IS ');
6228 l(' BEGIN');
6229
6230 FOR ATTRS IN (SELECT a.ATTRIBUTE_ID,
6231 a.ATTRIBUTE_NAME,
6232 a.SOURCE_TABLE,
6233 a.CUSTOM_ATTRIBUTE_PROCEDURE,
6234 f.PROCEDURE_NAME,
6235 f.STAGED_ATTRIBUTE_COLUMN,
6236 to_number(substrb(STAGED_ATTRIBUTE_COLUMN, 3)) COLNUM
6237 FROM HZ_TRANS_ATTRIBUTES_VL a, HZ_TRANS_FUNCTIONS_VL f
6238 WHERE ENTITY_NAME = 'PARTY_SITES'
6239 AND nvl(f.ACTIVE_FLAG,'Y') = 'Y'
6243 FOR I in cur_col_num..ATTRS.COLNUM-1 LOOP
6240 AND f.ATTRIBUTE_ID = a.ATTRIBUTE_ID
6241 ORDER BY COLNUM) LOOP
6242 IF cur_col_num<ATTRS.COLNUM THEN
6244 l_mincol_list(I) := 'N';
6245 l_forall_list(I) := 'N';
6246 l_custom_list(I) := 'N';
6247 END LOOP;
6248 END IF;
6249 cur_col_num:=ATTRS.COLNUM+1;
6250 IF has_trx_context(ATTRS.PROCEDURE_NAME) THEN
6251 l_forall_list(ATTRS.COLNUM) := ATTRS.PROCEDURE_NAME || '(H_TX'||ATTRS.COLNUM||'(I),NULL, ''' || ATTRS.ATTRIBUTE_NAME || ''',''PARTY_SITES'',''STAGE'')';
6252 ELSE
6253 l_forall_list(ATTRS.COLNUM) := ATTRS.PROCEDURE_NAME || '(H_TX'||ATTRS.COLNUM||'(I),NULL, ''' || ATTRS.ATTRIBUTE_NAME || ''',''PARTY_SITES'')';
6254 END IF;
6255
6256 SELECT min(to_number(substrb(STAGED_ATTRIBUTE_COLUMN, 3))) INTO l_min_colnum
6257 FROM HZ_TRANS_ATTRIBUTES_VL a, HZ_TRANS_FUNCTIONS_VL f
6258 WHERE ENTITY_NAME = 'PARTY_SITES'
6259 AND nvl(f.ACTIVE_FLAG,'Y') = 'Y'
6260 AND f.ATTRIBUTE_ID = a.ATTRIBUTE_ID
6261 AND a.ATTRIBUTE_NAME=ATTRS.ATTRIBUTE_NAME;
6262
6263 IF ATTRS.colnum>l_min_colnum THEN
6264 l_mincol_list(ATTRS.COLNUM) := 'N';
6265 IF has_trx_context(ATTRS.PROCEDURE_NAME) THEN
6266 l_forall_list(ATTRS.COLNUM) := ATTRS.PROCEDURE_NAME || '(H_TX'||l_min_colnum||'(I),NULL, ''' || ATTRS.ATTRIBUTE_NAME || ''',''PARTY_SITES'',''STAGE'')';
6267 ELSE
6268 l_forall_list(ATTRS.COLNUM) := ATTRS.PROCEDURE_NAME || '(H_TX'||l_min_colnum||'(I),NULL, ''' || ATTRS.ATTRIBUTE_NAME || ''',''PARTY_SITES'')';
6269 END IF;
6270 ELSE
6271 l_mincol_list(ATTRS.COLNUM) := 'Y';
6272 END IF;
6273
6274 IF ATTRS.CUSTOM_ATTRIBUTE_PROCEDURE IS NULL THEN
6275 IF l_mincol_list(ATTRS.COLNUM) = 'Y' THEN
6276 IF ATTRS.SOURCE_TABLE='HZ_LOCATIONS' THEN
6277 l_select(idx) := 'l.'||ATTRS.ATTRIBUTE_NAME;
6278 ELSIF ATTRS.SOURCE_TABLE='HZ_PARTY_SITES' THEN
6279 l_select(idx) := 'ps.'||ATTRS.ATTRIBUTE_NAME;
6280 END IF;
6281 ELSE
6282 l_select(idx) := 'N';
6283 END IF;
6284
6285 l_custom_list(ATTRS.COLNUM) := 'N';
6286 ELSE
6287 l_select(idx) := 'N';
6288 l_custom_list(ATTRS.COLNUM) := 'N';
6289 IF ATTRS.ATTRIBUTE_NAME = 'ADDRESS' THEN
6290 IF l_mincol_list(ATTRS.COLNUM) = 'Y' THEN
6291 l_select(idx) := 'rtrim(l.address1 || '' '' || l.address2 || '' '' || l.address3 || '' '' || l.address4)';
6292 END IF;
6293 ELSE
6294 IF l_mincol_list(ATTRS.COLNUM) = 'Y' THEN
6295 IF has_context(ATTRS.custom_attribute_procedure) THEN
6296 l_custom_list(ATTRS.COLNUM) := ATTRS.custom_attribute_procedure || '(H_PARTY_SITE_ID(I),''PARTY_SITES'','''||ATTRS.ATTRIBUTE_NAME|| ''', ''STAGE'')';
6297 ELSE
6298 l_custom_list(ATTRS.COLNUM) := ATTRS.custom_attribute_procedure || '(H_PARTY_SITE_ID(I), ''PARTY_SITES'','''||ATTRS.ATTRIBUTE_NAME|| ''')';
6299 END IF;
6300 END IF;
6301 END IF;
6302 END IF;
6303 idx := idx+1;
6304
6305 -- VJN ADDED CODE FOR TRACKING CONDITION ATTRIBUTES AT THIS ENTITY LEVEL
6306 IF HZ_WORD_CONDITIONS_PKG.is_a_cond_attrib( ATTRS.attribute_id)
6307 THEN
6308 l_cond_attrib_list(ATTRS.COLNUM) := ATTRS.attribute_id ;
6309 END IF;
6310
6311 END LOOP;
6312
6313 IF cur_col_num<=255 THEN--bug 5977628
6314 FOR I in cur_col_num..255 LOOP
6315 l_mincol_list(I) := 'N';
6316 l_forall_list(I) := 'N';
6317 l_custom_list(I) := 'N';
6318 END LOOP;
6319 END IF;
6320
6321 l(' OPEN x_sync_party_site_cur FOR ' );
6322 l(' SELECT /*+ ORDERED USE_NL(ps l) */ ');
6323 l(' ps.PARTY_SITE_ID ');
6324 l(' ,ps.PARTY_ID ');
6325 l(' ,NULL ');
6326 l(' ,ps.STATUS ');
6327 l(' ,ps.ROWID ');
6328
6329 FOR I in 1..l_select.COUNT LOOP
6330 IF l_select(I) <> 'N' THEN
6331 l(' ,' || l_select(I));
6332 END IF;
6333 END LOOP;
6334
6335 l(' FROM hz_locations l, hz_party_sites ps, ');
6336 l(' hz_imp_addresses_sg addr_sg, hz_imp_batch_details bd ');
6337 l(' WHERE l.request_id = bd.main_conc_req_id ');
6338 l(' AND bd.batch_id = addr_sg.batch_id ');
6339 l(' AND l.location_id = ps.location_id ');
6340 l(' AND addr_sg.batch_id = p_batch_id ');
6341 l(' AND addr_sg.batch_mode_flag = p_batch_mode_flag ');
6342 l(' AND addr_sg.party_orig_system = p_os ');
6343 l(' AND addr_sg.party_site_id = ps.party_site_id ');
6344 l(' AND addr_sg.action_flag = p_operation ');
6345 l(' AND addr_sg.party_orig_system_reference BETWEEN p_from_osr AND p_to_osr ');
6346 l(' AND (ps.status IS NULL OR ps.status = ''A'' OR ps.status = ''I''); ');
6347 l('');
6348 l(' END open_bulk_imp_sync_psite_cur; ');
6349 l('');
6350 END gen_bulk_imp_sync_psite_query;
6351
6352
6353 -- REPURI. Proccedure to generate the code (into HZ_STAGE_MAP_TRANSFORM)
6354 -- for OPEN_SYNC_PARTY_SITE_CURSOR and SYNC_ALL_PARTY_SITES Procedures.
6355
6356 PROCEDURE generate_sync_psite_query_proc IS
6357 cur_col_num NUMBER := 1;
6358
6359 TYPE coltab IS TABLE OF VARCHAR2(2000) INDEX BY BINARY_INTEGER;
6360
6361 l_select coltab;
6362 FIRST BOOLEAN := FALSE;
6363
6364 l_forall_list coltab;
6365 l_custom_list coltab;
6366 l_mincol_list coltab;
6370
6367 l_min_colnum NUMBER;
6368 idx NUMBER :=1;
6369 is_first boolean := true;
6371 -- VJN Introduced for conditional word replacements
6372 l_cond_attrib_list coltab ;
6373 l_idx number ;
6374
6375 BEGIN
6376
6377 l('');
6378 l(' PROCEDURE open_sync_party_site_cursor ( ');
6379 l(' p_operation IN VARCHAR2,');
6380 l(' p_from_rec IN VARCHAR2,');
6381 l(' p_to_rec IN VARCHAR2,');
6382 l(' x_sync_party_site_cur IN OUT HZ_DQM_SYNC.SyncCurTyp) IS ');
6383 l(' BEGIN');
6384
6385 FOR ATTRS IN (SELECT a.ATTRIBUTE_ID,
6386 a.ATTRIBUTE_NAME,
6387 a.SOURCE_TABLE,
6388 a.CUSTOM_ATTRIBUTE_PROCEDURE,
6389 f.PROCEDURE_NAME,
6390 f.STAGED_ATTRIBUTE_COLUMN,
6391 to_number(substrb(STAGED_ATTRIBUTE_COLUMN, 3)) COLNUM
6392 FROM HZ_TRANS_ATTRIBUTES_VL a, HZ_TRANS_FUNCTIONS_VL f
6393 WHERE ENTITY_NAME = 'PARTY_SITES'
6394 AND nvl(f.ACTIVE_FLAG,'Y') = 'Y'
6395 AND f.ATTRIBUTE_ID = a.ATTRIBUTE_ID
6396 ORDER BY COLNUM) LOOP
6397 IF cur_col_num<ATTRS.COLNUM THEN
6398 FOR I in cur_col_num..ATTRS.COLNUM-1 LOOP
6399 l_mincol_list(I) := 'N';
6400 l_forall_list(I) := 'N';
6401 l_custom_list(I) := 'N';
6402 END LOOP;
6403 END IF;
6404 cur_col_num:=ATTRS.COLNUM+1;
6405 IF has_trx_context(ATTRS.PROCEDURE_NAME) THEN
6406 l_forall_list(ATTRS.COLNUM) := ATTRS.PROCEDURE_NAME || '(H_TX'||ATTRS.COLNUM||'(I),NULL, ''' || ATTRS.ATTRIBUTE_NAME || ''',''PARTY_SITES'',''STAGE'')';
6407 ELSE
6408 l_forall_list(ATTRS.COLNUM) := ATTRS.PROCEDURE_NAME || '(H_TX'||ATTRS.COLNUM||'(I),NULL, ''' || ATTRS.ATTRIBUTE_NAME || ''',''PARTY_SITES'')';
6409 END IF;
6410
6411 SELECT min(to_number(substrb(STAGED_ATTRIBUTE_COLUMN, 3))) INTO l_min_colnum
6412 FROM HZ_TRANS_ATTRIBUTES_VL a, HZ_TRANS_FUNCTIONS_VL f
6413 WHERE ENTITY_NAME = 'PARTY_SITES'
6414 AND nvl(f.ACTIVE_FLAG,'Y') = 'Y'
6415 AND f.ATTRIBUTE_ID = a.ATTRIBUTE_ID
6416 AND a.ATTRIBUTE_NAME=ATTRS.ATTRIBUTE_NAME;
6417
6418 IF ATTRS.colnum>l_min_colnum THEN
6419 l_mincol_list(ATTRS.COLNUM) := 'N';
6420 IF has_trx_context(ATTRS.PROCEDURE_NAME) THEN
6421 l_forall_list(ATTRS.COLNUM) := ATTRS.PROCEDURE_NAME || '(H_TX'||l_min_colnum||'(I),NULL, ''' || ATTRS.ATTRIBUTE_NAME || ''',''PARTY_SITES'',''STAGE'')';
6422 ELSE
6423 l_forall_list(ATTRS.COLNUM) := ATTRS.PROCEDURE_NAME || '(H_TX'||l_min_colnum||'(I),NULL, ''' || ATTRS.ATTRIBUTE_NAME || ''',''PARTY_SITES'')';
6424 END IF;
6425 ELSE
6426 l_mincol_list(ATTRS.COLNUM) := 'Y';
6427 END IF;
6428
6429 IF ATTRS.CUSTOM_ATTRIBUTE_PROCEDURE IS NULL THEN
6430 IF l_mincol_list(ATTRS.COLNUM) = 'Y' THEN
6431 IF ATTRS.SOURCE_TABLE='HZ_LOCATIONS' THEN
6432 l_select(idx) := 'l.'||ATTRS.ATTRIBUTE_NAME;
6433 ELSIF ATTRS.SOURCE_TABLE='HZ_PARTY_SITES' THEN
6434 l_select(idx) := 'ps.'||ATTRS.ATTRIBUTE_NAME;
6435 END IF;
6436 ELSE
6437 l_select(idx) := 'N';
6438 END IF;
6439
6440 l_custom_list(ATTRS.COLNUM) := 'N';
6441 ELSE
6442 l_select(idx) := 'N';
6443 l_custom_list(ATTRS.COLNUM) := 'N';
6444 IF ATTRS.ATTRIBUTE_NAME = 'ADDRESS' THEN
6445 IF l_mincol_list(ATTRS.COLNUM) = 'Y' THEN
6446 l_select(idx) := 'rtrim(l.address1 || '' '' || l.address2 || '' '' || l.address3 || '' '' || l.address4)';
6447 END IF;
6448 ELSE
6449 IF l_mincol_list(ATTRS.COLNUM) = 'Y' THEN
6450 IF has_context(ATTRS.custom_attribute_procedure) THEN
6451 l_custom_list(ATTRS.COLNUM) := ATTRS.custom_attribute_procedure || '(H_PARTY_SITE_ID(I),''PARTY_SITES'','''||ATTRS.ATTRIBUTE_NAME|| ''', ''STAGE'')';
6452 ELSE
6453 l_custom_list(ATTRS.COLNUM) := ATTRS.custom_attribute_procedure || '(H_PARTY_SITE_ID(I), ''PARTY_SITES'','''||ATTRS.ATTRIBUTE_NAME|| ''')';
6454 END IF;
6455 END IF;
6456 END IF;
6457 END IF;
6458 idx := idx+1;
6459
6460 -- VJN ADDED CODE FOR TRACKING CONDITION ATTRIBUTES AT THIS ENTITY LEVEL
6461 IF HZ_WORD_CONDITIONS_PKG.is_a_cond_attrib( ATTRS.attribute_id)
6462 THEN
6463 l_cond_attrib_list(ATTRS.COLNUM) := ATTRS.attribute_id ;
6464 END IF;
6465
6466 END LOOP;
6467
6468 IF cur_col_num<=255 THEN--bug 5977628
6469 FOR I in cur_col_num..255 LOOP
6470 l_mincol_list(I) := 'N';
6471 l_forall_list(I) := 'N';
6472 l_custom_list(I) := 'N';
6473 END LOOP;
6474 END IF;
6475
6476 l(' OPEN x_sync_party_site_cur FOR ' );
6477 l(' SELECT /*+ ORDERED USE_NL(ps l) */ ');
6478 l(' ps.PARTY_SITE_ID ');
6479 l(' ,dsi.party_id ');
6480 l(' ,dsi.org_contact_id ');
6481 l(' ,ps.status ');
6482 l(' ,dsi.ROWID ');
6483
6484 FOR I in 1..l_select.COUNT LOOP
6485 IF l_select(I) <> 'N' THEN
6486 l(' ,' || l_select(I));
6487 END IF;
6488 END LOOP;
6489
6490 l(' FROM HZ_DQM_SYNC_INTERFACE dsi, HZ_PARTY_SITES ps, HZ_LOCATIONS l');
6491 l(' WHERE dsi.record_id = ps.party_site_id ');
6492 l(' AND dsi.entity = ''PARTY_SITES'' ');
6496 l(' AND dsi.sync_interface_num <= p_to_rec ');
6493 l(' AND dsi.operation = p_operation ');
6494 l(' AND dsi.staged_flag = ''N'' ');
6495 l(' AND dsi.sync_interface_num >= p_from_rec ');
6497 l(' AND (ps.status is null OR ps.status = ''A'' OR ps.status = ''I'') ');
6498 l(' AND ps.location_id = l.location_id; ');
6499 l(' END; ');
6500
6501 l('');
6502 l(' PROCEDURE sync_all_party_sites ( ');
6503 l(' p_operation IN VARCHAR2, ');
6504 l(' p_bulk_sync_type IN VARCHAR2, ');
6505 l(' p_sync_all_party_site_cur IN HZ_DQM_SYNC.SyncCurTyp) IS ');
6506 l('');
6507 l(' l_limit NUMBER := ' || g_batch_size || ';');
6508 l(' l_last_fetch BOOLEAN := FALSE;');
6509 l(' l_sql_errm VARCHAR2(2000); ');
6510 l(' l_st NUMBER; ');
6511 l(' l_en NUMBER; ');
6512 l(' l_err_index NUMBER; ');
6513 l(' l_err_count NUMBER; ');
6514 l('');
6515 l(' bulk_errors EXCEPTION; ');
6516 l(' PRAGMA EXCEPTION_INIT(bulk_errors, -24381); ');
6517 l('');
6518 l(' BEGIN');
6519 l(' log (''Begin Synchronizing Party Sites''); ');
6520 l(' LOOP');
6521 l(' log (''Bulk Collecting Party Sites Data...'',FALSE); ');
6522 l(' FETCH p_sync_all_party_site_cur BULK COLLECT INTO');
6523 l(' H_PARTY_SITE_ID');
6524 l(' ,H_PS_PARTY_ID');
6525 l(' ,H_PS_ORG_CONTACT_ID');
6526 l(' ,H_STATUS');
6527 l(' ,H_ROWID');
6528
6529 FOR I IN 1..255 LOOP
6530 IF l_forall_list(I) <> 'N' AND l_mincol_list(I) = 'Y' AND
6531 l_custom_list(I) = 'N' THEN
6532 l(' ,H_TX'||I);
6533 END IF;
6534 END LOOP;
6535
6536 l(' LIMIT l_limit;');
6537 l(' log (''Done''); ');
6538 l('');
6539 l(' IF p_sync_all_party_site_cur%NOTFOUND THEN');
6540 l(' l_last_fetch:=TRUE;');
6541 l(' END IF;');
6542 l('');
6543 l(' IF H_PARTY_SITE_ID.COUNT=0 AND l_last_fetch THEN');
6544 l(' EXIT;');
6545 l(' END IF;');
6546 l('');
6547 l(' log (''Synchronizing for ''||H_PARTY_SITE_ID.COUNT||'' Party Sites''); ');
6548 l(' log (''Populating Party Sites Transformation Functions into Arrays...'',FALSE); ');
6549 l(' FOR I in H_PARTY_SITE_ID.FIRST..H_PARTY_SITE_ID.LAST LOOP');
6550
6551 -- VJN INTRODUCED FOR CONDITIONAL REPLACEMENTS
6552 -- CYCLE THROUGH THE CONDITON LIST AND GENERATE THE CODE
6553 -- FOR POPULATING THE GLOBAL CONDITION RECORD
6554
6555 l_idx := l_cond_attrib_list.FIRST ;
6556 IF l_idx IS NOT NULL
6557 THEN
6558 l(' ---- SETTING GLOBAL CONDITION RECORD AT THE PARTY SITE LEVEL ----');
6559 l('');
6560 END IF ;
6561
6562 WHILE l_cond_attrib_list.EXISTS(l_idx)
6563 LOOP
6564 l(' HZ_WORD_CONDITIONS_PKG.set_gbl_condition_rec ('||l_cond_attrib_list(l_idx)||','||'H_TX'||l_idx||'(I));');
6565 l_idx := l_idx+1;
6566 END LOOP;
6567
6568 l('');
6569
6570 FOR I IN 1..255 LOOP
6571 IF l_forall_list(I) <> 'N' THEN
6572 IF l_custom_list(I) <> 'N' AND l_mincol_list(I) = 'Y' THEN
6573 l(' H_TX'||I||'(I):='||l_custom_list(I)||';');
6574 END IF;
6575 END IF;
6576 END LOOP;
6577 FOR I IN 1..255 LOOP
6578 IF l_forall_list(I) <> 'N' THEN
6579 IF l_mincol_list(I) <> 'Y' THEN
6580 l(' H_TX'||I||'(I):='||l_forall_list(I)||';');
6581 END IF;
6582 END IF;
6583 END LOOP;
6584 FOR I IN 1..255 LOOP
6585 IF l_forall_list(I) <> 'N' THEN
6586 IF l_mincol_list(I) = 'Y' THEN
6587 l(' H_TX'||I||'(I):='||l_forall_list(I)||';');
6588 END IF;
6589 END IF;
6590 END LOOP;
6591 l(' END LOOP;');
6592 l(' log (''Done''); ');
6593 l('');
6594 l(' l_st := 1; ');
6595 l(' l_en := H_PARTY_SITE_ID.COUNT; ');
6596 l('');
6597 l(' IF p_operation = ''C'' THEN ');
6598 l(' BEGIN ');
6599 l(' log (''Inserting Data into HZ_STAGED_PARTY_SITES...'',FALSE); ');
6600 l(' FORALL I in l_st..l_en SAVE EXCEPTIONS ');
6601 l(' INSERT INTO HZ_STAGED_PARTY_SITES (');
6602 l(' PARTY_SITE_ID');
6603 l(' ,PARTY_ID');
6604 l(' ,ORG_CONTACT_ID');
6605 l(' ,STATUS_FLAG'); --Propagating Bug 4299785 fix to sync modifications
6606
6607 FOR I IN 1..255 LOOP
6608 IF l_forall_list(I) <> 'N' THEN
6609 l(' ,TX'||I);
6610 END IF;
6611 END LOOP;
6612
6613 l(' ) VALUES (');
6614 l(' H_PARTY_SITE_ID(I)');
6615 l(' ,H_PS_PARTY_ID(I)');
6616 l(' ,H_PS_ORG_CONTACT_ID(I)');
6617 l(' ,H_STATUS(I)'); --Propagating Bug 4299785 fix to sync modifications
6618
6619 FOR I IN 1..255 LOOP
6620 IF l_forall_list(I) <> 'N' THEN
6621 l(' ,decode(H_TX'||I||'(I),null,H_TX'||I||'(I),H_TX'||I||'(I)||'' '')');
6622 END IF;
6623 END LOOP;
6624
6625 l(' );');
6626 l(' log (''Done''); ');
6627 l(' EXCEPTION WHEN bulk_errors THEN ');
6628 l(' l_err_count := SQL%BULK_EXCEPTIONS.COUNT; ');
6629 l(' FOR indx IN 1..l_err_count LOOP ');
6630 l(' l_err_index := SQL%BULK_EXCEPTIONS(indx).ERROR_INDEX; ');
6634 l(' IF (instr(l_sql_errm,''ORA-00001'')>0) THEN ');
6631 l(' l_sql_errm := sqlerrm(-SQL%BULK_EXCEPTIONS(indx).ERROR_CODE); ');
6632 -- SCHITRAP: Bug:5357970 - Error code is a number. Oracle error for ''DUP_VAL_ON_INDEX'' is ORA-00001
6633 --l(' IF (SQL%BULK_EXCEPTIONS(indx).ERROR_CODE) = ''DUP_VAL_ON_INDEX'' THEN ');
6635 l(' log (''Exception DUP_VAL_ON_INDEX occured while inserting Party Site with PARTY_SITE_ID - ''||H_PARTY_SITE_ID(l_err_index)); ');
6636 l(' DELETE FROM HZ_DQM_SYNC_INTERFACE WHERE ENTITY=''PARTY_SITES'' AND OPERATION=''C'' AND RECORD_ID=H_PARTY_SITE_ID(l_err_index); ');
6637 l(' ELSE ');
6638 l(' IF p_bulk_sync_type = ''DQM_SYNC'' THEN ');
6639 l(' UPDATE hz_dqm_sync_interface ');
6640 l(' SET error_data = l_sql_errm ');
6641 l(' ,staged_flag = decode (error_data, NULL, ''N'', ''E'') ');
6642 l(' WHERE rowid = H_ROWID(l_err_index); ');
6643 l(' ELSIF p_bulk_sync_type = ''IMPORT_SYNC'' THEN ');
6644 l(' -- Insert the Error Record into HZ_DQM_SYNC_INTERFACE table ');
6645 l(' insert_dqm_sync_error_rec(H_PS_PARTY_ID(l_err_index), H_PARTY_SITE_ID(l_err_index), NULL, H_PS_ORG_CONTACT_ID(l_err_index), ''PARTY_SITES'', p_operation, ''E'', ''N'', l_sql_errm); ');
6646 l(' END IF; ');
6647 l(' END IF; ');
6648 l(' END LOOP; ');
6649 l(' END; ');
6650 l(' ELSIF p_operation = ''U'' THEN ');
6651 l(' BEGIN ');
6652 l(' log (''Updating Data in HZ_STAGED_PARTY_SITES...'',FALSE); ');
6653 l(' FORALL I in l_st..l_en SAVE EXCEPTIONS ');
6654 l(' UPDATE HZ_STAGED_PARTY_SITES SET ');
6655 l(' concat_col = concat_col');
6656 l(' ,status_flag = H_STATUS(I)'); --Propagating Bug 4299785 fix to sync modifications
6657
6658 FOR I IN 1..255 LOOP
6659 IF l_forall_list(I) <> 'N' THEN
6660 IF (is_first) THEN
6661 is_first := false;
6662 l(' ,TX'||I||'=decode(H_TX'||I||'(I),null,H_TX'||I||'(I),H_TX'||I||'(I)||'' '')');
6663 ELSE
6664 l(' ,TX'||I||'=decode(H_TX'||I||'(I),null,H_TX'||I||'(I),H_TX'||I||'(I)||'' '')');
6665 END IF;
6666 END IF;
6667 END LOOP;
6668 l(' WHERE PARTY_SITE_ID=H_PARTY_SITE_ID(I);');
6669 l(' log (''Done''); ');
6670 l(' EXCEPTION WHEN bulk_errors THEN ');
6671 l(' l_err_count := SQL%BULK_EXCEPTIONS.COUNT; ');
6672 l(' FOR indx IN 1..l_err_count LOOP ');
6673 l(' l_err_index := SQL%BULK_EXCEPTIONS(indx).ERROR_INDEX; ');
6674 l(' l_sql_errm := sqlerrm(-SQL%BULK_EXCEPTIONS(indx).ERROR_CODE); ');
6675 -- SCHITRAP: Bug:5357970 - Error code is a number. Oracle error for ''DUP_VAL_ON_INDEX'' is ORA-00001
6676 --l(' IF (SQL%BULK_EXCEPTIONS(indx).ERROR_CODE) = ''DUP_VAL_ON_INDEX'' THEN ');
6677 l(' IF (instr(l_sql_errm,''ORA-00001'')>0) THEN ');
6678 l(' log (''Exception DUP_VAL_ON_INDEX occured while inserting Party Site with PARTY_SITE_ID - ''||H_PARTY_SITE_ID(l_err_index)); ');
6679 l(' DELETE FROM HZ_DQM_SYNC_INTERFACE WHERE ENTITY=''PARTY_SITES'' AND OPERATION=''U'' AND RECORD_ID=H_PARTY_SITE_ID(l_err_index); ');
6680 l(' ELSE ');
6681 l(' IF p_bulk_sync_type = ''DQM_SYNC'' THEN ');
6682 l(' UPDATE hz_dqm_sync_interface ');
6683 l(' SET error_data = l_sql_errm ');
6684 l(' ,staged_flag = decode (error_data, NULL, ''N'', ''E'') ');
6685 l(' WHERE rowid = H_ROWID(l_err_index); ');
6686 l(' ELSIF p_bulk_sync_type = ''IMPORT_SYNC'' THEN ');
6687 l(' -- Insert the Error Record into HZ_DQM_SYNC_INTERFACE table ');
6688 l(' insert_dqm_sync_error_rec(H_PS_PARTY_ID(l_err_index), H_PARTY_SITE_ID(l_err_index), NULL, H_PS_ORG_CONTACT_ID(l_err_index), ''PARTY_SITES'', p_operation, ''E'', ''N'', l_sql_errm); ');
6689 l(' END IF; ');
6690 l(' END IF; ');
6691 l(' END LOOP; ');
6692 l(' END; ');
6693 l(' END IF;');
6694 l('');
6695 l(' IF l_last_fetch THEN');
6696 l(' -- Update HZ_STAGED_PARTIES, if corresponding child entity records ');
6697 l(' -- PARTY_SITES (in this case), have been inserted/updated ');
6698 l('');
6699 l(' log (''Updating D_PS column to SYNC in HZ_STAGED_PARTIES table for all related records...'',FALSE); ');
6700 l(' --Fix for bug 5048604, to update concat_col during update of denorm column ');
6701 l(' FORALL I IN H_PARTY_SITE_ID.FIRST..H_PARTY_SITE_ID.LAST ');
6702 l(' UPDATE HZ_STAGED_PARTIES set ');
6703 l(' D_PS = ''SYNC'' ');
6704 l(' ,CONCAT_COL = CONCAT_COL ');
6705 l(' WHERE PARTY_ID = H_PS_PARTY_ID(I); ');
6706 l(' log (''Done''); ');
6707 l('');
6708 l(' -- REPURI. Bug 4884742. ');
6709 l(' -- Bulk Insert of Import Party Sites into Shadow Sync Interface table ');
6710 l(' -- if Shadow Staging has already run and completed successfully ');
6711 l(' IF ((p_bulk_sync_type = ''IMPORT_SYNC'') AND ');
6712 l(' (HZ_DQM_SYNC.is_shadow_staging_complete)) THEN ');
6713 l(' BEGIN ');
6714 l(' -- REPURI. Bug 4968126. ');
6715 l(' -- Using the Merge instead of Insert statement ');
6719 l(' MERGE INTO hz_dqm_sh_sync_interface S ');
6716 l(' -- so that duplicate records dont get inserted. ');
6717 l(' log (''Merging data into HZ_DQM_SH_SYNC_INTERFACE...'',FALSE); ');
6718 l(' FORALL I in l_st..l_en ');
6720 l(' USING ( ');
6721 l(' SELECT ');
6722 l(' H_PS_PARTY_ID(I) AS party_id ');
6723 l(' ,H_PARTY_SITE_ID(I) AS record_id ');
6724 l(' ,H_PS_ORG_CONTACT_ID(I) AS org_contact_id ');
6725 l(' FROM dual ) T ');
6726 l(' ON (S.entity = ''PARTY_SITES'' AND ');
6727 l(' S.party_id = T.party_id AND ');
6728 l(' S.record_id = T.record_id AND ');
6729 l(' NVL(S.org_contact_id, -99) = NVL(T.org_contact_id, -99) AND ');
6730 l(' S.staged_flag <> ''E'') ');
6731 l(' WHEN NOT MATCHED THEN ');
6732 l(' INSERT ( ');
6733 l(' PARTY_ID, ');
6734 l(' RECORD_ID, ');
6735 l(' PARTY_SITE_ID, ');
6736 l(' ORG_CONTACT_ID, ');
6737 l(' ENTITY, ');
6738 l(' OPERATION, ');
6739 l(' STAGED_FLAG, ');
6740 l(' REALTIME_SYNC_FLAG, ');
6741 l(' CREATED_BY, ');
6742 l(' CREATION_DATE, ');
6743 l(' LAST_UPDATE_LOGIN, ');
6744 l(' LAST_UPDATE_DATE, ');
6745 l(' LAST_UPDATED_BY, ');
6746 l(' SYNC_INTERFACE_NUM ');
6747 l(' ) VALUES ( ');
6748 l(' H_PS_PARTY_ID(I), ');
6749 l(' H_PARTY_SITE_ID(I), ');
6750 l(' NULL, ');
6751 l(' H_PS_ORG_CONTACT_ID(I), ');
6752 l(' ''PARTY_SITES'', ');
6753 l(' p_operation, ');
6754 l(' ''N'', ');
6755 l(' ''N'', ');
6756 l(' hz_utility_pub.created_by, ');
6757 l(' hz_utility_pub.creation_date, ');
6758 l(' hz_utility_pub.last_update_login, ');
6759 l(' hz_utility_pub.last_update_date, ');
6760 l(' hz_utility_pub.user_id, ');
6761 l(' HZ_DQM_SH_SYNC_INTERFACE_S.nextval ');
6762 l(' ); ');
6763 l(' log (''Done''); ');
6764 l(' EXCEPTION WHEN OTHERS THEN ');
6765 l(' log (''Exception occured while inserting data into HZ_DQM_SH_SYNC_INTERFACE Table''); ');
6766 l(' log (''Eror Message is - ''|| sqlerrm); ');
6767 l(' END; ');
6768 l(' END IF; ');
6769 l('');
6770 l(' FND_CONCURRENT.AF_Commit;');
6771 l(' EXIT;');
6772 l(' END IF;');
6773 l('');
6774 l(' FND_CONCURRENT.AF_Commit;');
6775 l('');
6776 l(' END LOOP;');
6777 l(' log (''End Synchronizing Party Sites''); ');
6778 l(' END;');
6779
6780 END;
6781
6782 PROCEDURE generate_party_site_query_proc IS
6783 cur_col_num NUMBER := 1;
6784
6785 TYPE coltab IS TABLE OF VARCHAR2(2000) INDEX BY BINARY_INTEGER;
6786
6787 l_select coltab;
6788 FIRST BOOLEAN := FALSE;
6789
6790 l_forall_list coltab;
6791 l_custom_list coltab;
6792 l_mincol_list coltab;
6793 l_min_colnum NUMBER;
6794 idx NUMBER :=1;
6795 is_first boolean := true;
6796
6797 -- VJN Introduced for conditional word replacements
6798 l_cond_attrib_list coltab ;
6799 l_idx number ;
6800 l_attr_name varchar2(2000); --Bug No: 4279469
6801 l_ps_attr_name varchar2(2000); --Bug No: 4279469
6802 l_loc_attr_name varchar2(2000); --Bug No: 4279469
6803 BEGIN
6804 l('');
6805 l(' PROCEDURE insert_stage_party_sites IS ');
6806 l(' l_limit NUMBER := ' || g_batch_size || ';');
6807 l(' l_last_fetch BOOLEAN := FALSE;');
6808 l(' l_denorm VARCHAR2(2000);');
6809 l(' l_st number; ');
6810 l(' l_en number; ');
6811
6812 l(' ');
6813
6814 FOR ATTRS IN (SELECT a.ATTRIBUTE_ID,
6815 a.ATTRIBUTE_NAME,
6816 a.SOURCE_TABLE,
6817 a.CUSTOM_ATTRIBUTE_PROCEDURE,
6818 f.PROCEDURE_NAME,
6819 f.STAGED_ATTRIBUTE_COLUMN,
6820 to_number(substrb(STAGED_ATTRIBUTE_COLUMN, 3)) COLNUM,
6821 nvl(lkp.tag,'C') column_data_type
6822 FROM HZ_TRANS_ATTRIBUTES_VL a, HZ_TRANS_FUNCTIONS_VL f,FND_LOOKUP_VALUES_VL lkp --Bug No: 4279469
6823 WHERE ENTITY_NAME = 'PARTY_SITES'
6824 AND nvl(f.ACTIVE_FLAG,'Y') = 'Y'
6825 AND f.ATTRIBUTE_ID = a.ATTRIBUTE_ID
6826 AND lkp.lookup_type = 'PARTY_SITE_LOGICAL_ATTRIB_LIST'
6827 and lkp.lookup_code = a.ATTRIBUTE_NAME
6828 ORDER BY COLNUM) LOOP
6829 IF cur_col_num<ATTRS.COLNUM THEN
6830 FOR I in cur_col_num..ATTRS.COLNUM-1 LOOP
6831 l_mincol_list(I) := 'N';
6832 l_forall_list(I) := 'N';
6833 l_custom_list(I) := 'N';
6834 END LOOP;
6835 END IF;
6836 cur_col_num:=ATTRS.COLNUM+1;
6837 IF has_trx_context(ATTRS.PROCEDURE_NAME) THEN
6841 END IF;
6838 l_forall_list(ATTRS.COLNUM) := ATTRS.PROCEDURE_NAME || '(H_TX'||ATTRS.COLNUM||'(I),NULL, ''' || ATTRS.ATTRIBUTE_NAME || ''',''PARTY_SITES'',''STAGE'')';
6839 ELSE
6840 l_forall_list(ATTRS.COLNUM) := ATTRS.PROCEDURE_NAME || '(H_TX'||ATTRS.COLNUM||'(I),NULL, ''' || ATTRS.ATTRIBUTE_NAME || ''',''PARTY_SITES'')';
6842
6843 SELECT min(to_number(substrb(STAGED_ATTRIBUTE_COLUMN, 3))) INTO l_min_colnum
6844 FROM HZ_TRANS_ATTRIBUTES_VL a, HZ_TRANS_FUNCTIONS_VL f
6845 WHERE ENTITY_NAME = 'PARTY_SITES'
6846 AND nvl(f.ACTIVE_FLAG,'Y') = 'Y'
6847 AND f.ATTRIBUTE_ID = a.ATTRIBUTE_ID
6848 AND a.ATTRIBUTE_NAME=ATTRS.ATTRIBUTE_NAME;
6849
6850 IF ATTRS.colnum>l_min_colnum THEN
6851 l_mincol_list(ATTRS.COLNUM) := 'N';
6852 IF has_trx_context(ATTRS.PROCEDURE_NAME) THEN
6853 l_forall_list(ATTRS.COLNUM) := ATTRS.PROCEDURE_NAME || '(H_TX'||l_min_colnum||'(I),NULL, ''' || ATTRS.ATTRIBUTE_NAME || ''',''PARTY_SITES'',''STAGE'')';
6854 ELSE
6855 l_forall_list(ATTRS.COLNUM) := ATTRS.PROCEDURE_NAME || '(H_TX'||l_min_colnum||'(I),NULL, ''' || ATTRS.ATTRIBUTE_NAME || ''',''PARTY_SITES'')';
6856 END IF;
6857 ELSE
6858 l_mincol_list(ATTRS.COLNUM) := 'Y';
6859 END IF;
6860
6861 IF ATTRS.CUSTOM_ATTRIBUTE_PROCEDURE IS NULL THEN
6862 IF l_mincol_list(ATTRS.COLNUM) = 'Y' THEN
6863 -----Start of Bug No: 4279469----------
6864 l_attr_name := ATTRS.ATTRIBUTE_NAME;
6865 IF(ATTRS.column_data_type ='D') THEN
6866 l_ps_attr_name := 'TO_CHAR(ps.'||l_attr_name||',''DD-MON-YYYY'') '||l_attr_name;
6867 l_loc_attr_name := 'TO_CHAR(l.'||l_attr_name||',''DD-MON-YYYY'') '||l_attr_name;
6868 ELSE
6869 l_ps_attr_name := 'ps.'||l_attr_name;
6870 l_loc_attr_name := 'l.'||l_attr_name;
6871 END IF;
6872 -----End of Bug No: 4279469------------
6873 IF ATTRS.SOURCE_TABLE='HZ_LOCATIONS' THEN
6874 l_select(idx) := l_loc_attr_name;
6875 ELSIF ATTRS.SOURCE_TABLE='HZ_PARTY_SITES' THEN
6876 l_select(idx) := l_ps_attr_name;
6877 END IF;
6878 ELSE
6879 l_select(idx) := 'N';
6880 END IF;
6881
6882 l_custom_list(ATTRS.COLNUM) := 'N';
6883 ELSE
6884 l_select(idx) := 'N';
6885 l_custom_list(ATTRS.COLNUM) := 'N';
6886 IF ATTRS.ATTRIBUTE_NAME = 'ADDRESS' THEN
6887 IF l_mincol_list(ATTRS.COLNUM) = 'Y' THEN
6888 l_select(idx) := 'rtrim(l.address1 || '' '' || l.address2 || '' '' || l.address3 || '' '' || l.address4)';
6889 END IF;
6890 ELSE
6891 IF l_mincol_list(ATTRS.COLNUM) = 'Y' THEN
6892 IF has_context(ATTRS.custom_attribute_procedure) THEN
6893 l_custom_list(ATTRS.COLNUM) := ATTRS.custom_attribute_procedure || '(H_PARTY_SITE_ID(I),''PARTY_SITES'','''||ATTRS.ATTRIBUTE_NAME|| ''', ''STAGE'')';
6894 ELSE
6895 l_custom_list(ATTRS.COLNUM) := ATTRS.custom_attribute_procedure || '(H_PARTY_SITE_ID(I), ''PARTY_SITES'','''||ATTRS.ATTRIBUTE_NAME|| ''')';
6896 END IF;
6897 END IF;
6898 END IF;
6899 END IF;
6900 idx := idx+1;
6901
6902 -- VJN ADDED CODE FOR TRACKING CONDITION ATTRIBUTES AT THIS ENTITY LEVEL
6903 IF HZ_WORD_CONDITIONS_PKG.is_a_cond_attrib( ATTRS.attribute_id)
6904 THEN
6905 l_cond_attrib_list(ATTRS.COLNUM) := ATTRS.attribute_id ;
6906 END IF;
6907
6908 END LOOP;
6909
6910 IF cur_col_num<=255 THEN--bug 5977628
6911 FOR I in cur_col_num..255 LOOP
6912 l_mincol_list(I) := 'N';
6913 l_forall_list(I) := 'N';
6914 l_custom_list(I) := 'N';
6915 END LOOP;
6916 END IF;
6917
6918 l(' CURSOR party_site_cur IS');
6919 l(' SELECT /*+ ORDERED USE_NL(ps l) */ ps.PARTY_SITE_ID, g.party_id, g.org_contact_id, g.PARTY_INDEX, ps.status '); --Bug No: 4299785
6920 FOR I in 1..l_select.COUNT LOOP
6921 IF l_select(I) <> 'N' THEN
6922 l(' ,' || l_select(I));
6923 END IF;
6924 END LOOP;
6925
6926 l(' FROM HZ_DQM_STAGE_GT g, HZ_PARTY_SITES ps, HZ_LOCATIONS l');
6927 l(' WHERE ps.PARTY_ID = g.owner_id ');
6928 l(' AND (ps.status is null OR ps.status = ''A'' OR ps.status = ''I'') ');
6929 l(' AND ps.location_id = l.location_id; ');
6930
6931 l(' BEGIN');
6932 l(' OPEN party_site_cur;');
6933 l(' LOOP');
6934 l(' FETCH party_site_cur BULK COLLECT INTO');
6935 l(' H_PARTY_SITE_ID');
6936 l(' ,H_PS_PARTY_ID');
6937 l(' ,H_PS_ORG_CONTACT_ID');
6938 l(' ,H_PARTY_INDEX');
6939 l(' ,H_STATUS'); --Bug No: 4299785
6940
6941 FOR I IN 1..255 LOOP
6942 IF l_forall_list(I) <> 'N' AND l_mincol_list(I) = 'Y' AND
6943 l_custom_list(I) = 'N' THEN
6944 l(' ,H_TX'||I);
6945 END IF;
6946 END LOOP;
6947 l(' LIMIT l_limit;');
6948 l('');
6949 l(' IF party_site_cur%NOTFOUND THEN');
6950 l(' l_last_fetch:=TRUE;');
6951 l(' END IF;');
6952
6953 l(' IF H_PS_PARTY_ID.COUNT=0 AND l_last_fetch THEN');
6954 l(' EXIT;');
6955 l(' END IF;');
6956
6957 l(' FOR I in H_PS_PARTY_ID.FIRST..H_PS_PARTY_ID.LAST LOOP');
6958
6959 -- VJN INTRODUCED FOR CONDITIONAL REPLACEMENTS
6960 -- CYCLE THROUGH THE CONDITON LIST AND GENERATE THE CODE
6964 IF l_idx IS NOT NULL
6961 -- FOR POPULATING THE GLOBAL CONDITION RECORD
6962
6963 l_idx := l_cond_attrib_list.FIRST ;
6965 THEN
6966 l('----------- SETTING GLOBAL CONDITION RECORD AT THE PARTY SITE LEVEL ---------');
6967 END IF ;
6968
6969
6970 l('');
6971
6972
6973 WHILE l_cond_attrib_list.EXISTS(l_idx)
6974 LOOP
6975
6976 l(' HZ_WORD_CONDITIONS_PKG.set_gbl_condition_rec ('||l_cond_attrib_list(l_idx)||','||'H_TX'||l_idx||'(I));');
6977 l_idx := l_idx+1;
6978 END LOOP;
6979
6980
6981 FOR I IN 1..255 LOOP
6982 IF l_forall_list(I) <> 'N' THEN
6983 IF l_custom_list(I) <> 'N' AND l_mincol_list(I) = 'Y' THEN
6984 l(' H_TX'||I||'(I):='||l_custom_list(I)||';');
6985 END IF;
6986 END IF;
6987 END LOOP;
6988 FOR I IN 1..255 LOOP
6989 IF l_forall_list(I) <> 'N' THEN
6990 IF l_mincol_list(I) <> 'Y' THEN
6991 l(' H_TX'||I||'(I):='||l_forall_list(I)||';');
6992 END IF;
6993 END IF;
6994 END LOOP;
6995 FOR I IN 1..255 LOOP
6996 IF l_forall_list(I) <> 'N' THEN
6997 IF l_mincol_list(I) = 'Y' THEN
6998 l(' H_TX'||I||'(I):='||l_forall_list(I)||';');
6999 END IF;
7000 END IF;
7001 END LOOP;
7002
7003 FIRST := TRUE;
7004 FOR ATTRS IN (SELECT a.ATTRIBUTE_ID,
7005 a.ATTRIBUTE_NAME,
7006 a.SOURCE_TABLE,
7007 a.CUSTOM_ATTRIBUTE_PROCEDURE,
7008 f.PROCEDURE_NAME,
7009 f.STAGED_ATTRIBUTE_COLUMN,
7010 to_number(substrb(STAGED_ATTRIBUTE_COLUMN, 3)) COLNUM
7011 FROM HZ_TRANS_ATTRIBUTES_VL a, HZ_TRANS_FUNCTIONS_VL f
7012 WHERE ENTITY_NAME = 'PARTY_SITES'
7013 AND nvl(f.ACTIVE_FLAG,'Y') = 'Y'
7014 AND f.ATTRIBUTE_ID = a.ATTRIBUTE_ID
7015 AND nvl(a.DENORM_FLAG,'N') = 'Y') LOOP
7016 IF FIRST THEN
7017 -- Fix for bug 4872997
7018 -- Wrapping the 'l_denorm' portion of code into a begin-excpetion block
7019 -- and setting the denorm value to 'SYNC' if sqlcode-6502 error occurs
7020 l(' BEGIN ');
7021 l(' l_denorm := H_TX'||ATTRS.COLNUM||'(I)');
7022 FIRST := FALSE;
7023 ELSE
7024 l(' || '' '' || H_TX'||ATTRS.COLNUM||'(I)');
7025 END IF;
7026 END LOOP;
7027 IF NOT FIRST THEN
7028 l(' ;');
7029 l(' IF H_PS_DEN(H_PARTY_INDEX(I)) = ''SYNC'' THEN');
7030 l(' NULL;');
7031 l(' ELSIF lengthb(H_PS_DEN(H_PARTY_INDEX(I)))+lengthb(l_denorm)<2000 THEN');
7032 l(' IF H_PS_DEN(H_PARTY_INDEX(I)) IS NULL OR instrb(H_PS_DEN(H_PARTY_INDEX(I)),l_denorm)=0 THEN');
7033 l(' H_PS_DEN(H_PARTY_INDEX(I)) := H_PS_DEN(H_PARTY_INDEX(I)) || '' '' || l_denorm;');
7034 l(' END IF;');
7035 l(' ELSE');
7036 l(' H_PS_DEN(H_PARTY_INDEX(I)) := ''SYNC'';');
7037 l(' END IF;');
7038 l(' EXCEPTION WHEN OTHERS THEN ');
7039 l(' IF SQLCODE=-6502 THEN');
7040 l(' H_PS_DEN(H_PARTY_INDEX(I)) := ''SYNC'';');
7041 l(' END IF; ');
7042 l(' END; ');
7043 END IF;
7044
7045 l(' END LOOP;');
7046 l(' l_st := 1; ');
7047 l(' l_en := H_PS_PARTY_ID.COUNT; ');
7048 l(' LOOP ');
7049 l(' BEGIN ');
7050 l(' FORALL I in l_st..l_en');
7051 l(' INSERT INTO HZ_STAGED_PARTY_SITES (');
7052 l(' PARTY_SITE_ID');
7053 l(' ,PARTY_ID');
7054 l(' ,ORG_CONTACT_ID');
7055 l(' ,STATUS_FLAG'); --Bug No: 4299785
7056
7057 FOR I IN 1..255 LOOP
7058 IF l_forall_list(I) <> 'N' THEN
7059 l(' , TX'||I);
7060 END IF;
7061 END LOOP;
7062 l(' ) VALUES (');
7063 l(' H_PARTY_SITE_ID(I)');
7064 l(' ,H_PS_PARTY_ID(I)');
7065 l(' ,H_PS_ORG_CONTACT_ID(I)');
7066 l(' ,H_STATUS(I)'); --Bug No: 4299785
7067
7068 FOR I IN 1..255 LOOP
7069 IF l_forall_list(I) <> 'N' THEN
7070 l(' , decode(H_TX'||I||'(I),null,H_TX'||I||'(I),H_TX'||I||'(I)||'' '')');
7071 END IF;
7072 END LOOP;
7073 l(' );');
7074 l(' EXIT; ');
7075 l(' EXCEPTION WHEN OTHERS THEN ');
7076 l(' l_st:= l_st+SQL%ROWCOUNT+1;');
7077 l(' END; ');
7078 l(' END LOOP; ');
7079 l(' FORALL I in H_PS_PARTY_ID.FIRST..H_PS_PARTY_ID.LAST ');
7080 l(' INSERT INTO HZ_DQM_STAGE_GT (PARTY_ID, OWNER_ID, OWNER_TABLE, PARTY_SITE_ID,');
7081 l(' ORG_CONTACT_ID,PARTY_INDEX) VALUES (');
7082 l(' H_PS_PARTY_ID(I),H_PARTY_SITE_ID(I),''HZ_PARTY_SITES'',H_PARTY_SITE_ID(I),');
7083 l(' H_PS_ORG_CONTACT_ID(I),H_PARTY_INDEX(I));');
7084
7085 l(' IF l_last_fetch THEN');
7086 l(' EXIT;');
7087 l(' END IF;');
7088 l(' END LOOP;');
7089 l(' CLOSE party_site_cur;');
7090 l(' END;');
7091
7092 l('');
7093 l(' PROCEDURE sync_single_party_site (');
7094 l(' p_party_site_id NUMBER,');
7098 l(' l_tryupd BOOLEAN;');
7095 l(' p_operation VARCHAR2) IS');
7096 l('');
7097 l(' l_tryins BOOLEAN;');
7099 l(' BEGIN');
7100
7101 l(' SELECT ps.PARTY_SITE_ID, d.party_id, d.org_contact_id, ps.STATUS '); --Bug No: 4299785
7102 FOR I in 1..l_select.COUNT LOOP
7103 IF l_select(I) <> 'N' THEN
7104 l(' ,' || l_select(I));
7105 END IF;
7106 END LOOP;
7107 l(' INTO H_PARTY_SITE_ID(1), H_PARTY_ID(1), H_ORG_CONTACT_ID(1), H_STATUS(1)'); --Bug No: 4299785
7108 FOR I IN 1..255 LOOP
7109 IF l_forall_list(I) <> 'N' AND l_mincol_list(I) = 'Y' AND
7110 l_custom_list(I) = 'N' THEN
7111 l(' , H_TX'||I||'(1)');
7112 END IF;
7113 END LOOP;
7114 l(' FROM HZ_PARTY_SITES ps, HZ_DQM_SYNC_INTERFACE d, HZ_LOCATIONS l ');
7115 l(' WHERE d.ENTITY=''PARTY_SITES'' ');
7116 l(' AND ps.party_site_id = p_party_site_id');
7117 l(' AND d.record_id = ps.party_site_id ');
7118 l(' AND ps.location_id = l.location_id ');
7119 l(' AND (ps.status is null OR ps.status = ''A'' OR ps.status = ''I'') ');
7120 l(' AND ROWNUM=1;');
7121
7122 -- VJN INTRODUCED CODE FOR GENERATING THE POPULATION
7123 -- OF THE GLOBAL CONDITION RECORD
7124
7125 l_idx := l_cond_attrib_list.FIRST ;
7126 IF l_idx IS NOT NULL
7127 THEN
7128 l('----------- SETTING GLOBAL CONDITION RECORD AT THE PARTY SITE LEVEL ---------');
7129 END IF ;
7130
7131
7132 WHILE l_cond_attrib_list.EXISTS(l_idx)
7133 LOOP
7134
7135 l(' HZ_WORD_CONDITIONS_PKG.set_gbl_condition_rec ('||l_cond_attrib_list(l_idx)||','||'H_TX'||l_idx||'(1));');
7136 l_idx := l_idx+1;
7137 END LOOP;
7138
7139 FOR I IN 1..255 LOOP
7140 IF l_forall_list(I) <> 'N' THEN
7141 IF l_custom_list(I) <> 'N' AND l_mincol_list(I) = 'Y' THEN
7142 l(' H_TX'||I||'(1):='||replace(l_custom_list(I),'(I)','(1)')||';');
7143 END IF;
7144 END IF;
7145 END LOOP;
7146 FOR I IN 1..255 LOOP
7147 IF l_forall_list(I) <> 'N' THEN
7148 IF l_mincol_list(I) <> 'Y' THEN
7149 l(' H_TX'||I||'(1):='||replace(l_forall_list(I),'(I)','(1)')||';');
7150 END IF;
7151 END IF;
7152 END LOOP;
7153 FOR I IN 1..255 LOOP
7154 IF l_forall_list(I) <> 'N' THEN
7155 IF l_mincol_list(I) = 'Y' THEN
7156 l(' H_TX'||I||'(1):='||replace(l_forall_list(I),'(I)','(1)')||';');
7157 END IF;
7158 END IF;
7159 END LOOP;
7160
7161 l(' l_tryins := FALSE;');
7162 l(' l_tryupd := FALSE;');
7163 l(' IF p_operation=''C'' THEN');
7164 l(' l_tryins:=TRUE;');
7165 l(' ELSE ');
7166 l(' l_tryupd:=TRUE;');
7167 l(' END IF;');
7168 l(' WHILE (l_tryins OR l_tryupd) LOOP');
7169 l(' IF l_tryins THEN');
7170 l(' BEGIN');
7171 l(' l_tryins:=FALSE;');
7172 l(' INSERT INTO HZ_STAGED_PARTY_SITES (');
7173 l(' PARTY_SITE_ID');
7174 l(' ,PARTY_ID');
7175 l(' ,ORG_CONTACT_ID');
7176 l(' ,STATUS_FLAG'); --Bug No: 4299785
7177
7178 FOR I IN 1..255 LOOP
7179 IF l_forall_list(I) <> 'N' THEN
7180 l(' , TX'||I);
7181 END IF;
7182 END LOOP;
7183 l(' ) VALUES (');
7184 l(' H_PARTY_SITE_ID(1)');
7185 l(' ,H_PARTY_ID(1)');
7186 l(' ,H_ORG_CONTACT_ID(1)');
7187 l(' ,H_STATUS(1)'); --Bug No: 4299785
7188
7189 FOR I IN 1..255 LOOP
7190 IF l_forall_list(I) <> 'N' THEN
7191 l(' , decode(H_TX'||I||'(1),null,H_TX'||I||'(1),H_TX'||I||'(1)||'' '')');
7192 END IF;
7193 END LOOP;
7194 l(' );');
7195 l(' EXCEPTION');
7196 l(' WHEN DUP_VAL_ON_INDEX THEN');
7197 l(' IF p_operation=''C'' THEN');
7198 l(' l_tryupd:=TRUE;');
7199 l(' END IF;');
7200 l(' END;');
7201 l(' END IF;');
7202 l(' IF l_tryupd THEN');
7203 l(' BEGIN');
7204 l(' l_tryupd:=FALSE;');
7205 l(' UPDATE HZ_STAGED_PARTY_SITES SET ');
7206 l(' concat_col = concat_col');
7207 l(' ,status_flag = H_STATUS(1)'); --Bug No: 4299785
7208
7209 FOR I IN 1..255 LOOP
7210 IF l_forall_list(I) <> 'N' THEN
7211 IF (is_first) THEN
7212 is_first := false;
7213 l(' ,TX'||I||'=decode(H_TX'||I||'(1),null,H_TX'||I||'(1),H_TX'||I||'(1)||'' '')');
7214 ELSE
7215 l(' ,TX'||I||'=decode(H_TX'||I||'(1),null,H_TX'||I||'(1),H_TX'||I||'(1)||'' '')');
7216 END IF;
7217 END IF;
7218 END LOOP;
7219 l(' WHERE PARTY_SITE_ID=H_PARTY_SITE_ID(1);');
7220 l(' IF SQL%ROWCOUNT=0 AND p_operation=''U'' THEN');
7221 l(' l_tryins := TRUE;');
7222 l(' END IF;');
7223 l(' EXCEPTION ');
7224 l(' WHEN NO_DATA_FOUND THEN');
7225 l(' IF p_operation=''U'' THEN');
7226 l(' l_tryins := TRUE;');
7227 l(' END IF;');
7228 l(' END;');
7229 l(' END IF;');
7230 l(' END LOOP;');
7231 l(' --Fix for bug 5048604, to update concat_col during update of denorm column ');
7232 l(' UPDATE HZ_STAGED_PARTIES set ');
7233 l(' D_PS = ''SYNC'' ');
7234 l(' ,CONCAT_COL = CONCAT_COL ');
7235 l(' WHERE PARTY_ID = H_PARTY_ID(1); ');
7239 -- directly insert into the staging tables from SYNC.
7236 l(' END;');
7237
7238 -- VJN Introduced for SYNC. This is the online version, which would be used to
7240 is_first := true ;
7241 l('');
7242 l(' PROCEDURE sync_single_party_site_online (');
7243 l(' p_party_site_id NUMBER,');
7244 l(' p_operation VARCHAR2) IS');
7245 l('');
7246 l(' l_tryins BOOLEAN;');
7247 l(' l_tryupd BOOLEAN;');
7248 l(' l_party_id NUMBER; ');
7249 l(' l_party_id1 NUMBER; ');
7250 l(' l_org_contact_id NUMBER; ');
7251 l(' l_party_type VARCHAR2(255); ');
7252 l(' l_sql_err_message VARCHAR2(2000); ');
7253 l('');
7254 l(' BEGIN');
7255 l('');
7256 l(' l_party_id := -1; ');
7257 l(' l_org_contact_id := -1; ');
7258 l('');
7259 l(' BEGIN ');
7260 l(' SELECT ps.party_id,p.party_type INTO l_party_id1, l_party_type ');
7261 l(' FROM HZ_PARTY_SITES ps, HZ_PARTIES p ');
7262 l(' WHERE party_site_id = p_party_site_id ');
7263 l(' AND p.PARTY_ID = ps.PARTY_ID; ');
7264 l(' -- take care of invalid party ids ');
7265 l(' EXCEPTION ');
7266 l(' WHEN NO_DATA_FOUND THEN ');
7267 l(' -- dbms_output.put_line ( ''Exception caught in party_site ''); ');
7268 l(' RETURN; ');
7269 l(' END; ');
7270 l('');
7271 l(' IF l_party_type = ''PARTY_RELATIONSHIP'' THEN ');
7272 l(' BEGIN ');
7273 l(' SELECT r.object_id, org_contact_id INTO l_party_id,l_org_contact_id ');
7274 l(' FROM HZ_ORG_CONTACTS oc, HZ_RELATIONSHIPS r ');
7275 l(' WHERE r.party_id = l_party_id1 '); -- Fix for bug 5207194
7276 l(' AND r.relationship_id = oc.party_relationship_id ');
7277 l(' AND r.directional_flag = ''F'' ');
7278 l(' AND r.SUBJECT_TABLE_NAME = ''HZ_PARTIES'' ');
7279 l(' AND r.OBJECT_TABLE_NAME = ''HZ_PARTIES''; ');
7280 l(' -- take care of invalid identifiers ');
7281 l(' EXCEPTION ');
7282 l(' WHEN NO_DATA_FOUND THEN ');
7283 l(' -- dbms_output.put_line ( ''Exception caught in party_rel ''); ');
7284 l(' RETURN; ');
7285 l(' END; ');
7286 l(' ELSE ');
7287 l(' l_party_id :=l_party_id1; ');
7288 l(' l_org_contact_id:=NULL; ');
7289 l(' END IF; ');
7290 l('');
7291 l(' SELECT ps.PARTY_SITE_ID, l_party_id, l_org_contact_id, ps.STATUS '); --Bug No: 4299785
7292 FOR I in 1..l_select.COUNT LOOP
7293 IF l_select(I) <> 'N' THEN
7294 l(' ,' || l_select(I));
7295 END IF;
7296 END LOOP;
7297 l(' INTO H_PARTY_SITE_ID(1), H_PARTY_ID(1), H_ORG_CONTACT_ID(1), H_STATUS(1)'); --Bug No: 4299785
7298 FOR I IN 1..255 LOOP
7299 IF l_forall_list(I) <> 'N' AND l_mincol_list(I) = 'Y' AND
7300 l_custom_list(I) = 'N' THEN
7301 l(' ,H_TX'||I||'(1)');
7302 END IF;
7303 END LOOP;
7304 l(' FROM HZ_PARTY_SITES ps, HZ_LOCATIONS l ');
7305 l(' WHERE ');
7306 l(' ps.party_site_id = p_party_site_id');
7307 l(' AND ps.location_id = l.location_id ');
7308 l(' AND (ps.status is null OR ps.status = ''A'' OR ps.status = ''I'') ');
7309 l(' AND ROWNUM=1;');
7310 l('');
7311
7312 -- VJN INTRODUCED CODE FOR GENERATING THE POPULATION
7313 -- OF THE GLOBAL CONDITION RECORD
7314
7315 l_idx := l_cond_attrib_list.FIRST ;
7316 IF l_idx IS NOT NULL
7317 THEN
7318 l(' ---- SETTING GLOBAL CONDITION RECORD AT THE PARTY SITE LEVEL ----');
7319 END IF ;
7320
7321 WHILE l_cond_attrib_list.EXISTS(l_idx)
7322 LOOP
7323 l(' HZ_WORD_CONDITIONS_PKG.set_gbl_condition_rec ('||l_cond_attrib_list(l_idx)||','||'H_TX'||l_idx||'(1));');
7324 l_idx := l_idx+1;
7325 END LOOP;
7326
7327 FOR I IN 1..255 LOOP
7328 IF l_forall_list(I) <> 'N' THEN
7329 IF l_custom_list(I) <> 'N' AND l_mincol_list(I) = 'Y' THEN
7330 l(' H_TX'||I||'(1):='||replace(l_custom_list(I),'(I)','(1)')||';');
7331 END IF;
7332 END IF;
7333 END LOOP;
7334 FOR I IN 1..255 LOOP
7335 IF l_forall_list(I) <> 'N' THEN
7336 IF l_mincol_list(I) <> 'Y' THEN
7337 l(' H_TX'||I||'(1):='||replace(l_forall_list(I),'(I)','(1)')||';');
7338 END IF;
7339 END IF;
7340 END LOOP;
7341 FOR I IN 1..255 LOOP
7342 IF l_forall_list(I) <> 'N' THEN
7343 IF l_mincol_list(I) = 'Y' THEN
7344 l(' H_TX'||I||'(1):='||replace(l_forall_list(I),'(I)','(1)')||';');
7345 END IF;
7346 END IF;
7347 END LOOP;
7348
7349 l('');
7350 l(' l_tryins := FALSE;');
7351 l(' l_tryupd := FALSE;');
7352 l('');
7353 l(' IF p_operation=''C'' THEN');
7354 l(' l_tryins:=TRUE;');
7355 l(' ELSE ');
7356 l(' l_tryupd:=TRUE;');
7357 l(' END IF;');
7358 l('');
7359 l(' WHILE (l_tryins OR l_tryupd) LOOP');
7360 l(' IF l_tryins THEN');
7361 l(' BEGIN');
7362 l(' l_tryins:=FALSE;');
7363 l(' INSERT INTO HZ_STAGED_PARTY_SITES (');
7364 l(' PARTY_SITE_ID');
7365 l(' ,PARTY_ID');
7366 l(' ,ORG_CONTACT_ID');
7367 l(' ,STATUS_FLAG'); --Bug No: 4299785
7368
7369 FOR I IN 1..255 LOOP
7370 IF l_forall_list(I) <> 'N' THEN
7371 l(' ,TX'||I);
7372 END IF;
7373 END LOOP;
7374 l(' ) VALUES (');
7378 l(' ,H_STATUS(1)'); --Bug No: 4299785
7375 l(' H_PARTY_SITE_ID(1)');
7376 l(' ,H_PARTY_ID(1)');
7377 l(' ,H_ORG_CONTACT_ID(1)');
7379
7380 FOR I IN 1..255 LOOP
7381 IF l_forall_list(I) <> 'N' THEN
7382 l(' ,decode(H_TX'||I||'(1),null,H_TX'||I||'(1),H_TX'||I||'(1)||'' '')');
7383 END IF;
7384 END LOOP;
7385 l(' );');
7386 l(' EXCEPTION');
7387 l(' WHEN DUP_VAL_ON_INDEX THEN');
7388 l(' IF p_operation=''C'' THEN');
7389 l(' l_tryupd:=TRUE;');
7390 l(' END IF;');
7391 l(' END;');
7392 l(' END IF;');
7393 l('');
7394 l(' IF l_tryupd THEN');
7395 l(' BEGIN');
7396 l(' l_tryupd:=FALSE;');
7397 l(' UPDATE HZ_STAGED_PARTY_SITES SET ');
7398 l(' concat_col = concat_col');
7399 l(' ,status_flag = H_STATUS(1)'); --Bug No: 4299785
7400
7401 FOR I IN 1..255 LOOP
7402 IF l_forall_list(I) <> 'N' THEN
7403 IF (is_first) THEN
7404 is_first := false;
7405 l(' ,TX'||I||'=decode(H_TX'||I||'(1),null,H_TX'||I||'(1),H_TX'||I||'(1)||'' '')');
7406 ELSE
7407 l(' ,TX'||I||'=decode(H_TX'||I||'(1),null,H_TX'||I||'(1),H_TX'||I||'(1)||'' '')');
7408 END IF;
7409 END IF;
7410 END LOOP;
7411 l(' WHERE PARTY_SITE_ID=H_PARTY_SITE_ID(1);');
7412 l(' IF SQL%ROWCOUNT=0 AND p_operation=''U'' THEN');
7413 l(' l_tryins := TRUE;');
7414 l(' END IF;');
7415 l(' EXCEPTION ');
7416 l(' WHEN NO_DATA_FOUND THEN');
7417 l(' IF p_operation=''U'' THEN');
7418 l(' l_tryins := TRUE;');
7419 l(' END IF;');
7420 l(' END;');
7421 l(' END IF;');
7422 l(' END LOOP;');
7423 l('');
7424 l(' --Fix for bug 5048604, to update concat_col during update of denorm column ');
7425 l(' UPDATE HZ_STAGED_PARTIES set');
7426 l(' D_PS = ''SYNC''');
7427 l(' ,CONCAT_COL = CONCAT_COL ');
7428 l(' WHERE PARTY_ID = H_PARTY_ID(1);');
7429 l('');
7430 l(' -- REPURI. Bug 4884742. If shadow staging is completely successfully ');
7431 l(' -- insert a record into hz_dqm_sh_sync_interface table for each record ');
7432 l(' IF (HZ_DQM_SYNC.is_shadow_staging_complete) THEN ');
7433 l(' BEGIN ');
7434 l(' HZ_DQM_SYNC.insert_sh_interface_rec(l_party_id,p_party_site_id,null,l_org_contact_id,''PARTY_SITES'',p_operation); ');
7435 l(' EXCEPTION WHEN OTHERS THEN ');
7436 l(' NULL; ');
7437 l(' END; ');
7438 l(' END IF; ');
7439 l('');
7440 -- Fix for Bug 4862121.
7441 -- Added the Exception handling at this context, for the procedure.
7442 l(' EXCEPTION WHEN OTHERS THEN ');
7443 l(' -- FAILOVER : REPORT RECORD TO HZ_DQM_SYNC_INTERFACE ');
7444 l(' -- FOR ONLINE FLOWS ');
7445 l(' l_sql_err_message := SQLERRM; ');
7446 l(' insert_dqm_sync_error_rec(l_party_id, p_party_site_id, NULL, l_org_contact_id, ''PARTY_SITES'', p_operation, ''E'', ''Y'', l_sql_err_message); ');
7447 l(' END;');
7448
7449 END;
7450
7451 -- REPURI. Proccedure to generate the code (into HZ_STAGE_MAP_TRANSFORM)
7452 -- for OPEN_BULK_IMP_SYNC_CT_CUR query procedure. Bug 4884735.
7453
7454 PROCEDURE gen_bulk_imp_sync_ct_query IS
7455 cur_col_num NUMBER := 1;
7456
7457 TYPE coltab IS TABLE OF VARCHAR2(2000) INDEX BY BINARY_INTEGER;
7458
7459 l_select coltab;
7460 FIRST BOOLEAN := FALSE;
7461
7462 l_forall_list coltab;
7463 l_custom_list coltab;
7464 l_mincol_list coltab;
7465 l_min_colnum NUMBER;
7466 idx NUMBER :=1;
7467 is_first boolean := true;
7468
7469 -- VJN Introduced for conditional word replacements
7470 l_cond_attrib_list coltab ;
7471 l_idx number ;
7472
7473 BEGIN
7474
7475 l('');
7476 l(' PROCEDURE open_bulk_imp_sync_ct_cur ( ');
7477 l(' p_batch_id IN NUMBER, ');
7478 l(' p_batch_mode_flag IN VARCHAR2, ');
7479 l(' p_from_osr IN VARCHAR2, ');
7480 l(' p_to_osr IN VARCHAR2, ');
7481 l(' p_os IN VARCHAR2, ');
7482 l(' p_operation IN VARCHAR2, ');
7483 l(' x_sync_contact_cur IN OUT HZ_DQM_SYNC.SyncCurTyp) IS ');
7484 l(' BEGIN');
7485
7486 FOR ATTRS IN (SELECT a.ATTRIBUTE_ID,
7487 a.ATTRIBUTE_NAME,
7488 a.SOURCE_TABLE,
7489 a.CUSTOM_ATTRIBUTE_PROCEDURE,
7490 f.PROCEDURE_NAME,
7491 f.STAGED_ATTRIBUTE_COLUMN,
7492 to_number(substrb(STAGED_ATTRIBUTE_COLUMN, 3)) COLNUM
7493 FROM HZ_TRANS_ATTRIBUTES_VL a, HZ_TRANS_FUNCTIONS_VL f
7494 WHERE ENTITY_NAME = 'CONTACTS'
7495 AND nvl(f.ACTIVE_FLAG,'Y') = 'Y'
7496 AND f.ATTRIBUTE_ID = a.ATTRIBUTE_ID
7497 ORDER BY COLNUM) LOOP
7498 IF cur_col_num<ATTRS.COLNUM THEN
7499 FOR I in cur_col_num..ATTRS.COLNUM-1 LOOP
7500 l_mincol_list(I) := 'N';
7501 l_forall_list(I) := 'N';
7502 l_custom_list(I) := 'N';
7503 END LOOP;
7504 END IF;
7505 cur_col_num:=ATTRS.COLNUM+1;
7506 IF has_trx_context(ATTRS.PROCEDURE_NAME) THEN
7510 END IF;
7507 l_forall_list(ATTRS.COLNUM) := ATTRS.PROCEDURE_NAME || '(H_TX'||ATTRS.COLNUM||'(I),NULL, ''' || ATTRS.ATTRIBUTE_NAME || ''',''CONTACTS'',''STAGE'')';
7508 ELSE
7509 l_forall_list(ATTRS.COLNUM) := ATTRS.PROCEDURE_NAME || '(H_TX'||ATTRS.COLNUM||'(I),NULL, ''' || ATTRS.ATTRIBUTE_NAME || ''',''CONTACTS'')';
7511
7512 SELECT min(to_number(substrb(STAGED_ATTRIBUTE_COLUMN, 3))) INTO l_min_colnum
7513 FROM HZ_TRANS_ATTRIBUTES_VL a, HZ_TRANS_FUNCTIONS_VL f
7514 WHERE ENTITY_NAME = 'CONTACTS'
7515 AND nvl(f.ACTIVE_FLAG,'Y') = 'Y'
7516 AND f.ATTRIBUTE_ID = a.ATTRIBUTE_ID
7517 AND a.ATTRIBUTE_NAME=ATTRS.ATTRIBUTE_NAME;
7518
7519 IF ATTRS.colnum>l_min_colnum THEN
7520 l_mincol_list(ATTRS.COLNUM) := 'N';
7521 IF has_trx_context(ATTRS.PROCEDURE_NAME) THEN
7522 l_forall_list(ATTRS.COLNUM) := ATTRS.PROCEDURE_NAME || '(H_TX'||l_min_colnum||'(I),NULL, ''' || ATTRS.ATTRIBUTE_NAME || ''',''CONTACTS'',''STAGE'')';
7523 ELSE
7524 l_forall_list(ATTRS.COLNUM) := ATTRS.PROCEDURE_NAME || '(H_TX'||l_min_colnum||'(I),NULL, ''' || ATTRS.ATTRIBUTE_NAME || ''',''CONTACTS'')';
7525 END IF;
7526
7527 ELSE
7528 l_mincol_list(ATTRS.COLNUM) := 'Y';
7529 END IF;
7530
7531 IF ATTRS.CUSTOM_ATTRIBUTE_PROCEDURE IS NULL THEN
7532 IF l_mincol_list(ATTRS.COLNUM) = 'Y' THEN
7533 IF ATTRS.SOURCE_TABLE='HZ_PERSON_PROFILES' THEN
7534 l_select(idx) := 'pp.'||ATTRS.ATTRIBUTE_NAME;
7535 ELSIF ATTRS.SOURCE_TABLE='HZ_ORG_CONTACTS' THEN
7536 l_select(idx) := 'oc.'||ATTRS.ATTRIBUTE_NAME;
7537 ELSIF ATTRS.SOURCE_TABLE='HZ_RELATIONSHIPS' THEN
7538 l_select(idx) := 'r.'||ATTRS.ATTRIBUTE_NAME;
7539 END IF;
7540 ELSE
7541 l_select(idx) := 'N';
7542 END IF;
7543
7544 l_custom_list(ATTRS.COLNUM) := 'N';
7545 ELSE
7546 l_select(idx) := 'N';
7547 l_custom_list(ATTRS.COLNUM) := 'N';
7548 IF ATTRS.ATTRIBUTE_NAME = 'CONTACT_NAME' THEN
7549 IF l_mincol_list(ATTRS.COLNUM) = 'Y' THEN
7550 l_select(idx) := 'rtrim(pp.person_first_name || '' '' || pp.person_last_name)';
7551 END IF;
7552 ELSE
7553 IF l_mincol_list(ATTRS.COLNUM) = 'Y' THEN
7554 IF has_context(ATTRS.custom_attribute_procedure) THEN
7555 l_custom_list(ATTRS.COLNUM) := ATTRS.custom_attribute_procedure || '(H_ORG_CONTACT_ID(I),''CONTACTS'','''||ATTRS.ATTRIBUTE_NAME|| ''', ''STAGE'')';
7556 ELSE
7557 l_custom_list(ATTRS.COLNUM) := ATTRS.custom_attribute_procedure || '(H_ORG_CONTACT_ID(I), ''CONTACTS'','''||ATTRS.ATTRIBUTE_NAME|| ''')';
7558 END IF;
7559 END IF;
7560 END IF;
7561 END IF;
7562 idx := idx+1;
7563 -- VJN ADDED CODE FOR TRACKING CONDITION ATTRIBUTES AT THIS ENTITY LEVEL
7564 IF HZ_WORD_CONDITIONS_PKG.is_a_cond_attrib( ATTRS.attribute_id)
7565 THEN
7566 l_cond_attrib_list(ATTRS.COLNUM) := ATTRS.attribute_id ;
7567 END IF;
7568 END LOOP;
7569
7570 IF cur_col_num<=255 THEN--bug 5977628
7571 FOR I in cur_col_num..255 LOOP
7572 l_mincol_list(I) := 'N';
7573 l_forall_list(I) := 'N';
7574 l_custom_list(I) := 'N';
7575 END LOOP;
7576 END IF;
7577
7578 l(' OPEN x_sync_contact_cur FOR ' );
7579 l(' SELECT ');
7580 l(' /*+ ORDERED USE_NL(R OC PP)*/');
7581 l(' oc.ORG_CONTACT_ID ');
7582 l(' ,r.OBJECT_ID ');
7583 l(' ,r.PARTY_ID ');
7584 l(' ,r.STATUS '); --Propagating Bug 4299785 fix to sync modifications
7585 l(' ,oc.ROWID ');
7586
7587 FOR I in 1..l_select.COUNT LOOP
7588 IF l_select(I) <> 'N' THEN
7589 l(' ,' || l_select(I));
7590 END IF;
7591 END LOOP;
7592
7593 l(' FROM hz_org_contacts oc, hz_imp_contacts_sg ocsg, hz_imp_batch_details bd, ');
7594 l(' hz_relationships r, hz_person_profiles pp');
7595 l(' WHERE ocsg.batch_mode_flag = p_batch_mode_flag ');
7596 l(' AND oc.party_relationship_id = r.relationship_id ');
7597 l(' AND ocsg.batch_id = p_batch_id ');
7598 l(' AND ocsg.sub_orig_system = p_os ');
7599 l(' AND ocsg.contact_id = oc.org_contact_id ');
7600 l(' AND oc.request_id = bd.main_conc_req_id ');
7601 l(' AND bd.batch_id = ocsg.batch_id ');
7602 l(' AND r.subject_id = pp.party_id ');
7603 l(' AND r.subject_type = ''PERSON'' ');
7604 l(' AND r.SUBJECT_TABLE_NAME = ''HZ_PARTIES''');
7605 l(' AND r.OBJECT_TABLE_NAME = ''HZ_PARTIES''');
7606 l(' AND DIRECTIONAL_FLAG = ''F'' ');
7607 l(' AND ocsg.action_flag = p_operation ');
7608 l(' AND pp.effective_end_date IS NULL ');
7609 l(' AND ocsg.sub_orig_system_reference BETWEEN p_from_osr AND p_to_osr ');
7610 l(' AND (oc.status IS NULL OR oc.status = ''A'' OR oc.status = ''I'')');
7611 l(' AND (r.status IS NULL OR r.status = ''A'' OR r.status = ''I'') ');
7612 l(' UNION ');
7613 l(' SELECT ');
7614 l(' /*+ ORDERED USE_NL(R OC PP)*/');
7615 l(' oc.ORG_CONTACT_ID ');
7616 l(' ,r.OBJECT_ID ');
7617 l(' ,r.PARTY_ID ');
7618 l(' ,r.STATUS '); --Propagating Bug 4299785 fix to sync modifications
7619 l(' ,oc.ROWID ');
7620
7621 FOR I in 1..l_select.COUNT LOOP
7622 IF l_select(I) <> 'N' THEN
7623 l(' ,' || l_select(I));
7624 END IF;
7625 END LOOP;
7626
7630 l(' AND rsg.batch_id = p_batch_id ');
7627 l(' FROM hz_org_contacts oc, hz_imp_relships_sg rsg, hz_imp_batch_details bd ');
7628 l(' ,hz_relationships r, hz_person_profiles pp ');
7629 l(' WHERE rsg.batch_mode_flag = p_batch_mode_flag ');
7631 l(' AND rsg.sub_orig_system = p_os ');
7632 l(' AND rsg.relationship_id = oc.party_relationship_id ');
7633 l(' AND oc.request_id = bd.main_conc_req_id ');
7634 l(' AND bd.batch_id = rsg.batch_id ');
7635 l(' AND rsg.relationship_id = r.relationship_id ');
7636 l(' AND r.directional_flag = ''F'' ');
7637 l(' AND r.subject_id = pp.party_id ');
7638 l(' AND r.subject_type = ''PERSON'' ');
7639 l(' AND r.object_type = ''ORGANIZATION'' ');
7640 l(' AND r.SUBJECT_TABLE_NAME = ''HZ_PARTIES'' ');
7641 l(' AND r.OBJECT_TABLE_NAME = ''HZ_PARTIES'' ');
7642 l(' AND rsg.action_flag = p_operation ');
7643 l(' AND pp.effective_end_date IS NULL ');
7644 l(' AND rsg.sub_orig_system_reference BETWEEN p_from_osr AND p_to_osr ');
7645 l(' AND (oc.status IS NULL OR oc.status = ''A'' OR oc.status = ''I'')');
7646 l(' AND (r.status IS NULL OR r.status = ''A'' OR r.status = ''I'');');
7647
7648 l(' END open_bulk_imp_sync_ct_cur; ');
7649
7650 END gen_bulk_imp_sync_ct_query;
7651
7652
7653
7654 -- REPURI. Proccedure to generate the code (into HZ_STAGE_MAP_TRANSFORM)
7655 -- for OPEN_SYNC_CONTACT_CURSOR and SYNC_ALL_CONTACTS Procedures.
7656
7657 PROCEDURE generate_sync_ct_query_proc IS
7658 cur_col_num NUMBER := 1;
7659
7660 TYPE coltab IS TABLE OF VARCHAR2(2000) INDEX BY BINARY_INTEGER;
7661
7662 l_select coltab;
7663 FIRST BOOLEAN := FALSE;
7664
7665 l_forall_list coltab;
7666 l_custom_list coltab;
7667 l_mincol_list coltab;
7668 l_min_colnum NUMBER;
7669 idx NUMBER :=1;
7670 is_first boolean := true;
7671
7672 -- VJN Introduced for conditional word replacements
7673 l_cond_attrib_list coltab ;
7674 l_idx number ;
7675
7676 BEGIN
7677
7678 l('');
7679 l(' PROCEDURE open_sync_contact_cursor ( ');
7680 l(' p_operation IN VARCHAR2,');
7681 l(' p_from_rec IN VARCHAR2,');
7682 l(' p_to_rec IN VARCHAR2,');
7683 l(' x_sync_contact_cur IN OUT HZ_DQM_SYNC.SyncCurTyp) IS ');
7684 l(' BEGIN');
7685
7686 FOR ATTRS IN (SELECT a.ATTRIBUTE_ID,
7687 a.ATTRIBUTE_NAME,
7688 a.SOURCE_TABLE,
7689 a.CUSTOM_ATTRIBUTE_PROCEDURE,
7690 f.PROCEDURE_NAME,
7691 f.STAGED_ATTRIBUTE_COLUMN,
7692 to_number(substrb(STAGED_ATTRIBUTE_COLUMN, 3)) COLNUM
7693 FROM HZ_TRANS_ATTRIBUTES_VL a, HZ_TRANS_FUNCTIONS_VL f
7694 WHERE ENTITY_NAME = 'CONTACTS'
7695 AND nvl(f.ACTIVE_FLAG,'Y') = 'Y'
7696 AND f.ATTRIBUTE_ID = a.ATTRIBUTE_ID
7697 ORDER BY COLNUM) LOOP
7698 IF cur_col_num<ATTRS.COLNUM THEN
7699 FOR I in cur_col_num..ATTRS.COLNUM-1 LOOP
7700 l_mincol_list(I) := 'N';
7701 l_forall_list(I) := 'N';
7702 l_custom_list(I) := 'N';
7703 END LOOP;
7704 END IF;
7705 cur_col_num:=ATTRS.COLNUM+1;
7706 IF has_trx_context(ATTRS.PROCEDURE_NAME) THEN
7707 l_forall_list(ATTRS.COLNUM) := ATTRS.PROCEDURE_NAME || '(H_TX'||ATTRS.COLNUM||'(I),NULL, ''' || ATTRS.ATTRIBUTE_NAME || ''',''CONTACTS'',''STAGE'')';
7708 ELSE
7709 l_forall_list(ATTRS.COLNUM) := ATTRS.PROCEDURE_NAME || '(H_TX'||ATTRS.COLNUM||'(I),NULL, ''' || ATTRS.ATTRIBUTE_NAME || ''',''CONTACTS'')';
7710 END IF;
7711
7712 SELECT min(to_number(substrb(STAGED_ATTRIBUTE_COLUMN, 3))) INTO l_min_colnum
7713 FROM HZ_TRANS_ATTRIBUTES_VL a, HZ_TRANS_FUNCTIONS_VL f
7714 WHERE ENTITY_NAME = 'CONTACTS'
7715 AND nvl(f.ACTIVE_FLAG,'Y') = 'Y'
7716 AND f.ATTRIBUTE_ID = a.ATTRIBUTE_ID
7717 AND a.ATTRIBUTE_NAME=ATTRS.ATTRIBUTE_NAME;
7718
7719 IF ATTRS.colnum>l_min_colnum THEN
7720 l_mincol_list(ATTRS.COLNUM) := 'N';
7721 IF has_trx_context(ATTRS.PROCEDURE_NAME) THEN
7722 l_forall_list(ATTRS.COLNUM) := ATTRS.PROCEDURE_NAME || '(H_TX'||l_min_colnum||'(I),NULL, ''' || ATTRS.ATTRIBUTE_NAME || ''',''CONTACTS'',''STAGE'')';
7723 ELSE
7724 l_forall_list(ATTRS.COLNUM) := ATTRS.PROCEDURE_NAME || '(H_TX'||l_min_colnum||'(I),NULL, ''' || ATTRS.ATTRIBUTE_NAME || ''',''CONTACTS'')';
7725 END IF;
7726
7727 ELSE
7728 l_mincol_list(ATTRS.COLNUM) := 'Y';
7729 END IF;
7730
7731 IF ATTRS.CUSTOM_ATTRIBUTE_PROCEDURE IS NULL THEN
7732 IF l_mincol_list(ATTRS.COLNUM) = 'Y' THEN
7733 IF ATTRS.SOURCE_TABLE='HZ_PERSON_PROFILES' THEN
7734 l_select(idx) := 'pp.'||ATTRS.ATTRIBUTE_NAME;
7735 ELSIF ATTRS.SOURCE_TABLE='HZ_ORG_CONTACTS' THEN
7736 l_select(idx) := 'oc.'||ATTRS.ATTRIBUTE_NAME;
7737 ELSIF ATTRS.SOURCE_TABLE='HZ_RELATIONSHIPS' THEN
7738 l_select(idx) := 'r.'||ATTRS.ATTRIBUTE_NAME;
7739 END IF;
7740 ELSE
7741 l_select(idx) := 'N';
7742 END IF;
7743
7744 l_custom_list(ATTRS.COLNUM) := 'N';
7745 ELSE
7746 l_select(idx) := 'N';
7747 l_custom_list(ATTRS.COLNUM) := 'N';
7748 IF ATTRS.ATTRIBUTE_NAME = 'CONTACT_NAME' THEN
7749 IF l_mincol_list(ATTRS.COLNUM) = 'Y' THEN
7753 IF l_mincol_list(ATTRS.COLNUM) = 'Y' THEN
7750 l_select(idx) := 'rtrim(pp.person_first_name || '' '' || pp.person_last_name)';
7751 END IF;
7752 ELSE
7754 IF has_context(ATTRS.custom_attribute_procedure) THEN
7755 l_custom_list(ATTRS.COLNUM) := ATTRS.custom_attribute_procedure || '(H_ORG_CONTACT_ID(I),''CONTACTS'','''||ATTRS.ATTRIBUTE_NAME|| ''', ''STAGE'')';
7756 ELSE
7757 l_custom_list(ATTRS.COLNUM) := ATTRS.custom_attribute_procedure || '(H_ORG_CONTACT_ID(I), ''CONTACTS'','''||ATTRS.ATTRIBUTE_NAME|| ''')';
7758 END IF;
7759 END IF;
7760 END IF;
7761 END IF;
7762 idx := idx+1;
7763 -- VJN ADDED CODE FOR TRACKING CONDITION ATTRIBUTES AT THIS ENTITY LEVEL
7764 IF HZ_WORD_CONDITIONS_PKG.is_a_cond_attrib( ATTRS.attribute_id)
7765 THEN
7766 l_cond_attrib_list(ATTRS.COLNUM) := ATTRS.attribute_id ;
7767 END IF;
7768 END LOOP;
7769
7770 IF cur_col_num<=255 THEN--bug 5977628
7771 FOR I in cur_col_num..255 LOOP
7772 l_mincol_list(I) := 'N';
7773 l_forall_list(I) := 'N';
7774 l_custom_list(I) := 'N';
7775 END LOOP;
7776 END IF;
7777
7778 l(' OPEN x_sync_contact_cur FOR ' );
7779 l(' SELECT ');
7780 -- Start Bug:5460390------
7781 --l(' /*+ ORDERED USE_NL(R OC PP)*/');
7782 l(' /*+ leading(dsi) USE_NL(OC R PP) */ ');
7783 -- End Bug:5460390------
7784 l(' oc.ORG_CONTACT_ID ');
7785 l(' ,r.OBJECT_ID ');
7786 l(' ,r.PARTY_ID ');
7787 l(' ,r.STATUS '); --Propagating Bug 4299785 fix to sync modifications
7788 l(' ,dsi.ROWID ');
7789
7790 FOR I in 1..l_select.COUNT LOOP
7791 IF l_select(I) <> 'N' THEN
7792 l(' ,' || l_select(I));
7793 END IF;
7794 END LOOP;
7795
7796 l(' FROM HZ_DQM_SYNC_INTERFACE dsi, HZ_RELATIONSHIPS r,');
7797 l(' HZ_ORG_CONTACTS oc, HZ_PERSON_PROFILES pp');
7798 l(' WHERE oc.party_relationship_id = r.relationship_id ');
7799 l(' AND dsi.record_id = oc.org_contact_id ');
7800 l(' AND r.subject_id = pp.party_id ');
7801 l(' AND r.subject_type = ''PERSON'' ');
7802 l(' AND r.SUBJECT_TABLE_NAME = ''HZ_PARTIES''');
7803 l(' AND r.OBJECT_TABLE_NAME = ''HZ_PARTIES''');
7804 l(' AND DIRECTIONAL_FLAG = ''F'' ');
7805 l(' AND pp.effective_end_date is NULL ');
7806 l(' AND dsi.entity = ''CONTACTS'' ');
7807 l(' AND dsi.operation = p_operation ');
7808 l(' AND dsi.staged_flag = ''N'' ');
7809 l(' AND dsi.sync_interface_num >= p_from_rec ');
7810 l(' AND dsi.sync_interface_num <= p_to_rec ');
7811 l(' AND (oc.status is null OR oc.status = ''A'' or oc.status = ''I'')');
7812 l(' AND (r.status is null OR r.status = ''A'' or r.status = ''I'');');
7813 l(' END; ');
7814
7815 l('');
7816 l(' PROCEDURE sync_all_contacts ( ');
7817 l(' p_operation IN VARCHAR2, ');
7818 l(' p_bulk_sync_type IN VARCHAR2, ');
7819 l(' p_sync_all_contact_cur IN HZ_DQM_SYNC.SyncCurTyp) IS ');
7820 l('');
7821 l(' l_limit NUMBER := ' || g_batch_size || ';');
7822 l(' l_last_fetch BOOLEAN := FALSE;');
7823 l(' l_sql_errm VARCHAR2(2000); ');
7824 l(' l_st NUMBER; ');
7825 l(' l_en NUMBER; ');
7826 l(' l_err_index NUMBER; ');
7827 l(' l_err_count NUMBER; ');
7828 l('');
7829 l(' bulk_errors EXCEPTION; ');
7830 l(' PRAGMA EXCEPTION_INIT(bulk_errors, -24381); ');
7831 l('');
7832 l(' BEGIN');
7833 l(' log (''Begin Synchronizing Contacts''); ');
7834 l(' LOOP');
7835 l(' log (''Bulk Collecting Contacts Data...'',FALSE); ');
7836 l(' FETCH p_sync_all_contact_cur BULK COLLECT INTO');
7837 l(' H_ORG_CONTACT_ID');
7838 l(' ,H_C_PARTY_ID');
7839 l(' ,H_R_PARTY_ID');
7840 l(' ,H_STATUS'); --Propagating Bug 4299785 fix to sync modifications
7841 l(' ,H_ROWID');
7842
7843 FOR I IN 1..255 LOOP
7844 IF l_forall_list(I) <> 'N' AND l_mincol_list(I) = 'Y' AND
7845 l_custom_list(I) = 'N' THEN
7846 l(' ,H_TX'||I);
7847 END IF;
7848 END LOOP;
7849 l(' LIMIT l_limit;');
7850 l(' log (''Done''); ');
7851 l('');
7852 l(' IF p_sync_all_contact_cur%NOTFOUND THEN');
7853 l(' l_last_fetch:=TRUE;');
7854 l(' END IF;');
7855 l('');
7856 l(' IF H_ORG_CONTACT_ID.COUNT=0 AND l_last_fetch THEN');
7857 l(' EXIT;');
7858 l(' END IF;');
7859 l('');
7860 l(' log (''Synchronizing for ''||H_ORG_CONTACT_ID.COUNT||'' Contacts''); ');
7861 l(' log (''Populating Contacts Transformation Functions into Arrays...'',FALSE); ');
7862 l('');
7863 l(' FOR I in H_ORG_CONTACT_ID.FIRST..H_ORG_CONTACT_ID.LAST LOOP');
7864
7865 -- VJN INTRODUCED CODE FOR GENERATING THE POPULATION
7866 -- OF THE GLOBAL CONDITION RECORD
7867
7868 l_idx := l_cond_attrib_list.FIRST ;
7869 IF l_idx IS NOT NULL
7870 THEN
7871 l(' ---- SETTING GLOBAL CONDITION RECORD AT THE CONTACT LEVEL ----');
7872 l('');
7873 END IF ;
7874
7875 WHILE l_cond_attrib_list.EXISTS(l_idx)
7876 LOOP
7877 l(' HZ_WORD_CONDITIONS_PKG.set_gbl_condition_rec ('||l_cond_attrib_list(l_idx)||','||'H_TX'||l_idx||'(I));');
7878 l_idx := l_idx+1;
7882
7879 END LOOP;
7880
7881 l('');
7883 FOR I IN 1..255 LOOP
7884 IF l_forall_list(I) <> 'N' THEN
7885 IF l_custom_list(I) <> 'N' AND l_mincol_list(I) = 'Y' THEN
7886 l(' H_TX'||I||'(I):='||l_custom_list(I)||';');
7887 END IF;
7888 END IF;
7889 END LOOP;
7890 FOR I IN 1..255 LOOP
7891 IF l_forall_list(I) <> 'N' THEN
7892 IF l_mincol_list(I) <> 'Y' THEN
7893 l(' H_TX'||I||'(I):='||l_forall_list(I)||';');
7894 END IF;
7895 END IF;
7896 END LOOP;
7897 FOR I IN 1..255 LOOP
7898 IF l_forall_list(I) <> 'N' THEN
7899 IF l_mincol_list(I) = 'Y' THEN
7900 l(' H_TX'||I||'(I):='||l_forall_list(I)||';');
7901 END IF;
7902 END IF;
7903 END LOOP;
7904
7905 l(' END LOOP;');
7906 l(' log (''Done''); ');
7907 l('');
7908 l(' l_st := 1; ');
7909 l(' l_en := H_ORG_CONTACT_ID.COUNT; ');
7910 l('');
7911 l(' IF p_operation = ''C'' THEN ');
7912 l(' BEGIN ');
7913 l(' log (''Inserting Data into HZ_STAGED_CONTACTS...'',FALSE); ');
7914 l(' FORALL I in l_st..l_en SAVE EXCEPTIONS ');
7915 l(' INSERT INTO HZ_STAGED_CONTACTS (');
7916 l(' ORG_CONTACT_ID');
7917 l(' ,PARTY_ID');
7918 l(' ,STATUS_FLAG '); --Propagating Bug 4299785 fix to sync modifications
7919 FOR I IN 1..255 LOOP
7920 IF l_forall_list(I) <> 'N' THEN
7921 l(' ,TX'||I);
7922 END IF;
7923 END LOOP;
7924 l(' ) VALUES (');
7925 l(' H_ORG_CONTACT_ID(I)');
7926 l(' ,H_C_PARTY_ID(I)');
7927 l(' ,H_STATUS(I)'); --Propagating Bug 4299785 fix to sync modifications
7928
7929 FOR I IN 1..255 LOOP
7930 IF l_forall_list(I) <> 'N' THEN
7931 l(' ,decode(H_TX'||I||'(I),null,H_TX'||I||'(I),H_TX'||I||'(I)||'' '')');
7932 END IF;
7933 END LOOP;
7934 l(' );');
7935 l(' log (''Done''); ');
7936 l(' EXCEPTION WHEN bulk_errors THEN ');
7937 l(' l_err_count := SQL%BULK_EXCEPTIONS.COUNT; ');
7938 l(' FOR indx IN 1..l_err_count LOOP ');
7939 l(' l_err_index := SQL%BULK_EXCEPTIONS(indx).ERROR_INDEX; ');
7940 l(' l_sql_errm := sqlerrm(-SQL%BULK_EXCEPTIONS(indx).ERROR_CODE); ');
7941 -- SCHITRAP: Bug:5357970 - Error code is a number. Oracle error for ''DUP_VAL_ON_INDEX'' is ORA-00001
7942 --l(' IF (SQL%BULK_EXCEPTIONS(indx).ERROR_CODE) = ''DUP_VAL_ON_INDEX'' THEN ');
7943 l(' IF (instr(l_sql_errm,''ORA-00001'')>0) THEN ');
7944 l(' log (''Exception DUP_VAL_ON_INDEX occured while inserting a Contact with ORG_CONTACT_ID - ''||H_ORG_CONTACT_ID(l_err_index)); ');
7945 l(' DELETE FROM HZ_DQM_SYNC_INTERFACE WHERE ENTITY=''CONTACTS'' AND OPERATION=''C'' AND RECORD_ID=H_ORG_CONTACT_ID(l_err_index); ');
7946 l(' ELSE ');
7947 l(' IF p_bulk_sync_type = ''DQM_SYNC'' THEN ');
7948 l(' UPDATE hz_dqm_sync_interface ');
7949 l(' SET error_data = l_sql_errm ');
7950 l(' ,staged_flag = decode (error_data, NULL, ''N'', ''E'') ');
7951 l(' WHERE rowid = H_ROWID(l_err_index); ');
7952 l(' ELSIF p_bulk_sync_type = ''IMPORT_SYNC'' THEN ');
7953 l(' -- Insert the Error Record into HZ_DQM_SYNC_INTERFACE table ');
7954 l(' insert_dqm_sync_error_rec(H_C_PARTY_ID(l_err_index), H_ORG_CONTACT_ID(l_err_index), NULL, NULL, ''CONTACTS'', p_operation, ''E'', ''N'', l_sql_errm); ');
7955 l(' END IF; ');
7956 l(' END IF; ');
7957 l(' END LOOP; ');
7958 l(' END; ');
7959 l(' ELSIF p_operation = ''U'' THEN ');
7960 l(' BEGIN ');
7961 l(' log (''Updating Data in HZ_STAGED_CONTACTS...'',FALSE); ');
7962 l(' FORALL I in l_st..l_en SAVE EXCEPTIONS ');
7963 l(' UPDATE HZ_STAGED_CONTACTS SET ');
7964 l(' concat_col = concat_col');
7965 l(' ,status_flag = H_STATUS(I)'); --Propagating Bug 4299785 fix to sync modifications
7966
7967 FOR I IN 1..255 LOOP
7968 IF l_forall_list(I) <> 'N' THEN
7969 IF (is_first) THEN
7970 is_first := false;
7971 l(' ,TX'||I||'=decode(H_TX'||I||'(I),null,H_TX'||I||'(I),H_TX'||I||'(I)||'' '')');
7972 ELSE
7973 l(' ,TX'||I||'=decode(H_TX'||I||'(I),null,H_TX'||I||'(I),H_TX'||I||'(I)||'' '')');
7974 END IF;
7975 END IF;
7976 END LOOP;
7977 l(' WHERE ORG_CONTACT_ID=H_ORG_CONTACT_ID(I);');
7978 l(' log (''Done''); ');
7979 l(' EXCEPTION WHEN bulk_errors THEN ');
7980 l(' l_err_count := SQL%BULK_EXCEPTIONS.COUNT; ');
7981 l(' FOR indx IN 1..l_err_count LOOP ');
7982 l(' l_err_index := SQL%BULK_EXCEPTIONS(indx).ERROR_INDEX; ');
7983 l(' l_sql_errm := sqlerrm(-SQL%BULK_EXCEPTIONS(indx).ERROR_CODE); ');
7984 -- SCHITRAP: Bug:5357970 - Error code is a number. Oracle error for ''DUP_VAL_ON_INDEX'' is ORA-00001
7985 --l(' IF (SQL%BULK_EXCEPTIONS(indx).ERROR_CODE) = ''DUP_VAL_ON_INDEX'' THEN ');
7986 l(' IF (instr(l_sql_errm,''ORA-00001'')>0) THEN ');
7987 l(' log (''Exception DUP_VAL_ON_INDEX occured while inserting a Contact with ORG_CONTACT_ID - ''||H_ORG_CONTACT_ID(l_err_index)); ');
7988 l(' DELETE FROM HZ_DQM_SYNC_INTERFACE WHERE ENTITY=''CONTACTS'' AND OPERATION=''U'' AND RECORD_ID=H_ORG_CONTACT_ID(l_err_index); ');
7989 l(' ELSE ');
7993 l(' ,staged_flag = decode (error_data, NULL, ''N'', ''E'') ');
7990 l(' IF p_bulk_sync_type = ''DQM_SYNC'' THEN ');
7991 l(' UPDATE hz_dqm_sync_interface ');
7992 l(' SET error_data = l_sql_errm ');
7994 l(' WHERE rowid = H_ROWID(l_err_index); ');
7995 l(' ELSIF p_bulk_sync_type = ''IMPORT_SYNC'' THEN ');
7996 l(' -- Insert the Error Record into HZ_DQM_SYNC_INTERFACE table ');
7997 l(' insert_dqm_sync_error_rec(H_C_PARTY_ID(l_err_index), H_ORG_CONTACT_ID(l_err_index), NULL, NULL, ''CONTACTS'', p_operation, ''E'', ''N'', l_sql_errm); ');
7998 l(' END IF; ');
7999 l(' END IF; ');
8000 l(' END LOOP; ');
8001 l(' END; ');
8002 l(' END IF;');
8003 l('');
8004 l(' IF l_last_fetch THEN');
8005 l(' -- Update HZ_STAGED_PARTIES, if corresponding child entity records ');
8006 l(' -- CONTACTS (in this case), have been inserted/updated ');
8007 l('');
8008 l(' log (''Updating D_CT column to SYNC in HZ_STAGED_PARTIES table for all related records...'',FALSE); ');
8009 l(' --Fix for bug 5048604, to update concat_col during update of denorm column ');
8010 l(' FORALL I IN H_ORG_CONTACT_ID.FIRST..H_ORG_CONTACT_ID.LAST ');
8011 l(' UPDATE HZ_STAGED_PARTIES set ');
8012 l(' D_CT = ''SYNC'' ');
8013 l(' ,CONCAT_COL = CONCAT_COL ');
8014 l(' WHERE PARTY_ID = H_C_PARTY_ID(I); ');
8015 l(' log (''Done''); ');
8016 l('');
8017 l(' -- REPURI. Bug 4884742. ');
8018 l(' -- Bulk Insert of Import Contacts into Shadow Sync Interface table ');
8019 l(' -- if Shadow Staging has already run and completed successfully ');
8020 l(' IF ((p_bulk_sync_type = ''IMPORT_SYNC'') AND ');
8021 l(' (HZ_DQM_SYNC.is_shadow_staging_complete)) THEN ');
8022 l(' BEGIN ');
8023 l(' -- REPURI. Bug 4968126. ');
8024 l(' -- Using the Merge instead of Insert statement ');
8025 l(' -- so that duplicate records dont get inserted. ');
8026 l(' log (''Merging data into HZ_DQM_SH_SYNC_INTERFACE...'',FALSE); ');
8027 l(' FORALL I in l_st..l_en ');
8028 l(' MERGE INTO hz_dqm_sh_sync_interface S ');
8029 l(' USING ( ');
8030 l(' SELECT ');
8031 l(' H_C_PARTY_ID(I) AS party_id ');
8032 l(' ,H_ORG_CONTACT_ID(I) AS record_id ');
8033 l(' FROM dual ) T ');
8034 l(' ON (S.entity = ''CONTACTS'' AND ');
8035 l(' S.party_id = T.party_id AND ');
8036 l(' S.record_id = T.record_id AND ');
8037 l(' S.staged_flag <> ''E'') ');
8038 l(' WHEN NOT MATCHED THEN ');
8039 l(' INSERT ( ');
8040 l(' PARTY_ID, ');
8041 l(' RECORD_ID, ');
8042 l(' PARTY_SITE_ID, ');
8043 l(' ORG_CONTACT_ID, ');
8044 l(' ENTITY, ');
8045 l(' OPERATION, ');
8046 l(' STAGED_FLAG, ');
8047 l(' REALTIME_SYNC_FLAG, ');
8048 l(' CREATED_BY, ');
8049 l(' CREATION_DATE, ');
8050 l(' LAST_UPDATE_LOGIN, ');
8051 l(' LAST_UPDATE_DATE, ');
8052 l(' LAST_UPDATED_BY, ');
8053 l(' SYNC_INTERFACE_NUM ');
8054 l(' ) VALUES ( ');
8055 l(' H_C_PARTY_ID(I), ');
8056 l(' H_ORG_CONTACT_ID(I), ');
8057 l(' NULL, ');
8058 l(' NULL, ');
8059 l(' ''CONTACTS'', ');
8060 l(' p_operation, ');
8061 l(' ''N'', ');
8062 l(' ''N'', ');
8063 l(' hz_utility_pub.created_by, ');
8064 l(' hz_utility_pub.creation_date, ');
8065 l(' hz_utility_pub.last_update_login, ');
8066 l(' hz_utility_pub.last_update_date, ');
8067 l(' hz_utility_pub.user_id, ');
8068 l(' HZ_DQM_SH_SYNC_INTERFACE_S.nextval ');
8069 l(' ); ');
8070 l(' log (''Done''); ');
8071 l(' EXCEPTION WHEN OTHERS THEN ');
8072 l(' log (''Exception occured while inserting data into HZ_DQM_SH_SYNC_INTERFACE Table''); ');
8073 l(' log (''Eror Message is - ''|| sqlerrm); ');
8074 l(' END; ');
8075 l(' END IF; ');
8076 l('');
8077 l(' FND_CONCURRENT.AF_Commit;');
8078 l(' EXIT;');
8079 l(' END IF;');
8080 l('');
8081 l(' FND_CONCURRENT.AF_Commit;');
8082 l('');
8083 l(' END LOOP;');
8084 l(' log (''End Synchronizing Contacts''); ');
8085 l(' END;');
8086
8087 END;
8088
8089 PROCEDURE generate_contact_query_proc IS
8090 cur_col_num NUMBER := 1;
8091
8092 TYPE coltab IS TABLE OF VARCHAR2(2000) INDEX BY BINARY_INTEGER;
8093
8094 l_select coltab;
8095 FIRST BOOLEAN := FALSE;
8096
8097 l_forall_list coltab;
8098 l_custom_list coltab;
8099 l_mincol_list coltab;
8100 l_min_colnum NUMBER;
8101 idx NUMBER :=1;
8102 is_first boolean := true;
8103
8104 -- VJN Introduced for conditional word replacements
8105 l_cond_attrib_list coltab ;
8106 l_idx number ;
8107 l_attr_name varchar2(2000); --Bug No: 4279469
8108 l_pp_attr_name varchar2(2000); --Bug No: 4279469
8112 l(' PROCEDURE insert_stage_contacts IS ');
8109 l_oc_attr_name varchar2(2000); --Bug No: 4279469
8110 BEGIN
8111 l('');
8113 l(' l_limit NUMBER := ' || g_batch_size || ';');
8114 l(' l_last_fetch BOOLEAN := FALSE;');
8115 l(' l_denorm VARCHAR2(2000);');
8116 l(' l_st number; ');
8117 l(' l_en number; ');
8118 FOR ATTRS IN (SELECT a.ATTRIBUTE_ID,
8119 a.ATTRIBUTE_NAME,
8120 a.SOURCE_TABLE,
8121 a.CUSTOM_ATTRIBUTE_PROCEDURE,
8122 f.PROCEDURE_NAME,
8123 f.STAGED_ATTRIBUTE_COLUMN,
8124 to_number(substrb(STAGED_ATTRIBUTE_COLUMN, 3)) COLNUM,
8125 nvl(lkp.tag,'C') column_data_type
8126 FROM HZ_TRANS_ATTRIBUTES_VL a, HZ_TRANS_FUNCTIONS_VL f,FND_LOOKUP_VALUES_VL lkp --Bug No: 4279469
8127 WHERE ENTITY_NAME = 'CONTACTS'
8128 AND nvl(f.ACTIVE_FLAG,'Y') = 'Y'
8129 AND f.ATTRIBUTE_ID = a.ATTRIBUTE_ID
8130 AND lkp.LOOKUP_TYPE='CONTACT_LOGICAL_ATTRIB_LIST'
8131 AND lkp.LOOKUP_CODE = a.ATTRIBUTE_NAME
8132 ORDER BY COLNUM) LOOP
8133 IF cur_col_num<ATTRS.COLNUM THEN
8134 FOR I in cur_col_num..ATTRS.COLNUM-1 LOOP
8135 l_mincol_list(I) := 'N';
8136 l_forall_list(I) := 'N';
8137 l_custom_list(I) := 'N';
8138 END LOOP;
8139 END IF;
8140 cur_col_num:=ATTRS.COLNUM+1;
8141 IF has_trx_context(ATTRS.PROCEDURE_NAME) THEN
8142 l_forall_list(ATTRS.COLNUM) := ATTRS.PROCEDURE_NAME || '(H_TX'||ATTRS.COLNUM||'(I),NULL, ''' || ATTRS.ATTRIBUTE_NAME || ''',''CONTACTS'',''STAGE'')';
8143 ELSE
8144 l_forall_list(ATTRS.COLNUM) := ATTRS.PROCEDURE_NAME || '(H_TX'||ATTRS.COLNUM||'(I),NULL, ''' || ATTRS.ATTRIBUTE_NAME || ''',''CONTACTS'')';
8145 END IF;
8146
8147 SELECT min(to_number(substrb(STAGED_ATTRIBUTE_COLUMN, 3))) INTO l_min_colnum
8148 FROM HZ_TRANS_ATTRIBUTES_VL a, HZ_TRANS_FUNCTIONS_VL f
8149 WHERE ENTITY_NAME = 'CONTACTS'
8150 AND nvl(f.ACTIVE_FLAG,'Y') = 'Y'
8151 AND f.ATTRIBUTE_ID = a.ATTRIBUTE_ID
8152 AND a.ATTRIBUTE_NAME=ATTRS.ATTRIBUTE_NAME;
8153
8154 IF ATTRS.colnum>l_min_colnum THEN
8155 l_mincol_list(ATTRS.COLNUM) := 'N';
8156 IF has_trx_context(ATTRS.PROCEDURE_NAME) THEN
8157 l_forall_list(ATTRS.COLNUM) := ATTRS.PROCEDURE_NAME || '(H_TX'||l_min_colnum||'(I),NULL, ''' || ATTRS.ATTRIBUTE_NAME || ''',''CONTACTS'',''STAGE'')';
8158 ELSE
8159 l_forall_list(ATTRS.COLNUM) := ATTRS.PROCEDURE_NAME || '(H_TX'||l_min_colnum||'(I),NULL, ''' || ATTRS.ATTRIBUTE_NAME || ''',''CONTACTS'')';
8160 END IF;
8161
8162 ELSE
8163 l_mincol_list(ATTRS.COLNUM) := 'Y';
8164 END IF;
8165
8166 IF ATTRS.CUSTOM_ATTRIBUTE_PROCEDURE IS NULL THEN
8167 IF l_mincol_list(ATTRS.COLNUM) = 'Y' THEN
8168 -----Start of Bug No: 4279469----------
8169 l_attr_name := ATTRS.ATTRIBUTE_NAME;
8170 IF(ATTRS.column_data_type ='D') THEN
8171 l_pp_attr_name := 'TO_CHAR(pp.'||l_attr_name||',''DD-MON-YYYY'') '||l_attr_name;
8172 l_oc_attr_name := 'TO_CHAR(oc.'||l_attr_name||',''DD-MON-YYYY'') '||l_attr_name;
8173 l_attr_name := 'TO_CHAR(r.'||l_attr_name||',''DD-MON-YYYY'') '||l_attr_name;
8174 ELSE
8175 l_pp_attr_name := 'pp.'||l_attr_name;
8176 l_oc_attr_name := 'oc.'||l_attr_name;
8177 l_attr_name := 'r.'||l_attr_name;
8178 END IF;
8179 -----End of Bug No: 4279469------------
8180 IF ATTRS.SOURCE_TABLE='HZ_PERSON_PROFILES' THEN
8181 l_select(idx) := l_pp_attr_name;
8182 ELSIF ATTRS.SOURCE_TABLE='HZ_ORG_CONTACTS' THEN
8183 l_select(idx) := l_oc_attr_name;
8184 ELSIF ATTRS.SOURCE_TABLE='HZ_RELATIONSHIPS' THEN
8185 l_select(idx) := l_attr_name;
8186 END IF;
8187 ELSE
8188 l_select(idx) := 'N';
8189 END IF;
8190
8191 l_custom_list(ATTRS.COLNUM) := 'N';
8192 ELSE
8193 l_select(idx) := 'N';
8194 l_custom_list(ATTRS.COLNUM) := 'N';
8195 IF ATTRS.ATTRIBUTE_NAME = 'CONTACT_NAME' THEN
8196 IF l_mincol_list(ATTRS.COLNUM) = 'Y' THEN
8197 l_select(idx) := 'rtrim(pp.person_first_name || '' '' || pp.person_last_name)';
8198 END IF;
8199 ELSE
8200 IF l_mincol_list(ATTRS.COLNUM) = 'Y' THEN
8201 IF has_context(ATTRS.custom_attribute_procedure) THEN
8202 l_custom_list(ATTRS.COLNUM) := ATTRS.custom_attribute_procedure || '(H_ORG_CONTACT_ID(I),''CONTACTS'','''||ATTRS.ATTRIBUTE_NAME|| ''', ''STAGE'')';
8203 ELSE
8204 l_custom_list(ATTRS.COLNUM) := ATTRS.custom_attribute_procedure || '(H_ORG_CONTACT_ID(I), ''CONTACTS'','''||ATTRS.ATTRIBUTE_NAME|| ''')';
8205 END IF;
8206 END IF;
8207 END IF;
8208 END IF;
8209 idx := idx+1;
8210 -- VJN ADDED CODE FOR TRACKING CONDITION ATTRIBUTES AT THIS ENTITY LEVEL
8211 IF HZ_WORD_CONDITIONS_PKG.is_a_cond_attrib( ATTRS.attribute_id)
8212 THEN
8213 l_cond_attrib_list(ATTRS.COLNUM) := ATTRS.attribute_id ;
8214 END IF;
8215 END LOOP;
8216
8217 IF cur_col_num<=255 THEN--bug 5977628
8218 FOR I in cur_col_num..255 LOOP
8219 l_mincol_list(I) := 'N';
8220 l_forall_list(I) := 'N';
8221 l_custom_list(I) := 'N';
8222 END LOOP;
8223 END IF;
8224
8225 l(' CURSOR contact_cur IS');
8226 l(' SELECT ');
8230 IF l_select(I) <> 'N' THEN
8227 l(' /*+ ORDERED USE_NL(R OC PP)*/');
8228 l(' oc.ORG_CONTACT_ID , r.OBJECT_ID, r.PARTY_ID, g.PARTY_INDEX, r.STATUS '); -- Bug No:4299785
8229 FOR I in 1..l_select.COUNT LOOP
8231 l(' ,' || l_select(I));
8232 END IF;
8233 END LOOP;
8234 l(' FROM HZ_DQM_STAGE_GT g, HZ_RELATIONSHIPS r,');
8235 l(' HZ_ORG_CONTACTS oc, HZ_PERSON_PROFILES pp');
8236 l(' WHERE oc.party_relationship_id = r.relationship_id ');
8237 l(' AND r.object_id = g.party_id ');
8238 l(' AND r.subject_id = pp.party_id ');
8239 l(' AND r.SUBJECT_TABLE_NAME = ''HZ_PARTIES''');
8240 l(' AND r.OBJECT_TABLE_NAME = ''HZ_PARTIES''');
8241 l(' AND DIRECTIONAL_FLAG= ''F'' ');
8242 l(' AND pp.effective_end_date is NULL ');
8243 l(' AND (oc.status is null OR oc.status = ''A'' or oc.status = ''I'')');
8244 l(' AND (r.status is null OR r.status = ''A'' or r.status = ''I'');');
8245 l('');
8246 l(' BEGIN');
8247 l(' OPEN contact_cur;');
8248 l(' LOOP');
8249 l(' FETCH contact_cur BULK COLLECT INTO');
8250 l(' H_ORG_CONTACT_ID');
8251 l(' ,H_C_PARTY_ID');
8252 l(' ,H_R_PARTY_ID');
8253 l(' ,H_PARTY_INDEX');
8254 l(' ,H_STATUS'); --Bug No: 4299785
8255
8256 FOR I IN 1..255 LOOP
8257 IF l_forall_list(I) <> 'N' AND l_mincol_list(I) = 'Y' AND
8258 l_custom_list(I) = 'N' THEN
8259 l(' ,H_TX'||I);
8260 END IF;
8261 END LOOP;
8262 l(' LIMIT l_limit;');
8263 l('');
8264 l(' IF contact_cur%NOTFOUND THEN');
8265 l(' l_last_fetch:=TRUE;');
8266 l(' END IF;');
8267
8268 l(' IF H_C_PARTY_ID.COUNT=0 AND l_last_fetch THEN');
8269 l(' EXIT;');
8270 l(' END IF;');
8271
8272 l(' FOR I in H_C_PARTY_ID.FIRST..H_C_PARTY_ID.LAST LOOP');
8273
8274
8275 -- VJN INTRODUCED CODE FOR GENERATING THE POPULATION
8276 -- OF THE GLOBAL CONDITION RECORD
8277 l_idx := l_cond_attrib_list.FIRST ;
8278 IF l_idx IS NOT NULL
8279 THEN
8280 l('----------- SETTING GLOBAL CONDITION RECORD AT THE CONTACT LEVEL ---------');
8281 END IF ;
8282
8283
8284 WHILE l_cond_attrib_list.EXISTS(l_idx)
8285 LOOP
8286
8287 l(' HZ_WORD_CONDITIONS_PKG.set_gbl_condition_rec ('||l_cond_attrib_list(l_idx)||','||'H_TX'||l_idx||'(I));');
8288 l_idx := l_idx+1;
8289 END LOOP;
8290
8291 l('');
8292
8293 FOR I IN 1..255 LOOP
8294 IF l_forall_list(I) <> 'N' THEN
8295 IF l_custom_list(I) <> 'N' AND l_mincol_list(I) = 'Y' THEN
8296 l(' H_TX'||I||'(I):='||l_custom_list(I)||';');
8297 END IF;
8298 END IF;
8299 END LOOP;
8300 FOR I IN 1..255 LOOP
8301 IF l_forall_list(I) <> 'N' THEN
8302 IF l_mincol_list(I) <> 'Y' THEN
8303 l(' H_TX'||I||'(I):='||l_forall_list(I)||';');
8304 END IF;
8305 END IF;
8306 END LOOP;
8307 FOR I IN 1..255 LOOP
8308 IF l_forall_list(I) <> 'N' THEN
8309 IF l_mincol_list(I) = 'Y' THEN
8310 l(' H_TX'||I||'(I):='||l_forall_list(I)||';');
8311 END IF;
8312 END IF;
8313 END LOOP;
8314
8315 FIRST := TRUE;
8316 FOR ATTRS IN (SELECT a.ATTRIBUTE_ID,
8317 a.ATTRIBUTE_NAME,
8318 a.SOURCE_TABLE,
8319 a.CUSTOM_ATTRIBUTE_PROCEDURE,
8320 f.PROCEDURE_NAME,
8321 f.STAGED_ATTRIBUTE_COLUMN,
8322 to_number(substrb(STAGED_ATTRIBUTE_COLUMN, 3)) COLNUM
8323 FROM HZ_TRANS_ATTRIBUTES_VL a, HZ_TRANS_FUNCTIONS_VL f
8324 WHERE ENTITY_NAME = 'CONTACTS'
8325 AND nvl(f.ACTIVE_FLAG,'Y') = 'Y'
8326 AND f.ATTRIBUTE_ID = a.ATTRIBUTE_ID
8327 AND nvl(a.DENORM_FLAG,'N') = 'Y') LOOP
8328 IF FIRST THEN
8329 -- Fix for bug 4872997
8330 -- Wrapping the 'l_denorm' portion of code into a begin-excpetion block
8331 -- and setting the denorm value to 'SYNC' if sqlcode-6502 error occurs
8332 l(' BEGIN ');
8333 l(' l_denorm := H_TX'||ATTRS.COLNUM||'(I)');
8334 FIRST := FALSE;
8335 ELSE
8336 l(' ||'' '' || H_TX'||ATTRS.COLNUM||'(I)');
8337 END IF;
8338 END LOOP;
8339 IF NOT FIRST THEN
8340 l(' ;');
8341 l(' IF H_CT_DEN(H_PARTY_INDEX(I)) = ''SYNC'' THEN');
8342 l(' NULL;');
8343 l(' ELSIF lengthb(H_CT_DEN(H_PARTY_INDEX(I)))+lengthb(l_denorm)<2000 THEN');
8344 l(' IF H_CT_DEN(H_PARTY_INDEX(I)) IS NULL OR instrb(H_CT_DEN(H_PARTY_INDEX(I)),l_denorm)= 0 THEN');
8345 l(' H_CT_DEN(H_PARTY_INDEX(I)) := H_CT_DEN(H_PARTY_INDEX(I)) || '' '' || l_denorm;');
8346 l(' END IF;');
8347 l(' ELSE');
8348 l(' H_CT_DEN(H_PARTY_INDEX(I)) := ''SYNC'';');
8349 l(' END IF;');
8350 l(' EXCEPTION WHEN OTHERS THEN ');
8351 l(' IF SQLCODE=-6502 THEN');
8352 l(' H_CT_DEN(H_PARTY_INDEX(I)) := ''SYNC'';');
8353 l(' END IF; ');
8354 l(' END; ');
8355
8356 END IF;
8357
8358 l(' END LOOP;');
8359 l(' l_st := 1; ');
8363 l(' FORALL I in l_st..l_en');
8360 l(' l_en := H_C_PARTY_ID.COUNT; ');
8361 l(' LOOP ');
8362 l(' BEGIN ');
8364 l(' INSERT INTO HZ_STAGED_CONTACTS (');
8365 l(' ORG_CONTACT_ID');
8366 l(' ,PARTY_ID');
8367 l(' ,STATUS_FLAG '); --Bug No: 4299785
8368
8369 FOR I IN 1..255 LOOP
8370 IF l_forall_list(I) <> 'N' THEN
8371 l(' , TX'||I);
8372 END IF;
8373 END LOOP;
8374 l(' ) VALUES (');
8375 l(' H_ORG_CONTACT_ID(I)');
8376 l(' ,H_C_PARTY_ID(I)');
8377 l(' ,H_STATUS(I)'); --Bug No: 4299785
8378
8379 FOR I IN 1..255 LOOP
8380 IF l_forall_list(I) <> 'N' THEN
8381 l(' , decode(H_TX'||I||'(I),null,H_TX'||I||'(I),H_TX'||I||'(I)||'' '')');
8382 END IF;
8383 END LOOP;
8384 l(' );');
8385 l(' EXIT; ');
8386 l(' EXCEPTION WHEN OTHERS THEN ');
8387 l(' l_st:= l_st+SQL%ROWCOUNT+1;');
8388 l(' END; ');
8389 l(' END LOOP; ');
8390 l(' FORALL I in H_C_PARTY_ID.FIRST..H_C_PARTY_ID.LAST ');
8391 l(' INSERT INTO HZ_DQM_STAGE_GT(PARTY_ID,OWNER_ID,ORG_CONTACT_ID,PARTY_INDEX) ');
8392 l(' SELECT H_C_PARTY_ID(I), H_R_PARTY_ID(I), H_ORG_CONTACT_ID(I), H_PARTY_INDEX(I)');
8393 l(' FROM DUAL WHERE H_R_PARTY_ID(I) IS NOT NULL;');
8394 l(' IF l_last_fetch THEN');
8395 l(' EXIT;');
8396 l(' END IF;');
8397 l(' END LOOP;');
8398 l(' CLOSE contact_cur;');
8399 l(' END;');
8400
8401 l('');
8402 l(' PROCEDURE sync_single_contact (');
8403 l(' p_org_contact_id NUMBER,');
8404 l(' p_operation VARCHAR2) IS');
8405 l('');
8406 l(' l_tryins BOOLEAN;');
8407 l(' l_tryupd BOOLEAN;');
8408 l(' BEGIN');
8409 l(' SELECT oc.ORG_CONTACT_ID, d.PARTY_ID, r.STATUS '); --Bug No: 4299785
8410 FOR I in 1..l_select.COUNT LOOP
8411 IF l_select(I) <> 'N' THEN
8412 l(' ,' || l_select(I));
8413 END IF;
8414 END LOOP;
8415 l(' INTO H_ORG_CONTACT_ID(1), H_PARTY_ID(1), H_STATUS(1)'); --Bug No: 4299785
8416 FOR I IN 1..255 LOOP
8417 IF l_forall_list(I) <> 'N' AND l_mincol_list(I) = 'Y' AND
8418 l_custom_list(I) = 'N' THEN
8419 l(' , H_TX'||I||'(1)');
8420 END IF;
8421 END LOOP;
8422
8423 l(' FROM HZ_ORG_CONTACTS oc, HZ_DQM_SYNC_INTERFACE d, ');
8424 l(' HZ_RELATIONSHIPS r, HZ_PERSON_PROFILES pp');
8425 l(' WHERE d.ENTITY = ''CONTACTS'' ');
8426 l(' AND oc.org_contact_id = p_org_contact_id');
8427 l(' AND oc.org_contact_id = d.RECORD_ID');
8428 l(' AND oc.party_relationship_id = r.relationship_id ');
8429 l(' AND r.subject_id = pp.party_id ');
8430 l(' AND r.SUBJECT_TABLE_NAME = ''HZ_PARTIES''');
8431 l(' AND r.OBJECT_TABLE_NAME = ''HZ_PARTIES''');
8432 l(' AND DIRECTIONAL_FLAG= ''F'' ');
8433 l(' AND pp.effective_end_date is NULL ');
8434 l(' AND (oc.status is null OR oc.status = ''A'' or oc.status = ''I'')');
8435 l(' AND (r.status is null OR r.status = ''A'' or r.status = ''I'')');
8436 l(' AND ROWNUM=1;');
8437
8438 -- VJN INTRODUCED CODE FOR GENERATING THE POPULATION
8439 -- OF THE GLOBAL CONDITION RECORD
8440
8441 l_idx := l_cond_attrib_list.FIRST ;
8442 IF l_idx IS NOT NULL
8443 THEN
8444 l('----------- SETTING GLOBAL CONDITION RECORD AT THE CONTACT LEVEL ---------');
8445 END IF ;
8446
8447
8448 WHILE l_cond_attrib_list.EXISTS(l_idx)
8449 LOOP
8450
8451 l(' HZ_WORD_CONDITIONS_PKG.set_gbl_condition_rec ('||l_cond_attrib_list(l_idx)||','||'H_TX'||l_idx||'(1));');
8452 l_idx := l_idx+1;
8453 END LOOP;
8454 FOR I IN 1..255 LOOP
8455 IF l_forall_list(I) <> 'N' THEN
8456 IF l_custom_list(I) <> 'N' AND l_mincol_list(I) = 'Y' THEN
8457 l(' H_TX'||I||'(1):='||replace(l_custom_list(I),'(I)','(1)')||';');
8458 END IF;
8459 END IF;
8460 END LOOP;
8461 FOR I IN 1..255 LOOP
8462 IF l_forall_list(I) <> 'N' THEN
8463 IF l_mincol_list(I) <> 'Y' THEN
8464 l(' H_TX'||I||'(1):='||replace(l_forall_list(I),'(I)','(1)')||';');
8465 END IF;
8466 END IF;
8467 END LOOP;
8468 FOR I IN 1..255 LOOP
8469 IF l_forall_list(I) <> 'N' THEN
8470 IF l_mincol_list(I) = 'Y' THEN
8471 l(' H_TX'||I||'(1):='||replace(l_forall_list(I),'(I)','(1)')||';');
8472 END IF;
8473 END IF;
8474 END LOOP;
8475
8476 l(' l_tryins := FALSE;');
8477 l(' l_tryupd := FALSE;');
8478 l(' IF p_operation=''C'' THEN');
8479 l(' l_tryins:=TRUE;');
8480 l(' ELSE ');
8481 l(' l_tryupd:=TRUE;');
8482 l(' END IF;');
8483 l(' WHILE (l_tryins OR l_tryupd) LOOP');
8484 l(' IF l_tryins THEN');
8485 l(' BEGIN');
8486 l(' l_tryins:=FALSE;');
8487 l(' INSERT INTO HZ_STAGED_CONTACTS (');
8488 l(' ORG_CONTACT_ID');
8489 l(' ,PARTY_ID');
8490 l(' ,STATUS_FLAG '); --Bug No: 4299785
8491
8492 FOR I IN 1..255 LOOP
8493 IF l_forall_list(I) <> 'N' THEN
8494 l(' , TX'||I);
8495 END IF;
8496 END LOOP;
8500 l(' , H_STATUS(1)'); --Bug No: 4299785
8497 l(' ) VALUES (');
8498 l(' H_ORG_CONTACT_ID(1)');
8499 l(' , H_PARTY_ID(1)');
8501
8502 FOR I IN 1..255 LOOP
8503 IF l_forall_list(I) <> 'N' THEN
8504 l(' , decode(H_TX'||I||'(1),null,H_TX'||I||'(1),H_TX'||I||'(1)||'' '')');
8505 END IF;
8506 END LOOP;
8507 l(' );');
8508 l(' EXCEPTION');
8509 l(' WHEN DUP_VAL_ON_INDEX THEN');
8510 l(' IF p_operation=''C'' THEN');
8511 l(' l_tryupd:=TRUE;');
8512 l(' END IF;');
8513 l(' END;');
8514 l(' END IF;');
8515 l(' IF l_tryupd THEN');
8516 l(' BEGIN');
8517 l(' l_tryupd:=FALSE;');
8518 l(' UPDATE HZ_STAGED_CONTACTS SET ');
8519 l(' concat_col = concat_col');
8520 l(' ,status_flag = H_STATUS(1)'); --Bug No: 4299785
8521
8522 FOR I IN 1..255 LOOP
8523 IF l_forall_list(I) <> 'N' THEN
8524 IF (is_first) THEN
8525 is_first := false;
8526 l(' ,TX'||I||'=decode(H_TX'||I||'(1),null,H_TX'||I||'(1),H_TX'||I||'(1)||'' '')');
8527 ELSE
8528 l(' ,TX'||I||'=decode(H_TX'||I||'(1),null,H_TX'||I||'(1),H_TX'||I||'(1)||'' '')');
8529 END IF;
8530 END IF;
8531 END LOOP;
8532 l(' WHERE ORG_CONTACT_ID=H_ORG_CONTACT_ID(1);');
8533 l(' IF SQL%ROWCOUNT=0 AND p_operation=''U'' THEN');
8534 l(' l_tryins := TRUE;');
8535 l(' END IF;');
8536 l(' EXCEPTION ');
8537 l(' WHEN NO_DATA_FOUND THEN');
8538 l(' IF p_operation=''U'' THEN');
8539 l(' l_tryins := TRUE;');
8540 l(' END IF;');
8541 l(' END;');
8542 l(' END IF;');
8543 l(' END LOOP;');
8544 l(' --Fix for bug 5048604, to update concat_col during update of denorm column ');
8545 l(' UPDATE HZ_STAGED_PARTIES set');
8546 l(' D_CT = ''SYNC''');
8547 l(' ,CONCAT_COL = CONCAT_COL ');
8548 l(' WHERE PARTY_ID = H_PARTY_ID(1);');
8549 l(' END;');
8550
8551 -- VJN Introduced for SYNC. This is the online version, which would be used to
8552 -- directly insert into the staging tables from SYNC.
8553 is_first := true ;
8554 l('');
8555 l(' PROCEDURE sync_single_contact_online (');
8556 l(' p_org_contact_id NUMBER,');
8557 l(' p_operation VARCHAR2) IS');
8558 l('');
8559 l(' l_tryins BOOLEAN;');
8560 l(' l_tryupd BOOLEAN;');
8561 l(' l_party_id NUMBER; ');
8562 l(' l_sql_err_message VARCHAR2(2000); ');
8563 l('');
8564 l(' BEGIN');
8565 l('');
8566 l(' l_party_id := -1; ');
8567 l('');
8568 l(' SELECT r.object_id INTO l_party_id ');
8569 l(' FROM HZ_ORG_CONTACTS oc, HZ_RELATIONSHIPS r ');
8570 l(' WHERE oc.org_contact_id = p_org_contact_id ');
8571 l(' AND oc.party_relationship_id = r.relationship_id ');
8572 l(' AND r.SUBJECT_TABLE_NAME = ''HZ_PARTIES'' ');
8573 l(' AND r.OBJECT_TABLE_NAME = ''HZ_PARTIES'' ');
8574 l(' AND subject_type = ''PERSON'' ');
8575 l(' AND DIRECTIONAL_FLAG = ''F'' ');
8576 l(' AND (oc.status is null OR oc.status = ''A'' or oc.status = ''I'') ');
8577 l(' AND (r.status is null OR r.status = ''A'' or r.status = ''I'') ; ');
8578 l('');
8579 l(' SELECT oc.ORG_CONTACT_ID, l_party_id, r.status '); --Bug No: 4299785
8580 FOR I in 1..l_select.COUNT LOOP
8581 IF l_select(I) <> 'N' THEN
8582 l(' ,' || l_select(I));
8583 END IF;
8584 END LOOP;
8585 l(' INTO H_ORG_CONTACT_ID(1), H_PARTY_ID(1), H_STATUS(1)'); --Bug No: 4299785
8586 FOR I IN 1..255 LOOP
8587 IF l_forall_list(I) <> 'N' AND l_mincol_list(I) = 'Y' AND
8588 l_custom_list(I) = 'N' THEN
8589 l(' ,H_TX'||I||'(1)');
8590 END IF;
8591 END LOOP;
8592
8593 l(' FROM HZ_ORG_CONTACTS oc, ');
8594 l(' HZ_RELATIONSHIPS r, HZ_PERSON_PROFILES pp');
8595 l(' WHERE ');
8596 l(' oc.org_contact_id = p_org_contact_id');
8597 l(' AND oc.party_relationship_id = r.relationship_id ');
8598 l(' AND r.subject_id = pp.party_id ');
8599 l(' AND r.SUBJECT_TABLE_NAME = ''HZ_PARTIES''');
8600 l(' AND r.OBJECT_TABLE_NAME = ''HZ_PARTIES''');
8601 l(' AND DIRECTIONAL_FLAG = ''F'' ');
8602 l(' AND pp.effective_end_date is NULL ');
8603 l(' AND (oc.status is null OR oc.status = ''A'' or oc.status = ''I'')');
8604 l(' AND (r.status is null OR r.status = ''A'' or r.status = ''I'')');
8605 l(' AND ROWNUM=1;');
8606 l('');
8607 -- VJN INTRODUCED CODE FOR GENERATING THE POPULATION
8608 -- OF THE GLOBAL CONDITION RECORD
8609
8610 l_idx := l_cond_attrib_list.FIRST ;
8611 IF l_idx IS NOT NULL
8612 THEN
8613 l(' ---- SETTING GLOBAL CONDITION RECORD AT THE CONTACT LEVEL ----');
8614 END IF ;
8615
8616 WHILE l_cond_attrib_list.EXISTS(l_idx)
8617 LOOP
8618 l(' HZ_WORD_CONDITIONS_PKG.set_gbl_condition_rec ('||l_cond_attrib_list(l_idx)||','||'H_TX'||l_idx||'(1));');
8619 l_idx := l_idx+1;
8620 END LOOP;
8621 FOR I IN 1..255 LOOP
8622 IF l_forall_list(I) <> 'N' THEN
8623 IF l_custom_list(I) <> 'N' AND l_mincol_list(I) = 'Y' THEN
8627 END LOOP;
8624 l(' H_TX'||I||'(1):='||replace(l_custom_list(I),'(I)','(1)')||';');
8625 END IF;
8626 END IF;
8628 FOR I IN 1..255 LOOP
8629 IF l_forall_list(I) <> 'N' THEN
8630 IF l_mincol_list(I) <> 'Y' THEN
8631 l(' H_TX'||I||'(1):='||replace(l_forall_list(I),'(I)','(1)')||';');
8632 END IF;
8633 END IF;
8634 END LOOP;
8635 FOR I IN 1..255 LOOP
8636 IF l_forall_list(I) <> 'N' THEN
8637 IF l_mincol_list(I) = 'Y' THEN
8638 l(' H_TX'||I||'(1):='||replace(l_forall_list(I),'(I)','(1)')||';');
8639 END IF;
8640 END IF;
8641 END LOOP;
8642
8643 l('');
8644 l(' l_tryins := FALSE;');
8645 l(' l_tryupd := FALSE;');
8646 l('');
8647 l(' IF p_operation=''C'' THEN');
8648 l(' l_tryins:=TRUE;');
8649 l(' ELSE ');
8650 l(' l_tryupd:=TRUE;');
8651 l(' END IF;');
8652 l('');
8653 l(' WHILE (l_tryins OR l_tryupd) LOOP');
8654 l(' IF l_tryins THEN');
8655 l(' BEGIN');
8656 l(' l_tryins:=FALSE;');
8657 l(' INSERT INTO HZ_STAGED_CONTACTS (');
8658 l(' ORG_CONTACT_ID');
8659 l(' ,PARTY_ID');
8660 l(' ,STATUS_FLAG'); --Bug No: 4299785
8661
8662 FOR I IN 1..255 LOOP
8663 IF l_forall_list(I) <> 'N' THEN
8664 l(' ,TX'||I);
8665 END IF;
8666 END LOOP;
8667 l(' ) VALUES (');
8668 l(' H_ORG_CONTACT_ID(1)');
8669 l(' ,H_PARTY_ID(1)');
8670 l(' ,H_STATUS(1)');--Bug No: 4299785
8671
8672 FOR I IN 1..255 LOOP
8673 IF l_forall_list(I) <> 'N' THEN
8674 l(' ,decode(H_TX'||I||'(1),null,H_TX'||I||'(1),H_TX'||I||'(1)||'' '')');
8675 END IF;
8676 END LOOP;
8677 l(' );');
8678 l(' EXCEPTION');
8679 l(' WHEN DUP_VAL_ON_INDEX THEN');
8680 l(' IF p_operation=''C'' THEN');
8681 l(' l_tryupd:=TRUE;');
8682 l(' END IF;');
8683 l(' END;');
8684 l(' END IF;');
8685 l('');
8686 l(' IF l_tryupd THEN');
8687 l(' BEGIN');
8688 l(' l_tryupd:=FALSE;');
8689 l(' UPDATE HZ_STAGED_CONTACTS SET ');
8690 l(' concat_col = concat_col');
8691 l(' ,status_flag = H_STATUS(1) ');--Bug No: 4299785
8692
8693 FOR I IN 1..255 LOOP
8694 IF l_forall_list(I) <> 'N' THEN
8695 IF (is_first) THEN
8696 is_first := false;
8697 l(' ,TX'||I||'=decode(H_TX'||I||'(1),null,H_TX'||I||'(1),H_TX'||I||'(1)||'' '')');
8698 ELSE
8699 l(' ,TX'||I||'=decode(H_TX'||I||'(1),null,H_TX'||I||'(1),H_TX'||I||'(1)||'' '')');
8700 END IF;
8701 END IF;
8702 END LOOP;
8703 l(' WHERE ORG_CONTACT_ID=H_ORG_CONTACT_ID(1);');
8704 l(' IF SQL%ROWCOUNT=0 AND p_operation=''U'' THEN');
8705 l(' l_tryins := TRUE;');
8706 l(' END IF;');
8707 l(' EXCEPTION ');
8708 l(' WHEN NO_DATA_FOUND THEN');
8709 l(' IF p_operation=''U'' THEN');
8710 l(' l_tryins := TRUE;');
8711 l(' END IF;');
8712 l(' END;');
8713 l(' END IF;');
8714 l(' END LOOP;');
8715 l('');
8716 l(' --Fix for bug 5048604, to update concat_col during update of denorm column ');
8717 l(' UPDATE HZ_STAGED_PARTIES set');
8718 l(' D_CT = ''SYNC''');
8719 l(' ,CONCAT_COL = CONCAT_COL ');
8720 l(' WHERE PARTY_ID = H_PARTY_ID(1);');
8721 l('');
8722 l(' -- REPURI. Bug 4884742. If shadow staging is completely successfully ');
8723 l(' -- insert a record into hz_dqm_sh_sync_interface table for each record ');
8724 l(' IF (HZ_DQM_SYNC.is_shadow_staging_complete) THEN ');
8725 l(' BEGIN ');
8726 l(' HZ_DQM_SYNC.insert_sh_interface_rec(l_party_id,p_org_contact_id,null,null,''CONTACTS'',p_operation); ');
8727 l(' EXCEPTION WHEN OTHERS THEN ');
8728 l(' NULL; ');
8729 l(' END; ');
8730 l(' END IF; ');
8731 l('');
8732 -- Fix for Bug 4862121.
8733 -- Added the Exception handling at this context, for the procedure.
8734 l(' EXCEPTION WHEN OTHERS THEN ');
8735 l(' -- FAILOVER : REPORT RECORD TO HZ_DQM_SYNC_INTERFACE ');
8736 l(' -- FOR ONLINE FLOWS ');
8737 l(' l_sql_err_message := SQLERRM; ');
8738 l(' insert_dqm_sync_error_rec(l_party_id, p_org_contact_id, NULL, NULL, ''CONTACTS'', p_operation, ''E'', ''Y'', l_sql_err_message); ');
8739 l(' END;');
8740
8741 END;
8742
8743
8744 -- REPURI. Proccedure to generate the code (into HZ_STAGE_MAP_TRANSFORM)
8745 -- for OPEN_BULK_IMP_SYNC_CPT_CUR query procedure. Bug 4884735.
8746
8747
8748 PROCEDURE gen_bulk_imp_sync_cpt_query IS
8749
8750 cur_col_num NUMBER := 1;
8751
8752 TYPE coltab IS TABLE OF VARCHAR2(2000) INDEX BY BINARY_INTEGER;
8753
8754 l_select coltab;
8755 FIRST BOOLEAN := FALSE;
8756
8757 l_forall_list coltab;
8758 l_custom_list coltab;
8759 l_mincol_list coltab;
8760 l_min_colnum NUMBER;
8761 idx NUMBER :=1;
8762 is_first boolean := true;
8763
8764 -- VJN Introduced for conditional word replacements
8765 l_cond_attrib_list coltab ;
8766 l_idx number ;
8767
8771 l(' PROCEDURE open_bulk_imp_sync_cpt_cur ( ');
8768 BEGIN
8769
8770 l('');
8772 l(' p_batch_id IN NUMBER, ');
8773 l(' p_batch_mode_flag IN VARCHAR2, ');
8774 l(' p_from_osr IN VARCHAR2, ');
8775 l(' p_to_osr IN VARCHAR2, ');
8776 l(' p_os IN VARCHAR2, ');
8777 l(' p_operation IN VARCHAR2, ');
8778 l(' x_sync_cpt_cur IN OUT HZ_DQM_SYNC.SyncCurTyp) IS ');
8779 l(' BEGIN');
8780
8781 FOR ATTRS IN (SELECT a.ATTRIBUTE_ID,
8782 a.ATTRIBUTE_NAME,
8783 a.SOURCE_TABLE,
8784 a.CUSTOM_ATTRIBUTE_PROCEDURE,
8785 f.PROCEDURE_NAME,
8786 f.STAGED_ATTRIBUTE_COLUMN,
8787 to_number(substrb(STAGED_ATTRIBUTE_COLUMN, 3)) COLNUM
8788 FROM HZ_TRANS_ATTRIBUTES_VL a, HZ_TRANS_FUNCTIONS_VL f
8789 WHERE ENTITY_NAME = 'CONTACT_POINTS'
8790 AND nvl(f.ACTIVE_FLAG,'Y') = 'Y'
8791 AND f.ATTRIBUTE_ID = a.ATTRIBUTE_ID
8792 ORDER BY COLNUM) LOOP
8793 IF cur_col_num<ATTRS.COLNUM THEN
8794 FOR I in cur_col_num..ATTRS.COLNUM-1 LOOP
8795 l_mincol_list(I) := 'N';
8796 l_forall_list(I) := 'N';
8797 END LOOP;
8798 END IF;
8799 cur_col_num:=ATTRS.COLNUM+1;
8800 IF has_trx_context(ATTRS.PROCEDURE_NAME) THEN
8801 l_forall_list(ATTRS.COLNUM) := ATTRS.PROCEDURE_NAME || '(H_TX'||ATTRS.COLNUM||'(I),NULL, ''' || ATTRS.ATTRIBUTE_NAME || ''',''CONTACT_POINTS'',''STAGE'')';
8802 ELSE
8803 l_forall_list(ATTRS.COLNUM) := ATTRS.PROCEDURE_NAME || '(H_TX'||ATTRS.COLNUM||'(I),NULL, ''' || ATTRS.ATTRIBUTE_NAME || ''',''CONTACT_POINTS'')';
8804 END IF;
8805
8806 SELECT min(to_number(substrb(STAGED_ATTRIBUTE_COLUMN, 3))) INTO l_min_colnum
8807 FROM HZ_TRANS_ATTRIBUTES_VL a, HZ_TRANS_FUNCTIONS_VL f
8808 WHERE ENTITY_NAME = 'CONTACT_POINTS'
8809 AND nvl(f.ACTIVE_FLAG,'Y') = 'Y'
8810 AND f.ATTRIBUTE_ID = a.ATTRIBUTE_ID
8811 AND a.ATTRIBUTE_NAME=ATTRS.ATTRIBUTE_NAME;
8812
8813 IF ATTRS.colnum>l_min_colnum THEN
8814 l_mincol_list(ATTRS.COLNUM) := 'N';
8815 IF has_trx_context(ATTRS.PROCEDURE_NAME) THEN
8816 l_forall_list(ATTRS.COLNUM) := ATTRS.PROCEDURE_NAME || '(H_TX'||l_min_colnum||'(I),NULL, ''' || ATTRS.ATTRIBUTE_NAME || ''',''CONTACT_POINTS'',''STAGE'')';
8817 ELSE
8818 l_forall_list(ATTRS.COLNUM) := ATTRS.PROCEDURE_NAME || '(H_TX'||l_min_colnum||'(I),NULL, ''' || ATTRS.ATTRIBUTE_NAME || ''',''CONTACT_POINTS'')';
8819 END IF;
8820
8821 ELSE
8822 l_mincol_list(ATTRS.COLNUM) := 'Y';
8823 END IF;
8824
8825 IF ATTRS.CUSTOM_ATTRIBUTE_PROCEDURE IS NULL THEN
8826 IF l_mincol_list(ATTRS.COLNUM) = 'Y' THEN
8827 l_select(idx) := 'cp.'||ATTRS.ATTRIBUTE_NAME;
8828 ELSE
8829 l_select(idx) := 'N';
8830 END IF;
8831
8832 l_custom_list(ATTRS.COLNUM) := 'N';
8833 ELSE
8834 l_select(idx) := 'N';
8835 l_custom_list(ATTRS.COLNUM) := 'N';
8836 IF ATTRS.ATTRIBUTE_NAME = 'FLEX_FORMAT_PHONE_NUMBER' THEN
8837 IF l_mincol_list(ATTRS.COLNUM) = 'Y' THEN
8838 l_select(idx) := 'translate(phone_number,''0123456789ABCDEFGHIJKLMNOPQRSTUV'||
8839 'WXYZabcdefghijklmnopqrstuvwxyz!"#$%&()''''*+,-./:;<=>?@[\]^'||
8840 '_`{|}~ '',''0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ'') || '' '' || ' ||
8841 'translate(phone_area_code||'' '' || phone_number,''0123456789ABCDEFGHIJKLMNOPQRSTUV'||
8842 'WXYZabcdefghijklmnopqrstuvwxyz!"#$%&()''''*+,-./:;<=>?@[\]^'||
8843 '_`{|}~ '',''0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ'') || '' '' || '||
8844 ' translate(phone_country_code|| '' '' || phone_area_code||'' '' || phone_number,''0123456789ABCDEFGHIJKLMNOPQRSTUV'||
8845 'WXYZabcdefghijklmnopqrstuvwxyz!"#$%&()''''*+,-./:;<=>?@[\]^'||
8846 '_`{|}~ '',''0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ'')';
8847 END IF;
8848 ELSIF ATTRS.ATTRIBUTE_NAME = 'RAW_PHONE_NUMBER' THEN
8849 IF l_mincol_list(ATTRS.COLNUM) = 'Y' THEN
8850 l_select(idx) := 'translate(phone_country_code|| '' '' || phone_area_code||'' '' || phone_number,''0123456789ABCDEFGHIJKLMNOPQRSTUV'||
8851 'WXYZabcdefghijklmnopqrstuvwxyz!"#$%&()''''*+,-./:;<=>?@[\]^_'||
8852 '`{|}~ '',''0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ'')';
8853
8854 END IF;
8855 ELSE
8856 IF l_mincol_list(ATTRS.COLNUM) = 'Y' THEN
8857 IF has_context(ATTRS.custom_attribute_procedure) THEN
8858 l_custom_list(ATTRS.COLNUM) := ATTRS.custom_attribute_procedure || '(H_CONTACT_POINT_ID(I),''CONTACT_POINTS'','''||ATTRS.ATTRIBUTE_NAME|| ''', ''STAGE'')';
8859 ELSE
8860 l_custom_list(ATTRS.COLNUM) := ATTRS.custom_attribute_procedure || '(H_CONTACT_POINT_ID(I), ''CONTACT_POINTS'','''||ATTRS.ATTRIBUTE_NAME|| ''')';
8861 END IF;
8862 END IF;
8863 END IF;
8864 END IF;
8865 idx := idx+1;
8866
8867 -- VJN ADDED CODE FOR TRACKING CONDITION ATTRIBUTES AT THIS ENTITY LEVEL
8868 IF HZ_WORD_CONDITIONS_PKG.is_a_cond_attrib( ATTRS.attribute_id)
8869 THEN
8870 l_cond_attrib_list(ATTRS.COLNUM) := ATTRS.attribute_id ;
8871 END IF;
8872
8876 FOR I in cur_col_num..255 LOOP
8873 END LOOP;
8874
8875 IF cur_col_num<=255 THEN--bug 5977628
8877 l_mincol_list(I) := 'N';
8878 l_forall_list(I) := 'N';
8879 l_custom_list(I) := 'N';
8880 END LOOP;
8881 END IF;
8882
8883 l(' OPEN x_sync_cpt_cur FOR ' );
8884 l(' SELECT ');
8885 l(' /*+ ORDERED USE_NL(cp) */ ');
8886 l(' cp.CONTACT_POINT_ID ');
8887 l(' ,cps.party_id ');
8888 l(' ,decode (cp.owner_table_name, ''HZ_PARTY_SITES'', cp.owner_table_id, NULL) party_site_id ');
8889 l(' ,NULL ');
8890 l(' ,cp.CONTACT_POINT_TYPE ');
8891 l(' ,cp.STATUS '); -- Propagating Bug 4299785 fix to sync modifications
8892 l(' ,cp.ROWID ');
8893
8894 FOR I in 1..l_select.COUNT LOOP
8895 IF l_select(I) <> 'N' THEN
8896 l(' ,' || l_select(I));
8897 END IF;
8898 END LOOP;
8899
8900 l(' FROM hz_contact_points cp, hz_imp_contactpts_sg cps, hz_imp_batch_details bd ');
8901 l(' WHERE cp.request_id = bd.main_conc_req_id ');
8902 l(' AND bd.batch_id = cps.batch_id ');
8903 l(' AND cp.contact_point_id = cps.contact_point_id ');
8904 l(' AND cps.batch_id = p_batch_id ');
8905 l(' AND cps.party_orig_system = p_os ');
8906 l(' AND cps.batch_mode_flag = p_batch_mode_flag ');
8907 l(' AND cps.action_flag = p_operation');
8908 l(' AND cps.party_orig_system_reference BETWEEN p_from_osr AND p_to_osr ');
8909 l(' AND (cp.status IS NULL OR cp.status = ''A'' OR cp.status = ''I''); ');
8910 l('');
8911 l(' END open_bulk_imp_sync_cpt_cur; ');
8912 l('');
8913
8914 END gen_bulk_imp_sync_cpt_query;
8915
8916
8917 -- REPURI. Proccedure to generate the code (into HZ_STAGE_MAP_TRANSFORM)
8918 -- for OPEN_SYNC_CPT_CURSOR and SYNC_ALL_CONTACT_POINTS Procedures.
8919
8920 PROCEDURE generate_sync_cpt_query_proc IS
8921
8922 cur_col_num NUMBER := 1;
8923
8924 TYPE coltab IS TABLE OF VARCHAR2(2000) INDEX BY BINARY_INTEGER;
8925
8926 l_select coltab;
8927 FIRST BOOLEAN := FALSE;
8928
8929 l_forall_list coltab;
8930 l_custom_list coltab;
8931 l_mincol_list coltab;
8932 l_min_colnum NUMBER;
8933 idx NUMBER :=1;
8934 is_first boolean := true;
8935
8936 -- VJN Introduced for conditional word replacements
8937 l_cond_attrib_list coltab ;
8938 l_idx number ;
8939
8940 BEGIN
8941
8942 l('');
8943 l(' PROCEDURE open_sync_cpt_cursor ( ');
8944 l(' p_operation IN VARCHAR2,');
8945 l(' p_from_rec IN VARCHAR2,');
8946 l(' p_to_rec IN VARCHAR2,');
8947 l(' x_sync_cpt_cur IN OUT HZ_DQM_SYNC.SyncCurTyp) IS ');
8948 l(' BEGIN');
8949
8950 FOR ATTRS IN (SELECT a.ATTRIBUTE_ID,
8951 a.ATTRIBUTE_NAME,
8952 a.SOURCE_TABLE,
8953 a.CUSTOM_ATTRIBUTE_PROCEDURE,
8954 f.PROCEDURE_NAME,
8955 f.STAGED_ATTRIBUTE_COLUMN,
8956 to_number(substrb(STAGED_ATTRIBUTE_COLUMN, 3)) COLNUM
8957 FROM HZ_TRANS_ATTRIBUTES_VL a, HZ_TRANS_FUNCTIONS_VL f
8958 WHERE ENTITY_NAME = 'CONTACT_POINTS'
8959 AND nvl(f.ACTIVE_FLAG,'Y') = 'Y'
8960 AND f.ATTRIBUTE_ID = a.ATTRIBUTE_ID
8961 ORDER BY COLNUM) LOOP
8962 IF cur_col_num<ATTRS.COLNUM THEN
8963 FOR I in cur_col_num..ATTRS.COLNUM-1 LOOP
8964 l_mincol_list(I) := 'N';
8965 l_forall_list(I) := 'N';
8966 END LOOP;
8967 END IF;
8968 cur_col_num:=ATTRS.COLNUM+1;
8969 IF has_trx_context(ATTRS.PROCEDURE_NAME) THEN
8970 l_forall_list(ATTRS.COLNUM) := ATTRS.PROCEDURE_NAME || '(H_TX'||ATTRS.COLNUM||'(I),NULL, ''' || ATTRS.ATTRIBUTE_NAME || ''',''CONTACT_POINTS'',''STAGE'')';
8971 ELSE
8972 l_forall_list(ATTRS.COLNUM) := ATTRS.PROCEDURE_NAME || '(H_TX'||ATTRS.COLNUM||'(I),NULL, ''' || ATTRS.ATTRIBUTE_NAME || ''',''CONTACT_POINTS'')';
8973 END IF;
8974
8975 SELECT min(to_number(substrb(STAGED_ATTRIBUTE_COLUMN, 3))) INTO l_min_colnum
8976 FROM HZ_TRANS_ATTRIBUTES_VL a, HZ_TRANS_FUNCTIONS_VL f
8977 WHERE ENTITY_NAME = 'CONTACT_POINTS'
8978 AND nvl(f.ACTIVE_FLAG,'Y') = 'Y'
8979 AND f.ATTRIBUTE_ID = a.ATTRIBUTE_ID
8980 AND a.ATTRIBUTE_NAME=ATTRS.ATTRIBUTE_NAME;
8981
8982 IF ATTRS.colnum>l_min_colnum THEN
8983 l_mincol_list(ATTRS.COLNUM) := 'N';
8984 IF has_trx_context(ATTRS.PROCEDURE_NAME) THEN
8985 l_forall_list(ATTRS.COLNUM) := ATTRS.PROCEDURE_NAME || '(H_TX'||l_min_colnum||'(I),NULL, ''' || ATTRS.ATTRIBUTE_NAME || ''',''CONTACT_POINTS'',''STAGE'')';
8986 ELSE
8987 l_forall_list(ATTRS.COLNUM) := ATTRS.PROCEDURE_NAME || '(H_TX'||l_min_colnum||'(I),NULL, ''' || ATTRS.ATTRIBUTE_NAME || ''',''CONTACT_POINTS'')';
8988 END IF;
8989
8990 ELSE
8991 l_mincol_list(ATTRS.COLNUM) := 'Y';
8992 END IF;
8993
8994 IF ATTRS.CUSTOM_ATTRIBUTE_PROCEDURE IS NULL THEN
8995 IF l_mincol_list(ATTRS.COLNUM) = 'Y' THEN
8996 l_select(idx) := 'cp.'||ATTRS.ATTRIBUTE_NAME;
8997 ELSE
8998 l_select(idx) := 'N';
8999 END IF;
9000
9001 l_custom_list(ATTRS.COLNUM) := 'N';
9002 ELSE
9003 l_select(idx) := 'N';
9004 l_custom_list(ATTRS.COLNUM) := 'N';
9008 'WXYZabcdefghijklmnopqrstuvwxyz!"#$%&()''''*+,-./:;<=>?@[\]^'||
9005 IF ATTRS.ATTRIBUTE_NAME = 'FLEX_FORMAT_PHONE_NUMBER' THEN
9006 IF l_mincol_list(ATTRS.COLNUM) = 'Y' THEN
9007 l_select(idx) := 'translate(phone_number,''0123456789ABCDEFGHIJKLMNOPQRSTUV'||
9009 '_`{|}~ '',''0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ'') || '' '' || ' ||
9010 'translate(phone_area_code||'' '' || phone_number,''0123456789ABCDEFGHIJKLMNOPQRSTUV'||
9011 'WXYZabcdefghijklmnopqrstuvwxyz!"#$%&()''''*+,-./:;<=>?@[\]^'||
9012 '_`{|}~ '',''0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ'') || '' '' || '||
9013 ' translate(phone_country_code|| '' '' || phone_area_code||'' '' || phone_number,''0123456789ABCDEFGHIJKLMNOPQRSTUV'||
9014 'WXYZabcdefghijklmnopqrstuvwxyz!"#$%&()''''*+,-./:;<=>?@[\]^'||
9015 '_`{|}~ '',''0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ'')';
9016 END IF;
9017 ELSIF ATTRS.ATTRIBUTE_NAME = 'RAW_PHONE_NUMBER' THEN
9018 IF l_mincol_list(ATTRS.COLNUM) = 'Y' THEN
9019 l_select(idx) := 'translate(phone_country_code|| '' '' || phone_area_code||'' '' || phone_number,''0123456789ABCDEFGHIJKLMNOPQRSTUV'||
9020 'WXYZabcdefghijklmnopqrstuvwxyz!"#$%&()''''*+,-./:;<=>?@[\]^_'||
9021 '`{|}~ '',''0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ'')';
9022
9023 END IF;
9024 ELSE
9025 IF l_mincol_list(ATTRS.COLNUM) = 'Y' THEN
9026 IF has_context(ATTRS.custom_attribute_procedure) THEN
9027 l_custom_list(ATTRS.COLNUM) := ATTRS.custom_attribute_procedure || '(H_CONTACT_POINT_ID(I),''CONTACT_POINTS'','''||ATTRS.ATTRIBUTE_NAME|| ''', ''STAGE'')';
9028 ELSE
9029 l_custom_list(ATTRS.COLNUM) := ATTRS.custom_attribute_procedure || '(H_CONTACT_POINT_ID(I), ''CONTACT_POINTS'','''||ATTRS.ATTRIBUTE_NAME|| ''')';
9030 END IF;
9031 END IF;
9032 END IF;
9033 END IF;
9034 idx := idx+1;
9035
9036 -- VJN ADDED CODE FOR TRACKING CONDITION ATTRIBUTES AT THIS ENTITY LEVEL
9037 IF HZ_WORD_CONDITIONS_PKG.is_a_cond_attrib( ATTRS.attribute_id)
9038 THEN
9039 l_cond_attrib_list(ATTRS.COLNUM) := ATTRS.attribute_id ;
9040 END IF;
9041
9042 END LOOP;
9043
9044 IF cur_col_num<=255 THEN--bug 5977628
9045 FOR I in cur_col_num..255 LOOP
9046 l_mincol_list(I) := 'N';
9047 l_forall_list(I) := 'N';
9048 l_custom_list(I) := 'N';
9049 END LOOP;
9050 END IF;
9051
9052 l(' OPEN x_sync_cpt_cur FOR ' );
9053 l(' SELECT ');
9054 l(' /*+ ORDERED USE_NL(cp) */ ');
9055 l(' cp.CONTACT_POINT_ID ');
9056 l(' ,dsi.party_id ');
9057 l(' ,dsi.party_site_id ');
9058 l(' ,dsi.org_contact_id ');
9059 l(' ,cp.CONTACT_POINT_TYPE ');
9060 l(' ,cp.STATUS '); -- Propagating Bug 4299785 fix to sync modifications
9061 l(' ,dsi.ROWID ');
9062
9063 FOR I in 1..l_select.COUNT LOOP
9064 IF l_select(I) <> 'N' THEN
9065 l(' ,' || l_select(I));
9066 END IF;
9067 END LOOP;
9068
9069 l(' FROM HZ_DQM_SYNC_INTERFACE dsi,HZ_CONTACT_POINTS cp');
9070 l(' WHERE dsi.record_id = cp.contact_point_id ');
9071 l(' AND dsi.entity = ''CONTACT_POINTS'' ');
9072 l(' AND dsi.operation = p_operation ');
9073 l(' AND dsi.staged_flag = ''N'' ');
9074 l(' AND dsi.sync_interface_num >= p_from_rec ');
9075 l(' AND dsi.sync_interface_num <= p_to_rec ');
9076 l(' AND (cp.status is null OR cp.status = ''A'' or cp.status = ''I''); ');
9077 l(' END; ');
9078
9079 l('');
9080 l(' PROCEDURE sync_all_contact_points ( ');
9081 l(' p_operation IN VARCHAR2, ');
9082 l(' p_bulk_sync_type IN VARCHAR2, ');
9083 l(' p_sync_all_cpt_cur IN HZ_DQM_SYNC.SyncCurTyp) IS ');
9084 l('');
9085 l(' l_limit NUMBER := ' || g_batch_size || ';');
9086 l(' l_last_fetch BOOLEAN := FALSE;');
9087 l(' l_sql_errm VARCHAR2(2000); ');
9088 l(' l_st NUMBER; ');
9089 l(' l_en NUMBER; ');
9090 l(' l_err_index NUMBER; ');
9091 l(' l_err_count NUMBER; ');
9092 l('');
9093 l(' bulk_errors EXCEPTION; ');
9094 l(' PRAGMA EXCEPTION_INIT(bulk_errors, -24381); ');
9095 l('');
9096 l(' BEGIN');
9097 l(' log (''Begin Synchronizing Contact Points''); ');
9098 l(' LOOP');
9099 l(' log (''Bulk Collecting Contact Points Data...'',FALSE); ');
9100 l(' FETCH p_sync_all_cpt_cur BULK COLLECT INTO');
9101 l(' H_CONTACT_POINT_ID');
9102 l(' ,H_CPT_PARTY_ID');
9103 l(' ,H_CPT_PARTY_SITE_ID');
9104 l(' ,H_CPT_ORG_CONTACT_ID');
9105 l(' ,H_CONTACT_POINT_TYPE');
9106 l(' ,H_STATUS'); -- Propagating Bug 4299785 fix to sync modifications
9107 l(' ,H_ROWID ');
9108
9109 FOR I IN 1..255 LOOP
9110 IF l_forall_list(I) <> 'N' AND l_mincol_list(I) = 'Y' AND
9111 l_custom_list(I) = 'N' THEN
9112 l(' ,H_TX'||I);
9113 END IF;
9114 END LOOP;
9115
9116 l(' LIMIT l_limit;');
9117 l(' log (''Done''); ');
9118 l('');
9119 l(' IF p_sync_all_cpt_cur%NOTFOUND THEN');
9120 l(' l_last_fetch:=TRUE;');
9121 l(' END IF;');
9122 l('');
9123 l(' IF H_CONTACT_POINT_ID.COUNT=0 AND l_last_fetch THEN');
9127 l(' log (''Synchronizing for ''||H_CONTACT_POINT_ID.COUNT||'' Contact Points''); ');
9124 l(' EXIT;');
9125 l(' END IF;');
9126 l('');
9128 l(' log (''Populating Contact Points Transformation Functions into Arrays...'',FALSE); ');
9129 l('');
9130 l(' FOR I in H_CONTACT_POINT_ID.FIRST..H_CONTACT_POINT_ID.LAST LOOP');
9131
9132 -- VJN INTRODUCED CODE FOR GENERATING THE POPULATION
9133 -- OF THE GLOBAL CONDITION RECORD
9134
9135 l_idx := l_cond_attrib_list.FIRST ;
9136 IF l_idx IS NOT NULL
9137 THEN
9138 l(' ---- SETTING GLOBAL CONDITION RECORD AT THE CONTACT POINT LEVEL ----');
9139 END IF ;
9140
9141 l('');
9142
9143 WHILE l_cond_attrib_list.EXISTS(l_idx)
9144 LOOP
9145 l(' HZ_WORD_CONDITIONS_PKG.set_gbl_condition_rec ('||l_cond_attrib_list(l_idx)||','||'H_TX'||l_idx||'(I));');
9146 l_idx := l_idx+1;
9147 END LOOP;
9148 FOR I IN 1..255 LOOP
9149 IF l_forall_list(I) <> 'N' THEN
9150 IF l_custom_list(I) <> 'N' AND l_mincol_list(I) = 'Y' THEN
9151 l(' H_TX'||I||'(I):='||l_custom_list(I)||';');
9152 END IF;
9153 END IF;
9154 END LOOP;
9155 FOR I IN 1..255 LOOP
9156 IF l_forall_list(I) <> 'N' THEN
9157 IF l_mincol_list(I) <> 'Y' THEN
9158 l(' H_TX'||I||'(I):='||l_forall_list(I)||';');
9159 END IF;
9160 END IF;
9161 END LOOP;
9162 FOR I IN 1..255 LOOP
9163 IF l_forall_list(I) <> 'N' THEN
9164 IF l_mincol_list(I) = 'Y' THEN
9165 l(' H_TX'||I||'(I):='||l_forall_list(I)||';');
9166 END IF;
9167 END IF;
9168 END LOOP;
9169
9170 l(' END LOOP;');
9171 l(' log (''Done''); ');
9172 l('');
9173 l(' l_st := 1; ');
9174 l(' l_en := H_CONTACT_POINT_ID.COUNT; ');
9175 l('');
9176 l(' IF p_operation = ''C'' THEN ');
9177 l(' BEGIN ');
9178 l(' log (''Inserting Data into HZ_STAGED_CONTACT_POINTS...'',FALSE); ');
9179 l(' FORALL I in l_st..l_en SAVE EXCEPTIONS ');
9180 l(' INSERT INTO HZ_STAGED_CONTACT_POINTS (');
9181 l(' CONTACT_POINT_ID');
9182 l(' ,PARTY_ID');
9183 l(' ,PARTY_SITE_ID');
9184 l(' ,ORG_CONTACT_ID');
9185 l(' ,CONTACT_POINT_TYPE');
9186 l(' ,STATUS_FLAG'); --Propagating Bug 4299785 fix to sync modifications
9187
9188 FOR I IN 1..255 LOOP
9189 IF l_forall_list(I) <> 'N' THEN
9190 l(' ,TX'||I);
9191 END IF;
9192 END LOOP;
9193
9194 l(' ) VALUES (');
9195 l(' H_CONTACT_POINT_ID(I)');
9196 l(' ,H_CPT_PARTY_ID(I)');
9197 l(' ,H_CPT_PARTY_SITE_ID(I)');
9198 l(' ,H_CPT_ORG_CONTACT_ID(I)');
9199 l(' ,H_CONTACT_POINT_TYPE(I)');
9200 l(' ,H_STATUS(I)'); --Propagating Bug 4299785 fix to sync modifications
9201
9202 FOR I IN 1..255 LOOP
9203 IF l_forall_list(I) <> 'N' THEN
9204 l(' ,decode(H_TX'||I||'(I),null,H_TX'||I||'(I),H_TX'||I||'(I)||'' '')');
9205 END IF;
9206 END LOOP;
9207 l(' );');
9208 l(' log (''Done''); ');
9209 l(' EXCEPTION WHEN bulk_errors THEN ');
9210 l(' l_err_count := SQL%BULK_EXCEPTIONS.COUNT; ');
9211 l(' FOR indx IN 1..l_err_count LOOP ');
9212 l(' l_err_index := SQL%BULK_EXCEPTIONS(indx).ERROR_INDEX; ');
9213 l(' l_sql_errm := sqlerrm(-SQL%BULK_EXCEPTIONS(indx).ERROR_CODE); ');
9214 -- SCHITRAP: Bug:5357970 - Error code is a number. Oracle error for ''DUP_VAL_ON_INDEX'' is ORA-00001
9215 --l(' IF (SQL%BULK_EXCEPTIONS(indx).ERROR_CODE) = ''DUP_VAL_ON_INDEX'' THEN ');
9216 l(' IF (instr(l_sql_errm,''ORA-00001'')>0) THEN ');
9217 l(' log (''Exception DUP_VAL_ON_INDEX occured while inserting a Contact Point with CONTACT_POINT_ID - ''||H_CONTACT_POINT_ID(l_err_index)); ');
9218 l(' DELETE FROM HZ_DQM_SYNC_INTERFACE WHERE ENTITY=''CONTACT_POINTS'' AND OPERATION=''C'' AND RECORD_ID=H_CONTACT_POINT_ID(l_err_index); ');
9219 l(' ELSE ');
9220 l(' IF p_bulk_sync_type = ''DQM_SYNC'' THEN ');
9221 l(' UPDATE hz_dqm_sync_interface ');
9222 l(' SET error_data = l_sql_errm ');
9223 l(' ,staged_flag = decode (error_data, NULL, ''N'', ''E'') ');
9224 l(' WHERE rowid = H_ROWID(l_err_index); ');
9225 l(' ELSIF p_bulk_sync_type = ''IMPORT_SYNC'' THEN ');
9226 l(' -- Insert the Error Record into HZ_DQM_SYNC_INTERFACE table ');
9227 l(' insert_dqm_sync_error_rec(H_CPT_PARTY_ID(l_err_index), H_CONTACT_POINT_ID(l_err_index), H_CPT_PARTY_SITE_ID(l_err_index), H_CPT_ORG_CONTACT_ID(l_err_index), ''CONTACT_POINTS'', p_operation, ''E'', ''N'', l_sql_errm); ');
9228 l(' END IF; ');
9229 l(' END IF; ');
9230 l(' END LOOP; ');
9231 l(' END; ');
9232 l(' ELSIF p_operation = ''U'' THEN ');
9233 l(' BEGIN ');
9234 l(' log (''Updating Data in HZ_STAGED_CONTACT_POINTS...'',FALSE); ');
9235 l(' FORALL I in l_st..l_en SAVE EXCEPTIONS ');
9236 l(' UPDATE HZ_STAGED_CONTACT_POINTS SET ');
9237 l(' concat_col = concat_col');
9238 l(' ,status_flag = H_STATUS(I) ');--Propagating Bug 4299785 fix to sync modifications
9239
9240 FOR I IN 1..255 LOOP
9244 l(' ,TX'||I||'=decode(H_TX'||I||'(I),null,H_TX'||I||'(I),H_TX'||I||'(I)||'' '')');
9241 IF l_forall_list(I) <> 'N' THEN
9242 IF (is_first) THEN
9243 is_first := false;
9245 ELSE
9246 l(' ,TX'||I||'=decode(H_TX'||I||'(I),null,H_TX'||I||'(I),H_TX'||I||'(I)||'' '')');
9247 END IF;
9248 END IF;
9249 END LOOP;
9250 l(' WHERE CONTACT_POINT_ID=H_CONTACT_POINT_ID(I);');
9251 l(' log (''Done''); ');
9252 l(' EXCEPTION WHEN bulk_errors THEN ');
9253 l(' l_err_count := SQL%BULK_EXCEPTIONS.COUNT; ');
9254 l(' FOR indx IN 1..l_err_count LOOP ');
9255 l(' l_err_index := SQL%BULK_EXCEPTIONS(indx).ERROR_INDEX; ');
9256 l(' l_sql_errm := sqlerrm(-SQL%BULK_EXCEPTIONS(indx).ERROR_CODE); ');
9257 -- SCHITRAP: Bug:5357970 - Error code is a number. Oracle error for ''DUP_VAL_ON_INDEX'' is ORA-00001
9258 --l(' IF (SQL%BULK_EXCEPTIONS(indx).ERROR_CODE) = ''DUP_VAL_ON_INDEX'' THEN ');
9259 l(' IF (instr(l_sql_errm,''ORA-00001'')>0) THEN ');
9260 l(' log (''Exception DUP_VAL_ON_INDEX occured while inserting a Contact Point with CONTACT_POINT_ID - ''||H_CONTACT_POINT_ID(l_err_index)); ');
9261 l(' DELETE FROM HZ_DQM_SYNC_INTERFACE WHERE ENTITY=''CONTACT_POINTS'' AND OPERATION=''U'' AND RECORD_ID=H_CONTACT_POINT_ID(l_err_index); ');
9262 l(' ELSE ');
9263 l(' IF p_bulk_sync_type = ''DQM_SYNC'' THEN ');
9264 l(' UPDATE hz_dqm_sync_interface ');
9265 l(' SET error_data = l_sql_errm ');
9266 l(' ,staged_flag = decode (error_data, NULL, ''N'', ''E'') ');
9267 l(' WHERE rowid = H_ROWID(l_err_index); ');
9268 l(' ELSIF p_bulk_sync_type = ''IMPORT_SYNC'' THEN ');
9269 l(' -- Insert the Error Record into HZ_DQM_SYNC_INTERFACE table ');
9270 l(' insert_dqm_sync_error_rec(H_CPT_PARTY_ID(l_err_index), H_CONTACT_POINT_ID(l_err_index), H_CPT_PARTY_SITE_ID(l_err_index), H_CPT_ORG_CONTACT_ID(l_err_index), ''CONTACT_POINTS'', p_operation, ''E'', ''N'', l_sql_errm); ');
9271 l(' END IF; ');
9272 l(' END IF; ');
9273 l(' END LOOP; ');
9274 l(' END; ');
9275 l(' END IF;');
9276 l('');
9277 l(' IF l_last_fetch THEN');
9278 l(' -- Update HZ_STAGED_PARTIES, if corresponding child entity records ');
9279 l(' -- CONTACT_POINTS (in this case), have been inserted/updated ');
9280 l('');
9281 l(' log (''Updating D_CPT column to SYNC in HZ_STAGED_PARTIES table for all related records...'',FALSE); ');
9282 l(' --Fix for bug 5048604, to update concat_col during update of denorm column ');
9283 l(' FORALL I IN H_CONTACT_POINT_ID.FIRST..H_CONTACT_POINT_ID.LAST ');
9284 l(' UPDATE HZ_STAGED_PARTIES set ');
9285 l(' D_CPT = ''SYNC'' ');
9286 l(' ,CONCAT_COL = CONCAT_COL ');
9287 l(' WHERE PARTY_ID = H_CPT_PARTY_ID(I); ');
9288 l(' log (''Done''); ');
9289 l('');
9290 l(' -- REPURI. Bug 4884742. ');
9291 l(' -- Bulk Insert the Import of Contact Points into Shadow Sync Interface table ');
9292 l(' -- if Shadow Staging has already run and completed successfully ');
9293 l(' IF ((p_bulk_sync_type = ''IMPORT_SYNC'') AND ');
9294 l(' (HZ_DQM_SYNC.is_shadow_staging_complete)) THEN ');
9295 l(' BEGIN ');
9296 l(' -- REPURI. Bug 4968126. ');
9297 l(' -- Using the Merge instead of Insert statement ');
9298 l(' -- so that duplicate records dont get inserted. ');
9299 l(' log (''Merging data into HZ_DQM_SH_SYNC_INTERFACE...'',FALSE); ');
9300 l(' FORALL I in l_st..l_en ');
9301 l(' MERGE INTO hz_dqm_sh_sync_interface S ');
9302 l(' USING ( ');
9303 l(' SELECT ');
9304 l(' H_CPT_PARTY_ID(I) AS party_id ');
9305 l(' ,H_CONTACT_POINT_ID(I) AS record_id ');
9306 l(' ,H_CPT_PARTY_SITE_ID(I) AS party_site_id ');
9307 l(' ,H_CPT_ORG_CONTACT_ID(I) AS org_contact_id ');
9308 l(' FROM dual ) T ');
9309 l(' ON (S.entity = ''CONTACT_POINTS'' AND ');
9310 l(' S.party_id = T.party_id AND ');
9311 l(' S.record_id = T.record_id AND ');
9312 l(' NVL(S.party_site_id, -99) = NVL(T.party_site_id, -99) AND ');
9313 l(' NVL(S.org_contact_id, -99) = NVL(T.org_contact_id, -99) AND ');
9314 l(' S.staged_flag <> ''E'') ');
9315 l(' WHEN NOT MATCHED THEN ');
9316 l(' INSERT ( ');
9317 l(' PARTY_ID, ');
9318 l(' RECORD_ID, ');
9319 l(' PARTY_SITE_ID, ');
9320 l(' ORG_CONTACT_ID, ');
9321 l(' ENTITY, ');
9322 l(' OPERATION, ');
9323 l(' STAGED_FLAG, ');
9324 l(' REALTIME_SYNC_FLAG, ');
9325 l(' CREATED_BY, ');
9326 l(' CREATION_DATE, ');
9327 l(' LAST_UPDATE_LOGIN, ');
9328 l(' LAST_UPDATE_DATE, ');
9329 l(' LAST_UPDATED_BY, ');
9330 l(' SYNC_INTERFACE_NUM ');
9331 l(' ) VALUES ( ');
9332 l(' H_CPT_PARTY_ID(I), ');
9333 l(' H_CONTACT_POINT_ID(I), ');
9334 l(' H_CPT_PARTY_SITE_ID(I), ');
9338 l(' ''N'', ');
9335 l(' H_CPT_ORG_CONTACT_ID(I), ');
9336 l(' ''CONTACT_POINTS'', ');
9337 l(' p_operation, ');
9339 l(' ''N'', ');
9340 l(' hz_utility_pub.created_by, ');
9341 l(' hz_utility_pub.creation_date, ');
9342 l(' hz_utility_pub.last_update_login, ');
9343 l(' hz_utility_pub.last_update_date, ');
9344 l(' hz_utility_pub.user_id, ');
9345 l(' HZ_DQM_SH_SYNC_INTERFACE_S.nextval ');
9346 l(' ); ');
9347 l(' log (''Done''); ');
9348 l(' EXCEPTION WHEN OTHERS THEN ');
9349 l(' log (''Exception occured while inserting data into HZ_DQM_SH_SYNC_INTERFACE Table''); ');
9350 l(' log (''Eror Message is - ''|| sqlerrm); ');
9351 l(' END; ');
9352 l(' END IF; ');
9353 l('');
9354 l(' FND_CONCURRENT.AF_Commit;');
9355 l(' EXIT;');
9356 l(' END IF;');
9357 l('');
9358 l(' FND_CONCURRENT.AF_Commit;');
9359 l('');
9360 l(' END LOOP;');
9361 l(' log (''End Synchronizing Contact Points''); ');
9362 l(' END;');
9363
9364 END;
9365
9366 PROCEDURE generate_contact_pt_query_proc IS
9367 cur_col_num NUMBER := 1;
9368
9369 TYPE coltab IS TABLE OF VARCHAR2(2000) INDEX BY BINARY_INTEGER;
9370
9371 l_select coltab;
9372 FIRST BOOLEAN := FALSE;
9373
9374 l_forall_list coltab;
9375 l_custom_list coltab;
9376 l_mincol_list coltab;
9377 l_min_colnum NUMBER;
9378 idx NUMBER :=1;
9379 is_first boolean := true;
9380
9381 -- VJN Introduced for conditional word replacements
9382 l_cond_attrib_list coltab ;
9383 l_idx number ;
9384 l_attr_name varchar2(2000);
9385
9386 BEGIN
9387 l('');
9388 l(' PROCEDURE insert_stage_contact_pts IS ');
9389 l(' l_limit NUMBER := ' || g_batch_size || ';');
9390 l(' l_last_fetch BOOLEAN := FALSE;');
9391 l(' l_denorm VARCHAR2(2000);');
9392 l(' l_st number; ');
9393 l(' l_en number; ');
9394
9395 l('');
9396
9397 FOR ATTRS IN (SELECT a.ATTRIBUTE_ID,
9398 a.ATTRIBUTE_NAME,
9399 a.SOURCE_TABLE,
9400 a.CUSTOM_ATTRIBUTE_PROCEDURE,
9401 f.PROCEDURE_NAME,
9402 f.STAGED_ATTRIBUTE_COLUMN,
9403 to_number(substrb(STAGED_ATTRIBUTE_COLUMN, 3)) COLNUM,
9404 nvl(lkp.tag,'C') column_data_type
9405 FROM HZ_TRANS_ATTRIBUTES_VL a, HZ_TRANS_FUNCTIONS_VL f,FND_LOOKUP_VALUES_VL lkp --Bug No: 4279469
9406 WHERE ENTITY_NAME = 'CONTACT_POINTS'
9407 AND nvl(f.ACTIVE_FLAG,'Y') = 'Y'
9408 AND f.ATTRIBUTE_ID = a.ATTRIBUTE_ID
9409 -- REPURI. Added the 2 lines here for bug 4957189, which were missed in bug 4279469 fix.
9410 AND lkp.LOOKUP_TYPE='CONTACT_PT_LOGICAL_ATTRIB_LIST'
9411 AND lkp.LOOKUP_CODE = a.ATTRIBUTE_NAME
9412 ORDER BY COLNUM) LOOP
9413 IF cur_col_num<ATTRS.COLNUM THEN
9414 FOR I in cur_col_num..ATTRS.COLNUM-1 LOOP
9415 l_mincol_list(I) := 'N';
9416 l_forall_list(I) := 'N';
9417 END LOOP;
9418 END IF;
9419 cur_col_num:=ATTRS.COLNUM+1;
9420 IF has_trx_context(ATTRS.PROCEDURE_NAME) THEN
9421 l_forall_list(ATTRS.COLNUM) := ATTRS.PROCEDURE_NAME || '(H_TX'||ATTRS.COLNUM||'(I),NULL, ''' || ATTRS.ATTRIBUTE_NAME || ''',''CONTACT_POINTS'',''STAGE'')';
9422 ELSE
9423 l_forall_list(ATTRS.COLNUM) := ATTRS.PROCEDURE_NAME || '(H_TX'||ATTRS.COLNUM||'(I),NULL, ''' || ATTRS.ATTRIBUTE_NAME || ''',''CONTACT_POINTS'')';
9424 END IF;
9425
9426 SELECT min(to_number(substrb(STAGED_ATTRIBUTE_COLUMN, 3))) INTO l_min_colnum
9427 FROM HZ_TRANS_ATTRIBUTES_VL a, HZ_TRANS_FUNCTIONS_VL f
9428 WHERE ENTITY_NAME = 'CONTACT_POINTS'
9429 AND nvl(f.ACTIVE_FLAG,'Y') = 'Y'
9430 AND f.ATTRIBUTE_ID = a.ATTRIBUTE_ID
9431 AND a.ATTRIBUTE_NAME=ATTRS.ATTRIBUTE_NAME;
9432
9433 IF ATTRS.colnum>l_min_colnum THEN
9434 l_mincol_list(ATTRS.COLNUM) := 'N';
9435 IF has_trx_context(ATTRS.PROCEDURE_NAME) THEN
9436 l_forall_list(ATTRS.COLNUM) := ATTRS.PROCEDURE_NAME || '(H_TX'||l_min_colnum||'(I),NULL, ''' || ATTRS.ATTRIBUTE_NAME || ''',''CONTACT_POINTS'',''STAGE'')';
9437 ELSE
9438 l_forall_list(ATTRS.COLNUM) := ATTRS.PROCEDURE_NAME || '(H_TX'||l_min_colnum||'(I),NULL, ''' || ATTRS.ATTRIBUTE_NAME || ''',''CONTACT_POINTS'')';
9439 END IF;
9440
9441 ELSE
9442 l_mincol_list(ATTRS.COLNUM) := 'Y';
9443 END IF;
9444
9445 IF ATTRS.CUSTOM_ATTRIBUTE_PROCEDURE IS NULL THEN
9446 -----Start of Bug No: 4279469----------
9447 l_attr_name := ATTRS.ATTRIBUTE_NAME;
9448 IF(ATTRS.column_data_type ='D') THEN
9449 l_attr_name := 'TO_CHAR(cp.'||l_attr_name||',''DD-MON-YYYY'') '||l_attr_name;
9450 ELSE
9451 l_attr_name := 'cp.'||l_attr_name;
9452 END IF;
9453 -----End of Bug No: 4279469------------
9454 IF l_mincol_list(ATTRS.COLNUM) = 'Y' THEN
9455 l_select(idx) := l_attr_name;
9456 ELSE
9457 l_select(idx) := 'N';
9458 END IF;
9459
9460 l_custom_list(ATTRS.COLNUM) := 'N';
9461 ELSE
9462 l_select(idx) := 'N';
9463 l_custom_list(ATTRS.COLNUM) := 'N';
9467 'WXYZabcdefghijklmnopqrstuvwxyz!"#$%&()''''*+,-./:;<=>?@[\]^'||
9464 IF ATTRS.ATTRIBUTE_NAME = 'FLEX_FORMAT_PHONE_NUMBER' THEN
9465 IF l_mincol_list(ATTRS.COLNUM) = 'Y' THEN
9466 l_select(idx) := 'translate(phone_number,''0123456789ABCDEFGHIJKLMNOPQRSTUV'||
9468 '_`{|}~ '',''0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ'') || '' '' || ' ||
9469 'translate(phone_area_code||'' '' || phone_number,''0123456789ABCDEFGHIJKLMNOPQRSTUV'||
9470 'WXYZabcdefghijklmnopqrstuvwxyz!"#$%&()''''*+,-./:;<=>?@[\]^'||
9471 '_`{|}~ '',''0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ'') || '' '' || '||
9472 ' translate(phone_country_code|| '' '' || phone_area_code||'' '' || phone_number,''0123456789ABCDEFGHIJKLMNOPQRSTUV'||
9473 'WXYZabcdefghijklmnopqrstuvwxyz!"#$%&()''''*+,-./:;<=>?@[\]^'||
9474 '_`{|}~ '',''0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ'')';
9475 END IF;
9476 ELSIF ATTRS.ATTRIBUTE_NAME = 'RAW_PHONE_NUMBER' THEN
9477 IF l_mincol_list(ATTRS.COLNUM) = 'Y' THEN
9478 l_select(idx) := 'translate(phone_country_code|| '' '' || phone_area_code||'' '' || phone_number,''0123456789ABCDEFGHIJKLMNOPQRSTUV'||
9479 'WXYZabcdefghijklmnopqrstuvwxyz!"#$%&()''''*+,-./:;<=>?@[\]^_'||
9480 '`{|}~ '',''0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ'')';
9481
9482 END IF;
9483 ELSE
9484 IF l_mincol_list(ATTRS.COLNUM) = 'Y' THEN
9485 IF has_context(ATTRS.custom_attribute_procedure) THEN
9486 l_custom_list(ATTRS.COLNUM) := ATTRS.custom_attribute_procedure || '(H_CONTACT_POINT_ID(I),''CONTACT_POINTS'','''||ATTRS.ATTRIBUTE_NAME|| ''', ''STAGE'')';
9487 ELSE
9488 l_custom_list(ATTRS.COLNUM) := ATTRS.custom_attribute_procedure || '(H_CONTACT_POINT_ID(I), ''CONTACT_POINTS'','''||ATTRS.ATTRIBUTE_NAME|| ''')';
9489 END IF;
9490 END IF;
9491 END IF;
9492 END IF;
9493 idx := idx+1;
9494
9495 -- VJN ADDED CODE FOR TRACKING CONDITION ATTRIBUTES AT THIS ENTITY LEVEL
9496 IF HZ_WORD_CONDITIONS_PKG.is_a_cond_attrib( ATTRS.attribute_id)
9497 THEN
9498 l_cond_attrib_list(ATTRS.COLNUM) := ATTRS.attribute_id ;
9499 END IF;
9500
9501 END LOOP;
9502
9503 IF cur_col_num<=255 THEN--bug 5977628
9504 FOR I in cur_col_num..255 LOOP
9505 l_mincol_list(I) := 'N';
9506 l_forall_list(I) := 'N';
9507 l_custom_list(I) := 'N';
9508 END LOOP;
9509 END IF;
9510
9511 l(' CURSOR contact_pt_cur IS');
9512 l(' SELECT /*+ ORDERED USE_NL(cp) */ cp.CONTACT_POINT_ID, g.party_id, g.party_site_id, g.org_contact_id, cp.CONTACT_POINT_TYPE, PARTY_INDEX, cp.STATUS '); -- Bug No:4299785
9513 FOR I in 1..l_select.COUNT LOOP
9514 IF l_select(I) <> 'N' THEN
9515 l(' ,' || l_select(I));
9516 END IF;
9517 END LOOP;
9518 l(' FROM HZ_DQM_STAGE_GT g,HZ_CONTACT_POINTS cp');
9519 l(' WHERE cp.owner_table_id = g.owner_id ');
9520 l(' AND cp.OWNER_TABLE_NAME = nvl(g.owner_table,''HZ_PARTIES'') ');
9521 l(' AND (cp.status is null OR cp.status = ''A'' or cp.status = ''I''); ');
9522 l('');
9523 l(' BEGIN');
9524 l(' OPEN contact_pt_cur;');
9525 l(' LOOP');
9526 l(' FETCH contact_pt_cur BULK COLLECT INTO');
9527 l(' H_CONTACT_POINT_ID');
9528 l(' ,H_CPT_PARTY_ID');
9529 l(' ,H_CPT_PARTY_SITE_ID');
9530 l(' ,H_CPT_ORG_CONTACT_ID');
9531 l(' ,H_CONTACT_POINT_TYPE');
9532 l(' ,H_PARTY_INDEX');
9533 l(' ,H_STATUS'); -- Bug No:4299785
9534
9535 FOR I IN 1..255 LOOP
9536 IF l_forall_list(I) <> 'N' AND l_mincol_list(I) = 'Y' AND
9537 l_custom_list(I) = 'N' THEN
9538 l(' ,H_TX'||I);
9539 END IF;
9540 END LOOP;
9541 l(' LIMIT l_limit;');
9542 l('');
9543 l(' IF contact_pt_cur%NOTFOUND THEN');
9544 l(' l_last_fetch:=TRUE;');
9545 l(' END IF;');
9546
9547 l(' IF H_CPT_PARTY_ID.COUNT=0 AND l_last_fetch THEN');
9548 l(' EXIT;');
9549 l(' END IF;');
9550
9551 l(' FOR I in H_CPT_PARTY_ID.FIRST..H_CPT_PARTY_ID.LAST LOOP');
9552
9553 -- VJN INTRODUCED CODE FOR GENERATING THE POPULATION
9554 -- OF THE GLOBAL CONDITION RECORD
9555
9556 l_idx := l_cond_attrib_list.FIRST ;
9557 IF l_idx IS NOT NULL
9558 THEN
9559 l('----------- SETTING GLOBAL CONDITION RECORD AT THE CONTACT POINT LEVEL ---------');
9560 END IF ;
9561
9562 l('');
9563
9564
9565 WHILE l_cond_attrib_list.EXISTS(l_idx)
9566 LOOP
9567
9568 l(' HZ_WORD_CONDITIONS_PKG.set_gbl_condition_rec ('||l_cond_attrib_list(l_idx)||','||'H_TX'||l_idx||'(I));');
9569 l_idx := l_idx+1;
9570 END LOOP;
9571 FOR I IN 1..255 LOOP
9572 IF l_forall_list(I) <> 'N' THEN
9573 IF l_custom_list(I) <> 'N' AND l_mincol_list(I) = 'Y' THEN
9574 l(' H_TX'||I||'(I):='||l_custom_list(I)||';');
9575 END IF;
9576 END IF;
9577 END LOOP;
9578 FOR I IN 1..255 LOOP
9579 IF l_forall_list(I) <> 'N' THEN
9580 IF l_mincol_list(I) <> 'Y' THEN
9581 l(' H_TX'||I||'(I):='||l_forall_list(I)||';');
9582 END IF;
9583 END IF;
9584 END LOOP;
9585 FOR I IN 1..255 LOOP
9586 IF l_forall_list(I) <> 'N' THEN
9587 IF l_mincol_list(I) = 'Y' THEN
9591 END LOOP;
9588 l(' H_TX'||I||'(I):='||l_forall_list(I)||';');
9589 END IF;
9590 END IF;
9592 FIRST := TRUE;
9593 FOR ATTRS IN (SELECT a.ATTRIBUTE_ID,
9594 a.ATTRIBUTE_NAME,
9595 a.SOURCE_TABLE,
9596 a.CUSTOM_ATTRIBUTE_PROCEDURE,
9597 f.PROCEDURE_NAME,
9598 f.STAGED_ATTRIBUTE_COLUMN,
9599 to_number(substrb(STAGED_ATTRIBUTE_COLUMN, 3)) COLNUM
9600 FROM HZ_TRANS_ATTRIBUTES_VL a, HZ_TRANS_FUNCTIONS_VL f
9601 WHERE ENTITY_NAME = 'CONTACT_POINTS'
9602 AND nvl(f.ACTIVE_FLAG,'Y') = 'Y'
9603 AND f.ATTRIBUTE_ID = a.ATTRIBUTE_ID
9604 AND nvl(a.DENORM_FLAG,'N') = 'Y') LOOP
9605 IF FIRST THEN
9606 -- Fix for bug 4872997
9607 -- Wrapping the 'l_denorm' portion of code into a begin-excpetion block
9608 -- and setting the denorm value to 'SYNC' if sqlcode-6502 error occurs
9609 l(' BEGIN ');
9610 l(' l_denorm := H_TX'||ATTRS.COLNUM||'(I)');
9611 FIRST := FALSE;
9612 ELSE
9613 l(' || '' '' || H_TX'||ATTRS.COLNUM||'(I)');
9614 END IF;
9615 END LOOP;
9616 IF NOT FIRST THEN
9617 l(' ;');
9618 l(' IF H_CPT_DEN(H_PARTY_INDEX(I)) = ''SYNC'' THEN');
9619 l(' NULL;');
9620 l(' ELSIF lengthb(H_CPT_DEN(H_PARTY_INDEX(I)))+lengthb(l_denorm)<2000 THEN');
9621 l(' IF H_CPT_DEN(H_PARTY_INDEX(I)) IS NULL OR instrb(H_CPT_DEN(H_PARTY_INDEX(I)),l_denorm)= 0 THEN');
9622 l(' H_CPT_DEN(H_PARTY_INDEX(I)) := H_CPT_DEN(H_PARTY_INDEX(I)) || '' '' || l_denorm;');
9623 l(' END IF;');
9624 l(' ELSE');
9625 l(' H_CPT_DEN(H_PARTY_INDEX(I)) := ''SYNC'';');
9626 l(' END IF;');
9627 l(' EXCEPTION WHEN OTHERS THEN ');
9628 l(' IF SQLCODE=-6502 THEN');
9629 l(' H_CPT_DEN(H_PARTY_INDEX(I)) := ''SYNC'';');
9630 l(' END IF; ');
9631 l(' END; ');
9632 END IF;
9633
9634 l(' END LOOP;');
9635 l(' l_st := 1; ');
9636 l(' l_en := H_CPT_PARTY_ID.COUNT; ');
9637 l(' LOOP ');
9638 l(' BEGIN ');
9639 l(' FORALL I in l_st..l_en');
9640 l(' INSERT INTO HZ_STAGED_CONTACT_POINTS (');
9641 l(' CONTACT_POINT_ID');
9642 l(' ,PARTY_ID');
9643 l(' ,PARTY_SITE_ID');
9644 l(' ,ORG_CONTACT_ID');
9645 l(' ,CONTACT_POINT_TYPE');
9646 l(' ,STATUS_FLAG'); --Bug No: 4299785
9647
9648 FOR I IN 1..255 LOOP
9649 IF l_forall_list(I) <> 'N' THEN
9650 l(' , TX'||I);
9651 END IF;
9652 END LOOP;
9653
9654 l(' ) VALUES (');
9655 l(' H_CONTACT_POINT_ID(I)');
9656 l(' ,H_CPT_PARTY_ID(I)');
9657 l(' ,H_CPT_PARTY_SITE_ID(I)');
9658 l(' ,H_CPT_ORG_CONTACT_ID(I)');
9659 l(' ,H_CONTACT_POINT_TYPE(I)');
9660 l(' ,H_STATUS(I)'); --Bug No: 4299785
9661
9662 FOR I IN 1..255 LOOP
9663 IF l_forall_list(I) <> 'N' THEN
9664 l(' , decode(H_TX'||I||'(I),null,H_TX'||I||'(I),H_TX'||I||'(I)||'' '')');
9665 END IF;
9666 END LOOP;
9667 l(' );');
9668 l(' EXIT; ');
9669 l(' EXCEPTION WHEN OTHERS THEN ');
9670 l(' l_st:= l_st+SQL%ROWCOUNT+1;');
9671 l(' END; ');
9672 l(' END LOOP; ');
9673 l(' IF l_last_fetch THEN');
9674 l(' EXIT;');
9675 l(' END IF;');
9676 l(' END LOOP;');
9677 l(' CLOSE contact_pt_cur;');
9678 l(' END;');
9679
9680 l('');
9681 l(' PROCEDURE sync_single_contact_point (');
9682 l(' p_contact_point_id NUMBER,');
9683 l(' p_operation VARCHAR2) IS');
9684 l('');
9685 l(' l_tryins BOOLEAN;');
9686 l(' l_tryupd BOOLEAN;');
9687 l(' BEGIN');
9688 l(' SELECT cp.CONTACT_POINT_ID, d.PARTY_ID, d.PARTY_SITE_ID, d.ORG_CONTACT_ID, cp.CONTACT_POINT_TYPE, cp.STATUS '); --Bug No: 4299785
9689 FOR I in 1..l_select.COUNT LOOP
9690 IF l_select(I) <> 'N' THEN
9691 l(' ,' || l_select(I));
9692 END IF;
9693 END LOOP;
9694 l(' INTO H_CONTACT_POINT_ID(1),H_PARTY_ID(1), H_PARTY_SITE_ID(1),H_ORG_CONTACT_ID(1),H_CONTACT_POINT_TYPE(1), H_STATUS(1)'); --Bug No: 4299785
9695 FOR I IN 1..255 LOOP
9696 IF l_forall_list(I) <> 'N' AND l_mincol_list(I) = 'Y' AND
9697 l_custom_list(I) = 'N' THEN
9698 l(' , H_TX'||I||'(1)');
9699 END IF;
9700 END LOOP;
9701 l(' FROM HZ_CONTACT_POINTS cp, HZ_DQM_SYNC_INTERFACE d ');
9702 l(' WHERE d.ENTITY = ''CONTACT_POINTS'' ');
9703 l(' AND cp.contact_point_id = p_contact_point_id ');
9704 l(' AND cp.contact_point_id = d.RECORD_ID ');
9705 l(' AND (cp.status is null OR cp.status = ''A'' or cp.status = ''I'') and rownum = 1 ; ');
9706 -- VJN INTRODUCED CODE FOR GENERATING THE POPULATION
9707 -- OF THE GLOBAL CONDITION RECORD
9708
9709 l_idx := l_cond_attrib_list.FIRST ;
9710 IF l_idx IS NOT NULL
9711 THEN
9715
9712 l('----------- SETTING GLOBAL CONDITION RECORD AT THE CONTACT POINT LEVEL ---------');
9713 END IF ;
9714
9716 WHILE l_cond_attrib_list.EXISTS(l_idx)
9717 LOOP
9718
9719 l(' HZ_WORD_CONDITIONS_PKG.set_gbl_condition_rec ('||l_cond_attrib_list(l_idx)||','||'H_TX'||l_idx||'(1));');
9720 l_idx := l_idx+1;
9721 END LOOP;
9722 FOR I IN 1..255 LOOP
9723 IF l_forall_list(I) <> 'N' THEN
9724 IF l_custom_list(I) <> 'N' AND l_mincol_list(I) = 'Y' THEN
9725 l(' H_TX'||I||'(1):='||replace(l_custom_list(I),'(I)','(1)')||';');
9726 END IF;
9727 END IF;
9728 END LOOP;
9729 FOR I IN 1..255 LOOP
9730 IF l_forall_list(I) <> 'N' THEN
9731 IF l_mincol_list(I) <> 'Y' THEN
9732 l(' H_TX'||I||'(1):='||replace(l_forall_list(I),'(I)','(1)')||';');
9733 END IF;
9734 END IF;
9735 END LOOP;
9736 FOR I IN 1..255 LOOP
9737 IF l_forall_list(I) <> 'N' THEN
9738 IF l_mincol_list(I) = 'Y' THEN
9739 l(' H_TX'||I||'(1):='||replace(l_forall_list(I),'(I)','(1)')||';');
9740 END IF;
9741 END IF;
9742 END LOOP;
9743 l(' l_tryins := FALSE;');
9744 l(' l_tryupd := FALSE;');
9745 l(' IF p_operation=''C'' THEN');
9746 l(' l_tryins:=TRUE;');
9747 l(' ELSE ');
9748 l(' l_tryupd:=TRUE;');
9749 l(' END IF;');
9750 l(' WHILE (l_tryins OR l_tryupd) LOOP');
9751 l(' IF l_tryins THEN');
9752 l(' BEGIN');
9753 l(' l_tryins:=FALSE;');
9754 l(' INSERT INTO HZ_STAGED_CONTACT_POINTS (');
9755 l(' CONTACT_POINT_ID');
9756 l(' ,PARTY_ID');
9757 l(' ,PARTY_SITE_ID');
9758 l(' ,ORG_CONTACT_ID');
9759 l(' ,CONTACT_POINT_TYPE');
9760 l(' ,STATUS_FLAG');--Bug No: 4299785
9761
9762 FOR I IN 1..255 LOOP
9763 IF l_forall_list(I) <> 'N' THEN
9764 l(' , TX'||I);
9765 END IF;
9766 END LOOP;
9767
9768 l(' ) VALUES (');
9769 l(' H_CONTACT_POINT_ID(1)');
9770 l(' ,H_PARTY_ID(1)');
9771 l(' ,H_PARTY_SITE_ID(1)');
9772 l(' ,H_ORG_CONTACT_ID(1)');
9773 l(' ,H_CONTACT_POINT_TYPE(1)');
9774 l(' ,H_STATUS(1)'); --Bug No: 4299785
9775
9776 FOR I IN 1..255 LOOP
9777 IF l_forall_list(I) <> 'N' THEN
9778 l(' , decode(H_TX'||I||'(1),null,H_TX'||I||'(1),H_TX'||I||'(1)||'' '')');
9779 END IF;
9780 END LOOP;
9781
9782 l(' );');
9783 l(' EXCEPTION');
9784 l(' WHEN DUP_VAL_ON_INDEX THEN');
9785 l(' IF p_operation=''C'' THEN');
9786 l(' l_tryupd:=TRUE;');
9787 l(' END IF;');
9788 l(' END;');
9789 l(' END IF;');
9790 l(' IF l_tryupd THEN');
9791 l(' BEGIN');
9792 l(' l_tryupd:=FALSE;');
9793 l(' UPDATE HZ_STAGED_CONTACT_POINTS SET ');
9794 l(' concat_col = concat_col');
9795 l(' ,status_flag = H_STATUS(1) ');--Bug No: 4299785
9796
9797 FOR I IN 1..255 LOOP
9798 IF l_forall_list(I) <> 'N' THEN
9799 IF (is_first) THEN
9800 is_first := false;
9801 l(' ,TX'||I||'=decode(H_TX'||I||'(1),null,H_TX'||I||'(1),H_TX'||I||'(1)||'' '')');
9802 ELSE
9803 l(' ,TX'||I||'=decode(H_TX'||I||'(1),null,H_TX'||I||'(1),H_TX'||I||'(1)||'' '')');
9804 END IF;
9805 END IF;
9806 END LOOP;
9807 l(' WHERE CONTACT_POINT_ID=H_CONTACT_POINT_ID(1);');
9808 l(' IF SQL%ROWCOUNT=0 AND p_operation=''U'' THEN');
9809 l(' l_tryins := TRUE;');
9810 l(' END IF;');
9811 l(' EXCEPTION ');
9812 l(' WHEN NO_DATA_FOUND THEN');
9813 l(' IF p_operation=''U'' THEN');
9814 l(' l_tryins := TRUE;');
9815 l(' END IF;');
9816 l(' END;');
9817 l(' END IF;');
9818 l(' END LOOP;');
9819 l(' --Fix for bug 5048604, to update concat_col during update of denorm column ');
9820 l(' UPDATE HZ_STAGED_PARTIES set');
9821 l(' D_CPT = ''SYNC''');
9822 l(' ,CONCAT_COL = CONCAT_COL ');
9823 l(' WHERE PARTY_ID = H_PARTY_ID(1);');
9824 l(' END;');
9825
9826 -- VJN Introduced for SYNC.
9827 is_first := true ;
9828 l('');
9829 l(' PROCEDURE sync_single_cpt_online (');
9830 l(' p_contact_point_id NUMBER,');
9831 l(' p_operation VARCHAR2) IS');
9832 l('');
9833 l(' l_tryins BOOLEAN;');
9834 l(' l_tryupd BOOLEAN;');
9835 l(' l_party_id NUMBER := 0; ');
9836 l(' l_party_id1 NUMBER; ');
9837 l(' l_org_contact_id NUMBER; ');
9838 l(' l_party_site_id NUMBER; ');
9839 l(' l_pr_id NUMBER; ');
9840 l(' l_num_ocs NUMBER; ');
9841 l(' l_ot_id NUMBER; ');
9842 l(' l_ot_table VARCHAR2(60); ');
9843 l(' l_party_type VARCHAR2(60); ');
9844 l(' l_sql_err_message VARCHAR2(2000); ');
9845 l('');
9846 l(' BEGIN');
9847 l('');
9848 l(' l_org_contact_id := -1; ');
9849 l(' l_party_site_id := -1; ');
9850 l('');
9851 l(' SELECT owner_table_name,owner_table_id INTO l_ot_table, l_ot_id ');
9852 l(' FROM hz_contact_points ');
9856 l(' SELECT p.party_id, ps.party_site_id, party_type ');
9853 l(' WHERE contact_point_id = p_contact_point_id; ');
9854 l('');
9855 l(' IF l_ot_table = ''HZ_PARTY_SITES'' THEN ');
9857 l(' INTO l_party_id1, l_party_site_id, l_party_type ');
9858 l(' FROM HZ_PARTY_SITES ps, HZ_PARTIES p ');
9859 l(' WHERE party_site_id = l_ot_id ');
9860 l(' AND p.party_id = ps.party_id; ');
9861 l('');
9862 l(' IF l_party_type = ''PARTY_RELATIONSHIP'' THEN ');
9863 l(' BEGIN ');
9864 l(' SELECT r.object_id, org_contact_id INTO l_party_id,l_org_contact_id ');
9865 l(' FROM HZ_ORG_CONTACTS oc, HZ_RELATIONSHIPS r ');
9866 l(' WHERE r.party_id = l_party_id1 ');
9867 l(' AND r.relationship_id = oc.party_relationship_id ');
9868 l(' AND r.directional_flag = ''F'' ');
9869 l(' AND r.SUBJECT_TABLE_NAME = ''HZ_PARTIES'' ');
9870 l(' AND r.OBJECT_TABLE_NAME = ''HZ_PARTIES''; ');
9871 l(' EXCEPTION ');
9872 l(' WHEN NO_DATA_FOUND THEN ');
9873 l(' RETURN; ');
9874 l(' END; ');
9875 l(' ELSE ');
9876 l(' l_party_id:=l_party_id1; ');
9877 l(' l_org_contact_id:=NULL; ');
9878 l(' END IF; ');
9879 l('');
9880 l(' ELSIF l_ot_table = ''HZ_PARTIES'' THEN ');
9881 l(' l_party_site_id := NULL; ');
9882 l(' SELECT party_type INTO l_party_type ');
9883 l(' FROM hz_parties ');
9884 l(' WHERE party_id = l_ot_id; ');
9885 l('');
9886 l(' IF l_party_type <> ''PARTY_RELATIONSHIP'' THEN ');
9887 l(' l_party_id := l_ot_id; ');
9888 l(' l_org_contact_id:=NULL; ');
9889 l(' ELSE ');
9890 l(' BEGIN ');
9891 l(' SELECT r.object_id, org_contact_id INTO l_party_id,l_org_contact_id ');
9892 l(' FROM HZ_ORG_CONTACTS oc, HZ_RELATIONSHIPS r ');
9893 l(' WHERE r.party_id = l_ot_id ');
9894 l(' AND r.relationship_id = oc.party_relationship_id ');
9895 l(' AND r.directional_flag = ''F'' ');
9896 l(' AND r.SUBJECT_TABLE_NAME = ''HZ_PARTIES'' ');
9897 l(' AND r.OBJECT_TABLE_NAME = ''HZ_PARTIES''; ');
9898 l(' EXCEPTION ');
9899 l(' WHEN NO_DATA_FOUND THEN ');
9900 l(' RETURN; ');
9901 l(' END; ');
9902 l(' END IF; ');
9903 l(' END IF; ');
9904 l('');
9905 l(' SELECT cp.CONTACT_POINT_ID, l_party_id, l_party_site_id, l_org_contact_id, cp.CONTACT_POINT_TYPE, cp.STATUS '); --Bug No: 4299785
9906 FOR I in 1..l_select.COUNT LOOP
9907 IF l_select(I) <> 'N' THEN
9908 l(' ,' || l_select(I));
9909 END IF;
9910 END LOOP;
9911 l(' INTO H_CONTACT_POINT_ID(1),H_PARTY_ID(1), H_PARTY_SITE_ID(1),H_ORG_CONTACT_ID(1),H_CONTACT_POINT_TYPE(1), H_STATUS(1)'); --Bug No: 4299785
9912 FOR I IN 1..255 LOOP
9913 IF l_forall_list(I) <> 'N' AND l_mincol_list(I) = 'Y' AND
9914 l_custom_list(I) = 'N' THEN
9915 l(' ,H_TX'||I||'(1)');
9916 END IF;
9917 END LOOP;
9918 l(' FROM HZ_CONTACT_POINTS cp ');
9919 l(' WHERE ');
9920 l(' cp.contact_point_id = p_contact_point_id ');
9921 l(' AND (cp.status is null OR cp.status = ''A'' or cp.status = ''I'') and rownum = 1 ; ');
9922 l('');
9923
9924 -- VJN INTRODUCED CODE FOR GENERATING THE POPULATION
9925 -- OF THE GLOBAL CONDITION RECORD
9926
9927 l_idx := l_cond_attrib_list.FIRST ;
9928 IF l_idx IS NOT NULL
9929 THEN
9930 l(' ---- SETTING GLOBAL CONDITION RECORD AT THE CONTACT POINT LEVEL ----');
9931 END IF ;
9932
9933
9934 WHILE l_cond_attrib_list.EXISTS(l_idx)
9935 LOOP
9936
9937 l(' HZ_WORD_CONDITIONS_PKG.set_gbl_condition_rec ('||l_cond_attrib_list(l_idx)||','||'H_TX'||l_idx||'(1));');
9938 l_idx := l_idx+1;
9939 END LOOP;
9940 FOR I IN 1..255 LOOP
9941 IF l_forall_list(I) <> 'N' THEN
9942 IF l_custom_list(I) <> 'N' AND l_mincol_list(I) = 'Y' THEN
9943 l(' H_TX'||I||'(1):='||replace(l_custom_list(I),'(I)','(1)')||';');
9944 END IF;
9945 END IF;
9946 END LOOP;
9947 FOR I IN 1..255 LOOP
9948 IF l_forall_list(I) <> 'N' THEN
9949 IF l_mincol_list(I) <> 'Y' THEN
9950 l(' H_TX'||I||'(1):='||replace(l_forall_list(I),'(I)','(1)')||';');
9951 END IF;
9952 END IF;
9953 END LOOP;
9954 FOR I IN 1..255 LOOP
9955 IF l_forall_list(I) <> 'N' THEN
9956 IF l_mincol_list(I) = 'Y' THEN
9957 l(' H_TX'||I||'(1):='||replace(l_forall_list(I),'(I)','(1)')||';');
9958 END IF;
9959 END IF;
9960 END LOOP;
9961 l('');
9962 l(' l_tryins := FALSE;');
9963 l(' l_tryupd := FALSE;');
9964 l('');
9965 l(' IF p_operation=''C'' THEN');
9966 l(' l_tryins:=TRUE;');
9967 l(' ELSE ');
9968 l(' l_tryupd:=TRUE;');
9969 l(' END IF;');
9970 l('');
9971 l(' WHILE (l_tryins OR l_tryupd) LOOP');
9972 l(' IF l_tryins THEN');
9973 l(' BEGIN');
9974 l(' l_tryins:=FALSE;');
9975 l(' INSERT INTO HZ_STAGED_CONTACT_POINTS (');
9976 l(' CONTACT_POINT_ID');
9977 l(' ,PARTY_ID');
9978 l(' ,PARTY_SITE_ID');
9979 l(' ,ORG_CONTACT_ID');
9980 l(' ,CONTACT_POINT_TYPE');
9981 l(' ,STATUS_FLAG'); --Bug No: 4299785
9982
9986 END IF;
9983 FOR I IN 1..255 LOOP
9984 IF l_forall_list(I) <> 'N' THEN
9985 l(' ,TX'||I);
9987 END LOOP;
9988
9989 l(' ) VALUES (');
9990 l(' H_CONTACT_POINT_ID(1)');
9991 l(' ,H_PARTY_ID(1)');
9992 l(' ,H_PARTY_SITE_ID(1)');
9993 l(' ,H_ORG_CONTACT_ID(1)');
9994 l(' ,H_CONTACT_POINT_TYPE(1)');
9995 l(' ,H_STATUS(1)'); --Bug No: 4299785
9996
9997 FOR I IN 1..255 LOOP
9998 IF l_forall_list(I) <> 'N' THEN
9999 l(' ,decode(H_TX'||I||'(1),null,H_TX'||I||'(1),H_TX'||I||'(1)||'' '')');
10000 END IF;
10001 END LOOP;
10002
10003 l(' );');
10004 l(' EXCEPTION');
10005 l(' WHEN DUP_VAL_ON_INDEX THEN');
10006 l(' IF p_operation=''C'' THEN');
10007 l(' l_tryupd:=TRUE;');
10008 l(' END IF;');
10009 l(' END;');
10010 l(' END IF;');
10011 l('');
10012 l(' IF l_tryupd THEN');
10013 l(' BEGIN');
10014 l(' l_tryupd:=FALSE;');
10015 l(' UPDATE HZ_STAGED_CONTACT_POINTS SET ');
10016 l(' concat_col = concat_col');
10017 l(' ,status_flag = H_STATUS(1) '); --Bug No: 4299785
10018
10019 FOR I IN 1..255 LOOP
10020 IF l_forall_list(I) <> 'N' THEN
10021 IF (is_first) THEN
10022 is_first := false;
10023 l(' ,TX'||I||'=decode(H_TX'||I||'(1),null,H_TX'||I||'(1),H_TX'||I||'(1)||'' '')');
10024 ELSE
10025 l(' ,TX'||I||'=decode(H_TX'||I||'(1),null,H_TX'||I||'(1),H_TX'||I||'(1)||'' '')');
10026 END IF;
10027 END IF;
10028 END LOOP;
10029 l(' WHERE CONTACT_POINT_ID=H_CONTACT_POINT_ID(1);');
10030 l(' IF SQL%ROWCOUNT=0 AND p_operation=''U'' THEN');
10031 l(' l_tryins := TRUE;');
10032 l(' END IF;');
10033 l(' EXCEPTION ');
10034 l(' WHEN NO_DATA_FOUND THEN');
10035 l(' IF p_operation=''U'' THEN');
10036 l(' l_tryins := TRUE;');
10037 l(' END IF;');
10038 l(' END;');
10039 l(' END IF;');
10040 l(' END LOOP;');
10041 l('');
10042 l(' --Fix for bug 5048604, to update concat_col during update of denorm column ');
10043 l(' UPDATE HZ_STAGED_PARTIES set');
10044 l(' D_CPT = ''SYNC''');
10045 l(' ,CONCAT_COL = CONCAT_COL ');
10046 l(' WHERE PARTY_ID = H_PARTY_ID(1);');
10047 l('');
10048 l(' -- REPURI. Bug 4884742. If shadow staging is completely successfully ');
10049 l(' -- insert a record into hz_dqm_sh_sync_interface table for each record ');
10050 l(' IF (HZ_DQM_SYNC.is_shadow_staging_complete) THEN ');
10051 l(' BEGIN ');
10052 l(' HZ_DQM_SYNC.insert_sh_interface_rec(l_party_id,p_contact_point_id,l_party_site_id, l_org_contact_id, ''CONTACT_POINTS'',p_operation); ');
10053 l(' EXCEPTION WHEN OTHERS THEN ');
10054 l(' NULL; ');
10055 l(' END; ');
10056 l(' END IF; ');
10057 l('');
10058 -- Fix for Bug 4862121.
10059 -- Added the Exception handling at this context, for the procedure.
10060 l(' EXCEPTION WHEN OTHERS THEN ');
10061 l(' -- FAILOVER : REPORT RECORD TO HZ_DQM_SYNC_INTERFACE ');
10062 l(' -- FOR ONLINE FLOWS ');
10063 l(' l_sql_err_message := SQLERRM; ');
10064 l(' insert_dqm_sync_error_rec(l_party_id, p_contact_point_id, l_party_site_id, l_org_contact_id, ''CONTACT_POINTS'', p_operation, ''E'', ''Y'', l_sql_err_message); ');
10065 l(' END;');
10066
10067 END;
10068
10069 PROCEDURE generate_party_query_upd(
10070 x_rebuild_party_idx OUT NOCOPY BOOLEAN) IS
10071 cur_col_num NUMBER := 1;
10072
10073 TYPE coltab IS TABLE OF VARCHAR2(2000) INDEX BY BINARY_INTEGER;
10074
10075 l_org_select coltab;
10076 l_per_select coltab;
10077 l_oth_select coltab;
10078
10079 l_forall_list coltab;
10080 l_custom_list coltab;
10081 l_mincol_list coltab;
10082 l_min_colnum NUMBER;
10083 idx NUMBER :=1;
10084 FIRST BOOLEAN;
10085 -- VJN Introduced for conditional word replacements
10086 l_cond_attrib_list coltab ;
10087 l_idx number ;
10088
10089 BEGIN
10090 l('');
10091 l(' PROCEDURE open_party_cursor( ');
10092 l(' p_party_type IN VARCHAR2,');
10093 l(' p_worker_number IN NUMBER,');
10094 l(' p_num_workers IN NUMBER,');
10095 l(' x_party_cur IN OUT HZ_PARTY_STAGE.StageCurTyp) IS ');
10096 l('');
10097 l(' l_party_type VARCHAR2(255);');
10098 l(' BEGIN');
10099
10100 FOR ATTRS IN (SELECT a.ATTRIBUTE_ID,
10101 a.ATTRIBUTE_NAME,
10102 a.SOURCE_TABLE,
10103 a.CUSTOM_ATTRIBUTE_PROCEDURE,
10104 f.PROCEDURE_NAME,
10105 f.STAGED_ATTRIBUTE_COLUMN,
10106 to_number(substrb(STAGED_ATTRIBUTE_COLUMN, 3)) COLNUM
10107 FROM HZ_TRANS_ATTRIBUTES_VL a, HZ_TRANS_FUNCTIONS_VL f
10108 WHERE ENTITY_NAME = 'PARTY'
10109 AND nvl(f.ACTIVE_FLAG,'Y') = 'Y'
10110 AND f.ATTRIBUTE_ID = a.ATTRIBUTE_ID
10111 AND f.STAGED_FLAG='N'
10112 ORDER BY COLNUM) LOOP
10113 IF cur_col_num<ATTRS.COLNUM THEN
10114 FOR I in cur_col_num..ATTRS.COLNUM-1 LOOP
10118 END IF;
10115 l_mincol_list(I) := 'N';
10116 l_forall_list(I) := 'N';
10117 END LOOP;
10119 cur_col_num:=ATTRS.COLNUM+1;
10120 IF has_trx_context(ATTRS.PROCEDURE_NAME) THEN
10121 l_forall_list(ATTRS.COLNUM) := ATTRS.PROCEDURE_NAME || '(H_TX'||ATTRS.COLNUM||'(I),NULL, ''' || ATTRS.ATTRIBUTE_NAME || ''',''PARTY'',''STAGE'')';
10122 ELSE
10123 l_forall_list(ATTRS.COLNUM) := ATTRS.PROCEDURE_NAME || '(H_TX'||ATTRS.COLNUM||'(I),NULL, ''' || ATTRS.ATTRIBUTE_NAME || ''',''PARTY'')';
10124 END IF;
10125
10126 l_mincol_list(ATTRS.COLNUM) := 'N';
10127 IF ATTRS.CUSTOM_ATTRIBUTE_PROCEDURE IS NULL THEN
10128 IF ATTRS.SOURCE_TABLE='HZ_ORGANIZATION_PROFILES' THEN
10129 l_org_select(idx) := 'op.'||ATTRS.ATTRIBUTE_NAME;
10130 l_per_select(idx) := 'NULL';
10131 l_oth_select(idx) := 'NULL';
10132 ELSIF ATTRS.SOURCE_TABLE='HZ_PERSON_PROFILES' THEN
10133 l_per_select(idx) := 'pe.'||ATTRS.ATTRIBUTE_NAME;
10134 l_org_select(idx) := 'NULL';
10135 l_oth_select(idx) := 'NULL';
10136 ELSIF ATTRS.SOURCE_TABLE='HZ_PERSON_PROFILES, HZ_ORGANIZATION_PROFILES' OR
10137 ATTRS.SOURCE_TABLE='HZ_ORGANIZATION_PROFILES, HZ_PERSON_PROFILES' THEN
10138 l_org_select(idx) := 'op.'||ATTRS.ATTRIBUTE_NAME;
10139 l_per_select(idx) := 'pe.'||ATTRS.ATTRIBUTE_NAME;
10140 l_oth_select(idx) := 'NULL';
10141 ELSE
10142 l_org_select(idx) := 'p.'||ATTRS.ATTRIBUTE_NAME;
10143 l_per_select(idx) := 'p.'||ATTRS.ATTRIBUTE_NAME;
10144 l_oth_select(idx) := 'p.'||ATTRS.ATTRIBUTE_NAME;
10145 END IF;
10146 ELSE
10147 SELECT min(to_number(substrb(STAGED_ATTRIBUTE_COLUMN, 3))) INTO l_min_colnum
10148 FROM HZ_TRANS_ATTRIBUTES_VL a, HZ_TRANS_FUNCTIONS_VL f
10149 WHERE ENTITY_NAME = 'PARTY'
10150 AND nvl(f.ACTIVE_FLAG,'Y') = 'Y'
10151 AND f.ATTRIBUTE_ID = a.ATTRIBUTE_ID
10152 AND a.ATTRIBUTE_NAME=ATTRS.ATTRIBUTE_NAME
10153 AND f.STAGED_FLAG='N';
10154
10155 l_org_select(idx) := 'NULL';
10156 l_oth_select(idx) := 'NULL';
10157 l_per_select(idx) := 'NULL';
10158 IF ATTRS.colnum>l_min_colnum THEN
10159 IF has_trx_context(ATTRS.PROCEDURE_NAME) THEN
10160 l_forall_list(ATTRS.COLNUM) := ATTRS.PROCEDURE_NAME || '(H_TX'||l_min_colnum||'(I),NULL, ''' || ATTRS.ATTRIBUTE_NAME || ''',''PARTY'',''STAGE'')';
10161 ELSE
10162 l_forall_list(ATTRS.COLNUM) := ATTRS.PROCEDURE_NAME || '(H_TX'||l_min_colnum||'(I),NULL, ''' || ATTRS.ATTRIBUTE_NAME || ''',''PARTY'')';
10163 END IF;
10164
10165 l_mincol_list(ATTRS.COLNUM) := 'N';
10166 ELSE
10167 l_mincol_list(ATTRS.COLNUM) := 'Y';
10168 IF has_context(ATTRS.custom_attribute_procedure) THEN
10169 l_custom_list(ATTRS.COLNUM) := ATTRS.custom_attribute_procedure || '(H_PARTY_ID(I),''PARTY'','''||ATTRS.ATTRIBUTE_NAME|| ''', ''STAGE'')';
10170 ELSE
10171 l_custom_list(ATTRS.COLNUM) := ATTRS.custom_attribute_procedure || '(H_PARTY_ID(I), ''PARTY'','''||ATTRS.ATTRIBUTE_NAME|| ''')';
10172 END IF;
10173 END IF;
10174 END IF;
10175 idx := idx+1;
10176 -- VJN ADDED CODE FOR TRACKING CONDITION ATTRIBUTES AT THIS ENTITY LEVEL
10177 IF HZ_WORD_CONDITIONS_PKG.is_a_cond_attrib( ATTRS.attribute_id)
10178 THEN
10179 l_cond_attrib_list(ATTRS.COLNUM) := ATTRS.attribute_id ;
10180 END IF;
10181
10182 END LOOP;
10183 IF idx=1 THEN
10184 x_rebuild_party_idx:=FALSE;
10185 l(' RETURN;');
10186 l(' END;');
10187 ELSE
10188 x_rebuild_party_idx:=check_rebuild('PARTY');
10189
10190 IF cur_col_num<=255 THEN--bug 5977628
10191 FOR I in cur_col_num..255 LOOP
10192 l_mincol_list(I) := 'N';
10193 l_forall_list(I) := 'N';
10194 END LOOP;
10195 END IF;
10196
10197 l(' IF p_party_type = ''ORGANIZATION'' THEN');
10198 l(' open x_party_cur FOR ' );
10199 l(' SELECT p.PARTY_ID ');
10200 FOR I in 1..l_org_select.COUNT LOOP
10201 l(' ,' || l_org_select(I));
10202 END LOOP;
10203
10204 l(' FROM HZ_STAGED_PARTIES s, HZ_PARTIES p, HZ_ORGANIZATION_PROFILES op ');
10205 l(' WHERE s.PARTY_ID = p.PARTY_ID ');
10206 l(' AND mod(p.PARTY_ID, p_num_workers) = p_worker_number ');
10207 l(' AND p.party_id = op.party_id ');
10208 l(' AND op.effective_end_date is NULL; ');
10209 l(' ELSIF p_party_type = ''PERSON'' THEN');
10210 l(' open x_party_cur FOR ' );
10211 l(' SELECT p.PARTY_ID ');
10212 FOR I in 1..l_per_select.COUNT LOOP
10213 l(' ,' || l_per_select(I));
10214 END LOOP;
10215 l(' FROM HZ_STAGED_PARTIES s,HZ_PARTIES p, HZ_PERSON_PROFILES pe ');
10216 l(' WHERE s.PARTY_ID = p.PARTY_ID ');
10217 l(' AND mod(p.PARTY_ID, p_num_workers) = p_worker_number ');
10218 l(' AND p.party_id = pe.party_id ');
10219 l(' AND pe.effective_end_date is NULL; ');
10220 l(' ELSE');
10221 l(' open x_party_cur FOR ' );
10222 l(' SELECT p.PARTY_ID ');
10223 FOR I in 1..l_oth_select.COUNT LOOP
10224 l(' ,' || l_oth_select(I));
10225 END LOOP;
10226 l(' FROM HZ_STAGED_PARTIES s, HZ_PARTIES p ');
10227 l(' WHERE s.PARTY_ID = p.PARTY_ID ');
10231 l(' AND p.party_type <> ''PARTY_RELATIONSHIP''; ');
10228 l(' AND mod(p.PARTY_ID, p_num_workers) = p_worker_number ');
10229 l(' AND p.party_type <> ''PERSON'' ');
10230 l(' AND p.party_type <> ''ORGANIZATION'' ');
10232 l(' END IF;');
10233 l(' END;');
10234 END IF;
10235 l('');
10236 l(' PROCEDURE update_stage_parties ( ');
10237 l(' p_party_cur IN HZ_PARTY_STAGE.StageCurTyp) IS ');
10238 l(' l_limit NUMBER := ' || g_batch_size || ';');
10239 l(' l_last_fetch BOOLEAN := FALSE;');
10240 l('');
10241 l(' BEGIN');
10242 IF idx=1 THEN
10243 l(' RETURN;');
10244 l(' END;');
10245 ELSE
10246 l(' LOOP');
10247 l(' FETCH p_party_cur BULK COLLECT INTO');
10248 l(' H_PARTY_ID');
10249 FOR I IN 1..255 LOOP
10250 IF l_forall_list(I) <> 'N' THEN
10251 l(' ,H_TX'||I);
10252 END IF;
10253 END LOOP;
10254 l(' LIMIT l_limit;');
10255 l('');
10256 l(' IF p_party_cur%NOTFOUND THEN');
10257 l(' l_last_fetch:=TRUE;');
10258 l(' END IF;');
10259
10260 l(' IF H_PARTY_ID.COUNT=0 AND l_last_fetch THEN');
10261 l(' EXIT;');
10262 l(' END IF;');
10263
10264 l(' FOR I in H_PARTY_ID.FIRST..H_PARTY_ID.LAST LOOP');
10265 -- VJN INTRODUCED CODE FOR GENERATING THE POPULATION
10266 -- OF THE GLOBAL CONDITION RECORD
10267
10268 l_idx := l_cond_attrib_list.FIRST ;
10269 IF l_idx IS NOT NULL
10270 THEN
10271 l('----------- SETTING GLOBAL CONDITION RECORD AT THE PARTY LEVEL ---------');
10272 END IF ;
10273
10274
10275 WHILE l_cond_attrib_list.EXISTS(l_idx)
10276 LOOP
10277
10278 l(' HZ_WORD_CONDITIONS_PKG.set_gbl_condition_rec ('||l_cond_attrib_list(l_idx)||','||'H_TX'||l_idx||'(I));');
10279 l_idx := l_idx+1;
10280 END LOOP;
10281 FOR I IN 1..255 LOOP
10282 IF l_forall_list(I) <> 'N' THEN
10283 IF l_mincol_list(I) = 'Y' THEN
10284 l(' H_TX'||I||'(I):='||l_custom_list(I)||';');
10285 END IF;
10286 END IF;
10287 END LOOP;
10288 FOR I IN 1..255 LOOP
10289 IF l_forall_list(I) <> 'N' THEN
10290 IF l_mincol_list(I) <> 'Y' THEN
10291 l(' H_TX'||I||'(I):='||l_forall_list(I)||';');
10292 END IF;
10293 END IF;
10294 END LOOP;
10295 FOR I IN 1..255 LOOP
10296 IF l_forall_list(I) <> 'N' THEN
10297 IF l_mincol_list(I) = 'Y' THEN
10298 l(' H_TX'||I||'(I):='||l_forall_list(I)||';');
10299 END IF;
10300 END IF;
10301 END LOOP;
10302 l(' END LOOP;');
10303
10304 l(' FORALL I in H_PARTY_ID.FIRST..H_PARTY_ID.LAST');
10305 l(' UPDATE HZ_STAGED_PARTIES SET ');
10306 FIRST:=TRUE;
10307 FOR I IN 1..255 LOOP
10308 IF l_forall_list(I) <> 'N' THEN
10309 IF (FIRST) THEN
10310 FIRST := false;
10311 l(' TX'||I||'=decode(H_TX'||I||'(I),null,H_TX'||I||'(I),H_TX'||I||'(I)||'' '')');
10312 ELSE
10313 l(' ,TX'||I||'=decode(H_TX'||I||'(I),null,H_TX'||I||'(I),H_TX'||I||'(I)||'' '')');
10314 END IF;
10315 END IF;
10316 END LOOP;
10317 l(' WHERE PARTY_ID=H_PARTY_ID(I);');
10318 l(' IF l_last_fetch THEN');
10319 l(' FND_CONCURRENT.AF_Commit;');
10320 l(' EXIT;');
10321 l(' END IF;');
10322 l(' FND_CONCURRENT.AF_Commit;');
10323 l(' END LOOP;');
10324 l(' END;');
10325 END IF;
10326 END;
10327
10328
10329 PROCEDURE generate_contact_query_upd(
10330 x_rebuild_contact_idx OUT NOCOPY BOOLEAN) IS
10331 cur_col_num NUMBER := 1;
10332
10333 TYPE coltab IS TABLE OF VARCHAR2(2000) INDEX BY BINARY_INTEGER;
10334
10335 l_select coltab;
10336
10337 l_forall_list coltab;
10338 l_custom_list coltab;
10339 l_mincol_list coltab;
10340 l_min_colnum NUMBER;
10341 idx NUMBER :=1;
10342 FIRST BOOLEAN;
10343 -- VJN Introduced for conditional word replacements
10344 l_cond_attrib_list coltab ;
10345 l_idx number ;
10346
10347 BEGIN
10348 log('Generating upd procedures for CONTACTS' );
10349 IF new_transformations_exist('CONTACTS') = TRUE
10350 OR
10351 ( new_transformations_exist('CONTACTS') = FALSE AND get_missing_denorm_attrib_cols('CONTACTS') IS NULL )
10352 THEN
10353 log('If block of code -- new transformations exist or there are no missing denorm attrib columns' );
10354 l('');
10355 l(' PROCEDURE open_contact_cursor( ');
10356 l(' p_worker_number IN NUMBER,');
10357 l(' p_num_workers IN NUMBER,');
10358 l(' x_contact_cur IN OUT HZ_PARTY_STAGE.StageCurTyp) IS ');
10359 l('');
10360 l(' BEGIN');
10361
10362 FOR ATTRS IN (SELECT a.ATTRIBUTE_ID,
10363 a.ATTRIBUTE_NAME,
10364 a.SOURCE_TABLE,
10365 a.CUSTOM_ATTRIBUTE_PROCEDURE,
10366 f.PROCEDURE_NAME,
10367 f.STAGED_ATTRIBUTE_COLUMN,
10368 to_number(substrb(STAGED_ATTRIBUTE_COLUMN, 3)) COLNUM
10372 AND f.ATTRIBUTE_ID = a.ATTRIBUTE_ID
10369 FROM HZ_TRANS_ATTRIBUTES_VL a, HZ_TRANS_FUNCTIONS_VL f
10370 WHERE ENTITY_NAME = 'CONTACTS'
10371 AND nvl(f.ACTIVE_FLAG,'Y') = 'Y'
10373 AND f.staged_flag='N'
10374 ORDER BY COLNUM) LOOP
10375 IF cur_col_num<ATTRS.COLNUM THEN
10376 FOR I in cur_col_num..ATTRS.COLNUM-1 LOOP
10377 l_mincol_list(I) := 'N';
10378 l_forall_list(I) := 'N';
10379 END LOOP;
10380 END IF;
10381 cur_col_num:=ATTRS.COLNUM+1;
10382 IF has_trx_context(ATTRS.PROCEDURE_NAME) THEN
10383 l_forall_list(ATTRS.COLNUM) := ATTRS.PROCEDURE_NAME || '(H_TX'||ATTRS.COLNUM||'(I),NULL, ''' || ATTRS.ATTRIBUTE_NAME || ''',''CONTACTS'',''STAGE'')';
10384 ELSE
10385 l_forall_list(ATTRS.COLNUM) := ATTRS.PROCEDURE_NAME || '(H_TX'||ATTRS.COLNUM||'(I),NULL, ''' || ATTRS.ATTRIBUTE_NAME || ''',''CONTACTS'')';
10386 END IF;
10387
10388 l_mincol_list(ATTRS.COLNUM) := 'N';
10389 IF ATTRS.CUSTOM_ATTRIBUTE_PROCEDURE IS NULL THEN
10390 IF ATTRS.SOURCE_TABLE='HZ_PERSON_PROFILES' THEN
10391 l_select(idx) := 'pp.'||ATTRS.ATTRIBUTE_NAME;
10392 ELSIF ATTRS.SOURCE_TABLE='HZ_ORG_CONTACTS' THEN
10393 l_select(idx) := 'oc.'||ATTRS.ATTRIBUTE_NAME;
10394 ELSIF ATTRS.SOURCE_TABLE='HZ_RELATIONSHIPS' THEN
10395 l_select(idx) := 'r.'||ATTRS.ATTRIBUTE_NAME;
10396 END IF;
10397 ELSE
10398 SELECT min(to_number(substrb(STAGED_ATTRIBUTE_COLUMN, 3))) INTO l_min_colnum
10399 FROM HZ_TRANS_ATTRIBUTES_VL a, HZ_TRANS_FUNCTIONS_VL f
10400 WHERE ENTITY_NAME = 'CONTACTS'
10401 AND nvl(f.ACTIVE_FLAG,'Y') = 'Y'
10402 AND f.ATTRIBUTE_ID = a.ATTRIBUTE_ID
10403 AND a.ATTRIBUTE_NAME=ATTRS.ATTRIBUTE_NAME
10404 AND f.staged_flag='N';
10405
10406 l_select(idx) := 'NULL';
10407 IF ATTRS.colnum>l_min_colnum THEN
10408 IF has_trx_context(ATTRS.PROCEDURE_NAME) THEN
10409 l_forall_list(ATTRS.COLNUM) := ATTRS.PROCEDURE_NAME || '(H_TX'||l_min_colnum||'(I),NULL, ''' || ATTRS.ATTRIBUTE_NAME || ''',''CONTACTS'',''STAGE'')';
10410 ELSE
10411 l_forall_list(ATTRS.COLNUM) := ATTRS.PROCEDURE_NAME || '(H_TX'||l_min_colnum||'(I),NULL, ''' || ATTRS.ATTRIBUTE_NAME || ''',''CONTACTS'')';
10412 END IF;
10413
10414 l_mincol_list(ATTRS.COLNUM) := 'N';
10415 ELSE
10416 l_mincol_list(ATTRS.COLNUM) := 'Y';
10417 IF has_context(ATTRS.custom_attribute_procedure) THEN
10418 l_custom_list(ATTRS.COLNUM) := ATTRS.custom_attribute_procedure || '(H_ORG_CONTACT_ID(I),''CONTACTS'','''||ATTRS.ATTRIBUTE_NAME|| ''', ''STAGE'')';
10419 ELSE
10420 l_custom_list(ATTRS.COLNUM) := ATTRS.custom_attribute_procedure || '(H_ORG_CONTACT_ID(I), ''CONTACTS'','''||ATTRS.ATTRIBUTE_NAME|| ''')';
10421 END IF;
10422 END IF;
10423 END IF;
10424 idx := idx+1;
10425 -- VJN ADDED CODE FOR TRACKING CONDITION ATTRIBUTES AT THIS ENTITY LEVEL
10426 IF HZ_WORD_CONDITIONS_PKG.is_a_cond_attrib( ATTRS.attribute_id)
10427 THEN
10428 l_cond_attrib_list(ATTRS.COLNUM) := ATTRS.attribute_id ;
10429 END IF;
10430
10431 END LOOP;
10432
10433 IF idx=1 THEN
10434 x_rebuild_contact_idx:=FALSE;
10435 l(' RETURN;');
10436 l(' END;');
10437 ELSE
10438 x_rebuild_contact_idx:=check_rebuild('CONTACTS');
10439 IF cur_col_num<=255 THEN--bug 5977628
10440 FOR I in cur_col_num..255 LOOP
10441 l_mincol_list(I) := 'N';
10442 l_forall_list(I) := 'N';
10443 END LOOP;
10444 END IF;
10445
10446 l(' open x_contact_cur FOR');
10447 l(' SELECT oc.ORG_CONTACT_ID ');
10448 FOR I in 1..l_select.COUNT LOOP
10449 l(' ,' || l_select(I));
10450 END LOOP;
10451 l(' FROM HZ_STAGED_CONTACTS s, HZ_ORG_CONTACTS oc, ');
10455 l(' AND oc.party_relationship_id = r.relationship_id ');
10452 l(' HZ_RELATIONSHIPS r, HZ_PERSON_PROFILES pp');
10453 l(' WHERE mod(s.PARTY_ID, p_num_workers) = p_worker_number ');
10454 l(' AND s.ORG_CONTACT_ID=oc.ORG_CONTACT_ID');
10456 l(' AND r.object_id = s.party_id ');
10457 l(' AND r.subject_id = pp.party_id ');
10458 l(' AND r.SUBJECT_TABLE_NAME = ''HZ_PARTIES''');
10459 l(' AND r.OBJECT_TABLE_NAME = ''HZ_PARTIES''');
10460 l(' AND DIRECTIONAL_FLAG= ''F'' ');
10461 l(' AND pp.effective_end_date is NULL ');
10462 l(' AND (oc.status is null OR oc.status = ''A'' or oc.status = ''I'')');
10463 l(' AND (r.status is null OR r.status = ''A'' or r.status = ''I'');');
10464 l(' END;');
10465 END IF;
10466 l('');
10467 l(' PROCEDURE update_stage_contacts ( ');
10468 l(' p_contact_cur IN HZ_PARTY_STAGE.StageCurTyp) IS ');
10469 l(' l_limit NUMBER := ' || g_batch_size || ';');
10470 l(' H_DENORM_PARTY_ID NumberList ;');
10471 l(' H_DENORM_VALUE CharList ;');
10472 l(' H_ROW_OFFSET Number ;');
10473 l(' l_last_fetch BOOLEAN := FALSE;');
10474 l('');
10475 l(' BEGIN');
10476 IF idx=1 THEN
10477 l(' RETURN;');
10478 l(' END;');
10479 ELSE
10480 l(' LOOP');
10481 l(' H_ROW_OFFSET := 1 ;');
10482 l(' FETCH p_contact_cur BULK COLLECT INTO');
10483 l(' H_ORG_CONTACT_ID');
10484 FOR I IN 1..255 LOOP
10485 IF l_forall_list(I) <> 'N' THEN
10486 l(' ,H_TX'||I);
10487 END IF;
10488 END LOOP;
10489 l(' LIMIT l_limit;');
10490 l('');
10491 l(' IF p_contact_cur%NOTFOUND THEN');
10492 l(' l_last_fetch:=TRUE;');
10493 l(' END IF;');
10494
10495 l(' IF H_ORG_CONTACT_ID.COUNT=0 AND l_last_fetch THEN');
10496 l(' EXIT;');
10497 l(' END IF;');
10498
10499 l(' FOR I in H_ORG_CONTACT_ID.FIRST..H_ORG_CONTACT_ID.LAST LOOP');
10500 -- VJN INTRODUCED CODE FOR GENERATING THE POPULATION
10501 -- OF THE GLOBAL CONDITION RECORD
10502
10503 l_idx := l_cond_attrib_list.FIRST ;
10504 IF l_idx IS NOT NULL
10505 THEN
10506 l('----------- SETTING GLOBAL CONDITION RECORD AT THE CONTACT LEVEL ---------');
10507 END IF ;
10508
10509
10510 WHILE l_cond_attrib_list.EXISTS(l_idx)
10511 LOOP
10512
10513 l(' HZ_WORD_CONDITIONS_PKG.set_gbl_condition_rec ('||l_cond_attrib_list(l_idx)||','||'H_TX'||l_idx||'(I));');
10514 l_idx := l_idx+1;
10515 END LOOP;
10516 FOR I IN 1..255 LOOP
10517 IF l_forall_list(I) <> 'N' THEN
10518 IF l_mincol_list(I) = 'Y' THEN
10519 l(' H_TX'||I||'(I):='||l_custom_list(I)||';');
10520 END IF;
10521 END IF;
10522 END LOOP;
10523 FOR I IN 1..255 LOOP
10524 IF l_forall_list(I) <> 'N' THEN
10525 IF l_mincol_list(I) <> 'Y' THEN
10526 l(' H_TX'||I||'(I):='||l_forall_list(I)||';');
10527 END IF;
10528 END IF;
10529 END LOOP;
10530 FOR I IN 1..255 LOOP
10531 IF l_forall_list(I) <> 'N' THEN
10532 IF l_mincol_list(I) = 'Y' THEN
10533 l(' H_TX'||I||'(I):='||l_forall_list(I)||';');
10534 END IF;
10535 END IF;
10536 END LOOP;
10537 l(' END LOOP;');
10538
10539 l(' FORALL I in H_ORG_CONTACT_ID.FIRST..H_ORG_CONTACT_ID.LAST');
10540 l(' UPDATE HZ_STAGED_CONTACTS SET ');
10541 FIRST:=TRUE;
10542 FOR I IN 1..255 LOOP
10543 IF l_forall_list(I) <> 'N' THEN
10544 IF (FIRST) THEN
10545 FIRST := false;
10546 l(' TX'||I||'=decode(H_TX'||I||'(I),null,H_TX'||I||'(I),H_TX'||I||'(I)||'' '')');
10547 ELSE
10548 l(' ,TX'||I||'=decode(H_TX'||I||'(I),null,H_TX'||I||'(I),H_TX'||I||'(I)||'' '')');
10549 END IF;
10550
10551 END IF;
10552 END LOOP;
10553
10557 THEN
10554 l(' WHERE ORG_CONTACT_ID = H_ORG_CONTACT_ID(I)');
10555 -- ADD CODE FOR UPDATING HZ_STAGED_PARTIES IF THERE ARE ANY NEW CONTACT DENORM ATTRIBUTES
10556 IF get_missing_denorm_attrib_cols('CONTACTS') IS NOT NULL
10558 l('RETURNING PARTY_ID, ');
10559 l(get_missing_denorm_attrib_cols('CONTACTS'));
10560 -- THIS BULK COLLECT WILL CHOSE THE PARTY ID COLUMNS OF THE ROWS THAT ARE UPDATED
10561 -- AND UPDATE THESE PARTY IDS IN HZ_STAGED_PARTIES, BY APPENDING TO THE D_CT COLUMNS
10562 -- VALUES FROM THE NEW DENORM ATTRIBUTE COLUMNS
10563 l('BULK COLLECT INTO H_DENORM_PARTY_ID, H_DENORM_VALUE ;');
10564 l('LOOP');
10565 l('BEGIN');
10566 l(' FORALL I IN H_ROW_OFFSET..H_DENORM_PARTY_ID.COUNT');
10567 l(' UPDATE HZ_STAGED_PARTIES');
10568 l(' SET D_CT = D_CT||'' ''||H_DENORM_VALUE(I)');
10569 l(' WHERE PARTY_ID = H_DENORM_PARTY_ID(I) AND D_CT <> ''SYNC'' ;');
10570 l('EXIT ;');
10571 l('EXCEPTION');
10572 l('WHEN OTHERS THEN');
10573 l(' H_ROW_OFFSET := H_ROW_OFFSET+SQL%ROWCOUNT;');
10574 l(' UPDATE HZ_STAGED_PARTIES');
10575 l(' SET D_CT = ''SYNC'' ');
10576 l(' WHERE PARTY_ID = H_DENORM_PARTY_ID(H_ROW_OFFSET) ;');
10577 l(' H_ROW_OFFSET := H_ROW_OFFSET+1 ;');
10578 l('END ;');
10579 l('END LOOP ;');
10580 ELSE
10581 l(';');
10582 END IF ;
10583
10584 l(' IF l_last_fetch THEN');
10585 l(' FND_CONCURRENT.AF_Commit;');
10586 l(' EXIT;');
10587 l(' END IF;');
10588 l(' FND_CONCURRENT.AF_Commit;');
10589 l(' END LOOP;');
10590 l(' END;');
10591 END IF ;
10592 -- NO NEW TRANSFORMATIONS BUT THERE ARE SOME NEW DENORM ATTRIBUTES
10593 ELSE
10594 log('Else block of code -- No new transformations exist' );
10595 l('');
10596 l(' PROCEDURE open_contact_cursor( ');
10597 l(' p_worker_number IN NUMBER,');
10598 l(' p_num_workers IN NUMBER,');
10599 l(' x_contact_cur IN OUT HZ_PARTY_STAGE.StageCurTyp) IS ');
10600 l('');
10601 l(' BEGIN');
10602 l(' open x_contact_cur FOR');
10603 l(' SELECT ct.PARTY_ID,');
10604 l(get_missing_denorm_attrib_cols('CONTACTS'));
10605 l(' FROM HZ_STAGED_CONTACTS ct');
10606 l(' WHERE mod(ct.PARTY_ID, p_num_workers) = p_worker_number ; ');
10607 l(' END;');
10608
10609 l('');
10610 l(' PROCEDURE update_stage_contacts ( ');
10611 l(' p_contact_cur IN HZ_PARTY_STAGE.StageCurTyp) IS ');
10612 l(' l_limit NUMBER := ' || g_batch_size || ';');
10613 l(' H_DENORM_PARTY_ID NumberList ;');
10614 l(' H_DENORM_VALUE CharList ;');
10615 l(' H_ROW_OFFSET Number ;');
10616 l(' l_last_fetch BOOLEAN := FALSE;');
10617 l('');
10618 l(' BEGIN');
10619 l(' LOOP');
10620 l(' H_ROW_OFFSET := 1 ; ');
10621 l(' FETCH p_contact_cur BULK COLLECT INTO');
10622 l(' H_DENORM_PARTY_ID, H_DENORM_VALUE');
10623 l(' LIMIT l_limit;');
10624 l('');
10625 l(' IF p_contact_cur%NOTFOUND THEN');
10626 l(' l_last_fetch:=TRUE;');
10627 l(' END IF;');
10628 l(' IF H_DENORM_PARTY_ID.COUNT=0 AND l_last_fetch THEN');
10629 l(' EXIT;');
10630 l(' END IF;');
10631
10632 l('LOOP');
10633 l('BEGIN');
10634 l(' FORALL I IN H_ROW_OFFSET..H_DENORM_PARTY_ID.COUNT');
10635 l(' UPDATE HZ_STAGED_PARTIES');
10636 l(' SET D_CT = D_CT||'' ''||H_DENORM_VALUE(I)');
10637 l(' WHERE PARTY_ID = H_DENORM_PARTY_ID(I) AND D_CT <> ''SYNC'' ;');
10638 l('EXIT ;');
10639 l('EXCEPTION');
10640 l('WHEN OTHERS THEN');
10641 l(' H_ROW_OFFSET := H_ROW_OFFSET+SQL%ROWCOUNT;');
10642 l(' UPDATE HZ_STAGED_PARTIES');
10643 l(' SET D_CT = ''SYNC'' ');
10644 l(' WHERE PARTY_ID = H_DENORM_PARTY_ID(H_ROW_OFFSET) ;');
10645 l(' H_ROW_OFFSET := H_ROW_OFFSET+1 ;');
10646 l('END ;');
10647 l('END LOOP ;');
10648
10649
10650
10651
10652
10653 l(' IF l_last_fetch THEN');
10654 l(' FND_CONCURRENT.AF_Commit;');
10655 l(' EXIT;');
10659 l(' END ; ');
10656 l(' END IF;');
10657 l(' FND_CONCURRENT.AF_Commit;');
10658 l(' END LOOP ; ');
10660 END IF ;
10661
10662 END;
10663
10664
10665 PROCEDURE generate_party_site_query_upd(
10666 x_rebuild_psite_idx OUT NOCOPY BOOLEAN) IS
10667 cur_col_num NUMBER := 1;
10668
10669 TYPE coltab IS TABLE OF VARCHAR2(2000) INDEX BY BINARY_INTEGER;
10670
10671 l_select coltab;
10672
10673 l_forall_list coltab;
10674 l_custom_list coltab;
10675 l_mincol_list coltab;
10676 l_min_colnum NUMBER;
10677 idx NUMBER :=1;
10678 FIRST BOOLEAN;
10679 -- VJN Introduced for conditional word replacements
10680 l_cond_attrib_list coltab ;
10681 l_idx number ;
10682
10683 BEGIN
10684 log('Generating upd procedures for PARTY SITES' );
10685 IF new_transformations_exist('PARTY_SITES') = TRUE
10686 OR
10687 ( new_transformations_exist('PARTY_SITES') = FALSE AND get_missing_denorm_attrib_cols('PARTY_SITES') IS NULL )
10688 THEN
10689
10690 log('If block of code -- new transformations exist or there are no missing denorm attrib columns' );
10691 l('');
10692 l(' PROCEDURE open_party_site_cursor( ');
10693 l(' p_worker_number IN NUMBER,');
10694 l(' p_num_workers IN NUMBER,');
10695 l(' x_party_site_cur IN OUT HZ_PARTY_STAGE.StageCurTyp) IS ');
10696 l('');
10697 l(' BEGIN');
10698
10699 FOR ATTRS IN (SELECT a.ATTRIBUTE_ID,
10700 a.ATTRIBUTE_NAME,
10701 a.SOURCE_TABLE,
10702 a.CUSTOM_ATTRIBUTE_PROCEDURE,
10703 f.PROCEDURE_NAME,
10704 f.STAGED_ATTRIBUTE_COLUMN,
10705 to_number(substrb(STAGED_ATTRIBUTE_COLUMN, 3)) COLNUM
10706 FROM HZ_TRANS_ATTRIBUTES_VL a, HZ_TRANS_FUNCTIONS_VL f
10707 WHERE ENTITY_NAME = 'PARTY_SITES'
10708 AND nvl(f.ACTIVE_FLAG,'Y') = 'Y'
10709 AND f.ATTRIBUTE_ID = a.ATTRIBUTE_ID
10710 AND f.staged_flag='N'
10711 ORDER BY COLNUM) LOOP
10712 IF cur_col_num<ATTRS.COLNUM THEN
10713 FOR I in cur_col_num..ATTRS.COLNUM-1 LOOP
10714 l_mincol_list(I) := 'N';
10715 l_forall_list(I) := 'N';
10716 END LOOP;
10717 END IF;
10718 cur_col_num:=ATTRS.COLNUM+1;
10719 IF has_trx_context(ATTRS.PROCEDURE_NAME) THEN
10720 l_forall_list(ATTRS.COLNUM) := ATTRS.PROCEDURE_NAME || '(H_TX'||ATTRS.COLNUM||'(I),NULL, ''' || ATTRS.ATTRIBUTE_NAME || ''',''PARTY_SITES'',''STAGE'')';
10721 ELSE
10722 l_forall_list(ATTRS.COLNUM) := ATTRS.PROCEDURE_NAME || '(H_TX'||ATTRS.COLNUM||'(I),NULL, ''' || ATTRS.ATTRIBUTE_NAME || ''',''PARTY_SITES'')';
10723 END IF;
10724
10725 l_mincol_list(ATTRS.COLNUM) := 'N';
10726 IF ATTRS.CUSTOM_ATTRIBUTE_PROCEDURE IS NULL THEN
10727 IF ATTRS.SOURCE_TABLE='HZ_LOCATIONS' THEN
10728 l_select(idx) := 'l.'||ATTRS.ATTRIBUTE_NAME;
10729 ELSIF ATTRS.SOURCE_TABLE='HZ_PARTY_SITES' THEN
10730 l_select(idx) := 'ps.'||ATTRS.ATTRIBUTE_NAME;
10731 END IF;
10732 ELSE
10733 SELECT min(to_number(substrb(STAGED_ATTRIBUTE_COLUMN, 3))) INTO l_min_colnum
10734 FROM HZ_TRANS_ATTRIBUTES_VL a, HZ_TRANS_FUNCTIONS_VL f
10735 WHERE ENTITY_NAME = 'PARTY_SITES'
10736 AND nvl(f.ACTIVE_FLAG,'Y') = 'Y'
10737 AND f.ATTRIBUTE_ID = a.ATTRIBUTE_ID
10738 AND a.ATTRIBUTE_NAME=ATTRS.ATTRIBUTE_NAME
10739 AND f.staged_flag='N';
10740
10741 l_select(idx) := 'NULL';
10742 IF ATTRS.colnum>l_min_colnum THEN
10743 IF has_trx_context(ATTRS.PROCEDURE_NAME) THEN
10744 l_forall_list(ATTRS.COLNUM) := ATTRS.PROCEDURE_NAME || '(H_TX'||l_min_colnum||'(I),NULL, ''' || ATTRS.ATTRIBUTE_NAME || ''',''PARTY_SITES'',''STAGE'')';
10745 ELSE
10746 l_forall_list(ATTRS.COLNUM) := ATTRS.PROCEDURE_NAME || '(H_TX'||l_min_colnum||'(I),NULL, ''' || ATTRS.ATTRIBUTE_NAME || ''',''PARTY_SITES'')';
10747 END IF;
10748
10749 l_mincol_list(ATTRS.COLNUM) := 'N';
10750 ELSE
10751 l_mincol_list(ATTRS.COLNUM) := 'Y';
10752 IF has_context(ATTRS.custom_attribute_procedure) THEN
10753 l_custom_list(ATTRS.COLNUM) := ATTRS.custom_attribute_procedure || '(H_PARTY_SITE_ID(I),''PARTY_SITES'','''||ATTRS.ATTRIBUTE_NAME|| ''', ''STAGE'')';
10754 ELSE
10755 l_custom_list(ATTRS.COLNUM) := ATTRS.custom_attribute_procedure || '(H_PARTY_SITE_ID(I), ''PARTY_SITES'','''||ATTRS.ATTRIBUTE_NAME|| ''')';
10756 END IF;
10757 END IF;
10761 IF HZ_WORD_CONDITIONS_PKG.is_a_cond_attrib( ATTRS.attribute_id)
10758 END IF;
10759 idx := idx+1;
10760 -- VJN ADDED CODE FOR TRACKING CONDITION ATTRIBUTES AT THIS ENTITY LEVEL
10762 THEN
10763 l_cond_attrib_list(ATTRS.COLNUM) := ATTRS.attribute_id ;
10764 END IF;
10765
10766 END LOOP;
10767
10768 IF idx=1 THEN
10769 x_rebuild_psite_idx:=FALSE;
10770 l(' RETURN;');
10771 l(' END;');
10772 ELSE
10773 x_rebuild_psite_idx:=check_rebuild('PARTY_SITES');
10774 IF cur_col_num<=255 THEN--bug 5977628
10775 FOR I in cur_col_num..255 LOOP
10776 l_mincol_list(I) := 'N';
10777 l_forall_list(I) := 'N';
10778 END LOOP;
10779 END IF;
10780
10781 l(' open x_party_site_cur FOR');
10782 l(' SELECT ps.PARTY_SITE_ID ');
10783 FOR I in 1..l_select.COUNT LOOP
10784 l(' ,' || l_select(I));
10785 END LOOP;
10786 l(' FROM HZ_PARTY_SITES ps, HZ_STAGED_PARTY_SITES s, HZ_LOCATIONS l ');
10787 l(' WHERE mod(s.PARTY_ID, p_num_workers) = p_worker_number ');
10788 l(' AND ps.party_site_id = s.party_site_id ');
10789 l(' AND ps.party_id = s.party_id ');
10790 l(' AND ps.location_id = l.location_id; ');
10791
10792 l(' END;');
10793 END IF;
10794
10795 l('');
10796 l(' PROCEDURE update_stage_party_sites ( ');
10797 l(' p_party_site_cur IN HZ_PARTY_STAGE.StageCurTyp) IS ');
10798 l(' l_limit NUMBER := ' || g_batch_size || ';');
10799 l(' H_DENORM_PARTY_ID NumberList ;');
10800 l(' H_DENORM_VALUE CharList ;');
10801 l(' H_ROW_OFFSET Number ;');
10802 l(' l_last_fetch BOOLEAN := FALSE;');
10803 l('');
10804 l(' BEGIN');
10805 IF idx=1 THEN
10806 l(' RETURN;');
10807 l(' END;');
10808 ELSE
10809 l(' LOOP');
10810 l(' H_ROW_OFFSET := 1 ;');
10811 l(' FETCH p_party_site_cur BULK COLLECT INTO');
10812 l(' H_PARTY_SITE_ID');
10813 FOR I IN 1..255 LOOP
10814 IF l_forall_list(I) <> 'N' THEN
10815 l(' ,H_TX'||I);
10816 END IF;
10817 END LOOP;
10818 l(' LIMIT l_limit;');
10819 l('');
10820 l(' IF p_party_site_cur%NOTFOUND THEN');
10821 l(' l_last_fetch:=TRUE;');
10822 l(' END IF;');
10823
10824 l(' IF H_PARTY_SITE_ID.COUNT=0 AND l_last_fetch THEN');
10825 l(' EXIT;');
10826 l(' END IF;');
10827
10828 l(' FOR I in H_PARTY_SITE_ID.FIRST..H_PARTY_SITE_ID.LAST LOOP');
10829 -- VJN INTRODUCED CODE FOR GENERATING THE POPULATION
10830 -- OF THE GLOBAL CONDITION RECORD
10831
10832 l_idx := l_cond_attrib_list.FIRST ;
10833 IF l_idx IS NOT NULL
10834 THEN
10835 l('----------- SETTING GLOBAL CONDITION RECORD AT THE PARTY SITE LEVEL ---------');
10836 END IF ;
10837
10838
10839 WHILE l_cond_attrib_list.EXISTS(l_idx)
10840 LOOP
10841
10842 l(' HZ_WORD_CONDITIONS_PKG.set_gbl_condition_rec ('||l_cond_attrib_list(l_idx)||','||'H_TX'||l_idx||'(I));');
10843 l_idx := l_idx+1;
10844 END LOOP;
10845 FOR I IN 1..255 LOOP
10846 IF l_forall_list(I) <> 'N' THEN
10847 IF l_mincol_list(I) = 'Y' THEN
10848 l(' H_TX'||I||'(I):='||l_custom_list(I)||';');
10849 END IF;
10850 END IF;
10851 END LOOP;
10852 FOR I IN 1..255 LOOP
10853 IF l_forall_list(I) <> 'N' THEN
10854 IF l_mincol_list(I) <> 'Y' THEN
10855 l(' H_TX'||I||'(I):='||l_forall_list(I)||';');
10856 END IF;
10857 END IF;
10858 END LOOP;
10859 FOR I IN 1..255 LOOP
10860 IF l_forall_list(I) <> 'N' THEN
10861 IF l_mincol_list(I) = 'Y' THEN
10862 l(' H_TX'||I||'(I):='||l_forall_list(I)||';');
10863 END IF;
10864 END IF;
10865 END LOOP;
10866 l(' END LOOP;');
10867 l(' FORALL I in H_PARTY_SITE_ID.FIRST..H_PARTY_SITE_ID.LAST');
10868 l(' UPDATE HZ_STAGED_PARTY_SITES SET');
10869 FIRST := TRUE;
10870 FOR I IN 1..255 LOOP
10871 IF l_forall_list(I) <> 'N' THEN
10872 IF (FIRST) THEN
10873 FIRST := false;
10874 l(' TX'||I||'=decode(H_TX'||I||'(I),null,H_TX'||I||'(I),H_TX'||I||'(I)||'' '')');
10875 ELSE
10876 l(' ,TX'||I||'=decode(H_TX'||I||'(I),null,H_TX'||I||'(I),H_TX'||I||'(I)||'' '')');
10877 END IF;
10878 END IF;
10879 END LOOP;
10880 l(' WHERE PARTY_SITE_ID=H_PARTY_SITE_ID(I)');
10881
10882 -- ADD CODE FOR UPDATING HZ_STAGED_PARTIES IF THERE ARE ANY NEW PARTY SITE DENORM ATTRIBUTES
10883 IF get_missing_denorm_attrib_cols('PARTY_SITES') IS NOT NULL
10884 THEN
10885 l('RETURNING PARTY_ID, ');
10886 l(get_missing_denorm_attrib_cols('PARTY_SITES'));
10887 -- THIS BULK COLLECT WILL CHOSE THE PARTY ID COLUMNS OF THE ROWS THAT ARE UPDATED
10888 -- AND UPDATE THESE PARTY IDS IN HZ_STAGED_PARTIES, BY APPENDING TO THE D_PS COLUMNS
10889 -- VALUES FROM THE NEW DENORM ATTRIBUTE COLUMNS
10890 l('BULK COLLECT INTO H_DENORM_PARTY_ID, H_DENORM_VALUE ;');
10891 l('LOOP');
10892 l('BEGIN');
10893 l(' FORALL I IN H_ROW_OFFSET..H_DENORM_PARTY_ID.COUNT');
10894 l(' UPDATE HZ_STAGED_PARTIES');
10895 l(' SET D_PS = D_PS||'' ''||H_DENORM_VALUE(I)');
10896 l(' WHERE PARTY_ID = H_DENORM_PARTY_ID(I) AND D_PS <> ''SYNC'' ;');
10897 l('EXIT ;');
10898 l('EXCEPTION');
10899 l('WHEN OTHERS THEN');
10900 l(' H_ROW_OFFSET := H_ROW_OFFSET+SQL%ROWCOUNT;');
10901 l(' UPDATE HZ_STAGED_PARTIES');
10902 l(' SET D_PS = ''SYNC'' ');
10903 l(' WHERE PARTY_ID = H_DENORM_PARTY_ID(H_ROW_OFFSET) ;');
10904 l(' H_ROW_OFFSET := H_ROW_OFFSET+1;');
10905 l('END ; ');
10906 l('END LOOP ;');
10907 ELSE
10908 l(';');
10909 END IF ;
10910 l(' IF l_last_fetch THEN');
10911 l(' FND_CONCURRENT.AF_Commit;');
10912 l(' EXIT;');
10913 l(' END IF;');
10914 l(' FND_CONCURRENT.AF_Commit;');
10915 l(' END LOOP;');
10916 l(' END;');
10917 END IF ;
10918 -- NO NEW TRANSFORMATIONS BUT THERE ARE SOME NEW DENORM ATTRIBUTES
10919 ELSE
10920 log('Else block of code -- No new transformations exist' );
10921 l('');
10922 l(' PROCEDURE open_party_site_cursor( ');
10923 l(' p_worker_number IN NUMBER,');
10924 l(' p_num_workers IN NUMBER,');
10925 l(' x_party_site_cur IN OUT HZ_PARTY_STAGE.StageCurTyp) IS ');
10926 l('');
10927 l(' BEGIN');
10928 l(' open x_party_site_cur FOR');
10929 l(' SELECT ps.PARTY_ID,');
10930 l(get_missing_denorm_attrib_cols('PARTY_SITES'));
10931 l(' FROM HZ_STAGED_PARTY_SITES ps');
10932 l(' WHERE mod(ps.PARTY_ID, p_num_workers) = p_worker_number ; ');
10933 l(' END;');
10934
10935 l(' PROCEDURE update_stage_party_sites ( ');
10936 l(' p_party_site_cur IN HZ_PARTY_STAGE.StageCurTyp) IS ');
10937 l(' l_limit NUMBER := ' || g_batch_size || ';');
10938 l(' H_DENORM_PARTY_ID NumberList ;');
10939 l(' H_DENORM_VALUE CharList ;');
10940 l(' H_ROW_OFFSET Number ;');
10941 l(' l_last_fetch BOOLEAN := FALSE;');
10942 l('');
10943 l(' BEGIN');
10944 l(' LOOP');
10945 l(' H_ROW_OFFSET := 1 ;');
10946 l(' FETCH p_party_site_cur BULK COLLECT INTO');
10947 l(' H_DENORM_PARTY_ID, H_DENORM_VALUE');
10948 l(' LIMIT l_limit;');
10949 l('');
10950 l(' IF p_party_site_cur%NOTFOUND THEN');
10951 l(' l_last_fetch:=TRUE;');
10952 l(' END IF;');
10953 l(' IF H_DENORM_PARTY_ID.COUNT=0 AND l_last_fetch THEN');
10954 l(' EXIT;');
10955 l(' END IF;');
10956
10957 l('LOOP');
10958 l('BEGIN');
10959 l(' FORALL I IN H_ROW_OFFSET..H_DENORM_PARTY_ID.COUNT');
10960 l(' UPDATE HZ_STAGED_PARTIES');
10961 l(' SET D_PS = D_PS||'' ''||H_DENORM_VALUE(I)');
10962 l(' WHERE PARTY_ID = H_DENORM_PARTY_ID(I) AND D_PS <> ''SYNC'' ;');
10963 l('EXIT ;');
10964 l('EXCEPTION');
10965 l('WHEN OTHERS THEN');
10966 l(' H_ROW_OFFSET := H_ROW_OFFSET+SQL%ROWCOUNT;');
10967 l(' UPDATE HZ_STAGED_PARTIES');
10968 l(' SET D_PS = ''SYNC'' ');
10969 l(' WHERE PARTY_ID = H_DENORM_PARTY_ID(H_ROW_OFFSET) ;');
10970 l(' H_ROW_OFFSET := H_ROW_OFFSET+1 ;');
10971 l('END ;');
10972 l('END LOOP ;');
10973
10974 l(' IF l_last_fetch THEN');
10975 l(' FND_CONCURRENT.AF_Commit;');
10976 l(' EXIT;');
10977 l(' END IF;');
10978 l(' FND_CONCURRENT.AF_Commit;');
10979 l(' END LOOP ;');
10980 l(' END ; ');
10981 END IF ;
10982 END;
10983
10984
10985 PROCEDURE generate_contact_pt_query_upd(
10986 x_rebuild_cpt_idx OUT NOCOPY BOOLEAN) IS
10987 cur_col_num NUMBER := 1;
10988
10989 TYPE coltab IS TABLE OF VARCHAR2(2000) INDEX BY BINARY_INTEGER;
10990
10991 l_select coltab;
10992
10993 l_forall_list coltab;
10994 l_custom_list coltab;
10995 l_mincol_list coltab;
10996 l_min_colnum NUMBER;
10997 idx NUMBER :=1;
10998 FIRST BOOLEAN;
10999 -- VJN Introduced for conditional word replacements
11000 l_cond_attrib_list coltab ;
11001 l_idx number ;
11002
11003 BEGIN
11004 log('Generating upd procedures for CONTACT POINTS' );
11005 IF new_transformations_exist('CONTACT_POINTS') = TRUE
11006 OR
11007 ( new_transformations_exist('CONTACT_POINTS') = FALSE AND get_missing_denorm_attrib_cols('CONTACT_POINTS') IS NULL )
11008 THEN
11009 log('If block of code -- new transformations exist or there are no missing denorm attrib columns' );
11010 l('');
11011 l(' PROCEDURE open_contact_pt_cursor( ');
11012 l(' p_worker_number IN NUMBER,');
11013 l(' p_num_workers IN NUMBER,');
11014 l(' x_contact_pt_cur IN OUT HZ_PARTY_STAGE.StageCurTyp) IS ');
11015 l('');
11016 l(' BEGIN');
11017
11018 FOR ATTRS IN (SELECT a.ATTRIBUTE_ID,
11019 a.ATTRIBUTE_NAME,
11020 a.SOURCE_TABLE,
11021 a.CUSTOM_ATTRIBUTE_PROCEDURE,
11022 f.PROCEDURE_NAME,
11023 f.STAGED_ATTRIBUTE_COLUMN,
11024 to_number(substrb(STAGED_ATTRIBUTE_COLUMN, 3)) COLNUM
11025 FROM HZ_TRANS_ATTRIBUTES_VL a, HZ_TRANS_FUNCTIONS_VL f
11026 WHERE ENTITY_NAME = 'CONTACT_POINTS'
11027 AND nvl(f.ACTIVE_FLAG,'Y') = 'Y'
11031 IF cur_col_num<ATTRS.COLNUM THEN
11028 AND f.ATTRIBUTE_ID = a.ATTRIBUTE_ID
11029 AND f.STAGED_FLAG='N'
11030 ORDER BY COLNUM) LOOP
11032 FOR I in cur_col_num..ATTRS.COLNUM-1 LOOP
11033 l_mincol_list(I) := 'N';
11034 l_forall_list(I) := 'N';
11035 END LOOP;
11036 END IF;
11037 cur_col_num:=ATTRS.COLNUM+1;
11038 IF has_trx_context(ATTRS.PROCEDURE_NAME) THEN
11039 l_forall_list(ATTRS.COLNUM) := ATTRS.PROCEDURE_NAME || '(H_TX'||ATTRS.COLNUM||'(I),NULL, ''' || ATTRS.ATTRIBUTE_NAME || ''',''CONTACT_POINTS'',''STAGE'')';
11040 ELSE
11041 l_forall_list(ATTRS.COLNUM) := ATTRS.PROCEDURE_NAME || '(H_TX'||ATTRS.COLNUM||'(I),NULL, ''' || ATTRS.ATTRIBUTE_NAME || ''',''CONTACT_POINTS'')';
11042 END IF;
11043
11044 l_mincol_list(ATTRS.COLNUM) := 'N';
11045 IF ATTRS.CUSTOM_ATTRIBUTE_PROCEDURE IS NULL THEN
11046 l_select(idx) := 'cp.'||ATTRS.ATTRIBUTE_NAME;
11047 ELSE
11048 SELECT min(to_number(substrb(STAGED_ATTRIBUTE_COLUMN, 3))) INTO l_min_colnum
11049 FROM HZ_TRANS_ATTRIBUTES_VL a, HZ_TRANS_FUNCTIONS_VL f
11050 WHERE ENTITY_NAME = 'CONTACT_POINTS'
11051 AND nvl(f.ACTIVE_FLAG,'Y') = 'Y'
11052 AND f.ATTRIBUTE_ID = a.ATTRIBUTE_ID
11053 AND a.ATTRIBUTE_NAME=ATTRS.ATTRIBUTE_NAME
11054 AND f.STAGED_FLAG='N';
11055
11056 l_select(idx) := 'NULL';
11057 IF ATTRS.colnum>l_min_colnum THEN
11058 IF has_trx_context(ATTRS.PROCEDURE_NAME) THEN
11059 l_forall_list(ATTRS.COLNUM) := ATTRS.PROCEDURE_NAME || '(H_TX'||l_min_colnum||'(I),NULL, ''' || ATTRS.ATTRIBUTE_NAME || ''',''CONTACT_POINTS'',''STAGE'')';
11060 ELSE
11061 l_forall_list(ATTRS.COLNUM) := ATTRS.PROCEDURE_NAME || '(H_TX'||l_min_colnum||'(I),NULL, ''' || ATTRS.ATTRIBUTE_NAME || ''',''CONTACT_POINTS'')';
11062 END IF;
11063
11064 l_mincol_list(ATTRS.COLNUM) := 'N';
11065 ELSE
11066 l_mincol_list(ATTRS.COLNUM) := 'Y';
11067 IF has_context(ATTRS.custom_attribute_procedure) THEN
11068 l_custom_list(ATTRS.COLNUM) := ATTRS.custom_attribute_procedure || '(H_CONTACT_POINT_ID(I),''CONTACT_POINTS'','''||ATTRS.ATTRIBUTE_NAME|| ''', ''STAGE'')';
11069 ELSE
11070 l_custom_list(ATTRS.COLNUM) := ATTRS.custom_attribute_procedure || '(H_CONTACT_POINT_ID(I), ''CONTACT_POINTS'','''||ATTRS.ATTRIBUTE_NAME|| ''')';
11071 END IF;
11072 END IF;
11073 END IF;
11074 idx := idx+1;
11075 -- VJN ADDED CODE FOR TRACKING CONDITION ATTRIBUTES AT THIS ENTITY LEVEL
11076 IF HZ_WORD_CONDITIONS_PKG.is_a_cond_attrib( ATTRS.attribute_id)
11077 THEN
11078 l_cond_attrib_list(ATTRS.COLNUM) := ATTRS.attribute_id ;
11079 END IF;
11080
11081 END LOOP;
11082
11083 IF idx=1 THEN
11084 x_rebuild_cpt_idx:=FALSE;
11085 l(' RETURN;');
11086 l(' END;');
11087 ELSE
11088 x_rebuild_cpt_idx:=check_rebuild('CONTACT_POINTS');
11089 IF cur_col_num<=255 THEN--bug 5977628
11090 FOR I in cur_col_num..255 LOOP
11091 l_mincol_list(I) := 'N';
11092 l_forall_list(I) := 'N';
11093 END LOOP;
11094 END IF;
11095 l(' open x_contact_pt_cur FOR');
11096 l(' SELECT cp.CONTACT_POINT_ID ');
11097 FOR I in 1..l_select.COUNT LOOP
11098 l(' ,' || l_select(I));
11099 END LOOP;
11100 l(' FROM HZ_CONTACT_POINTS cp, HZ_STAGED_CONTACT_POINTS s ');
11101 l(' WHERE mod(s.PARTY_ID, p_num_workers) = p_worker_number ');
11102 l(' AND cp.contact_point_id = s.contact_point_id ');
11103 l(' AND cp.owner_table_id = s.PARTY_ID ');
11104 l(' AND cp.OWNER_TABLE_NAME = ''HZ_PARTIES'' ');
11105 l(' AND (cp.status is null OR cp.status = ''A'' or cp.status = ''I''); ');
11106 l(' END;');
11107 END IF;
11108 l('');
11109 l(' PROCEDURE update_stage_contact_pts ( ');
11110 l(' p_contact_pt_cur IN HZ_PARTY_STAGE.StageCurTyp) IS ');
11111 l(' l_limit NUMBER := ' || g_batch_size || ';');
11112 l(' H_DENORM_PARTY_ID NumberList ;');
11113 l(' H_DENORM_VALUE CharList ;');
11114 l(' H_ROW_OFFSET Number ;');
11115 l(' l_last_fetch BOOLEAN := FALSE;');
11116 l('');
11120 l(' END;');
11117 l(' BEGIN');
11118 IF idx=1 THEN
11119 l(' RETURN;');
11121 ELSE
11122 l(' LOOP');
11123 l(' H_ROW_OFFSET := 1 ;');
11124 l(' FETCH p_contact_pt_cur BULK COLLECT INTO');
11125 l(' H_CONTACT_POINT_ID');
11126 FOR I IN 1..255 LOOP
11127 IF l_forall_list(I) <> 'N' THEN
11128 l(' ,H_TX'||I);
11129 END IF;
11130 END LOOP;
11131 l(' LIMIT l_limit;');
11132 l('');
11133 l(' IF p_contact_pt_cur%NOTFOUND THEN');
11134 l(' l_last_fetch:=TRUE;');
11135 l(' END IF;');
11136
11137 l(' IF H_CONTACT_POINT_ID.COUNT=0 AND l_last_fetch THEN');
11138 l(' EXIT;');
11139 l(' END IF;');
11140
11141 l(' FOR I in H_CONTACT_POINT_ID.FIRST..H_CONTACT_POINT_ID.LAST LOOP');
11142 -- VJN INTRODUCED CODE FOR GENERATING THE POPULATION
11143 -- OF THE GLOBAL CONDITION RECORD
11144
11145 l_idx := l_cond_attrib_list.FIRST ;
11146 IF l_idx IS NOT NULL
11147 THEN
11148 l('----------- SETTING GLOBAL CONDITION RECORD AT THE CONTACT POINT LEVEL ---------');
11149 END IF ;
11150
11151
11152 WHILE l_cond_attrib_list.EXISTS(l_idx)
11153 LOOP
11154
11155 l(' HZ_WORD_CONDITIONS_PKG.set_gbl_condition_rec ('||l_cond_attrib_list(l_idx)||','||'H_TX'||l_idx||'(I));');
11156 l_idx := l_idx+1;
11157 END LOOP;
11158
11159 FOR I IN 1..255 LOOP
11160 IF l_forall_list(I) <> 'N' THEN
11161 IF l_mincol_list(I) = 'Y' THEN
11162 l(' H_TX'||I||'(I):='||l_custom_list(I)||';');
11163 END IF;
11164 END IF;
11165 END LOOP;
11166
11167 FOR I IN 1..255 LOOP
11168 IF l_forall_list(I) <> 'N' THEN
11169 IF l_mincol_list(I) <> 'Y' THEN
11170 l(' H_TX'||I||'(I):='||l_forall_list(I)||';');
11171 END IF;
11172 END IF;
11173 END LOOP;
11174 FOR I IN 1..255 LOOP
11175 IF l_forall_list(I) <> 'N' THEN
11176 IF l_mincol_list(I) = 'Y' THEN
11177 l(' H_TX'||I||'(I):='||l_forall_list(I)||';');
11178 END IF;
11179 END IF;
11180 END LOOP;
11181 l(' END LOOP;');
11182
11183 l(' FORALL I in H_CONTACT_POINT_ID.FIRST..H_CONTACT_POINT_ID.LAST');
11184 l(' UPDATE HZ_STAGED_CONTACT_POINTS SET');
11185 FIRST:=TRUE;
11186 FOR I IN 1..255 LOOP
11187 IF l_forall_list(I) <> 'N' THEN
11188 IF (FIRST) THEN
11189 FIRST := false;
11190 l(' TX'||I||'=decode(H_TX'||I||'(I),null,H_TX'||I||'(I),H_TX'||I||'(I)||'' '')');
11191 ELSE
11192 l(' ,TX'||I||'=decode(H_TX'||I||'(I),null,H_TX'||I||'(I),H_TX'||I||'(I)||'' '')');
11193 END IF;
11194 END IF;
11195 END LOOP;
11196 l(' WHERE CONTACT_POINT_ID = H_CONTACT_POINT_ID(I)');
11197
11198 -- ADD CODE FOR UPDATING HZ_STAGED_PARTIES IF THERE ARE ANY NEW CONTACT POINT DENORM ATTRIBUTES
11199 IF get_missing_denorm_attrib_cols('CONTACT_POINTS') IS NOT NULL
11200 THEN
11201 l('RETURNING PARTY_ID, ');
11202 l(get_missing_denorm_attrib_cols('CONTACT_POINTS'));
11203 -- THIS BULK COLLECT WILL CHOSE THE PARTY ID COLUMNS OF THE ROWS THAT ARE UPDATED
11204 -- AND UPDATE THESE PARTY IDS IN HZ_STAGED_PARTIES, BY APPENDING TO THE D_CPT COLUMNS
11205 -- VALUES FROM THE NEW DENORM ATTRIBUTE COLUMNS
11206 l('BULK COLLECT INTO H_DENORM_PARTY_ID, H_DENORM_VALUE ;');
11207 l('LOOP');
11208 l('BEGIN');
11209 l(' FORALL I IN H_ROW_OFFSET..H_DENORM_PARTY_ID.COUNT');
11210 l(' UPDATE HZ_STAGED_PARTIES');
11211 l(' SET D_CPT = D_CPT||'' ''||H_DENORM_VALUE(I)');
11212 l(' WHERE PARTY_ID = H_DENORM_PARTY_ID(I) AND D_CPT <> ''SYNC'' ;');
11213 l('EXIT ;');
11214 l('EXCEPTION');
11215 l('WHEN OTHERS THEN');
11216 l(' H_ROW_OFFSET := H_ROW_OFFSET+SQL%ROWCOUNT;');
11217 l(' UPDATE HZ_STAGED_PARTIES');
11218 l(' SET D_CPT = ''SYNC'' ');
11219 l(' WHERE PARTY_ID = H_DENORM_PARTY_ID(H_ROW_OFFSET) ;');
11220 l(' H_ROW_OFFSET := H_ROW_OFFSET+1 ;');
11221 l('END ;');
11222 l('END LOOP ;');
11223 ELSE
11224 l(';');
11225 END IF ;
11226 l(' IF l_last_fetch THEN');
11227 l(' FND_CONCURRENT.AF_Commit;');
11228 l(' EXIT;');
11229 l(' END IF;');
11230 l(' FND_CONCURRENT.AF_Commit;');
11231 l(' END LOOP;');
11232 l(' END;');
11233 END IF;
11234 ELSE
11235 log('Else block of code -- No new transformations exist' );
11236 l('');
11237 l(' PROCEDURE open_contact_pt_cursor( ');
11238 l(' p_worker_number IN NUMBER,');
11239 l(' p_num_workers IN NUMBER,');
11240 l(' x_contact_pt_cur IN OUT HZ_PARTY_STAGE.StageCurTyp) IS ');
11241 l('');
11242 l(' BEGIN');
11243 l(' open x_contact_pt_cur FOR');
11244 l(' SELECT cpt.PARTY_ID,');
11245 l(get_missing_denorm_attrib_cols('CONTACT_POINTS'));
11246 l(' FROM HZ_STAGED_CONTACT_POINTS cpt');
11247 l(' WHERE mod(cpt.PARTY_ID, p_num_workers) = p_worker_number ; ');
11248 l(' END;');
11249
11250 l(' PROCEDURE update_stage_contact_pts ( ');
11251 l(' p_contact_pt_cur IN HZ_PARTY_STAGE.StageCurTyp) IS ');
11252 l(' l_limit NUMBER := ' || g_batch_size || ';');
11253 l(' H_DENORM_PARTY_ID NumberList ;');
11254 l(' H_DENORM_VALUE CharList ;');
11255 l(' H_ROW_OFFSET Number ;');
11256 l(' l_last_fetch BOOLEAN := FALSE;');
11257 l('');
11258 l(' BEGIN');
11259 l(' LOOP');
11260 l(' H_ROW_OFFSET := 1 ; ');
11261 l(' FETCH p_contact_pt_cur BULK COLLECT INTO');
11262 l(' H_DENORM_PARTY_ID, H_DENORM_VALUE');
11263 l(' LIMIT l_limit;');
11264 l('');
11265 l(' IF p_contact_pt_cur%NOTFOUND THEN');
11266 l(' l_last_fetch:=TRUE;');
11267 l(' END IF;');
11268 l(' IF H_DENORM_PARTY_ID.COUNT=0 AND l_last_fetch THEN');
11269 l(' EXIT;');
11270 l(' END IF;');
11271
11272 l('LOOP');
11273 l('BEGIN');
11274 l(' FORALL I IN H_ROW_OFFSET..H_DENORM_PARTY_ID.COUNT');
11275 l(' UPDATE HZ_STAGED_PARTIES');
11276 l(' SET D_CPT = D_CPT||'' ''||H_DENORM_VALUE(I)');
11277 l(' WHERE PARTY_ID = H_DENORM_PARTY_ID(I) AND D_CPT <> ''SYNC'' ;');
11278 l('EXIT ;');
11279 l('EXCEPTION');
11280 l('WHEN OTHERS THEN');
11281 l(' H_ROW_OFFSET := H_ROW_OFFSET+SQL%ROWCOUNT;');
11282 l(' UPDATE HZ_STAGED_PARTIES');
11283 l(' SET D_CPT = ''SYNC'' ');
11284 l(' WHERE PARTY_ID = H_DENORM_PARTY_ID(H_ROW_OFFSET) ;');
11285 l(' H_ROW_OFFSET := H_ROW_OFFSET+1 ;');
11286 l('END ;');
11287 l('END LOOP ;');
11288
11289
11290
11291
11292
11293 l(' IF l_last_fetch THEN');
11294 l(' FND_CONCURRENT.AF_Commit;');
11295 l(' EXIT;');
11296 l(' END IF;');
11297 l(' FND_CONCURRENT.AF_Commit;');
11298 l(' END LOOP ; ');
11299 l(' END ; ');
11300 END IF ;
11301
11302 END;
11303
11304
11305 PROCEDURE create_btree_indexes (p_entity VARCHAR2)
11306 IS
11307 l_index_owner VARCHAR2(255);
11308
11309 CURSOR indexes_reqd IS
11310 SELECT decode(a.entity_name,'PARTY','HZ_STAGED_PARTIES',
11311 'PARTY_SITES','HZ_STAGED_PARTY_SITES','CONTACTS','HZ_STAGED_CONTACTS',
11312 'CONTACT_POINTS','HZ_STAGED_CONTACT_POINTS')||'_N0'||substrb(staged_attribute_column,3) index_name,
11313 decode(a.entity_name,'PARTY','HZ_STAGED_PARTIES',
11314 'PARTY_SITES','HZ_STAGED_PARTY_SITES','CONTACTS','HZ_STAGED_CONTACTS',
11315 'CONTACT_POINTS','HZ_STAGED_CONTACT_POINTS') table_name,
11316 decode(a.entity_name,'PARTY','HZ_SRCH_PARTIES',
11317 'PARTY_SITES','HZ_SRCH_PSITES','CONTACTS','HZ_SRCH_CONTACTS',
11318 'CONTACT_POINTS','HZ_SRCH_CPTS')||'_N0'||substrb(staged_attribute_column,3) srch_index_name,
11319 decode(a.entity_name,'PARTY','HZ_SRCH_PARTIES',
11320 'PARTY_SITES','HZ_SRCH_PSITES','CONTACTS','HZ_SRCH_CONTACTS',
11321 'CONTACT_POINTS','HZ_SRCH_CPTS') srch_table_name,
11322 f.staged_attribute_column column_name
11323 FROM hz_trans_attributes_vl a, hz_trans_functions_vl f
11324 WHERE f.attribute_id = a.attribute_id
11325 AND f.index_required_flag = 'Y'
11326 AND a.entity_name = p_entity;
11327
11328 CURSOR check_index(cp_index_name VARCHAR2,cp_table_name VARCHAR2) IS
11329 SELECT 1 FROM sys.all_indexes
11330 WHERE INDEX_NAME=cp_index_name
11331 AND TABLE_NAME=cp_table_name and owner = l_index_owner;
11332
11333 l_index_name VARCHAR2(255);
11334 l_table_name VARCHAR2(255);
11335 l_srch_index_name VARCHAR2(255);
11336 l_srch_table_name VARCHAR2(255);
11337 l_column_name VARCHAR2(255);
11338
11339 ar_index_tbsp VARCHAR2(255);
11340 l_storage_params VARCHAR2(2000);
11341 tmp NUMBER;
11342
11343 l_status VARCHAR2(255);
11344 l_temp VARCHAR2(255);
11345
11346 l_bool BOOLEAN;
11347
11348 BEGIN
11349
11350 l_bool := fnd_installation.GET_APP_INFO('AR',l_status,l_temp,l_index_owner);
11351
11352 select index_tablespace
11353 into ar_index_tbsp
11354 from fnd_product_installations
11355 where application_id = '222';
11356
11357 l_storage_params := 'LOGGING STORAGE (INITIAL 4K NEXT 1M MINEXTENTS 1 '||
11358 'MAXEXTENTS unlimited PCTINCREASE 0 FREELIST GROUPS 4 '||
11359 'FREELISTS 4) PCTFREE 10 INITRANS 4 MAXTRANS 255 '||
11360 'COMPUTE STATISTICS TABLESPACE '||ar_index_tbsp;
11361
11362 OPEN indexes_reqd;
11363 LOOP
11364 FETCH indexes_reqd INTO l_index_name, l_table_name,l_srch_index_name, l_srch_table_name, l_column_name;
11365 EXIT WHEN indexes_reqd%NOTFOUND;
11366
11367 OPEN check_index(l_index_name,l_table_name);
11368 FETCH check_index INTO tmp;
11369 IF check_index%NOTFOUND THEN
11370 EXECUTE IMMEDIATE 'CREATE INDEX '||l_index_owner||'.'||l_index_name||' ON '||l_table_name||'('||l_column_name||') '||
11371 l_storage_params;
11372 END IF;
11373 CLOSE check_index;
11374
11375 OPEN check_index(l_srch_index_name,l_srch_table_name);
11376 FETCH check_index INTO tmp;
11377 IF check_index%NOTFOUND THEN
11378 EXECUTE IMMEDIATE 'CREATE INDEX '||l_index_owner||'.'||l_srch_index_name||' ON '||l_srch_table_name||'('||l_column_name||') '||
11379 l_storage_params;
11380 END IF;
11381 CLOSE check_index;
11385
11382 END LOOP;
11383 CLOSE indexes_reqd;
11384 END;
11386 FUNCTION has_trx_context(proc VARCHAR2) RETURN BOOLEAN IS
11387
11388 l_sql VARCHAR2(255);
11389 l_entity VARCHAR2(255);
11390 l_procedure VARCHAR2(255);
11391 l_attribute VARCHAR2(255);
11392 c NUMBER;
11393 n NUMBER;
11394 l_custom BOOLEAN;
11395
11396 BEGIN
11397 c := dbms_sql.open_cursor;
11398 l_sql := 'select ' || proc ||
11399 '(:attrval,:lang,:attr,:entity,:ctx) from dual';
11400 dbms_sql.parse(c,l_sql,2);
11401 DBMS_SQL.BIND_VARIABLE(c,':attrval','x');
11402 DBMS_SQL.BIND_VARIABLE(c,':lang','x');
11403 DBMS_SQL.BIND_VARIABLE(c,':attr','x');
11404 DBMS_SQL.BIND_VARIABLE(c,':entity','x');
11405 DBMS_SQL.BIND_VARIABLE(c,':ctx','x');
11406 n:=DBMS_SQL.execute(c);
11407 dbms_sql.close_cursor(c);
11408 RETURN TRUE;
11409 EXCEPTION
11413 END;
11410 WHEN OTHERS THEN
11411 dbms_sql.close_cursor(c);
11412 RETURN FALSE;
11414
11415 FUNCTION has_context(proc VARCHAR2) RETURN BOOLEAN IS
11416
11417 l_sql VARCHAR2(255);
11418 l_entity VARCHAR2(255);
11419 l_procedure VARCHAR2(255);
11420 l_attribute VARCHAR2(255);
11421 c NUMBER;
11422 n NUMBER;
11423 l_custom BOOLEAN;
11424
11425 BEGIN
11426 c := dbms_sql.open_cursor;
11427 l_sql := 'select ' || proc ||
11428 '(:record_id,:entity,:attr,:ctx) from dual';
11429 dbms_sql.parse(c,l_sql,2);
11430 DBMS_SQL.BIND_VARIABLE(c,':record_id','x');
11431 DBMS_SQL.BIND_VARIABLE(c,':entity','x');
11432 DBMS_SQL.BIND_VARIABLE(c,':attr','x');
11433 DBMS_SQL.BIND_VARIABLE(c,':ctx','x');
11434 n:=DBMS_SQL.execute(c);
11435 dbms_sql.close_cursor(c);
11436 RETURN TRUE;
11437 EXCEPTION
11438 WHEN OTHERS THEN
11439 dbms_sql.close_cursor(c);
11440 RETURN FALSE;
11441 END;
11442
11443
11444 PROCEDURE verify_all_procs IS
11445
11446 l_sql VARCHAR2(255);
11447 l_entity VARCHAR2(255);
11448 l_procedure VARCHAR2(255);
11449 l_attribute VARCHAR2(255);
11450 l_trans_name VARCHAR2(255);
11451 c NUMBER;
11452 l_custom BOOLEAN;
11453 BEGIN
11454 FOR FUNCS IN (SELECT PROCEDURE_NAME, a.ENTITY_NAME, a.ATTRIBUTE_NAME, f.TRANSFORMATION_NAME
11455 FROM HZ_TRANS_FUNCTIONS_VL f, HZ_TRANS_ATTRIBUTES_VL a
11456 WHERE a.ATTRIBUTE_ID = f.ATTRIBUTE_ID
11457 AND nvl(f.ACTIVE_FLAG,'Y') = 'Y' )
11458 LOOP
11459 BEGIN
11460 l_custom := FALSE;
11461 l_entity := FUNCS.ENTITY_NAME;
11462 l_attribute := FUNCS.ATTRIBUTE_NAME;
11463 l_procedure := FUNCS.PROCEDURE_NAME;
11464 l_trans_name := FUNCS.TRANSFORMATION_NAME;
11465 c := dbms_sql.open_cursor;
11466 l_sql := 'select ' || FUNCS.PROCEDURE_NAME ||
11467 '(:attrval,:lang,:attr,:entity) from dual';
11468 dbms_sql.parse(c,l_sql,2);
11469 dbms_sql.close_cursor(c);
11470 EXCEPTION WHEN OTHERS THEN
11471 FND_MESSAGE.SET_NAME('AR', 'HZ_TRANS_PROC_ERROR1');
11472 FND_MESSAGE.SET_TOKEN('PROC' ,l_procedure);
11473 FND_MESSAGE.SET_TOKEN('ENTITY' ,l_entity);
11474 FND_MESSAGE.SET_TOKEN('ATTRIBUTE' ,l_attribute);
11475 FND_MESSAGE.SET_TOKEN('TRANS' ,l_trans_name);
11476 FND_MSG_PUB.ADD;
11477 END;
11478 END LOOP;
11479 FOR FUNCS IN (SELECT custom_attribute_procedure, ENTITY_NAME, ATTRIBUTE_NAME
11480 FROM HZ_TRANS_ATTRIBUTES_VL a
11481 WHERE source_table = 'CUSTOM' OR
11482 custom_attribute_procedure is NOT NULL
11483 AND EXISTS (select 1 from HZ_TRANS_FUNCTIONS_VL f
11487 BEGIN
11484 WHERE f.attribute_id = a.attribute_id
11485 AND nvl(f.ACTIVE_FLAG,'Y') = 'Y'))
11486 LOOP
11488 l_custom := TRUE;
11489 l_entity := FUNCS.ENTITY_NAME;
11490 l_attribute := FUNCS.ATTRIBUTE_NAME;
11491 l_procedure := FUNCS.custom_attribute_procedure;
11492 c := dbms_sql.open_cursor;
11493 l_sql := 'select ' || FUNCS.custom_attribute_procedure ||
11494 '(:record_id,:entity,:attr) from dual';
11495 dbms_sql.parse(c,l_sql,2);
11496 dbms_sql.close_cursor(c);
11497 EXCEPTION WHEN OTHERS THEN
11498 FND_MESSAGE.SET_NAME('AR', 'HZ_CUSTOM_PROC_ERROR1');
11499 FND_MESSAGE.SET_TOKEN('PROC' ,l_procedure);
11500 FND_MESSAGE.SET_TOKEN('ENTITY' ,l_entity);
11501 FND_MESSAGE.SET_TOKEN('ATTRIBUTE' ,l_attribute);
11502 FND_MSG_PUB.ADD;
11503 END;
11504 END LOOP;
11505 EXCEPTION
11506 WHEN OTHERS THEN
11507 dbms_sql.close_cursor(c);
11508 RAISE FND_API.G_EXC_ERROR;
11509 END ;
11510
11511
11512
11513 /**
11514 * Procedure to write a message to the out NOCOPY file
11515 **/
11516 PROCEDURE out(
11517 message IN VARCHAR2,
11518 newline IN BOOLEAN DEFAULT TRUE) IS
11519 BEGIN
11520 IF message = 'NEWLINE' THEN
11521 FND_FILE.NEW_LINE(FND_FILE.OUTPUT, 1);
11522 ELSIF (newline) THEN
11523 FND_FILE.put_line(fnd_file.output,message);
11524 ELSE
11525 FND_FILE.put(fnd_file.output,message);
11526 END IF;
11527 END out;
11528
11529 /**
11530 * Procedure to write a message to the log file
11531 **/
11532 PROCEDURE log(
11533 message IN VARCHAR2,
11534 newline IN BOOLEAN DEFAULT TRUE) IS
11535 BEGIN
11536
11537 IF message = 'NEWLINE' THEN
11538 FND_FILE.NEW_LINE(FND_FILE.LOG, 1);
11539 ELSIF (newline) THEN
11540 FND_FILE.put_line(fnd_file.log,message);
11541 ELSE
11542 FND_FILE.put(fnd_file.log,message);
11543 END IF;
11544 END log;
11545
11546 /**
11547 * Procedure to write a message to the out NOCOPY and log files
11548 **/
11549 PROCEDURE outandlog(
11550 message IN VARCHAR2,
11551 newline IN BOOLEAN DEFAULT TRUE) IS
11552 BEGIN
11553 out(message, newline);
11554 log(message, newline);
11555 END outandlog;
11556
11557 /**
11558 * Function to fetch messages of the stack and log the error
11559 * Also returns the error
11560 **/
11561 FUNCTION logerror(SQLERRM VARCHAR2 DEFAULT NULL)
11562 RETURN VARCHAR2 IS
11563
11564 l_msg_data VARCHAR2(2000);
11565 BEGIN
11566 FND_MSG_PUB.Reset;
11567
11568 FOR I IN 1..FND_MSG_PUB.Count_Msg LOOP
11569 l_msg_data := l_msg_data || FND_MSG_PUB.Get(p_encoded => FND_API.G_FALSE );
11570 END LOOP;
11571 IF (SQLERRM IS NOT NULL) THEN
11572 l_msg_data := l_msg_data || SQLERRM;
11573 END IF;
11574 log(l_msg_data);
11575 RETURN l_msg_data;
11576 END logerror;
11577
11578 FUNCTION wait_for_request(
11579 p_request_id NUMBER) RETURN VARCHAR2 IS
11580
11581 uphase VARCHAR2(255);
11582 dphase VARCHAR2(255);
11583 ustatus VARCHAR2(255);
11584 dstatus VARCHAR2(255);
11585 message VARCHAR2(32000);
11586
11587 l_bool BOOLEAN;
11588
11589 BEGIN
11590 l_bool := FND_CONCURRENT.wait_for_request(p_request_id,
11591 60, 144000, uphase, ustatus, dphase, dstatus, message);
11592
11593 IF dphase <> 'COMPLETE' and dstatus <> 'NORMAL' THEN
11594 return 'ERROR';
11595 ELSE
11596 return 'SUCCESS';
11597 END IF;
11598 END wait_for_request;
11599
11600 BEGIN
11601 g_schema_name := hz_utility_v2pub.get_appsschemaname;
11602
11603
11604 END HZ_PARTY_STAGE;
11605