[Home] [Help]
PACKAGE BODY: APPS.EGO_USER_ATTRS_BULK_PVT
Source
1 PACKAGE BODY ego_user_attrs_bulk_pvt AS
2 /* $Header: EGOVBUAB.pls 120.137.12020000.15 2013/02/13 14:32:10 vijoshi ship $ */
3
4 ------------------------
5 -- Private Data Types --
6 ------------------------
7
8 TYPE DIST_ATTR_IN_DATA_SET_REC IS RECORD
9 (
10 ATTR_GROUP_ID NUMBER
11 ,ATTR_INT_NAME VARCHAR2(30)
12 ,ATTR_GROUP_INT_NAME VARCHAR2(30)
13 );
14 TYPE DIST_ATTR_IN_DATA_SET_TABLE IS TABLE OF DIST_ATTR_IN_DATA_SET_REC
15 INDEX BY BINARY_INTEGER;
16
17 TYPE PK_COL_REC IS RECORD (PK_COL_1 VARCHAR2(300)
18 ,PK_COL_2 VARCHAR2(300)
19 ,PK_COL_3 VARCHAR2(300)
20 ,PK_COL_4 VARCHAR2(300)
21 ,PK_COL_5 VARCHAR2(300)
22 );
23 TYPE PK_COL_TABLE IS TABLE OF PK_COL_REC INDEX BY BINARY_INTEGER;
24
25
26 ------------------------------
27 -- Private Global Variables --
28 ------------------------------
29
30 G_PKG_NAME CONSTANT VARCHAR2(30) := 'EGO_USER_ATTRS_BULK_PVT';
31
32 G_CURRENT_USER_ID NUMBER;
33 G_CURRENT_LOGIN_ID NUMBER;
34 G_API_VERSION NUMBER;
35
36 G_USER_NAME FND_USER.USER_NAME%TYPE;
37 G_HZ_PARTY_ID VARCHAR2(30);
38
39 G_NO_USER_NAME_TO_VALIDATE EXCEPTION;
40
41 -- used for error handling.
42 G_ADD_ERRORS_TO_FND_STACK VARCHAR2(1);
43 G_APPLICATION_CONTEXT VARCHAR2(30);
44 G_ENTITY_ID NUMBER;
45 G_ENTITY_CODE VARCHAR2(30);
46
47 G_PK_COLS_TABLE PK_COL_TABLE;
48
49 G_REQUEST_ID NUMBER := FND_GLOBAL.CONC_REQUEST_ID;
50
51 G_FND_RET_STS_WARNING VARCHAR2(1):= 'W';
52
53 -------------------------
54 -- Private Procedures --
55 -------------------------
56
57 ----------------------------------------------------------------------
58
59 procedure code_debug (msg IN VARCHAR2
60 ,debug_level IN NUMBER default 3
61 ) IS
62 BEGIN
63 null;
64 -- IF (INSTR(msg, 'Insert_Default_Val_Rows') <> 0 ) THEN
65 -- sri_debug('EGOVBUAB '||msg);
66 -- END IF;
67 -- EGO_USER_ATTRS_DATA_PVT.Debug_Msg(msg , debug_level);
68
69 IF (FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL ) THEN
70 IF NVL(FND_GLOBAL.conc_request_id, -1) <> -1 THEN
71
72 FND_FILE.put_line(which => FND_FILE.LOG
73 ,buff => '[EGOVBUAB] '||msg);
74 END IF;
75 END IF;
76 EXCEPTION
77 WHEN OTHERS THEN
78 NULL;
79 END code_debug;
80
81 ----------------------------------------------------------------------
82
83 PROCEDURE write_intf_records (p_data_set_id in number
84 ,p_count IN NUMBER
85 ) IS
86 -- PRAGMA AUTONOMOUS_TRANSACTION;
87
88 l_rec ego_itm_usr_attr_intrfc%ROWTYPE;
89 l_dummy_number NUMBER;
90 BEGIN
91 NULL;
92 /***
93 SELECT count(*)
94 INTO l_dummy_number
95 FROM ego_itm_usr_attr_intrfc
96 WHERE data_set_id = p_data_set_id;
97 code_debug(p_log_level => 0
98 ,p_module => 'write_intf_records'
99 ,p_message => p_count||' - No records in intf table '||l_dummy_number
100 );
101 IF l_dummy_number > 0 THEN
102 code_debug(p_log_level => 0
103 ,p_module => 'write_intf_records'
104 ,p_message => p_count||' Writing data in format '||
105 ' inventory_item_id, organization_id, data_level_id, revision_id, pk1_value, pk2_value, '||
106 ' attr_group_id, attr_group_int_name, attr_int_name, attr_value_str, attr_value_num, '||
107 ' row_identifier');
108 IF p_count < 100 THEN
109 FOR cr in (SELECT * FROM ego_itm_usr_attr_intrfc
110 WHERE data_set_id = p_data_set_id
111 ORDER BY inventory_item_id, organization_id, data_level_id,
112 revision_id, pk1_value, pk2_value, attr_group_id,
113 attr_int_name, row_identifier
114 ) LOOP
115 code_debug(p_log_level => 0
116 ,p_module => 'write_intf_records'
117 ,p_message => p_count||' - '||cr.inventory_item_id||', '||
118 cr.organization_id||', '||cr.data_level_id||', '||cr.revision_id||', '||
119 cr.pk1_value||', '||cr.pk2_value||', '||cr.attr_group_id||', '||
120 cr.attr_group_int_name||', '||cr.attr_int_name||', '||
121 cr.attr_value_str||', '||cr.attr_value_num||', '||cr.row_identifier);
122 END LOOP;
123 END IF;
124 END IF;
125 ***/
126 END write_intf_records;
127
128 ----------------------------------------------------------------------
129
130 FUNCTION Attr_Is_In_Data_Set (
131 p_attr_metadata_obj IN EGO_ATTR_METADATA_OBJ
132 ,p_dist_attrs_in_data_set_table IN DIST_ATTR_IN_DATA_SET_TABLE
133 ) RETURN BOOLEAN
134 IS
135
136 l_is_in_data_set BOOLEAN;
137
138 BEGIN
139
140 l_is_in_data_set := FALSE;
141 IF (p_dist_attrs_in_data_set_table.COUNT > 0) THEN
142 FOR i IN p_dist_attrs_in_data_set_table.FIRST .. p_dist_attrs_in_data_set_table.LAST
143 LOOP
144 EXIT WHEN l_is_in_data_set;
145 IF (p_dist_attrs_in_data_set_table(i).ATTR_INT_NAME = p_attr_metadata_obj.ATTR_NAME) THEN
146 l_is_in_data_set := TRUE;
147 END IF;
148 END LOOP;
149 END IF;
150
151 RETURN l_is_in_data_set;
152
153 END Attr_Is_In_Data_Set;
154
155 ----------------------------------------------------------------------
156
157 Function GET_ATTR_OBJECT
158 (p_attr_grp_meta_obj IN EGO_ATTR_GROUP_METADATA_OBJ
159 ,p_attr_int_name IN VARCHAR2)
160 RETURN EGO_ATTR_METADATA_OBJ IS
161 --
162 -- used by log_error_messages
163 -- returns the attribute metadata object
164 --
165 l_attr_metadata_obj EGO_ATTR_METADATA_TABLE;
166 BEGIN
167 l_attr_metadata_obj := p_attr_grp_meta_obj.ATTR_METADATA_TABLE;
168 IF l_attr_metadata_obj.count > 0 THEN
169 FOR i IN l_attr_metadata_obj.FIRST .. l_attr_metadata_obj.LAST LOOP
170 IF l_attr_metadata_obj(i).attr_name = p_attr_int_name THEN
171 RETURN l_attr_metadata_obj(i);
172 END IF;
173 END LOOP;
174 END IF;
175 RETURN NULL;
176 EXCEPTION
177 WHEN OTHERS THEN
178 RETURN NULL;
179 END GET_ATTR_OBJECT;
180
181 ----------------------------------------------------------------------
182
183 Function GET_ENTITY_INDEX
184 (p_entity_index IN NUMBER
185 ,p_instance_pk1_value IN VARCHAR2
186 ,p_instance_pk2_value IN VARCHAR2
187 ,p_instance_pk3_value IN VARCHAR2
188 ,p_instance_pk4_value IN VARCHAR2
189 ,p_instance_pk5_value IN VARCHAR2
190 ) RETURN NUMBER IS
191 --
192 -- used to get the entity index for error logging
193 --
194 l_entity_index NUMBER;
195 l_pk_col_rec PK_COL_REC;
196 l_null_char_value VARCHAR2(10);
197 BEGIN
198 IF NVL(p_entity_index,0) <> 0 THEN
199 RETURN p_entity_index;
200 ELSE
201 l_entity_index := NULL;
202 l_null_char_value := FND_API.G_MISS_CHAR;
203 l_pk_col_rec.pk_col_1 := NVL(p_instance_pk1_value, l_null_char_value);
204 l_pk_col_rec.pk_col_2 := NVL(p_instance_pk2_value, l_null_char_value);
205 l_pk_col_rec.pk_col_3 := NVL(p_instance_pk3_value, l_null_char_value);
206 l_pk_col_rec.pk_col_4 := NVL(p_instance_pk4_value, l_null_char_value);
207 l_pk_col_rec.pk_col_5 := NVL(p_instance_pk5_value, l_null_char_value);
208 IF (G_PK_COLS_TABLE.COUNT > 0) THEN
209 FOR i IN G_PK_COLS_TABLE.FIRST .. G_PK_COLS_TABLE.LAST LOOP
210 EXIT WHEN l_entity_index IS NOT NULL;
211 IF (G_PK_COLS_TABLE(i).pk_col_1 = l_pk_col_rec.pk_col_1 AND
212 G_PK_COLS_TABLE(i).pk_col_2 = l_pk_col_rec.pk_col_2 AND
213 G_PK_COLS_TABLE(i).pk_col_3 = l_pk_col_rec.pk_col_3 AND
214 G_PK_COLS_TABLE(i).pk_col_4 = l_pk_col_rec.pk_col_4 AND
215 G_PK_COLS_TABLE(i).pk_col_5 = l_pk_col_rec.pk_col_5 ) THEN
216 l_entity_index := i;
217 END IF;
218 END LOOP;
219 ELSE
220 -- no records exist
221 NULL;
222 END IF;
223 IF l_entity_index IS NULL THEN
224 l_entity_index := G_PK_COLS_TABLE.COUNT+1;
225 G_PK_COLS_TABLE(l_entity_index) := l_pk_col_rec;
226 END IF;
227 RETURN l_entity_index;
228 END IF;
229 EXCEPTION
230 WHEN OTHERS THEN
231 RETURN -1;
232 END GET_ENTITY_INDEX;
233
234 ----------------------------------------------------------------------
235
236 PROCEDURE Log_Errors_Now (
237 p_entity_id IN NUMBER
238 ,p_entity_index IN NUMBER
239 ,p_entity_code IN VARCHAR2
240 ,p_object_name IN VARCHAR2
241 ,p_pk1_column_name IN VARCHAR2
242 ,p_pk2_column_name IN VARCHAR2
243 ,p_pk3_column_name IN VARCHAR2
244 ,p_pk4_column_name IN VARCHAR2
245 ,p_pk5_column_name IN VARCHAR2
246 ,p_classification_col_name IN VARCHAR2
247 ,p_interface_table_name IN VARCHAR2
248 ,p_err_col_static_sql IN VARCHAR2
249 ,p_err_where_static_sql IN VARCHAR2
250 ,p_attr_grp_meta_obj IN EGO_ATTR_GROUP_METADATA_OBJ
251 ,p_data_set_id IN NUMBER DEFAULT NULL /*Fix for bug#9678667. Literal to bind*/
252 ) IS
253 --
254 -- no exception is thrown
255 -- calling program will handle the exceptions.
256 --
257 l_err_token_table ERROR_HANDLER.Token_Tbl_Type;
258 l_err_col_dynamic_sql VARCHAR2(32767);
259 l_err_where_dynamic_sql VARCHAR2(32767);
260 l_err_sql VARCHAR2(32767);
261 l_err_msg_name VARCHAR2(99);
262 l_attr_grp_disp_name FND_DESCR_FLEX_CONTEXTS_TL.descriptive_flex_context_name%TYPE;
263 l_attr_metadata_obj EGO_ATTR_METADATA_OBJ;
264 l_attr_disp_name FND_DESCR_FLEX_CONTEXTS_TL.descriptive_flex_context_name%TYPE;
265 l_comma_message VARCHAR2(99);
266 l_msg_token_value VARCHAR2(32767);
267 l_attr_table EGO_ATTR_METADATA_TABLE;
268 l_entity_index NUMBER;
269
270 TYPE DYNAMIC_CUR IS REF CURSOR;
271 c_err_cursor DYNAMIC_CUR;
272
273 TYPE error_record_type IS RECORD
274 (process_status NUMBER
275 ,row_identifier NUMBER
276 ,attr_group_int_name VARCHAR2(999)
277 ,attr_int_name VARCHAR2(999)
278 ,attr_value_str VARCHAR2(32767)
279 ,attr_value_num NUMBER
280 ,attr_value_date DATE
281 ,attr_disp_value VARCHAR2(32767)
282 ,transaction_type VARCHAR2(99)
283 ,transaction_id NUMBER
284 ,attr_group_id NUMBER
285 ,pk_col_1 VARCHAR2(256)
286 ,pk_col_2 VARCHAR2(256)
287 ,pk_col_3 VARCHAR2(256)
288 ,pk_col_4 VARCHAR2(256)
289 ,pk_col_5 VARCHAR2(256)
290 ,class_code_value VARCHAR2(256)
291 );
292
293 error_rec error_record_type;
294
295 BEGIN
296 -- add the key value into the fetch columns.
297 IF (p_pk1_column_name IS NOT NULL) THEN
298 l_err_col_dynamic_sql := ', '||p_pk1_column_name||' AS pk_col_1 ';
299 ELSE
300 l_err_col_dynamic_sql := ', NULL AS pk_col_1 ';
301 END IF;
302 IF (p_pk2_column_name IS NOT NULL) THEN
303 l_err_col_dynamic_sql := l_err_col_dynamic_sql || ', '||p_pk2_column_name||' AS pk_col_2 ';
304 ELSE
305 l_err_col_dynamic_sql := l_err_col_dynamic_sql || ', NULL AS pk_col_2 ';
306 END IF;
307 IF (p_pk3_column_name IS NOT NULL) THEN
308 l_err_col_dynamic_sql := l_err_col_dynamic_sql || ', '||p_pk3_column_name||' AS pk_col_3 ';
309 ELSE
310 l_err_col_dynamic_sql := l_err_col_dynamic_sql || ', NULL AS pk_col_3 ';
311 END IF;
312 IF (p_pk4_column_name IS NOT NULL) THEN
313 l_err_col_dynamic_sql := l_err_col_dynamic_sql || ', '||p_pk4_column_name||' AS pk_col_4 ';
314 ELSE
315 l_err_col_dynamic_sql := l_err_col_dynamic_sql || ', NULL AS pk_col_4 ';
316 END IF;
317 IF (p_pk5_column_name IS NOT NULL) THEN
318 l_err_col_dynamic_sql := l_err_col_dynamic_sql || ', '||p_pk5_column_name||' AS pk_col_5 ';
319 ELSE
320 l_err_col_dynamic_sql := l_err_col_dynamic_sql || ', NULL AS pk_col_5 ';
321 END IF;
322 IF (p_classification_col_name IS NOT NULL) THEN
323 l_err_col_dynamic_sql := l_err_col_dynamic_sql || ', '||p_classification_col_name||' AS class_code_value ';
324 ELSE
325 l_err_col_dynamic_sql := l_err_col_dynamic_sql || ', NULL AS class_code_value ';
326 END IF;
327
328 -- add something if reqd
329 l_err_where_dynamic_sql := NULL;
330
331 l_err_sql := p_err_col_static_sql||l_err_col_dynamic_sql||' FROM '||p_interface_table_name
332 ||p_err_where_static_sql||l_err_where_dynamic_sql;
333 -- the error tokens are used in multiple places
334 IF p_attr_grp_meta_obj IS NOT NULL THEN
335 l_attr_grp_disp_name := p_attr_grp_meta_obj.attr_group_disp_name;
336 ELSE
337 l_attr_grp_disp_name := NULL;
338 END IF;
339
340 OPEN c_err_cursor FOR l_err_sql USING p_data_set_id, p_attr_grp_meta_obj.attr_group_name; /*Fix for bug#9678667. Literal to bind*/
341
342 LOOP
343 FETCH c_err_cursor INTO error_rec;
344 EXIT WHEN c_err_cursor%NOTFOUND;
345 -- some variables that will be used over the messages
346 l_attr_metadata_obj := GET_ATTR_OBJECT (p_attr_grp_meta_obj => p_attr_grp_meta_obj
347 ,p_attr_int_name => error_rec.attr_int_name);
348 IF l_attr_metadata_obj IS NULL THEN
349 --Bug 5144368:START
350 --we should not retun from here but has to log the errors in the
351 --MTL_INTERFACE_ERRORS with the wrong attribute internal name as the
352 --attribute display name
353 l_attr_metadata_obj := EGO_ATTR_METADATA_OBJ(null,null,null,null,null,
354 null,null,null,null,null,
355 null,null,null,null,null,
356 null,null,null,null,null,
357 null,null,null,null,null);
358 l_attr_metadata_obj.attr_disp_name := error_rec.attr_int_name;
359 --Bug 5144368:END
360 END IF;
361
362 l_entity_index := get_entity_index(p_entity_index => p_entity_id
363 ,p_instance_pk1_value => error_rec.pk_col_1
364 ,p_instance_pk2_value => error_rec.pk_col_2
365 ,p_instance_pk3_value => error_rec.pk_col_3
366 ,p_instance_pk4_value => error_rec.pk_col_4
367 ,p_instance_pk5_value => error_rec.pk_col_5
368 );
369
370 IF BITAND(error_rec.PROCESS_STATUS,G_PS_BAD_ATTR_OR_AG_METADATA) <> 0 THEN
371 l_err_msg_name := 'EGO_EF_ATTR_DOES_NOT_EXIST';
372 l_err_token_table(1).TOKEN_NAME := 'BAD_ATTR_NAME';
373 l_err_token_table(1).TOKEN_VALUE := l_attr_metadata_obj.attr_disp_name;
374 l_err_token_table(2).TOKEN_NAME := 'AG_NAME';
375 l_err_token_table(2).TOKEN_VALUE := l_attr_grp_disp_name;
376 ERROR_HANDLER.Add_Error_Message
377 (p_message_name => l_err_msg_name
378 ,p_application_id =>'EGO'--Bug 7507091 Orig value: G_APPLICATION_CONTEXT
379 ,p_token_tbl => l_err_token_table
380 ,p_message_type => FND_API.G_RET_STS_ERROR
381 ,p_row_identifier => error_rec.TRANSACTION_ID
382 ,p_entity_id => G_ENTITY_ID
383 ,p_entity_index => l_entity_index
384 ,p_table_name => p_interface_table_name
385 ,p_entity_code => G_ENTITY_CODE
386 ,p_addto_fnd_stack => G_ADD_ERRORS_TO_FND_STACK
387 );
388 l_err_token_table.DELETE();
389 END IF;
390
391 IF BITAND(error_rec.PROCESS_STATUS,G_PS_MULTIPLE_ENTRIES) <> 0 THEN
392 l_err_msg_name := 'EGO_EF_MULT_VALUES_FOR_ATTR';
393 l_err_token_table(1).TOKEN_NAME := 'ATTR_NAME';
394 l_err_token_table(1).TOKEN_VALUE := l_attr_metadata_obj.attr_disp_name;
395 l_err_token_table(2).TOKEN_NAME := 'AG_NAME';
396 l_err_token_table(2).TOKEN_VALUE := l_attr_grp_disp_name;
397 ERROR_HANDLER.Add_Error_Message
398 (p_message_name => l_err_msg_name
399 ,p_application_id =>'EGO'--Bug 7507091 Orig value: G_APPLICATION_CONTEXT
400 ,p_token_tbl => l_err_token_table
401 ,p_message_type => FND_API.G_RET_STS_ERROR
402 ,p_row_identifier => error_rec.TRANSACTION_ID
403 ,p_entity_id => G_ENTITY_ID
404 ,p_entity_index => l_entity_index
405 ,p_table_name => p_interface_table_name
406 ,p_entity_code => G_ENTITY_CODE
407 ,p_addto_fnd_stack => G_ADD_ERRORS_TO_FND_STACK
408 );
409 l_err_token_table.DELETE();
410 END IF;
411
412 IF BITAND(error_rec.PROCESS_STATUS,G_PS_MULTIPLE_VALUES) <> 0 THEN
413 l_err_msg_name := 'EGO_EF_INT_AND_DISP_VAL_EXIST';
414 l_err_token_table(1).TOKEN_NAME := 'ATTR_NAME';
415 l_err_token_table(1).TOKEN_VALUE := l_attr_metadata_obj.attr_disp_name;
416 l_err_token_table(2).TOKEN_NAME := 'AG_NAME';
417 l_err_token_table(2).TOKEN_VALUE := l_attr_grp_disp_name;
418 ERROR_HANDLER.Add_Error_Message
419 (p_message_name => l_err_msg_name
420 ,p_application_id => 'EGO'--Bug 7507091 Orig value: G_APPLICATION_CONTEXT
421 ,p_token_tbl => l_err_token_table
422 ,p_message_type => FND_API.G_RET_STS_ERROR
423 ,p_row_identifier => error_rec.TRANSACTION_ID
424 ,p_entity_id => G_ENTITY_ID
425 ,p_entity_index => l_entity_index
426 ,p_table_name => p_interface_table_name
427 ,p_entity_code => G_ENTITY_CODE
428 ,p_addto_fnd_stack => G_ADD_ERRORS_TO_FND_STACK
429 );
430 l_err_token_table.DELETE();
431 END IF;
432
433 IF BITAND(error_rec.PROCESS_STATUS,G_PS_NO_PRIVILEGES) <> 0 THEN
434 l_err_msg_name := 'EGO_EF_AG_USER_PRIV_ERR';
435 l_err_token_table(1).TOKEN_NAME := 'USER_NAME';
436 l_err_token_table(1).TOKEN_VALUE := G_USER_NAME;
437 l_err_token_table(2).TOKEN_NAME := 'AG_NAME';
438 l_err_token_table(2).TOKEN_VALUE := l_attr_grp_disp_name;
439 ERROR_HANDLER.Add_Error_Message
440 (p_message_name => l_err_msg_name
441 ,p_application_id => 'EGO'--Bug 7507091 Orig value: G_APPLICATION_CONTEXT
442 ,p_token_tbl => l_err_token_table
443 ,p_message_type => FND_API.G_RET_STS_ERROR
444 ,p_row_identifier => error_rec.TRANSACTION_ID
445 ,p_entity_id => G_ENTITY_ID
446 ,p_entity_index => l_entity_index
447 ,p_table_name => p_interface_table_name
448 ,p_entity_code => G_ENTITY_CODE
449 ,p_addto_fnd_stack => G_ADD_ERRORS_TO_FND_STACK
450 );
451 l_err_token_table.DELETE();
452 END IF;
453
454 IF BITAND(error_rec.PROCESS_STATUS,G_PS_VALUE_NOT_IN_VS) <> 0 THEN
455 IF (l_attr_metadata_obj.validation_code = EGO_EXT_FWK_PUB.G_INDEPENDENT_VALIDATION_CODE
456 OR
457 l_attr_metadata_obj.validation_code = EGO_EXT_FWK_PUB.G_TRANS_IND_VALIDATION_CODE
458 OR
459 l_attr_metadata_obj.validation_code = EGO_EXT_FWK_PUB.G_TABLE_VALIDATION_CODE
460 ) THEN
461 l_err_msg_name := 'EGO_EF_INDEPENDENT_VS_VIOLATED';
462 l_err_token_table(1).TOKEN_NAME := 'VALUE';
463 IF (l_attr_metadata_obj.data_type_code = EGO_EXT_FWK_PUB.G_NUMBER_DATA_TYPE) THEN
464 l_err_token_table(1).TOKEN_VALUE := NVL(error_rec.ATTR_DISP_VALUE,error_rec.attr_value_num);
465 ELSIF (l_attr_metadata_obj.data_type_code = EGO_EXT_FWK_PUB.G_DATE_DATA_TYPE
466 OR
467 l_attr_metadata_obj.data_type_code = EGO_EXT_FWK_PUB.G_DATE_TIME_DATA_TYPE
468 ) THEN
469 l_err_token_table(1).TOKEN_VALUE := NVL(error_rec.ATTR_DISP_VALUE,error_rec.attr_value_date);
470 ELSE
471 l_err_token_table(1).TOKEN_VALUE := NVL(error_rec.ATTR_DISP_VALUE,error_rec.attr_value_str);
472 END IF;
473 l_err_token_table(2).TOKEN_NAME := 'ATTR_NAME';
474 l_err_token_table(2).TOKEN_VALUE := l_attr_metadata_obj.attr_disp_name;
475 l_err_token_table(3).TOKEN_NAME := 'AG_NAME';
476 l_err_token_table(3).TOKEN_VALUE := l_attr_grp_disp_name;
477 ERROR_HANDLER.Add_Error_Message
478 (p_message_name => l_err_msg_name
479 ,p_application_id => 'EGO'--Bug 7507091 Orig value: G_APPLICATION_CONTEXT
480 ,p_token_tbl => l_err_token_table
481 ,p_message_type => FND_API.G_RET_STS_ERROR
482 ,p_row_identifier => error_rec.TRANSACTION_ID
483 ,p_entity_id => G_ENTITY_ID
484 ,p_entity_index => l_entity_index
485 ,p_table_name => p_interface_table_name
486 ,p_entity_code => G_ENTITY_CODE
487 ,p_addto_fnd_stack => G_ADD_ERRORS_TO_FND_STACK
488 );
489 l_err_token_table.DELETE();
490 END IF;
491 END IF;
492
493 IF BITAND(error_rec.PROCESS_STATUS,G_PS_MIN_VAL_VIOLATION) <> 0 THEN
494 l_err_token_table(1).TOKEN_NAME := 'ATTR_NAME';
495 l_err_token_table(1).TOKEN_VALUE := l_attr_metadata_obj.attr_disp_name;
496 l_err_token_table(2).TOKEN_NAME := 'AG_NAME';
497 l_err_token_table(2).TOKEN_VALUE := l_attr_grp_disp_name;
498 IF (l_attr_metadata_obj.data_type_code = EGO_EXT_FWK_PUB.G_NUMBER_DATA_TYPE) THEN
499 l_err_msg_name := 'EGO_EF_MIN_VAL_NUM_VIOLATED';
500 l_err_token_table(3).TOKEN_NAME := 'MIN_NUM_VALUE';
501 l_err_token_table(3).TOKEN_VALUE := l_attr_metadata_obj.MINIMUM_VALUE;
502 ELSE
503 l_err_msg_name := 'EGO_EF_MIN_VAL_DATE_VIOLATED';
504 l_err_token_table(3).TOKEN_NAME := 'MIN_DATE_VALUE';
505 l_err_token_table(3).TOKEN_VALUE := l_attr_metadata_obj.MINIMUM_VALUE;
506 END IF;
507 ERROR_HANDLER.Add_Error_Message
508 (p_message_name => l_err_msg_name
509 ,p_application_id => 'EGO'--Bug 7507091 Orig value: G_APPLICATION_CONTEXT
510 ,p_token_tbl => l_err_token_table
511 ,p_message_type => FND_API.G_RET_STS_ERROR
512 ,p_row_identifier => error_rec.TRANSACTION_ID
513 ,p_entity_id => G_ENTITY_ID
514 ,p_entity_index => l_entity_index
515 ,p_table_name => p_interface_table_name
516 ,p_entity_code => G_ENTITY_CODE
517 ,p_addto_fnd_stack => G_ADD_ERRORS_TO_FND_STACK
518 );
519 l_err_token_table.DELETE();
520 END IF;
521
522 IF BITAND(error_rec.PROCESS_STATUS,G_PS_MAX_VAL_VIOLATION) <> 0 THEN
523 l_err_token_table(1).TOKEN_NAME := 'ATTR_NAME';
524 l_err_token_table(1).TOKEN_VALUE := l_attr_metadata_obj.attr_disp_name;
525 l_err_token_table(2).TOKEN_NAME := 'AG_NAME';
526 l_err_token_table(2).TOKEN_VALUE := l_attr_grp_disp_name;
527 IF (l_attr_metadata_obj.data_type_code = EGO_EXT_FWK_PUB.G_NUMBER_DATA_TYPE) THEN
528 l_err_msg_name := 'EGO_EF_MAX_VAL_NUM_VIOLATED';
529 l_err_token_table(3).TOKEN_NAME := 'MAX_NUM_VALUE';
530 l_err_token_table(3).TOKEN_VALUE := l_attr_metadata_obj.MAXIMUM_VALUE;
531 ELSE
532 l_err_msg_name := 'EGO_EF_MAX_VAL_DATE_VIOLATED';
533 l_err_token_table(3).TOKEN_NAME := 'MAX_DATE_VALUE';
534 l_err_token_table(3).TOKEN_VALUE := l_attr_metadata_obj.MAXIMUM_VALUE;
535 END IF;
536 ERROR_HANDLER.Add_Error_Message
537 (p_message_name => l_err_msg_name
538 ,p_application_id => 'EGO'--Bug 7507091 Orig value: G_APPLICATION_CONTEXT
539 ,p_token_tbl => l_err_token_table
540 ,p_message_type => FND_API.G_RET_STS_ERROR
541 ,p_row_identifier => error_rec.TRANSACTION_ID
542 ,p_entity_id => G_ENTITY_ID
543 ,p_entity_index => l_entity_index
544 ,p_table_name => p_interface_table_name
545 ,p_entity_code => G_ENTITY_CODE
546 ,p_addto_fnd_stack => G_ADD_ERRORS_TO_FND_STACK
547 );
548 l_err_token_table.DELETE();
549 END IF;
550
551 IF BITAND(error_rec.PROCESS_STATUS,G_PS_VAL_RANGE_VIOLATION) <> 0 THEN
552 l_err_token_table(1).TOKEN_NAME := 'ATTR_NAME';
553 l_err_token_table(1).TOKEN_VALUE := l_attr_metadata_obj.attr_disp_name;
554 l_err_token_table(2).TOKEN_NAME := 'AG_NAME';
555 l_err_token_table(2).TOKEN_VALUE := l_attr_grp_disp_name;
556 l_err_msg_name := 'EGO_VAL_OUT_OF_RANGE';
557 l_err_token_table(3).TOKEN_NAME := 'MINVALUE';
558 l_err_token_table(3).TOKEN_VALUE := l_attr_metadata_obj.MINIMUM_VALUE;
559 l_err_token_table(4).TOKEN_NAME := 'MAXVALUE';
560 l_err_token_table(4).TOKEN_VALUE := l_attr_metadata_obj.MAXIMUM_VALUE;
561
562 ERROR_HANDLER.Add_Error_Message
563 (p_message_name => l_err_msg_name
564 ,p_application_id => 'EGO'--Bug 7507091 Orig value: G_APPLICATION_CONTEXT
565 ,p_token_tbl => l_err_token_table
566 ,p_message_type => FND_API.G_RET_STS_ERROR
567 ,p_row_identifier => error_rec.TRANSACTION_ID
568 ,p_entity_id => G_ENTITY_ID
569 ,p_entity_index => l_entity_index
570 ,p_table_name => p_interface_table_name
571 ,p_entity_code => G_ENTITY_CODE
572 ,p_addto_fnd_stack => G_ADD_ERRORS_TO_FND_STACK
573 );
574 l_err_token_table.DELETE();
575 END IF;
576
577 IF BITAND(error_rec.PROCESS_STATUS,G_PS_INVALID_NUMBER_DATA) <> 0 THEN
578 l_err_msg_name := 'EGO_EF_DATA_TYPE_INCORRECT';
579 l_err_token_table(1).TOKEN_NAME := 'ATTR_NAME';
580 l_err_token_table(1).TOKEN_VALUE := l_attr_metadata_obj.attr_disp_name;
581 l_err_token_table(2).TOKEN_NAME := 'AG_NAME';
582 l_err_token_table(2).TOKEN_VALUE := l_attr_grp_disp_name;
583 l_err_token_table(3).TOKEN_NAME := 'DATA_TYPE';
584 l_err_token_table(3).TOKEN_VALUE := l_attr_metadata_obj.data_type_meaning;
585 l_err_token_table(4).TOKEN_NAME := 'VALUE';
586 l_err_token_table(4).TOKEN_VALUE := NVL(error_rec.ATTR_DISP_VALUE,error_rec.attr_value_num);
587 ERROR_HANDLER.Add_Error_Message
588 (p_message_name => l_err_msg_name
589 ,p_application_id => 'EGO'--Bug 7507091 Orig value: G_APPLICATION_CONTEXT
590 ,p_token_tbl => l_err_token_table
591 ,p_message_type => FND_API.G_RET_STS_ERROR
592 ,p_row_identifier => error_rec.TRANSACTION_ID
593 ,p_entity_id => G_ENTITY_ID
594 ,p_entity_index => l_entity_index
595 ,p_table_name => p_interface_table_name
596 ,p_entity_code => G_ENTITY_CODE
597 ,p_addto_fnd_stack => G_ADD_ERRORS_TO_FND_STACK
598 );
599 l_err_token_table.DELETE();
600 END IF;
601
602 IF BITAND(error_rec.PROCESS_STATUS,G_PS_INVALID_DATE_DATA) <> 0 THEN
603 l_err_msg_name := 'EGO_EF_DATA_TYPE_INCORRECT';
604 l_err_token_table(1).TOKEN_NAME := 'ATTR_NAME';
605 l_err_token_table(1).TOKEN_VALUE := l_attr_metadata_obj.attr_disp_name;
606 l_err_token_table(2).TOKEN_NAME := 'AG_NAME';
607 l_err_token_table(2).TOKEN_VALUE := l_attr_grp_disp_name;
608 l_err_token_table(3).TOKEN_NAME := 'DATA_TYPE';
609 l_err_token_table(3).TOKEN_VALUE := l_attr_metadata_obj.data_type_meaning;
610 l_err_token_table(4).TOKEN_NAME := 'VALUE';
611 l_err_token_table(4).TOKEN_VALUE := NVL(error_rec.ATTR_DISP_VALUE,error_rec.attr_value_date);
612 ERROR_HANDLER.Add_Error_Message
613 (p_message_name => l_err_msg_name
614 ,p_application_id => 'EGO'--Bug 7507091 Orig value: G_APPLICATION_CONTEXT
615 ,p_token_tbl => l_err_token_table
616 ,p_message_type => FND_API.G_RET_STS_ERROR
617 ,p_row_identifier => error_rec.TRANSACTION_ID
618 ,p_entity_id => G_ENTITY_ID
619 ,p_entity_index => l_entity_index
620 ,p_table_name => p_interface_table_name
621 ,p_entity_code => G_ENTITY_CODE
622 ,p_addto_fnd_stack => G_ADD_ERRORS_TO_FND_STACK
623 );
624 l_err_token_table.DELETE();
625 END IF;
626
627 IF BITAND(error_rec.PROCESS_STATUS,G_PS_INVALID_DATE_TIME_DATA) <> 0 THEN
628 l_err_msg_name := 'EGO_EF_DATA_TYPE_INCORRECT';
629 l_err_token_table(1).TOKEN_NAME := 'ATTR_NAME';
630 l_err_token_table(1).TOKEN_VALUE := l_attr_metadata_obj.attr_disp_name;
631 l_err_token_table(2).TOKEN_NAME := 'AG_NAME';
632 l_err_token_table(2).TOKEN_VALUE := l_attr_grp_disp_name;
633 l_err_token_table(3).TOKEN_NAME := 'DATA_TYPE';
634 l_err_token_table(3).TOKEN_VALUE := l_attr_metadata_obj.data_type_meaning;
635 l_err_token_table(4).TOKEN_NAME := 'VALUE';
636 l_err_token_table(4).TOKEN_VALUE := NVL(error_rec.ATTR_DISP_VALUE,error_rec.attr_value_date);
637 ERROR_HANDLER.Add_Error_Message
638 (p_message_name => l_err_msg_name
639 ,p_application_id => 'EGO'--Bug 7507091 Orig value: G_APPLICATION_CONTEXT
640 ,p_token_tbl => l_err_token_table
641 ,p_message_type => FND_API.G_RET_STS_ERROR
642 ,p_row_identifier => error_rec.TRANSACTION_ID
643 ,p_entity_id => G_ENTITY_ID
644 ,p_entity_index => l_entity_index
645 ,p_table_name => p_interface_table_name
646 ,p_entity_code => G_ENTITY_CODE
647 ,p_addto_fnd_stack => G_ADD_ERRORS_TO_FND_STACK
648 );
649 l_err_token_table.DELETE();
650 END IF;
651
652 IF BITAND(error_rec.PROCESS_STATUS,G_PS_MAX_LENGTH_VIOLATION) <> 0 THEN
653 l_err_msg_name := 'EGO_EF_MAX_SIZE_VIOLATED';
654 l_err_token_table(1).TOKEN_NAME := 'VALUE';
655 IF (l_attr_metadata_obj.data_type_code = EGO_EXT_FWK_PUB.G_NUMBER_DATA_TYPE) THEN
656 l_err_token_table(1).TOKEN_VALUE := NVL(error_rec.ATTR_DISP_VALUE,error_rec.attr_value_num);
657 ELSIF (l_attr_metadata_obj.data_type_code = EGO_EXT_FWK_PUB.G_DATE_DATA_TYPE
658 OR
659 l_attr_metadata_obj.data_type_code = EGO_EXT_FWK_PUB.G_DATE_TIME_DATA_TYPE
660 ) THEN
661 l_err_token_table(1).TOKEN_VALUE := NVL(error_rec.ATTR_DISP_VALUE,error_rec.attr_value_date);
662 ELSE
663 l_err_token_table(1).TOKEN_VALUE := NVL(error_rec.ATTR_DISP_VALUE,error_rec.attr_value_str);
664 END IF;
665
666 l_err_token_table(2).TOKEN_NAME := 'ATTR_NAME';
667 l_err_token_table(2).TOKEN_VALUE := l_attr_metadata_obj.attr_disp_name;
668 l_err_token_table(3).TOKEN_NAME := 'AG_NAME';
669 l_err_token_table(3).TOKEN_VALUE := l_attr_grp_disp_name;
670 ERROR_HANDLER.Add_Error_Message
671 (p_message_name => l_err_msg_name
672 ,p_application_id => 'EGO'--Bug 7507091 Orig value: G_APPLICATION_CONTEXT
673 ,p_token_tbl => l_err_token_table
674 ,p_message_type => FND_API.G_RET_STS_ERROR
675 ,p_row_identifier => error_rec.TRANSACTION_ID
676 ,p_entity_id => G_ENTITY_ID
677 ,p_entity_index => l_entity_index
678 ,p_table_name => p_interface_table_name
679 ,p_entity_code => G_ENTITY_CODE
680 ,p_addto_fnd_stack => G_ADD_ERRORS_TO_FND_STACK
681 );
682 l_err_token_table.DELETE();
683 END IF;
684
685 IF BITAND(error_rec.PROCESS_STATUS,G_PS_BAD_TTYPE_UPDATE) <> 0 THEN
686 l_err_msg_name := 'EGO_EF_ROW_NOT_FOUND';
687 l_err_token_table(1).TOKEN_NAME := 'AG_NAME';
688 l_err_token_table(1).TOKEN_VALUE := l_attr_grp_disp_name;
689 ERROR_HANDLER.Add_Error_Message
690 (p_message_name => l_err_msg_name
691 ,p_application_id => 'EGO'--Bug 7507091 Orig value: G_APPLICATION_CONTEXT
692 ,p_token_tbl => l_err_token_table
693 ,p_message_type => FND_API.G_RET_STS_ERROR
694 ,p_row_identifier => error_rec.TRANSACTION_ID
695 ,p_entity_id => G_ENTITY_ID
696 ,p_entity_index => l_entity_index
697 ,p_table_name => p_interface_table_name
698 ,p_entity_code => G_ENTITY_CODE
699 ,p_addto_fnd_stack => G_ADD_ERRORS_TO_FND_STACK
700 );
701 l_err_token_table.DELETE();
702 END IF;
703
704 IF BITAND(error_rec.PROCESS_STATUS,G_PS_BAD_TTYPE_CREATE) <> 0 THEN
705 l_err_token_table(1).TOKEN_NAME := 'AG_NAME';
706 l_err_token_table(1).TOKEN_VALUE := l_attr_grp_disp_name;
707 IF p_attr_grp_meta_obj.multi_row_code = 'Y' THEN
708 -- multi row error.
709 l_attr_table := p_attr_grp_meta_obj.ATTR_METADATA_TABLE;
710 IF l_attr_table.count > 0 THEN
711 FND_MESSAGE.set_name(application => 'EGO'
712 ,name => 'EGO_COMMA');
713 l_comma_message := FND_MESSAGE.GET;
714 l_msg_token_value := NULL;
715 FOR i IN l_attr_table.FIRST .. l_attr_table.LAST LOOP
716 IF l_attr_table(i).unique_key_flag = 'Y' THEN
717 l_msg_token_value := l_msg_token_value ||l_attr_table(i).attr_disp_name|| l_comma_message;
718 END IF;
719 END LOOP;
720 IF l_msg_token_value IS NULL THEN
721 l_err_msg_name := 'EGO_EF_NO_UK_FOR_CREATE';
722 ELSE
723 l_err_msg_name := 'EGO_EF_MULTIROW_EXISTS';
724 l_msg_token_value := SUBSTR(l_msg_token_value, 1 ,
725 (INSTR(l_msg_token_value, l_comma_message,-1)-1));
726 l_err_token_table(2).TOKEN_NAME := 'ATTR_NAMES';
727 l_err_token_table(2).TOKEN_VALUE := l_msg_token_value;
728 END IF;
729 END IF;
730 ELSE
731 -- single row error.
732 l_err_msg_name := 'EGO_EF_ROW_ALREADY_EXISTS';
733 END IF;
734 ERROR_HANDLER.Add_Error_Message
735 (p_message_name => l_err_msg_name
736 ,p_application_id => 'EGO'--Bug 7507091 Orig value: G_APPLICATION_CONTEXT
737 ,p_token_tbl => l_err_token_table
738 ,p_message_type => FND_API.G_RET_STS_ERROR
739 ,p_row_identifier => error_rec.TRANSACTION_ID
740 ,p_entity_id => G_ENTITY_ID
741 ,p_entity_index => l_entity_index
742 ,p_table_name => p_interface_table_name
743 ,p_entity_code => G_ENTITY_CODE
744 ,p_addto_fnd_stack => G_ADD_ERRORS_TO_FND_STACK
745 );
746 l_err_token_table.DELETE();
747 END IF;
748
749 IF BITAND(error_rec.PROCESS_STATUS,G_PS_BAD_TTYPE_DELETE) <> 0 THEN
750 l_err_msg_name := 'EGO_EF_ROW_NOT_FOUND';
751 l_err_token_table(1).TOKEN_NAME := 'AG_NAME';
752 l_err_token_table(1).TOKEN_VALUE := l_attr_grp_disp_name;
753 ERROR_HANDLER.Add_Error_Message
754 (p_message_name => l_err_msg_name
755 ,p_application_id => 'EGO'--Bug 7507091 Orig value: G_APPLICATION_CONTEXT
756 ,p_token_tbl => l_err_token_table
757 ,p_message_type => FND_API.G_RET_STS_ERROR
758 ,p_row_identifier => error_rec.TRANSACTION_ID
759 ,p_entity_id => G_ENTITY_ID
760 ,p_entity_index => l_entity_index
761 ,p_table_name => p_interface_table_name
762 ,p_entity_code => G_ENTITY_CODE
763 ,p_addto_fnd_stack => G_ADD_ERRORS_TO_FND_STACK
764 );
765 l_err_token_table.DELETE();
766 END IF;
767
768 IF BITAND(error_rec.PROCESS_STATUS,G_PS_REQUIRED_ATTRIBUTE) <> 0 THEN
769 l_err_msg_name := 'EGO_EF_NO_VAL_FOR_REQ_ATTR';
770 l_err_token_table(1).TOKEN_NAME := 'ATTR_NAME';
771 l_err_token_table(1).TOKEN_VALUE := l_attr_metadata_obj.attr_disp_name;
772 l_err_token_table(2).TOKEN_NAME := 'AG_NAME';
773 l_err_token_table(2).TOKEN_VALUE := l_attr_grp_disp_name;
774 ERROR_HANDLER.Add_Error_Message
775 (p_message_name => l_err_msg_name
776 ,p_application_id => 'EGO'--Bug 7507091 Orig value: G_APPLICATION_CONTEXT
777 ,p_token_tbl => l_err_token_table
778 ,p_message_type => FND_API.G_RET_STS_ERROR
779 ,p_row_identifier => error_rec.TRANSACTION_ID
780 ,p_entity_id => G_ENTITY_ID
781 ,p_entity_index => l_entity_index
782 ,p_table_name => p_interface_table_name
783 ,p_entity_code => G_ENTITY_CODE
784 ,p_addto_fnd_stack => G_ADD_ERRORS_TO_FND_STACK
785 );
786 l_err_token_table.DELETE();
787 END IF;
788
789 IF BITAND(error_rec.PROCESS_STATUS,G_PS_AG_NOT_ASSOCIATED) <> 0 THEN
790 l_err_msg_name := 'EGO_EF_AG_NOT_ASSOCIATED';
791 l_err_token_table(1).TOKEN_NAME := 'AG_NAME';
792 l_err_token_table(1).TOKEN_VALUE := l_attr_grp_disp_name;
793 l_err_token_table(2).TOKEN_NAME := 'CLASS_MEANING';
794 BEGIN
795 SELECT EGO_EXT_FWK_PUB.Get_Class_Meaning(p_object_name, error_rec.class_code_value)
796 INTO l_err_token_table(2).TOKEN_VALUE
797 FROM DUAL;
798 EXCEPTION
799 WHEN OTHERS THEN
800 l_err_token_table(2).TOKEN_VALUE := error_rec.class_code_value;
801 END;
802 ERROR_HANDLER.Add_Error_Message
803 (p_message_name => l_err_msg_name
804 ,p_application_id => 'EGO'--Bug 7507091 Orig value: G_APPLICATION_CONTEXT
805 ,p_token_tbl => l_err_token_table
806 ,p_message_type => FND_API.G_RET_STS_ERROR
807 ,p_row_identifier => error_rec.TRANSACTION_ID
808 ,p_entity_id => G_ENTITY_ID
809 ,p_entity_index => l_entity_index
810 ,p_table_name => p_interface_table_name
811 ,p_entity_code => G_ENTITY_CODE
812 ,p_addto_fnd_stack => G_ADD_ERRORS_TO_FND_STACK
813 );
814 l_err_token_table.DELETE();
815 END IF;
816
817 IF BITAND(error_rec.PROCESS_STATUS, G_PS_IDENTICAL_ROWS) <> 0 THEN
818
819 /*
820 EGO_USER_ATTRS_DATA_PVT.Get_Err_Info_For_UK_Violation
821 (p_attr_group_metadata_obj IN -- EGO_ATTR_GROUP_METADATA_OBJ
822 ,p_attr_name_value_pairs IN -- EGO_USER_ATTR_DATA_TABLE
823 ,p_is_err_in_production_table => true -- boolean
824 ,x_unique_key_err_msg => l_err_msg_name
825 ,x_token_table => l_err_token_table
826 );
827 EGO_USER_ATTRS_DATA_PVT.Get_Err_Info_For_UK_Not_Resp
828 (p_attr_group_metadata_obj IN EGO_ATTR_GROUP_METADATA_OBJ
829 ,p_is_err_in_production_table IN BOOLEAN
830 ,x_unique_key_err_msg OUT NOCOPY VARCHAR2
831 ,x_token_table OUT NOCOPY ERROR_HANDLER.Token_Tbl_Type
832 );
833 */
834
835 l_err_msg_name := 'EGO_EF_IDENTICAL_ROWS_ERR';
836 l_err_token_table(1).TOKEN_NAME := 'AG_NAME';
837 l_err_token_table(1).TOKEN_VALUE := l_attr_grp_disp_name;
838 ERROR_HANDLER.Add_Error_Message
839 (p_message_name => l_err_msg_name
840 ,p_application_id => 'EGO'--Bug 7507091 Orig value: G_APPLICATION_CONTEXT
841 ,p_token_tbl => l_err_token_table
842 ,p_message_type => FND_API.G_RET_STS_ERROR
843 ,p_row_identifier => error_rec.TRANSACTION_ID
844 ,p_entity_id => G_ENTITY_ID
845 ,p_entity_index => l_entity_index
846 ,p_table_name => p_interface_table_name
847 ,p_entity_code => G_ENTITY_CODE
848 ,p_addto_fnd_stack => G_ADD_ERRORS_TO_FND_STACK
849 );
850 l_err_token_table.DELETE();
851 END IF;
852
853 IF BITAND(error_rec.PROCESS_STATUS,G_PS_BAD_PK_VAL) <> 0 THEN
854 IF p_pk5_column_name IS NOT NULL THEN
855 l_err_msg_name := 'EGO_EF_NO_PK_VALUES_5';
856 l_err_token_table(1).TOKEN_NAME := 'PK1_COL_NAME';
857 l_err_token_table(1).TOKEN_VALUE := p_pk1_column_name;
858 l_err_token_table(2).TOKEN_NAME := 'PK2_COL_NAME';
859 l_err_token_table(2).TOKEN_VALUE := p_pk2_column_name;
860 l_err_token_table(3).TOKEN_NAME := 'PK3_COL_NAME';
861 l_err_token_table(3).TOKEN_VALUE := p_pk3_column_name;
862 l_err_token_table(4).TOKEN_NAME := 'PK4_COL_NAME';
863 l_err_token_table(4).TOKEN_VALUE := p_pk4_column_name;
864 l_err_token_table(5).TOKEN_NAME := 'PK5_COL_NAME';
865 l_err_token_table(5).TOKEN_VALUE := p_pk5_column_name;
866 l_err_token_table(6).TOKEN_NAME := 'OBJ_NAME';
867 l_err_token_table(6).TOKEN_VALUE := p_object_name;
868 ELSIF p_pk4_column_name IS NOT NULL THEN
869 l_err_msg_name := 'EGO_EF_NO_PK_VALUES_4';
870 l_err_token_table(1).TOKEN_NAME := 'PK1_COL_NAME';
871 l_err_token_table(1).TOKEN_VALUE := p_pk1_column_name;
872 l_err_token_table(2).TOKEN_NAME := 'PK2_COL_NAME';
873 l_err_token_table(2).TOKEN_VALUE := p_pk2_column_name;
874 l_err_token_table(3).TOKEN_NAME := 'PK3_COL_NAME';
875 l_err_token_table(3).TOKEN_VALUE := p_pk3_column_name;
876 l_err_token_table(4).TOKEN_NAME := 'PK4_COL_NAME';
877 l_err_token_table(4).TOKEN_VALUE := p_pk4_column_name;
878 l_err_token_table(5).TOKEN_NAME := 'OBJ_NAME';
879 l_err_token_table(5).TOKEN_VALUE := p_object_name;
880 ELSIF p_pk3_column_name IS NOT NULL THEN
881 l_err_msg_name := 'EGO_EF_NO_PK_VALUES_3';
882 l_err_token_table(1).TOKEN_NAME := 'PK1_COL_NAME';
883 l_err_token_table(1).TOKEN_VALUE := p_pk1_column_name;
884 l_err_token_table(2).TOKEN_NAME := 'PK2_COL_NAME';
885 l_err_token_table(2).TOKEN_VALUE := p_pk2_column_name;
886 l_err_token_table(3).TOKEN_NAME := 'PK3_COL_NAME';
887 l_err_token_table(3).TOKEN_VALUE := p_pk3_column_name;
888 l_err_token_table(4).TOKEN_NAME := 'OBJ_NAME';
889 l_err_token_table(4).TOKEN_VALUE := p_object_name;
890 ELSIF p_pk2_column_name IS NOT NULL THEN
891 l_err_msg_name := 'EGO_EF_NO_PK_VALUES_2';
892 l_err_token_table(1).TOKEN_NAME := 'PK1_COL_NAME';
893 l_err_token_table(1).TOKEN_VALUE := p_pk1_column_name;
894 l_err_token_table(2).TOKEN_NAME := 'PK2_COL_NAME';
895 l_err_token_table(2).TOKEN_VALUE := p_pk2_column_name;
896 l_err_token_table(3).TOKEN_NAME := 'OBJ_NAME';
897 l_err_token_table(3).TOKEN_VALUE := p_object_name;
898 ELSIF p_pk1_column_name IS NOT NULL THEN
899 l_err_msg_name := 'EGO_EF_NO_PK_VALUES_1';
900 l_err_token_table(1).TOKEN_NAME := 'PK1_COL_NAME';
901 l_err_token_table(1).TOKEN_VALUE := p_pk1_column_name;
902 l_err_token_table(2).TOKEN_NAME := 'OBJ_NAME';
903 l_err_token_table(2).TOKEN_VALUE := p_object_name;
904 END IF;
905 ERROR_HANDLER.Add_Error_Message
906 (p_message_name => l_err_msg_name
907 ,p_application_id => 'EGO'--Bug 7507091 Orig value: G_APPLICATION_CONTEXT
908 ,p_token_tbl => l_err_token_table
909 ,p_message_type => FND_API.G_RET_STS_ERROR
910 ,p_row_identifier => error_rec.TRANSACTION_ID
911 ,p_entity_id => G_ENTITY_ID
912 ,p_entity_index => l_entity_index
913 ,p_table_name => p_interface_table_name
914 ,p_entity_code => G_ENTITY_CODE
915 ,p_addto_fnd_stack => G_ADD_ERRORS_TO_FND_STACK
916 );
917 l_err_token_table.DELETE();
918 END IF;
919
920 IF BITAND(error_rec.PROCESS_STATUS,G_PS_DATA_IN_WRONG_COL) <> 0 THEN
921 IF (l_attr_metadata_obj.data_type_code = EGO_EXT_FWK_PUB.G_NUMBER_DATA_TYPE) THEN
922 l_err_msg_name := 'EGO_EF_NUM_IN_WRONG_COL';
923 ELSIF (l_attr_metadata_obj.data_type_code = EGO_EXT_FWK_PUB.G_DATE_DATA_TYPE
924 OR
925 l_attr_metadata_obj.data_type_code = EGO_EXT_FWK_PUB.G_DATE_TIME_DATA_TYPE
926 ) THEN
927 l_err_msg_name := 'EGO_EF_DATE_IN_WRONG_COL';
928 ELSE
929 l_err_msg_name := 'EGO_EF_CHAR_IN_WRONG_COL';
930 END IF;
931 l_err_token_table(1).TOKEN_NAME := 'ATTR_NAME';
932 l_err_token_table(1).TOKEN_VALUE := l_attr_metadata_obj.attr_disp_name;
933 l_err_token_table(2).TOKEN_NAME := 'AG_NAME';
934 l_err_token_table(2).TOKEN_VALUE := l_attr_grp_disp_name;
935 ERROR_HANDLER.Add_Error_Message
936 (p_message_name => l_err_msg_name
937 ,p_application_id => 'EGO'--Bug 7507091 Orig value: G_APPLICATION_CONTEXT
938 ,p_token_tbl => l_err_token_table
939 ,p_message_type => FND_API.G_RET_STS_ERROR
940 ,p_row_identifier => error_rec.TRANSACTION_ID
941 ,p_entity_id => G_ENTITY_ID
942 ,p_entity_index => l_entity_index
943 ,p_table_name => p_interface_table_name
944 ,p_entity_code => G_ENTITY_CODE
945 ,p_addto_fnd_stack => G_ADD_ERRORS_TO_FND_STACK
946 );
947 l_err_token_table.DELETE();
948 END IF;
949
950 IF BITAND(error_rec.PROCESS_STATUS,G_PS_VALUE_NOT_IN_TVS) <> 0 THEN
951 -- this condition is not required
952 -- IF (l_attr_metadata_obj.validation_code = EGO_EXT_FWK_PUB.G_INDEPENDENT_VALIDATION_CODE
953 -- OR
954 -- l_attr_metadata_obj.validation_code = EGO_EXT_FWK_PUB.G_TABLE_VALIDATION_CODE
955 -- ) THEN
956 l_err_msg_name := 'EGO_EF_INDEPENDENT_VS_VIOLATED';
957 l_err_token_table(1).TOKEN_NAME := 'VALUE';
958 IF (l_attr_metadata_obj.data_type_code = EGO_EXT_FWK_PUB.G_NUMBER_DATA_TYPE) THEN
959 l_err_token_table(1).TOKEN_VALUE := NVL(error_rec.ATTR_DISP_VALUE,error_rec.attr_value_num);
960 ELSIF (l_attr_metadata_obj.data_type_code = EGO_EXT_FWK_PUB.G_DATE_DATA_TYPE
961 OR
962 l_attr_metadata_obj.data_type_code = EGO_EXT_FWK_PUB.G_DATE_TIME_DATA_TYPE
963 ) THEN
964 l_err_token_table(1).TOKEN_VALUE := NVL(error_rec.ATTR_DISP_VALUE,error_rec.attr_value_date);
965 ELSE
966 l_err_token_table(1).TOKEN_VALUE := NVL(error_rec.ATTR_DISP_VALUE,error_rec.attr_value_str);
967 END IF;
968 l_err_token_table(2).TOKEN_NAME := 'ATTR_NAME';
969 l_err_token_table(2).TOKEN_VALUE := l_attr_metadata_obj.attr_disp_name;
970 l_err_token_table(3).TOKEN_NAME := 'AG_NAME';
971 l_err_token_table(3).TOKEN_VALUE := l_attr_grp_disp_name;
972 ERROR_HANDLER.Add_Error_Message
973 (p_message_name => l_err_msg_name
974 ,p_application_id => 'EGO'--Bug 7507091 Orig value: G_APPLICATION_CONTEXT
975 ,p_token_tbl => l_err_token_table
976 ,p_message_type => FND_API.G_RET_STS_ERROR
977 ,p_row_identifier => error_rec.TRANSACTION_ID
978 ,p_entity_id => G_ENTITY_ID
979 ,p_entity_index => l_entity_index
980 ,p_table_name => p_interface_table_name
981 ,p_entity_code => G_ENTITY_CODE
982 ,p_addto_fnd_stack => G_ADD_ERRORS_TO_FND_STACK
983 );
984 l_err_token_table.DELETE();
985 -- END IF;
986 END IF;
987
988 IF BITAND(error_rec.PROCESS_STATUS,G_PS_BAD_ATTRS_IN_TVS_WHERE) <> 0 THEN
989 l_err_msg_name := 'EGO_EF_VS_INVALID_BIND';
990 l_err_token_table(1).TOKEN_NAME := 'ATTR_NAME';
991 l_err_token_table(1).TOKEN_VALUE := l_attr_metadata_obj.attr_disp_name;
992 l_err_token_table(2).TOKEN_NAME := 'AG_NAME';
993 l_err_token_table(2).TOKEN_VALUE := l_attr_grp_disp_name;
994 ERROR_HANDLER.Add_Error_Message
995 (p_message_name => l_err_msg_name
996 ,p_application_id => 'EGO'--Bug 7507091 Orig value: G_APPLICATION_CONTEXT
997 ,p_token_tbl => l_err_token_table
998 ,p_message_type => FND_API.G_RET_STS_ERROR
999 ,p_row_identifier => error_rec.TRANSACTION_ID
1000 ,p_entity_id => G_ENTITY_ID
1001 ,p_entity_index => l_entity_index
1002 ,p_table_name => p_interface_table_name
1003 ,p_entity_code => G_ENTITY_CODE
1004 ,p_addto_fnd_stack => G_ADD_ERRORS_TO_FND_STACK
1005 );
1006 l_err_token_table.DELETE();
1007 END IF;
1008
1009 IF BITAND(error_rec.PROCESS_STATUS,G_PS_BAD_ATTR_GRP_ID) <> 0 THEN
1010 l_err_msg_name := 'EGO_EF_BAD_AG_ID';
1011 l_err_token_table(1).TOKEN_NAME := 'AG_ID';
1012 l_err_token_table(1).TOKEN_VALUE := error_rec.ATTR_GROUP_ID;
1013 l_err_token_table(2).TOKEN_NAME := 'AG_NAME';
1014 l_err_token_table(2).TOKEN_VALUE := l_attr_grp_disp_name;
1015 ERROR_HANDLER.Add_Error_Message
1016 (p_message_name => l_err_msg_name
1017 ,p_application_id => 'EGO'--Bug 7507091 Orig value: G_APPLICATION_CONTEXT
1018 ,p_token_tbl => l_err_token_table
1019 ,p_message_type => FND_API.G_RET_STS_ERROR
1020 ,p_row_identifier => error_rec.TRANSACTION_ID
1021 ,p_entity_id => G_ENTITY_ID
1022 ,p_entity_index => l_entity_index
1023 ,p_table_name => p_interface_table_name
1024 ,p_entity_code => G_ENTITY_CODE
1025 ,p_addto_fnd_stack => G_ADD_ERRORS_TO_FND_STACK
1026 );
1027 l_err_token_table.DELETE();
1028 END IF;
1029
1030 IF BITAND(error_rec.PROCESS_STATUS,G_PS_TL_COL_IS_A_UK) <> 0 THEN
1031 l_err_msg_name := 'EGO_EF_TL_COL_IS_A_UK';
1032 l_err_token_table(1).TOKEN_NAME := 'AG_NAME';
1033 l_err_token_table(1).TOKEN_VALUE := l_attr_grp_disp_name;
1034 ERROR_HANDLER.Add_Error_Message
1035 (p_message_name => l_err_msg_name
1036 ,p_application_id => 'EGO'--Bug 7507091 Orig value: G_APPLICATION_CONTEXT
1037 ,p_token_tbl => l_err_token_table
1038 ,p_message_type => FND_API.G_RET_STS_ERROR
1039 ,p_row_identifier => error_rec.TRANSACTION_ID
1040 ,p_entity_id => G_ENTITY_ID
1041 ,p_entity_index => l_entity_index
1042 ,p_table_name => p_interface_table_name
1043 ,p_entity_code => G_ENTITY_CODE
1044 ,p_addto_fnd_stack => G_ADD_ERRORS_TO_FND_STACK
1045 );
1046 l_err_token_table.DELETE();
1047 END IF;
1048
1049 IF BITAND(error_rec.PROCESS_STATUS,G_PS_PRE_EVENT_FAILED) <> 0 THEN
1050 l_err_msg_name := 'EGO_EF_PRE_EVENT_FAILED';
1051 l_err_token_table(1).TOKEN_NAME := 'AG_NAME';
1052 l_err_token_table(1).TOKEN_VALUE := l_attr_grp_disp_name;
1053 ERROR_HANDLER.Add_Error_Message
1054 (p_message_name => l_err_msg_name
1055 ,p_application_id => 'EGO'--Bug 7507091 Orig value: G_APPLICATION_CONTEXT
1056 ,p_token_tbl => l_err_token_table
1057 ,p_message_type => FND_API.G_RET_STS_ERROR
1058 ,p_row_identifier => error_rec.TRANSACTION_ID
1059 ,p_entity_id => G_ENTITY_ID
1060 ,p_entity_index => l_entity_index
1061 ,p_table_name => p_interface_table_name
1062 ,p_entity_code => G_ENTITY_CODE
1063 ,p_addto_fnd_stack => G_ADD_ERRORS_TO_FND_STACK
1064 );
1065 l_err_token_table.DELETE();
1066 END IF;
1067
1068 --BugFix : 4171705
1069 IF BITAND(error_rec.PROCESS_STATUS,G_PS_BAD_TVS_SETUP) <> 0 THEN
1070 l_err_msg_name := 'EGO_EF_BAD_TVS_SETUP';
1071 l_err_token_table(1).TOKEN_NAME := 'AG_NAME';
1072 l_err_token_table(1).TOKEN_VALUE := l_attr_grp_disp_name;
1073 l_err_token_table(2).TOKEN_NAME := 'ATTR_NAME';
1074 l_err_token_table(2).TOKEN_VALUE := l_attr_metadata_obj.attr_disp_name;
1075 ERROR_HANDLER.Add_Error_Message
1076 (p_message_name => l_err_msg_name
1077 ,p_application_id => 'EGO'--Bug 7507091 Orig value: G_APPLICATION_CONTEXT
1078 ,p_token_tbl => l_err_token_table
1079 ,p_message_type => FND_API.G_RET_STS_ERROR
1080 ,p_row_identifier => error_rec.TRANSACTION_ID
1081 ,p_entity_id => G_ENTITY_ID
1082 ,p_entity_index => l_entity_index
1083 ,p_table_name => p_interface_table_name
1084 ,p_entity_code => G_ENTITY_CODE
1085 ,p_addto_fnd_stack => G_ADD_ERRORS_TO_FND_STACK
1086 );
1087 l_err_token_table.DELETE();
1088 END IF;
1089
1090 IF BITAND(error_rec.PROCESS_STATUS,G_PS_INVALID_UOM) <> 0 THEN
1091 l_err_msg_name := 'EGO_EF_BAD_UOM';
1092 l_err_token_table(1).TOKEN_NAME := 'AG_NAME';
1093 l_err_token_table(1).TOKEN_VALUE := l_attr_grp_disp_name;
1094 l_err_token_table(2).TOKEN_NAME := 'ATTR_NAME';
1095 l_err_token_table(2).TOKEN_VALUE := l_attr_metadata_obj.attr_disp_name;
1096 ERROR_HANDLER.Add_Error_Message
1097 (p_message_name => l_err_msg_name
1098 ,p_application_id => 'EGO'--Bug 7507091 Orig value: G_APPLICATION_CONTEXT
1099 ,p_token_tbl => l_err_token_table
1100 ,p_message_type => FND_API.G_RET_STS_ERROR
1101 ,p_row_identifier => error_rec.TRANSACTION_ID
1102 ,p_entity_id => G_ENTITY_ID
1103 ,p_entity_index => l_entity_index
1104 ,p_table_name => p_interface_table_name
1105 ,p_entity_code => G_ENTITY_CODE
1106 ,p_addto_fnd_stack => G_ADD_ERRORS_TO_FND_STACK
1107 );
1108 l_err_token_table.DELETE();
1109 END IF;
1110
1111 END LOOP;
1112 -- Bug : 4099546
1113 CLOSE c_err_cursor;
1114
1115 END log_errors_now;
1116
1117 /* Bug 10151142 : Start
1118 -- Private procedure - Prepare_Dynamic_Sqls_Clob:
1119 -- This procedure builds dynamic sql for dependent table value sets.
1120 -- the query built may have size more that 32k in which case execute immediate doesn't work,
1121 -- so we will put this query in an array of type dbms_sql.varchar2a so that we can use DBMS_SQL api.
1122 */
1123 PROCEDURE Prepare_Dynamic_Sqls_Clob (
1124 p_data_set_id IN NUMBER,
1125 p_data_type_code IN VARCHAR2,
1126 p_interface_table_name IN VARCHAR2,
1127 p_tvs_val_check_sel_clob IN CLOB,
1128 p_tvs_select_clob IN CLOB,
1129 p_attr_name IN VARCHAR2,
1130 p_attr_group_name IN VARCHAR2,
1131 x_return_status OUT NOCOPY VARCHAR2,
1132 x_msg_data OUT NOCOPY VARCHAR2,
1133 x_sql_1_ub OUT NOCOPY NUMBER,
1134 x_sql_ub OUT NOCOPY NUMBER,
1135 x_dynamic_sql_1_v_type OUT NOCOPY dbms_sql.varchar2a,
1136 x_dynamic_sql_v_type OUT NOCOPY dbms_sql.varchar2a
1137 ) IS
1138
1139 l_api_name VARCHAR2(30) := 'Prepare_Dynamic_Sqls_Clob';
1140 l_buffer varchar2(8191):= '';
1141 l_amount number := 8191;
1142 l_offset number :=1;
1143 l_clob_length number;
1144
1145 l_dynamic_sql_1_clob_part1 CLOB;
1146 l_dynamic_sql_clob_part1 CLOB;
1147 l_dynamic_sql_clob_part2 CLOB;
1148
1149 l_dynamic_sql_v_type dbms_sql.varchar2a;
1150 l_dynamic_sql_1_v_type dbms_sql.varchar2a;
1151
1152 l_clob_length_1 NUMBER;
1153 l_index_1 NUMBER;
1154 l_index NUMBER;
1155 l_count NUMBER ;
1156
1157 l_data_type_clause VARCHAR2(100);
1158 l_dynamic_sql VARCHAR2(32767);
1159 l_dummy NUMBER;
1160 l_message VARCHAR2(3800);
1161
1162 BEGIN
1163 code_debug(l_api_name|| ' Starting ');
1164
1165 IF (p_data_type_code = EGO_EXT_FWK_PUB.G_NUMBER_DATA_TYPE) THEN
1166 l_data_type_clause := 'ATTR_VALUE_NUM';
1167 ELSIF (p_data_type_code = EGO_EXT_FWK_PUB.G_DATE_DATA_TYPE OR p_data_type_code = EGO_EXT_FWK_PUB.G_DATE_TIME_DATA_TYPE) THEN
1168 l_data_type_clause := 'ATTR_VALUE_DATE';
1169 ELSE
1170 l_data_type_clause := 'ATTR_VALUE_STR';
1171 END IF;
1172
1173 code_debug(' Preparing l_dynamic_sql_1_v_type ' ,3);
1174 l_dynamic_sql_1_v_type(1) := 'UPDATE '||p_interface_table_name||' UAI1 SET PROCESS_STATUS = PROCESS_STATUS + DECODE((';
1175
1176 l_dynamic_sql_1_clob_part1 := p_tvs_val_check_sel_clob;
1177 l_clob_length_1 := dbms_lob.getlength(l_dynamic_sql_1_clob_part1);
1178
1179 code_debug(' Length of l_dynamic_sql_1_clob_part1 :'||l_clob_length_1, 3);
1180
1181 /* Read 8191 characters from clob sequentially and append them to the VARCHAR2 table
1182 using DBMS_LOB.READ function */
1183 l_offset := 1;
1184 l_count := 0;
1185 l_index_1 := 2;
1186 l_amount := 8191;
1187 l_dynamic_sql_1_v_type(l_index_1) := '';
1188
1189 code_debug(' Processing l_dynamic_sql_1_clob_part1 ' ,3);
1190 while l_offset <= l_clob_length_1 LOOP
1191 l_buffer := '';
1192 l_count := l_count + 1;
1193
1194 dbms_lob.read(l_dynamic_sql_1_clob_part1, l_amount, l_offset, l_buffer);
1195
1196 IF (l_count = 4) THEN
1197 l_count := 0;
1198 l_index_1 := l_index_1 + 1 ;
1199 l_dynamic_sql_1_v_type(l_index_1) := '';
1200 END IF;
1201
1202 l_dynamic_sql_1_v_type(l_index_1) := l_dynamic_sql_1_v_type(l_index_1)||l_buffer;
1203 l_offset := l_offset + l_amount;
1204 end loop;
1205
1206 l_index_1 := l_index_1 + 1;
1207 l_dynamic_sql_1_v_type(l_index_1) := ') ,0,'||G_PS_VALUE_NOT_IN_TVS||',0) WHERE DATA_SET_ID = :data_set_id '||'
1208 AND (PROCESS_STATUS = '||G_PS_IN_PROCESS||' OR PROCESS_STATUS > '||G_PS_BAD_ATTR_OR_AG_METADATA||' )
1209 AND BITAND(PROCESS_STATUS, '||G_PS_NO_PRIVILEGES||') = 0
1210 AND ATTR_INT_NAME = '''||p_attr_name||'''
1211 AND ATTR_GROUP_INT_NAME = '''||p_attr_group_name||'''
1212 AND '||l_data_type_clause||' IS NOT NULL AND TRANSACTION_TYPE <> '''||EGO_USER_ATTRS_DATA_PVT.G_DELETE_MODE||''''; -- bug 13774267
1213 /*
1214 No need to check attribute value against value set in case of Delete. The check is skipped only for ATTR_VALUE*.
1215 The validation need to be done if the user passes ATTR_DISP_VALUE. hence didn't add the condition for l_dynamic_sql_v_type
1216 */
1217
1218 x_sql_1_ub := l_index_1;
1219 x_dynamic_sql_1_v_type := l_dynamic_sql_1_v_type;
1220
1221 code_debug(' Preparing l_dynamic_sql_1_v_type is done ' ,3);
1222
1223 code_debug(' Preparing l_dynamic_sql_v_type :' ,3);
1224 l_dynamic_sql_v_type(1) := 'UPDATE '||p_interface_table_name||' UAI1 SET '||l_data_type_clause||' = NVL(';
1225
1226 l_dynamic_sql_clob_part1 := p_tvs_select_clob;
1227 l_clob_length := dbms_lob.getlength(l_dynamic_sql_clob_part1);
1228
1229 code_debug(' Length of l_dynamic_sql_clob_part1 :'||l_clob_length, 3);
1230
1231 /* Read 8191 characters from clob sequentially and append them to the VARCHAR2 variable
1232 using DBMS_LOB.READ function */
1233 l_offset := 1;
1234 l_count := 0;
1235 l_index := 2;
1236 l_amount := 8191;
1237 l_dynamic_sql_v_type(l_index) := '';
1238
1239 code_debug(' Processing l_dynamic_sql_clob_part1 :' ,3);
1240 while l_offset <= l_clob_length LOOP
1241 l_buffer := '';
1242 l_count := l_count + 1;
1243
1244 dbms_lob.read(l_dynamic_sql_clob_part1, l_amount, l_offset, l_buffer);
1245
1246 IF (l_count = 4) THEN
1247 l_count := 0;
1248 l_index := l_index + 1 ;
1249 l_dynamic_sql_v_type(l_index) := '';
1250 END IF;
1251
1252 l_dynamic_sql_v_type(l_index) := l_dynamic_sql_v_type(l_index)||l_buffer;
1253 l_offset := l_offset + l_amount;
1254 end loop;
1255
1256 l_index := l_index + 1;
1257 l_dynamic_sql_v_type(l_index) := ' ,NULL), PROCESS_STATUS = PROCESS_STATUS + DECODE((';
1258
1259 l_dynamic_sql_clob_part2 := p_tvs_select_clob;
1260 l_clob_length := dbms_lob.getlength(l_dynamic_sql_clob_part2);
1261
1262 code_debug(' Length of l_dynamic_sql_clob_part2 :'||l_clob_length, 3);
1263
1264 /* Read 8191 characters from clob sequentially and append them to the VARCHAR2 variable
1265 using DBMS_LOB.READ function */
1266 l_offset := 1;
1267 l_count := 0;
1268 l_index := l_index + 1;
1269 l_amount := 8191;
1270 l_dynamic_sql_v_type(l_index) := '';
1271
1272 code_debug(' Processing l_dynamic_sql_clob_part2 :' ,3);
1273 while l_offset <= l_clob_length LOOP
1274 l_buffer := '';
1275 l_count := l_count + 1;
1276
1277 dbms_lob.read(l_dynamic_sql_clob_part2, l_amount, l_offset, l_buffer);
1278
1279 IF (l_count = 4) THEN
1280 l_count := 0;
1281 l_index := l_index + 1 ;
1282 l_dynamic_sql_v_type(l_index) := '';
1283 END IF;
1284
1285 l_dynamic_sql_v_type(l_index) := l_dynamic_sql_v_type(l_index)||l_buffer;
1286 l_offset := l_offset + l_amount;
1287 end loop;
1288
1289 l_index := l_index+1;
1290 l_dynamic_sql_v_type(l_index) := ' ),NULL,'||G_PS_VALUE_NOT_IN_TVS||',0) WHERE DATA_SET_ID = :data_set_id '||'
1291 AND (PROCESS_STATUS = '||G_PS_IN_PROCESS||' OR PROCESS_STATUS > '||G_PS_BAD_ATTR_OR_AG_METADATA||' )
1292 AND BITAND(PROCESS_STATUS, '||G_PS_NO_PRIVILEGES||') = 0
1293 AND ATTR_INT_NAME = '''||p_attr_name||'''
1294 AND ATTR_GROUP_INT_NAME = '''||p_attr_group_name||'''
1295 AND ATTR_DISP_VALUE IS NOT NULL ';
1296
1297 x_sql_ub := l_index;
1298 x_dynamic_sql_v_type := l_dynamic_sql_v_type;
1299
1300 code_debug(' Preparing l_dynamic_sql_v_type is done ' ,3);
1301
1302 x_return_status := FND_API.G_RET_STS_SUCCESS;
1303 code_debug(l_api_name||' Done ',0);
1304 EXCEPTION
1305 WHEN OTHERS THEN
1306 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1307 x_msg_data := 'Executing - '||G_PKG_NAME||'.'||l_api_name||' - '||SQLERRM;
1308 code_debug(' When others block - '||x_msg_data ,3);
1309
1310 l_dynamic_sql :=
1311 'SELECT TRANSACTION_ID
1312 FROM '||p_interface_table_name||' UAI1
1313 WHERE UAI1.DATA_SET_ID = :data_set_id
1314 AND ROWNUM = 1';
1315 EXECUTE IMMEDIATE l_dynamic_sql
1316 INTO l_dummy
1317 USING p_data_set_id;
1318
1319 ERROR_HANDLER.Add_Error_Message(
1320 p_message_text => x_msg_data
1321 ,p_row_identifier => l_dummy
1322 ,p_application_id => 'EGO'
1323 ,p_message_type => FND_API.G_RET_STS_ERROR
1324 ,p_entity_id => G_ENTITY_ID
1325 ,p_table_name => p_interface_table_name
1326 ,p_entity_code => G_ENTITY_CODE
1327 );
1328 RAISE;
1329 END Prepare_Dynamic_Sqls_Clob;
1330 /* Bug 10151142 : End */
1331
1332
1333 ----------------------------------------------------------------------
1334
1335
1336 ----------------
1337 -- Procedures --
1338 ----------------
1339
1340 ----------------------------------------------------------------------
1341
1342 PROCEDURE Bulk_Load_User_Attrs_Data (
1343 p_api_version IN NUMBER
1344 ,p_application_id IN NUMBER
1345 ,p_attr_group_type IN VARCHAR2
1346 ,p_object_name IN VARCHAR2
1347 ,p_hz_party_id IN VARCHAR2
1348 ,p_interface_table_name IN VARCHAR2
1349 ,p_data_set_id IN NUMBER
1350 ,p_entity_id IN NUMBER DEFAULT NULL
1351 ,p_entity_index IN NUMBER DEFAULT NULL
1352 ,p_entity_code IN VARCHAR2 DEFAULT NULL
1353 ,p_debug_level IN NUMBER DEFAULT 0
1354 ,p_init_error_handler IN VARCHAR2 DEFAULT FND_API.G_TRUE
1355 ,p_init_fnd_msg_list IN VARCHAR2 DEFAULT FND_API.G_FALSE
1356 ,p_log_errors IN VARCHAR2 DEFAULT FND_API.G_FALSE
1357 ,p_add_errors_to_fnd_stack IN VARCHAR2 DEFAULT FND_API.G_FALSE
1358 ,p_commit IN VARCHAR2 DEFAULT FND_API.G_FALSE
1359 ,p_default_dl_view_priv_list IN EGO_COL_NAME_VALUE_PAIR_ARRAY DEFAULT NULL
1360 ,p_default_dl_edit_priv_list IN EGO_COL_NAME_VALUE_PAIR_ARRAY DEFAULT NULL
1361 ,p_default_view_privilege IN VARCHAR2 DEFAULT NULL
1362 ,p_default_edit_privilege IN VARCHAR2 DEFAULT NULL
1363 ,p_privilege_predicate_api_name IN VARCHAR2 DEFAULT NULL
1364 ,p_related_class_codes_query IN VARCHAR2 DEFAULT '-100'
1365 ,p_validate IN BOOLEAN DEFAULT TRUE
1366 ,p_do_dml IN BOOLEAN DEFAULT TRUE
1367 ,p_do_req_def_valiadtion IN BOOLEAN DEFAULT TRUE
1368 ,x_return_status OUT NOCOPY VARCHAR2
1369 ,x_errorcode OUT NOCOPY NUMBER
1370 ,x_msg_count OUT NOCOPY NUMBER
1371 ,x_msg_data OUT NOCOPY VARCHAR2
1372 ) IS
1373
1374 l_api_name CONSTANT VARCHAR2(30) := 'Bulk_Load_User_Attrs_Data';
1375
1376 --we don't use l_api_version yet, but eventually we might:
1377 --if we change required parameters, version goes FROM n.x to (n+1).x
1378 --if we change optional parameters, version goes FROM x.n to x.(n+1)
1379 l_api_version CONSTANT NUMBER := 1.0;
1380
1381 l_view_priv_to_check FND_FORM_FUNCTIONS.FUNCTION_NAME%TYPE; --4105308
1382 l_edit_priv_to_check FND_FORM_FUNCTIONS.FUNCTION_NAME%TYPE; --4105308
1383
1384 l_class_blk_tbl_declare VARCHAR2(1000);
1385 l_class_blk_tbl_list VARCHAR2(100);
1386 l_class_blk_tbl_list_2 VARCHAR2(100);
1387
1388 l_dl_blk_tbl_declare VARCHAR2(1000);
1389 l_dl_blk_tbl_list VARCHAR2(100);
1390 l_dl_blk_tbl_list_2 VARCHAR2(100);
1391
1392 l_pk_blk_tbl_declare VARCHAR2(1000);
1393 l_pk_blk_tbl_list VARCHAR2(100);
1394 l_pk_blk_tbl_list_2 VARCHAR2(100);
1395 l_dynamic_sql VARCHAR2(32767);
1396 l_dynamic_query VARCHAR2(32767);
1397 l_dynamic_sql_clob CLOB; /** added to bug 14145164 */
1398 cur_l_dynamic_sql_clob INTEGER;/** added to bug 14145164 */
1399 l_dummy_ret_val INTEGER;/** added to bug 14145164 */
1400 l_pre_event_failed_sql VARCHAR2(5000);
1401 l_defaltening_sql VARCHAR2(20000);
1402 l_defaltening_sql_create VARCHAR2(32767);
1403 l_dynamic_sql_delete_post VARCHAR2(32767); /*Uncommeneted code for bug 8485287*/
1404 l_deflatening_sql_where VARCHAR2(10000);
1405 l_dynamic_group_by VARCHAR2(2000);
1406 l_dynamic_sql_1 VARCHAR2(32767);
1407 --Bug 13923293 /* We are going to use a new variable to avoid size issue,
1408 -- However for future perspective we will CLOB so that such issue does not occurs.*/
1409 l_dynamic_sql_2 VARCHAR2(32767);
1410 l_ext_table_select VARCHAR2(32767);
1411 l_dummy NUMBER;
1412 l_priv_predicate VARCHAR2(32767);
1413
1414 -- 6070367 this must be more than double fnd_form_functions.function_name
1415 l_prev_ag_id_priv VARCHAR2(1000);
1416 l_do_dml_for_this_ag BOOLEAN;
1417
1418 l_no_of_err_recs NUMBER;
1419
1420 l_priv_func_cursor_id NUMBER;
1421 l_ivs_num_cursor_id NUMBER;
1422 l_ivs_date_cursor_id NUMBER;
1423 l_ivs_date_time_cursor_id NUMBER;
1424 l_ivs_char_cursor_id NUMBER;
1425 l_nvs_num_cursor_id NUMBER;
1426 l_nvs_date_cursor_id NUMBER;
1427 l_nvs_datetime_cursor_id NUMBER;
1428 l_nvs_char_cursor_id NUMBER;
1429 l_req_num_cursor_id NUMBER;
1430 l_req_char_cursor_id NUMBER;
1431 l_req_date_cursor_id NUMBER;
1432 l_default_num_cursor_id NUMBER;
1433 l_default_date_cursor_id NUMBER;
1434 l_default_char_cursor_id NUMBER;
1435 l_max_size_char_cursor NUMBER;
1436 l_max_size_num_cursor NUMBER;
1437 l_colcheck_num_cursor_id NUMBER;
1438 l_colcheck_char_cursor_id NUMBER;
1439 l_colcheck_date_cursor_id NUMBER;
1440 l_bad_tvs_sql_cursor_id NUMBER;
1441 l_sr_tvs_num_cursor_id1 NUMBER;
1442 l_sr_tvs_num_cursor_id2 NUMBER;
1443 l_sr_tvs_date_cursor_id1 NUMBER;
1444 l_sr_tvs_date_cursor_id2 NUMBER;
1445 l_sr_tvs_str_cursor_id1 NUMBER;
1446 l_sr_tvs_str_cursor_id2 NUMBER;
1447 l_tvs_char_cursor_id NUMBER;
1448 l_tvs_num_cursor_id NUMBER;
1449 l_tvs_date_cursor_id NUMBER;
1450 l_bad_bindattrs_tvs_cursor_id NUMBER;
1451 l_pre_event_failed_cursor_id NUMBER;
1452
1453 wierd_constant VARCHAR2(100);
1454 wierd_constant_2 VARCHAR2(100);
1455
1456 l_attr_group_metadata_obj EGO_ATTR_GROUP_METADATA_OBJ;
1457 l_attr_metadata_table EGO_ATTR_METADATA_TABLE;
1458 l_attr_metadata_table_sr EGO_ATTR_METADATA_TABLE;
1459 l_attr_metadata_table_1 EGO_ATTR_METADATA_TABLE;
1460 l_add_all_to_cm VARCHAR2(1); --added by Maychen for ER 9489112
1461 l_item_rev_dl_id NUMBER := 43106;
1462
1463 /*
1464 DYLAN: Gaurav, why do we have three Attr metadata table variables? Surely we only need one...?
1465 */
1466
1467 l_intf_tbl_select VARCHAR2(32767);
1468 l_intf_column_name VARCHAR2(50);
1469
1470 l_ext_b_table_name VARCHAR2(30);
1471 l_ext_tl_table_name VARCHAR2(30);
1472 l_ext_vl_name VARCHAR2(30);
1473
1474 l_num_data_level_columns NUMBER := 0;
1475 l_class_code_column_name VARCHAR2(30);
1476 l_class_code_column_type VARCHAR2(30);
1477
1478 l_data_level_1 VARCHAR2(30);
1479 l_data_level_column_1 VARCHAR2(150);
1480 l_dl_col_data_type_1 VARCHAR2(150);
1481 l_data_level_1_disp_name VARCHAR2(80);
1482
1483 l_data_level_2 VARCHAR2(30);
1484 l_data_level_column_2 VARCHAR2(150);
1485 l_dl_col_data_type_2 VARCHAR2(150);
1486 l_data_level_2_disp_name VARCHAR2(80);
1487
1488 l_data_level_3 VARCHAR2(30);
1489 l_data_level_column_3 VARCHAR2(150);
1490 l_dl_col_data_type_3 VARCHAR2(150);
1491 l_data_level_3_disp_name VARCHAR2(80);
1492
1493 l_pk1_column_name VARCHAR2(30);
1494 l_pk2_column_name VARCHAR2(30);
1495 l_pk3_column_name VARCHAR2(30);
1496 l_pk4_column_name VARCHAR2(30);
1497 l_pk5_column_name VARCHAR2(30);
1498 l_pk1_column_type VARCHAR2(8);
1499 l_pk2_column_type VARCHAR2(8);
1500 l_pk3_column_type VARCHAR2(8);
1501 l_pk4_column_type VARCHAR2(8);
1502 l_pk5_column_type VARCHAR2(8);
1503 l_concat_pk_cols_sel VARCHAR2(2000);
1504 l_concat_pk_cols_UAI2 VARCHAR2(32767);
1505 /*
1506 DYLAN: perhaps at some point we can consolidate and re-use
1507 variables wherever possible to reduce the memory footprint
1508 of this procedure. But for now, let's leave it.
1509 */
1510
1511 --
1512 -- Bug 12765998. Making the size of variables to MAX.
1513 -- For TL cols with decoded statements, the size
1514 -- of SELECT and WHERE clause can easily surpass
1515 -- existing values.
1516 -- sreharih. Mon Sep 26 12:58:32 PDT 2011
1517 --
1518 l_rtcq_alias_cc_pk_dl_list VARCHAR2(32767);
1519 l_rtcq_alias_b_cols_list VARCHAR2(32767);
1520 l_rtcq_alias_b_cols_list_1 VARCHAR2(32767);
1521 l_final_b_col_list VARCHAR2(32767);
1522 l_final_tl_col_list VARCHAR2(32767);
1523 l_rtcq_alias_tl_cols_list VARCHAR2(32767);
1524 l_rtcq_alias_tl_cols_list_1 VARCHAR2(32767);
1525 l_no_alias_cc_pk_dl_list VARCHAR2(32767);
1526 l_no_alias_b_values_list VARCHAR2(32767);
1527 l_no_alias_b_cols_list VARCHAR2(32767);
1528 l_no_alias_tl_cols_list VARCHAR2(32767);
1529 l_no_alias_tl_cols_sel_list VARCHAR2(32767);
1530 l_row_to_column_query_base VARCHAR2(32767);
1531 l_row_to_column_query_ag_part VARCHAR2(32767);
1532 l_row_to_column_attr_decode VARCHAR2(32767);
1533 l_rtcq_to_ext_where_base VARCHAR2(32767);
1534 l_rtcq_to_ext_where_uks VARCHAR2(32767);
1535 l_rtcq_to_ext_whr_uks_idnt_chk VARCHAR2(32767);
1536 l_row_to_column_query VARCHAR2(32767);
1537 l_rn_index_for_ag NUMBER;
1538 l_uom_column VARCHAR2(30);
1539 l_uom_column1 VARCHAR2(30);
1540 l_db_col_tbl_declare_ext_id VARCHAR2(400);
1541 l_db_col_tbl_declare_attrs VARCHAR2(8000);
1542 l_db_col_tbl_collect_ext_id VARCHAR2(20);
1543 l_db_col_tbl_collect_b_attrs VARCHAR2(1400);
1544 l_db_col_tbl_collect_tl_attrs VARCHAR2(800);
1545 l_db_col_tbl_set_b_attrs VARCHAR2(10000);
1546 l_db_col_tbl_set_tl_attrs VARCHAR2(5000);
1547 l_db_col_tbl_where_ext_id VARCHAR2(80);
1548
1549 l_tvs_table_name VARCHAR2(240);
1550 l_tvs_val_col VARCHAR2(240);
1551 l_tvs_id_col VARCHAR2(240);
1552 l_tvs_mean_col VARCHAR2(240);
1553 l_tvs_where_clause VARCHAR2(32767);
1554 l_tvs_select VARCHAR2(32767);
1555 l_tvs_num_val_check_select VARCHAR2(32767);
1556 l_tvs_date_val_check_select VARCHAR2(32767);
1557 l_tvs_str_val_check_select VARCHAR2(32767);
1558
1559 l_attrname_start_index NUMBER;
1560 l_attrname_end_index NUMBER;
1561 l_tvs_col VARCHAR2(240);
1562 l_bind_attr_name VARCHAR2(30);
1563 l_ext_attr_col_name VARCHAR2(1000);
1564 l_bind_attr_data_type VARCHAR2(30);
1565 --bug 9952371 increasing the size of the two local varchar2 variable from 5000 to 32767
1566 l_value_from_ext_table VARCHAR2(32767);
1567 l_value_from_intftbl VARCHAR2(32767);
1568 l_tvs_metadata_fetched BOOLEAN;
1569
1570 l_attr_exists_in_intf VARCHAR2(10);
1571 l_null_date_time_value VARCHAR2(100);
1572 l_null_date_value VARCHAR2(100);
1573 l_ag_id_col_exists BOOLEAN;
1574
1575 l_dist_attr_in_data_set_rec DIST_ATTR_IN_DATA_SET_REC;
1576 l_dist_attrs_in_data_set_table DIST_ATTR_IN_DATA_SET_TABLE;
1577 --bug9846845 added one CLOB parameter
1578 l_tvs_where_clause_clob CLOB;
1579 l_extra_column_str VARCHAR2(200);
1580 l_extra_column_val VARCHAR2(200); /*bug 14672950*/
1581
1582 TYPE DYNAMIC_CUR IS REF CURSOR;
1583 l_dynamic_cursor DYNAMIC_CUR;
1584 l_dynamic_dist_ag_cursor DYNAMIC_CUR;
1585 l_mr_dynamic_cursor DYNAMIC_CUR;
1586
1587 TYPE ATTR_METADATA_RECORD IS RECORD
1588 (
1589 ATTR_ID NUMBER,
1590 ATTR_GROUP_ID NUMBER,
1591 ATTR_GROUP_INT_NAME VARCHAR2(30),
1592 MULTI_ROW_CODE VARCHAR2(1),
1593 ATTR_INT_NAME VARCHAR2(30),
1594 DATA_TYPE VARCHAR2(30),
1595 UNIQUE_KEY_FLAG VARCHAR2(1),
1596 DEFAULT_VALUE VARCHAR2(2000) ,
1597 MAXIMUM_SIZE NUMBER(4), --Bug12907500
1598 REQUIRED_FLAG VARCHAR2(1),
1599 VALUE_SET_ID NUMBER(10),
1600 VALIDATION_TYPE VARCHAR2(1),
1601 MINIMUM_VALUE VARCHAR2(150),
1602 MAXIMUM_VALUE VARCHAR2(150),
1603 UOM_CODE VARCHAR2(3),
1604 UOM_CLASS VARCHAR2(10),
1605 DATA_LEVEL_ID NUMBER,
1606 VIEW_PRIVILEGE FND_FORM_FUNCTIONS.FUNCTION_NAME%TYPE, --4105308
1607 EDIT_PRIVILEGE FND_FORM_FUNCTIONS.FUNCTION_NAME%TYPE --4105308
1608 );
1609
1610 -- Fix for bug#9336604
1611 -- l_attr_metadata_rec ATTR_METADATA_RECORD;
1612 TYPE l_cursor IS TABLE OF ATTR_METADATA_RECORD;
1613 l_attr_metadata_rec l_cursor;
1614
1615 TYPE AG_RECORD IS RECORD
1616 (
1617 EXTENSION_ID NUMBER,
1618 ATTR_GROUP_INT_NAME VARCHAR2(30),
1619 TRANSACTION_TYPE VARCHAR2(10),
1620 ROW_IDENTIFIER NUMBER,
1621 PK1 VARCHAR2(30),
1622 PK2 VARCHAR2(30),
1623 PK3 VARCHAR2(30),
1624 PK4 VARCHAR2(30),
1625 PK5 VARCHAR2(30),
1626 DATA_LEVEL_ID NUMBER,
1627 DL1 VARCHAR2(30),
1628 DL2 VARCHAR2(30),
1629 DL3 VARCHAR2(30),
1630 DL4 VARCHAR2(30),
1631 DL5 VARCHAR2(30),
1632 ATTR_NAME_VALUES VARCHAR2(30000)
1633 );
1634
1635 l_ag_deflatened_row AG_RECORD;
1636
1637 TYPE AG_RECORD_TABLE IS TABLE OF AG_RECORD;
1638 l_ag_deflatened_row_table AG_RECORD_TABLE;
1639
1640 l_attr_name VARCHAR2(30);
1641 l_old_value VARCHAR2(1000);
1642 l_new_value VARCHAR2(1000);
1643 l_attr_name_val_str VARCHAR2(30000);
1644 l_event_name VARCHAR2(240);
1645 l_is_pre_event_enabled_flag VARCHAR2(1);
1646 l_pre_event_name VARCHAR2(240);
1647 /*code added for bug 8485287*/
1648 l_new_post_event_enabled_flag VARCHAR2(1);
1649 l_new_post_event_name VARCHAR2(240);
1650 /*end code added for bug 8485287*/
1651 attr_name_val_pair EGO_ATTR_TABLE;
1652 l_event_key VARCHAR2(300);
1653 l_group_by_pre VARCHAR2(200);
1654 l_successful_rowcount NUMBER;
1655
1656 /*
1657 DYLAN: There's no reason to have the following record type: just declare a variable:
1658 e.g., l_attr_group_int_name VARCHAR2(30);
1659 */
1660 TYPE DIST_MR_ATTR_GR_REC IS RECORD
1661 (
1662 ATTR_GROUP_INT_NAME VARCHAR2(30)
1663 );
1664
1665 l_attr_group_intf_rec DIST_MR_ATTR_GR_REC;
1666
1667 l_err_col_static_sql VARCHAR2(32767);
1668 l_err_where_static_sql VARCHAR2(32767);
1669
1670 G_NO_ROWS_IN_INTF_TABLE EXCEPTION;
1671
1672 l_attr_base_uom_code VARCHAR2(10);
1673
1674 l_is_post_event_enabled_flag VARCHAR2(1);
1675 l_is_second_post_event_flag VARCHAR2(1);
1676
1677 -- Bug 10097738 : Start
1678 l_column_exists VARCHAR2(1);
1679 l_unique_value_col VARCHAR2(20);
1680 l_unique_value VARCHAR2(30);
1681 -- Bug 10097738 : End
1682
1683 l_data_level_col_exists BOOLEAN;
1684 l_object_id NUMBER;
1685 l_list_of_dl_for_ag_type EGO_DATA_LEVEL_METADATA_TABLE;
1686
1687 l_dl_pk_col1_sql VARCHAR2(32000);
1688 l_dl_pk_col2_sql VARCHAR2(32000);
1689 l_dl_pk_col3_sql VARCHAR2(32000);
1690 l_dl_pk_col4_sql VARCHAR2(32000);
1691 l_dl_pk_col5_sql VARCHAR2(32000);
1692 l_dl_pk1_col_name VARCHAR2(30);
1693 l_dl_pk2_col_name VARCHAR2(30);
1694 l_dl_pk3_col_name VARCHAR2(30);
1695 l_dl_pk4_col_name VARCHAR2(30);
1696 l_dl_pk5_col_name VARCHAR2(30);
1697
1698 l_priv_attr_id NUMBER := -1;
1699 l_correct_date_time_sql_uai VARCHAR2(240); -- abedajna
1700 l_correct_date_time_sql_extvl VARCHAR2(240); -- abedajna
1701 l_concat_pk_cols VARCHAR2(32767); -- Bug 9851212
1702
1703 --bug 12397223 begin
1704 CURSOR enabled_data_level_cols(p_attr_group_id IN NUMBER)
1705 IS
1706 SELECT DATA_LEVEL_ID
1707 ,DATA_LEVEL_NAME
1708 ,USER_DATA_LEVEL_NAME
1709 ,PK1_COLUMN_NAME
1710 ,PK2_COLUMN_NAME
1711 ,PK3_COLUMN_NAME
1712 ,PK4_COLUMN_NAME
1713 ,PK5_COLUMN_NAME
1714 ,PK1_COLUMN_TYPE
1715 ,PK2_COLUMN_TYPE
1716 ,PK3_COLUMN_TYPE
1717 ,PK4_COLUMN_TYPE
1718 ,PK5_COLUMN_TYPE
1719 FROM EGO_DATA_LEVEL_VL
1720 WHERE DATA_LEVEL_ID IN ( SELECT DATA_LEVEL_ID
1721 FROM EGO_ATTR_GROUP_DL
1722 WHERE ATTR_GROUP_ID = p_attr_group_id);
1723
1724 l_data_level_cols_rec enabled_data_level_cols%ROWTYPE;
1725 --bug 12397223 end
1726
1727 l_ext_table_select1 VARCHAR2(32767); -- Bug 13414358
1728
1729 -- Bug 10151142 : Start
1730 l_buffer VARCHAR2(8191) := '';
1731 l_tvs_where_clause_buffer VARCHAR2(32767);
1732 l_return_status VARCHAR2(1);
1733 l_msg_data VARCHAR2(4000);
1734
1735 l_amount NUMBER;
1736 l_offset NUMBER := 1;
1737 l_dynamic_sql_1_cursor_id NUMBER;
1738 l_dynamic_sql_cursor_id NUMBER;
1739 l_clob_length NUMBER;
1740 l_tvs_string_length NUMBER;
1741 l_tvs_colb_length_diff NUMBER;
1742 l_sql_1_ub NUMBER;
1743 l_sql_ub NUMBER;
1744
1745 l_tvs_where_clause_clob1 CLOB;
1746 l_tvs_where_clause_clob2 CLOB;
1747 l_tvs_select_clob CLOB;
1748 l_tvs_num_val_check_sel_clob CLOB;
1749 l_tvs_date_val_check_sel_clob CLOB;
1750 l_tvs_str_val_check_sel_clob CLOB;
1751
1752 l_dynamic_sql_v_type dbms_sql.varchar2a;
1753 l_dynamic_sql_1_v_type dbms_sql.varchar2a;
1754 -- Bug 10151142 : End
1755
1756 BEGIN
1757 code_debug(l_api_name|| 'Starting ');
1758
1759 -- Standard start of API savepoint
1760 IF FND_API.To_Boolean(p_commit) THEN
1761 SAVEPOINT Bulk_Load_User_Attrs_Data_PVT;
1762 END IF;
1763
1764 -- Check for call compatibility
1765 IF NOT FND_API.Compatible_API_Call(l_api_version, p_api_version,
1766 l_api_name, G_PKG_NAME)
1767 THEN
1768 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1769 END IF;
1770
1771 G_CURRENT_USER_ID := FND_GLOBAL.User_Id;
1772 G_CURRENT_LOGIN_ID := FND_GLOBAL.Login_Id;
1773 G_USER_NAME := FND_GLOBAL.USER_NAME;
1774
1775 --ER 9489112, to get data_level_id for item revision level
1776 --and get 'Add All Imported Items to Change Order' option when change order option enabled
1777 l_add_all_to_cm := EGO_IMPORT_PVT.getAddAllToChangeFlag(p_batch_id => p_data_set_id);
1778
1779 SELECT DATA_LEVEL_ID
1780 INTO l_item_rev_dl_id
1781 FROM EGO_DATA_LEVEL_B
1782 WHERE ATTR_GROUP_TYPE = 'EGO_ITEMMGMT_GROUP'
1783 AND APPLICATION_ID = 431
1784 AND DATA_LEVEL_NAME = 'ITEM_REVISION_LEVEL';
1785 ---------------------------------
1786 -- Error Handler Initialization --
1787 ---------------------------------
1788 IF (FND_API.To_Boolean(p_add_errors_to_fnd_stack)) THEN
1789 G_ADD_ERRORS_TO_FND_STACK := 'Y';
1790 ELSE
1791 G_ADD_ERRORS_TO_FND_STACK := 'N';
1792 END IF;
1793 BEGIN
1794 SELECT application_short_name
1795 INTO G_APPLICATION_CONTEXT
1796 FROM fnd_application
1797 WHERE application_id = p_application_id;
1798 EXCEPTION
1799 WHEN OTHERS THEN
1800 G_APPLICATION_CONTEXT := p_application_id;
1801 END;
1802 -- Initialize message list even though we don't currently use it
1803 IF FND_API.To_Boolean(p_init_fnd_msg_list) THEN
1804 FND_MSG_PUB.Initialize;
1805 END IF;
1806
1807 G_ENTITY_ID := p_entity_id;
1808 -- entity code will take precedence over entity_id
1809 SELECT NVL(p_entity_code, DECODE(G_ENTITY_ID, NULL, G_APPLICATION_CONTEXT||'_EXTFWK_USER_ATTRS',NULL))
1810 INTO G_ENTITY_CODE
1811 FROM DUAL;
1812
1813 -- Initialize error handler
1814 IF FND_API.To_Boolean(p_init_error_handler) THEN
1815 ERROR_HANDLER.Initialize;
1816 ERROR_HANDLER.Set_Bo_Identifier(EGO_USER_ATTRS_DATA_PVT.G_BO_IDENTIFIER);
1817 IF (p_debug_level > 0 AND ERROR_HANDLER.Get_Debug() = 'N') THEN
1818 EGO_USER_ATTRS_DATA_PVT.Set_Up_Debug_Session(G_ENTITY_ID, G_ENTITY_CODE, p_debug_level);
1819 END IF;
1820 -- test the message initialization.
1821 code_debug('Starting Bulk load concurrent program '||p_data_set_id, 0);
1822 END IF;
1823
1824 -- select cols for
1825 l_err_col_static_sql := ' SELECT process_status, row_identifier, '
1826 ||' attr_group_int_name, attr_int_name, attr_value_str, '
1827 ||' attr_value_num, attr_value_date, attr_disp_value, '
1828 ||' transaction_type, transaction_id, attr_group_id ';
1829 l_err_where_static_sql := ' WHERE data_set_id = :data_set_id ' --||p_data_set_id /*Fix for bug#9678667. Literal to bind*/
1830 ||' AND process_status >= '||G_PS_BAD_ATTR_OR_AG_METADATA
1831 -- Bug 12895265
1832 -- ||' AND (process_status - '||G_PS_OTHER_ATTRS_INVALID ||') > '||G_PS_IN_PROCESS
1833 ||' AND attr_group_int_name = :attr_group_int_name ';
1834
1835 l_no_of_err_recs := ERROR_HANDLER.Get_Message_Count ;
1836
1837 ----------------------------------
1838 -- Fetching the object_id --
1839 ----------------------------------
1840 SELECT OBJECT_ID
1841 INTO l_object_id
1842 FROM FND_OBJECTS
1843 WHERE OBJ_NAME = p_object_name;
1844
1845 -----------------------------------------
1846 -- Fetch the PK column names and data --
1847 -- types for the passed-in object name --
1848 -----------------------------------------
1849 SELECT PK1_COLUMN_NAME, PK1_COLUMN_TYPE,
1850 PK2_COLUMN_NAME, PK2_COLUMN_TYPE,
1851 PK3_COLUMN_NAME, PK3_COLUMN_TYPE,
1852 PK4_COLUMN_NAME, PK4_COLUMN_TYPE,
1853 PK5_COLUMN_NAME, PK5_COLUMN_TYPE
1854 INTO l_pk1_column_name, l_pk1_column_type,
1855 l_pk2_column_name, l_pk2_column_type,
1856 l_pk3_column_name, l_pk3_column_type,
1857 l_pk4_column_name, l_pk4_column_type,
1858 l_pk5_column_name, l_pk5_column_type
1859 FROM FND_OBJECTS
1860 WHERE OBJ_NAME = p_object_name;
1861
1862 --------------------------------------
1863 -- Fetching the class code col name --
1864 --------------------------------------
1865 SELECT CLASSIFICATION_COL_NAME, CLASSIFICATION_COL_TYPE
1866 INTO l_class_code_column_name, l_class_code_column_type
1867 FROM EGO_FND_OBJECTS_EXT
1868 WHERE OBJECT_NAME = p_object_name;
1869
1870 ----------------------------------------------------------
1871 -- Get the B, TL, and VL names for this Attr Group Type --
1872 ----------------------------------------------------------
1873 SELECT FLEX.APPLICATION_TABLE_NAME EXT_TABLE_NAME,
1874 FLEX_EXT.APPLICATION_TL_TABLE_NAME EXT_TL_TABLE_NAME,
1875 FLEX_EXT.APPLICATION_VL_NAME EXT_VL_NAME
1876 INTO l_ext_b_table_name,
1877 l_ext_tl_table_name,
1878 l_ext_vl_name
1879 FROM FND_DESCRIPTIVE_FLEXS FLEX,
1880 EGO_FND_DESC_FLEXS_EXT FLEX_EXT
1881 WHERE FLEX.APPLICATION_ID = FLEX_EXT.APPLICATION_ID(+)
1882 AND FLEX.DESCRIPTIVE_FLEXFIELD_NAME = FLEX_EXT.DESCRIPTIVE_FLEXFIELD_NAME(+)
1883 AND FLEX.APPLICATION_ID = p_application_id
1884 AND FLEX.DESCRIPTIVE_FLEXFIELD_NAME = p_attr_group_type;
1885
1886 -----------------------------------------------------------
1887 -- Some callers don't have TL tables (and hence no VLs); --
1888 -- in such cases we use the B table name instead --
1889 -----------------------------------------------------------
1890 IF (l_ext_vl_name IS NULL) THEN
1891 l_ext_vl_name := l_ext_b_table_name;
1892 END IF;
1893
1894 IF FND_API.TO_BOOLEAN(EGO_USER_ATTRS_COMMON_PVT.has_column_in_table(
1895 p_table_name => p_interface_table_name,
1896 p_column_name => 'DATA_LEVEL_ID')) THEN
1897 -------------------------------------------------------
1898 -- Populating the the data_level_id in case there is --
1899 -- only one enabled data level for it --
1900 -------------------------------------------------------
1901 EXECUTE IMMEDIATE
1902 'UPDATE '||p_interface_table_name||' UAI1 '||
1903 ' SET DATA_LEVEL_ID = (SELECT DATA_LEVEL_ID '||
1904 ' FROM EGO_ATTR_GROUP_DL '||
1905 ' WHERE ATTR_GROUP_ID = UAI1.ATTR_GROUP_ID '||
1906 ' ) '||
1907 ' WHERE UAI1.DATA_SET_ID = :data_set_id '||
1908 ' AND UAI1.PROCESS_STATUS = '||G_PS_IN_PROCESS||' '||
1909 ' AND UAI1.ATTR_GROUP_TYPE = :attr_group_type '||
1910 ' AND (SELECT COUNT(*) FROM EGO_ATTR_GROUP_DL '||
1911 ' WHERE ATTR_GROUP_ID = UAI1.ATTR_GROUP_ID) < 2 '||
1912 ' AND DATA_LEVEL_ID IS NULL '||
1913 ' AND DATA_LEVEL_NAME IS NULL '||
1914 ' AND USER_DATA_LEVEL_NAME IS NULL '
1915 USING p_data_set_id, p_attr_group_type;
1916 ------------------------------------------------------
1917 -- Converting the data level internal name to id --
1918 ------------------------------------------------------
1919 EXECUTE IMMEDIATE
1920 ' UPDATE '||p_interface_table_name||' UAI1 '||
1921 ' SET DATA_LEVEL_ID = (SELECT DATA_LEVEL_ID '||
1922 ' FROM EGO_DATA_LEVEL_VL '||
1923 ' WHERE (DATA_LEVEL_NAME = NVL(UAI1.DATA_LEVEL_NAME, CHR(0)) '||
1924 ' OR USER_DATA_LEVEL_NAME = NVL(UAI1.USER_DATA_LEVEL_NAME, CHR(0)))'||
1925 ' AND APPLICATION_ID = :application_id '||
1926 ' AND ATTR_GROUP_TYPE = :attr_group_type '||
1927 ' ) '||
1928 ' WHERE UAI1.DATA_SET_ID = :data_set_id '||
1929 ' AND UAI1.PROCESS_STATUS = '||G_PS_IN_PROCESS ||
1930 ' AND UAI1.ATTR_GROUP_TYPE = :attr_group_type '||
1931 ' AND DATA_LEVEL_ID IS NULL '||
1932 ' AND NOT( DATA_LEVEL_NAME IS NULL AND USER_DATA_LEVEL_NAME IS NULL) '
1933 USING p_application_id, p_attr_group_type, p_data_set_id, p_attr_group_type;
1934 ----------------------------------------------------------
1935 -- Erroring out the rows wid invalid/null data level id --
1936 ----------------------------------------------------------
1937
1938 EXECUTE IMMEDIATE
1939 'UPDATE '||p_interface_table_name||' UAI1 '||
1940 ' SET PROCESS_STATUS = PROCESS_STATUS +'||G_PS_INVALID_DATA_LEVEL ||
1941 ' WHERE UAI1.DATA_SET_ID = :data_set_id '||
1942 ' AND UAI1.PROCESS_STATUS = '||G_PS_IN_PROCESS||' '||
1943 ' AND UAI1.ATTR_GROUP_TYPE = :attr_group_type '||
1944 ' AND ( DATA_LEVEL_ID IS NULL '||
1945 ' OR NOT EXISTS(SELECT NULL '||
1946 ' FROM EGO_ATTR_GROUP_DL '||
1947 ' WHERE ATTR_GROUP_ID = UAI1.ATTR_GROUP_ID '||
1948 ' AND DATA_LEVEL_ID = UAI1.DATA_LEVEL_ID) )'
1949 USING p_data_set_id, p_attr_group_type;
1950 END IF;
1951
1952 -------------------------------------------------------
1953 -- Checking weather the ext table has data_level_id --
1954 -- column or not. --
1955 -------------------------------------------------------
1956
1957 l_data_level_col_exists := FND_API.TO_BOOLEAN(
1958 EGO_USER_ATTRS_COMMON_PVT.has_column_in_table(
1959 p_table_name => l_ext_b_table_name,
1960 p_column_name => 'DATA_LEVEL_ID'));
1961
1962 l_list_of_dl_for_ag_type := EGO_USER_ATTRS_COMMON_PVT.Get_Data_Levels_For_AGType( p_application_id => p_application_id
1963 ,p_attr_group_type => p_attr_group_type);
1964
1965 ------------------------------------------------------------
1966 -- Get data level information for the given object name --
1967 -- R12C onwards the data level info wud not be stored in --
1968 -- lookups table. Hence we get it from the dl meta data --
1969 -- table fetched. We assume here that there can be only 3 --
1970 -- data levels with only one pk column. This assumption is -
1971 -- as per the support offered prior to R12C --
1972 ------------------------------------------------------------
1973 l_dummy := 0;
1974 FOR i IN l_list_of_dl_for_ag_type.FIRST .. l_list_of_dl_for_ag_type.LAST
1975 LOOP
1976
1977 IF(l_list_of_dl_for_ag_type(i).PK_COLUMN_NAME1 <> 'NONE'
1978 AND l_list_of_dl_for_ag_type(i).PK_COLUMN_NAME1 IS NOT NULL) THEN
1979
1980 l_dummy := l_dummy + 1;
1981
1982 IF (l_dummy = 1) THEN
1983
1984 l_data_level_1 := l_list_of_dl_for_ag_type(i).DATA_LEVEL_NAME;
1985 l_data_level_column_1 := l_list_of_dl_for_ag_type(i).PK_COLUMN_NAME1;
1986 l_dl_col_data_type_1 := l_list_of_dl_for_ag_type(i).PK_COLUMN_TYPE1;
1987 l_data_level_1_disp_name := l_list_of_dl_for_ag_type(i).USER_DATA_LEVEL_NAME;
1988 l_num_data_level_columns := 1;
1989
1990 ELSIF (l_dummy = 2) THEN
1991
1992 l_data_level_2 := l_list_of_dl_for_ag_type(i).DATA_LEVEL_NAME;
1993 l_data_level_column_2 := l_list_of_dl_for_ag_type(i).PK_COLUMN_NAME1;
1994 l_dl_col_data_type_2 := l_list_of_dl_for_ag_type(i).PK_COLUMN_TYPE1;
1995 l_data_level_2_disp_name := l_list_of_dl_for_ag_type(i).USER_DATA_LEVEL_NAME;
1996 l_num_data_level_columns := 2;
1997
1998 ELSIF (l_dummy = 3) THEN
1999 l_data_level_3 := l_list_of_dl_for_ag_type(i).DATA_LEVEL_NAME;
2000 l_data_level_column_3 := l_list_of_dl_for_ag_type(i).PK_COLUMN_NAME1;
2001 l_dl_col_data_type_3 := l_list_of_dl_for_ag_type(i).PK_COLUMN_TYPE1;
2002 l_data_level_3_disp_name := l_list_of_dl_for_ag_type(i).USER_DATA_LEVEL_NAME;
2003 l_num_data_level_columns := 3;
2004
2005 END IF;
2006
2007 END IF;
2008
2009 END LOOP;
2010
2011 -------------------------------------------------------------
2012 -- Find out weather the ATTR_GROUP_ID column exists in the --
2013 -- table where attribute data is to be uploaded or not --
2014 -------------------------------------------------------------
2015
2016 l_ag_id_col_exists := FND_API.TO_BOOLEAN(
2017 EGO_USER_ATTRS_COMMON_PVT.has_column_in_table(
2018 p_table_name => l_ext_b_table_name,
2019 p_column_name => 'ATTR_GROUP_ID'));
2020
2021 l_pk_blk_tbl_declare := '';
2022 l_pk_blk_tbl_list := '';
2023 ---------------------------------------------------------
2024 --Building the concatenated pks for select and where --
2025 ---------------------------------------------------------
2026 IF (l_pk1_column_name IS NOT NULL) THEN
2027 l_concat_pk_cols_sel := l_concat_pk_cols_sel||l_pk1_column_name||',';
2028 l_concat_pk_cols_UAI2 := l_concat_pk_cols_UAI2 || ' AND '||l_pk1_column_name||' = UAI2.'||l_pk1_column_name;
2029 l_pk_blk_tbl_list := l_pk_blk_tbl_list || ' pk_1_tbl ';
2030 l_pk_blk_tbl_list_2 := l_pk_blk_tbl_list_2 || ' pk_1_tbl(i) ';
2031 IF(l_pk1_column_type = 'INTEGER') THEN
2032 l_pk_blk_tbl_declare := l_pk_blk_tbl_declare || ' pk_1_tbl EGO_USER_ATTRS_BULK_PVT.EGO_USER_ATTRS_BULK_NUM_TBL; ';
2033 ELSE
2034 l_pk_blk_tbl_declare := l_pk_blk_tbl_declare || ' pk_1_tbl EGO_USER_ATTRS_BULK_PVT.EGO_USER_ATTRS_BULK_STR_TBL; ';
2035 END IF;
2036 END IF;
2037
2038 IF (l_pk2_column_name IS NOT NULL) THEN
2039 l_concat_pk_cols_sel := l_concat_pk_cols_sel ||l_pk2_column_name||',';
2040 l_concat_pk_cols_UAI2 := l_concat_pk_cols_UAI2 || ' AND '||l_pk2_column_name||' = UAI2.'||l_pk2_column_name;
2041 l_pk_blk_tbl_list := l_pk_blk_tbl_list || ' ,pk_2_tbl ';
2042 l_pk_blk_tbl_list_2 := l_pk_blk_tbl_list_2 || ' ,pk_2_tbl(i) ';
2043 IF(l_pk2_column_type = 'INTEGER') THEN
2044 l_pk_blk_tbl_declare := l_pk_blk_tbl_declare || ' pk_2_tbl EGO_USER_ATTRS_BULK_PVT.EGO_USER_ATTRS_BULK_NUM_TBL; ';
2045 ELSE
2046 l_pk_blk_tbl_declare := l_pk_blk_tbl_declare || ' pk_2_tbl EGO_USER_ATTRS_BULK_PVT.EGO_USER_ATTRS_BULK_STR_TBL; ';
2047 END IF;
2048 END IF;
2049
2050 IF (l_pk3_column_name IS NOT NULL) THEN
2051 l_concat_pk_cols_sel := l_concat_pk_cols_sel ||l_pk3_column_name||',';
2052 l_concat_pk_cols_UAI2 := l_concat_pk_cols_UAI2 || ' AND '||l_pk3_column_name||' = UAI2.'||l_pk3_column_name;
2053 l_pk_blk_tbl_list := l_pk_blk_tbl_list || ' ,pk_3_tbl ';
2054 l_pk_blk_tbl_list_2 := l_pk_blk_tbl_list_2 || ' ,pk_3_tbl(i) ';
2055 IF(l_pk3_column_type = 'INTEGER') THEN
2056 l_pk_blk_tbl_declare := l_pk_blk_tbl_declare || ' pk_3_tbl EGO_USER_ATTRS_BULK_PVT.EGO_USER_ATTRS_BULK_NUM_TBL; ';
2057 ELSE
2058 l_pk_blk_tbl_declare := l_pk_blk_tbl_declare || ' pk_3_tbl EGO_USER_ATTRS_BULK_PVT.EGO_USER_ATTRS_BULK_STR_TBL; ';
2059 END IF;
2060 END IF;
2061
2062 IF (l_pk4_column_name IS NOT NULL) THEN
2063 l_concat_pk_cols_sel := l_concat_pk_cols_sel ||l_pk4_column_name||',';
2064 l_concat_pk_cols_UAI2 := l_concat_pk_cols_UAI2 || ' AND '||l_pk4_column_name||' = UAI2.'||l_pk4_column_name;
2065 l_pk_blk_tbl_list := l_pk_blk_tbl_list || ' ,pk_4_tbl ';
2066 l_pk_blk_tbl_list_2 := l_pk_blk_tbl_list_2 || ' ,pk_4_tbl(i) ';
2067 IF(l_pk4_column_type = 'INTEGER') THEN
2068 l_pk_blk_tbl_declare := l_pk_blk_tbl_declare || ' pk_4_tbl EGO_USER_ATTRS_BULK_PVT.EGO_USER_ATTRS_BULK_NUM_TBL; ';
2069 ELSE
2070 l_pk_blk_tbl_declare := l_pk_blk_tbl_declare || ' pk_4_tbl EGO_USER_ATTRS_BULK_PVT.EGO_USER_ATTRS_BULK_STR_TBL; ';
2071 END IF;
2072 END IF;
2073 IF (l_pk5_column_name IS NOT NULL) THEN
2074 l_concat_pk_cols_sel := l_concat_pk_cols_sel ||l_pk5_column_name||',';
2075 l_concat_pk_cols_UAI2 := l_concat_pk_cols_UAI2 || ' AND '||l_pk5_column_name||' = UAI2.'||l_pk5_column_name;
2076 l_pk_blk_tbl_list := l_pk_blk_tbl_list || ' ,pk_5_tbl ';
2077 l_pk_blk_tbl_list_2 := l_pk_blk_tbl_list_2 || ' ,pk_5_tbl(i) ';
2078 IF(l_pk5_column_type = 'INTEGER') THEN
2079 l_pk_blk_tbl_declare := l_pk_blk_tbl_declare || ' pk_5_tbl EGO_USER_ATTRS_BULK_PVT.EGO_USER_ATTRS_BULK_NUM_TBL; ';
2080 ELSE
2081 l_pk_blk_tbl_declare := l_pk_blk_tbl_declare || ' pk_5_tbl EGO_USER_ATTRS_BULK_PVT.EGO_USER_ATTRS_BULK_STR_TBL; ';
2082 END IF;
2083 END IF;
2084 ---------------------------------------------
2085 -- adding datalevel columns --
2086 ---------------------------------------------
2087 IF(l_data_level_col_exists) THEN
2088
2089 l_concat_pk_cols_sel := l_concat_pk_cols_sel||' DATA_LEVEL_ID , ';
2090 l_concat_pk_cols_UAI2 := l_concat_pk_cols_UAI2 || ' AND NVL(DATA_LEVEL_ID,'||G_NULL_TOKEN_NUM||') '||
2091 ' = NVL(UAI2.DATA_LEVEL_ID,'||G_NULL_TOKEN_NUM||')';
2092
2093 FOR i IN l_list_of_dl_for_ag_type.FIRST .. l_list_of_dl_for_ag_type.LAST
2094 LOOP
2095
2096 IF (l_list_of_dl_for_ag_type(i).PK_COLUMN_NAME1 IS NOT NULL AND l_list_of_dl_for_ag_type(i).PK_COLUMN_NAME1 <> 'NONE'
2097 AND INSTR(l_concat_pk_cols_sel,l_list_of_dl_for_ag_type(i).PK_COLUMN_NAME1) = 0) THEN
2098
2099 IF(l_list_of_dl_for_ag_type(i).PK_COLUMN_TYPE1 = 'NUMBER') THEN
2100 wierd_constant := G_NULL_TOKEN_NUM;
2101 ELSIF (l_list_of_dl_for_ag_type(i).PK_COLUMN_TYPE1 = 'DATE' OR l_list_of_dl_for_ag_type(i).PK_COLUMN_TYPE1 = 'DATETIME') THEN
2102 wierd_constant := G_NULL_TOKEN_DATE;
2103 ELSE
2104 wierd_constant := G_NULL_TOKEN_STR;
2105 END IF;
2106 l_concat_pk_cols_sel := l_concat_pk_cols_sel||l_list_of_dl_for_ag_type(i).PK_COLUMN_NAME1||' , ';
2107
2108 l_concat_pk_cols_UAI2 := l_concat_pk_cols_UAI2 || ' AND NVL('||l_list_of_dl_for_ag_type(i).PK_COLUMN_NAME1||','||wierd_constant||') '||
2109 ' = NVL(UAI2.'||l_list_of_dl_for_ag_type(i).PK_COLUMN_NAME1||','||wierd_constant||')';
2110 END IF;
2111 IF (l_list_of_dl_for_ag_type(i).PK_COLUMN_NAME2 IS NOT NULL AND l_list_of_dl_for_ag_type(i).PK_COLUMN_NAME2 <> 'NONE'
2112 AND INSTR(l_concat_pk_cols_sel,l_list_of_dl_for_ag_type(i).PK_COLUMN_NAME2) = 0) THEN
2113 IF(l_list_of_dl_for_ag_type(i).PK_COLUMN_TYPE2 = 'NUMBER') THEN
2114 wierd_constant := G_NULL_TOKEN_NUM;
2115 ELSIF (l_list_of_dl_for_ag_type(i).PK_COLUMN_TYPE2 = 'DATE' OR l_list_of_dl_for_ag_type(i).PK_COLUMN_TYPE2 = 'DATETIME') THEN
2116 wierd_constant := G_NULL_TOKEN_DATE;
2117 ELSE
2118 wierd_constant := G_NULL_TOKEN_STR;
2119 END IF;
2120 l_concat_pk_cols_sel := l_concat_pk_cols_sel||l_list_of_dl_for_ag_type(i).PK_COLUMN_NAME2||' , ';
2121 l_concat_pk_cols_UAI2 := l_concat_pk_cols_UAI2 || ' AND NVL('||l_list_of_dl_for_ag_type(i).PK_COLUMN_NAME2||','||wierd_constant||') '||
2122 ' = NVL(UAI2.'||l_list_of_dl_for_ag_type(i).PK_COLUMN_NAME2||','||wierd_constant||')';
2123 END IF;
2124 IF (l_list_of_dl_for_ag_type(i).PK_COLUMN_NAME3 IS NOT NULL AND l_list_of_dl_for_ag_type(i).PK_COLUMN_NAME3 <> 'NONE'
2125 AND INSTR(l_concat_pk_cols_sel,l_list_of_dl_for_ag_type(i).PK_COLUMN_NAME3) = 0) THEN
2126 IF(l_list_of_dl_for_ag_type(i).PK_COLUMN_TYPE3 = 'NUMBER') THEN
2127 wierd_constant := G_NULL_TOKEN_NUM;
2128 ELSIF (l_list_of_dl_for_ag_type(i).PK_COLUMN_TYPE3 = 'DATE' OR l_list_of_dl_for_ag_type(i).PK_COLUMN_TYPE3 = 'DATETIME') THEN
2129 wierd_constant := G_NULL_TOKEN_DATE;
2130 ELSE
2131 wierd_constant := G_NULL_TOKEN_STR;
2132 END IF;
2133 l_concat_pk_cols_sel := l_concat_pk_cols_sel||l_list_of_dl_for_ag_type(i).PK_COLUMN_NAME3||' , ';
2134 l_concat_pk_cols_UAI2 := l_concat_pk_cols_UAI2 || ' AND NVL('||l_list_of_dl_for_ag_type(i).PK_COLUMN_NAME3||','||wierd_constant||') '||
2135 ' = NVL(UAI2.'||l_list_of_dl_for_ag_type(i).PK_COLUMN_NAME3||','||wierd_constant||')';
2136 END IF;
2137 IF (l_list_of_dl_for_ag_type(i).PK_COLUMN_NAME4 IS NOT NULL AND l_list_of_dl_for_ag_type(i).PK_COLUMN_NAME4 <> 'NONE'
2138 AND INSTR(l_concat_pk_cols_sel,l_list_of_dl_for_ag_type(i).PK_COLUMN_NAME4) = 0) THEN
2139 IF(l_list_of_dl_for_ag_type(i).PK_COLUMN_TYPE4 = 'NUMBER') THEN
2140 wierd_constant := G_NULL_TOKEN_NUM;
2141 ELSIF (l_list_of_dl_for_ag_type(i).PK_COLUMN_TYPE4 = 'DATE' OR l_list_of_dl_for_ag_type(i).PK_COLUMN_TYPE4 = 'DATETIME') THEN
2142 wierd_constant := G_NULL_TOKEN_DATE;
2143 ELSE
2144 wierd_constant := G_NULL_TOKEN_STR;
2145 END IF;
2146 l_concat_pk_cols_sel := l_concat_pk_cols_sel||l_list_of_dl_for_ag_type(i).PK_COLUMN_NAME4||' , ';
2147 l_concat_pk_cols_UAI2 := l_concat_pk_cols_UAI2 || ' AND NVL('||l_list_of_dl_for_ag_type(i).PK_COLUMN_NAME4||','||wierd_constant||') '||
2148 ' = NVL(UAI2.'||l_list_of_dl_for_ag_type(i).PK_COLUMN_NAME4||','||wierd_constant||')';
2149 END IF;
2150 IF (l_list_of_dl_for_ag_type(i).PK_COLUMN_NAME5 IS NOT NULL AND l_list_of_dl_for_ag_type(i).PK_COLUMN_NAME5 <> 'NONE'
2151 AND INSTR(l_concat_pk_cols_sel,l_list_of_dl_for_ag_type(i).PK_COLUMN_NAME5) = 0) THEN
2152 IF(l_list_of_dl_for_ag_type(i).PK_COLUMN_TYPE5 = 'NUMBER') THEN
2153 wierd_constant := G_NULL_TOKEN_NUM;
2154 ELSIF (l_list_of_dl_for_ag_type(i).PK_COLUMN_TYPE5 = 'DATE' OR l_list_of_dl_for_ag_type(i).PK_COLUMN_TYPE5 = 'DATETIME') THEN
2155 wierd_constant := G_NULL_TOKEN_DATE;
2156 ELSE
2157 wierd_constant := G_NULL_TOKEN_STR;
2158 END IF;
2159 l_concat_pk_cols_sel := l_concat_pk_cols_sel||l_list_of_dl_for_ag_type(i).PK_COLUMN_NAME5||' , ';
2160 l_concat_pk_cols_UAI2 := l_concat_pk_cols_UAI2 || ' AND NVL('||l_list_of_dl_for_ag_type(i).PK_COLUMN_NAME5||','||wierd_constant||') '||
2161 ' = NVL(UAI2.'||l_list_of_dl_for_ag_type(i).PK_COLUMN_NAME5||','||wierd_constant||')';
2162 END IF;
2163 END LOOP;
2164 ELSE
2165 IF (l_num_data_level_columns = 1) THEN
2166 l_concat_pk_cols_sel := l_concat_pk_cols_sel ||l_data_level_column_1||' , ';
2167 l_concat_pk_cols_UAI2 := l_concat_pk_cols_UAI2 || ' AND NVL('||l_data_level_column_1||',-1) = NVL(UAI2.'||l_data_level_column_1||',-1 )';
2168 ELSIF (l_num_data_level_columns = 2) THEN
2169 l_concat_pk_cols_sel := l_concat_pk_cols_sel ||l_data_level_column_1||' , '||l_data_level_column_2||',';
2170 l_concat_pk_cols_UAI2 := l_concat_pk_cols_UAI2 || ' AND NVL('||l_data_level_column_1||',-1) = NVL(UAI2.'||l_data_level_column_1||',-1 )'||
2171 ' AND NVL('||l_data_level_column_2||',-1) = NVL(UAI2.'||l_data_level_column_2||',-1 )';
2172
2173 ELSIF (l_num_data_level_columns = 3) THEN
2174 l_concat_pk_cols_sel := l_concat_pk_cols_sel ||l_data_level_column_1||' , '||l_data_level_column_2||','||l_data_level_column_3||',';
2175 l_concat_pk_cols_UAI2 := l_concat_pk_cols_UAI2 || ' AND NVL('||l_data_level_column_1||',-1) = NVL(UAI2.'||l_data_level_column_1||',-1 )'||
2176 ' AND NVL('||l_data_level_column_2||',-1) = NVL(UAI2.'||l_data_level_column_2||',-1 ) AND NVL('||l_data_level_column_3||',-1) = NVL(UAI2.'
2177 ||l_data_level_column_3||',-1 )';
2178 END IF;
2179 END IF;
2180
2181 ---------------------------------------------------------------
2182 -- Constructing the sql code snippets for dl's and class code
2183 ---------------------------------------------------------------
2184 IF (l_data_level_column_1 IS NOT NULL AND l_data_level_column_1 <> 'NONE') THEN
2185 l_dl_blk_tbl_list := l_dl_blk_tbl_list || ' ,dl_1_tbl ';
2186 l_dl_blk_tbl_list_2 := l_dl_blk_tbl_list_2 || ' ,dl_1_tbl(i) ';
2187 IF(l_dl_col_data_type_1 = 'NUMBER') THEN
2188 l_dl_blk_tbl_declare := l_dl_blk_tbl_declare || ' dl_1_tbl EGO_USER_ATTRS_BULK_PVT.EGO_USER_ATTRS_BULK_NUM_TBL; ';
2189 ELSE
2190 l_dl_blk_tbl_declare := l_dl_blk_tbl_declare || ' dl_1_tbl EGO_USER_ATTRS_BULK_PVT.EGO_USER_ATTRS_BULK_STR_TBL; ';
2191 END IF;
2192 END IF;
2193
2194 IF (l_data_level_column_2 IS NOT NULL AND l_data_level_column_2 <> 'NONE') THEN
2195 l_dl_blk_tbl_list := l_dl_blk_tbl_list || ' dl_2_tbl ';
2196 l_dl_blk_tbl_list_2 := l_dl_blk_tbl_list_2 || ' dl_2_tbl(i) ';
2197 IF(l_dl_col_data_type_2 = 'NUMBER') THEN
2198 l_dl_blk_tbl_declare := l_dl_blk_tbl_declare || ' dl_2_tbl EGO_USER_ATTRS_BULK_PVT.EGO_USER_ATTRS_BULK_NUM_TBL; ';
2199 ELSE
2200 l_dl_blk_tbl_declare := l_dl_blk_tbl_declare || ' dl_2_tbl EGO_USER_ATTRS_BULK_PVT.EGO_USER_ATTRS_BULK_STR_TBL; ';
2201 END IF;
2202 END IF;
2203
2204 IF (l_data_level_column_3 IS NOT NULL AND l_data_level_column_3 <> 'NONE') THEN
2205 l_dl_blk_tbl_list := l_dl_blk_tbl_list || ' dl_3_tbl ';
2206 l_dl_blk_tbl_list_2 := l_dl_blk_tbl_list_2 || ' dl_3_tbl(i) ';
2207 IF(l_dl_col_data_type_3 = 'NUMBER') THEN
2208 l_dl_blk_tbl_declare := l_dl_blk_tbl_declare || ' dl_3_tbl EGO_USER_ATTRS_BULK_PVT.EGO_USER_ATTRS_BULK_NUM_TBL; ';
2209 ELSE
2210 l_dl_blk_tbl_declare := l_dl_blk_tbl_declare || ' dl_3_tbl EGO_USER_ATTRS_BULK_PVT.EGO_USER_ATTRS_BULK_STR_TBL; ';
2211 END IF;
2212 END IF;
2213
2214 IF (l_class_code_column_name IS NOT NULL ) THEN
2215 l_class_blk_tbl_list := l_class_blk_tbl_list || ' class_tbl ';
2216 l_class_blk_tbl_list_2 := l_class_blk_tbl_list_2 || ' class_tbl(i) ';
2217 IF(l_class_code_column_type = 'NUMBER') THEN
2218 l_class_blk_tbl_declare := l_class_blk_tbl_declare || ' class_tbl EGO_USER_ATTRS_BULK_PVT.EGO_USER_ATTRS_BULK_NUM_TBL; ';
2219 ELSE
2220 l_class_blk_tbl_declare := l_class_blk_tbl_declare || ' class_tbl EGO_USER_ATTRS_BULK_PVT.EGO_USER_ATTRS_BULK_STR_TBL; ';
2221 END IF;
2222 END IF;
2223
2224
2225 /*
2226 DYLAN: why are we selecting this? We don't treat CC as a constraint;
2227 do we need it for any purpose in the query that's being built here?
2228 (I can't tell.)
2229 */
2230 IF l_class_code_column_name IS NOT NULL THEN
2231 l_concat_pk_cols_sel := l_concat_pk_cols_sel ||l_class_code_column_name||',';
2232 END IF;
2233
2234 IF (G_HZ_PARTY_ID IS NULL) THEN
2235 G_HZ_PARTY_ID := p_hz_party_id;
2236 END IF;
2237
2238 /*
2239 -----------------------------------------------
2240 -- Set this global variable once per session --
2241 -----------------------------------------------
2242 IF (G_HZ_PARTY_ID IS NULL) THEN
2243 IF (G_USER_NAME IS NOT NULL) THEN
2244
2245 SELECT 'HZ_PARTY:'||TO_CHAR(PERSON_ID)
2246 INTO G_HZ_PARTY_ID
2247 FROM EGO_PEOPLE_V
2248 WHERE USER_NAME = G_USER_NAME;
2249
2250 ELSE
2251 RAISE G_NO_USER_NAME_TO_VALIDATE;
2252 END IF;
2253 END IF;
2254 */
2255
2256 /*
2257 DYLAN: we need to remember to confirm whether ERROR_HANDLER
2258 init is required or will be taken care of by calling APIs
2259 */
2260
2261 /***
2262 --======================--
2263 -- ERROR_HANDLER SET-UP --
2264 --======================--
2265
2266 IF (FND_API.To_Boolean(p_init_error_handler)) THEN
2267
2268 ERROR_HANDLER.Initialize();
2269 ERROR_HANDLER.Set_Bo_Identifier(EGO_USER_ATTRS_DATA_PVT.G_BO_IDENTIFIER);
2270
2271 ---------------------------------------------------
2272 -- If we're debugging, we have to set up a Debug --
2273 -- session (unless our caller already did so) --
2274 ---------------------------------------------------
2275 IF (p_debug_level > 0 AND ERROR_HANDLER.Get_Debug() = 'N') THEN
2276
2277 EGO_USER_ATTRS_DATA_PVT.Set_Up_Debug_Session(p_entity_id
2278 ,p_entity_code
2279 ,p_debug_level);
2280
2281 END IF;
2282 code_debug('Starting Bulk Load for data set ID: '||p_data_set_id, 1);
2283
2284 END IF;
2285 ***/
2286
2287 code_debug(' Starting non-loop validations ',1);
2288
2289 ---------------------------------------------------
2290 -- Validations are done only if the API has been --
2291 -- called with the parameter p_validate as TRUE --
2292 -- This IF would end after the attr level validation loop --
2293 ------------------------------------------------------------
2294 IF (p_validate) THEN -- Search for *p_validate-IF-1* to find the END IF for this one.
2295 --======================--
2296 -- NON-LOOP VALIDATIONS --
2297 --======================--
2298
2299 -----------------------------------------------
2300 -- Update the interface table populating the --
2301 -- attribute group id for the given data --
2302 -----------------------------------------------
2303
2304 EXECUTE IMMEDIATE
2305 'UPDATE '||p_interface_table_name||' UAI1
2306 SET PROCESS_STATUS = PROCESS_STATUS + '||G_PS_BAD_ATTR_GRP_ID||'
2307 WHERE UAI1.DATA_SET_ID = :data_set_id
2308 AND UAI1.PROCESS_STATUS = '||G_PS_IN_PROCESS||'
2309 AND ATTR_GROUP_ID IS NOT NULL
2310 AND NVL(UAI1.ATTR_GROUP_TYPE,:attr_group_type)=:attr_group_type
2311 AND ATTR_GROUP_ID <> ( SELECT ATTR_GROUP_ID
2312 FROM EGO_FND_DSC_FLX_CTX_EXT FLX_EXT
2313 WHERE APPLICATION_ID = :application_id
2314 AND DESCRIPTIVE_FLEXFIELD_NAME = :attr_group_type
2315 AND DESCRIPTIVE_FLEX_CONTEXT_CODE = UAI1.ATTR_GROUP_INT_NAME) '
2316 USING p_data_set_id, p_attr_group_type, p_attr_group_type, p_application_id, p_attr_group_type ;
2317
2318 EXECUTE IMMEDIATE
2319 'UPDATE '||p_interface_table_name||' UAI1
2320 SET ATTR_GROUP_ID = (SELECT ATTR_GROUP_ID
2321 FROM EGO_FND_DSC_FLX_CTX_EXT FLX_EXT
2322 WHERE APPLICATION_ID = :application_id
2323 AND DESCRIPTIVE_FLEXFIELD_NAME = :attr_group_type
2324 AND DESCRIPTIVE_FLEX_CONTEXT_CODE = UAI1.ATTR_GROUP_INT_NAME)
2325 WHERE UAI1.DATA_SET_ID = :data_set_id
2326 AND UAI1.PROCESS_STATUS = '||G_PS_IN_PROCESS||'
2327 AND ATTR_GROUP_ID IS NULL '
2328 USING p_application_id, p_attr_group_type, p_data_set_id;
2329
2330 -----------------------------------------------
2331 -- Update the interface table populating the --
2332 -- attribute group type for the given data --
2333 -----------------------------------------------
2334
2335 EXECUTE IMMEDIATE
2336 'UPDATE '||p_interface_table_name||' UAI1
2337 SET ATTR_GROUP_TYPE = (SELECT DESCRIPTIVE_FLEXFIELD_NAME
2338 FROM EGO_FND_DSC_FLX_CTX_EXT FLX_EXT
2339 WHERE APPLICATION_ID = :application_id
2340 AND ATTR_GROUP_ID = UAI1.ATTR_GROUP_ID)
2341 WHERE UAI1.DATA_SET_ID = :data_set_id
2342 AND UAI1.PROCESS_STATUS = '||G_PS_IN_PROCESS||'
2343 AND UAI1.ATTR_GROUP_TYPE IS NULL '
2344 USING p_application_id, p_data_set_id;
2345
2346 END IF;
2347
2348 -------------------------------------------------
2349 -- We would not go any further if we dont have --
2350 -- any rows to process in this call. --
2351 -------------------------------------------------
2352
2353 BEGIN
2354 EXECUTE IMMEDIATE ' SELECT DATA_SET_ID FROM '||p_interface_table_name||
2355 ' WHERE DATA_SET_ID = :data_set_id
2356 AND ROWNUM = 1
2357 AND PROCESS_STATUS = '||G_PS_IN_PROCESS||'
2358 AND ATTR_GROUP_TYPE = :attr_group_type '
2359 INTO l_dummy
2360 USING p_data_set_id, p_attr_group_type;
2361 EXCEPTION
2362 WHEN NO_DATA_FOUND THEN
2363 ----------------------------------------------
2364 -- There are no rows in the attr intf table --
2365 -- lets push off ... --
2366 ----------------------------------------------
2367 RAISE G_NO_ROWS_IN_INTF_TABLE;
2368 END;
2369
2370 -------------------------------------------
2371 -- The above validations should be there --
2372 -- for dml mode and validate mode --
2373 -------------------------------------------
2374 IF (p_validate) THEN
2375 ------------------------------------------------
2376 -- Mark as errors all logical Attribute Group --
2377 -- rows for which we cannot find metadata --
2378 ------------------------------------------------
2379 -- Fix for bug#9336604
2380 -- Added no_unnest hint
2381 -- Changed bind variable p_data_set_id to literal
2382 EXECUTE IMMEDIATE
2383 'UPDATE '||p_interface_table_name||' UAI1
2384 SET UAI1.PROCESS_STATUS = UAI1.PROCESS_STATUS + '||G_PS_BAD_ATTR_OR_AG_METADATA||'
2385 WHERE UAI1.DATA_SET_ID = :p_data_set_id
2386 AND UAI1.PROCESS_STATUS = '||G_PS_IN_PROCESS||'
2387 AND UAI1.ATTR_GROUP_TYPE = :attr_group_type
2388 AND UAI1.ROW_IDENTIFIER IN
2389 (SELECT DISTINCT UAI2.ROW_IDENTIFIER
2390 FROM '||p_interface_table_name||' UAI2
2391 WHERE UAI2.DATA_SET_ID = :p_data_set_id
2392 AND UAI2.PROCESS_STATUS = '||G_PS_IN_PROCESS||'
2393 AND NOT EXISTS (SELECT /*+ no_unnest */ NULL
2394 FROM EGO_FND_DSC_FLX_CTX_EXT AG,
2395 FND_DESCR_FLEX_COLUMN_USAGES A
2396 WHERE AG.ATTR_GROUP_ID = UAI2.ATTR_GROUP_ID
2397 AND A.DESCRIPTIVE_FLEX_CONTEXT_CODE = AG.DESCRIPTIVE_FLEX_CONTEXT_CODE
2398 AND A.APPLICATION_ID = :p_application_id
2399 AND A.DESCRIPTIVE_FLEXFIELD_NAME = :p_attr_group_type
2400 AND A.END_USER_COLUMN_NAME = UAI2.ATTR_INT_NAME
2401 AND A.ENABLED_FLAG = ''Y''))'
2402 USING p_data_set_id, p_attr_group_type, p_data_set_id, p_application_id, p_attr_group_type;
2403
2404 code_debug(' After validations for G_PS_BAD_ATTR_OR_AG_METADATA',1);
2405
2406
2407 /*
2408 DYLAN: I need to check--is the multiple entries validation step required
2409 if intf_U1 is unique?
2410 */
2411 /*
2412 Gaurav: we dont need this check since we have a unique index
2413 which wont allow duplicate rows
2414 ------------------------------------------------------------------
2415 -- Mark as errors all logical Attribute Group rows that contain --
2416 -- multiple interface table rows for any single Attribute --
2417 ------------------------------------------------------------------
2418 EXECUTE IMMEDIATE
2419 'UPDATE '||p_interface_table_name||' UAI1
2420 SET UAI1.PROCESS_STATUS = UAI1.PROCESS_STATUS + '||G_PS_MULTIPLE_ENTRIES||'
2421 WHERE UAI1.DATA_SET_ID = :p_data_set_id
2422 AND UAI1.PROCESS_STATUS = '||G_PS_IN_PROCESS||'
2423 AND UAI1.ROW_IDENTIFIER IN
2424 (SELECT ROW_IDENTIFIER
2425 FROM (SELECT UAI2.ROW_IDENTIFIER
2426 ,UAI2.ATTR_INT_NAME
2427 ,COUNT(*) NUMBER_OF_ENTRIES
2428 FROM '||p_interface_table_name||' UAI2
2429 WHERE UAI2.DATA_SET_ID = :p_data_set_id
2430 AND UAI2.PROCESS_STATUS = '||G_PS_IN_PROCESS||'
2431 GROUP BY UAI2.ROW_IDENTIFIER, UAI2.ATTR_INT_NAME)
2432 WHERE NUMBER_OF_ENTRIES > 1)'
2433 USING p_data_set_id, p_data_set_id;
2434 */
2435
2436 --------------------------------------------------------------------
2437 -- Mark as errors all logical Attribute Group rows that contain --
2438 -- any interface table rows with multiple values for an Attribute --
2439 --------------------------------------------------------------------
2440 EXECUTE IMMEDIATE
2441 'UPDATE '||p_interface_table_name||' UAI1
2442 SET UAI1.PROCESS_STATUS = UAI1.PROCESS_STATUS + '||G_PS_MULTIPLE_VALUES||'
2443 WHERE UAI1.DATA_SET_ID = :p_data_set_id
2444 AND UAI1.ATTR_GROUP_TYPE = :attr_group_type
2445 AND UAI1.PROCESS_STATUS = '||G_PS_IN_PROCESS||'
2446 AND UAI1.ROW_IDENTIFIER IN
2447 (SELECT /*+ UNNEST HASH_SJ */ DISTINCT UAI2.ROW_IDENTIFIER /* bug#9678667 Change apr30 */
2448 FROM '||p_interface_table_name||' UAI2
2449 WHERE UAI2.DATA_SET_ID = :p_data_set_id
2450 AND UAI2.PROCESS_STATUS = '||G_PS_IN_PROCESS||'
2451 AND ((UAI2.ATTR_VALUE_STR IS NOT NULL AND
2452 (UAI2.ATTR_VALUE_NUM IS NOT NULL OR
2453 UAI2.ATTR_VALUE_DATE IS NOT NULL))
2454 OR
2455 (UAI2.ATTR_VALUE_NUM IS NOT NULL AND
2456 (UAI2.ATTR_VALUE_STR IS NOT NULL OR
2457 UAI2.ATTR_VALUE_DATE IS NOT NULL))
2458 OR
2459 (UAI2.ATTR_VALUE_DATE IS NOT NULL AND
2460 (UAI2.ATTR_VALUE_NUM IS NOT NULL OR
2461 UAI2.ATTR_VALUE_STR IS NOT NULL))))'
2462 USING p_data_set_id, p_attr_group_type, p_data_set_id;
2463
2464 code_debug(' After validations for G_PS_MULTIPLE_VALUES',1);
2465
2466 ---------------------------------------------------------------------
2467 -- Mark as errors all logical Attribute Group rows for which there --
2468 -- is no association of the Attribute Group to any of the related --
2469 -- classification codes (as defined by the passed-in query), or --
2470 -- for which the logical Attribute Group row is not passed in at --
2471 -- the correct data level for the association (e.g., if the object --
2472 -- is 'EGO_ITEM' and the row is being passed in with a REVISION_ID --
2473 -- value for an Attribute Group associated at the Item level) --
2474 ---------------------------------------------------------------------
2475 l_dynamic_sql :=
2476 'UPDATE '||p_interface_table_name||' UAI1
2477 SET UAI1.PROCESS_STATUS = UAI1.PROCESS_STATUS + '||G_PS_AG_NOT_ASSOCIATED||'
2478 WHERE UAI1.DATA_SET_ID = :data_set_id
2479 AND UAI1.ATTR_GROUP_TYPE = :attr_group_type
2480 AND UAI1.PROCESS_STATUS = '||G_PS_IN_PROCESS||'
2481 AND UAI1.ROW_IDENTIFIER IN
2482 (SELECT DISTINCT UAI2.ROW_IDENTIFIER
2483 FROM '||p_interface_table_name||' UAI2
2484 WHERE UAI2.DATA_SET_ID = :data_set_id
2485 -- AND UAI2.DATA_SET_ID = UAI1.DATA_SET_ID -- Commenting for Bug 9336604
2486 AND UAI2.PROCESS_STATUS = '||G_PS_IN_PROCESS||'
2487 AND NOT EXISTS (SELECT NULL
2488 FROM EGO_OBJ_AG_ASSOCS_B A
2489 WHERE A.ATTR_GROUP_ID = UAI2.ATTR_GROUP_ID
2490 AND A.OBJECT_ID = '||l_object_id||'
2491 AND A.CLASSIFICATION_CODE IN ('||p_related_class_codes_query||')';
2492 --R12C
2493
2494 IF(l_data_level_col_exists) THEN
2495
2496 l_dynamic_sql := l_dynamic_sql||' AND NVL(A.DATA_LEVEL_ID,-1) = NVL(UAI2.DATA_LEVEL_ID,-1) ';
2497
2498 l_dummy := 0;
2499 FOR i IN l_list_of_dl_for_ag_type.FIRST .. l_list_of_dl_for_ag_type.LAST
2500 LOOP
2501 IF (l_list_of_dl_for_ag_type(i).PK_COLUMN_NAME1 IS NOT NULL AND l_list_of_dl_for_ag_type(i).PK_COLUMN_NAME1 <> 'NONE') THEN
2502
2503 l_dummy := l_dummy+1;
2504 IF(l_dummy = 1) THEN
2505 l_dynamic_sql := l_dynamic_sql ||' AND (( ';
2506 ELSE
2507 l_dynamic_sql := l_dynamic_sql ||' OR ( ';
2508 END IF;
2509 l_dynamic_sql := l_dynamic_sql || ' UAI2.DATA_LEVEL_ID = '||l_list_of_dl_for_ag_type(i).DATA_LEVEL_ID
2510 || ' AND UAI2.'||l_list_of_dl_for_ag_type(i).PK_COLUMN_NAME1||' IS NOT NULL ';
2511 ELSE
2512 l_dummy := l_dummy+1;
2513 IF(l_dummy = 1) THEN
2514 l_dynamic_sql := l_dynamic_sql ||' AND (( ';
2515 ELSE
2516 l_dynamic_sql := l_dynamic_sql ||' OR ( ';
2517 END IF;
2518 l_dynamic_sql := l_dynamic_sql || ' UAI2.DATA_LEVEL_ID = '||l_list_of_dl_for_ag_type(i).DATA_LEVEL_ID||' ';
2519
2520 END IF;
2521
2522 IF (l_list_of_dl_for_ag_type(i).PK_COLUMN_NAME2 IS NOT NULL AND l_list_of_dl_for_ag_type(i).PK_COLUMN_NAME2 <> 'NONE') THEN
2523 l_dynamic_sql := l_dynamic_sql || ' AND UAI2.'||l_list_of_dl_for_ag_type(i).PK_COLUMN_NAME2||' IS NOT NULL ';
2524 END IF;
2525
2526 IF (l_list_of_dl_for_ag_type(i).PK_COLUMN_NAME3 IS NOT NULL AND l_list_of_dl_for_ag_type(i).PK_COLUMN_NAME3 <> 'NONE') THEN
2527 l_dynamic_sql := l_dynamic_sql || ' AND UAI2.'||l_list_of_dl_for_ag_type(i).PK_COLUMN_NAME3||' IS NOT NULL ';
2528 END IF;
2529 IF (l_list_of_dl_for_ag_type(i).PK_COLUMN_NAME4 IS NOT NULL AND l_list_of_dl_for_ag_type(i).PK_COLUMN_NAME4 <> 'NONE') THEN
2530 l_dynamic_sql := l_dynamic_sql || ' AND UAI2.'||l_list_of_dl_for_ag_type(i).PK_COLUMN_NAME4||' IS NOT NULL ';
2531 END IF;
2532 IF (l_list_of_dl_for_ag_type(i).PK_COLUMN_NAME5 IS NOT NULL AND l_list_of_dl_for_ag_type(i).PK_COLUMN_NAME5 <> 'NONE') THEN
2533 l_dynamic_sql := l_dynamic_sql || ' AND UAI2.'||l_list_of_dl_for_ag_type(i).PK_COLUMN_NAME5||' IS NOT NULL ';
2534 END IF;
2535
2536 --IF (l_list_of_dl_for_ag_type(i).PK_COLUMN_NAME1 IS NOT NULL AND l_list_of_dl_for_ag_type(i).PK_COLUMN_NAME1 <> 'NONE') THEN
2537 l_dynamic_sql := l_dynamic_sql ||' ) ';
2538 --END IF;
2539
2540 END LOOP;
2541
2542 l_dynamic_sql := l_dynamic_sql ||' ) ';
2543 END IF;
2544 --R12C end
2545
2546 IF (l_num_data_level_columns = 1 AND NOT l_data_level_col_exists) THEN
2547 l_dynamic_sql := l_dynamic_sql||
2548 ' AND ((A.DATA_LEVEL = '''||l_data_level_1||'''
2549 AND UAI2.'||l_data_level_column_1||' IS NOT NULL )
2550 OR
2551 ( A.DATA_LEVEL <> '''||l_data_level_1||'''
2552 AND UAI2.'||l_data_level_column_1||' IS NULL) )';
2553
2554 ELSIF (l_num_data_level_columns = 2 AND NOT l_data_level_col_exists) THEN
2555 l_dynamic_sql := l_dynamic_sql||
2556 ' AND ( ( A.DATA_LEVEL = '''||l_data_level_2||'''
2557 AND UAI2.'||l_data_level_column_1||' IS NOT NULL
2558 AND UAI2.'||l_data_level_column_2||' IS NOT NULL )
2559 OR
2560 ( A.DATA_LEVEL = '''||l_data_level_1||'''
2561 AND UAI2.'||l_data_level_column_1||' IS NOT NULL
2562 AND UAI2.'||l_data_level_column_2||' IS NULL )
2563 OR
2564 ( A.DATA_LEVEL <> '''||l_data_level_1||'''
2565 AND A.DATA_LEVEL <> '''||l_data_level_2||'''
2566 AND UAI2.'||l_data_level_column_1||' IS NULL
2567 AND UAI2.'||l_data_level_column_2||' IS NULL ))';
2568
2569 ELSIF (l_num_data_level_columns = 3 AND NOT l_data_level_col_exists) THEN
2570 l_dynamic_sql := l_dynamic_sql||
2571
2572 ' AND ( ( A.DATA_LEVEL = '''||l_data_level_3||'''
2573 AND UAI2.'||l_data_level_column_1||' IS NOT NULL
2574 AND UAI2.'||l_data_level_column_2||' IS NOT NULL
2575 AND UAI2.'||l_data_level_column_3||' IS NOT NULL )
2576 OR
2577 ( A.DATA_LEVEL = '''||l_data_level_2||'''
2578 AND UAI2.'||l_data_level_column_1||' IS NOT NULL
2579 AND UAI2.'||l_data_level_column_2||' IS NOT NULL
2580 AND UAI2.'||l_data_level_column_3||' IS NULL )
2581 OR
2582 ( A.DATA_LEVEL = '''||l_data_level_1||'''
2583 AND UAI2.'||l_data_level_column_1||' IS NOT NULL
2584 AND UAI2.'||l_data_level_column_2||' IS NULL
2585 AND UAI2.'||l_data_level_column_3||' IS NULL )
2586
2587 OR
2588 ( A.DATA_LEVEL <> '''||l_data_level_1||'''
2589 AND A.DATA_LEVEL <> '''||l_data_level_2||'''
2590 AND A.DATA_LEVEL <> '''||l_data_level_3||'''
2591 AND UAI2.'||l_data_level_column_1||' IS NULL
2592 AND UAI2.'||l_data_level_column_2||' IS NULL
2593 AND UAI2.'||l_data_level_column_3||' IS NULL ))';
2594
2595 END IF;
2596 IF(l_data_level_col_exists) THEN
2597 l_dynamic_sql := l_dynamic_sql||'))';
2598 ELSE
2599 l_dynamic_sql := l_dynamic_sql||'))';
2600 END IF;
2601 code_debug('before the assoc chk sql');
2602 code_debug(l_dynamic_sql);
2603
2604 EXECUTE IMMEDIATE l_dynamic_sql
2605 USING p_data_set_id, p_attr_group_type, p_data_set_id;
2606
2607 code_debug(' After validations for G_PS_AG_NOT_ASSOCIATED',1);
2608 code_debug(' The sql for validation for G_PS_AG_NOT_ASSOCIATED sql is :'||l_dynamic_sql,3);
2609 ---------------------------------------------------------------------
2610 -- Mark the rows having inappropriate non-SYNC transaction_types --
2611 -- for that attr grp in the destination table as errored --
2612 -- In the TRANSACTION_TYPE processing we assume that for multi-row --
2613 -- attr grps the user has provided all the necessary UK's and the --
2614 -- user cannot update the UK values --
2615 ---------------------------------------------------------------------
2616
2617 -- Bug 9336604 : Start - Commenting the below code
2618 /*
2619 l_dynamic_sql :=
2620 ' UPDATE '||p_interface_table_name||' UAI1
2621 SET UAI1.PROCESS_STATUS = PROCESS_STATUS +
2622 DECODE(UAI1.TRANSACTION_TYPE,
2623 '''||EGO_USER_ATTRS_DATA_PVT.G_CREATE_MODE||''', '||G_PS_BAD_TTYPE_CREATE||',
2624 '''||EGO_USER_ATTRS_DATA_PVT.G_UPDATE_MODE||''', '||G_PS_BAD_TTYPE_UPDATE||',
2625 '''||EGO_USER_ATTRS_DATA_PVT.G_DELETE_MODE||''', '||G_PS_BAD_TTYPE_DELETE||')
2626 WHERE UAI1.DATA_SET_ID = :data_set_id
2627 AND UAI1.ATTR_GROUP_TYPE = :attr_group_type
2628 AND UAI1.PROCESS_STATUS = '||G_PS_IN_PROCESS||'
2629 AND UAI1.TRANSACTION_TYPE <> '''||EGO_USER_ATTRS_DATA_PVT.G_SYNC_MODE||'''
2630 AND (SELECT MULTI_ROW FROM EGO_FND_DSC_FLX_CTX_EXT FLX_EXT
2631 WHERE DESCRIPTIVE_FLEX_CONTEXT_CODE = UAI1.ATTR_GROUP_INT_NAME
2632 AND APPLICATION_ID = '||p_application_id||'
2633 AND DESCRIPTIVE_FLEXFIELD_NAME = '''||p_attr_group_type||''') <> ''Y''
2634 AND UAI1.ROW_IDENTIFIER IN (
2635 SELECT DISTINCT UAI2.ROW_IDENTIFIER
2636 FROM '||p_interface_table_name||' UAI2
2637 WHERE UAI2.DATA_SET_ID = :data_set_id
2638 AND UAI2.PROCESS_STATUS = '||G_PS_IN_PROCESS;
2639
2640 */ -- Bug 9336604 : End
2641
2642 l_ext_table_select :=
2643 '(SELECT COUNT(*)
2644 FROM '||l_ext_vl_name||'
2645 WHERE ATTR_GROUP_ID = UAI2.ATTR_GROUP_ID
2646 AND ROWNUM < 2 ';
2647
2648 l_ext_table_select := l_ext_table_select ||l_concat_pk_cols_UAI2;
2649
2650 /*
2651 IF (l_pk1_column_name IS NOT NULL) THEN
2652 l_ext_table_select := l_ext_table_select || ' AND '||l_pk1_column_name||' = UAI2.'||l_pk1_column_name;
2653 END IF;
2654 IF (l_pk2_column_name IS NOT NULL) THEN
2655 l_ext_table_select := l_ext_table_select || ' AND '||l_pk2_column_name||' = UAI2.'||l_pk2_column_name;
2656 END IF;
2657 IF (l_pk3_column_name IS NOT NULL) THEN
2658 l_ext_table_select := l_ext_table_select || ' AND '||l_pk3_column_name||' = UAI2.'||l_pk3_column_name;
2659 END IF;
2660 IF (l_pk4_column_name IS NOT NULL) THEN
2661 l_ext_table_select := l_ext_table_select || ' AND '||l_pk4_column_name||' = UAI2.'||l_pk4_column_name;
2662 END IF;
2663 IF (l_pk5_column_name IS NOT NULL) THEN
2664 l_ext_table_select := l_ext_table_select || ' AND '||l_pk5_column_name||' = UAI2.'||l_pk5_column_name;
2665 END IF;
2666
2667 --add dl check to the sql
2668 --R12C
2669 IF(l_data_level_col_exists) THEN
2670
2671 l_ext_table_select := l_ext_table_select||' AND NVL(DATA_LEVEL_ID,-1) = NVL(UAI2.DATA_LEVEL_ID,-1) ';
2672 l_dummy := 0;
2673 FOR i IN l_list_of_dl_for_ag_type.FIRST .. l_list_of_dl_for_ag_type.LAST
2674 LOOP
2675 IF (l_list_of_dl_for_ag_type(i).PK_COLUMN_NAME1 IS NOT NULL AND l_list_of_dl_for_ag_type(i).PK_COLUMN_NAME1 <> 'NONE') THEN
2676 l_dummy := l_dummy+1;
2677 IF(l_dummy = 1) THEN
2678 l_ext_table_select := l_ext_table_select ||' AND (( ';
2679 ELSE
2680 l_ext_table_select := l_ext_table_select ||' OR ( ';
2681 END IF;
2682 l_ext_table_select := l_ext_table_select || ' UAI2.DATA_LEVEL_ID = '||l_list_of_dl_for_ag_type(i).DATA_LEVEL_ID
2683 || ' AND '||l_list_of_dl_for_ag_type(i).PK_COLUMN_NAME1||' = UAI2.'||l_list_of_dl_for_ag_type(i).PK_COLUMN_NAME1;
2684 END IF;
2685
2686 IF (l_list_of_dl_for_ag_type(i).PK_COLUMN_NAME2 IS NOT NULL AND l_list_of_dl_for_ag_type(i).PK_COLUMN_NAME2 <> 'NONE') THEN
2687 l_ext_table_select := l_ext_table_select || ' AND '||l_list_of_dl_for_ag_type(i).PK_COLUMN_NAME2||' = UAI2.'||l_list_of_dl_for_ag_type(i).PK_COLUMN_NAME2;
2688 END IF;
2689
2690 IF (l_list_of_dl_for_ag_type(i).PK_COLUMN_NAME3 IS NOT NULL AND l_list_of_dl_for_ag_type(i).PK_COLUMN_NAME3 <> 'NONE') THEN
2691 l_ext_table_select := l_ext_table_select ||' AND '||l_list_of_dl_for_ag_type(i).PK_COLUMN_NAME3||' = UAI2.'||l_list_of_dl_for_ag_type(i).PK_COLUMN_NAME3;
2692 END IF;
2693 IF (l_list_of_dl_for_ag_type(i).PK_COLUMN_NAME4 IS NOT NULL AND l_list_of_dl_for_ag_type(i).PK_COLUMN_NAME4 <> 'NONE') THEN
2694 l_ext_table_select := l_ext_table_select || ' AND '||l_list_of_dl_for_ag_type(i).PK_COLUMN_NAME4||' = UAI2.'||l_list_of_dl_for_ag_type(i).PK_COLUMN_NAME4;
2695 END IF;
2696 IF (l_list_of_dl_for_ag_type(i).PK_COLUMN_NAME5 IS NOT NULL AND l_list_of_dl_for_ag_type(i).PK_COLUMN_NAME5 <> 'NONE') THEN
2697 l_ext_table_select := l_ext_table_select || ' AND '||l_list_of_dl_for_ag_type(i).PK_COLUMN_NAME5||' = UAI2.'||l_list_of_dl_for_ag_type(i).PK_COLUMN_NAME5;
2698 END IF;
2699
2700 IF (l_list_of_dl_for_ag_type(i).PK_COLUMN_NAME1 IS NOT NULL AND l_list_of_dl_for_ag_type(i).PK_COLUMN_NAME1 <> 'NONE') THEN
2701 l_ext_table_select := l_ext_table_select ||' ) ';
2702 END IF;
2703 END LOOP;
2704 l_ext_table_select := l_ext_table_select ||' ) ';
2705 --R12C end
2706 ELSE
2707
2708 IF (l_num_data_level_columns = 1) THEN
2709 l_ext_table_select := l_ext_table_select || ' AND NVL('||l_data_level_column_1||',-1) = NVL(UAI2.'||l_data_level_column_1||',-1 )';
2710
2711 ELSIF (l_num_data_level_columns = 2) THEN
2712 l_ext_table_select := l_ext_table_select || ' AND NVL('||l_data_level_column_1||',-1) = NVL(UAI2.'||l_data_level_column_1||',-1 )';
2713 l_ext_table_select := l_ext_table_select || ' AND NVL('||l_data_level_column_2||',-1) = NVL(UAI2.'||l_data_level_column_2||',-1 )';
2714
2715 ELSIF (l_num_data_level_columns = 3) THEN
2716 l_ext_table_select := l_ext_table_select || ' AND NVL('||l_data_level_column_1||',-1) = NVL(UAI2.'||l_data_level_column_1||',-1 )';
2717 l_ext_table_select := l_ext_table_select || ' AND NVL('||l_data_level_column_2||',-1) = NVL(UAI2.'||l_data_level_column_2||',-1 )';
2718 l_ext_table_select := l_ext_table_select || ' AND NVL('||l_data_level_column_3||',-1) = NVL(UAI2.'||l_data_level_column_3||',-1 )';
2719 END IF;
2720 END IF; --l_data_level_col_exists
2721 */
2722 l_ext_table_select := l_ext_table_select||')';
2723
2724 -- Bug 9336604 : Start
2725 l_dynamic_sql :=
2726 'DECLARE
2727 l_row_ids dbms_sql.number_table;
2728 BEGIN
2729 SELECT DISTINCT UAI2.ROW_IDENTIFIER
2730 BULK COLLECT INTO l_row_ids
2731 FROM '||p_interface_table_name||' UAI2
2732 WHERE UAI2.DATA_SET_ID = :data_set_id
2733 AND UAI2.PROCESS_STATUS = '||G_PS_IN_PROCESS||'
2734 AND '||l_ext_table_select||'
2735 = DECODE(UAI2.TRANSACTION_TYPE,
2736 '''||EGO_USER_ATTRS_DATA_PVT.G_CREATE_MODE||''', 1,
2737 '''||EGO_USER_ATTRS_DATA_PVT.G_UPDATE_MODE||''', 0,
2738 '''||EGO_USER_ATTRS_DATA_PVT.G_DELETE_MODE||''', 0); '||
2739 '
2740 IF (l_row_ids.Count > 0) THEN
2741 FORALL i in l_row_ids.FIRST .. l_row_ids.LAST
2742 UPDATE '||p_interface_table_name||' UAI1
2743 SET UAI1.PROCESS_STATUS = PROCESS_STATUS +
2744 DECODE(UAI1.TRANSACTION_TYPE,
2745 '''||EGO_USER_ATTRS_DATA_PVT.G_CREATE_MODE||''', '||G_PS_BAD_TTYPE_CREATE||',
2746 '''||EGO_USER_ATTRS_DATA_PVT.G_UPDATE_MODE||''', '||G_PS_BAD_TTYPE_UPDATE||',
2747 '''||EGO_USER_ATTRS_DATA_PVT.G_DELETE_MODE||''', '||G_PS_BAD_TTYPE_DELETE||')
2748 WHERE UAI1.DATA_SET_ID = '||p_data_set_id||'
2749 AND UAI1.ATTR_GROUP_TYPE = '''||p_attr_group_type||'''
2750 AND UAI1.PROCESS_STATUS = '||G_PS_IN_PROCESS||'
2751 AND UAI1.TRANSACTION_TYPE <> '''||EGO_USER_ATTRS_DATA_PVT.G_SYNC_MODE||'''
2752 AND (SELECT MULTI_ROW FROM EGO_FND_DSC_FLX_CTX_EXT FLX_EXT
2753 WHERE DESCRIPTIVE_FLEX_CONTEXT_CODE = UAI1.ATTR_GROUP_INT_NAME
2754 AND APPLICATION_ID = '||p_application_id||'
2755 AND DESCRIPTIVE_FLEXFIELD_NAME = '''||p_attr_group_type||''') <> ''Y''
2756 AND UAI1.ROW_IDENTIFIER = l_row_ids(i) AND (UAI1.ATTR_GROUP_TYPE <> '''||INV_EBI_UTIL.G_BOM_COMPONENTMGMT_GROUP||''' OR (UAI1.ATTR_GROUP_TYPE = '''||INV_EBI_UTIL.G_BOM_COMPONENTMGMT_GROUP||''' AND UAI1.TRANSACTION_TYPE <> '''||'CREATE'||'''));
2757 END IF;
2758 END;';
2759 -- Bug 14805652: In the upload phase for bom structure upload and the transaction type is CREATE, then will not update the UDA record as BAD_CREATE, because the UDA row will be inserted into database before this validation.
2760 -- Bug 9336604 : End
2761
2762 -- Bug 9336604 : Start - Commenting
2763 /*
2764 l_dynamic_sql := l_dynamic_sql||' AND '||l_ext_table_select||
2765 ' = DECODE(UAI2.TRANSACTION_TYPE,
2766 '''||EGO_USER_ATTRS_DATA_PVT.G_CREATE_MODE||''', 1,
2767 '''||EGO_USER_ATTRS_DATA_PVT.G_UPDATE_MODE||''', 0,
2768 '''||EGO_USER_ATTRS_DATA_PVT.G_DELETE_MODE||''', 0))';
2769 */
2770 -- Bug 9336604 : End - Commenting
2771
2772 --------------------------------------------------------------------------
2773 -- We do the transaction_type validation only for user defined attributes,
2774 -- for developer defined attributes the trans type is updated to UPDATE
2775 -- and a dummy row is created in the production table before doing the DML.
2776 -- i.e., if l_ag_id_col_exists is FALSE
2777 -- For all developer defined attr rows the transaction type is updated to
2778 -- UPDATE.
2779 --------------------------------------------------------------------------
2780 IF (l_ag_id_col_exists) THEN
2781
2782 -- Bug 9336604 : Start
2783 code_debug(l_dynamic_sql);
2784 EXECUTE IMMEDIATE l_dynamic_sql
2785 USING p_data_set_id;/*Fix for bug#9678667. Literal to bind*/
2786 -- Bug 9336604 : End
2787
2788 -- Bug 9336604 : Start - Commenting
2789 /*
2790 code_debug(l_dynamic_sql);
2791
2792 EXECUTE IMMEDIATE l_dynamic_sql
2793 USING p_data_set_id, p_attr_group_type, p_data_set_id;
2794 */
2795 -- Bug 9336604 : End - Commenting
2796
2797 code_debug(' After validating the transaction type for Single Row AGs ',1);
2798 code_debug(' The sql for validating transaction type for SR AGs is :'||l_dynamic_sql,3);
2799
2800 ELSE
2801
2802 l_dynamic_sql :=
2803 ' UPDATE '||p_interface_table_name||' UAI1
2804 SET UAI1.PROCESS_STATUS = PROCESS_STATUS +
2805 DECODE(UAI1.TRANSACTION_TYPE,
2806 '''||EGO_USER_ATTRS_DATA_PVT.G_UPDATE_MODE||''', '||G_PS_BAD_TTYPE_UPDATE||',
2807 '''||EGO_USER_ATTRS_DATA_PVT.G_DELETE_MODE||''', '||G_PS_BAD_TTYPE_DELETE||')
2808 WHERE UAI1.DATA_SET_ID = :data_set_id
2809 AND UAI1.ATTR_GROUP_TYPE = :attr_group_type
2810 AND UAI1.PROCESS_STATUS = '||G_PS_IN_PROCESS||'
2811 AND UAI1.TRANSACTION_TYPE <> '''||EGO_USER_ATTRS_DATA_PVT.G_SYNC_MODE||'''
2812 AND UAI1.TRANSACTION_TYPE <> '''||EGO_USER_ATTRS_DATA_PVT.G_CREATE_MODE||'''
2813 AND (SELECT MULTI_ROW FROM EGO_FND_DSC_FLX_CTX_EXT FLX_EXT
2814 WHERE DESCRIPTIVE_FLEX_CONTEXT_CODE = UAI1.ATTR_GROUP_INT_NAME
2815 AND APPLICATION_ID = '||p_application_id||'
2816 AND DESCRIPTIVE_FLEXFIELD_NAME = :attr_group_type) <> ''Y''
2817 AND UAI1.ROW_IDENTIFIER IN (
2818 SELECT DISTINCT UAI2.ROW_IDENTIFIER
2819 FROM '||p_interface_table_name||' UAI2
2820 WHERE UAI2.DATA_SET_ID = :data_set_id
2821 AND UAI2.PROCESS_STATUS = '||G_PS_IN_PROCESS||'
2822 AND (SELECT COUNT(*) FROM '|| l_ext_vl_name||'
2823 WHERE 1=1 '||l_concat_pk_cols_UAI2||'
2824 AND ROWNUM <2 ) = DECODE(UAI2.TRANSACTION_TYPE,
2825 '''||EGO_USER_ATTRS_DATA_PVT.G_UPDATE_MODE||''', 0,
2826 '''||EGO_USER_ATTRS_DATA_PVT.G_DELETE_MODE||''', 0)
2827 )';
2828 EXECUTE IMMEDIATE l_dynamic_sql
2829 USING p_data_Set_id, p_attr_group_type, p_attr_group_type, p_data_Set_id ;
2830
2831 END IF;
2832
2833 /*
2834 DYLAN: is there a reason we need to do this SYNC -> CREATE/UPDATE switch
2835 here rather than after our initial validation loop? If we did it there,
2836 we could use UKs and go for SR and MR all together. Let's talk about
2837 this.
2838 */
2839 -------------------------------------------------------
2840 -- Update the transaction type column for single-row --
2841 -- Attr Group rows from SYNC to UPDATE or CREATE --
2842 -------------------------------------------------------
2843
2844 /* Bug 13414358 - Start */
2845 -- Modifed the query to use exists caluse for performance bug 13414358.
2846 l_ext_table_select1 :=
2847 '(SELECT 1
2848 FROM '||l_ext_b_table_name||'
2849 WHERE ATTR_GROUP_ID = UAI2.ATTR_GROUP_ID
2850 AND ROWNUM < 2 ';
2851
2852 l_ext_table_select1 := l_ext_table_select1 ||l_concat_pk_cols_UAI2;
2853 l_ext_table_select1 := l_ext_table_select1||')';
2854 /* Bug 13414358 - End */
2855
2856 IF (l_ag_id_col_exists) THEN
2857
2858 l_dynamic_sql :=
2859 /* Bug 13414358 - Bug commenting the below query and modifying as below */
2860 /*
2861 ' UPDATE '||p_interface_table_name||' UAI2
2862 SET UAI2.TRANSACTION_TYPE = DECODE('||l_ext_table_select||
2863 ',0,'''||
2864 EGO_USER_ATTRS_DATA_PVT.G_CREATE_MODE||''','''||
2865 EGO_USER_ATTRS_DATA_PVT.G_UPDATE_MODE||''')
2866 WHERE UAI2.DATA_SET_ID = :data_set_id
2867 AND UAI2.ATTR_GROUP_TYPE = :attr_group_type
2868 AND UAI2.PROCESS_STATUS = '||G_PS_IN_PROCESS||'
2869 AND UAI2.TRANSACTION_TYPE = '''||EGO_USER_ATTRS_DATA_PVT.G_SYNC_MODE||'''
2870 AND (SELECT MULTI_ROW FROM EGO_FND_DSC_FLX_CTX_EXT FLX_EXT
2871 WHERE DESCRIPTIVE_FLEX_CONTEXT_CODE = UAI2.ATTR_GROUP_INT_NAME
2872 AND APPLICATION_ID = :application_id
2873 AND DESCRIPTIVE_FLEXFIELD_NAME = :attr_group_type) <> ''Y'' ';
2874 */ -- Tesco - Bug Commenting Done
2875
2876 /* Bug 13414358 - Start */
2877 ' UPDATE '||p_interface_table_name||' UAI2
2878 SET UAI2.TRANSACTION_TYPE = Nvl(( SELECT '''||EGO_USER_ATTRS_DATA_PVT.G_UPDATE_MODE||'''
2879 FROM DUAL
2880 WHERE EXISTS '||l_ext_table_select1||
2881 '), '''||EGO_USER_ATTRS_DATA_PVT.G_CREATE_MODE||''')
2882 WHERE UAI2.DATA_SET_ID = :data_set_id
2883 AND UAI2.ATTR_GROUP_TYPE = :attr_group_type
2884 AND UAI2.PROCESS_STATUS = '||G_PS_IN_PROCESS||'
2885 AND UAI2.TRANSACTION_TYPE = '''||EGO_USER_ATTRS_DATA_PVT.G_SYNC_MODE||'''
2886 AND (SELECT MULTI_ROW FROM EGO_FND_DSC_FLX_CTX_EXT FLX_EXT
2887 WHERE DESCRIPTIVE_FLEX_CONTEXT_CODE = UAI2.ATTR_GROUP_INT_NAME
2888 AND APPLICATION_ID = :application_id
2889 AND DESCRIPTIVE_FLEXFIELD_NAME = :attr_group_type) <> ''Y'' ';
2890 /* Bug 13414358 - End */
2891
2892 --ER 9489112, do not convert SYNC to CREATE/UPDATE for item rev level Single Row UDA when change order be created
2893 --Current UDA chanage be put in change order controll since rev level UDA will defaulted from
2894 --current revision when new revision created in java code. For this case, rev level UDA defauled when the new revision
2895 --is created by change Service ChangeImportManager.createItemRevChangeMethodRequests.
2896 IF l_data_level_col_exists AND l_add_all_to_cm = 'Y' THEN
2897 l_dynamic_sql := l_dynamic_sql || ' AND NVL(UAI2.DATA_LEVEL_ID,'||G_NULL_TOKEN_NUM||') <> ' ||l_item_rev_dl_id ;
2898 END IF;
2899 ELSE
2900
2901 l_dynamic_sql :=
2902 ' UPDATE '||p_interface_table_name||' UAI2
2903 SET UAI2.TRANSACTION_TYPE = DECODE((SELECT COUNT(*) FROM '|| l_ext_vl_name ||' WHERE 1=1 '||l_concat_pk_cols_UAI2||' AND ROWNUM<2 )'||
2904 ',0,'''||
2905 EGO_USER_ATTRS_DATA_PVT.G_CREATE_MODE||''','''||
2906 EGO_USER_ATTRS_DATA_PVT.G_UPDATE_MODE||''')
2907 WHERE UAI2.DATA_SET_ID = :data_set_id
2908 AND UAI2.ATTR_GROUP_TYPE = :attr_group_type
2909 AND UAI2.PROCESS_STATUS = '||G_PS_IN_PROCESS||'
2910 AND UAI2.TRANSACTION_TYPE = '''||EGO_USER_ATTRS_DATA_PVT.G_SYNC_MODE||'''
2911 AND (SELECT MULTI_ROW FROM EGO_FND_DSC_FLX_CTX_EXT FLX_EXT
2912 WHERE DESCRIPTIVE_FLEX_CONTEXT_CODE = UAI2.ATTR_GROUP_INT_NAME
2913 AND APPLICATION_ID = :application_id
2914 AND DESCRIPTIVE_FLEXFIELD_NAME = :attr_group_type) <> ''Y'' ';
2915
2916 END IF;
2917 code_debug(' After updating the transaction type for Single Row AGs ');
2918 code_debug(l_dynamic_sql);
2919 EXECUTE IMMEDIATE l_dynamic_sql
2920 USING p_data_set_id, p_attr_group_type, p_application_id, p_attr_group_type;
2921 l_dynamic_sql := ' ';
2922
2923 code_debug(' After updating the transaction type for Single Row AGs ',1);
2924 code_debug(' The sql for updating transaction type for SR AGs is :'||l_dynamic_sql,3);
2925
2926 -------------------------------------------------------------------------
2927 -- Update other attributes if at least one attribute is failed for
2928 -- all attr group
2929 -------------------------------------------------------------------------
2930 -- considering the G_PS_BAD_ATTR_OR_AG_METADATA is the starting point
2931 -- for the intermittent errors.
2932
2933 /* Fix for bug#9678667 - Start */
2934 /*
2935 EXECUTE IMMEDIATE
2936 'UPDATE '||p_interface_table_name||' UAI1' ||
2937 ' SET UAI1.PROCESS_STATUS = UAI1.PROCESS_STATUS + '||G_PS_OTHER_ATTRS_INVALID||
2938 ' WHERE UAI1.DATA_SET_ID = '||p_data_set_id||
2939 ' AND BITAND(PROCESS_STATUS,'||G_PS_OTHER_ATTRS_INVALID||') = 0'||
2940 ' AND UAI1.ROW_IDENTIFIER IN'||
2941 ' (SELECT DISTINCT UAI2.ROW_IDENTIFIER'||
2942 ' FROM '||p_interface_table_name||' UAI2'||
2943 ' WHERE UAI2.DATA_SET_ID = '||p_data_set_id||
2944 ' AND UAI2.PROCESS_STATUS >= '||G_PS_BAD_ATTR_OR_AG_METADATA ||
2945 ' AND UAI2.ATTR_GROUP_INT_NAME = UAI1.ATTR_GROUP_INT_NAME)';
2946 */
2947
2948 EXECUTE IMMEDIATE
2949 'UPDATE '||p_interface_table_name||' UAI1' ||
2950 ' SET UAI1.PROCESS_STATUS = UAI1.PROCESS_STATUS + '||G_PS_OTHER_ATTRS_INVALID||
2951 ' WHERE UAI1.DATA_SET_ID = :data_set_id '||
2952 ' AND BITAND(PROCESS_STATUS,'||G_PS_OTHER_ATTRS_INVALID||') = 0'||
2953 ' AND (UAI1.ROW_IDENTIFIER, UAI1.ATTR_GROUP_INT_NAME) IN '||
2954 ' (SELECT /*+ UNNEST CARDINALITY(UAI2,10) INDEX(UAI2,EGO_ITM_USR_ATTR_INTRFC_N3) */ '|| /* Bug 9678667 */
2955 ' UAI2.ROW_IDENTIFIER, UAI2.ATTR_GROUP_INT_NAME '||
2956 ' FROM '||p_interface_table_name||' UAI2'||
2957 ' WHERE UAI2.DATA_SET_ID = :data_set_id '||
2958 ' AND UAI2.PROCESS_STATUS >= '||G_PS_BAD_ATTR_OR_AG_METADATA ||
2959 ' )'
2960 USING p_data_set_id, p_data_set_id;
2961 /* Fix for bug#9678667 - End */
2962
2963
2964
2965 --=============================--
2966 -- ERRORING OUT OF FAILED ROWS --
2967 --=============================--
2968
2969 OPEN l_dynamic_dist_ag_cursor FOR
2970 ' SELECT /*+ use_concat index(UAI1,EGO_ITM_USR_ATTR_INTRFC_N3) */ /* Bug 9678667 */
2971 DISTINCT ATTR_GROUP_INT_NAME
2972 FROM '||p_interface_table_name||' UAI1
2973 WHERE DATA_SET_ID = :data_set_id
2974 AND (UAI1.PROCESS_STATUS < '||G_PS_IN_PROCESS||' OR UAI1.PROCESS_STATUS > '||G_PS_IN_PROCESS||')' /* Bug 9678667 */
2975 USING p_data_set_id;
2976 LOOP
2977 FETCH l_dynamic_dist_ag_cursor INTO l_attr_group_intf_rec;
2978 EXIT WHEN l_dynamic_dist_ag_cursor%NOTFOUND;
2979
2980 l_attr_group_metadata_obj := EGO_USER_ATTRS_COMMON_PVT.Get_Attr_Group_Metadata(
2981 p_attr_group_id => NULL
2982 ,p_application_id => p_application_id
2983 ,p_attr_group_type => p_attr_group_type
2984 ,p_attr_group_name => l_attr_group_intf_rec.ATTR_GROUP_INT_NAME
2985 );
2986
2987 ----------------------------------------------------
2988 -- reporting of errors for all failed rows belonging
2989 -- to this attr grp.
2990 ----------------------------------------------------
2991 Log_Errors_Now(
2992 p_entity_id => p_entity_id
2993 ,p_entity_index => p_entity_index
2994 ,p_entity_code => p_entity_code
2995 ,p_object_name => p_object_name
2996 ,p_pk1_column_name => l_pk1_column_name
2997 ,p_pk2_column_name => l_pk2_column_name
2998 ,p_pk3_column_name => l_pk3_column_name
2999 ,p_pk4_column_name => l_pk4_column_name
3000 ,p_pk5_column_name => l_pk5_column_name
3001 ,p_classification_col_name => l_class_code_column_name
3002 ,p_interface_table_name => p_interface_table_name
3003 ,p_err_col_static_sql => l_err_col_static_sql
3004 ,p_err_where_static_sql => l_err_where_static_sql
3005 ,p_attr_grp_meta_obj => l_attr_group_metadata_obj
3006 ,p_data_set_id => p_data_set_id /*Fix for bug#9678667. Literal to bind*/
3007 );
3008
3009 END LOOP;
3010 -- Bug : 4099546
3011 CLOSE l_dynamic_dist_ag_cursor;
3012 --------------------------------------------------
3013 -- MARKING ALL THE ROWS AS 3 WHICH HAVE ERRORED --
3014 --------------------------------------------------
3015 --considering the G_PS_BAD_ATTR_OR_AG_METADATA is the starting point for the intermittent errors.
3016 l_dynamic_sql :=
3017 'UPDATE /*+ INDEX(UAI1,EGO_ITM_USR_ATTR_INTRFC_N3) */ '||p_interface_table_name||' UAI1 '||
3018 /* Bug 9678667 */
3019 ' SET UAI1.PROCESS_STATUS = '||G_PS_GENERIC_ERROR||
3020 ' WHERE UAI1.DATA_SET_ID = :data_set_id '||--p_data_set_id||
3021 ' AND UAI1.ROW_IDENTIFIER IN '||
3022 ' (SELECT DISTINCT UAI2.ROW_IDENTIFIER'||
3023 ' FROM '||p_interface_table_name||' UAI2 '||
3024 ' WHERE UAI2.DATA_SET_ID = :data_set_id '||--p_data_set_id||
3025 ' AND UAI2.PROCESS_STATUS >= '||G_PS_BAD_ATTR_OR_AG_METADATA ||')';
3026 EXECUTE IMMEDIATE l_dynamic_sql
3027 USING p_data_set_id, p_data_set_id;/*Fix for bug#9678667. Literal to bind*/
3028
3029 code_debug(' After error reporting and status updation of rows failed till now and before entering the attr levle validation loop',1);
3030
3031 END IF; --*p_validate-IF-1* Ending the IF for p_validate
3032 --=============================--
3033 -- ATTR-LEVEL LOOP VALIDATIONS --
3034 --=============================--
3035
3036 ----------------------------------------------------------------
3037 -- We will perform subsequent validations on a per-Attribute --
3038 -- basis, so we open a dynamic cursor to process all still- --
3039 -- valid lines in the data set; this cursor will have as many --
3040 -- rows as there are distinct Attributes in the data set --
3041 ----------------------------------------------------------------
3042 -- Fix for bug#9336604
3043 -- Changed the index hint
3044 --bug 13873323, improve performance
3045 OPEN l_dynamic_cursor FOR
3046 'SELECT -- /*+ LEADING(A, EXT, UOM, FLX_EXT, DISTINCT_ATTRS,AG_DL) INDEX(FLX_EXT EGO_FND_DSC_FLX_CTX_EXT_U2) INDEX(a FND_DESCR_FLEX_COL_USAGES_U2) USE_HASH(DISTINCT_ATTRS)*/
3047 -- /*+ LEADING(DISTINCT_ATTRS, FLX_EXT, A, EXT) */
3048 EXT.ATTR_ID,
3049 FLX_EXT.ATTR_GROUP_ID,
3050 DISTINCT_ATTRS.ATTR_GROUP_INT_NAME,
3051 FLX_EXT.MULTI_ROW MULTI_ROW_CODE,
3052 A.END_USER_COLUMN_NAME ATTR_INT_NAME,
3053 EXT.DATA_TYPE,
3054 EXT.UNIQUE_KEY_FLAG,
3055 A.DEFAULT_VALUE,
3056 VS.MAXIMUM_SIZE,
3057 A.REQUIRED_FLAG,
3058 VS.FLEX_VALUE_SET_ID VALUE_SET_ID,
3059 VS.VALIDATION_TYPE,
3060 VS.MINIMUM_VALUE,
3061 VS.MAXIMUM_VALUE,
3062 UOM.UOM_CODE,
3063 UOM.UOM_CLASS,
3064 DISTINCT_ATTRS.DATA_LEVEL_ID,
3065 FNV.FUNCTION_NAME VIEW_PRIVILEGE,
3066 FNE.FUNCTION_NAME EDIT_PRIVILEGE
3067 FROM (SELECT /*+ NO_MERGE */
3068 DISTINCT ATTR_GROUP_INT_NAME, ATTR_GROUP_ID
3069 ,ATTR_INT_NAME
3070 ,DATA_LEVEL_ID
3071 FROM '||p_interface_table_name||'
3072 WHERE DATA_SET_ID = :data_set_id
3073 AND ATTR_GROUP_TYPE = :attr_group_type
3074 AND PROCESS_STATUS = '||G_PS_IN_PROCESS||') DISTINCT_ATTRS,
3075 EGO_FND_DSC_FLX_CTX_EXT FLX_EXT,
3076 (SELECT application_id, descriptive_flexfield_name, descriptive_flex_context_code,
3077 application_column_name, end_user_column_name, DEFAULT_VALUE,
3078 required_flag, flex_value_set_id, column_seq_num
3079 FROM fnd_descr_flex_column_usages
3080 WHERE ''Y'' = enabled_flag
3081 AND application_id IN (SELECT DISTINCT application_id
3082 FROM ego_fnd_dsc_flx_ctx_ext)) a,
3083 EGO_FND_DF_COL_USGS_EXT EXT,
3084 EGO_ATTR_GROUP_DL AG_DL,
3085 FND_FLEX_VALUE_SETS VS,
3086 MTL_UNITS_OF_MEASURE UOM,
3087 FND_FORM_FUNCTIONS FNV,
3088 FND_FORM_FUNCTIONS FNE
3089 WHERE DISTINCT_ATTRS.ATTR_GROUP_ID = FLX_EXT.ATTR_GROUP_ID
3090 AND flx_ext.application_id = ext.application_id
3091 AND flx_ext.descriptive_flexfield_name = ext.descriptive_flexfield_name
3092 AND flx_ext.descriptive_flex_context_code = ext.descriptive_flex_context_code
3093 --AND ''Y'' = a.enabled_flag
3094 AND a.application_id = flx_ext.application_id
3095 AND a.descriptive_flexfield_name = flx_ext.descriptive_flexfield_name
3096 AND a.descriptive_flex_context_code = flx_ext.descriptive_flex_context_code
3097 AND a.application_column_name = ext.application_column_name
3098 AND a.end_user_column_name = distinct_attrs.attr_int_name
3099 AND A.FLEX_VALUE_SET_ID = VS.FLEX_VALUE_SET_ID(+)
3100 AND EXT.UOM_CLASS = UOM.UOM_CLASS(+)
3101 AND ''Y'' = UOM.BASE_UOM_FLAG(+)
3102 AND AG_DL.ATTR_GROUP_ID = FLX_EXT.ATTR_GROUP_ID
3103 AND AG_DL.DATA_LEVEL_ID = DISTINCT_ATTRS.DATA_LEVEL_ID
3104 AND AG_DL.VIEW_PRIVILEGE_ID = FNV.FUNCTION_ID(+)
3105 AND AG_DL.EDIT_PRIVILEGE_ID = FNE.FUNCTION_ID(+)
3106 ORDER BY FLX_EXT.ATTR_GROUP_ID, A.COLUMN_SEQ_NUM'
3107 USING p_data_set_id, p_attr_group_type;
3108
3109 -- Fix for bug#9336604
3110 --LOOP
3111 -- FETCH l_dynamic_cursor INTO l_attr_metadata_rec;
3112 -- EXIT WHEN l_dynamic_cursor%NOTFOUND;
3113 FETCH l_dynamic_cursor BULK COLLECT INTO l_attr_metadata_rec;
3114 CLOSE l_dynamic_cursor;
3115
3116 /* bug 14672950 collection.FIRST will leads to an exception when collection does not have
3117 records in it. It is safe to validate the size of the collection before
3118 traversing through it.*/
3119 IF l_attr_metadata_rec.Count > 0 THEN
3120 FOR l_var IN l_attr_metadata_rec.FIRST .. l_attr_metadata_rec.LAST
3121 LOOP
3122
3123 code_debug('---------Inside the ATTR-LEVEL Validation loop: processing the attribute '||l_attr_metadata_rec(l_var).ATTR_INT_NAME||' in attribute group '||l_attr_metadata_rec(l_var).ATTR_GROUP_INT_NAME,2);
3124
3125 ------------------------------------------------------------
3126 -- First, we add this Attribute to our list of distinct --
3127 -- Attributes in the data set for use in later processing --
3128 ------------------------------------------------------------
3129 l_dist_attr_in_data_set_rec.ATTR_GROUP_ID :=
3130 l_attr_metadata_rec(l_var).ATTR_GROUP_ID;
3131 l_dist_attr_in_data_set_rec.ATTR_INT_NAME :=
3132 l_attr_metadata_rec(l_var).ATTR_INT_NAME;
3133 l_dist_attr_in_data_set_rec.ATTR_GROUP_INT_NAME :=
3134 l_attr_metadata_rec(l_var).ATTR_GROUP_INT_NAME;
3135 l_dist_attrs_in_data_set_table(l_dist_attrs_in_data_set_table.COUNT+1) :=
3136 l_dist_attr_in_data_set_rec;
3137
3138 ------------------------------------------------------
3139 -- We do all the validations only if p_validate has --
3140 -- been passed as true to the API --
3141 ------------------------------------------------------
3142 IF (p_validate) THEN -- search for --*p_validate-IF-1.5*
3143
3144 ------------------------------------------------
3145 -- We only want to check privileges for each --
3146 -- Attribute Group when we first encounter it --
3147 ------------------------------------------------
3148 IF (l_prev_ag_id_priv IS NULL OR
3149 l_prev_ag_id_priv <> (l_attr_metadata_rec(l_var).ATTR_GROUP_ID||l_attr_metadata_rec(l_var).VIEW_PRIVILEGE||l_attr_metadata_rec(l_var).EDIT_PRIVILEGE)) THEN
3150
3151 -------------------------------------------------------------
3152 -- We update this so that the check above won't pass again --
3153 -- until we begin processing for another attribute group --
3154 -------------------------------------------------------------
3155 l_prev_ag_id_priv := l_attr_metadata_rec(l_var).ATTR_GROUP_ID||l_attr_metadata_rec(l_var).VIEW_PRIVILEGE||l_attr_metadata_rec(l_var).EDIT_PRIVILEGE;
3156
3157 ---------------------------------------------------------
3158 -- If the caller passed a predicate API name, we will --
3159 -- mark as errors all logical Attribute Group rows for --
3160 -- which the user does not have sufficient privileges --
3161 ---------------------------------------------------------
3162 IF (p_privilege_predicate_api_name IS NOT NULL) THEN
3163 --Bug NO :6433569 start
3164 --Getting the view privilege corresponding to the data level Id, if tha array is not null
3165 IF ( p_default_dl_view_priv_list IS NOT NULL AND p_default_dl_view_priv_list.COUNT <>0) THEN
3166 FOR i IN 1 .. p_default_dl_view_priv_list.COUNT
3167 LOOP
3168 IF (p_default_dl_view_priv_list(i).NAME = l_attr_metadata_rec(l_var).DATA_LEVEL_ID) THEN
3169 l_view_priv_to_check := NVL(l_attr_metadata_rec(l_var).VIEW_PRIVILEGE, p_default_dl_view_priv_list(i).VALUE);
3170 END IF;
3171 END LOOP;
3172 ELSE -- if the array is null or count is 0 then take the passed in view privilege.
3173 l_view_priv_to_check := NVL(l_attr_metadata_rec(l_var).VIEW_PRIVILEGE, p_default_view_privilege);
3174 END IF;
3175
3176 --Getting the edit privilege corresponding to the data level Id, if tha array is not null
3177 IF ( p_default_dl_edit_priv_list IS NOT NULL AND p_default_dl_edit_priv_list.COUNT <>0) THEN
3178 FOR i IN 1 .. p_default_dl_edit_priv_list.COUNT
3179 LOOP
3180 IF (p_default_dl_edit_priv_list(i).NAME = l_attr_metadata_rec(l_var).DATA_LEVEL_ID) THEN
3181 l_edit_priv_to_check := NVL(l_attr_metadata_rec(l_var).EDIT_PRIVILEGE, p_default_dl_edit_priv_list(i).VALUE);
3182 END IF;
3183 END LOOP;
3184 ELSE -- if the array is null or count is 0 then take the passed in edit privilege.
3185 l_edit_priv_to_check := NVL(l_attr_metadata_rec(l_var).EDIT_PRIVILEGE, p_default_edit_privilege);
3186 END IF;
3187
3188 --shifting them to the else condition above.
3189 --l_view_priv_to_check := NVL(l_attr_metadata_rec(l_var).VIEW_PRIVILEGE, p_default_view_privilege);
3190 --l_edit_priv_to_check := NVL(l_attr_metadata_rec(l_var).EDIT_PRIVILEGE, p_default_edit_privilege);
3191 --Bug NO :6433569 end
3192
3193 IF (l_view_priv_to_check IS NOT NULL OR
3194 l_edit_priv_to_check IS NOT NULL) THEN
3195
3196 -----------------------------------------------------------
3197 -- If we have not yet parsed the statement, we do so now --
3198 -- and keep the cursor open throughout our processing --
3199 -----------------------------------------------------------
3200 IF (l_priv_func_cursor_id IS NULL) THEN
3201
3202 l_priv_func_cursor_id := DBMS_SQL.Open_Cursor;
3203 l_dynamic_sql :=
3204 'BEGIN '||
3205 p_privilege_predicate_api_name||
3206 '(:obj_name, :party_id, :priv_name, :table_alias, :predicate); END;';
3207
3208 DBMS_SQL.Parse(l_priv_func_cursor_id, l_dynamic_sql, DBMS_SQL.NATIVE);
3209
3210 --------------------------------------------------------------
3211 -- These variables will not change across calls, so we only --
3212 -- need to bind them the first time we parse the statement --
3213 --------------------------------------------------------------
3214 DBMS_SQL.Bind_Variable(l_priv_func_cursor_id, ':obj_name', p_object_name);
3215 DBMS_SQL.Bind_Variable(l_priv_func_cursor_id, ':party_id', G_HZ_PARTY_ID);
3216 DBMS_SQL.Bind_Variable(l_priv_func_cursor_id, ':table_alias', 'UAI2');
3217 DBMS_SQL.Bind_Variable(l_priv_func_cursor_id, ':predicate', l_priv_predicate, 32767);
3218
3219 END IF;
3220
3221 IF (l_view_priv_to_check IS NOT NULL) THEN
3222
3223 code_debug(' Checking for View privelege '||l_view_priv_to_check,2);
3224
3225 DBMS_SQL.Bind_Variable(l_priv_func_cursor_id, ':priv_name', l_view_priv_to_check);
3226 l_dummy := DBMS_SQL.Execute(l_priv_func_cursor_id);
3227
3228 DBMS_SQL.Variable_Value(l_priv_func_cursor_id, ':predicate', l_priv_predicate);
3229
3230 code_debug(' The View privlege predicate is :'||l_priv_predicate,3);
3231
3232 ----------------------------------------------------------
3233 -- We interpret a NULL predicate as a pass for the user --
3234 ----------------------------------------------------------
3235 IF (l_priv_predicate IS NULL) THEN
3236 l_priv_predicate := '1=1';
3237 END IF;
3238 --------------------------------------------------------------
3239 -- We needn't use DBMS_SQL here because this statement will --
3240 -- change too much in each loop (because of the predicate) --
3241 -- for us to gain anything by keeping the cursor open --
3242 --------------------------------------------------------------
3243 EXECUTE IMMEDIATE
3244 'UPDATE '||p_interface_table_name||' UAI1
3245 SET UAI1.PROCESS_STATUS = '||G_PS_NO_PRIVILEGES||'
3246 WHERE UAI1.DATA_SET_ID = :p_data_set_id
3247 AND UAI1.PROCESS_STATUS = '||G_PS_IN_PROCESS||'
3248 AND UAI1.ROW_IDENTIFIER IN
3249 (
3250 /* Fix for bug#9678667 - added below hint */
3251 SELECT /*+ index(UAI2,EGO_ITM_USR_ATTR_INTRFC_N1) */
3252 DISTINCT UAI2.ROW_IDENTIFIER
3253 FROM '||p_interface_table_name||' UAI2
3254 WHERE UAI2.DATA_SET_ID = :p_data_set_id
3255 AND UAI2.PROCESS_STATUS = '||G_PS_IN_PROCESS||'
3256 AND (UAI2.ATTR_GROUP_INT_NAME = :attr_group_name OR
3257 UAI2.ATTR_GROUP_ID = :attr_group_id)
3258 AND NVL(UAI2.DATA_LEVEL_ID,-1) = NVL(:data_level_id,-1)
3259 AND NOT '||l_priv_predicate||'
3260 )'
3261 USING p_data_set_id, p_data_set_id,
3262 l_attr_metadata_rec(l_var).ATTR_GROUP_INT_NAME,
3263 l_attr_metadata_rec(l_var).ATTR_GROUP_ID,
3264 l_attr_metadata_rec(l_var).DATA_LEVEL_ID;
3265
3266 code_debug(' After validation for view privilege ',2);
3267 END IF;
3268
3269 IF (l_edit_priv_to_check IS NOT NULL) THEN
3270
3271 code_debug(' Checking for Edit privelege '||l_edit_priv_to_check,2);
3272
3273 DBMS_SQL.Bind_Variable(l_priv_func_cursor_id, ':priv_name', l_edit_priv_to_check);
3274 l_dummy := DBMS_SQL.Execute(l_priv_func_cursor_id);
3275 DBMS_SQL.Variable_Value(l_priv_func_cursor_id, ':predicate', l_priv_predicate);
3276
3277 code_debug(' The Edit privlege predicate is :'||l_priv_predicate,3);
3278
3279 --------------------------------------------------------------
3280 -- As above, we needn't use DBMS_SQL because the statement --
3281 -- changes too much in each loop (because of the predicate) --
3282 -- for us to gain anything by keeping the cursor open --
3283 --------------------------------------------------------------
3284
3285 EXECUTE IMMEDIATE
3286 'UPDATE '||p_interface_table_name||' UAI1
3287 SET UAI1.PROCESS_STATUS = '||G_PS_NO_PRIVILEGES||'
3288 WHERE UAI1.DATA_SET_ID = :p_data_set_id
3289 AND UAI1.PROCESS_STATUS = '||G_PS_IN_PROCESS||'
3290 AND UAI1.ROW_IDENTIFIER IN
3291 (
3292 /* Fix for bug#9678667 - added below hint */
3293 SELECT /*+ index(UAI2,EGO_ITM_USR_ATTR_INTRFC_N1) */
3294 DISTINCT UAI2.ROW_IDENTIFIER
3295 FROM '||p_interface_table_name||' UAI2
3296 WHERE UAI2.DATA_SET_ID = :p_data_set_id
3297 AND UAI2.PROCESS_STATUS = '||G_PS_IN_PROCESS||'
3298 AND (UAI2.ATTR_GROUP_INT_NAME = :attr_group_name OR
3299 UAI2.ATTR_GROUP_ID = :attr_group_id)
3300 AND NVL(UAI2.DATA_LEVEL_ID,-1) = NVL(:data_level_id,-1)
3301 AND NOT '||l_priv_predicate||'
3302 )'
3303 USING p_data_set_id, p_data_set_id,
3304 l_attr_metadata_rec(l_var).ATTR_GROUP_INT_NAME,
3305 l_attr_metadata_rec(l_var).ATTR_GROUP_ID,
3306 l_attr_metadata_rec(l_var).DATA_LEVEL_ID;
3307
3308 code_debug(' After validation for edit privilege ',2);
3309
3310 END IF;
3311 END IF;
3312 END IF;
3313 END IF;
3314
3315
3316 ------------------------------------------------------------------
3317 -- We would do rest of the validations only once per attribute --
3318 -- It should not be repeated for every data level. --
3319 ------------------------------------------------------------------
3320 IF(l_priv_attr_id <> l_attr_metadata_rec(l_var).ATTR_ID) THEN -- if not previously processed
3321
3322 -----------------------------------------------------
3323 -- Validating, replacing the NULL characters here.
3324 -----------------------------------------------------
3325
3326 EXECUTE IMMEDIATE 'SELECT TO_CHAR('||G_NULL_DATE_VAL||','''||EGO_USER_ATTRS_COMMON_PVT.G_DATE_FORMAT||'''), TO_CHAR('||G_NULL_DATE_VAL||', ''SYYYY-MM-DD'') FROM DUAL '
3327 INTO l_null_date_time_value,l_null_date_value;
3328
3329 l_dynamic_sql := 'UPDATE ';
3330 IF (l_attr_metadata_rec(l_var).DATA_TYPE = EGO_EXT_FWK_PUB.G_NUMBER_DATA_TYPE) THEN
3331 l_dynamic_sql := l_dynamic_sql ||p_interface_table_name||' SET '||' ATTR_VALUE_NUM = DECODE(ATTR_DISP_VALUE, '''||G_NULL_NUM_VAL_STR||''', NULL, '''||G_NULL_CHAR_VAL||''', NULL, NULL, NULL, ATTR_VALUE_NUM) '||
3332 ' ,ATTR_DISP_VALUE = DECODE(ATTR_DISP_VALUE, '''||G_NULL_NUM_VAL_STR||''', NULL, '''||G_NULL_CHAR_VAL||''', NULL, NULL, NULL, ATTR_DISP_VALUE) '||
3333 ' ,PROCESS_STATUS = PROCESS_STATUS + DECODE (ATTR_DISP_VALUE,'''||G_NULL_NUM_VAL_STR||''', 0 , '''||G_NULL_CHAR_VAL||''', 0 , '||
3334 ' NULL, 0 , '||G_PS_INVALID_NUMBER_DATA||' )'||
3335 ' WHERE DATA_SET_ID = :data_set_id '||
3336 ' AND PROCESS_STATUS = '||G_PS_IN_PROCESS||' '||
3337 ' AND ATTR_INT_NAME = :attr_int_name '||
3338 ' AND ATTR_GROUP_INT_NAME = :attr_group_int_name '||
3339 ' AND ATTR_GROUP_TYPE = :attr_group_type '||
3340 ' AND ( ATTR_VALUE_NUM = :null_num '||
3341 ' OR ATTR_DISP_VALUE = :null_num_val_disp '||
3342 ' OR ATTR_DISP_VALUE = :null_num_disp '||
3343 ' OR ATTR_DISP_VALUE = :null_date_disp '||
3344 ' OR ATTR_DISP_VALUE = :null_date_val_disp '||
3345 ' OR ATTR_DISP_VALUE = :null_char_val) ';
3346 EXECUTE IMMEDIATE l_dynamic_sql
3347 USING p_data_set_id, l_attr_metadata_rec(l_var).ATTR_INT_NAME, l_attr_metadata_rec(l_var).ATTR_GROUP_INT_NAME,
3348 p_attr_group_type, TO_NUMBER(G_NULL_NUM_VAL_STR),--bugFix:5297926
3349 G_NULL_NUM_VAL_STR , G_NULL_NUM_VAL, G_NULL_DATE_VAL,l_null_date_time_value, G_NULL_CHAR_VAL;
3350
3351 ELSIF (l_attr_metadata_rec(l_var).DATA_TYPE = EGO_EXT_FWK_PUB.G_DATE_DATA_TYPE
3352 OR l_attr_metadata_rec(l_var).DATA_TYPE = EGO_EXT_FWK_PUB.G_DATE_TIME_DATA_TYPE) THEN
3353 l_dynamic_sql := l_dynamic_sql ||p_interface_table_name||' SET '||' ATTR_VALUE_DATE = DECODE(ATTR_DISP_VALUE, '''||l_null_date_time_value||''', NULL,'||
3354 ' '''||l_null_date_value||''', NULL, '''||G_NULL_CHAR_VAL||''', NULL, NULL, NULL, ATTR_VALUE_DATE) '||
3355 ' ,ATTR_DISP_VALUE = DECODE(ATTR_DISP_VALUE, '''||l_null_date_time_value||''', NULL, '||
3356 ' '''||l_null_date_value||''',NULL, '''||G_NULL_CHAR_VAL||''', NULL, NULL, NULL, ATTR_DISP_VALUE) '||
3357 ' ,PROCESS_STATUS = PROCESS_STATUS + DECODE (ATTR_DISP_VALUE,'''||l_null_date_time_value||''', 0 , '||
3358 ' '''||l_null_date_value||''',0 , '''||G_NULL_CHAR_VAL||''', 0, '||
3359 ' NULL, 0 , '||G_PS_INVALID_DATE_DATA||' )'||
3360 ' WHERE DATA_SET_ID = :data_set_id '||
3361 ' AND PROCESS_STATUS = '||G_PS_IN_PROCESS||' '||
3362 ' AND ATTR_INT_NAME = :attr_int_name '||
3363 ' AND ATTR_GROUP_INT_NAME = :attr_group_int_name '||
3364 ' AND ATTR_GROUP_TYPE = :attr_group_type '||
3365 ' AND ( ATTR_VALUE_DATE = :null_date '||
3366 ' OR ATTR_DISP_VALUE = :null_num_val_disp '||
3367 ' OR ATTR_DISP_VALUE = :null_num_disp '||
3368 ' OR ATTR_DISP_VALUE = :null_date_disp '||
3369 ' OR ATTR_DISP_VALUE = :null_date_time_val_disp '||
3370 ' OR ATTR_DISP_VALUE = :null_date_val_disp '||
3371 ' OR ATTR_DISP_VALUE = :null_char_val) ';
3372
3373 EXECUTE IMMEDIATE l_dynamic_sql
3374 USING p_data_set_id, l_attr_metadata_rec(l_var).ATTR_INT_NAME, l_attr_metadata_rec(l_var).ATTR_GROUP_INT_NAME,
3375 p_attr_group_type, TO_DATE(l_null_date_time_value,EGO_USER_ATTRS_COMMON_PVT.G_DATE_FORMAT),
3376 G_NULL_NUM_VAL_STR , G_NULL_NUM_VAL, G_NULL_DATE_VAL,l_null_date_time_value,l_null_date_value,G_NULL_CHAR_VAL;
3377
3378 ELSE
3379 /* Fix for bug#9678667 - Added below hint */
3380 l_dynamic_sql := l_dynamic_sql ||' /*+ index(EGO_ITM_USR_ATTR_INTRFC, EGO_ITM_USR_ATTR_INTRFC_N1) */ ' ||p_interface_table_name||
3381 ' SET '||' ATTR_VALUE_STR = NULL '||
3382 ' , ATTR_DISP_VALUE = NULL '||
3383 ' WHERE DATA_SET_ID = :data_set_id '||
3384 ' AND PROCESS_STATUS = '||G_PS_IN_PROCESS||' '||
3385 ' AND ATTR_INT_NAME = :attr_int_name '||
3386 ' AND ATTR_GROUP_INT_NAME = :attr_group_int_name '||
3387 ' AND ATTR_GROUP_TYPE = :attr_group_type '||
3388 ' AND (ATTR_VALUE_STR = :null_str '||
3389 ' OR ATTR_DISP_VALUE = :null_char_val) ';
3390
3391 EXECUTE IMMEDIATE l_dynamic_sql
3392 USING p_data_set_id, l_attr_metadata_rec(l_var).ATTR_INT_NAME, l_attr_metadata_rec(l_var).ATTR_GROUP_INT_NAME,
3393 p_attr_group_type, G_NULL_CHAR_VAL,
3394 G_NULL_CHAR_VAL;
3395
3396 END IF;
3397
3398
3399
3400
3401 ----------------------------------------------------------------------------------
3402 -- UOM VALIDATIONS FOR NUMBER TYPE ATTRIBUTES HAVING A UOM CLASS DEFINED.
3403 ----------------------------------------------------------------------------------
3404 IF(l_attr_metadata_rec(l_var).UOM_CLASS IS NOT NULL) THEN
3405
3406 ----------------------------------------------------------------------------------
3407 -- Here we validate the UOM column Display/internal value in the interface table
3408 ----------------------------------------------------------------------------------
3409 l_dynamic_sql :=
3410 'UPDATE '||p_interface_table_name||' INTF
3411 SET PROCESS_STATUS = PROCESS_STATUS + '||G_PS_INVALID_UOM||'
3412 WHERE DATA_SET_ID = :data_set_id
3413 AND PROCESS_STATUS = '||G_PS_IN_PROCESS||'
3414 AND ATTR_INT_NAME = :attr_internal_name
3415 AND ATTR_GROUP_INT_NAME = :attr_group_int_name
3416 AND ( (ATTR_UOM_DISP_VALUE IS NOT NULL AND ATTR_VALUE_UOM IS NULL
3417 AND NOT EXISTS (SELECT ''X'' FROM MTL_UNITS_OF_MEASURE_TL
3418 WHERE UOM_CLASS = :uom_class
3419 AND UNIT_OF_MEASURE_TL = INTF.ATTR_UOM_DISP_VALUE
3420 AND ROWNUM =1 ))
3421 OR(ATTR_VALUE_UOM IS NOT NULL
3422 AND NOT EXISTS (SELECT ''X'' FROM MTL_UNITS_OF_MEASURE_TL
3423 WHERE UOM_CLASS = :uom_class
3424 AND UOM_CODE = INTF.ATTR_VALUE_UOM
3425 AND ROWNUM =1 ))
3426 )' ;
3427 EXECUTE IMMEDIATE l_dynamic_sql
3428 USING p_data_Set_id, l_attr_metadata_rec(l_var).ATTR_INT_NAME, l_attr_metadata_rec(l_var).ATTR_GROUP_INT_NAME,
3429 l_attr_metadata_rec(l_var).UOM_CLASS, l_attr_metadata_rec(l_var).UOM_CLASS;
3430
3431 ----------------------------------------------
3432 -- Here we populate the internal UOM value
3433 ----------------------------------------------
3434 l_dynamic_sql :=
3435 'UPDATE '||p_interface_table_name||' INTF
3436 SET ATTR_VALUE_UOM = NVL2(ATTR_UOM_DISP_VALUE,
3437 (SELECT UOM_CODE FROM MTL_UNITS_OF_MEASURE_TL
3438 WHERE UOM_CLASS = :uom_class
3439 AND UNIT_OF_MEASURE_TL = INTF.ATTR_UOM_DISP_VALUE
3440 AND LANGUAGE = USERENV(''LANG'')),null
3441 )
3442 WHERE DATA_SET_ID = :data_set_id
3443 AND PROCESS_STATUS = '||G_PS_IN_PROCESS||'
3444 AND ATTR_INT_NAME = :attr_internal_name
3445 AND ATTR_GROUP_INT_NAME = :attr_group_int_name
3446 AND ATTR_GROUP_TYPE = :attr_group_type
3447 AND ATTR_VALUE_UOM IS NULL ';
3448
3449 EXECUTE IMMEDIATE l_dynamic_sql
3450 USING l_attr_metadata_rec(l_var).UOM_CLASS, p_data_Set_id,
3451 l_attr_metadata_rec(l_var).ATTR_INT_NAME, l_attr_metadata_rec(l_var).ATTR_GROUP_INT_NAME,p_attr_group_type;
3452
3453 END IF;
3454
3455
3456
3457 -- 4043670 added for trans independent type value sets as well
3458 IF (l_attr_metadata_rec(l_var).VALIDATION_TYPE IN
3459 (EGO_EXT_FWK_PUB.G_INDEPENDENT_VALIDATION_CODE, EGO_EXT_FWK_PUB.G_TRANS_IND_VALIDATION_CODE)
3460 ) THEN
3461
3462 code_debug(' This attribute has an indipendednt value set, validating for value set id -'||l_attr_metadata_rec(l_var).VALUE_SET_ID ,2);
3463
3464 IF (l_attr_metadata_rec(l_var).DATA_TYPE = EGO_EXT_FWK_PUB.G_NUMBER_DATA_TYPE) THEN
3465 IF (l_ivs_num_cursor_id IS NULL) THEN
3466 l_ivs_num_cursor_id := DBMS_SQL.Open_Cursor;
3467 l_dynamic_sql :=
3468 'UPDATE '||p_interface_table_name||'
3469 SET ATTR_VALUE_NUM = TO_NUMBER((SELECT DISTINCT FLEX_VALUE
3470 FROM FND_FLEX_VALUES_VL
3471 WHERE ENABLED_FLAG = ''Y''
3472 AND (NVL(START_DATE_ACTIVE, SYSDATE - 1) < SYSDATE)
3473 AND (NVL(END_DATE_ACTIVE, SYSDATE + 1) > SYSDATE)
3474 AND FLEX_VALUE_SET_ID = :value_set_id
3475 AND (FLEX_VALUE_MEANING = ATTR_DISP_VALUE OR TO_NUMBER(FLEX_VALUE) = ATTR_VALUE_NUM)) /**bug 13589373**/
3476 ),
3477 PROCESS_STATUS = NVL2(ATTR_VALUE_NUM,-- IF THE ATTR VALUE IS NULL WE VALIDATE THE VS ACCORDING TO ATTR_DISP_VAL OTHERWISE VALIDATION IS AGAINST THE ATTR_VALUE_* TAKEN AS INTERNAL_NAME OF VS
3478 (NVL2((SELECT DISTINCT FLEX_VALUE
3479 FROM FND_FLEX_VALUES_VL
3480 WHERE ENABLED_FLAG = ''Y''
3481 AND (NVL(START_DATE_ACTIVE, SYSDATE - 1) < SYSDATE)
3482 AND (NVL(END_DATE_ACTIVE, SYSDATE + 1) > SYSDATE)
3483 AND FLEX_VALUE_SET_ID = :value_set_id
3484 --AND FLEX_VALUE = TO_CHAR(ATTR_VALUE_NUM)),
3485 AND (TO_NUMBER(FLEX_VALUE) = ATTR_VALUE_NUM OR FLEX_VALUE_MEANING = ATTR_DISP_VALUE)),/*Bug:9735836,if number is decimal and less than 1,to char will remove "0" */
3486 (PROCESS_STATUS),
3487 (PROCESS_STATUS + '||G_PS_VALUE_NOT_IN_VS||'))
3488 ),
3489 (NVL2((SELECT DISTINCT FLEX_VALUE
3490 FROM FND_FLEX_VALUES_VL
3491 WHERE ENABLED_FLAG = ''Y''
3492 AND (NVL(START_DATE_ACTIVE, SYSDATE - 1) < SYSDATE)
3493 AND (NVL(END_DATE_ACTIVE, SYSDATE + 1) > SYSDATE)
3494 AND FLEX_VALUE_SET_ID = :value_set_id
3495 AND FLEX_VALUE_MEANING = ATTR_DISP_VALUE),
3496 (PROCESS_STATUS),
3497 (PROCESS_STATUS + '||G_PS_VALUE_NOT_IN_VS||'))
3498 )
3499 )
3500 WHERE DATA_SET_ID = :data_set_id
3501 AND (PROCESS_STATUS = '||G_PS_IN_PROCESS||' OR PROCESS_STATUS > '||G_PS_BAD_ATTR_OR_AG_METADATA||' )
3502 AND BITAND(PROCESS_STATUS, '||G_PS_NO_PRIVILEGES||') = 0
3503 AND ATTR_INT_NAME = :attr_int_name
3504 AND (ATTR_DISP_VALUE IS NOT NULL OR ATTR_VALUE_NUM IS NOT NULL)
3505 AND ATTR_GROUP_INT_NAME = :attr_group_int_name';
3506
3507 DBMS_SQL.Parse(l_ivs_num_cursor_id, l_dynamic_sql, DBMS_SQL.NATIVE);
3508
3509 -----------------------------------------------------------
3510 -- Data set ID will not change across calls, so we only --
3511 -- need to bind it the first time we parse the statement --
3512 -----------------------------------------------------------
3513 DBMS_SQL.Bind_Variable(l_ivs_num_cursor_id, ':data_set_id', p_data_set_id);
3514
3515 END IF;
3516 DBMS_SQL.Bind_Variable(l_ivs_num_cursor_id, ':value_set_id', l_attr_metadata_rec(l_var).VALUE_SET_ID);
3517 DBMS_SQL.Bind_Variable(l_ivs_num_cursor_id, ':attr_int_name', l_attr_metadata_rec(l_var).ATTR_INT_NAME);
3518 DBMS_SQL.Bind_Variable(l_ivs_num_cursor_id, ':attr_group_int_name', l_attr_metadata_rec(l_var).ATTR_GROUP_INT_NAME);
3519 l_dummy := DBMS_SQL.Execute(l_ivs_num_cursor_id);
3520
3521 ELSIF (l_attr_metadata_rec(l_var).DATA_TYPE = EGO_EXT_FWK_PUB.G_DATE_DATA_TYPE) THEN
3522 IF (l_ivs_date_cursor_id IS NULL) THEN
3523
3524 l_ivs_date_cursor_id := DBMS_SQL.Open_Cursor;
3525 l_dynamic_sql :=
3526 'UPDATE '||p_interface_table_name||'
3527 SET ATTR_VALUE_DATE = (SELECT DISTINCT TRUNC(EGO_USER_ATTRS_BULK_PVT.Get_Date(FLEX_VALUE,'''||EGO_USER_ATTRS_COMMON_PVT.G_DATE_FORMAT||'''))
3528 FROM FND_FLEX_VALUES_VL
3529 WHERE ENABLED_FLAG = ''Y''
3530 AND (NVL(START_DATE_ACTIVE, SYSDATE - 1) < SYSDATE)
3531 AND (NVL(END_DATE_ACTIVE, SYSDATE + 1) > SYSDATE)
3532 AND FLEX_VALUE_SET_ID = :value_set_id
3533 AND (FLEX_VALUE_MEANING = ATTR_DISP_VALUE OR FLEX_VALUE = TO_CHAR(ATTR_VALUE_DATE,''YYYY-MM-DD HH24:MI:SS'')) /**bug 13589373**/
3534 ),
3535 PROCESS_STATUS = NVL2(ATTR_VALUE_DATE,-- IF THE ATTR VALUE IS NULL WE VALIDATE THE VS ACCORDING TO ATTR_DISP_VAL OTHERWISE VALIDATION IS AGAINST THE ATTR_VALUE_* TAKEN AS INTERNAL_NAME OF VS
3536 (NVL2((SELECT DISTINCT FLEX_VALUE
3537 FROM FND_FLEX_VALUES_VL
3538 WHERE ENABLED_FLAG = ''Y''
3539 AND (NVL(START_DATE_ACTIVE, SYSDATE - 1) < SYSDATE)
3540 AND (NVL(END_DATE_ACTIVE, SYSDATE + 1) > SYSDATE)
3541 AND FLEX_VALUE_SET_ID = :value_set_id
3542 AND (FLEX_VALUE = TO_CHAR(ATTR_VALUE_DATE,''YYYY-MM-DD HH24:MI:SS'') OR FLEX_VALUE_MEANING = ATTR_DISP_VALUE)),
3543 (PROCESS_STATUS),
3544 (PROCESS_STATUS + '||G_PS_VALUE_NOT_IN_VS||'))
3545 ),
3546 (NVL2((SELECT DISTINCT FLEX_VALUE
3547 FROM FND_FLEX_VALUES_VL
3548 WHERE ENABLED_FLAG = ''Y''
3549 AND (NVL(START_DATE_ACTIVE, SYSDATE - 1) < SYSDATE)
3550 AND (NVL(END_DATE_ACTIVE, SYSDATE + 1) > SYSDATE)
3551 AND FLEX_VALUE_SET_ID = :value_set_id
3552 AND FLEX_VALUE_MEANING = ATTR_DISP_VALUE),
3553 (PROCESS_STATUS),
3554 (PROCESS_STATUS + '||G_PS_VALUE_NOT_IN_VS||'))
3555 )
3556 )
3557 WHERE DATA_SET_ID = :data_set_id
3558 AND (PROCESS_STATUS = '||G_PS_IN_PROCESS||' OR PROCESS_STATUS > '||G_PS_BAD_ATTR_OR_AG_METADATA||' )
3559 AND BITAND(PROCESS_STATUS, '||G_PS_NO_PRIVILEGES||') = 0
3560 AND ATTR_INT_NAME = :attr_int_name
3561 AND (ATTR_DISP_VALUE IS NOT NULL OR ATTR_VALUE_DATE IS NOT NULL)
3562 AND ATTR_GROUP_INT_NAME = :attr_group_int_name';
3563
3564 DBMS_SQL.Parse(l_ivs_date_cursor_id, l_dynamic_sql, DBMS_SQL.NATIVE);
3565
3566 -----------------------------------------------------------
3567 -- Data set ID will not change across calls, so we only --
3568 -- need to bind it the first time we parse the statement --
3569 -----------------------------------------------------------
3570 DBMS_SQL.Bind_Variable(l_ivs_date_cursor_id, ':data_set_id', p_data_set_id);
3571 END IF;
3572
3573 DBMS_SQL.Bind_Variable(l_ivs_date_cursor_id, ':value_set_id', l_attr_metadata_rec(l_var).VALUE_SET_ID);
3574 DBMS_SQL.Bind_Variable(l_ivs_date_cursor_id, ':attr_int_name', l_attr_metadata_rec(l_var).ATTR_INT_NAME);
3575 DBMS_SQL.Bind_Variable(l_ivs_date_cursor_id, ':attr_group_int_name', l_attr_metadata_rec(l_var).ATTR_GROUP_INT_NAME);
3576 l_dummy := DBMS_SQL.Execute(l_ivs_date_cursor_id);
3577
3578 ELSIF (l_attr_metadata_rec(l_var).DATA_TYPE = EGO_EXT_FWK_PUB.G_DATE_TIME_DATA_TYPE) THEN
3579
3580 IF (l_ivs_date_time_cursor_id IS NULL) THEN
3581
3582 l_ivs_date_time_cursor_id := DBMS_SQL.Open_Cursor;
3583 l_dynamic_sql :=
3584 'UPDATE '||p_interface_table_name||'
3585 SET ATTR_VALUE_DATE = (EGO_USER_ATTRS_BULK_PVT.Get_Date(
3586 (SELECT DISTINCT FLEX_VALUE
3587 FROM FND_FLEX_VALUES_VL
3588 WHERE ENABLED_FLAG = ''Y''
3589 AND (NVL(START_DATE_ACTIVE, SYSDATE - 1) < SYSDATE)
3590 AND (NVL(END_DATE_ACTIVE, SYSDATE + 1) > SYSDATE)
3591 AND FLEX_VALUE_SET_ID = :value_set_id
3592 AND (FLEX_VALUE_MEANING = ATTR_DISP_VALUE OR FLEX_VALUE = TO_CHAR(ATTR_VALUE_DATE,''YYYY-MM-DD HH24:MI:SS''))) /**bug 13589373**/
3593 )
3594 ),
3595 PROCESS_STATUS = NVL2(ATTR_VALUE_DATE,-- IF THE ATTR VALUE IS NULL WE VALIDATE THE VS ACCORDING TO ATTR_DISP_VAL OTHERWISE VALIDATION IS AGAINST THE ATTR_VALUE_* TAKEN AS INTERNAL_NAME OF VS
3596 (NVL2((SELECT DISTINCT FLEX_VALUE
3597 FROM FND_FLEX_VALUES_VL
3598 WHERE ENABLED_FLAG = ''Y''
3599 AND (NVL(START_DATE_ACTIVE, SYSDATE - 1) < SYSDATE)
3600 AND (NVL(END_DATE_ACTIVE, SYSDATE + 1) > SYSDATE)
3601 AND FLEX_VALUE_SET_ID = :value_set_id
3602 AND (FLEX_VALUE = TO_CHAR(ATTR_VALUE_DATE,''YYYY-MM-DD HH24:MI:SS'') OR FLEX_VALUE_MEANING = ATTR_DISP_VALUE)),
3603 (PROCESS_STATUS),
3604 (PROCESS_STATUS + '||G_PS_VALUE_NOT_IN_VS||'))
3605 ),
3606 (NVL2((SELECT DISTINCT FLEX_VALUE
3607 FROM FND_FLEX_VALUES_VL
3608 WHERE ENABLED_FLAG = ''Y''
3609 AND (NVL(START_DATE_ACTIVE, SYSDATE - 1) < SYSDATE)
3610 AND (NVL(END_DATE_ACTIVE, SYSDATE + 1) > SYSDATE)
3611 AND FLEX_VALUE_SET_ID = :value_set_id
3612 AND FLEX_VALUE_MEANING = ATTR_DISP_VALUE),
3613 (PROCESS_STATUS),
3614 (PROCESS_STATUS + '||G_PS_VALUE_NOT_IN_VS||'))
3615 )
3616 )
3617 WHERE DATA_SET_ID = :data_set_id
3618 AND (PROCESS_STATUS = '||G_PS_IN_PROCESS||' OR PROCESS_STATUS > '||G_PS_BAD_ATTR_OR_AG_METADATA||' )
3619 AND BITAND(PROCESS_STATUS, '||G_PS_NO_PRIVILEGES||') = 0
3620 AND ATTR_INT_NAME = :attr_int_name
3621 AND (ATTR_DISP_VALUE IS NOT NULL OR ATTR_VALUE_DATE IS NOT NULL)
3622 AND ATTR_GROUP_INT_NAME = :attr_group_int_name';
3623
3624 DBMS_SQL.Parse(l_ivs_date_time_cursor_id, l_dynamic_sql, DBMS_SQL.NATIVE);
3625
3626 -----------------------------------------------------------
3627 -- Data set ID will not change across calls, so we only --
3628 -- need to bind it the first time we parse the statement --
3629 -----------------------------------------------------------
3630 DBMS_SQL.Bind_Variable(l_ivs_date_time_cursor_id, ':data_set_id', p_data_set_id);
3631
3632 END IF;
3633
3634 DBMS_SQL.Bind_Variable(l_ivs_date_time_cursor_id, ':value_set_id', l_attr_metadata_rec(l_var).VALUE_SET_ID);
3635 DBMS_SQL.Bind_Variable(l_ivs_date_time_cursor_id, ':attr_int_name', l_attr_metadata_rec(l_var).ATTR_INT_NAME);
3636 DBMS_SQL.Bind_Variable(l_ivs_date_time_cursor_id, ':attr_group_int_name', l_attr_metadata_rec(l_var).ATTR_GROUP_INT_NAME);
3637 l_dummy := DBMS_SQL.Execute(l_ivs_date_time_cursor_id);
3638
3639 ELSE -- must be Char or Trans Text
3640
3641 IF (l_ivs_char_cursor_id IS NULL) THEN
3642
3643 l_ivs_char_cursor_id := DBMS_SQL.Open_Cursor;
3644 l_dynamic_sql :=
3645 'UPDATE '||p_interface_table_name||'
3646 SET ATTR_VALUE_STR = (SELECT DISTINCT FLEX_VALUE
3647 FROM FND_FLEX_VALUES_VL
3648 WHERE ENABLED_FLAG = ''Y''
3649 AND (NVL(START_DATE_ACTIVE, SYSDATE - 1) < SYSDATE)
3650 AND (NVL(END_DATE_ACTIVE, SYSDATE + 1) > SYSDATE)
3651 AND FLEX_VALUE_SET_ID = :value_set_id
3652 AND (FLEX_VALUE_MEANING = ATTR_DISP_VALUE OR FLEX_VALUE = ATTR_VALUE_STR) /**bug 13589373**/
3653 ),
3654 PROCESS_STATUS = NVL2(ATTR_VALUE_STR,-- IF THE ATTR VALUE IS NULL WE VALIDATE THE VS ACCORDING TO ATTR_DISP_VAL OTHERWISE VALIDATION IS AGAINST THE ATTR_VALUE_* TAKEN AS FLEX_VALUE OF VS
3655 (NVL2((SELECT DISTINCT FLEX_VALUE
3656 FROM FND_FLEX_VALUES_VL
3657 WHERE ENABLED_FLAG = ''Y''
3658 AND (NVL(START_DATE_ACTIVE, SYSDATE - 1) < SYSDATE)
3659 AND (NVL(END_DATE_ACTIVE, SYSDATE + 1) > SYSDATE)
3660 AND FLEX_VALUE_SET_ID = :value_set_id
3661 AND (FLEX_VALUE = ATTR_VALUE_STR OR FLEX_VALUE_MEANING = ATTR_DISP_VALUE)),
3662 (PROCESS_STATUS),
3663 (PROCESS_STATUS + '||G_PS_VALUE_NOT_IN_VS||'))
3664 ),
3665 (NVL2((SELECT DISTINCT FLEX_VALUE
3666 FROM FND_FLEX_VALUES_VL
3667 WHERE ENABLED_FLAG = ''Y''
3668 AND (NVL(START_DATE_ACTIVE, SYSDATE - 1) < SYSDATE)
3669 AND (NVL(END_DATE_ACTIVE, SYSDATE + 1) > SYSDATE)
3670 AND FLEX_VALUE_SET_ID = :value_set_id
3671 AND FLEX_VALUE_MEANING = ATTR_DISP_VALUE),
3672 (PROCESS_STATUS),
3673 (PROCESS_STATUS + '||G_PS_VALUE_NOT_IN_VS||'))
3674 )
3675 )
3676 WHERE DATA_SET_ID = :data_set_id
3677 AND (PROCESS_STATUS = '||G_PS_IN_PROCESS||' OR PROCESS_STATUS > '||G_PS_BAD_ATTR_OR_AG_METADATA||' )
3678 AND BITAND(PROCESS_STATUS, '||G_PS_NO_PRIVILEGES||') = 0
3679 AND ATTR_INT_NAME = :attr_int_name
3680 AND (ATTR_DISP_VALUE IS NOT NULL OR ATTR_VALUE_STR IS NOT NULL)
3681 AND ATTR_GROUP_INT_NAME = :attr_group_int_name';
3682
3683 DBMS_SQL.Parse(l_ivs_char_cursor_id, l_dynamic_sql, DBMS_SQL.NATIVE);
3684
3685 -----------------------------------------------------------
3686 -- Data set ID will not change across calls, so we only --
3687 -- need to bind it the first time we parse the statement --
3688 -----------------------------------------------------------
3689 DBMS_SQL.Bind_Variable(l_ivs_char_cursor_id, ':data_set_id', p_data_set_id);
3690
3691 END IF;
3692
3693 DBMS_SQL.Bind_Variable(l_ivs_char_cursor_id, ':value_set_id', l_attr_metadata_rec(l_var).VALUE_SET_ID);
3694 DBMS_SQL.Bind_Variable(l_ivs_char_cursor_id, ':attr_int_name', l_attr_metadata_rec(l_var).ATTR_INT_NAME);
3695 DBMS_SQL.Bind_Variable(l_ivs_char_cursor_id, ':attr_group_int_name', l_attr_metadata_rec(l_var).ATTR_GROUP_INT_NAME);
3696 l_dummy := DBMS_SQL.Execute(l_ivs_char_cursor_id);
3697
3698 END IF;
3699 ELSIF (l_attr_metadata_rec(l_var).VALIDATION_TYPE = EGO_EXT_FWK_PUB.G_TABLE_VALIDATION_CODE) THEN
3700
3701 ------------------------------------------------------------------------------------
3702 -- HERE WE UPDATE THE INTERFACE TABLE SETTING THE ATTR_VAL_(NUM/STR/DATE) COLUMNS --
3703 -- WITH VALUES FETCHED FROM THE TABLE FOR THE VALUE ENTERED AS DISPLAY VALUE i.e. --
3704 -- VALIDATION_TYPE='F' and logging errors for all logical AG rows that don't pass --
3705 ------------------------------------------------------------------------------------
3706 /*
3707 The TVS validation is shifted in the second loop
3708 do nothing over here
3709 */
3710 l_dynamic_sql := ' ';
3711
3712 ELSE
3713
3714 code_debug(' This attribute has a none value set, validating for before populating the attr_Value* columns from attr_disp_value column' ,2);
3715 ------------------------------------------------------------------------------------
3716 -- HERE WE UPDATE THE INTERFACE TABLE SETTING THE ATTR_VAL_(NUM/STR/DATE) COLUMNS --
3717 -- FROM ATTR_DISP_VALUE FOR ATTRS WITHOUT ANY VALUE SET *OR* WITH VALIDATION TYPE --
3718 -- ='N' (i.e., EGO_EXT_FWK_PUB.G_NONE_VALIDATION_CODE) --
3719 -- WE ALSO DO THE MAX/MIN VALIDATION IN THIS SEGMENT --
3720 ------------------------------------------------------------------------------------
3721 IF (l_attr_metadata_rec(l_var).DATA_TYPE = EGO_EXT_FWK_PUB.G_NUMBER_DATA_TYPE) THEN
3722
3723 IF (l_nvs_num_cursor_id is NULL) THEN
3724 l_nvs_num_cursor_id := DBMS_SQL.Open_Cursor;
3725 l_dynamic_sql :=
3726 'UPDATE '||p_interface_table_name||'
3727 SET ATTR_VALUE_NUM = DECODE(EGO_USER_ATTRS_BULK_PVT.Get_Datatype_Error_Val(ATTR_DISP_VALUE, :attr_datatype),0,NVL(TO_NUMBER(ATTR_DISP_VALUE),ATTR_VALUE_NUM),NULL),
3728 PROCESS_STATUS = PROCESS_STATUS +
3729 EGO_USER_ATTRS_BULK_PVT.Get_Datatype_Error_Val(ATTR_DISP_VALUE, :attr_datatype) + --returns 0 if datatype conversion happens correctly
3730 EGO_USER_ATTRS_BULK_PVT.Get_Max_Min_Error_Val( NVL(ATTR_DISP_VALUE,ATTR_VALUE_NUM) * NVL((SELECT CONVERSION_RATE FROM MTL_UOM_CONVERSIONS
3731 WHERE UOM_CLASS = :uom_class AND UOM_CODE = ATTR_VALUE_UOM AND ROWNUM = 1),1),
3732 :attr_datatype,
3733 :attr_min_allowed_val,
3734 :attr_max_allowed_val) --returns 0 if max/min is honoured or datatype conversion fails
3735 WHERE DATA_SET_ID = :data_set_id
3736 AND (PROCESS_STATUS = '||G_PS_IN_PROCESS||' OR PROCESS_STATUS > '||G_PS_BAD_ATTR_OR_AG_METADATA||' )
3737 AND BITAND(PROCESS_STATUS, '||G_PS_NO_PRIVILEGES||') = 0
3738 AND ATTR_INT_NAME = :attr_internal_name
3739 AND ATTR_GROUP_INT_NAME = :attr_group_int_name
3740 AND (ATTR_DISP_VALUE IS NOT NULL OR ATTR_VALUE_NUM IS NOT NULL)';
3741
3742 DBMS_SQL.Parse(l_nvs_num_cursor_id, l_dynamic_sql, DBMS_SQL.NATIVE);
3743 DBMS_SQL.Bind_Variable(l_nvs_num_cursor_id, ':data_set_id', p_data_set_id);
3744
3745 END IF;
3746 DBMS_SQL.Bind_Variable(l_nvs_num_cursor_id, ':uom_class', l_attr_metadata_rec(l_var).UOM_CLASS);
3747 DBMS_SQL.Bind_Variable(l_nvs_num_cursor_id, ':attr_datatype', l_attr_metadata_rec(l_var).DATA_TYPE);
3748 DBMS_SQL.Bind_Variable(l_nvs_num_cursor_id, ':attr_min_allowed_val', l_attr_metadata_rec(l_var).MINIMUM_VALUE);
3749 DBMS_SQL.Bind_Variable(l_nvs_num_cursor_id, ':attr_max_allowed_val', l_attr_metadata_rec(l_var).MAXIMUM_VALUE);
3750 DBMS_SQL.Bind_Variable(l_nvs_num_cursor_id, ':attr_internal_name', l_attr_metadata_rec(l_var).ATTR_INT_NAME);
3751 DBMS_SQL.Bind_Variable(l_nvs_num_cursor_id, ':attr_group_int_name', l_attr_metadata_rec(l_var).ATTR_GROUP_INT_NAME);
3752
3753 l_dummy := DBMS_SQL.Execute(l_nvs_num_cursor_id);
3754
3755 ELSIF(l_attr_metadata_rec(l_var).DATA_TYPE = EGO_EXT_FWK_PUB.G_DATE_DATA_TYPE) THEN
3756
3757 IF (l_nvs_date_cursor_id IS NULL) THEN
3758 l_nvs_date_cursor_id := DBMS_SQL.Open_Cursor;
3759 l_dynamic_sql :=
3760 'UPDATE '||p_interface_table_name||'
3761 SET ATTR_VALUE_DATE = TRUNC(NVL(EGO_USER_ATTRS_BULK_PVT.Get_Date(ATTR_DISP_VALUE),ATTR_VALUE_DATE)),--WE SHOULD REMOVE THE TIME PART FROM THE DATE IF DATATYPE IS NOT DATE TIME
3762 PROCESS_STATUS = PROCESS_STATUS +
3763 EGO_USER_ATTRS_BULK_PVT.Get_Datatype_Error_Val(ATTR_DISP_VALUE, :attr_datatype) + --returns 0 if datatype conversion happens correctly
3764 EGO_USER_ATTRS_BULK_PVT.Get_Max_Min_Error_Val(NVL(ATTR_DISP_VALUE,ATTR_VALUE_DATE), :attr_datatype, :attr_min_allowed_val, :attr_max_allowed_val) --returns 0 if max/min is honoured or datatype conv fails
3765 WHERE DATA_SET_ID = :data_set_id
3766 AND (PROCESS_STATUS = '||G_PS_IN_PROCESS||' OR PROCESS_STATUS > '||G_PS_BAD_ATTR_OR_AG_METADATA||' )
3767 AND BITAND(PROCESS_STATUS, '||G_PS_NO_PRIVILEGES||') = 0
3768 AND ATTR_INT_NAME = :attr_internal_name
3769 AND ATTR_GROUP_INT_NAME = :attr_group_int_name
3770 AND (ATTR_DISP_VALUE IS NOT NULL OR ATTR_VALUE_DATE IS NOT NULL)';
3771
3772 DBMS_SQL.Parse(l_nvs_date_cursor_id, l_dynamic_sql, DBMS_SQL.NATIVE);
3773 DBMS_SQL.Bind_Variable(l_nvs_date_cursor_id, ':data_set_id', p_data_set_id);
3774
3775 END IF;
3776
3777 DBMS_SQL.Bind_Variable(l_nvs_date_cursor_id, ':attr_datatype', l_attr_metadata_rec(l_var).DATA_TYPE);
3778 DBMS_SQL.Bind_Variable(l_nvs_date_cursor_id, ':attr_group_int_name', l_attr_metadata_rec(l_var).ATTR_GROUP_INT_NAME);
3779 DBMS_SQL.Bind_Variable(l_nvs_date_cursor_id, ':attr_internal_name', l_attr_metadata_rec(l_var).ATTR_INT_NAME);
3780 DBMS_SQL.Bind_Variable(l_nvs_date_cursor_id, ':attr_min_allowed_val', l_attr_metadata_rec(l_var).MINIMUM_VALUE);
3781 DBMS_SQL.Bind_Variable(l_nvs_date_cursor_id, ':attr_max_allowed_val', l_attr_metadata_rec(l_var).MAXIMUM_VALUE);
3782 l_dummy := DBMS_SQL.Execute(l_nvs_date_cursor_id);
3783
3784 ELSIF(l_attr_metadata_rec(l_var).DATA_TYPE = EGO_EXT_FWK_PUB.G_DATE_TIME_DATA_TYPE) THEN
3785
3786 IF (l_nvs_datetime_cursor_id is NULL) THEN
3787 l_nvs_datetime_cursor_id := DBMS_SQL.Open_Cursor;
3788 l_dynamic_sql :=
3789 'UPDATE '||p_interface_table_name||'
3790 SET ATTR_VALUE_DATE = NVL(EGO_USER_ATTRS_BULK_PVT.Get_Date(ATTR_DISP_VALUE,'''||EGO_USER_ATTRS_COMMON_PVT.G_DATE_FORMAT||'''),ATTR_VALUE_DATE),
3791 PROCESS_STATUS = PROCESS_STATUS +
3792 EGO_USER_ATTRS_BULK_PVT.Get_Datatype_Error_Val(ATTR_DISP_VALUE, :attr_datatype) + --returns 0 if datatype conversion happens correctly
3793 EGO_USER_ATTRS_BULK_PVT.Get_Max_Min_Error_Val(NVL(ATTR_DISP_VALUE,ATTR_VALUE_DATE), :attr_datatype, :attr_min_allowed_val, :attr_max_allowed_val) --returns 0 if max/min is honoured or datatype conv fails
3794 WHERE DATA_SET_ID = :data_set_id
3795 AND (PROCESS_STATUS = '||G_PS_IN_PROCESS||' OR PROCESS_STATUS > '||G_PS_BAD_ATTR_OR_AG_METADATA||' )
3796 AND BITAND(PROCESS_STATUS, '||G_PS_NO_PRIVILEGES||') = 0
3797 AND ATTR_INT_NAME = :attr_internal_name
3798 AND ATTR_GROUP_INT_NAME = :attr_group_int_name
3799 AND (ATTR_DISP_VALUE IS NOT NULL OR ATTR_VALUE_DATE IS NOT NULL)';
3800
3801 DBMS_SQL.Parse(l_nvs_datetime_cursor_id, l_dynamic_sql, DBMS_SQL.NATIVE);
3802 DBMS_SQL.Bind_Variable(l_nvs_datetime_cursor_id, ':data_set_id', p_data_set_id);
3803
3804 END IF;
3805
3806 DBMS_SQL.Bind_Variable(l_nvs_datetime_cursor_id, ':attr_datatype', l_attr_metadata_rec(l_var).DATA_TYPE);
3807 DBMS_SQL.Bind_Variable(l_nvs_datetime_cursor_id, ':attr_group_int_name', l_attr_metadata_rec(l_var).ATTR_GROUP_INT_NAME);
3808 DBMS_SQL.Bind_Variable(l_nvs_datetime_cursor_id, ':attr_internal_name', l_attr_metadata_rec(l_var).ATTR_INT_NAME);
3809 DBMS_SQL.Bind_Variable(l_nvs_datetime_cursor_id, ':attr_min_allowed_val', l_attr_metadata_rec(l_var).MINIMUM_VALUE);
3810 DBMS_SQL.Bind_Variable(l_nvs_datetime_cursor_id, ':attr_max_allowed_val', l_attr_metadata_rec(l_var).MAXIMUM_VALUE);
3811
3812 l_dummy := DBMS_SQL.Execute(l_nvs_datetime_cursor_id);
3813
3814 ELSE -- must be char and translateble text
3815 IF (l_nvs_char_cursor_id is NULL) THEN
3816
3817 l_nvs_char_cursor_id := DBMS_SQL.Open_Cursor;
3818 /* Fix for bug#9678667 : Added the below hint */
3819 l_dynamic_sql :=
3820 'UPDATE /*+ index(EGO_ITM_USR_ATTR_INTRFC, EGO_ITM_USR_ATTR_INTRFC_N1) */ '||p_interface_table_name||'
3821 SET ATTR_VALUE_STR = ATTR_DISP_VALUE
3822 WHERE DATA_SET_ID = :data_set_id
3823 AND (PROCESS_STATUS = '||G_PS_IN_PROCESS||' OR PROCESS_STATUS > '||G_PS_BAD_ATTR_OR_AG_METADATA||' )
3824 AND BITAND(PROCESS_STATUS, '||G_PS_NO_PRIVILEGES||') = 0
3825 AND ATTR_INT_NAME = :attr_internal_name
3826 AND ATTR_GROUP_INT_NAME = :attr_group_int_name
3827 AND ATTR_DISP_VALUE IS NOT NULL';
3828
3829 DBMS_SQL.Parse(l_nvs_char_cursor_id, l_dynamic_sql, DBMS_SQL.NATIVE);
3830 DBMS_SQL.Bind_Variable(l_nvs_char_cursor_id, ':data_set_id', p_data_set_id);
3831
3832 END IF;
3833
3834 DBMS_SQL.Bind_Variable(l_nvs_char_cursor_id, ':attr_group_int_name', l_attr_metadata_rec(l_var).ATTR_GROUP_INT_NAME);
3835 DBMS_SQL.Bind_Variable(l_nvs_char_cursor_id, ':attr_internal_name', l_attr_metadata_rec(l_var).ATTR_INT_NAME);
3836
3837 l_dummy := DBMS_SQL.Execute(l_nvs_char_cursor_id);
3838
3839 END IF;
3840 END IF;
3841
3842 --------------------------------------------------------------------------
3843 -- HERE WE UPDATE THE INTERFACE TABLE ERRORING OUT ALL THE ROWS HAVING --
3844 -- ATTRIBUTE DATA HAVING LENGTH GREATER THAN THE MAXIMUM ALLOWED LENGTH --
3845 -- WE DO THIS CHECK ONLY FOR NUMBER, CHAR AND DATE/DATETIME DATA TYPE --
3846 --------------------------------------------------------------------------
3847
3848 -- swuppala: START : bug fix 12907500 There is no validation on data type before setting the maximum value. Hence transalatable text which execeeds 150 size is erroring out.
3849 -- with ora-06502: pl/sql: numeric or value error: character string
3850 IF (l_attr_metadata_rec(l_var).MAXIMUM_SIZE IS NULL OR l_attr_metadata_rec(l_var).MAXIMUM_SIZE = 0) THEN
3851 IF(l_attr_metadata_rec(l_var).DATA_TYPE = EGO_EXT_FWK_PUB.G_CHAR_DATA_TYPE) THEN
3852 l_attr_metadata_rec(l_var).MAXIMUM_SIZE := 150; -- 150 is the default Max length of UDA per functional design
3853 ELSIF(l_attr_metadata_rec(l_var).DATA_TYPE = EGO_EXT_FWK_PUB.G_TRANS_TEXT_DATA_TYPE) THEN
3854 l_attr_metadata_rec(l_var).MAXIMUM_SIZE := 1000; -- 1000 is the default Max length of Translatable text type UDA.
3855 END IF;
3856 END IF;
3857
3858 -- swuppala : END : bug fix 12907500
3859
3860 IF (l_attr_metadata_rec(l_var).MAXIMUM_SIZE > 0) THEN
3861
3862 code_debug(' This attribute has a maximum size of '||l_attr_metadata_rec(l_var).MAXIMUM_SIZE,2);
3863
3864 --------- FOR NUMBER DATATYPE
3865 IF (l_attr_metadata_rec(l_var).DATA_TYPE = EGO_EXT_FWK_PUB.G_NUMBER_DATA_TYPE) THEN
3866 IF (l_max_size_num_cursor IS NULL) THEN
3867 l_max_size_num_cursor := DBMS_SQL.Open_Cursor;
3868 l_dynamic_sql :=
3869 'UPDATE '||p_interface_table_name||'
3870 SET PROCESS_STATUS = PROCESS_STATUS + '||G_PS_MAX_LENGTH_VIOLATION||'
3871 WHERE DATA_SET_ID = :data_set_id
3872 AND (PROCESS_STATUS = '||G_PS_IN_PROCESS||' OR PROCESS_STATUS > '||G_PS_BAD_ATTR_OR_AG_METADATA||' )
3873 AND BITAND(PROCESS_STATUS, '||G_PS_NO_PRIVILEGES||') = 0
3874 AND ATTR_INT_NAME = :attr_internal_name
3875 AND ATTR_GROUP_INT_NAME = :attr_group_int_name
3876 AND ATTR_VALUE_NUM IS NOT NULL
3877 AND LENGTH(ATTR_VALUE_NUM) > :max_allowed_size';
3878 DBMS_SQL.Parse(l_max_size_num_cursor, l_dynamic_sql, DBMS_SQL.NATIVE);
3879 DBMS_SQL.Bind_Variable(l_max_size_num_cursor, ':data_set_id', p_data_set_id);
3880
3881 END IF;
3882
3883 DBMS_SQL.Bind_Variable(l_max_size_num_cursor, ':attr_group_int_name', l_attr_metadata_rec(l_var).ATTR_GROUP_INT_NAME);
3884 DBMS_SQL.Bind_Variable(l_max_size_num_cursor, ':attr_internal_name', l_attr_metadata_rec(l_var).ATTR_INT_NAME);
3885 DBMS_SQL.Bind_Variable(l_max_size_num_cursor, ':max_allowed_size', l_attr_metadata_rec(l_var).MAXIMUM_SIZE);
3886 l_dummy := DBMS_SQL.Execute(l_max_size_num_cursor);
3887 --------- FOR CHAR OR TRANSLATEBLE TEXT DATATYPE
3888 ELSIF(l_attr_metadata_rec(l_var).DATA_TYPE = EGO_EXT_FWK_PUB.G_CHAR_DATA_TYPE OR
3889 l_attr_metadata_rec(l_var).DATA_TYPE = EGO_EXT_FWK_PUB.G_TRANS_TEXT_DATA_TYPE) THEN
3890
3891 IF ( l_max_size_char_cursor IS NULL) THEN
3892 l_max_size_char_cursor := DBMS_SQL.Open_Cursor;
3893 l_dynamic_sql :=
3894 'UPDATE '||p_interface_table_name||'
3895 SET PROCESS_STATUS = PROCESS_STATUS + '||G_PS_MAX_LENGTH_VIOLATION||'
3896 WHERE DATA_SET_ID = :data_set_id
3897 AND (PROCESS_STATUS = '||G_PS_IN_PROCESS||' OR PROCESS_STATUS > '||G_PS_BAD_ATTR_OR_AG_METADATA||' )
3898 AND BITAND(PROCESS_STATUS, '||G_PS_NO_PRIVILEGES||') = 0
3899 AND ATTR_INT_NAME = :attr_internal_name
3900 AND ATTR_GROUP_INT_NAME = :attr_group_int_name
3901 AND ATTR_VALUE_STR IS NOT NULL
3902 AND LENGTHB(ATTR_VALUE_STR) > :max_allowed_size'; --for bug 9748517, use byte size to determin size for multi-byte language
3903 DBMS_SQL.Parse(l_max_size_char_cursor, l_dynamic_sql, DBMS_SQL.NATIVE);
3904 DBMS_SQL.Bind_Variable(l_max_size_char_cursor, ':data_set_id', p_data_set_id);
3905
3906 END IF;
3907 DBMS_SQL.Bind_Variable(l_max_size_char_cursor, ':attr_group_int_name', l_attr_metadata_rec(l_var).ATTR_GROUP_INT_NAME);
3908 DBMS_SQL.Bind_Variable(l_max_size_char_cursor, ':attr_internal_name', l_attr_metadata_rec(l_var).ATTR_INT_NAME);
3909 DBMS_SQL.Bind_Variable(l_max_size_char_cursor, ':max_allowed_size', l_attr_metadata_rec(l_var).MAXIMUM_SIZE);
3910
3911 l_dummy := DBMS_SQL.Execute(l_max_size_char_cursor);
3912
3913 END IF;
3914 END IF;
3915
3916 --------------------------------------------------------------------------
3917 -- We need to see that the user has not entered data in a wrong column --
3918 -- for an attribute. e.g for a number type attribute the data should --
3919 -- only be in ATT_VALUE_NUM or ATTR_DISP_VALUE --
3920 --------------------------------------------------------------------------
3921
3922 code_debug(' Before validating the rows for data in wrong column ' ,2);
3923
3924 --------- FOR NUMBER DATATYPE
3925 IF(l_attr_metadata_rec(l_var).DATA_TYPE = EGO_EXT_FWK_PUB.G_NUMBER_DATA_TYPE) THEN
3926 IF (l_colcheck_num_cursor_id IS NULL) THEN
3927 l_colcheck_num_cursor_id := DBMS_SQL.Open_Cursor;
3928 l_dynamic_sql :=
3929 'UPDATE '||p_interface_table_name||'
3930 SET PROCESS_STATUS = PROCESS_STATUS + '||G_PS_DATA_IN_WRONG_COL||'
3931 WHERE DATA_SET_ID = :data_set_id
3932 AND (PROCESS_STATUS = '||G_PS_IN_PROCESS||' OR PROCESS_STATUS > '||G_PS_BAD_ATTR_OR_AG_METADATA||' )
3933 AND BITAND(PROCESS_STATUS, '||G_PS_NO_PRIVILEGES||') = 0
3934 AND ATTR_INT_NAME = :attr_internal_name
3935 AND ATTR_GROUP_INT_NAME = :attr_group_int_name
3936 AND ATTR_VALUE_NUM IS NULL
3937 AND ATTR_DISP_VALUE IS NULL
3938 AND (ATTR_VALUE_STR IS NOT NULL OR ATTR_VALUE_DATE IS NOT NULL)' ;
3939 DBMS_SQL.Parse(l_colcheck_num_cursor_id, l_dynamic_sql, DBMS_SQL.NATIVE);
3940 DBMS_SQL.Bind_Variable(l_colcheck_num_cursor_id, ':data_set_id', p_data_set_id);
3941 END IF;
3942
3943 DBMS_SQL.Bind_Variable(l_colcheck_num_cursor_id, ':attr_group_int_name', l_attr_metadata_rec(l_var).ATTR_GROUP_INT_NAME);
3944 DBMS_SQL.Bind_Variable(l_colcheck_num_cursor_id, ':attr_internal_name', l_attr_metadata_rec(l_var).ATTR_INT_NAME);
3945
3946 l_dummy := DBMS_SQL.Execute(l_colcheck_num_cursor_id);
3947
3948 --------- FOR DATE/DATETIME DATATYPE
3949 ELSIF (l_attr_metadata_rec(l_var).DATA_TYPE = EGO_EXT_FWK_PUB.G_DATE_DATA_TYPE OR l_attr_metadata_rec(l_var).DATA_TYPE = EGO_EXT_FWK_PUB.G_DATE_TIME_DATA_TYPE) THEN
3950 IF (l_colcheck_date_cursor_id IS NULL) THEN
3951 l_colcheck_date_cursor_id := DBMS_SQL.Open_Cursor;
3952 l_dynamic_sql :=
3953 'UPDATE '||p_interface_table_name||'
3954 SET PROCESS_STATUS = PROCESS_STATUS + '||G_PS_DATA_IN_WRONG_COL||'
3955 WHERE DATA_SET_ID = :data_set_id
3956 AND (PROCESS_STATUS = '||G_PS_IN_PROCESS||' OR PROCESS_STATUS > '||G_PS_BAD_ATTR_OR_AG_METADATA||' )
3957 AND BITAND(PROCESS_STATUS, '||G_PS_NO_PRIVILEGES||') = 0
3958 AND ATTR_INT_NAME = :attr_internal_name
3959 AND ATTR_GROUP_INT_NAME = :attr_group_int_name
3960 AND ATTR_VALUE_DATE IS NULL
3961 AND ATTR_DISP_VALUE IS NULL
3962 AND (ATTR_VALUE_STR IS NOT NULL OR ATTR_VALUE_NUM IS NOT NULL)' ;
3963 DBMS_SQL.Parse(l_colcheck_date_cursor_id, l_dynamic_sql, DBMS_SQL.NATIVE);
3964 DBMS_SQL.Bind_Variable(l_colcheck_date_cursor_id, ':data_set_id', p_data_set_id);
3965 END IF;
3966
3967 DBMS_SQL.Bind_Variable(l_colcheck_date_cursor_id, ':attr_group_int_name', l_attr_metadata_rec(l_var).ATTR_GROUP_INT_NAME);
3968 DBMS_SQL.Bind_Variable(l_colcheck_date_cursor_id, ':attr_internal_name', l_attr_metadata_rec(l_var).ATTR_INT_NAME);
3969
3970 l_dummy := DBMS_SQL.Execute(l_colcheck_date_cursor_id);
3971 --------- FOR CHAR/TRANSLATEBLE TEXT DATATYPE
3972 ELSE
3973 IF (l_colcheck_char_cursor_id IS NULL) THEN
3974 l_colcheck_char_cursor_id := DBMS_SQL.Open_Cursor;
3975 /* Fix for bug#9678667 - Added below hint */
3976 l_dynamic_sql :=
3977 'UPDATE /*+ index(EGO_ITM_USR_ATTR_INTRFC, EGO_ITM_USR_ATTR_INTRFC_N1) NO_EXPAND */ '||p_interface_table_name||'
3978 SET PROCESS_STATUS = PROCESS_STATUS + '||G_PS_DATA_IN_WRONG_COL||'
3979 WHERE DATA_SET_ID = :data_set_id
3980 AND (PROCESS_STATUS = '||G_PS_IN_PROCESS||' OR PROCESS_STATUS > '||G_PS_BAD_ATTR_OR_AG_METADATA||' )
3981 AND BITAND(PROCESS_STATUS, '||G_PS_NO_PRIVILEGES||') = 0
3982 AND ATTR_INT_NAME = :attr_internal_name
3983 AND ATTR_GROUP_INT_NAME = :attr_group_int_name
3984 AND ATTR_VALUE_STR IS NULL
3985 AND ATTR_DISP_VALUE IS NULL
3986 AND (ATTR_VALUE_NUM IS NOT NULL OR ATTR_VALUE_DATE IS NOT NULL)' ;
3987 DBMS_SQL.Parse(l_colcheck_char_cursor_id, l_dynamic_sql, DBMS_SQL.NATIVE);
3988 DBMS_SQL.Bind_Variable(l_colcheck_char_cursor_id, ':data_set_id', p_data_set_id);
3989 END IF;
3990
3991 DBMS_SQL.Bind_Variable(l_colcheck_char_cursor_id, ':attr_group_int_name', l_attr_metadata_rec(l_var).ATTR_GROUP_INT_NAME);
3992 DBMS_SQL.Bind_Variable(l_colcheck_char_cursor_id, ':attr_internal_name', l_attr_metadata_rec(l_var).ATTR_INT_NAME);
3993
3994 l_dummy := DBMS_SQL.Execute(l_colcheck_char_cursor_id);
3995
3996 END IF;
3997
3998 END IF; -- if not previously processed
3999 END IF; --*p_validate-IF-1.5* Ending the IF for p_validate
4000
4001 IF (p_do_dml AND l_priv_attr_id <> l_attr_metadata_rec(l_var).ATTR_ID) THEN
4002 IF(l_attr_metadata_rec(l_var).UOM_CLASS IS NOT NULL) THEN
4003 ----------------------------------------------
4004 -- Converting the attr value to base UOM
4005 ----------------------------------------------
4006
4007 l_dynamic_sql :=
4008 'UPDATE '||p_interface_table_name||' INTF
4009 SET ATTR_VALUE_NUM = ATTR_VALUE_NUM * NVL((SELECT CONVERSION_RATE FROM MTL_UOM_CONVERSIONS
4010 WHERE UOM_CLASS = :uom_class
4011 AND UOM_CODE = INTF.ATTR_VALUE_UOM
4012 AND ROWNUM = 1),1)
4013 WHERE DATA_SET_ID = :data_set_id
4014 AND PROCESS_STATUS = '||G_PS_IN_PROCESS||'
4015 AND ATTR_INT_NAME = :attr_internal_name
4016 AND ATTR_GROUP_INT_NAME = :attr_group_int_name
4017 AND ATTR_VALUE_UOM <> :base_uom ';
4018
4019 EXECUTE IMMEDIATE l_dynamic_sql
4020 USING l_attr_metadata_rec(l_var).UOM_CLASS, p_data_Set_id,l_attr_metadata_rec(l_var).ATTR_INT_NAME,
4021 l_attr_metadata_rec(l_var).ATTR_GROUP_INT_NAME,l_attr_metadata_rec(l_var).UOM_CODE;
4022 END IF;
4023 END IF;
4024 l_priv_attr_id := l_attr_metadata_rec(l_var).ATTR_ID;
4025
4026 END LOOP;--End 1st loop
4027 -- Fix for bug#9336604
4028 -- CLOSE l_dynamic_cursor;
4029 END IF; -- bug 14672950
4030
4031 code_debug(' After the ATTR LEVEL validation loop ' ,1);
4032
4033 -- CLOSING ALL OPEN CURSORS
4034 IF (l_priv_func_cursor_id IS NOT NULL) THEN
4035 DBMS_SQL.Close_Cursor(l_priv_func_cursor_id);
4036 END IF;
4037 IF (l_ivs_num_cursor_id IS NOT NULL) THEN
4038 DBMS_SQL.Close_Cursor(l_ivs_num_cursor_id);
4039 END IF;
4040 IF (l_ivs_date_cursor_id IS NOT NULL) THEN
4041 DBMS_SQL.Close_Cursor(l_ivs_date_cursor_id);
4042 END IF;
4043 IF (l_ivs_date_time_cursor_id IS NOT NULL) THEN
4044 DBMS_SQL.Close_Cursor(l_ivs_date_time_cursor_id);
4045 END IF;
4046 IF (l_ivs_char_cursor_id IS NOT NULL) THEN
4047 DBMS_SQL.Close_Cursor(l_ivs_char_cursor_id);
4048 END IF;
4049 IF (l_nvs_num_cursor_id IS NOT NULL) THEN
4050 DBMS_SQL.Close_Cursor(l_nvs_num_cursor_id);
4051 END IF;
4052 IF (l_nvs_date_cursor_id IS NOT NULL) THEN
4053 DBMS_SQL.Close_Cursor(l_nvs_date_cursor_id);
4054 END IF;
4055 IF (l_nvs_datetime_cursor_id IS NOT NULL) THEN
4056 DBMS_SQL.Close_Cursor(l_nvs_datetime_cursor_id);
4057 END IF;
4058 IF (l_nvs_char_cursor_id IS NOT NULL) THEN
4059 DBMS_SQL.Close_Cursor(l_nvs_char_cursor_id);
4060 END IF;
4061 IF (l_max_size_char_cursor IS NOT NULL) THEN
4062 DBMS_SQL.Close_Cursor(l_max_size_char_cursor);
4063 END IF;
4064 IF (l_max_size_num_cursor IS NOT NULL) THEN
4065 DBMS_SQL.Close_Cursor(l_max_size_num_cursor);
4066 END IF;
4067 IF (l_colcheck_num_cursor_id IS NOT NULL) THEN
4068 DBMS_SQL.Close_Cursor(l_colcheck_num_cursor_id);
4069 END IF;
4070 IF (l_colcheck_char_cursor_id IS NOT NULL) THEN
4071 DBMS_SQL.Close_Cursor(l_colcheck_char_cursor_id);
4072 END IF;
4073 IF (l_colcheck_date_cursor_id IS NOT NULL) THEN
4074 DBMS_SQL.Close_Cursor(l_colcheck_date_cursor_id);
4075 END IF;
4076
4077 IF (p_validate) THEN -- *p_validate-IF-1.75*
4078 -------------------------------------------------------------------------------------
4079 -- Update other attributes if at least one attribute is failed for all attr group
4080 -------------------------------------------------------------------------------------
4081 --considering the G_PS_BAD_ATTR_OR_AG_METADATA is the starting point for the intermittent errors.
4082
4083 /* Fix for bug#9678667 - Start */
4084 /*
4085 EXECUTE IMMEDIATE
4086 'UPDATE '||p_interface_table_name||' UAI1' ||
4087 ' SET UAI1.PROCESS_STATUS = UAI1.PROCESS_STATUS + '||G_PS_OTHER_ATTRS_INVALID||
4088 ' WHERE UAI1.DATA_SET_ID = :data_set_id '||
4089 ' AND BITAND(PROCESS_STATUS,'||G_PS_OTHER_ATTRS_INVALID||') = 0'||
4090 ' AND UAI1.ROW_IDENTIFIER IN'||
4091 ' (SELECT DISTINCT UAI2.ROW_IDENTIFIER'||
4092 ' FROM '||p_interface_table_name||' UAI2'||
4093 ' WHERE UAI2.DATA_SET_ID = :data_set_id '||
4094 ' AND UAI2.PROCESS_STATUS >= '||G_PS_BAD_ATTR_OR_AG_METADATA ||
4095 ' AND UAI2.ATTR_GROUP_INT_NAME = UAI1.ATTR_GROUP_INT_NAME)'
4096 USING p_data_set_id, p_data_set_id;
4097 */
4098
4099 EXECUTE IMMEDIATE
4100 'UPDATE '||p_interface_table_name||' UAI1' ||
4101 ' SET UAI1.PROCESS_STATUS = UAI1.PROCESS_STATUS + '||G_PS_OTHER_ATTRS_INVALID||
4102 ' WHERE UAI1.DATA_SET_ID = :data_set_id '||
4103 ' AND BITAND(PROCESS_STATUS,'||G_PS_OTHER_ATTRS_INVALID||') = 0'||
4104 ' AND (UAI1.ROW_IDENTIFIER, UAI1.ATTR_GROUP_INT_NAME) IN '||
4105 ' (SELECT /*+ UNNEST CARDINALITY(UAI2,10) INDEX(UAI2,EGO_ITM_USR_ATTR_INTRFC_N3) */ '|| /* Bug 9678667 */
4106 ' UAI2.ROW_IDENTIFIER, UAI2.ATTR_GROUP_INT_NAME '||
4107 ' FROM '||p_interface_table_name||' UAI2'||
4108 ' WHERE UAI2.DATA_SET_ID = :data_set_id '||
4109 ' AND UAI2.PROCESS_STATUS >= '||G_PS_BAD_ATTR_OR_AG_METADATA ||
4110 ' )'
4111 USING p_data_set_id, p_data_set_id;
4112 /* Fix for bug#9678667 - End */
4113
4114 END IF; --*p_validate-IF-1.75* Ending the IF for p_validate
4115
4116
4117 --===========================--
4118 -- AG-LEVEL LOOP VALIDATIONS --
4119 --===========================--
4120 code_debug(' Before entering the Attr Group Level Validation Loop ' ,1);
4121 ------------------------------------------------
4122 -- Now we fetch all distinct Attr Groups that --
4123 -- still have valid rows in the data set --
4124 ------------------------------------------------
4125 OPEN l_dynamic_dist_ag_cursor FOR
4126 ' SELECT DISTINCT ATTR_GROUP_INT_NAME
4127 FROM '||p_interface_table_name||' UAI1
4128 WHERE DATA_SET_ID = :data_set_id
4129 AND ATTR_GROUP_TYPE = :attr_group_type
4130 AND (UAI1.PROCESS_STATUS = '||G_PS_IN_PROCESS||' OR UAI1.PROCESS_STATUS > '||G_PS_BAD_ATTR_OR_AG_METADATA||' )'
4131 USING p_data_set_id, p_attr_group_type;
4132 LOOP
4133 FETCH l_dynamic_dist_ag_cursor INTO l_attr_group_intf_rec;
4134 EXIT WHEN l_dynamic_dist_ag_cursor%NOTFOUND;
4135
4136 code_debug('----------Inside Attribute Group level validation loop: processing Attribute Group-'||l_attr_group_intf_rec.ATTR_GROUP_INT_NAME||'-'||p_attr_group_type ,2);
4137
4138 l_do_dml_for_this_ag := true;
4139
4140 l_attr_group_metadata_obj := EGO_USER_ATTRS_COMMON_PVT.Get_Attr_Group_Metadata(
4141 p_attr_group_id => NULL
4142 ,p_application_id => p_application_id
4143 ,p_attr_group_type => p_attr_group_type
4144 ,p_attr_group_name => l_attr_group_intf_rec.ATTR_GROUP_INT_NAME
4145 );
4146
4147 l_attr_metadata_table := l_attr_group_metadata_obj.ATTR_METADATA_TABLE;
4148 l_attr_metadata_table_sr := l_attr_group_metadata_obj.ATTR_METADATA_TABLE;
4149 l_attr_metadata_table_1 := l_attr_group_metadata_obj.ATTR_METADATA_TABLE;
4150
4151 code_debug(' After the required and defaulting validations ' ,2);
4152
4153 --------------------------------------------------------
4154 -- in this loop we do the MR specific validations
4155 -- these are basically the ones which require UK's
4156 --------------------------------------------------------
4157 IF (l_attr_group_metadata_obj.MULTI_ROW_CODE = 'Y') THEN
4158
4159 code_debug(' This attribute group is a multi-row attribute group, reached inside the MR specific validation loop ', 2);
4160 -------------------------------------------
4161 -- at the end of this loop we will get the query
4162 -- to identify a row in the EXT table
4163 -- with the UK's
4164 -------------------------------------------
4165 l_ext_table_select := ' '||l_ext_vl_name ||
4166 ' EXTVL1 WHERE EXTVL1.ATTR_GROUP_ID='||l_attr_group_metadata_obj.ATTR_GROUP_ID||' ';
4167 /*
4168 TO DO: Dylan hard-coded the AG ID, because there's already so much hard-coding
4169 going on. But ultimately this is incorrect; everything needs to be bind variables.
4170 */
4171
4172 --LOOP THROUGH ALL THE ATTRS METADATA FOR THIS AG
4173 FOR i IN l_attr_metadata_table.FIRST .. l_attr_metadata_table.LAST
4174 LOOP
4175 IF (l_attr_metadata_table(i).UNIQUE_KEY_FLAG = 'Y' ) THEN
4176
4177 --IF ( l_attr_metadata_table(i).DATA_TYPE_CODE <> EGO_EXT_FWK_PUB.G_TRANS_TEXT_DATA_TYPE OR 1=1) THEN
4178 --GNANDA : Since now we are supporting TL UK's we do not need to error out the AG rows with
4179 --TL attrs as UK's in them.
4180 IF (l_attr_metadata_table(i).DATA_TYPE_CODE = EGO_EXT_FWK_PUB.G_NUMBER_DATA_TYPE ) THEN
4181 l_intf_column_name := ' ATTR_VALUE_NUM ';
4182 wierd_constant := G_NULL_TOKEN_NUM;
4183 ELSIF (l_attr_metadata_table(i).DATA_TYPE_CODE = EGO_EXT_FWK_PUB.G_DATE_DATA_TYPE OR l_attr_metadata_table(i).DATA_TYPE_CODE = EGO_EXT_FWK_PUB.G_DATE_TIME_DATA_TYPE ) THEN
4184 l_intf_column_name := ' ATTR_VALUE_DATE ';
4185 wierd_constant := G_NULL_TOKEN_DATE;
4186 ELSE
4187 l_intf_column_name := ' ATTR_VALUE_STR ';
4188 wierd_constant := G_NULL_TOKEN_STR;
4189 END IF;
4190
4191 l_intf_tbl_select :=
4192 ' (SELECT '||l_intf_column_name||' FROM '||p_interface_table_name||
4193 ' WHERE DATA_SET_ID = '||p_data_set_id||
4194 ' AND ATTR_GROUP_INT_NAME = '''||
4195 l_attr_group_metadata_obj.ATTR_GROUP_NAME||
4196 ''' AND ATTR_INT_NAME = '''||
4197 l_attr_metadata_table(i).ATTR_NAME||
4198 ''' AND ROW_IDENTIFIER = UAI1.ROW_IDENTIFIER';
4199
4200 l_intf_tbl_select := l_intf_tbl_select || ')';
4201
4202 l_ext_table_select := l_ext_table_select || ' AND NVL(EXTVL1.'||l_attr_metadata_table(i).DATABASE_COLUMN||','||wierd_constant||') = NVL('||l_intf_tbl_select||','||wierd_constant||')';
4203 /*
4204 ELSE
4205 l_dynamic_sql :=
4206 'UPDATE '||p_interface_table_name||'
4207 SET PROCESS_STATUS = PROCESS_STATUS + '||G_PS_TL_COL_IS_A_UK||'
4208 WHERE DATA_SET_ID = :data_set_id
4209 AND PROCESS_STATUS <> 3
4210 AND BITAND(PROCESS_STATUS, '||G_PS_NO_PRIVILEGES||') = 0
4211 AND ATTR_GROUP_INT_NAME = :attr_group_int_name ';
4212
4213 EXECUTE IMMEDIATE l_dynamic_sql
4214 USING p_data_set_id, l_attr_group_metadata_obj.ATTR_GROUP_NAME;
4215
4216 l_do_dml_for_this_ag := false;
4217
4218 END IF;
4219 */
4220 END IF;
4221 END LOOP;
4222
4223 IF (l_pk1_column_name IS NOT NULL) THEN
4224 l_ext_table_select := l_ext_table_select || ' AND EXTVL1.'||l_pk1_column_name||' = UAI1.'||l_pk1_column_name;
4225 END IF;
4226 IF (l_pk2_column_name IS NOT NULL) THEN
4227 l_ext_table_select := l_ext_table_select || ' AND EXTVL1.'||l_pk2_column_name||' = UAI1.'||l_pk2_column_name;
4228 END IF;
4229 IF (l_pk3_column_name IS NOT NULL) THEN
4230 l_ext_table_select := l_ext_table_select || ' AND EXTVL1.'||l_pk3_column_name||' = UAI1.'||l_pk3_column_name;
4231 END IF;
4232 IF (l_pk4_column_name IS NOT NULL) THEN
4233 l_ext_table_select := l_ext_table_select || ' AND EXTVL1.'||l_pk4_column_name||' = UAI1.'||l_pk4_column_name;
4234 END IF;
4235 IF (l_pk5_column_name IS NOT NULL) THEN
4236 l_ext_table_select := l_ext_table_select || ' AND EXTVL1.'||l_pk5_column_name||' = UAI1.'||l_pk5_column_name;
4237 END IF;
4238
4239 -- adding datalevel columns to the query
4240 IF(l_data_level_col_exists) THEN
4241 l_ext_table_select := l_ext_table_select || ' AND NVL(EXTVL1.DATA_LEVEL_ID,'||G_NULL_TOKEN_NUM||') '||
4242 ' = NVL(UAI1.DATA_LEVEL_ID,'||G_NULL_TOKEN_NUM||')';
4243
4244 FOR i IN l_list_of_dl_for_ag_type.FIRST .. l_list_of_dl_for_ag_type.LAST
4245 LOOP
4246
4247 IF (l_list_of_dl_for_ag_type(i).PK_COLUMN_NAME1 IS NOT NULL AND l_list_of_dl_for_ag_type(i).PK_COLUMN_NAME1 <> 'NONE'
4248 AND INSTR(l_ext_table_select,l_list_of_dl_for_ag_type(i).PK_COLUMN_NAME1) = 0) THEN
4249
4250 IF(l_list_of_dl_for_ag_type(i).PK_COLUMN_TYPE1 = 'NUMBER') THEN
4251 wierd_constant := G_NULL_TOKEN_NUM;
4252 ELSIF (l_list_of_dl_for_ag_type(i).PK_COLUMN_TYPE1 = 'DATE' OR l_list_of_dl_for_ag_type(i).PK_COLUMN_TYPE1 = 'DATETIME') THEN
4253 wierd_constant := G_NULL_TOKEN_DATE;
4254 ELSE
4255 wierd_constant := G_NULL_TOKEN_STR;
4256 END IF;
4257
4258 l_ext_table_select := l_ext_table_select || ' AND NVL(EXTVL1.'||l_list_of_dl_for_ag_type(i).PK_COLUMN_NAME1||','||wierd_constant||') '||
4259 ' = NVL(UAI1.'||l_list_of_dl_for_ag_type(i).PK_COLUMN_NAME1||','||wierd_constant||')';
4260 END IF;
4261 IF (l_list_of_dl_for_ag_type(i).PK_COLUMN_NAME2 IS NOT NULL AND l_list_of_dl_for_ag_type(i).PK_COLUMN_NAME2 <> 'NONE'
4262 AND INSTR(l_ext_table_select,l_list_of_dl_for_ag_type(i).PK_COLUMN_NAME2) = 0) THEN
4263 IF(l_list_of_dl_for_ag_type(i).PK_COLUMN_TYPE2 = 'NUMBER') THEN
4264 wierd_constant := G_NULL_TOKEN_NUM;
4265 ELSIF (l_list_of_dl_for_ag_type(i).PK_COLUMN_TYPE2 = 'DATE' OR l_list_of_dl_for_ag_type(i).PK_COLUMN_TYPE2 = 'DATETIME') THEN
4266 wierd_constant := G_NULL_TOKEN_DATE;
4267 ELSE
4268 wierd_constant := G_NULL_TOKEN_STR;
4269 END IF;
4270 l_ext_table_select := l_ext_table_select || ' AND NVL(EXTVL1.'||l_list_of_dl_for_ag_type(i).PK_COLUMN_NAME2||','||wierd_constant||') '||
4271 ' = NVL(UAI1.'||l_list_of_dl_for_ag_type(i).PK_COLUMN_NAME2||','||wierd_constant||')';
4272 END IF;
4273 IF (l_list_of_dl_for_ag_type(i).PK_COLUMN_NAME3 IS NOT NULL AND l_list_of_dl_for_ag_type(i).PK_COLUMN_NAME3 <> 'NONE'
4274 AND INSTR(l_ext_table_select,l_list_of_dl_for_ag_type(i).PK_COLUMN_NAME3) = 0) THEN
4275 IF(l_list_of_dl_for_ag_type(i).PK_COLUMN_TYPE3 = 'NUMBER') THEN
4276 wierd_constant := G_NULL_TOKEN_NUM;
4277 ELSIF (l_list_of_dl_for_ag_type(i).PK_COLUMN_TYPE3 = 'DATE' OR l_list_of_dl_for_ag_type(i).PK_COLUMN_TYPE3 = 'DATETIME') THEN
4278 wierd_constant := G_NULL_TOKEN_DATE;
4279 ELSE
4280 wierd_constant := G_NULL_TOKEN_STR;
4281 END IF;
4282 l_ext_table_select := l_ext_table_select || ' AND NVL(EXTVL1.'||l_list_of_dl_for_ag_type(i).PK_COLUMN_NAME3||','||wierd_constant||') '||
4283 ' = NVL(UAI1.'||l_list_of_dl_for_ag_type(i).PK_COLUMN_NAME3||','||wierd_constant||')';
4284 END IF;
4285 IF (l_list_of_dl_for_ag_type(i).PK_COLUMN_NAME4 IS NOT NULL AND l_list_of_dl_for_ag_type(i).PK_COLUMN_NAME4 <> 'NONE'
4286 AND INSTR(l_ext_table_select,l_list_of_dl_for_ag_type(i).PK_COLUMN_NAME4) = 0) THEN
4287 IF(l_list_of_dl_for_ag_type(i).PK_COLUMN_TYPE4 = 'NUMBER') THEN
4288 wierd_constant := G_NULL_TOKEN_NUM;
4289 ELSIF (l_list_of_dl_for_ag_type(i).PK_COLUMN_TYPE4 = 'DATE' OR l_list_of_dl_for_ag_type(i).PK_COLUMN_TYPE4 = 'DATETIME') THEN
4290 wierd_constant := G_NULL_TOKEN_DATE;
4291 ELSE
4292 wierd_constant := G_NULL_TOKEN_STR;
4293 END IF;
4294 l_ext_table_select := l_ext_table_select || ' AND NVL(EXTVL1.'||l_list_of_dl_for_ag_type(i).PK_COLUMN_NAME4||','||wierd_constant||') '||
4295 ' = NVL(UAI1.'||l_list_of_dl_for_ag_type(i).PK_COLUMN_NAME4||','||wierd_constant||')';
4296 END IF;
4297 IF (l_list_of_dl_for_ag_type(i).PK_COLUMN_NAME5 IS NOT NULL AND l_list_of_dl_for_ag_type(i).PK_COLUMN_NAME5 <> 'NONE'
4298 AND INSTR(l_ext_table_select,l_list_of_dl_for_ag_type(i).PK_COLUMN_NAME5) = 0) THEN
4299 IF(l_list_of_dl_for_ag_type(i).PK_COLUMN_TYPE5 = 'NUMBER') THEN
4300 wierd_constant := G_NULL_TOKEN_NUM;
4301 ELSIF (l_list_of_dl_for_ag_type(i).PK_COLUMN_TYPE5 = 'DATE' OR l_list_of_dl_for_ag_type(i).PK_COLUMN_TYPE5 = 'DATETIME') THEN
4302 wierd_constant := G_NULL_TOKEN_DATE;
4303 ELSE
4304 wierd_constant := G_NULL_TOKEN_STR;
4305 END IF;
4306 l_ext_table_select := l_ext_table_select || ' AND NVL(EXTVL1.'||l_list_of_dl_for_ag_type(i).PK_COLUMN_NAME5||','||wierd_constant||') '||
4307 ' = NVL(UAI1.'||l_list_of_dl_for_ag_type(i).PK_COLUMN_NAME5||','||wierd_constant||')';
4308 END IF;
4309 END LOOP;
4310 ELSE
4311
4312 IF (l_num_data_level_columns = 1) THEN
4313 l_ext_table_select := l_ext_table_select || ' AND NVL(EXTVL1.'||l_data_level_column_1||',-1) = NVL(UAI1.'||l_data_level_column_1||',-1)';
4314
4315 ELSIF (l_num_data_level_columns = 2) THEN
4316 l_ext_table_select := l_ext_table_select || ' AND NVL(EXTVL1.'||l_data_level_column_1||',-1) = NVL(UAI1.'||l_data_level_column_1||',-1)';
4317 l_ext_table_select := l_ext_table_select || ' AND NVL(EXTVL1.'||l_data_level_column_2||',-1) = NVL(UAI1.'||l_data_level_column_2||',-1)';
4318
4319 ELSIF (l_num_data_level_columns = 3) THEN
4320 l_ext_table_select := l_ext_table_select || ' AND NVL(EXTVL1.'||l_data_level_column_1||',-1) = NVL(UAI1.'||l_data_level_column_1||',-1)';
4321 l_ext_table_select := l_ext_table_select || ' AND NVL(EXTVL1.'||l_data_level_column_2||',-1) = NVL(UAI1.'||l_data_level_column_2||',-1)';
4322 l_ext_table_select := l_ext_table_select || ' AND NVL(EXTVL1.'||l_data_level_column_3||',-1) = NVL(UAI1.'||l_data_level_column_3||',-1)';
4323 END IF;
4324
4325
4326 END IF;
4327
4328 code_debug(' The query generated for identifying the UKs is :'||l_ext_table_select ,3);
4329
4330 ---------------------------------------------------------------
4331 -- We go on with the AG loop validations only if the --
4332 -- API has been called with the parameter p_validate as TRUE --
4333 ---------------------------------------------------------------
4334 IF (p_validate = TRUE ) THEN -- search for *p_validate-IF-2* for finding the end of this IF
4335 --------------------------------------------------------
4336 -- HERE WE DO THE TABLE VALUE SET VALIDATION FOR MR AG
4337 --------------------------------------------------------
4338 FOR y IN l_attr_metadata_table.FIRST .. l_attr_metadata_table.LAST
4339 LOOP
4340 IF (Attr_Is_In_Data_Set(l_attr_metadata_table(y),
4341 l_dist_attrs_in_data_set_table)) THEN
4342 l_attr_exists_in_intf := 'EXISTS';
4343 ELSE
4344 l_attr_exists_in_intf := 'NOTEXISTS';
4345 END IF;
4346
4347 l_tvs_where_clause := ' ';
4348 --bug9846845, initialization the l_tvs_where_clause_clob
4349 l_tvs_where_clause_clob := ' ';
4350 IF (l_attr_exists_in_intf = 'EXISTS') THEN --WE DO THE TVC VALIDATION FOR SRAG ONLY IF THIS ATTR HAS ATLEAST ONE VALID INSTANCE IN THE INTF TABLE
4351 IF (l_attr_metadata_table(y).VALIDATION_CODE = EGO_EXT_FWK_PUB.G_TABLE_VALIDATION_CODE) THEN
4352
4353 code_debug(' The attribute '||l_attr_metadata_table(y).ATTR_NAME||' has a table value set attached with value set id :'||l_attr_metadata_table(y).VALUE_SET_ID ,2);
4354
4355 SELECT APPLICATION_TABLE_NAME,
4356 VALUE_COLUMN_NAME,--VALUE_COLUMN_TYPE,VALUE_COLUMN_SIZE,
4357 ID_COLUMN_NAME, --ID_COLUMN_TYPE, ID_COLUMN_SIZE,
4358 MEANING_COLUMN_NAME, --MEANING_COLUMN_TYPE,
4359 ADDITIONAL_WHERE_CLAUSE
4360 INTO l_tvs_table_name,
4361 l_tvs_val_col, --l_tvs_val_col_type, l_tvs_val_col_size,
4362 l_tvs_id_col, --l_tvs_id_col_type, l_tvs_id_col_size
4363 l_tvs_mean_col, --l_tvs_mean_col_type,
4364 l_tvs_where_clause
4365 FROM FND_FLEX_VALIDATION_TABLES
4366 WHERE FLEX_VALUE_SET_ID = l_attr_metadata_table(y).VALUE_SET_ID;
4367
4368 --By GEGUO for bug 9218013
4369 l_tvs_where_clause := trim(l_tvs_where_clause) || ' ';--BugFix:4609213: in case we have a bind at the end it fails because of the assimption mentioned below !
4370 IF (l_tvs_id_col IS NOT NULL) THEN
4371 l_tvs_col := l_tvs_id_col;
4372 ELSE
4373 l_tvs_col := l_tvs_val_col;
4374 END IF;
4375
4376
4377 -- abedajna Bug 6207675
4378 --if ( l_tvs_where_clause is not null ) then
4379 -- l_tvs_where_clause := '('||l_tvs_where_clause||')';
4380 --end if;
4381 -- abedajna Bug 6322809
4382
4383 --bug 9646916 if additional whereclause simply start with ORDER BY don't do anything
4384 IF (INSTR(UPPER(LTRIM(l_tvs_where_clause)), 'ORDER ') <> 1) THEN
4385 l_tvs_where_clause := process_whereclause(l_tvs_where_clause);
4386 END IF;
4387
4388
4389
4390
4391 IF(INSTR(UPPER(LTRIM(l_tvs_where_clause)),'WHERE ')) = 1 THEN --BugFix : 4171705
4392 l_tvs_where_clause := SUBSTR(l_tvs_where_clause, INSTR(UPPER(l_tvs_where_clause),'WHERE ')+5 );
4393 ELSIF (INSTR(UPPER(LTRIM(l_tvs_where_clause)),'(WHERE ')) = 1 THEN /*Added one more condition for bug 7508982*/
4394 l_tvs_where_clause := '('||SUBSTR(l_tvs_where_clause, INSTR(UPPER(l_tvs_where_clause),'WHERE ')+5 );
4395 END IF;
4396
4397 ------------------------------------------------------
4398 -- In case the where clause has new line or tabs --
4399 -- we need to remove it BugFix:4101091 --
4400 ------------------------------------------------------
4401 SELECT REPLACE(l_tvs_where_clause,FND_GLOBAL.LOCAL_CHR(10),FND_GLOBAL.LOCAL_CHR(32)) INTO l_tvs_where_clause FROM dual; --replacing new line character
4402 SELECT REPLACE(l_tvs_where_clause,FND_GLOBAL.LOCAL_CHR(13),FND_GLOBAL.LOCAL_CHR(32)) INTO l_tvs_where_clause FROM dual; --removing carriage return
4403
4404 IF(INSTR(UPPER(l_tvs_where_clause),' ORDER ')) <> 0 THEN --Bug:4065857 gnanda we need to remove the order by clause if any in the where clause
4405 l_tvs_where_clause := SUBSTR(l_tvs_where_clause, 1 , INSTR(UPPER(l_tvs_where_clause),' ORDER '));
4406 END IF;
4407
4408 IF(INSTR(UPPER(l_tvs_where_clause),')ORDER ')) <> 0 THEN --BugFix:6133202
4409 l_tvs_where_clause := SUBSTR(l_tvs_where_clause, 1 , INSTR(UPPER(l_tvs_where_clause),')ORDER '));
4410 END IF;
4411
4412
4413 IF(INSTR(UPPER(LTRIM(l_tvs_where_clause)),'ORDER ')) = 1 THEN --Bug:4065857 gnanda we need to remove the order by if where clause has only an order by
4414 l_tvs_where_clause := SUBSTR(l_tvs_where_clause, 1 , INSTR(UPPER(l_tvs_where_clause),' ORDER '));
4415 l_tvs_where_clause := ' 1=1 '|| l_tvs_where_clause;
4416 END IF;
4417
4418 l_tvs_metadata_fetched := TRUE;
4419 --bug9846845, using l_tvs_where_clause_clob instead of l_tvs_where_clause to deal with following loop
4420 l_tvs_where_clause := l_tvs_where_clause || ' ';
4421 l_tvs_where_clause_clob := l_tvs_where_clause;
4422
4423
4424 --WHILE (INSTR(l_tvs_where_clause, ':$ATTRIBUTEGROUP$') > 0)
4425 WHILE (DBMS_LOB.INSTR(l_tvs_where_clause_clob, ':$ATTRIBUTEGROUP$') > 0)
4426 LOOP
4427
4428 --l_attrname_start_index := INSTR(l_tvs_where_clause,':$ATTRIBUTEGROUP$') +18;
4429 l_attrname_start_index := DBMS_LOB.INSTR(l_tvs_where_clause_clob,':$ATTRIBUTEGROUP$') +18;
4430 -- NOTE: WE ASSUME THAT WE WILL HAVE A SPACE AFTER THE ATTR NAME (will look into this later)
4431 --l_attrname_end_index := INSTR(l_tvs_where_clause,' ',l_attrname_start_index,1);
4432 l_attrname_end_index := DBMS_LOB.INSTR(l_tvs_where_clause_clob,' ',l_attrname_start_index,1);
4433
4434 --l_bind_attr_name := SUBSTR(l_tvs_where_clause,l_attrname_start_index,l_attrname_end_index-l_attrname_start_index);
4435 l_bind_attr_name := DBMS_LOB.SUBSTR(l_tvs_where_clause_clob,l_attrname_end_index-l_attrname_start_index,l_attrname_start_index);
4436
4437 -- HERE WE GET THE COLNAME AND DATATYPE OF THE ATTRIBUTE USED AS BIND VARIABLE
4438
4439 FOR k IN l_attr_metadata_table.FIRST .. l_attr_metadata_table.LAST
4440 LOOP
4441 IF (l_attr_metadata_table(k).ATTR_NAME = l_bind_attr_name) THEN
4442 l_ext_attr_col_name := l_attr_metadata_table(k).DATABASE_COLUMN;
4443 l_bind_attr_data_type := l_attr_metadata_table(k).DATA_TYPE_CODE;
4444 END IF;
4445 END LOOP;
4446
4447 IF (l_ext_attr_col_name IS NULL OR l_bind_attr_data_type IS NULL) THEN
4448 l_tvs_metadata_fetched := FALSE;
4449 ELSE
4450 l_tvs_metadata_fetched := TRUE;
4451 END IF;
4452
4453 -- we already have the query to identify the row for MR AG's using the UK's (l_ext_table_select)
4454 -- so we can use this query to find the value to bind from the production table.
4455
4456 l_value_from_ext_table := ' (SELECT '|| l_ext_attr_col_name ||'
4457 FROM '||l_ext_table_select||'
4458 AND ATTR_GROUP_ID = UAI1.ATTR_GROUP_ID) ';
4459
4460 IF (l_bind_attr_data_type = EGO_EXT_FWK_PUB.G_NUMBER_DATA_TYPE) THEN
4461 l_value_from_intftbl := '(SELECT ATTR_VALUE_NUM FROM '||p_interface_table_name||'
4462 WHERE ROW_IDENTIFIER = UAI1.ROW_IDENTIFIER
4463 AND DATA_SET_ID = '||p_data_set_id||'
4464 AND ATTR_INT_NAME = '''||l_bind_attr_name||''' )';
4465 ELSIF (l_bind_attr_data_type = EGO_EXT_FWK_PUB.G_DATE_DATA_TYPE OR
4466 l_bind_attr_data_type = EGO_EXT_FWK_PUB.G_DATE_TIME_DATA_TYPE) THEN
4467 l_value_from_intftbl := '(SELECT ATTR_VALUE_DATE FROM '||p_interface_table_name||'
4468 WHERE ROW_IDENTIFIER = UAI1.ROW_IDENTIFIER
4469 AND DATA_SET_ID = '||p_data_set_id||'
4470 AND ATTR_INT_NAME = '''||l_bind_attr_name||''' )';
4471 ELSE
4472 l_value_from_intftbl := '(SELECT ATTR_VALUE_STR FROM '||p_interface_table_name||'
4473 WHERE ROW_IDENTIFIER = UAI1.ROW_IDENTIFIER
4474 AND DATA_SET_ID = '||p_data_set_id||'
4475 AND ATTR_INT_NAME = '''||l_bind_attr_name||''' )';
4476 END IF;
4477 -- now we replace the :$ATTRIBUTEGROUP$.attrname with the query to find the value.
4478
4479 -- Bug 10151142 : Start
4480 l_tvs_string_length := DBMS_LOB.INSTR(l_tvs_where_clause_clob, ':$ATTRIBUTEGROUP$')-1;
4481
4482 l_offset := 1;
4483 l_tvs_where_clause_clob1 := '';
4484 l_amount := 8191;
4485
4486 WHILE l_offset <= l_tvs_string_length LOOP
4487 l_buffer := '';
4488
4489 IF ( l_tvs_string_length > l_amount) THEN
4490 l_tvs_colb_length_diff := l_tvs_string_length - l_offset +1;
4491
4492 IF (l_tvs_colb_length_diff >= l_amount) THEN
4493 dbms_lob.read(l_tvs_where_clause_clob, l_amount, l_offset, l_buffer);
4494 l_offset := l_offset + l_amount;
4495 ELSE
4496 dbms_lob.read(l_tvs_where_clause_clob, l_tvs_colb_length_diff, l_offset, l_buffer);
4497 l_offset := l_offset + l_tvs_colb_length_diff;
4498 END IF;
4499 ELSE
4500 dbms_lob.read(l_tvs_where_clause_clob, l_tvs_string_length, l_offset, l_buffer);
4501 l_offset := l_offset + l_tvs_string_length;
4502 END IF;
4503
4504 l_tvs_where_clause_clob1 := l_tvs_where_clause_clob1||l_buffer;
4505 END LOOP;
4506
4507 l_offset := 1;
4508 l_clob_length := DBMS_LOB.GETLENGTH(l_tvs_where_clause_clob) - l_attrname_end_index;
4509 l_amount := 32767;
4510 l_tvs_where_clause_clob2 := '';
4511
4512 WHILE l_offset <= l_clob_length LOOP
4513 l_tvs_where_clause_buffer := '';
4514 dbms_lob.read(l_tvs_where_clause_clob, l_amount, (l_attrname_end_index + (l_offset - 1)), l_tvs_where_clause_buffer);
4515 l_tvs_where_clause_clob2 := l_tvs_where_clause_clob2 || l_tvs_where_clause_buffer;
4516 l_offset := l_offset + l_amount;
4517 END loop;
4518
4519 l_tvs_where_clause_clob := l_tvs_where_clause_clob1 ||'(NVL('||l_value_from_intftbl||',
4520 DECODE(UAI1.TRANSACTION_TYPE, ''UPDATE'','||l_value_from_ext_table||'
4521 ,''CREATE'',NULL
4522 , ''SYNC'','||l_value_from_ext_table||'
4523 ,NULL)
4524 )
4525 )'||
4526 l_tvs_where_clause_clob2;
4527
4528 /*l_tvs_where_clause_clob := DBMS_LOB.SUBSTR(l_tvs_where_clause_clob,DBMS_LOB.INSTR(l_tvs_where_clause_clob, ':$ATTRIBUTEGROUP$')-1,1) ||
4529 '(NVL('||l_value_from_intftbl||',
4530 DECODE(UAI1.TRANSACTION_TYPE, ''UPDATE'','||l_value_from_ext_table||'
4531 ,''CREATE'',NULL
4532 , ''SYNC'','||l_value_from_ext_table||'
4533 ,NULL)
4534 )
4535 )'||
4536 DBMS_LOB.SUBSTR(l_tvs_where_clause_clob,DBMS_LOB.GETLENGTH(l_tvs_where_clause_clob), l_attrname_end_index);
4537 */
4538 -- Bug 10151142 : End
4539 END LOOP;
4540
4541 WHILE (DBMS_LOB.INSTR(l_tvs_where_clause_clob, ':$OBJECT$') > 0)
4542 LOOP
4543 SELECT REPLACE(l_tvs_where_clause_clob,':$OBJECT$','UAI1') INTO l_tvs_where_clause_clob FROM DUAL;
4544 END LOOP;
4545
4546 -- l_tvs_where_clause := l_tvs_where_clause_clob; -- Bug 10151142 : Commented
4547 --end of bug9846845
4548
4549 /*
4550 NOTE ...
4551 THERE COULD BE A POSSIBILITY THAT THE TVS QUERY RETURNS MORE THAN ONE ROWS
4552 IN THIS CASE WE JUST TAKE THE FIRST ROW : ( i.e. WHERE ROWNUM = 1)
4553 */
4554 /* Bug 10151142 : Start
4555 Use l_tvs_where_clause_clob instead of l_tvs_where_clause
4556 Use l_tvs_select_clob instead of l_tvs_select
4557 Use l_tvs_num_val_check_sel_clob instead of l_tvs_num_val_check_select
4558 Use l_tvs_date_val_check_sel_clob instead of l_tvs_date_val_check_select
4559 Use l_tvs_str_val_check_sel_clob instead of l_tvs_str_val_check_select
4560 */
4561 l_tvs_where_clause_clob := RTRIM(LTRIM(l_tvs_where_clause_clob));
4562
4563 IF LENGTH(l_tvs_where_clause_clob)<3 OR LENGTH(l_tvs_where_clause_clob) IS NULL THEN --added for bugFix:4609213
4564 l_tvs_where_clause_clob := ' 1=1 '||l_tvs_where_clause_clob;
4565 END IF;
4566
4567 l_tvs_select_clob := '(SELECT DISTINCT '||l_tvs_col||' FROM '||l_tvs_table_name||'
4568 WHERE '||l_tvs_where_clause_clob||'
4569 AND ROWNUM = 1
4570 AND '||l_tvs_val_col||' = UAI1.ATTR_DISP_VALUE )';
4571
4572 l_tvs_num_val_check_sel_clob := '(SELECT COUNT(*) FROM '||l_tvs_table_name||'
4573 WHERE '||l_tvs_where_clause_clob||'
4574 AND ROWNUM = 1
4575 AND '||l_tvs_col||' = UAI1.ATTR_VALUE_NUM )';
4576
4577 l_tvs_date_val_check_sel_clob := '(SELECT COUNT(*) FROM '||l_tvs_table_name||'
4578 WHERE '||l_tvs_where_clause_clob||'
4579 AND ROWNUM = 1
4580 AND '||l_tvs_col||' = UAI1.ATTR_DATE_VALUE )';
4581
4582 l_tvs_str_val_check_sel_clob := '(SELECT COUNT(*) FROM '||l_tvs_table_name||'
4583 WHERE '||l_tvs_where_clause_clob||'
4584 AND ROWNUM = 1
4585 AND '||l_tvs_col||' = UAI1.ATTR_VALUE_STR )';
4586
4587 -- code_debug(' The TVS query constructed is :'||l_tvs_select ,3);
4588 code_debug(' The Length of TVS query constructed is :'||dbms_lob.getlength(l_tvs_select_clob), 3);
4589 code_debug(' The TVS query constructed is :');
4590
4591 /* Print TVS Query - Start
4592 Below Code is for printing the TVS query in the debug log */
4593 l_clob_length := dbms_lob.getlength(l_tvs_select_clob);
4594 l_offset := 1;
4595 l_amount := 8191;
4596
4597 /* Read 8191 characters from clob sequentially and append them to the VARCHAR2 variable
4598 using DBMS_LOB.READ function */
4599 while l_offset <= l_clob_length loop
4600 l_buffer := '';
4601 dbms_lob.read(l_tvs_select_clob, l_amount, l_offset, l_buffer);
4602 l_offset := l_offset + l_amount;
4603 code_debug(l_buffer, 3);
4604 end loop;
4605 /* Print TVS Query - End */
4606
4607 code_debug(' TVS query constructed - Done');
4608
4609 IF(l_tvs_metadata_fetched = FALSE) THEN
4610 IF (l_bad_bindattrs_tvs_cursor_id IS NULL) THEN
4611 l_bad_bindattrs_tvs_cursor_id := DBMS_SQL.Open_Cursor;
4612 l_dynamic_sql :=
4613 'UPDATE '||p_interface_table_name||'
4614 SET PROCESS_STATUS = PROCESS_STATUS + '||G_PS_BAD_ATTRS_IN_TVS_WHERE||'
4615 WHERE DATA_SET_ID = :data_set_id
4616 AND ATTR_INT_NAME = :attr_internal_name
4617 AND ATTR_GROUP_INT_NAME = :attr_group_int_name';
4618
4619 DBMS_SQL.Parse(l_bad_bindattrs_tvs_cursor_id, l_dynamic_sql, DBMS_SQL.NATIVE);
4620 DBMS_SQL.Bind_Variable(l_bad_bindattrs_tvs_cursor_id, ':data_set_id', p_data_set_id);
4621 END IF;
4622
4623 DBMS_SQL.Bind_Variable(l_bad_bindattrs_tvs_cursor_id, ':attr_group_int_name', l_attr_group_metadata_obj.ATTR_GROUP_NAME);
4624 DBMS_SQL.Bind_Variable(l_bad_bindattrs_tvs_cursor_id, ':attr_internal_name', l_attr_metadata_table(y).ATTR_NAME);
4625
4626 l_dummy := DBMS_SQL.Execute(l_bad_bindattrs_tvs_cursor_id);
4627
4628 ELSE -- now we do the interface table update since we are sure we have the metadata for bound variables
4629 /*
4630 Note: we are assuming that the setup is correct i.e. the column of the TVS are of correct data type
4631 the id col is of datatype same as the attribute
4632 the meanin col is of type character.
4633 another assumtion is that the user cannot enter the value directly in to the attr_val_* col
4634 he has to enter the data in attr_disp_Value column for which we get the actual attr val.
4635 */
4636 IF (l_attr_metadata_table(y).DATA_TYPE_CODE = EGO_EXT_FWK_PUB.G_NUMBER_DATA_TYPE) THEN
4637
4638 -- Bug 10151142 : Start
4639 /*
4640 l_dynamic_sql_1 :=
4641 'UPDATE '||p_interface_table_name||' UAI1
4642 SET PROCESS_STATUS = PROCESS_STATUS + DECODE(('||l_tvs_num_val_check_select||'),0,'||G_PS_VALUE_NOT_IN_TVS||',0)
4643 WHERE DATA_SET_ID = :data_set_id '||'
4644 AND (PROCESS_STATUS = '||G_PS_IN_PROCESS||' OR PROCESS_STATUS > '||G_PS_BAD_ATTR_OR_AG_METADATA||' )
4645 AND BITAND(PROCESS_STATUS, '||G_PS_NO_PRIVILEGES||') = 0
4646 AND ATTR_INT_NAME = '''||l_attr_metadata_table(y).ATTR_NAME||'''
4647 AND ATTR_GROUP_INT_NAME = '''||l_attr_group_metadata_obj.ATTR_GROUP_NAME||'''
4648 AND ATTR_VALUE_NUM IS NOT NULL';
4649
4650 l_dynamic_sql :=
4651 'UPDATE '||p_interface_table_name||' UAI1
4652 SET ATTR_VALUE_NUM = NVL('||l_tvs_select||',NULL),
4653 PROCESS_STATUS = PROCESS_STATUS + DECODE(('||l_tvs_select||'),NULL,'||G_PS_VALUE_NOT_IN_TVS||',0)
4654 WHERE DATA_SET_ID = :data_set_id '||'
4655 AND (PROCESS_STATUS = '||G_PS_IN_PROCESS||' OR PROCESS_STATUS > '||G_PS_BAD_ATTR_OR_AG_METADATA||' )
4656 AND BITAND(PROCESS_STATUS, '||G_PS_NO_PRIVILEGES||') = 0
4657 AND ATTR_INT_NAME = '''||l_attr_metadata_table(y).ATTR_NAME||'''
4658 AND ATTR_GROUP_INT_NAME = '''||l_attr_group_metadata_obj.ATTR_GROUP_NAME||'''
4659 AND ATTR_DISP_VALUE IS NOT NULL ';
4660 -- We execute the above cursor in a PL/SQL block since we know that if this fails
4661 -- it is because of wrong setup the user has created for table value sets, so we
4662 -- need to mark the row as errored due to bad TVS setup.
4663 BEGIN
4664 EXECUTE IMMEDIATE l_dynamic_sql_1
4665 USING p_data_set_id;
4666 EXECUTE IMMEDIATE l_dynamic_sql
4667 USING p_data_set_id;
4668
4669 EXCEPTION
4670 WHEN OTHERS THEN
4671 IF (l_bad_tvs_sql_cursor_id IS NULL) THEN
4672 l_bad_tvs_sql_cursor_id := DBMS_SQL.Open_Cursor;
4673 l_dynamic_sql :=
4674 'UPDATE '||p_interface_table_name||'
4675 SET PROCESS_STATUS = PROCESS_STATUS + '||G_PS_BAD_TVS_SETUP||'
4676 WHERE DATA_SET_ID = :data_set_id
4677 AND ATTR_INT_NAME = :attr_internal_name
4678 AND ATTR_GROUP_INT_NAME = :attr_group_int_name';
4679
4680 DBMS_SQL.Parse(l_bad_tvs_sql_cursor_id, l_dynamic_sql, DBMS_SQL.NATIVE);
4681 DBMS_SQL.Bind_Variable(l_bad_tvs_sql_cursor_id, ':data_set_id', p_data_set_id);
4682 END IF;
4683 DBMS_SQL.Bind_Variable(l_bad_tvs_sql_cursor_id, ':attr_group_int_name', l_attr_group_metadata_obj.ATTR_GROUP_NAME);
4684 DBMS_SQL.Bind_Variable(l_bad_tvs_sql_cursor_id, ':attr_internal_name', l_attr_metadata_table(y).ATTR_NAME);
4685 l_dummy := DBMS_SQL.Execute(l_bad_tvs_sql_cursor_id);
4686 END;
4687 */
4688
4689 Prepare_Dynamic_Sqls_Clob ( p_data_set_id => p_data_set_id,
4690 p_data_type_code => EGO_EXT_FWK_PUB.G_NUMBER_DATA_TYPE,
4691 p_interface_table_name => p_interface_table_name,
4692 p_tvs_val_check_sel_clob => l_tvs_num_val_check_sel_clob,
4693 p_tvs_select_clob => l_tvs_select_clob,
4694 p_attr_name => l_attr_metadata_table(y).ATTR_NAME,
4695 p_attr_group_name => l_attr_group_metadata_obj.ATTR_GROUP_NAME,
4696 x_return_status => l_return_status,
4697 x_msg_data => l_msg_data,
4698 x_sql_1_ub => l_sql_1_ub,
4699 x_sql_ub => l_sql_ub,
4700 x_dynamic_sql_1_v_type => l_dynamic_sql_1_v_type,
4701 x_dynamic_sql_v_type => l_dynamic_sql_v_type
4702 );
4703
4704 code_debug(' After Prepare_Dynamic_Sqls_Clob - l_return_status :'||l_return_status ,3);
4705
4706 IF (l_dynamic_sql_1_cursor_id IS NULL) THEN
4707 l_dynamic_sql_1_cursor_id := DBMS_SQL.Open_Cursor;
4708 END IF;
4709
4710 IF (l_dynamic_sql_cursor_id IS NULL) THEN
4711 l_dynamic_sql_cursor_id := DBMS_SQL.Open_Cursor;
4712 END IF;
4713
4714 code_debug(' Before parse l_dynamic_sql_1_cursor_id - l_sql_1_ub :'||l_sql_1_ub ,3);
4715
4716 BEGIN
4717 DBMS_SQL.PARSE( c => l_dynamic_sql_1_cursor_id,
4718 statement => l_dynamic_sql_1_v_type,
4719 lb => 1,
4720 ub => l_sql_1_ub,
4721 lfflg => false,
4722 language_flag => dbms_sql.native );
4723
4724
4725 DBMS_SQL.Bind_Variable(l_dynamic_sql_1_cursor_id, ':data_set_id', p_data_set_id);
4726 code_debug(' EXECUTING l_dynamic_sql_1_cursor_id' ,3);
4727
4728 l_dummy := DBMS_SQL.Execute(l_dynamic_sql_1_cursor_id);
4729
4730 code_debug(' Before parse l_dynamic_sql_cursor_id - l_sql_ub :'||l_sql_ub ,3);
4731
4732 DBMS_SQL.PARSE( c => l_dynamic_sql_cursor_id,
4733 statement => l_dynamic_sql_v_type,
4734 lb => 1,
4735 ub => l_sql_ub,
4736 lfflg => false,
4737 language_flag => dbms_sql.native );
4738
4739 DBMS_SQL.Bind_Variable(l_dynamic_sql_cursor_id, ':data_set_id', p_data_set_id);
4740 code_debug(' EXECUTING l_dynamic_sql_cursor_id' ,3);
4741
4742 l_dummy := DBMS_SQL.Execute(l_dynamic_sql_cursor_id);
4743 code_debug(' EXECUTING DONE' ,3);
4744
4745 EXCEPTION
4746 WHEN OTHERS THEN
4747 IF (l_dynamic_sql_cursor_id) IS NOT NULL THEN
4748 DBMS_SQL.Close_Cursor(l_dynamic_sql_cursor_id);
4749 END IF;
4750
4751 IF (l_dynamic_sql_1_cursor_id) IS NOT NULL THEN
4752 DBMS_SQL.Close_Cursor(l_dynamic_sql_1_cursor_id);
4753 END IF;
4754 code_debug(' ERROR :'||SQLERRM ,3);
4755
4756 IF (l_bad_tvs_sql_cursor_id IS NULL) THEN
4757 l_bad_tvs_sql_cursor_id := DBMS_SQL.Open_Cursor;
4758 l_dynamic_sql :=
4759 'UPDATE '||p_interface_table_name||'
4760 SET PROCESS_STATUS = PROCESS_STATUS + '||G_PS_BAD_TVS_SETUP||'
4761 WHERE DATA_SET_ID = :data_set_id
4762 AND ATTR_INT_NAME = :attr_internal_name
4763 AND ATTR_GROUP_INT_NAME = :attr_group_int_name';
4764
4765 DBMS_SQL.Parse(l_bad_tvs_sql_cursor_id, l_dynamic_sql, DBMS_SQL.NATIVE);
4766 DBMS_SQL.Bind_Variable(l_bad_tvs_sql_cursor_id, ':data_set_id', p_data_set_id);
4767 END IF;
4768 DBMS_SQL.Bind_Variable(l_bad_tvs_sql_cursor_id, ':attr_group_int_name', l_attr_group_metadata_obj.ATTR_GROUP_NAME);
4769 DBMS_SQL.Bind_Variable(l_bad_tvs_sql_cursor_id, ':attr_internal_name', l_attr_metadata_table(y).ATTR_NAME);
4770 l_dummy := DBMS_SQL.Execute(l_bad_tvs_sql_cursor_id);
4771 END;
4772 -- Bug 10151142 : End
4773
4774 ELSIF (l_attr_metadata_table(y).DATA_TYPE_CODE = EGO_EXT_FWK_PUB.G_DATE_DATA_TYPE OR l_attr_metadata_table(y).DATA_TYPE_CODE = EGO_EXT_FWK_PUB.G_DATE_TIME_DATA_TYPE) THEN
4775
4776 -- Bug 10151142 : Start
4777 /*
4778 l_dynamic_sql_1 :=
4779 'UPDATE '||p_interface_table_name||' UAI1
4780 SET PROCESS_STATUS = PROCESS_STATUS + DECODE(('||l_tvs_date_val_check_select||'),0,'||G_PS_VALUE_NOT_IN_TVS||',0)
4781 WHERE DATA_SET_ID = :data_set_id '||'
4782 AND (PROCESS_STATUS = '||G_PS_IN_PROCESS||' OR PROCESS_STATUS > '||G_PS_BAD_ATTR_OR_AG_METADATA||' )
4783 AND BITAND(PROCESS_STATUS, '||G_PS_NO_PRIVILEGES||') = 0
4784 AND ATTR_INT_NAME = '''||l_attr_metadata_table(y).ATTR_NAME||'''
4785 AND ATTR_GROUP_INT_NAME = '''||l_attr_group_metadata_obj.ATTR_GROUP_NAME||'''
4786 AND ATTR_VALUE_DATE IS NOT NULL';
4787
4788 l_dynamic_sql :=
4789 'UPDATE '||p_interface_table_name||' UAI1
4790 SET ATTR_VALUE_DATE = NVL('||l_tvs_select||',NULL),
4791 PROCESS_STATUS = PROCESS_STATUS + DECODE(('||l_tvs_select||'),NULL,'||G_PS_VALUE_NOT_IN_TVS||',0)
4792 WHERE DATA_SET_ID = :data_set_id '||'
4793 AND (PROCESS_STATUS = '||G_PS_IN_PROCESS||' OR PROCESS_STATUS > '||G_PS_BAD_ATTR_OR_AG_METADATA||' )
4794 AND BITAND(PROCESS_STATUS, '||G_PS_NO_PRIVILEGES||') = 0
4795 AND ATTR_INT_NAME = '''||l_attr_metadata_table(y).ATTR_NAME||'''
4796 AND ATTR_GROUP_INT_NAME = '''||l_attr_group_metadata_obj.ATTR_GROUP_NAME||'''
4797 AND ATTR_DISP_VALUE IS NOT NULL ';
4798 -- We execute the above cursor in a PL/SQL block since we know that if this fails
4799 -- it is because of wrong setup the user has created for table value sets, so we
4800 -- need to mark the row as errored due to bad TVS setup.
4801 BEGIN
4802 EXECUTE IMMEDIATE l_dynamic_sql_1
4803 USING p_data_set_id;
4804 EXECUTE IMMEDIATE l_dynamic_sql
4805 USING p_data_set_id;
4806 EXCEPTION
4807 WHEN OTHERS THEN
4808 IF (l_bad_tvs_sql_cursor_id IS NULL) THEN
4809 l_bad_tvs_sql_cursor_id := DBMS_SQL.Open_Cursor;
4810 l_dynamic_sql :=
4811 'UPDATE '||p_interface_table_name||'
4812 SET PROCESS_STATUS = PROCESS_STATUS + '||G_PS_BAD_TVS_SETUP||'
4813 WHERE DATA_SET_ID = :data_set_id
4814 AND ATTR_INT_NAME = :attr_internal_name
4815 AND ATTR_GROUP_INT_NAME = :attr_group_int_name';
4816
4817 DBMS_SQL.Parse(l_bad_tvs_sql_cursor_id, l_dynamic_sql, DBMS_SQL.NATIVE);
4818 DBMS_SQL.Bind_Variable(l_bad_tvs_sql_cursor_id, ':data_set_id', p_data_set_id);
4819 END IF;
4820 DBMS_SQL.Bind_Variable(l_bad_tvs_sql_cursor_id, ':attr_group_int_name', l_attr_group_metadata_obj.ATTR_GROUP_NAME);
4821 DBMS_SQL.Bind_Variable(l_bad_tvs_sql_cursor_id, ':attr_internal_name', l_attr_metadata_table(y).ATTR_NAME);
4822 l_dummy := DBMS_SQL.Execute(l_bad_tvs_sql_cursor_id);
4823 END;
4824 */
4825
4826 Prepare_Dynamic_Sqls_Clob ( p_data_set_id => p_data_set_id,
4827 p_data_type_code => EGO_EXT_FWK_PUB.G_DATE_DATA_TYPE,
4828 p_interface_table_name => p_interface_table_name,
4829 p_tvs_val_check_sel_clob => l_tvs_date_val_check_sel_clob,
4830 p_tvs_select_clob => l_tvs_select_clob,
4831 p_attr_name => l_attr_metadata_table(y).ATTR_NAME,
4832 p_attr_group_name => l_attr_group_metadata_obj.ATTR_GROUP_NAME,
4833 x_return_status => l_return_status,
4834 x_msg_data => l_msg_data,
4835 x_sql_1_ub => l_sql_1_ub,
4836 x_sql_ub => l_sql_ub,
4837 x_dynamic_sql_1_v_type => l_dynamic_sql_1_v_type,
4838 x_dynamic_sql_v_type => l_dynamic_sql_v_type
4839 );
4840
4841 code_debug(' After Prepare_Dynamic_Sqls_Clob - l_return_status :'||l_return_status ,3);
4842
4843 IF (l_dynamic_sql_1_cursor_id IS NULL) THEN
4844 l_dynamic_sql_1_cursor_id := DBMS_SQL.Open_Cursor;
4845 END IF;
4846
4847 IF (l_dynamic_sql_cursor_id IS NULL) THEN
4848 l_dynamic_sql_cursor_id := DBMS_SQL.Open_Cursor;
4849 END IF;
4850
4851 code_debug(' Before parse l_dynamic_sql_1_cursor_id - l_sql_1_ub :'||l_sql_1_ub ,3);
4852
4853 BEGIN
4854 DBMS_SQL.PARSE( c => l_dynamic_sql_1_cursor_id,
4855 statement => l_dynamic_sql_1_v_type,
4856 lb => 1,
4857 ub => l_sql_1_ub,
4858 lfflg => false,
4859 language_flag => dbms_sql.native );
4860
4861
4862 DBMS_SQL.Bind_Variable(l_dynamic_sql_1_cursor_id, ':data_set_id', p_data_set_id);
4863 code_debug(' EXECUTING l_dynamic_sql_1_cursor_id' ,3);
4864
4865 l_dummy := DBMS_SQL.Execute(l_dynamic_sql_1_cursor_id);
4866
4867 code_debug(' Before parse l_dynamic_sql_cursor_id - l_sql_ub :'||l_sql_ub ,3);
4868
4869 DBMS_SQL.PARSE( c => l_dynamic_sql_cursor_id,
4870 statement => l_dynamic_sql_v_type,
4871 lb => 1,
4872 ub => l_sql_ub,
4873 lfflg => false,
4874 language_flag => dbms_sql.native );
4875
4876 DBMS_SQL.Bind_Variable(l_dynamic_sql_cursor_id, ':data_set_id', p_data_set_id);
4877 code_debug(' EXECUTING l_dynamic_sql_cursor_id' ,3);
4878
4879 l_dummy := DBMS_SQL.Execute(l_dynamic_sql_cursor_id);
4880 code_debug(' EXECUTING DONE' ,3);
4881 EXCEPTION
4882 WHEN OTHERS THEN
4883 IF (l_dynamic_sql_cursor_id) IS NOT NULL THEN
4884 DBMS_SQL.Close_Cursor(l_dynamic_sql_cursor_id);
4885 END IF;
4886
4887 IF (l_dynamic_sql_1_cursor_id) IS NOT NULL THEN
4888 DBMS_SQL.Close_Cursor(l_dynamic_sql_1_cursor_id);
4889 END IF;
4890
4891 code_debug(' ERROR :'||SQLERRM ,3);
4892 IF (l_bad_tvs_sql_cursor_id IS NULL) THEN
4893 l_bad_tvs_sql_cursor_id := DBMS_SQL.Open_Cursor;
4894 l_dynamic_sql :=
4895 'UPDATE '||p_interface_table_name||'
4896 SET PROCESS_STATUS = PROCESS_STATUS + '||G_PS_BAD_TVS_SETUP||'
4897 WHERE DATA_SET_ID = :data_set_id
4898 AND ATTR_INT_NAME = :attr_internal_name
4899 AND ATTR_GROUP_INT_NAME = :attr_group_int_name';
4900
4901 DBMS_SQL.Parse(l_bad_tvs_sql_cursor_id, l_dynamic_sql, DBMS_SQL.NATIVE);
4902 DBMS_SQL.Bind_Variable(l_bad_tvs_sql_cursor_id, ':data_set_id', p_data_set_id);
4903 END IF;
4904 DBMS_SQL.Bind_Variable(l_bad_tvs_sql_cursor_id, ':attr_group_int_name', l_attr_group_metadata_obj.ATTR_GROUP_NAME);
4905 DBMS_SQL.Bind_Variable(l_bad_tvs_sql_cursor_id, ':attr_internal_name', l_attr_metadata_table(y).ATTR_NAME);
4906 l_dummy := DBMS_SQL.Execute(l_bad_tvs_sql_cursor_id);
4907 END;
4908 -- Bug 10151142 : End
4909
4910 ELSE
4911 /* l_dynamic_sql :=
4912 'UPDATE '||p_interface_table_name||' UAI1
4913 SET ATTR_VALUE_STR = NVL(ATTR_VALUE_STR,'||l_tvs_select||'),
4914 PROCESS_STATUS = PROCESS_STATUS + DECODE(NVL2(ATTR_VALUE_STR,
4915 '||l_tvs_str_val_check_select||',
4916 NVL2('||l_tvs_select||',1,NULL)
4917 ),
4918 NULL,
4919 '||G_PS_VALUE_NOT_IN_TVS||'
4920 ,0)
4921 WHERE DATA_SET_ID = '||p_data_set_id||'
4922 AND PROCESS_STATUS <> 3
4923 AND BITAND(PROCESS_STATUS, '||G_PS_NO_PRIVILEGES||') = 0
4924 AND ATTR_INT_NAME = '''||l_attr_metadata_table(y).ATTR_NAME||'''
4925 AND ATTR_GROUP_INT_NAME = '''||l_attr_group_metadata_obj.ATTR_GROUP_NAME||''' ';
4926 */
4927 -- Bug 10151142 : Start
4928 /*
4929 l_dynamic_sql_1 :=
4930 'UPDATE '||p_interface_table_name||' UAI1
4931 SET PROCESS_STATUS = PROCESS_STATUS + DECODE(('||l_tvs_str_val_check_select||'),0,'||G_PS_VALUE_NOT_IN_TVS||',0)
4932 WHERE DATA_SET_ID = :data_set_id '||'
4933 AND (PROCESS_STATUS = '||G_PS_IN_PROCESS||' OR PROCESS_STATUS > '||G_PS_BAD_ATTR_OR_AG_METADATA||' )
4934 AND BITAND(PROCESS_STATUS, '||G_PS_NO_PRIVILEGES||') = 0
4935 AND ATTR_INT_NAME = '''||l_attr_metadata_table(y).ATTR_NAME||'''
4936 AND ATTR_GROUP_INT_NAME = '''||l_attr_group_metadata_obj.ATTR_GROUP_NAME||'''
4937 AND ATTR_VALUE_STR IS NOT NULL';
4938
4939 l_dynamic_sql :=
4940 'UPDATE '||p_interface_table_name||' UAI1
4941 SET ATTR_VALUE_STR = NVL('||l_tvs_select||',NULL),
4942 PROCESS_STATUS = PROCESS_STATUS + DECODE(('||l_tvs_select||'),NULL,'||G_PS_VALUE_NOT_IN_TVS||',0)
4943 WHERE DATA_SET_ID = :data_set_id '||'
4944 AND (PROCESS_STATUS = '||G_PS_IN_PROCESS||' OR PROCESS_STATUS > '||G_PS_BAD_ATTR_OR_AG_METADATA||' )
4945 AND BITAND(PROCESS_STATUS, '||G_PS_NO_PRIVILEGES||') = 0
4946 AND ATTR_INT_NAME = '''||l_attr_metadata_table(y).ATTR_NAME||'''
4947 AND ATTR_GROUP_INT_NAME = '''||l_attr_group_metadata_obj.ATTR_GROUP_NAME||'''
4948 AND ATTR_DISP_VALUE IS NOT NULL ';
4949 -- We execute the above cursor in a PL/SQL block since we know that if this fails
4950 -- it is because of wrong setup the user has created for table value sets, so we
4951 -- need to mark the row as errored due to bad TVS setup.
4952 BEGIN
4953 EXECUTE IMMEDIATE l_dynamic_sql_1
4954 USING p_data_set_id;
4955 EXECUTE IMMEDIATE l_dynamic_sql
4956 USING p_data_set_id;
4957 EXCEPTION
4958 WHEN OTHERS THEN
4959 IF (l_bad_tvs_sql_cursor_id IS NULL) THEN
4960 l_bad_tvs_sql_cursor_id := DBMS_SQL.Open_Cursor;
4961 l_dynamic_sql :=
4962 'UPDATE '||p_interface_table_name||'
4963 SET PROCESS_STATUS = PROCESS_STATUS + '||G_PS_BAD_TVS_SETUP||'
4964 WHERE DATA_SET_ID = :data_set_id
4965 AND ATTR_INT_NAME = :attr_internal_name
4966 AND ATTR_GROUP_INT_NAME = :attr_group_int_name';
4967
4968 DBMS_SQL.Parse(l_bad_tvs_sql_cursor_id, l_dynamic_sql, DBMS_SQL.NATIVE);
4969 DBMS_SQL.Bind_Variable(l_bad_tvs_sql_cursor_id, ':data_set_id', p_data_set_id);
4970 END IF;
4971 DBMS_SQL.Bind_Variable(l_bad_tvs_sql_cursor_id, ':attr_group_int_name', l_attr_group_metadata_obj.ATTR_GROUP_NAME);
4972 DBMS_SQL.Bind_Variable(l_bad_tvs_sql_cursor_id, ':attr_internal_name', l_attr_metadata_table(y).ATTR_NAME);
4973 l_dummy := DBMS_SQL.Execute(l_bad_tvs_sql_cursor_id);
4974 END;
4975 */
4976
4977 Prepare_Dynamic_Sqls_Clob ( p_data_set_id => p_data_set_id,
4978 p_data_type_code => EGO_EXT_FWK_PUB.G_CHAR_DATA_TYPE,
4979 p_interface_table_name => p_interface_table_name,
4980 p_tvs_val_check_sel_clob => l_tvs_str_val_check_sel_clob,
4981 p_tvs_select_clob => l_tvs_select_clob,
4982 p_attr_name => l_attr_metadata_table(y).ATTR_NAME,
4983 p_attr_group_name => l_attr_group_metadata_obj.ATTR_GROUP_NAME,
4984 x_return_status => l_return_status,
4985 x_msg_data => l_msg_data,
4986 x_sql_1_ub => l_sql_1_ub,
4987 x_sql_ub => l_sql_ub,
4988 x_dynamic_sql_1_v_type => l_dynamic_sql_1_v_type,
4989 x_dynamic_sql_v_type => l_dynamic_sql_v_type
4990 );
4991
4992 code_debug(' After Prepare_Dynamic_Sqls_Clob - l_return_status :'||l_return_status ,3);
4993
4994 IF (l_dynamic_sql_1_cursor_id IS NULL) THEN
4995 l_dynamic_sql_1_cursor_id := DBMS_SQL.Open_Cursor;
4996 END IF;
4997
4998 IF (l_dynamic_sql_cursor_id IS NULL) THEN
4999 l_dynamic_sql_cursor_id := DBMS_SQL.Open_Cursor;
5000 END IF;
5001
5002 code_debug(' Before parse l_dynamic_sql_1_cursor_id - l_sql_1_ub :'||l_sql_1_ub ,3);
5003
5004 BEGIN
5005 DBMS_SQL.PARSE( c => l_dynamic_sql_1_cursor_id,
5006 statement => l_dynamic_sql_1_v_type,
5007 lb => 1,
5008 ub => l_sql_1_ub,
5009 lfflg => false,
5010 language_flag => dbms_sql.native );
5011
5012
5013 DBMS_SQL.Bind_Variable(l_dynamic_sql_1_cursor_id, ':data_set_id', p_data_set_id);
5014 code_debug(' EXECUTING l_dynamic_sql_1_cursor_id' ,3);
5015
5016 l_dummy := DBMS_SQL.Execute(l_dynamic_sql_1_cursor_id);
5017
5018 code_debug(' Before parse l_dynamic_sql_1_cursor_id - l_sql_ub :'||l_sql_ub ,3);
5019
5020 DBMS_SQL.PARSE( c => l_dynamic_sql_cursor_id,
5021 statement => l_dynamic_sql_v_type,
5022 lb => 1,
5023 ub => l_sql_ub,
5024 lfflg => false,
5025 language_flag => dbms_sql.native );
5026
5027 DBMS_SQL.Bind_Variable(l_dynamic_sql_cursor_id, ':data_set_id', p_data_set_id);
5028 code_debug(' EXECUTING l_dynamic_sql_cursor_id' ,3);
5029
5030 l_dummy := DBMS_SQL.Execute(l_dynamic_sql_cursor_id);
5031 code_debug(' EXECUTING DONE' ,3);
5032 EXCEPTION
5033 WHEN OTHERS THEN
5034 IF (l_dynamic_sql_cursor_id) IS NOT NULL THEN
5035 DBMS_SQL.Close_Cursor(l_dynamic_sql_cursor_id);
5036 END IF;
5037
5038 IF (l_dynamic_sql_1_cursor_id) IS NOT NULL THEN
5039 DBMS_SQL.Close_Cursor(l_dynamic_sql_1_cursor_id);
5040 END IF;
5041
5042 code_debug(' ERROR :'||SQLERRM ,3);
5043 IF (l_bad_tvs_sql_cursor_id IS NULL) THEN
5044 l_bad_tvs_sql_cursor_id := DBMS_SQL.Open_Cursor;
5045 l_dynamic_sql :=
5046 'UPDATE '||p_interface_table_name||'
5047 SET PROCESS_STATUS = PROCESS_STATUS + '||G_PS_BAD_TVS_SETUP||'
5048 WHERE DATA_SET_ID = :data_set_id
5049 AND ATTR_INT_NAME = :attr_internal_name
5050 AND ATTR_GROUP_INT_NAME = :attr_group_int_name';
5051
5052 DBMS_SQL.Parse(l_bad_tvs_sql_cursor_id, l_dynamic_sql, DBMS_SQL.NATIVE);
5053 DBMS_SQL.Bind_Variable(l_bad_tvs_sql_cursor_id, ':data_set_id', p_data_set_id);
5054 END IF;
5055 DBMS_SQL.Bind_Variable(l_bad_tvs_sql_cursor_id, ':attr_group_int_name', l_attr_group_metadata_obj.ATTR_GROUP_NAME);
5056 DBMS_SQL.Bind_Variable(l_bad_tvs_sql_cursor_id, ':attr_internal_name', l_attr_metadata_table(y).ATTR_NAME);
5057 l_dummy := DBMS_SQL.Execute(l_bad_tvs_sql_cursor_id);
5058 END;
5059 -- Bug 10151142 : End
5060
5061 END IF;
5062 END IF; --l_attr_metadata fetched TRUE/FALSE
5063 END IF; -- if validation_code is TVS
5064 END IF;--the if attr exists in the intf table ends.
5065 END LOOP;
5066
5067 code_debug(' After the TVS check ' ,2);
5068
5069 ------------------------------------------------
5070 -- Here we error out the MR AG rows which have
5071 -- a wrong transaction type (UPDATE, CREATE)
5072 ------------------------------------------------
5073 l_dynamic_sql :=
5074 ' UPDATE /*+ INDEX(UAI1,EGO_ITM_USR_ATTR_INTRFC_N3) */ /* Bug 9678667 */ '||p_interface_table_name||' UAI1
5075 SET UAI1.PROCESS_STATUS = PROCESS_STATUS +
5076 DECODE(UAI1.TRANSACTION_TYPE,
5077 '''||EGO_USER_ATTRS_DATA_PVT.G_CREATE_MODE||''', '||G_PS_BAD_TTYPE_CREATE||',
5078 '''||EGO_USER_ATTRS_DATA_PVT.G_UPDATE_MODE||''', '||G_PS_BAD_TTYPE_UPDATE||',
5079 '''||EGO_USER_ATTRS_DATA_PVT.G_DELETE_MODE||''', '||G_PS_BAD_TTYPE_DELETE||',0)
5080 WHERE UAI1.DATA_SET_ID = :data_set_id '||--p_data_set_id||
5081 ' AND UAI1.PROCESS_STATUS = '||G_PS_IN_PROCESS||
5082 ' AND UAI1.ATTR_GROUP_TYPE = '''||p_attr_group_type||''' '||
5083 ' AND UAI1.TRANSACTION_TYPE <> '''||EGO_USER_ATTRS_DATA_PVT.G_SYNC_MODE||
5084 ''' AND UAI1.ATTR_GROUP_INT_NAME = '''||
5085 l_attr_group_metadata_obj.ATTR_GROUP_NAME||
5086 ''' AND UAI1.ROW_IDENTIFIER IN (
5087 SELECT DISTINCT UAI2.ROW_IDENTIFIER
5088 FROM '||p_interface_table_name||' UAI2
5089 WHERE UAI2.DATA_SET_ID = :data_set_id '||--p_data_set_id||
5090 ' AND UAI2.PROCESS_STATUS = '||G_PS_IN_PROCESS;
5091
5092 l_dynamic_sql := l_dynamic_sql||' AND (SELECT COUNT(*) FROM '||l_ext_table_select||')
5093 = DECODE(UAI2.TRANSACTION_TYPE,
5094 '''||EGO_USER_ATTRS_DATA_PVT.G_CREATE_MODE||''', 1,
5095 '''||EGO_USER_ATTRS_DATA_PVT.G_UPDATE_MODE||''', 0,
5096 '''||EGO_USER_ATTRS_DATA_PVT.G_DELETE_MODE||''', 0))';
5097
5098 EXECUTE IMMEDIATE l_dynamic_sql
5099 USING p_data_set_id, p_data_set_id;/*Fix for bug#9678667. Literal to bind*/
5100 code_debug(' After transaction type validation ' ,2);
5101
5102 --------------------------------------------------
5103 -- Here we update the INTF table transaction_type
5104 -- from SYNC to CREATE or UPDATE
5105 --------------------------------------------------
5106 l_dynamic_sql :=
5107 ' UPDATE '||p_interface_table_name||' UAI1
5108 SET UAI1.TRANSACTION_TYPE = DECODE((SELECT COUNT(*) FROM '||l_ext_table_select||'),0,'''||
5109 EGO_USER_ATTRS_DATA_PVT.G_CREATE_MODE||''','''||
5110 EGO_USER_ATTRS_DATA_PVT.G_UPDATE_MODE||''')
5111 WHERE UAI1.DATA_SET_ID = '||p_data_set_id||
5112 ' AND UAI1.ATTR_GROUP_INT_NAME = '''||l_attr_group_metadata_obj.ATTR_GROUP_NAME||
5113 ''' AND UAI1.PROCESS_STATUS = '||G_PS_IN_PROCESS||
5114 ' AND UAI1.TRANSACTION_TYPE = '''||EGO_USER_ATTRS_DATA_PVT.G_SYNC_MODE||'''';
5115
5116 --ER 9489112, do not convert SYNC to CREATE/UPDATE for item rev level Multi Row UDA when change order be created
5117 --Current UDA chanage be put in change order controll since rev level UDA will defaulted from
5118 --current revision when new revision created. rev level UDA defauled when the new revision
5119 --is created by change Service ChangeImportManager.createItemRevChangeMethodRequests later.
5120 IF l_data_level_col_exists AND l_add_all_to_cm = 'Y' THEN
5121 l_dynamic_sql := l_dynamic_sql || ' AND UAI1.DATA_LEVEL_ID <> ' ||l_item_rev_dl_id ;
5122 END IF;
5123 code_debug('l_dynamic_sql to update Transaction type for MR Row '||l_attr_group_metadata_obj.ATTR_GROUP_NAME ||':' || l_dynamic_sql,2);
5124 EXECUTE IMMEDIATE l_dynamic_sql;
5125
5126 code_debug(' After transaction type updation ' ,2);
5127
5128 END IF; -- *p_validate-IF-2* ending the IF for p_validate...
5129 END IF; -- ending MR specific work
5130
5131 ----------------------------------------------------
5132 -- Folowing validations are also done only if the --
5133 -- API is called with p_validate = TRUE --
5134 ----------------------------------------------------
5135 IF (p_validate OR p_do_req_def_valiadtion) THEN -- Search for *p_validate-IF-3.1* to find the ending of this loop
5136
5137 /* Bug 9678667 - Start
5138 -- Below query inserts the Default UDAs for a given AG in a single query instead of looping through the attributes.
5139 */
5140 code_debug(' Before Inserting Default rows for AG :'||l_attr_group_intf_rec.ATTR_GROUP_INT_NAME );
5141 /* Bug 14044344
5142 -- Add setting value for column CHANGE_ID,CHANGE_LINE_ID,PROG_INT_CHAR2,PROG_INT_NUM4, so that default value line will go with the original change line in implementation phase.
5143 -- By QIXIA 2012-07-05
5144 */
5145
5146 l_extra_column_str := '';
5147
5148 /*start bug 14672950 commented below lines as these columns are not needed to AG defaulting query except column PROG_INT_CHAR2.
5149 It is causing regresion when AG is having default attributes and template filled attributes.
5150 In validation mode,
5151 value for prog_int_chr2 is null for template filled and AG default records.
5152 So the inner select query with group by is returing multiple AG records.
5153 Hence reverting the changes for bug 14044344 in this file.
5154
5155 In validation mode,
5156 value for prog_int_chr2 is null for template filled and AG default records.
5157 In non validation mode,
5158 value N is set if it is update.
5159 Value Y if same item is created in this batch.
5160 Hence no harm in hard-coding prog_int_chr2 with value N while defaulting at AG level.
5161
5162 Removed this column from inner select query as it returns morethan one entry for single AG (Reason: this column holds different values for user enetered records and
5163 defaulting records).
5164 For more details about this issue refer to update *** GNOOKALA 10/29/12 02:11 am *** in bug 14672950 */
5165 --IF FND_API.TO_BOOLEAN(EGO_USER_ATTRS_COMMON_PVT.has_column_in_table(p_interface_table_name, 'CHANGE_ID')) THEN l_extra_column_str := l_extra_column_str || ', CHANGE_ID'; END IF;
5166 --IF FND_API.TO_BOOLEAN(EGO_USER_ATTRS_COMMON_PVT.has_column_in_table(p_interface_table_name, 'CHANGE_LINE_ID')) THEN l_extra_column_str := l_extra_column_str || ', CHANGE_LINE_ID'; END IF;
5167 --IF FND_API.TO_BOOLEAN(EGO_USER_ATTRS_COMMON_PVT.has_column_in_table(p_interface_table_name, 'PROG_INT_CHAR2')) THEN l_extra_column_str := l_extra_column_str || ', PROG_INT_CHAR2'; END IF;
5168 --IF FND_API.TO_BOOLEAN(EGO_USER_ATTRS_COMMON_PVT.has_column_in_table(p_interface_table_name, 'PROG_INT_NUM4')) THEN l_extra_column_str := l_extra_column_str || ', PROG_INT_NUM4'; END IF;
5169 l_extra_column_val := '';
5170 IF FND_API.TO_BOOLEAN(EGO_USER_ATTRS_COMMON_PVT.has_column_in_table(p_interface_table_name, 'PROG_INT_CHAR2')) THEN
5171 l_extra_column_str := l_extra_column_str || ', PROG_INT_CHAR2';
5172 l_extra_column_val := l_extra_column_val || ', ''N''';
5173 END IF;
5174 /*end bug 14672950*/
5175
5176 l_dynamic_sql :=
5177 'INSERT INTO '||p_interface_table_name||'
5178 ( TRANSACTION_ID,
5179 ATTR_GROUP_TYPE,
5180 PROCESS_STATUS,
5181 DATA_SET_ID,
5182 ROW_IDENTIFIER,
5183 ATTR_GROUP_INT_NAME,
5184 ATTR_INT_NAME,
5185 ATTR_VALUE_NUM,
5186 ATTR_VALUE_STR,
5187 ATTR_VALUE_DATE,
5188 TRANSACTION_TYPE,
5189 '||l_concat_pk_cols_sel||'
5190 ATTR_GROUP_ID,
5191 CREATED_BY,
5192 CREATION_DATE,
5193 LAST_UPDATED_BY,
5194 LAST_UPDATE_DATE' || l_extra_column_str || '
5195 )
5196 SELECT DISTINCT TRANSACTION_ID,
5197 FL_COL.DESCRIPTIVE_FLEXFIELD_NAME,
5198 '||G_PS_IN_PROCESS||',
5199 DATA_SET_ID,
5200 ROW_IDENTIFIER,
5201 ATTR_GROUP_INT_NAME,
5202 FL_COL.END_USER_COLUMN_NAME,
5203 TO_NUMBER(DECODE(ATTR_EXT.DATA_TYPE, ''N'', FL_COL.DEFAULT_VALUE,
5204 NULL)),
5205 DECODE(ATTR_EXT.DATA_TYPE, ''A'', FL_COL.DEFAULT_VALUE,
5206 ''C'', FL_COL.DEFAULT_VALUE,
5207 NULL),
5208 DECODE(ATTR_EXT.DATA_TYPE, ''X'', EGO_USER_ATTRS_BULK_PVT.GET_DATE(FL_COL.DEFAULT_VALUE, NULL),
5209 ''Y'', EGO_USER_ATTRS_BULK_PVT.GET_DATE(FL_COL.DEFAULT_VALUE, NULL),
5210 NULL),
5211 '''|| EGO_USER_ATTRS_DATA_PVT.G_CREATE_MODE||''',
5212 '|| l_concat_pk_cols_sel ||'
5213 ATTR_GROUP_ID,
5214 FND_GLOBAL.USER_ID,
5215 SYSDATE,
5216 FND_GLOBAL.USER_ID,
5217 SYSDATE' || l_extra_column_val || '
5218 FROM (SELECT /*+ NO_MERGE index(A,EGO_ITM_USR_ATTR_INTRFC_N1) */
5219 MAX(TRANSACTION_ID) TRANSACTION_ID,
5220 DATA_SET_ID,
5221 ROW_IDENTIFIER,
5222 ATTR_GROUP_INT_NAME,
5223 '|| l_concat_pk_cols_sel ||'
5224 ATTR_GROUP_ID
5225 FROM '||p_interface_table_name||' A
5226 WHERE DATA_SET_ID = :data_set_id
5227 AND PROCESS_STATUS = '||G_PS_IN_PROCESS|| '
5228 AND ATTR_GROUP_INT_NAME = :attr_group_int_name
5229 AND Bitand(PROCESS_STATUS, 64) = 0
5230 AND TRANSACTION_TYPE = '''|| EGO_USER_ATTRS_DATA_PVT.G_CREATE_MODE||'''
5231 AND ATTR_GROUP_TYPE = :attr_group_type
5232 GROUP BY DATA_SET_ID,
5233 ROW_IDENTIFIER,
5234 ATTR_GROUP_INT_NAME,
5235 '|| l_concat_pk_cols_sel ||'
5236 ATTR_GROUP_ID
5237 ) A,
5238 FND_DESCR_FLEX_COLUMN_USAGES FL_COL,
5239 EGO_FND_DF_COL_USGS_EXT ATTR_EXT
5240 WHERE NOT EXISTS (SELECT /*+ no_unnest index(B,EGO_ITM_USR_ATTR_INTRFC_U1) */ NULL
5241 FROM '||p_interface_table_name||' B
5242 WHERE DATA_SET_ID = :data_set_id
5243 AND B.ATTR_INT_NAME = FL_COL.END_USER_COLUMN_NAME
5244 AND A.ROW_IDENTIFIER = B.ROW_IDENTIFIER
5245 AND B.ATTR_GROUP_INT_NAME = :attr_group_int_name
5246 )
5247 AND :attr_group_int_name = FL_COL.DESCRIPTIVE_FLEX_CONTEXT_CODE
5248 AND FL_COL.APPLICATION_ID = '||p_application_id||'
5249 AND FL_COL.DESCRIPTIVE_FLEXFIELD_NAME = :attr_group_type
5250 AND FL_COL.ENABLED_FLAG = ''Y''
5251 AND (FL_COL.DEFAULT_VALUE IS NOT NULL OR FL_COL.REQUIRED_FLAG = ''Y'')
5252 AND ATTR_EXT.APPLICATION_ID = FL_COL.APPLICATION_ID
5253 AND ATTR_EXT.DESCRIPTIVE_FLEXFIELD_NAME = FL_COL.DESCRIPTIVE_FLEXFIELD_NAME
5254 AND ATTR_EXT.DESCRIPTIVE_FLEX_CONTEXT_CODE = FL_COL.DESCRIPTIVE_FLEX_CONTEXT_CODE
5255 AND ATTR_EXT.APPLICATION_COLUMN_NAME = FL_COL.APPLICATION_COLUMN_NAME';
5256
5257 EXECUTE IMMEDIATE l_dynamic_sql
5258 USING p_data_set_id
5259 ,l_attr_group_intf_rec.ATTR_GROUP_INT_NAME
5260 ,p_attr_group_type
5261 ,p_data_set_id
5262 ,l_attr_group_intf_rec.ATTR_GROUP_INT_NAME
5263 ,l_attr_group_intf_rec.ATTR_GROUP_INT_NAME
5264 ,p_attr_group_type;
5265
5266 code_debug(' After Inserting Default rows for AG :'||l_attr_group_intf_rec.ATTR_GROUP_INT_NAME );
5267 /* Bug 9678667 - End */
5268
5269 ------------------------------------------------------------------------------
5270 -- HERE WE COPY THE DEFAULT VALUE FOR THE ATTRIBUTE FROM THE METADATA IF NO --
5271 -- VALUE HAS BEEN PROVIDED FOR THE ATTRIBUTE --
5272 ------------------------------------------------------------------------------
5273 --rathna LOOP THROUGH ALL THE ATTRS METADATA FOR THIS AG
5274 FOR z IN l_attr_metadata_table_1.FIRST .. l_attr_metadata_table_1.LAST
5275 LOOP
5276
5277 IF (l_attr_metadata_table_1(z).DEFAULT_VALUE IS NOT NULL OR
5278 l_attr_metadata_table_1(z).REQUIRED_FLAG = 'Y' AND p_do_req_def_valiadtion) THEN
5279
5280 /* Bug 9678667 : Start - Commenting the below Code
5281 -- The below logic of inserting Default UDAs is done above out of the loop as a single query per AG
5282 */
5283 /*
5284
5285 code_debug(' Attribute '||l_attr_metadata_table_1(z).ATTR_NAME|| ' has a default value or is a required attribute' ,2);
5286 --------- FOR NUMBER DATATYPE
5287 IF(l_attr_metadata_table_1(z).DATA_TYPE_CODE = EGO_EXT_FWK_PUB.G_NUMBER_DATA_TYPE) THEN
5288 IF (l_default_num_cursor_id IS NULL) THEN
5289 l_default_num_cursor_id := DBMS_SQL.Open_Cursor;
5290 l_dynamic_sql :=
5291 'INSERT INTO '||p_interface_table_name||' ( TRANSACTION_ID,
5292 PROCESS_STATUS ,
5293 DATA_SET_ID ,
5294 ROW_IDENTIFIER ,
5295 ATTR_GROUP_INT_NAME ,
5296 ATTR_INT_NAME ,
5297 ATTR_VALUE_NUM ,
5298 TRANSACTION_TYPE ,'||l_concat_pk_cols_sel||'
5299 ATTR_GROUP_ID,CREATED_BY,CREATION_DATE,LAST_UPDATED_BY,LAST_UPDATE_DATE)
5300 SELECT /*+ index(A,EGO_ITM_USR_ATTR_INTRFC_N1) */ /* Fix for bug#9678667 */
5301 /* Bug 9678667 MAX(TRANSACTION_ID),'||G_PS_IN_PROCESS||',DATA_SET_ID,ROW_IDENTIFIER,:attr_group_int_name,:attr_internal_name,
5302 :default_value,'''|| EGO_USER_ATTRS_DATA_PVT.G_CREATE_MODE||''','|| l_concat_pk_cols_sel ||'
5303 ATTR_GROUP_ID,MAX(CREATED_BY),SYSDATE,MAX(LAST_UPDATED_BY),SYSDATE
5304 FROM '||p_interface_table_name||' A
5305 WHERE NOT EXISTS (
5306 SELECT /*+ no_unnest index(B,EGO_ITM_USR_ATTR_INTRFC_U1) */ /* Fix for bug#9678667 */
5307 /* Bug 9678667 NULL
5308 FROM '||p_interface_table_name||' B
5309 WHERE DATA_SET_ID = A.DATA_SET_ID
5310 AND B.ATTR_INT_NAME = :attr_internal_name
5311 -- AND B.ATTR_GROUP_INT_NAME = A.ATTR_GROUP_INT_NAME /* Fix for bug#9678667 */
5312 --AND B.TRANSACTION_TYPE = A.TRANSACTION_TYPE
5313 /* Bug 9678667 AND A.ROW_IDENTIFIER = B.ROW_IDENTIFIER)
5314 AND DATA_SET_ID = :data_set_id
5315 AND ATTR_GROUP_INT_NAME = :attr_group_int_name
5316 AND PROCESS_STATUS = '||G_PS_IN_PROCESS|| '
5317 AND BITAND(PROCESS_STATUS, '||G_PS_NO_PRIVILEGES||') = 0
5318 AND TRANSACTION_TYPE = '''|| EGO_USER_ATTRS_DATA_PVT.G_CREATE_MODE||'''
5319 GROUP BY DATA_SET_ID,ROW_IDENTIFIER,'|| l_concat_pk_cols_sel ||' ATTR_GROUP_ID' ;
5320 DBMS_SQL.Parse(l_default_num_cursor_id, l_dynamic_sql, DBMS_SQL.NATIVE);
5321 DBMS_SQL.Bind_Variable(l_default_num_cursor_id, ':data_set_id', p_data_set_id);
5322 END IF;
5323
5324 DBMS_SQL.Bind_Variable(l_default_num_cursor_id, ':attr_group_int_name', l_attr_metadata_table_1(z).ATTR_GROUP_NAME);
5325 DBMS_SQL.Bind_Variable(l_default_num_cursor_id, ':attr_internal_name', l_attr_metadata_table_1(z).ATTR_NAME);
5326 DBMS_SQL.Bind_Variable(l_default_num_cursor_id, ':default_value', l_attr_metadata_table_1(z).DEFAULT_VALUE);
5327 l_dummy := DBMS_SQL.Execute(l_default_num_cursor_id);
5328 -- We need to add the attr in the distinct attrs table, since now we have to process this one also
5329 IF (l_attr_metadata_table_1(z).DEFAULT_VALUE IS NOT NULL AND l_dummy > 0 ) THEN
5330 l_dist_attr_in_data_set_rec.ATTR_GROUP_ID := l_attr_metadata_table_1(z).ATTR_GROUP_ID;
5331 l_dist_attr_in_data_set_rec.ATTR_INT_NAME := l_attr_metadata_table_1(z).ATTR_NAME;
5332 l_dist_attr_in_data_set_rec.ATTR_GROUP_INT_NAME := l_attr_metadata_table_1(z).ATTR_GROUP_NAME;
5333
5334 l_dist_attrs_in_data_set_table(l_dist_attrs_in_data_set_table.COUNT+1) := l_dist_attr_in_data_set_rec;
5335 END IF;
5336
5337 --------- FOR DATE DATATYPE
5338 ELSIF(l_attr_metadata_table_1(z).DATA_TYPE_CODE = EGO_EXT_FWK_PUB.G_DATE_DATA_TYPE OR
5339 l_attr_metadata_table_1(z).DATA_TYPE_CODE = EGO_EXT_FWK_PUB.G_DATE_TIME_DATA_TYPE) THEN
5340 IF (l_default_date_cursor_id IS NULL) THEN
5341 l_default_date_cursor_id := DBMS_SQL.Open_Cursor;
5342 l_dynamic_sql :=
5343 'INSERT INTO '||p_interface_table_name||' ( TRANSACTION_ID,
5344 PROCESS_STATUS ,
5345 DATA_SET_ID ,
5346 ROW_IDENTIFIER ,
5347 ATTR_GROUP_INT_NAME ,
5348 ATTR_INT_NAME ,
5349 ATTR_VALUE_DATE ,
5350 TRANSACTION_TYPE ,'||l_concat_pk_cols_sel||'
5351 ATTR_GROUP_ID,CREATED_BY,CREATION_DATE,LAST_UPDATED_BY,LAST_UPDATE_DATE)
5352 SELECT /*+ index(A,EGO_ITM_USR_ATTR_INTRFC_N1) */ /* Fix for bug#9678667 */
5353 /* Bug 9678667 MAX(TRANSACTION_ID),'||G_PS_IN_PROCESS||',DATA_SET_ID,ROW_IDENTIFIER,:attr_group_int_name,:attr_internal_name,
5354 :default_value,'''|| EGO_USER_ATTRS_DATA_PVT.G_CREATE_MODE||''','|| l_concat_pk_cols_sel ||'
5355 ATTR_GROUP_ID,MAX(CREATED_BY),SYSDATE,MAX(LAST_UPDATED_BY),SYSDATE
5356 FROM '||p_interface_table_name||' A
5357 WHERE NOT EXISTS (
5358 SELECT /*+ no_unnest index(B,EGO_ITM_USR_ATTR_INTRFC_U1) */ /* Fix for bug#9678667 */
5359 /* Bug 9678667 NULL
5360 FROM '||p_interface_table_name||' B
5361 WHERE DATA_SET_ID = A.DATA_SET_ID
5362 AND B.ATTR_INT_NAME = :attr_internal_name
5363 -- AND B.ATTR_GROUP_INT_NAME = A.ATTR_GROUP_INT_NAME /* Fix for bug#9678667 */
5364 --AND B.TRANSACTION_TYPE = A.TRANSACTION_TYPE
5365 /* Bug 9678667 AND A.ROW_IDENTIFIER = B.ROW_IDENTIFIER)
5366 AND DATA_SET_ID = :data_set_id
5367 AND ATTR_GROUP_INT_NAME = :attr_group_int_name
5368 AND PROCESS_STATUS = '||G_PS_IN_PROCESS|| '
5369 AND BITAND(PROCESS_STATUS, '||G_PS_NO_PRIVILEGES||') = 0
5370 AND TRANSACTION_TYPE = '''|| EGO_USER_ATTRS_DATA_PVT.G_CREATE_MODE||'''
5371 GROUP BY DATA_SET_ID,ROW_IDENTIFIER,'|| l_concat_pk_cols_sel ||' ATTR_GROUP_ID' ;
5372 DBMS_SQL.Parse(l_default_date_cursor_id, l_dynamic_sql, DBMS_SQL.NATIVE);
5373 DBMS_SQL.Bind_Variable(l_default_date_cursor_id, ':data_set_id', p_data_set_id);
5374 END IF;
5375
5376 DBMS_SQL.Bind_Variable(l_default_date_cursor_id, ':attr_group_int_name', l_attr_metadata_table_1(z).ATTR_GROUP_NAME);
5377 DBMS_SQL.Bind_Variable(l_default_date_cursor_id, ':attr_internal_name', l_attr_metadata_table_1(z).ATTR_NAME);
5378 DBMS_SQL.Bind_Variable(l_default_date_cursor_id, ':default_value', Get_Date(l_attr_metadata_table_1(z).DEFAULT_VALUE));
5379 -- bug 3902395
5380 -- l_dummy := DBMS_SQL.Execute(l_default_num_cursor_id);
5381 l_dummy := DBMS_SQL.Execute(l_default_date_cursor_id);
5382 -- We need to add the attr in the distinct attrs table, since now we have to process this one also
5383 IF (l_attr_metadata_table_1(z).DEFAULT_VALUE IS NOT NULL AND l_dummy > 0 ) THEN
5384 l_dist_attr_in_data_set_rec.ATTR_GROUP_ID := l_attr_metadata_table_1(z).ATTR_GROUP_ID;
5385 l_dist_attr_in_data_set_rec.ATTR_INT_NAME := l_attr_metadata_table_1(z).ATTR_NAME;
5386 l_dist_attr_in_data_set_rec.ATTR_GROUP_INT_NAME := l_attr_metadata_table_1(z).ATTR_GROUP_NAME;
5387
5388 l_dist_attrs_in_data_set_table(l_dist_attrs_in_data_set_table.COUNT+1) := l_dist_attr_in_data_set_rec;
5389 END IF;
5390
5391 --------- FOR CHAR/TRANS DATATYPE
5392 ELSE
5393 IF (l_default_char_cursor_id IS NULL) THEN
5394 l_default_char_cursor_id := DBMS_SQL.Open_Cursor;
5395 l_dynamic_sql :=
5396 'INSERT INTO '||p_interface_table_name||' ( TRANSACTION_ID,
5397 PROCESS_STATUS ,
5398 DATA_SET_ID ,
5399 ROW_IDENTIFIER ,
5400 ATTR_GROUP_INT_NAME ,
5401 ATTR_INT_NAME ,
5402 ATTR_VALUE_STR ,
5403 TRANSACTION_TYPE ,'||l_concat_pk_cols_sel||'
5404 ATTR_GROUP_ID,CREATED_BY,CREATION_DATE,LAST_UPDATED_BY,LAST_UPDATE_DATE)
5405 SELECT /*+ index(A,EGO_ITM_USR_ATTR_INTRFC_N1) */ /* Fix for bug#9678667 */
5406 /* Bug 9678667 MAX(TRANSACTION_ID),'||G_PS_IN_PROCESS||',DATA_SET_ID,ROW_IDENTIFIER,:attr_group_int_name,:attr_internal_name,
5407 :default_value,'''|| EGO_USER_ATTRS_DATA_PVT.G_CREATE_MODE||''','|| l_concat_pk_cols_sel ||'
5408 ATTR_GROUP_ID,MAX(CREATED_BY),SYSDATE,MAX(LAST_UPDATED_BY),SYSDATE
5409 FROM '||p_interface_table_name||' A
5410 WHERE NOT EXISTS (
5411 SELECT /*+ no_unnest index(B,EGO_ITM_USR_ATTR_INTRFC_U1) */ /* Fix for bug#9678667 */
5412 /* Bug 9678667 NULL
5413 FROM '||p_interface_table_name||' B
5414 WHERE DATA_SET_ID = A.DATA_SET_ID
5415 AND B.ATTR_INT_NAME = :attr_internal_name
5416 -- AND B.ATTR_GROUP_INT_NAME = A.ATTR_GROUP_INT_NAME /* Fix for bug#9678667 */
5417 --AND B.TRANSACTION_TYPE = A.TRANSACTION_TYPE
5418 /* Bug 9678667 AND A.ROW_IDENTIFIER = B.ROW_IDENTIFIER)
5419 AND DATA_SET_ID = :data_set_id
5420 AND ATTR_GROUP_INT_NAME = :attr_group_int_name
5421 AND PROCESS_STATUS = '||G_PS_IN_PROCESS|| '
5422 AND BITAND(PROCESS_STATUS, '||G_PS_NO_PRIVILEGES||') = 0
5423 AND TRANSACTION_TYPE = '''|| EGO_USER_ATTRS_DATA_PVT.G_CREATE_MODE||'''
5424 GROUP BY DATA_SET_ID,ROW_IDENTIFIER,'|| l_concat_pk_cols_sel ||' ATTR_GROUP_ID' ;
5425 DBMS_SQL.Parse(l_default_char_cursor_id, l_dynamic_sql, DBMS_SQL.NATIVE);
5426 DBMS_SQL.Bind_Variable(l_default_char_cursor_id, ':data_set_id', p_data_set_id);
5427 END IF;
5428
5429 DBMS_SQL.Bind_Variable(l_default_char_cursor_id, ':attr_group_int_name', l_attr_metadata_table_1(z).ATTR_GROUP_NAME);
5430 DBMS_SQL.Bind_Variable(l_default_char_cursor_id, ':attr_internal_name', l_attr_metadata_table_1(z).ATTR_NAME);
5431 DBMS_SQL.Bind_Variable(l_default_char_cursor_id, ':default_value', l_attr_metadata_table_1(z).DEFAULT_VALUE);
5432
5433 l_dummy := DBMS_SQL.Execute(l_default_char_cursor_id);
5434 -- We need to add the attr in the distinct attrs table, since now we have to process this one also
5435 IF (l_attr_metadata_table_1(z).DEFAULT_VALUE IS NOT NULL AND l_dummy > 0 ) THEN
5436 l_dist_attr_in_data_set_rec.ATTR_GROUP_ID := l_attr_metadata_table_1(z).ATTR_GROUP_ID;
5437 l_dist_attr_in_data_set_rec.ATTR_INT_NAME := l_attr_metadata_table_1(z).ATTR_NAME;
5438 l_dist_attr_in_data_set_rec.ATTR_GROUP_INT_NAME := l_attr_metadata_table_1(z).ATTR_GROUP_NAME;
5439
5440 l_dist_attrs_in_data_set_table(l_dist_attrs_in_data_set_table.COUNT+1) := l_dist_attr_in_data_set_rec;
5441 END IF;
5442
5443 END IF;--inserting row
5444
5445 code_debug(' After inserting rows where ever required for attribute '||l_attr_metadata_table_1(z).ATTR_NAME ,2);
5446 */ -- Bug 9678667 : End - Commenting Ends
5447
5448 ----------------------------------------------------------
5449 -- HERE WE CHECK FOR REQUIRED FIELD VALIDATIONS FOR ROWS
5450 -- HAVING TRANSACTION TYPE AS UPDATE OR CREATE
5451 -- BY NOW WE HAVE THE ATTR_VAL_* COLUMNS FILLED UP WITH
5452 -- APPROPRIATE VALUES.
5453 ----------------------------------------------------------
5454 IF (l_attr_metadata_table_1(z).REQUIRED_FLAG = 'Y') THEN
5455
5456 code_debug(' Attribute '||l_attr_metadata_table_1(z).ATTR_NAME|| ' is a required attribute' ,2);
5457
5458 --------- FOR NUMBER DATATYPE
5459 IF(l_attr_metadata_table_1(z).DATA_TYPE_CODE = EGO_EXT_FWK_PUB.G_NUMBER_DATA_TYPE) THEN
5460 IF (l_req_num_cursor_id IS NULL) THEN
5461 l_req_num_cursor_id := DBMS_SQL.Open_Cursor;
5462 l_dynamic_sql :=
5463 'UPDATE '||p_interface_table_name||'
5464 SET PROCESS_STATUS = PROCESS_STATUS + '||G_PS_REQUIRED_ATTRIBUTE||'
5465 WHERE DATA_SET_ID = :data_set_id
5466 AND PROCESS_STATUS = '||G_PS_IN_PROCESS|| '
5467 AND BITAND(PROCESS_STATUS, '||G_PS_NO_PRIVILEGES||') = 0
5468 AND ATTR_INT_NAME = :attr_internal_name
5469 AND ATTR_GROUP_INT_NAME = :attr_group_int_name
5470 AND ATTR_VALUE_NUM IS NULL
5471 AND ATTR_DISP_VALUE IS NULL ' ;--BugFix : 4171705
5472 DBMS_SQL.Parse(l_req_num_cursor_id, l_dynamic_sql, DBMS_SQL.NATIVE);
5473 DBMS_SQL.Bind_Variable(l_req_num_cursor_id, ':data_set_id', p_data_set_id);
5474 END IF;
5475
5476 DBMS_SQL.Bind_Variable(l_req_num_cursor_id, ':attr_group_int_name', l_attr_metadata_table_1(z).ATTR_GROUP_NAME);
5477 DBMS_SQL.Bind_Variable(l_req_num_cursor_id, ':attr_internal_name', l_attr_metadata_table_1(z).ATTR_NAME);
5478
5479 l_dummy := DBMS_SQL.Execute(l_req_num_cursor_id);
5480
5481 --------- FOR DATE AND DATE TIME DATATYPE
5482 ELSIF (l_attr_metadata_table_1(z).DATA_TYPE_CODE = EGO_EXT_FWK_PUB.G_DATE_DATA_TYPE OR l_attr_metadata_table_1(z).DATA_TYPE_CODE = EGO_EXT_FWK_PUB.G_DATE_TIME_DATA_TYPE) THEN
5483 IF (l_req_date_cursor_id IS NULL) THEN
5484 l_req_date_cursor_id := DBMS_SQL.Open_Cursor;
5485 l_dynamic_sql :=
5486 'UPDATE '||p_interface_table_name||'
5487 SET PROCESS_STATUS = PROCESS_STATUS + '||G_PS_REQUIRED_ATTRIBUTE||'
5488 WHERE DATA_SET_ID = :data_set_id
5489 AND PROCESS_STATUS = '||G_PS_IN_PROCESS|| '
5490 AND BITAND(PROCESS_STATUS, '||G_PS_NO_PRIVILEGES||') = 0
5491 AND ATTR_INT_NAME = :attr_internal_name
5492 AND ATTR_GROUP_INT_NAME = :attr_group_int_name
5493 AND ATTR_VALUE_DATE IS NULL
5494 AND ATTR_DISP_VALUE IS NULL ' ;--BugFix : 4171705
5495 DBMS_SQL.Parse(l_req_date_cursor_id, l_dynamic_sql, DBMS_SQL.NATIVE);
5496 DBMS_SQL.Bind_Variable(l_req_date_cursor_id, ':data_set_id', p_data_set_id);
5497 END IF;
5498
5499 DBMS_SQL.Bind_Variable(l_req_date_cursor_id, ':attr_group_int_name', l_attr_metadata_table_1(z).ATTR_GROUP_NAME);
5500 DBMS_SQL.Bind_Variable(l_req_date_cursor_id, ':attr_internal_name', l_attr_metadata_table_1(z).ATTR_NAME);
5501
5502 l_dummy := DBMS_SQL.Execute(l_req_date_cursor_id);
5503 --------- FOR CHAR AND TRANSLATEBLE TEXT DATATYPE
5504 ELSE
5505 IF (l_req_char_cursor_id IS NULL) THEN
5506 l_req_char_cursor_id := DBMS_SQL.Open_Cursor;
5507 l_dynamic_sql :=
5508 'UPDATE '||p_interface_table_name||'
5509 SET PROCESS_STATUS = PROCESS_STATUS + '||G_PS_REQUIRED_ATTRIBUTE||'
5510 WHERE DATA_SET_ID = :data_set_id
5511 AND PROCESS_STATUS = '||G_PS_IN_PROCESS|| '
5512 AND BITAND(PROCESS_STATUS, '||G_PS_NO_PRIVILEGES||') = 0
5513 AND ATTR_INT_NAME = :attr_internal_name
5514 AND ATTR_GROUP_INT_NAME = :attr_group_int_name
5515 AND ATTR_VALUE_STR IS NULL
5516 AND ATTR_DISP_VALUE IS NULL ' ;--BugFix : 4171705
5517 DBMS_SQL.Parse(l_req_char_cursor_id, l_dynamic_sql, DBMS_SQL.NATIVE);
5518 DBMS_SQL.Bind_Variable(l_req_char_cursor_id, ':data_set_id', p_data_set_id);
5519 END IF;
5520
5521 DBMS_SQL.Bind_Variable(l_req_char_cursor_id, ':attr_group_int_name', l_attr_metadata_table_1(z).ATTR_GROUP_NAME);
5522 DBMS_SQL.Bind_Variable(l_req_char_cursor_id, ':attr_internal_name', l_attr_metadata_table_1(z).ATTR_NAME);
5523
5524 l_dummy := DBMS_SQL.Execute(l_req_char_cursor_id);
5525 END IF;
5526 END IF;--Required flag
5527 END IF;
5528 END LOOP;
5529
5530 END IF;-- *p_validate-IF-3.1*
5531 --Rathna ended
5532
5533 -----------------------------------------------
5534 -- HERE ER FO TVS VALIDATION FOR SR AG
5535 ----------------------------------------------
5536 IF(p_validate) THEN --- Search for p_validate-IF-3.2 to find the ending of this loop
5537
5538 IF (l_attr_group_metadata_obj.MULTI_ROW_CODE <> 'Y') THEN -- i.e., if MULTI_ROW_CODE <> 'Y'
5539
5540 code_debug(' Inside single row specific validations for Attribute Group :'||l_attr_group_intf_rec.ATTR_GROUP_INT_NAME ,2);
5541
5542 -- now we go for doing the TVS validation if the AG is SR
5543 FOR x IN l_attr_metadata_table_sr.FIRST .. l_attr_metadata_table_sr.LAST
5544 LOOP
5545
5546 IF (Attr_Is_In_Data_Set(l_attr_metadata_table_sr(X),
5547 l_dist_attrs_in_data_set_table)) THEN
5548 l_attr_exists_in_intf := 'EXISTS';
5549 ELSE
5550 l_attr_exists_in_intf := 'NOTEXISTS';
5551 END IF;
5552
5553 --WE DO THE TVC VALIDATION FOR SRAG ONLY IF THIS ATTR HAS ATLEAST ONE VALID INSTANCE IN THE INTF TABLE
5554 IF (l_attr_exists_in_intf = 'EXISTS') THEN
5555 IF (l_attr_metadata_table_sr(x).VALIDATION_CODE = EGO_EXT_FWK_PUB.G_TABLE_VALIDATION_CODE) THEN
5556
5557 code_debug(' The attribute :'||l_attr_metadata_table_sr(x).ATTR_NAME||' has a table value set attached to it with value set id :'||l_attr_metadata_table_sr(x).VALUE_SET_ID ,2);
5558
5559 SELECT APPLICATION_TABLE_NAME,
5560 VALUE_COLUMN_NAME,--VALUE_COLUMN_TYPE,VALUE_COLUMN_SIZE,
5561 ID_COLUMN_NAME, --ID_COLUMN_TYPE, ID_COLUMN_SIZE,
5562 MEANING_COLUMN_NAME, --MEANING_COLUMN_TYPE,
5563 ADDITIONAL_WHERE_CLAUSE
5564 INTO l_tvs_table_name,
5565 l_tvs_val_col, --l_tvs_val_col_type, l_tvs_val_col_size,
5566 l_tvs_id_col, --l_tvs_id_col_type, l_tvs_id_col_size
5567 l_tvs_mean_col, --l_tvs_mean_col_type,
5568 l_tvs_where_clause
5569 FROM FND_FLEX_VALIDATION_TABLES
5570 WHERE FLEX_VALUE_SET_ID = l_attr_metadata_table_sr(x).VALUE_SET_ID;
5571
5572 --By GEGUO for bug 9218013
5573 l_tvs_where_clause := trim(l_tvs_where_clause) || ' ';--BugFix:4609213: in case we have a bind at the end it fails because of the assimption mentioned below !
5574 IF (l_tvs_id_col IS NOT NULL) THEN
5575 l_tvs_col := l_tvs_id_col;
5576 ELSE
5577 l_tvs_col := l_tvs_val_col;
5578 END IF;
5579
5580
5581 -- abedajna Bug 6207675
5582 --if ( l_tvs_where_clause is not null ) then
5583 -- l_tvs_where_clause := '('||l_tvs_where_clause||')';
5584 --end if;
5585 -- abedajna Bug 6322809
5586
5587 -- bug 12889614, 13011041, system will not process the where clause if the
5588 --where clause does not start with order by statement.
5589 IF (INSTR(UPPER(LTRIM(l_tvs_where_clause)), 'ORDER ') <> 1) THEN
5590 l_tvs_where_clause := process_whereclause(l_tvs_where_clause);
5591 END IF;
5592
5593
5594 IF(INSTR(UPPER(LTRIM(l_tvs_where_clause)),'WHERE ')) = 1 THEN --BugFix : 4171705
5595 l_tvs_where_clause := SUBSTR(l_tvs_where_clause, INSTR(UPPER(l_tvs_where_clause),'WHERE ')+5 );
5596 ELSIF (INSTR(UPPER(LTRIM(l_tvs_where_clause)),'(WHERE ')) = 1 THEN /*Added one more condition for bug 7508982*/
5597 l_tvs_where_clause := '('||SUBSTR(l_tvs_where_clause, INSTR(UPPER(l_tvs_where_clause),'WHERE ')+5 );
5598 END IF;
5599
5600 ------------------------------------------------------
5601 -- In case the where clause has new line or tabs --
5602 -- we need to remove it BugFix:4101091 --
5603 ------------------------------------------------------
5604 SELECT REPLACE(l_tvs_where_clause,FND_GLOBAL.LOCAL_CHR(10),FND_GLOBAL.LOCAL_CHR(32)) INTO l_tvs_where_clause FROM dual; --replacing new line character
5605 SELECT REPLACE(l_tvs_where_clause,FND_GLOBAL.LOCAL_CHR(13),FND_GLOBAL.LOCAL_CHR(32)) INTO l_tvs_where_clause FROM dual; --removing carriage return
5606
5607 IF(INSTR(UPPER(l_tvs_where_clause),' ORDER ')) <> 0 THEN --Bug:4065857 gnanda we need to remove the order by clause if any in the where clause
5608 l_tvs_where_clause := SUBSTR(l_tvs_where_clause, 1 , INSTR(UPPER(l_tvs_where_clause),' ORDER '));
5609 END IF;
5610
5611 IF(INSTR(UPPER(l_tvs_where_clause),')ORDER ')) <> 0 THEN --BugFix:6133202
5612 l_tvs_where_clause := SUBSTR(l_tvs_where_clause, 1 , INSTR(UPPER(l_tvs_where_clause),')ORDER '));
5613 END IF;
5614
5615
5616 IF(INSTR(UPPER(LTRIM(l_tvs_where_clause)),'ORDER ')) = 1 THEN --Bug:4065857 gnanda we need to remove the order by if where clause has only an order by
5617 l_tvs_where_clause := SUBSTR(l_tvs_where_clause, 1 , INSTR(UPPER(l_tvs_where_clause),' ORDER '));
5618 l_tvs_where_clause := ' 1=1 '|| l_tvs_where_clause;
5619 END IF;
5620
5621 l_tvs_metadata_fetched := TRUE;
5622
5623 WHILE (INSTR(l_tvs_where_clause, ':$ATTRIBUTEGROUP$') > 0)
5624 LOOP
5625 l_attrname_start_index := INSTR(l_tvs_where_clause,':$ATTRIBUTEGROUP$') +18;
5626 -- NOTE: WE ASSUME THAT WE WILL HAVE A SPACE AFTER THE ATTR NAME (will look into this later)
5627 l_attrname_end_index := INSTR(l_tvs_where_clause,' ',l_attrname_start_index,1);
5628
5629 l_bind_attr_name := SUBSTR(l_tvs_where_clause,l_attrname_start_index,l_attrname_end_index-l_attrname_start_index);
5630
5631 -- HERE WE GET THE COLNAME AND DATATYPE OF THE ATTRIBUTE USED AS BIND VARIABLE
5632 FOR j IN l_attr_metadata_table_sr.FIRST .. l_attr_metadata_table_sr.LAST LOOP
5633 IF (l_attr_metadata_table_sr(j).ATTR_NAME = l_bind_attr_name) THEN
5634 l_ext_attr_col_name := l_attr_metadata_table_sr(j).DATABASE_COLUMN;
5635 l_bind_attr_data_type := l_attr_metadata_table_sr(j).DATA_TYPE_CODE;
5636 END IF;
5637 END LOOP;
5638
5639 IF (l_ext_attr_col_name IS NULL OR l_bind_attr_data_type IS NULL) THEN
5640 l_tvs_metadata_fetched := FALSE;
5641 ELSE
5642 l_tvs_metadata_fetched := TRUE;
5643 END IF;
5644 l_value_from_ext_table := '( SELECT '|| l_ext_attr_col_name ||'
5645 FROM '||l_ext_vl_name||'
5646 WHERE ATTR_GROUP_ID = UAI1.ATTR_GROUP_ID ';
5647
5648 -- add the pk's
5649 IF (l_pk1_column_name IS NOT NULL) THEN
5650 l_value_from_ext_table := l_value_from_ext_table || ' AND '||l_pk1_column_name||' = UAI1.'||l_pk1_column_name;
5651 END IF;
5652 IF (l_pk2_column_name IS NOT NULL) THEN
5653 l_value_from_ext_table := l_value_from_ext_table || ' AND '||l_pk2_column_name||' = UAI1.'||l_pk2_column_name;
5654 END IF;
5655 IF (l_pk3_column_name IS NOT NULL) THEN
5656 l_value_from_ext_table := l_value_from_ext_table || ' AND '||l_pk3_column_name||' = UAI1.'||l_pk3_column_name;
5657 END IF;
5658 IF (l_pk4_column_name IS NOT NULL) THEN
5659 l_value_from_ext_table := l_value_from_ext_table || ' AND '||l_pk4_column_name||' = UAI1.'||l_pk4_column_name;
5660 END IF;
5661 IF (l_pk5_column_name IS NOT NULL) THEN
5662 l_value_from_ext_table := l_value_from_ext_table || ' AND '||l_pk5_column_name||' = UAI1.'||l_pk5_column_name;
5663 END IF;
5664
5665 --bug 12397223 begin
5666 OPEN enabled_data_level_cols(l_attr_group_metadata_obj.ATTR_GROUP_ID);
5667 LOOP
5668 FETCH enabled_data_level_cols INTO l_data_level_cols_rec;
5669 EXIT WHEN enabled_data_level_cols%NOTFOUND;
5670 IF(l_data_level_cols_rec.PK1_COLUMN_NAME IS NOT NULL) THEN
5671 l_value_from_ext_table := l_value_from_ext_table || ' AND NVL('||l_data_level_cols_rec.PK1_COLUMN_NAME||',-1) = NVL(UAI1.'||l_data_level_cols_rec.PK1_COLUMN_NAME||',-1)';
5672 END IF;
5673 IF(l_data_level_cols_rec.PK2_COLUMN_NAME IS NOT NULL) THEN
5674 l_value_from_ext_table := l_value_from_ext_table || ' AND NVL('||l_data_level_cols_rec.PK2_COLUMN_NAME||',-1) = NVL(UAI1.'||l_data_level_cols_rec.PK2_COLUMN_NAME||',-1)';
5675 END IF;
5676 IF(l_data_level_cols_rec.PK3_COLUMN_NAME IS NOT NULL) THEN
5677 l_value_from_ext_table := l_value_from_ext_table || ' AND NVL('||l_data_level_cols_rec.PK3_COLUMN_NAME||',-1) = NVL(UAI1.'||l_data_level_cols_rec.PK3_COLUMN_NAME||',-1)';
5678 END IF;
5679 IF(l_data_level_cols_rec.PK4_COLUMN_NAME IS NOT NULL) THEN
5680 l_value_from_ext_table := l_value_from_ext_table || ' AND NVL('||l_data_level_cols_rec.PK4_COLUMN_NAME||',-1) = NVL(UAI1.'||l_data_level_cols_rec.PK4_COLUMN_NAME||',-1)';
5681 END IF;
5682 IF(l_data_level_cols_rec.PK5_COLUMN_NAME IS NOT NULL) THEN
5683 l_value_from_ext_table := l_value_from_ext_table || ' AND NVL('||l_data_level_cols_rec.PK5_COLUMN_NAME||',-1) = NVL(UAI1.'||l_data_level_cols_rec.PK5_COLUMN_NAME||',-1)';
5684 END IF;
5685 END LOOP;
5686 CLOSE enabled_data_level_cols;
5687
5688 /*IF (l_num_data_level_columns = 1) THEN
5689 l_value_from_ext_table := l_value_from_ext_table || ' AND NVL('||l_data_level_column_1||',-1) = NVL(UAI1.'||l_data_level_column_1||',-1)';
5690
5691 ELSIF (l_num_data_level_columns = 2) THEN
5692 l_value_from_ext_table := l_value_from_ext_table || ' AND NVL('||l_data_level_column_1||',-1) = NVL(UAI1.'||l_data_level_column_1||',-1)';
5693 l_value_from_ext_table := l_value_from_ext_table || ' AND NVL('||l_data_level_column_2||',-1) = NVL(UAI1.'||l_data_level_column_2||',-1)';
5694
5695 ELSIF (l_num_data_level_columns = 3) THEN
5696 l_value_from_ext_table := l_value_from_ext_table || ' AND NVL('||l_data_level_column_1||',-1) = NVL(UAI1.'||l_data_level_column_1||',-1)';
5697 l_value_from_ext_table := l_value_from_ext_table || ' AND NVL('||l_data_level_column_2||',-1) = NVL(UAI1.'||l_data_level_column_2||',-1)';
5698 l_value_from_ext_table := l_value_from_ext_table || ' AND NVL('||l_data_level_column_3||',-1) = NVL(UAI1.'||l_data_level_column_3||',-1)';
5699 END IF;
5700 */
5701 --bug 12397223 end
5702
5703 IF (l_bind_attr_data_type = EGO_EXT_FWK_PUB.G_NUMBER_DATA_TYPE) THEN
5704 l_value_from_intftbl := '(SELECT ATTR_VALUE_NUM FROM '||p_interface_table_name||'
5705 WHERE ROW_IDENTIFIER = UAI1.ROW_IDENTIFIER
5706 AND DATA_SET_ID = :data_set_id
5707 AND ATTR_INT_NAME = '''||l_bind_attr_name||''' )';
5708 ELSIF (l_bind_attr_data_type = EGO_EXT_FWK_PUB.G_DATE_DATA_TYPE OR l_bind_attr_data_type = EGO_EXT_FWK_PUB.G_DATE_TIME_DATA_TYPE) THEN
5709 l_value_from_intftbl := '(SELECT ATTR_VALUE_DATE FROM '||p_interface_table_name||'
5710 WHERE ROW_IDENTIFIER = UAI1.ROW_IDENTIFIER
5711 AND DATA_SET_ID = :data_set_id
5712 AND ATTR_INT_NAME = '''||l_bind_attr_name||''' )';
5713 ELSE
5714 l_value_from_intftbl := '(SELECT ATTR_VALUE_STR FROM '||p_interface_table_name||'
5715 WHERE ROW_IDENTIFIER = UAI1.ROW_IDENTIFIER
5716 AND DATA_SET_ID = :data_set_id
5717 AND ATTR_INT_NAME = '''||l_bind_attr_name||''' )';
5718 END IF;
5719
5720 l_value_from_ext_table := l_value_from_ext_table || ' )';
5721 -- now we replace the :$ATTRIBUTEGROUP$.attrname with the query to find the value.
5722
5723 l_tvs_where_clause := SUBSTR(l_tvs_where_clause,1,INSTR(l_tvs_where_clause, ':$ATTRIBUTEGROUP$')-1) ||
5724 '(NVL('||l_value_from_intftbl||',
5725 DECODE(UAI1.TRANSACTION_TYPE, ''UPDATE'','||l_value_from_ext_table||',''CREATE'',NULL,NULL)
5726 )
5727 )'||
5728 SUBSTR(l_tvs_where_clause,l_attrname_end_index);
5729
5730 END LOOP;
5731 WHILE (INSTR(l_tvs_where_clause, ':$OBJECT$') > 0)
5732 LOOP
5733 SELECT REPLACE(l_tvs_where_clause,':$OBJECT$','UAI1') INTO l_tvs_where_clause FROM DUAL;
5734 END LOOP;
5735 /*
5736 THERE COULD BE A POSSIBILITY THAT THE TVS QUERY RETURNS MORE THAN ONE ROW
5737 IN THIS CASE WE JUST TAKE THE FIRST ROW : ( i.e. WHERE ROWNUM = 1)
5738 */
5739 l_tvs_where_clause := RTRIM(LTRIM(l_tvs_where_clause));
5740
5741 IF LENGTH(l_tvs_where_clause)<3 OR LENGTH(l_tvs_where_clause) IS NULL THEN --added for bugFix:4609213
5742 l_tvs_where_clause := ' 1=1 '||l_tvs_where_clause;
5743 END IF;
5744
5745 l_tvs_select := '(SELECT DISTINCT '||l_tvs_col||' FROM '||l_tvs_table_name||'
5746 WHERE '||l_tvs_where_clause||'
5747 AND ROWNUM = 1
5748 AND '||l_tvs_val_col||' = UAI1.ATTR_DISP_VALUE )';--BugFix : 4171705
5749
5750 l_tvs_num_val_check_select := '(SELECT COUNT(*) FROM '||l_tvs_table_name||'
5751 WHERE '||l_tvs_where_clause||'
5752 AND ROWNUM = 1
5753 AND '||l_tvs_col||' = UAI1.ATTR_VALUE_NUM )';
5754
5755 l_tvs_date_val_check_select := '(SELECT COUNT(*) FROM '||l_tvs_table_name||'
5756 WHERE '||l_tvs_where_clause||'
5757 AND ROWNUM = 1
5758 AND '||l_tvs_col||' = UAI1.ATTR_VALUE_DATE )';
5759
5760 l_tvs_str_val_check_select := '(SELECT COUNT(*) FROM '||l_tvs_table_name||'
5761 WHERE '||l_tvs_where_clause||'
5762 AND ROWNUM = 1
5763 AND '||l_tvs_col||' = UAI1.ATTR_VALUE_STR )';
5764
5765 code_debug(' The TVS select constructed is :'||l_tvs_select ,3);
5766
5767 IF (l_tvs_metadata_fetched = FALSE) THEN
5768 IF (l_bad_bindattrs_tvs_cursor_id IS NULL) THEN
5769 l_bad_bindattrs_tvs_cursor_id := DBMS_SQL.Open_Cursor;
5770 l_dynamic_sql :=
5771 'UPDATE '||p_interface_table_name||'
5772 SET PROCESS_STATUS = PROCESS_STATUS + '||G_PS_BAD_ATTRS_IN_TVS_WHERE||'
5773 WHERE DATA_SET_ID = :data_set_id
5774 AND ATTR_INT_NAME = :attr_internal_name
5775 AND ATTR_GROUP_INT_NAME = :attr_group_int_name';
5776
5777 DBMS_SQL.Parse(l_bad_bindattrs_tvs_cursor_id, l_dynamic_sql, DBMS_SQL.NATIVE);
5778 DBMS_SQL.Bind_Variable(l_bad_bindattrs_tvs_cursor_id, ':data_set_id', p_data_set_id);
5779 END IF;
5780
5781 DBMS_SQL.Bind_Variable(l_bad_bindattrs_tvs_cursor_id, ':attr_group_int_name', l_attr_group_metadata_obj.ATTR_GROUP_NAME);
5782 DBMS_SQL.Bind_Variable(l_bad_bindattrs_tvs_cursor_id, ':attr_internal_name', l_attr_metadata_table_sr(x).ATTR_NAME);
5783 l_dummy := DBMS_SQL.Execute(l_bad_bindattrs_tvs_cursor_id);
5784 ELSE -- now we do the interface table update since we are sure we have the metadata for bound variables
5785
5786 /*
5787 Note: we are assuming that the setup is correct i.e. the column of the TVS are of correct data type
5788 the id col is of datatype same as the attribute
5789 the meanin col is of type character.
5790 another assumtion is that the user cannot enter the value directly in to the attr_val_* col
5791 he has to enter the data in attr_disp_Value column for which we get the actual attr val.
5792 */
5793 IF (l_attr_metadata_table_sr(x).DATA_TYPE_CODE = EGO_EXT_FWK_PUB.G_NUMBER_DATA_TYPE) THEN
5794
5795 l_dynamic_sql_1 :=
5796 'UPDATE '||p_interface_table_name||' UAI1
5797 SET PROCESS_STATUS = PROCESS_STATUS + DECODE(('||l_tvs_num_val_check_select||'),0,'||G_PS_VALUE_NOT_IN_TVS||',0)
5798 WHERE DATA_SET_ID = :data_set_id
5799 AND (PROCESS_STATUS = '||G_PS_IN_PROCESS||' OR PROCESS_STATUS > '||G_PS_BAD_ATTR_OR_AG_METADATA||' )
5800 AND BITAND(PROCESS_STATUS, '||G_PS_NO_PRIVILEGES||') = 0
5801 AND ATTR_INT_NAME = '''||l_attr_metadata_table_sr(x).ATTR_NAME||'''
5802 AND ATTR_GROUP_INT_NAME = '''||l_attr_group_metadata_obj.ATTR_GROUP_NAME||'''
5803 AND ATTR_VALUE_NUM IS NOT NULL';
5804
5805 l_dynamic_sql :=
5806 'UPDATE '||p_interface_table_name||' UAI1
5807 SET ATTR_VALUE_NUM = NVL('||l_tvs_select||',NULL),
5808 PROCESS_STATUS = PROCESS_STATUS + DECODE(('||l_tvs_select||'),NULL,'||G_PS_VALUE_NOT_IN_TVS||',0)
5809 WHERE DATA_SET_ID = :data_set_id
5810 AND (PROCESS_STATUS = '||G_PS_IN_PROCESS||' OR PROCESS_STATUS > '||G_PS_BAD_ATTR_OR_AG_METADATA||' )
5811 AND BITAND(PROCESS_STATUS, '||G_PS_NO_PRIVILEGES||') = 0
5812 AND ATTR_INT_NAME = '''||l_attr_metadata_table_sr(x).ATTR_NAME||'''
5813 AND ATTR_GROUP_INT_NAME = '''||l_attr_group_metadata_obj.ATTR_GROUP_NAME||'''
5814 AND ATTR_DISP_VALUE IS NOT NULL ';
5815 -- We execute the above cursor in a PL/SQL block since we know that if this fails
5816 -- it is because of wrong setup the user has created for table value sets, so we
5817 -- need to mark the row as errored due to bad TVS setup.
5818
5819 BEGIN
5820 --EXECUTE IMMEDIATE l_dynamic_sql_1;
5821 IF (l_sr_tvs_num_cursor_id1 IS NULL) THEN
5822 l_sr_tvs_num_cursor_id1 := DBMS_SQL.Open_Cursor;
5823 END IF;
5824 DBMS_SQL.Parse(l_sr_tvs_num_cursor_id1, l_dynamic_sql_1, DBMS_SQL.NATIVE);
5825 DBMS_SQL.Bind_Variable(l_sr_tvs_num_cursor_id1, ':data_set_id', p_data_set_id);
5826 l_dummy := DBMS_SQL.Execute(l_sr_tvs_num_cursor_id1);
5827
5828 --EXECUTE IMMEDIATE l_dynamic_sql;
5829 IF (l_sr_tvs_num_cursor_id2 IS NULL) THEN
5830 l_sr_tvs_num_cursor_id2 := DBMS_SQL.Open_Cursor;
5831 END IF;
5832 DBMS_SQL.Parse(l_sr_tvs_num_cursor_id2, l_dynamic_sql, DBMS_SQL.NATIVE);
5833 DBMS_SQL.Bind_Variable(l_sr_tvs_num_cursor_id2, ':data_set_id', p_data_set_id);
5834 l_dummy := DBMS_SQL.Execute(l_sr_tvs_num_cursor_id2);
5835
5836 EXCEPTION
5837 WHEN OTHERS THEN
5838 IF (l_bad_tvs_sql_cursor_id IS NULL) THEN
5839 l_bad_tvs_sql_cursor_id := DBMS_SQL.Open_Cursor;
5840 l_dynamic_sql :=
5841 'UPDATE '||p_interface_table_name||'
5842 SET PROCESS_STATUS = PROCESS_STATUS + '||G_PS_BAD_TVS_SETUP||'
5843 WHERE DATA_SET_ID = :data_set_id
5844 AND ATTR_INT_NAME = :attr_internal_name
5845 AND ATTR_GROUP_INT_NAME = :attr_group_int_name';
5846
5847 DBMS_SQL.Parse(l_bad_tvs_sql_cursor_id, l_dynamic_sql, DBMS_SQL.NATIVE);
5848 DBMS_SQL.Bind_Variable(l_bad_tvs_sql_cursor_id, ':data_set_id', p_data_set_id);
5849 END IF;
5850 DBMS_SQL.Bind_Variable(l_bad_tvs_sql_cursor_id, ':attr_group_int_name', l_attr_group_metadata_obj.ATTR_GROUP_NAME);
5851 DBMS_SQL.Bind_Variable(l_bad_tvs_sql_cursor_id, ':attr_internal_name', l_attr_metadata_table_sr(x).ATTR_NAME);
5852 l_dummy := DBMS_SQL.Execute(l_bad_tvs_sql_cursor_id);
5853 END;
5854
5855 ELSIF (l_attr_metadata_table_sr(x).DATA_TYPE_CODE = EGO_EXT_FWK_PUB.G_DATE_DATA_TYPE OR l_attr_metadata_table_sr(x).DATA_TYPE_CODE = EGO_EXT_FWK_PUB.G_DATE_TIME_DATA_TYPE) THEN
5856
5857 l_dynamic_sql_1 :=
5858 'UPDATE '||p_interface_table_name||' UAI1
5859 SET PROCESS_STATUS = PROCESS_STATUS + DECODE(('||l_tvs_date_val_check_select||'),0,'||G_PS_VALUE_NOT_IN_TVS||',0)
5860 WHERE DATA_SET_ID = :data_set_id
5861 AND (PROCESS_STATUS = '||G_PS_IN_PROCESS||' OR PROCESS_STATUS > '||G_PS_BAD_ATTR_OR_AG_METADATA||' )
5862 AND BITAND(PROCESS_STATUS, '||G_PS_NO_PRIVILEGES||') = 0
5863 AND ATTR_INT_NAME = '''||l_attr_metadata_table_sr(x).ATTR_NAME||'''
5864 AND ATTR_GROUP_INT_NAME = '''||l_attr_group_metadata_obj.ATTR_GROUP_NAME||'''
5865 AND ATTR_VALUE_DATE IS NOT NULL';
5866
5867 l_dynamic_sql :=
5868 'UPDATE '||p_interface_table_name||' UAI1
5869 SET ATTR_VALUE_DATE = NVL('||l_tvs_select||',NULL),
5870 PROCESS_STATUS = PROCESS_STATUS + DECODE(('||l_tvs_select||'),NULL,'||G_PS_VALUE_NOT_IN_TVS||',0)
5871 WHERE DATA_SET_ID = :data_set_id
5872 AND (PROCESS_STATUS = '||G_PS_IN_PROCESS||' OR PROCESS_STATUS > '||G_PS_BAD_ATTR_OR_AG_METADATA||' )
5873 AND BITAND(PROCESS_STATUS, '||G_PS_NO_PRIVILEGES||') = 0
5874 AND ATTR_INT_NAME = '''||l_attr_metadata_table_sr(x).ATTR_NAME||'''
5875 AND ATTR_GROUP_INT_NAME = '''||l_attr_group_metadata_obj.ATTR_GROUP_NAME||'''
5876 AND ATTR_DISP_VALUE IS NOT NULL ';
5877
5878 -- We execute the above cursor in a PL/SQL block since we know that if this fails
5879 -- it is because of wrong setup the user has created for table value sets, so we
5880 -- need to mark the row as errored due to bad TVS setup.
5881 BEGIN
5882
5883 --EXECUTE IMMEDIATE l_dynamic_sql_1;
5884 IF (l_sr_tvs_date_cursor_id1 IS NULL) THEN
5885 l_sr_tvs_date_cursor_id1 := DBMS_SQL.Open_Cursor;
5886 END IF;
5887 DBMS_SQL.Parse(l_sr_tvs_date_cursor_id1, l_dynamic_sql_1, DBMS_SQL.NATIVE);
5888 DBMS_SQL.Bind_Variable(l_sr_tvs_date_cursor_id1, ':data_set_id', p_data_set_id);
5889 l_dummy := DBMS_SQL.Execute(l_sr_tvs_date_cursor_id1);
5890
5891 --EXECUTE IMMEDIATE l_dynamic_sql;
5892 IF (l_sr_tvs_date_cursor_id2 IS NULL) THEN
5893 l_sr_tvs_date_cursor_id2 := DBMS_SQL.Open_Cursor;
5894 END IF;
5895 DBMS_SQL.Parse(l_sr_tvs_date_cursor_id2, l_dynamic_sql, DBMS_SQL.NATIVE);
5896 DBMS_SQL.Bind_Variable(l_sr_tvs_date_cursor_id2, ':data_set_id', p_data_set_id);
5897 l_dummy := DBMS_SQL.Execute(l_sr_tvs_date_cursor_id2);
5898
5899 EXCEPTION
5900 WHEN OTHERS THEN
5901 IF (l_bad_tvs_sql_cursor_id IS NULL) THEN
5902 l_bad_tvs_sql_cursor_id := DBMS_SQL.Open_Cursor;
5903 l_dynamic_sql :=
5904 'UPDATE '||p_interface_table_name||'
5905 SET PROCESS_STATUS = PROCESS_STATUS + '||G_PS_BAD_TVS_SETUP||'
5906 WHERE DATA_SET_ID = :data_set_id
5907 AND ATTR_INT_NAME = :attr_internal_name
5908 AND ATTR_GROUP_INT_NAME = :attr_group_int_name';
5909
5910 DBMS_SQL.Parse(l_bad_tvs_sql_cursor_id, l_dynamic_sql, DBMS_SQL.NATIVE);
5911 DBMS_SQL.Bind_Variable(l_bad_tvs_sql_cursor_id, ':data_set_id', p_data_set_id);
5912 END IF;
5913 DBMS_SQL.Bind_Variable(l_bad_tvs_sql_cursor_id, ':attr_group_int_name', l_attr_group_metadata_obj.ATTR_GROUP_NAME);
5914 DBMS_SQL.Bind_Variable(l_bad_tvs_sql_cursor_id, ':attr_internal_name', l_attr_metadata_table_sr(x).ATTR_NAME);
5915 l_dummy := DBMS_SQL.Execute(l_bad_tvs_sql_cursor_id);
5916 END;
5917 ELSE
5918 l_dynamic_sql_1 :=
5919 'UPDATE '||p_interface_table_name||' UAI1
5920 SET PROCESS_STATUS = PROCESS_STATUS + DECODE(('||l_tvs_str_val_check_select||'),0,'||G_PS_VALUE_NOT_IN_TVS||',0)
5921 WHERE DATA_SET_ID = :data_set_id
5922 AND (PROCESS_STATUS = '||G_PS_IN_PROCESS||' OR PROCESS_STATUS > '||G_PS_BAD_ATTR_OR_AG_METADATA||' )
5923 AND BITAND(PROCESS_STATUS, '||G_PS_NO_PRIVILEGES||') = 0
5924 AND ATTR_INT_NAME = '''||l_attr_metadata_table_sr(x).ATTR_NAME||'''
5925 AND ATTR_GROUP_INT_NAME = '''||l_attr_group_metadata_obj.ATTR_GROUP_NAME||'''
5926 AND ATTR_VALUE_STR IS NOT NULL';
5927
5928 l_dynamic_sql :=
5929 'UPDATE '||p_interface_table_name||' UAI1
5930 SET ATTR_VALUE_STR = NVL('||l_tvs_select||',NULL),
5931 PROCESS_STATUS = PROCESS_STATUS + DECODE(('||l_tvs_select||'),NULL,'||G_PS_VALUE_NOT_IN_TVS||',0)
5932 WHERE DATA_SET_ID = :data_set_id
5933 AND (PROCESS_STATUS = '||G_PS_IN_PROCESS||' OR PROCESS_STATUS > '||G_PS_BAD_ATTR_OR_AG_METADATA||' )
5934 AND BITAND(PROCESS_STATUS, '||G_PS_NO_PRIVILEGES||') = 0
5935 AND ATTR_INT_NAME = '''||l_attr_metadata_table_sr(x).ATTR_NAME||'''
5936 AND ATTR_GROUP_INT_NAME = '''||l_attr_group_metadata_obj.ATTR_GROUP_NAME||'''
5937 AND ATTR_DISP_VALUE IS NOT NULL ';
5938 -- We execute the above cursor in a PL/SQL block since we know that if this fails
5939 -- it is because of wrong setup the user has created for table value sets, so we
5940 -- need to mark the row as errored due to bad TVS setup.
5941 BEGIN
5942 --EXECUTE IMMEDIATE l_dynamic_sql_1;
5943 IF (l_sr_tvs_str_cursor_id1 IS NULL) THEN
5944 l_sr_tvs_str_cursor_id1 := DBMS_SQL.Open_Cursor;
5945 END IF;
5946 DBMS_SQL.Parse(l_sr_tvs_str_cursor_id1, l_dynamic_sql_1, DBMS_SQL.NATIVE);
5947 DBMS_SQL.Bind_Variable(l_sr_tvs_str_cursor_id1, ':data_set_id', p_data_set_id);
5948 l_dummy := DBMS_SQL.Execute(l_sr_tvs_str_cursor_id1);
5949
5950 --EXECUTE IMMEDIATE l_dynamic_sql;
5951 IF (l_sr_tvs_str_cursor_id2 IS NULL) THEN
5952 l_sr_tvs_str_cursor_id2 := DBMS_SQL.Open_Cursor;
5953 END IF;
5954 DBMS_SQL.Parse(l_sr_tvs_str_cursor_id2, l_dynamic_sql, DBMS_SQL.NATIVE);
5955 DBMS_SQL.Bind_Variable(l_sr_tvs_str_cursor_id2, ':data_set_id', p_data_set_id);
5956 l_dummy := DBMS_SQL.Execute(l_sr_tvs_str_cursor_id2);
5957
5958 EXCEPTION
5959 WHEN OTHERS THEN
5960 IF (l_bad_tvs_sql_cursor_id IS NULL) THEN
5961 l_bad_tvs_sql_cursor_id := DBMS_SQL.Open_Cursor;
5962 l_dynamic_sql :=
5963 'UPDATE '||p_interface_table_name||'
5964 SET PROCESS_STATUS = PROCESS_STATUS + '||G_PS_BAD_TVS_SETUP||'
5965 WHERE DATA_SET_ID = :data_set_id
5966 AND ATTR_INT_NAME = :attr_internal_name
5967 AND ATTR_GROUP_INT_NAME = :attr_group_int_name';
5968
5969 DBMS_SQL.Parse(l_bad_tvs_sql_cursor_id, l_dynamic_sql, DBMS_SQL.NATIVE);
5970 DBMS_SQL.Bind_Variable(l_bad_tvs_sql_cursor_id, ':data_set_id', p_data_set_id);
5971 END IF;
5972 DBMS_SQL.Bind_Variable(l_bad_tvs_sql_cursor_id, ':attr_group_int_name', l_attr_group_metadata_obj.ATTR_GROUP_NAME);
5973 DBMS_SQL.Bind_Variable(l_bad_tvs_sql_cursor_id, ':attr_internal_name', l_attr_metadata_table_sr(x).ATTR_NAME);
5974 l_dummy := DBMS_SQL.Execute(l_bad_tvs_sql_cursor_id);
5975 END;
5976 END IF;
5977 END IF; --l_attr_metadata TRUE/FALSE
5978 END IF; -- if validation_code is TVS
5979 END IF;--the if attr exists in the intf table ends.
5980 END LOOP; --end of all attr loop.
5981 END IF; -- ending of single row OR MULTI ROW if
5982
5983 code_debug(' Now done with the validations for ATTR GROUP LEVEL validations ',2);
5984
5985 END IF; -- *p_validate-IF-3.3* ending the p_validate IF
5986
5987 -----------------------------------------------------
5988 -- NOW WE WILL RAISE PRE-EVENTS FOR THE PASSED AG's
5989 -- (if the pre_events are enabled for the ag)
5990 -- ONLY IF THE PARAMETER p_do_dml IS TRUE
5991 -----------------------------------------------------
5992 IF (p_do_dml) THEN --search for *p_do_dml-IF-1* to locate the END
5993
5994 BEGIN
5995 SELECT PRE_BUSINESS_EVENT_NAME
5996 INTO l_pre_event_name
5997 FROM EGO_FND_DESC_FLEXS_EXT
5998 WHERE APPLICATION_ID = p_application_id
5999 AND DESCRIPTIVE_FLEXFIELD_NAME = p_attr_group_type;
6000 EXCEPTION
6001 WHEN NO_DATA_FOUND THEN
6002 l_pre_event_name := NULL;
6003 END;
6004
6005 SELECT COUNT(*)
6006 INTO l_dummy
6007 FROM EGO_ATTR_GROUP_DL
6008 WHERE ATTR_GROUP_ID = l_attr_group_metadata_obj.ATTR_GROUP_ID
6009 AND RAISE_PRE_EVENT = 'Y';
6010
6011 IF (l_dummy > 0) THEN
6012 l_is_pre_event_enabled_flag := 'Y';
6013 ELSE
6014 l_is_pre_event_enabled_flag := 'N';
6015 END IF;
6016
6017 code_debug('inside raising events l_is_pre_event_enabled_flag-'||l_is_pre_event_enabled_flag);
6018
6019 /*Code changes for bug 8485287*/
6020 /* Added code to raise postAttributeChange BE for call of public API to create Item. */
6021 BEGIN
6022 SELECT BUSINESS_EVENT_NAME
6023 INTO l_new_post_event_name
6024 FROM EGO_FND_DESC_FLEXS_EXT
6025 WHERE APPLICATION_ID = p_application_id
6026 AND DESCRIPTIVE_FLEXFIELD_NAME = p_attr_group_type;
6027 EXCEPTION
6028 WHEN NO_DATA_FOUND THEN
6029 l_new_post_event_name := NULL;
6030 END;
6031
6032 -- Bug 10090254 Changes : Start
6033 /*
6034 SELECT BUSINESS_EVENT_FLAG
6035 INTO l_new_post_event_enabled_flag
6036 FROM EGO_FND_DSC_FLX_CTX_EXT
6037 WHERE ATTR_GROUP_ID = l_attr_group_metadata_obj.ATTR_GROUP_ID;
6038 */
6039
6040 SELECT COUNT(*)
6041 INTO l_dummy
6042 FROM EGO_ATTR_GROUP_DL
6043 WHERE ATTR_GROUP_ID = l_attr_group_metadata_obj.ATTR_GROUP_ID
6044 AND RAISE_POST_EVENT = 'Y';
6045
6046 IF (l_dummy > 0) THEN
6047 l_new_post_event_enabled_flag := 'Y';
6048 ELSE
6049 l_new_post_event_enabled_flag := 'N';
6050 END IF;
6051
6052 code_debug('inside raising events l_new_post_event_enabled_flag - '||l_new_post_event_enabled_flag);
6053 -- Bug 10090254 Changes : End
6054
6055
6056 IF ((l_new_post_event_name IS NOT NULL AND l_new_post_event_enabled_flag = 'Y') ) THEN
6057
6058 l_dynamic_sql := ' SELECT EXTVL1.EXTENSION_ID , UAI1.ATTR_GROUP_INT_NAME, UAI1.TRANSACTION_TYPE, UAI1.ROW_IDENTIFIER ';
6059 l_group_by_pre := ' GROUP BY EXTVL1.EXTENSION_ID , UAI1.ATTR_GROUP_INT_NAME, UAI1.TRANSACTION_TYPE, UAI1.ROW_IDENTIFIER ';
6060 l_dynamic_sql_delete_post := ' SELECT NULL , UAI1.ATTR_GROUP_INT_NAME, UAI1.TRANSACTION_TYPE, UAI1.ROW_IDENTIFIER ';
6061 l_dynamic_group_by := ' ';
6062 l_deflatening_sql_where := ' ';
6063 l_dynamic_query := ' ';
6064
6065 IF (l_pk1_column_name IS NOT NULL) THEN
6066 l_dynamic_query := l_dynamic_query || ' , UAI1.' ||l_pk1_column_name;
6067 l_dynamic_group_by := l_dynamic_group_by || ' , UAI1.' ||l_pk1_column_name;
6068 l_deflatening_sql_where := l_deflatening_sql_where || ' AND UAI1.'||l_pk1_column_name||' = '||' EXTVL1.'||l_pk1_column_name;
6069 ELSE
6070 l_dynamic_query := l_dynamic_query || ' , NULL ';
6071 END IF;
6072
6073 IF (l_pk2_column_name IS NOT NULL) THEN
6074 l_dynamic_query := l_dynamic_query || ' , UAI1.' ||l_pk2_column_name;
6075 l_dynamic_group_by := l_dynamic_group_by || ' , UAI1.' ||l_pk2_column_name;
6076 l_deflatening_sql_where := l_deflatening_sql_where || ' AND UAI1.'||l_pk2_column_name||' = '||' EXTVL1.'||l_pK2_column_name;
6077 ELSE
6078 l_dynamic_query := l_dynamic_query || ' , NULL ';
6079 END IF;
6080
6081 IF (l_pk3_column_name IS NOT NULL) THEN
6082 l_dynamic_query := l_dynamic_query || ' , UAI1.' ||l_pk3_column_name;
6083 l_dynamic_group_by := l_dynamic_group_by || ' , UAI1.' ||l_pk3_column_name;
6084 l_deflatening_sql_where := l_deflatening_sql_where || ' AND UAI1.'||l_pk3_column_name||' = '||' EXTVL1.'||l_pk3_column_name;
6085 ELSE
6086 l_dynamic_query := l_dynamic_query || ' , NULL ';
6087 END IF;
6088
6089 IF (l_pk4_column_name IS NOT NULL) THEN
6090 l_dynamic_query := l_dynamic_query || ' , UAI1.' ||l_pk4_column_name;
6091 l_dynamic_group_by := l_dynamic_group_by || ' , UAI1.' ||l_pk4_column_name;
6092 l_deflatening_sql_where := l_deflatening_sql_where || ' AND UAI1.'||l_pk4_column_name||' = '||' EXTVL1.'||l_pk4_column_name;
6093 ELSE
6094 l_dynamic_query := l_dynamic_query || ' , NULL ';
6095 END IF;
6096 IF (l_pk5_column_name IS NOT NULL) THEN
6097 l_dynamic_query := l_dynamic_query || ' , UAI1.' ||l_pk5_column_name;
6098 l_dynamic_group_by := l_dynamic_group_by || ' , UAI1.' ||l_pk5_column_name;
6099 l_deflatening_sql_where := l_deflatening_sql_where || ' AND UAI1.'||l_pk5_column_name||' = '||' EXTVL1.'||l_pk5_column_name;
6100 ELSE
6101 l_dynamic_query := l_dynamic_query || ' , NULL ';
6102 END IF;
6103
6104 -- Bug 10090254 Code changes : Start
6105 /*
6106 IF (l_num_data_level_columns = 0) THEN
6107 l_dynamic_query := l_dynamic_query ||' , NULL ';
6108 l_dynamic_query := l_dynamic_query ||' , NULL ';
6109 l_dynamic_query := l_dynamic_query ||' , NULL ';
6110 ELSIF (l_num_data_level_columns = 1) THEN
6111 l_dynamic_query := l_dynamic_query ||' , UAI1.' ||l_data_level_column_1;
6112 l_dynamic_query := l_dynamic_query ||' , NULL ';
6113 l_dynamic_query := l_dynamic_query ||' , NULL ';
6114 l_dynamic_group_by := l_dynamic_group_by ||' , UAI1.' ||l_data_level_column_1;
6115 l_deflatening_sql_where := l_deflatening_sql_where || ' AND (UAI1.'||l_data_level_column_1||' = '||' EXTVL1.'||l_data_level_column_1||' OR ('||'UAI1.'||l_data_level_column_1|| ' IS NULL AND EXTVL1.'||l_data_level_column_1||' IS NULL))' ;
6116 ELSIF (l_num_data_level_columns = 2) THEN
6117 l_dynamic_query := l_dynamic_query ||' , UAI1.' ||l_data_level_column_1;
6118 l_dynamic_query := l_dynamic_query ||' , UAI1.' ||l_data_level_column_2;
6119 l_dynamic_query := l_dynamic_query ||' , NULL ';
6120 l_dynamic_group_by := l_dynamic_group_by ||' , UAI1.' ||l_data_level_column_1;
6121 l_dynamic_group_by := l_dynamic_group_by ||' , UAI1.' ||l_data_level_column_2;
6122 l_deflatening_sql_where := l_deflatening_sql_where || ' AND (UAI1.'||l_data_level_column_1||' = '||' EXTVL1.'||l_data_level_column_1||' OR ('||'UAI1.'||l_data_level_column_1|| ' IS NULL AND EXTVL1.'||l_data_level_column_1||' IS NULL))' ;
6123 l_deflatening_sql_where := l_deflatening_sql_where || ' AND (UAI1.'||l_data_level_column_2||' = '||' EXTVL1.'||l_data_level_column_2||' OR ('||'UAI1.'||l_data_level_column_2|| ' IS NULL AND EXTVL1.'||l_data_level_column_2||' IS NULL))' ;
6124 ELSIF (l_num_data_level_columns = 3) THEN
6125 l_dynamic_query := l_dynamic_query ||' , UAI1.' ||l_data_level_column_1;
6126 l_dynamic_query := l_dynamic_query ||' , UAI1.' ||l_data_level_column_2;
6127 l_dynamic_query := l_dynamic_query ||' , UAI1.' ||l_data_level_column_3;
6128 l_dynamic_group_by := l_dynamic_group_by ||' , UAI1.' ||l_data_level_column_1;
6129 l_dynamic_group_by := l_dynamic_group_by ||' , UAI1.' ||l_data_level_column_2;
6130 l_dynamic_group_by := l_dynamic_group_by ||' , UAI1.' ||l_data_level_column_3;
6131 l_deflatening_sql_where := l_deflatening_sql_where || ' AND (UAI1.'||l_data_level_column_1||' = '||' EXTVL1.'||l_data_level_column_1||' OR ('||'UAI1.'||l_data_level_column_1|| ' IS NULL AND EXTVL1.'||l_data_level_column_1||' IS NULL))' ;
6132 l_deflatening_sql_where := l_deflatening_sql_where || ' AND (UAI1.'||l_data_level_column_2||' = '||' EXTVL1.'||l_data_level_column_2||' OR ('||'UAI1.'||l_data_level_column_2|| ' IS NULL AND EXTVL1.'||l_data_level_column_2||' IS NULL))' ;
6133 l_deflatening_sql_where := l_deflatening_sql_where || ' AND (UAI1.'||l_data_level_column_3||' = '||' EXTVL1.'||l_data_level_column_3||' OR ('||'UAI1.'||l_data_level_column_3|| ' IS NULL AND EXTVL1.'||l_data_level_column_3||' IS NULL))' ;
6134 END IF;
6135 */
6136
6137 --------------------------------------
6138 -- Adding the data level columns ...
6139 --------------------------------------
6140 IF(l_data_level_col_exists) THEN
6141
6142 l_dynamic_query := l_dynamic_query||' , UAI1.DATA_LEVEL_ID ';
6143 l_dynamic_group_by := l_dynamic_group_by ||' , UAI1.DATA_LEVEL_ID ';
6144 l_deflatening_sql_where := l_deflatening_sql_where || ' AND NVL(UAI1.DATA_LEVEL_ID,-1) = NVL(EXTVL1.DATA_LEVEL_ID,-1) ';
6145
6146 l_dl_pk_col1_sql:=NULL;
6147 l_dl_pk_col2_sql:=NULL;
6148 l_dl_pk_col3_sql:=NULL;
6149 l_dl_pk_col4_sql:=NULL;
6150 l_dl_pk_col5_sql:=NULL;
6151
6152 FOR i IN l_list_of_dl_for_ag_type.FIRST .. l_list_of_dl_for_ag_type.LAST
6153 LOOP
6154 l_dl_pk_col1_sql := l_dl_pk_col1_sql||' , '||l_list_of_dl_for_ag_type(i).DATA_LEVEL_ID||' ';
6155 l_dl_pk_col2_sql := l_dl_pk_col2_sql||' , '||l_list_of_dl_for_ag_type(i).DATA_LEVEL_ID||' ';
6156 l_dl_pk_col3_sql := l_dl_pk_col3_sql||' , '||l_list_of_dl_for_ag_type(i).DATA_LEVEL_ID||' ';
6157 l_dl_pk_col4_sql := l_dl_pk_col4_sql||' , '||l_list_of_dl_for_ag_type(i).DATA_LEVEL_ID||' ';
6158 l_dl_pk_col5_sql := l_dl_pk_col5_sql||' , '||l_list_of_dl_for_ag_type(i).DATA_LEVEL_ID||' ';
6159
6160 IF (l_list_of_dl_for_ag_type(i).PK_COLUMN_NAME1 IS NOT NULL AND l_list_of_dl_for_ag_type(i).PK_COLUMN_NAME1 <> 'NONE'
6161 AND INSTR(l_dynamic_query,l_list_of_dl_for_ag_type(i).PK_COLUMN_NAME1) = 0) THEN
6162
6163 l_dl_pk_col1_sql := l_dl_pk_col1_sql||' , UAI1.' ||l_list_of_dl_for_ag_type(i).PK_COLUMN_NAME1;
6164 l_dynamic_group_by := l_dynamic_group_by ||' , UAI1.' ||l_list_of_dl_for_ag_type(i).PK_COLUMN_NAME1;
6165 l_deflatening_sql_where := l_deflatening_sql_where || ' AND (UAI1.'||l_list_of_dl_for_ag_type(i).PK_COLUMN_NAME1||
6166 ' = '||' EXTVL1.'||l_list_of_dl_for_ag_type(i).PK_COLUMN_NAME1||
6167 ' OR ('||'UAI1.'||l_list_of_dl_for_ag_type(i).PK_COLUMN_NAME1|| ' IS NULL '||
6168 'AND EXTVL1.'||l_list_of_dl_for_ag_type(i).PK_COLUMN_NAME1||' IS NULL))' ;
6169 ELSE
6170 l_dl_pk_col1_sql := l_dl_pk_col1_sql||' , NULL ';
6171 END IF;
6172 IF (l_list_of_dl_for_ag_type(i).PK_COLUMN_NAME2 IS NOT NULL AND l_list_of_dl_for_ag_type(i).PK_COLUMN_NAME2 <> 'NONE'
6173 AND INSTR(l_dynamic_query,l_list_of_dl_for_ag_type(i).PK_COLUMN_NAME2) = 0) THEN
6174 l_dl_pk_col2_sql := l_dl_pk_col2_sql||' , UAI1.' ||l_list_of_dl_for_ag_type(i).PK_COLUMN_NAME2;
6175 l_dynamic_group_by := l_dynamic_group_by ||' , UAI1.' ||l_list_of_dl_for_ag_type(i).PK_COLUMN_NAME2;
6176 l_deflatening_sql_where := l_deflatening_sql_where || ' AND (UAI1.'||l_list_of_dl_for_ag_type(i).PK_COLUMN_NAME2||
6177 ' = '||' EXTVL1.'||l_list_of_dl_for_ag_type(i).PK_COLUMN_NAME2||
6178 ' OR ('||'UAI1.'||l_list_of_dl_for_ag_type(i).PK_COLUMN_NAME2|| ' IS NULL '||
6179 'AND EXTVL1.'||l_list_of_dl_for_ag_type(i).PK_COLUMN_NAME2||' IS NULL))' ;
6180
6181 ELSE
6182 l_dl_pk_col2_sql := l_dl_pk_col2_sql||' , NULL ';
6183 END IF;
6184 IF (l_list_of_dl_for_ag_type(i).PK_COLUMN_NAME3 IS NOT NULL AND l_list_of_dl_for_ag_type(i).PK_COLUMN_NAME3 <> 'NONE'
6185 AND INSTR(l_dynamic_query,l_list_of_dl_for_ag_type(i).PK_COLUMN_NAME3) = 0) THEN
6186 l_dl_pk_col3_sql := l_dl_pk_col3_sql||' , UAI1.' ||l_list_of_dl_for_ag_type(i).PK_COLUMN_NAME3;
6187 l_dynamic_group_by := l_dynamic_group_by ||' , UAI1.' ||l_list_of_dl_for_ag_type(i).PK_COLUMN_NAME3;
6188 l_deflatening_sql_where := l_deflatening_sql_where || ' AND (UAI1.'||l_list_of_dl_for_ag_type(i).PK_COLUMN_NAME3||
6189 ' = '||' EXTVL1.'||l_list_of_dl_for_ag_type(i).PK_COLUMN_NAME3||
6190 ' OR ('||'UAI1.'||l_list_of_dl_for_ag_type(i).PK_COLUMN_NAME3|| ' IS NULL '||
6191 'AND EXTVL1.'||l_list_of_dl_for_ag_type(i).PK_COLUMN_NAME3||' IS NULL))' ;
6192
6193 ELSE
6194 l_dl_pk_col3_sql := l_dl_pk_col3_sql||' , NULL ';
6195 END IF;
6196 IF (l_list_of_dl_for_ag_type(i).PK_COLUMN_NAME4 IS NOT NULL AND l_list_of_dl_for_ag_type(i).PK_COLUMN_NAME4 <> 'NONE'
6197 AND INSTR(l_dynamic_query,l_list_of_dl_for_ag_type(i).PK_COLUMN_NAME4) = 0) THEN
6198 l_dl_pk_col4_sql := l_dl_pk_col4_sql||' , UAI1.' ||l_list_of_dl_for_ag_type(i).PK_COLUMN_NAME4;
6199 l_dynamic_group_by := l_dynamic_group_by ||' , UAI1.' ||l_list_of_dl_for_ag_type(i).PK_COLUMN_NAME4;
6200 l_deflatening_sql_where := l_deflatening_sql_where || ' AND (UAI1.'||l_list_of_dl_for_ag_type(i).PK_COLUMN_NAME4||
6201 ' = '||' EXTVL1.'||l_list_of_dl_for_ag_type(i).PK_COLUMN_NAME4||
6202 ' OR ('||'UAI1.'||l_list_of_dl_for_ag_type(i).PK_COLUMN_NAME4|| ' IS NULL '||
6203 'AND EXTVL1.'||l_list_of_dl_for_ag_type(i).PK_COLUMN_NAME4||' IS NULL))' ;
6204
6205 ELSE
6206 l_dl_pk_col4_sql := l_dl_pk_col4_sql||' , NULL ';
6207 END IF;
6208 IF (l_list_of_dl_for_ag_type(i).PK_COLUMN_NAME5 IS NOT NULL AND l_list_of_dl_for_ag_type(i).PK_COLUMN_NAME5 <> 'NONE'
6209 AND INSTR(l_dynamic_query,l_list_of_dl_for_ag_type(i).PK_COLUMN_NAME5) = 0) THEN
6210 l_dl_pk_col5_sql := l_dl_pk_col5_sql||' , UAI1.' ||l_list_of_dl_for_ag_type(i).PK_COLUMN_NAME5;
6211 l_dynamic_group_by := l_dynamic_group_by ||' , UAI1.' ||l_list_of_dl_for_ag_type(i).PK_COLUMN_NAME5;
6212 l_deflatening_sql_where := l_deflatening_sql_where || ' AND (UAI1.'||l_list_of_dl_for_ag_type(i).PK_COLUMN_NAME5||
6213 ' = '||' EXTVL1.'||l_list_of_dl_for_ag_type(i).PK_COLUMN_NAME5||
6214 ' OR ('||'UAI1.'||l_list_of_dl_for_ag_type(i).PK_COLUMN_NAME5|| ' IS NULL '||
6215 'AND EXTVL1.'||l_list_of_dl_for_ag_type(i).PK_COLUMN_NAME5||' IS NULL))' ;
6216
6217 ELSE
6218 l_dl_pk_col5_sql := l_dl_pk_col5_sql||' , NULL ';
6219 END IF;
6220 END LOOP;
6221 l_dynamic_query := l_dynamic_query||', DECODE(UAI1.DATA_LEVEL_ID '||l_dl_pk_col1_sql||' ) DL_PK1_VAL ';
6222 l_dynamic_query := l_dynamic_query||', DECODE(UAI1.DATA_LEVEL_ID '||l_dl_pk_col2_sql||' ) DL_PK2_VAL ';
6223 l_dynamic_query := l_dynamic_query||', DECODE(UAI1.DATA_LEVEL_ID '||l_dl_pk_col3_sql||' ) DL_PK3_VAL ';
6224 l_dynamic_query := l_dynamic_query||', DECODE(UAI1.DATA_LEVEL_ID '||l_dl_pk_col4_sql||' ) DL_PK4_VAL ';
6225 l_dynamic_query := l_dynamic_query||', DECODE(UAI1.DATA_LEVEL_ID '||l_dl_pk_col5_sql||' ) DL_PK5_VAL ';
6226
6227 ELSE
6228 l_dynamic_query := l_dynamic_query||' ,NULL '; --this is one is to compensate for the data_level_id
6229 IF (l_num_data_level_columns = 0) THEN
6230 l_dynamic_query := l_dynamic_query ||' , NULL ';
6231 l_dynamic_query := l_dynamic_query ||' , NULL ';
6232 l_dynamic_query := l_dynamic_query ||' , NULL ';
6233 l_dynamic_query := l_dynamic_query ||' , NULL ';
6234 l_dynamic_query := l_dynamic_query ||' , NULL ';
6235 ELSIF (l_num_data_level_columns = 1) THEN
6236 l_dynamic_query := l_dynamic_query ||' , UAI1.' ||l_data_level_column_1;
6237 l_dynamic_query := l_dynamic_query ||' , NULL ';
6238 l_dynamic_query := l_dynamic_query ||' , NULL ';
6239 l_dynamic_query := l_dynamic_query ||' , NULL ';
6240 l_dynamic_query := l_dynamic_query ||' , NULL ';
6241 l_dynamic_group_by := l_dynamic_group_by ||' , UAI1.' ||l_data_level_column_1;
6242 l_deflatening_sql_where := l_deflatening_sql_where ||
6243 ' AND (UAI1.'||l_data_level_column_1||' = '||' EXTVL1.'||l_data_level_column_1||
6244 ' OR ('||'UAI1.'||l_data_level_column_1|| ' IS NULL AND EXTVL1.'||l_data_level_column_1||' IS NULL))' ;
6245 ELSIF (l_num_data_level_columns = 2) THEN
6246 l_dynamic_query := l_dynamic_query ||' , UAI1.' ||l_data_level_column_1;
6247 l_dynamic_query := l_dynamic_query ||' , UAI1.' ||l_data_level_column_2;
6248 l_dynamic_query := l_dynamic_query ||' , NULL ';
6249 l_dynamic_query := l_dynamic_query ||' , NULL ';
6250 l_dynamic_query := l_dynamic_query ||' , NULL ';
6251 l_dynamic_group_by := l_dynamic_group_by ||' , UAI1.' ||l_data_level_column_1;
6252 l_dynamic_group_by := l_dynamic_group_by ||' , UAI1.' ||l_data_level_column_2;
6253 l_deflatening_sql_where := l_deflatening_sql_where ||
6254 ' AND (UAI1.'||l_data_level_column_1||' = '||' EXTVL1.'||l_data_level_column_1||
6255 ' OR ('||'UAI1.'||l_data_level_column_1|| ' IS NULL AND EXTVL1.'||l_data_level_column_1||' IS NULL))' ;
6256 l_deflatening_sql_where := l_deflatening_sql_where ||
6257 ' AND (UAI1.'||l_data_level_column_2||' = '||' EXTVL1.'||l_data_level_column_2||
6258 ' OR ('||'UAI1.'||l_data_level_column_2|| ' IS NULL AND EXTVL1.'||l_data_level_column_2||' IS NULL))' ;
6259 ELSIF (l_num_data_level_columns = 3) THEN
6260 l_dynamic_query := l_dynamic_query ||' , UAI1.' ||l_data_level_column_1;
6261 l_dynamic_query := l_dynamic_query ||' , UAI1.' ||l_data_level_column_2;
6262 l_dynamic_query := l_dynamic_query ||' , UAI1.' ||l_data_level_column_3;
6263 l_dynamic_query := l_dynamic_query ||' , NULL ';
6264 l_dynamic_query := l_dynamic_query ||' , NULL ';
6265 l_dynamic_group_by := l_dynamic_group_by ||' , UAI1.' ||l_data_level_column_1;
6266 l_dynamic_group_by := l_dynamic_group_by ||' , UAI1.' ||l_data_level_column_2;
6267 l_dynamic_group_by := l_dynamic_group_by ||' , UAI1.' ||l_data_level_column_3;
6268 l_deflatening_sql_where := l_deflatening_sql_where ||
6269 ' AND (UAI1.'||l_data_level_column_1||' = '||' EXTVL1.'||l_data_level_column_1||
6270 ' OR ('||'UAI1.'||l_data_level_column_1|| ' IS NULL AND EXTVL1.'||l_data_level_column_1||' IS NULL))' ;
6271 l_deflatening_sql_where := l_deflatening_sql_where ||
6272 ' AND (UAI1.'||l_data_level_column_2||' = '||' EXTVL1.'||l_data_level_column_2||
6273 ' OR ('||'UAI1.'||l_data_level_column_2|| ' IS NULL AND EXTVL1.'||l_data_level_column_2||' IS NULL))' ;
6274 l_deflatening_sql_where := l_deflatening_sql_where ||
6275 ' AND (UAI1.'||l_data_level_column_3||' = '||' EXTVL1.'||l_data_level_column_3||
6276 ' OR ('||'UAI1.'||l_data_level_column_3|| ' IS NULL AND EXTVL1.'||l_data_level_column_3||' IS NULL))' ;
6277 END IF;
6278 END IF;
6279 -- Bug 10090254 Code changes : End
6280
6281 l_deflatening_sql_where := l_deflatening_sql_where || ' AND EXTVL1.ATTR_GROUP_ID ='||l_attr_group_metadata_obj.ATTR_GROUP_ID;
6282
6283 l_defaltening_sql := ' ';
6284 l_defaltening_sql_create := ' ';
6285 FOR i IN l_attr_metadata_table.FIRST .. l_attr_metadata_table.LAST
6286 LOOP
6287
6288 l_defaltening_sql := l_defaltening_sql ||
6289 '|| MAX(DECODE(UAI1.ATTR_INT_NAME'||
6290 ','||' '''||l_attr_metadata_table(i).ATTR_NAME||''' '||
6291 ','||'''#*'||l_attr_metadata_table(i).ATTR_NAME||'*#'||
6292 ' NEWVALUE:$['''|| '||' ||'UAI1.ATTR_VALUE_NUM'||'||'||'UAI1.ATTR_VALUE_DATE'||'||'||'UAI1.ATTR_VALUE_STR'||' || '']$OLDVALUE${''||'||'EXTVL1.'||l_attr_metadata_table(i).DATABASE_COLUMN||'||''}$'' '||
6293 ',NULL)) ';
6294 l_defaltening_sql_create := l_defaltening_sql_create ||
6295 '|| MAX(DECODE(UAI1.ATTR_INT_NAME'||
6296 ','||' '''||l_attr_metadata_table(i).ATTR_NAME||''' '||
6297 ','||'''#*'||l_attr_metadata_table(i).ATTR_NAME||'*#'||' NEWVALUE:$['''|| '||' ||'UAI1.ATTR_VALUE_NUM'||'||'||'UAI1.ATTR_VALUE_DATE'||'||'||'UAI1.ATTR_VALUE_STR'||' || '']$'' '||
6298 ',NULL)) ';
6299
6300 END LOOP;
6301
6302 l_dynamic_sql := l_dynamic_sql || l_dynamic_query;
6303 l_dynamic_sql_1 := l_dynamic_sql || ' ,NULL ';
6304 -------------------------------------------------
6305 -- Building the query for post event raising on
6306 -- rows with TT as DELETE
6307 -------------------------------------------------
6308 l_dynamic_sql_delete_post := l_dynamic_sql_delete_post || l_dynamic_query || ' ,NULL';
6309 l_dynamic_sql_delete_post := l_dynamic_sql_delete_post || ' FROM '||p_interface_table_name||' UAI1 ';
6310 l_dynamic_sql_delete_post := l_dynamic_sql_delete_post || ' WHERE UAI1.DATA_SET_ID = :data_set_id '||
6311 ' AND UAI1.PROCESS_STATUS = '||G_PS_IN_PROCESS||
6312 ' AND UAI1.ATTR_GROUP_INT_NAME = :attr_group_int_name '||
6313 ' AND UAI1.TRANSACTION_TYPE = '''||EGO_USER_ATTRS_DATA_PVT.G_DELETE_MODE||'''';
6314 l_dynamic_sql_delete_post := l_dynamic_sql_delete_post || ' GROUP BY UAI1.ATTR_GROUP_INT_NAME, UAI1.TRANSACTION_TYPE, UAI1.ROW_IDENTIFIER ';
6315
6316 l_dynamic_sql_delete_post := l_dynamic_sql_delete_post ||' '|| l_dynamic_group_by;
6317
6318 IF (l_attr_group_metadata_obj.MULTI_ROW_CODE = 'Y') THEN
6319 l_dynamic_sql_1 := l_dynamic_sql_1 ||
6320 ' FROM '||p_interface_table_name||' UAI1,';
6321 l_dynamic_sql_1 := l_dynamic_sql_1 || l_ext_table_select;
6322 ELSE
6323 l_dynamic_sql_1 := l_dynamic_sql_1 ||
6324 ' FROM '||p_interface_table_name||' UAI1, '|| l_ext_vl_name || ' EXTVL1 WHERE';
6325 l_dynamic_sql_1 := l_dynamic_sql_1 || ' 1 = 1 ';
6326 END IF;
6327
6328 l_dynamic_sql_1 := l_dynamic_sql_1 ||' AND UAI1.DATA_SET_ID = :data_set_id '||
6329 ' AND UAI1.PROCESS_STATUS = '||G_PS_IN_PROCESS||
6330 ' AND UAI1.ATTR_GROUP_INT_NAME = :attr_group_int_name '||
6331 ' AND UAI1.TRANSACTION_TYPE <> '''||EGO_USER_ATTRS_DATA_PVT.G_DELETE_MODE||'''';
6332
6333
6334 l_dynamic_sql_1 := l_dynamic_sql_1 || l_deflatening_sql_where;
6335 l_dynamic_sql_1 := l_dynamic_sql_1 || ' ' || l_group_by_pre || l_dynamic_group_by;
6336
6337
6338 END IF;-- IF ((l_new_post_event_name IS NOT NULL AND l_new_post_event_enabled_flag = 'Y') ) THEN
6339
6340 /*End code changes for bug 8485287*/
6341
6342 ----------------------------------------------------------------------------------------------------------
6343 -- HERE WE BUILD THE REQUIRED QUERIES FOR THE CURSORS TO BE EXECUTED TO DEFLATEN THE DATA IN THE INTERFACE
6344 -- TABLE AND RAISE EVENT ONCE PER AG (We build the sql's only if atleast one of pre or post is enabled.)
6345 ----------------------------------------------------------------------------------------------------------
6346 IF ((l_pre_event_name IS NOT NULL AND l_is_pre_event_enabled_flag = 'Y') ) THEN
6347
6348 l_dynamic_sql := ' SELECT EXTVL1.EXTENSION_ID , UAI1.ATTR_GROUP_INT_NAME, UAI1.TRANSACTION_TYPE, UAI1.ROW_IDENTIFIER ';
6349 l_group_by_pre := ' GROUP BY EXTVL1.EXTENSION_ID , UAI1.ATTR_GROUP_INT_NAME, UAI1.TRANSACTION_TYPE, UAI1.ROW_IDENTIFIER ';
6350 --l_dynamic_sql_delete_post := ' SELECT NULL , UAI1.ATTR_GROUP_INT_NAME, UAI1.TRANSACTION_TYPE, UAI1.ROW_IDENTIFIER ';
6351 l_dynamic_group_by := ' ';
6352 l_deflatening_sql_where := ' ';
6353 l_dynamic_query := ' ';
6354
6355 IF (l_pk1_column_name IS NOT NULL) THEN
6356 l_dynamic_query := l_dynamic_query || ' , UAI1.' ||l_pk1_column_name;
6357 l_dynamic_group_by := l_dynamic_group_by || ' , UAI1.' ||l_pk1_column_name;
6358 l_deflatening_sql_where := l_deflatening_sql_where || ' AND UAI1.'||l_pk1_column_name||' = '||' EXTVL1.'||l_pk1_column_name;
6359 ELSE
6360 l_dynamic_query := l_dynamic_query || ' , NULL ';
6361 END IF;
6362 IF (l_pk2_column_name IS NOT NULL) THEN
6363 l_dynamic_query := l_dynamic_query || ' , UAI1.' ||l_pk2_column_name;
6364 l_dynamic_group_by := l_dynamic_group_by || ' , UAI1.' ||l_pk2_column_name;
6365 l_deflatening_sql_where := l_deflatening_sql_where || ' AND UAI1.'||l_pk2_column_name||' = '||' EXTVL1.'||l_pK2_column_name;
6366 ELSE
6367 l_dynamic_query := l_dynamic_query || ' , NULL ';
6368 END IF;
6369 IF (l_pk3_column_name IS NOT NULL) THEN
6370 l_dynamic_query := l_dynamic_query || ' , UAI1.' ||l_pk3_column_name;
6371 l_dynamic_group_by := l_dynamic_group_by || ' , UAI1.' ||l_pk3_column_name;
6372 l_deflatening_sql_where := l_deflatening_sql_where || ' AND UAI1.'||l_pk3_column_name||' = '||' EXTVL1.'||l_pk3_column_name;
6373 ELSE
6374 l_dynamic_query := l_dynamic_query || ' , NULL ';
6375 END IF;
6376 IF (l_pk4_column_name IS NOT NULL) THEN
6377 l_dynamic_query := l_dynamic_query || ' , UAI1.' ||l_pk4_column_name;
6378 l_dynamic_group_by := l_dynamic_group_by || ' , UAI1.' ||l_pk4_column_name;
6379 l_deflatening_sql_where := l_deflatening_sql_where || ' AND UAI1.'||l_pk4_column_name||' = '||' EXTVL1.'||l_pk4_column_name;
6380 ELSE
6381 l_dynamic_query := l_dynamic_query || ' , NULL ';
6382 END IF;
6383 IF (l_pk5_column_name IS NOT NULL) THEN
6384 l_dynamic_query := l_dynamic_query || ' , UAI1.' ||l_pk5_column_name;
6385 l_dynamic_group_by := l_dynamic_group_by || ' , UAI1.' ||l_pk5_column_name;
6386 l_deflatening_sql_where := l_deflatening_sql_where || ' AND UAI1.'||l_pk5_column_name||' = '||' EXTVL1.'||l_pk5_column_name;
6387 ELSE
6388 l_dynamic_query := l_dynamic_query || ' , NULL ';
6389 END IF;
6390
6391 --------------------------------------
6392 -- Adding the data level columns ...
6393 --------------------------------------
6394 IF(l_data_level_col_exists) THEN
6395
6396 l_dynamic_query := l_dynamic_query||' , UAI1.DATA_LEVEL_ID ';
6397 l_dynamic_group_by := l_dynamic_group_by ||' , UAI1.DATA_LEVEL_ID ';
6398 l_deflatening_sql_where := l_deflatening_sql_where || ' AND NVL(UAI1.DATA_LEVEL_ID,-1) = NVL(EXTVL1.DATA_LEVEL_ID,-1) ';
6399
6400 /* Bug 8488861. The following FOR loop will execute multiple times because of outer FOR loop over the Cursor l_dynamic_dist_ag_cursor.
6401 Initializing the varibales (l_dl_pk_col1_sql etc.,) to NULL to avoid adding duplicate values, as these
6402 variables will be used in Decode() function, which accepts only 255 parameters in some Database versions. */
6403 l_dl_pk_col1_sql:=NULL;
6404 l_dl_pk_col2_sql:=NULL;
6405 l_dl_pk_col3_sql:=NULL;
6406 l_dl_pk_col4_sql:=NULL;
6407 l_dl_pk_col5_sql:=NULL;
6408
6409 FOR i IN l_list_of_dl_for_ag_type.FIRST .. l_list_of_dl_for_ag_type.LAST
6410 LOOP
6411 l_dl_pk_col1_sql := l_dl_pk_col1_sql||' , '||l_list_of_dl_for_ag_type(i).DATA_LEVEL_ID||' ';
6412 l_dl_pk_col2_sql := l_dl_pk_col2_sql||' , '||l_list_of_dl_for_ag_type(i).DATA_LEVEL_ID||' ';
6413 l_dl_pk_col3_sql := l_dl_pk_col3_sql||' , '||l_list_of_dl_for_ag_type(i).DATA_LEVEL_ID||' ';
6414 l_dl_pk_col4_sql := l_dl_pk_col4_sql||' , '||l_list_of_dl_for_ag_type(i).DATA_LEVEL_ID||' ';
6415 l_dl_pk_col5_sql := l_dl_pk_col5_sql||' , '||l_list_of_dl_for_ag_type(i).DATA_LEVEL_ID||' ';
6416
6417 IF (l_list_of_dl_for_ag_type(i).PK_COLUMN_NAME1 IS NOT NULL AND l_list_of_dl_for_ag_type(i).PK_COLUMN_NAME1 <> 'NONE'
6418 AND INSTR(l_dynamic_query,l_list_of_dl_for_ag_type(i).PK_COLUMN_NAME1) = 0) THEN
6419
6420 l_dl_pk_col1_sql := l_dl_pk_col1_sql||' , UAI1.' ||l_list_of_dl_for_ag_type(i).PK_COLUMN_NAME1;
6421 l_dynamic_group_by := l_dynamic_group_by ||' , UAI1.' ||l_list_of_dl_for_ag_type(i).PK_COLUMN_NAME1;
6422 l_deflatening_sql_where := l_deflatening_sql_where || ' AND (UAI1.'||l_list_of_dl_for_ag_type(i).PK_COLUMN_NAME1||
6423 ' = '||' EXTVL1.'||l_list_of_dl_for_ag_type(i).PK_COLUMN_NAME1||
6424 ' OR ('||'UAI1.'||l_list_of_dl_for_ag_type(i).PK_COLUMN_NAME1|| ' IS NULL '||
6425 'AND EXTVL1.'||l_list_of_dl_for_ag_type(i).PK_COLUMN_NAME1||' IS NULL))' ;
6426 ELSE
6427 l_dl_pk_col1_sql := l_dl_pk_col1_sql||' , NULL ';
6428 END IF;
6429 IF (l_list_of_dl_for_ag_type(i).PK_COLUMN_NAME2 IS NOT NULL AND l_list_of_dl_for_ag_type(i).PK_COLUMN_NAME2 <> 'NONE'
6430 AND INSTR(l_dynamic_query,l_list_of_dl_for_ag_type(i).PK_COLUMN_NAME2) = 0) THEN
6431 l_dl_pk_col2_sql := l_dl_pk_col2_sql||' , UAI1.' ||l_list_of_dl_for_ag_type(i).PK_COLUMN_NAME2;
6432 l_dynamic_group_by := l_dynamic_group_by ||' , UAI1.' ||l_list_of_dl_for_ag_type(i).PK_COLUMN_NAME2;
6433 l_deflatening_sql_where := l_deflatening_sql_where || ' AND (UAI1.'||l_list_of_dl_for_ag_type(i).PK_COLUMN_NAME2||
6434 ' = '||' EXTVL1.'||l_list_of_dl_for_ag_type(i).PK_COLUMN_NAME2||
6435 ' OR ('||'UAI1.'||l_list_of_dl_for_ag_type(i).PK_COLUMN_NAME2|| ' IS NULL '||
6436 'AND EXTVL1.'||l_list_of_dl_for_ag_type(i).PK_COLUMN_NAME2||' IS NULL))' ;
6437
6438 ELSE
6439 l_dl_pk_col2_sql := l_dl_pk_col2_sql||' , NULL ';
6440 END IF;
6441 IF (l_list_of_dl_for_ag_type(i).PK_COLUMN_NAME3 IS NOT NULL AND l_list_of_dl_for_ag_type(i).PK_COLUMN_NAME3 <> 'NONE'
6442 AND INSTR(l_dynamic_query,l_list_of_dl_for_ag_type(i).PK_COLUMN_NAME3) = 0) THEN
6443 l_dl_pk_col3_sql := l_dl_pk_col3_sql||' , UAI1.' ||l_list_of_dl_for_ag_type(i).PK_COLUMN_NAME3;
6444 l_dynamic_group_by := l_dynamic_group_by ||' , UAI1.' ||l_list_of_dl_for_ag_type(i).PK_COLUMN_NAME3;
6445 l_deflatening_sql_where := l_deflatening_sql_where || ' AND (UAI1.'||l_list_of_dl_for_ag_type(i).PK_COLUMN_NAME3||
6446 ' = '||' EXTVL1.'||l_list_of_dl_for_ag_type(i).PK_COLUMN_NAME3||
6447 ' OR ('||'UAI1.'||l_list_of_dl_for_ag_type(i).PK_COLUMN_NAME3|| ' IS NULL '||
6448 'AND EXTVL1.'||l_list_of_dl_for_ag_type(i).PK_COLUMN_NAME3||' IS NULL))' ;
6449
6450 ELSE
6451 l_dl_pk_col3_sql := l_dl_pk_col3_sql||' , NULL ';
6452 END IF;
6453 IF (l_list_of_dl_for_ag_type(i).PK_COLUMN_NAME4 IS NOT NULL AND l_list_of_dl_for_ag_type(i).PK_COLUMN_NAME4 <> 'NONE'
6454 AND INSTR(l_dynamic_query,l_list_of_dl_for_ag_type(i).PK_COLUMN_NAME4) = 0) THEN
6455 l_dl_pk_col4_sql := l_dl_pk_col4_sql||' , UAI1.' ||l_list_of_dl_for_ag_type(i).PK_COLUMN_NAME4;
6456 l_dynamic_group_by := l_dynamic_group_by ||' , UAI1.' ||l_list_of_dl_for_ag_type(i).PK_COLUMN_NAME4;
6457 l_deflatening_sql_where := l_deflatening_sql_where || ' AND (UAI1.'||l_list_of_dl_for_ag_type(i).PK_COLUMN_NAME4||
6458 ' = '||' EXTVL1.'||l_list_of_dl_for_ag_type(i).PK_COLUMN_NAME4||
6459 ' OR ('||'UAI1.'||l_list_of_dl_for_ag_type(i).PK_COLUMN_NAME4|| ' IS NULL '||
6460 'AND EXTVL1.'||l_list_of_dl_for_ag_type(i).PK_COLUMN_NAME4||' IS NULL))' ;
6461
6462 ELSE
6463 l_dl_pk_col4_sql := l_dl_pk_col4_sql||' , NULL ';
6464 END IF;
6465 IF (l_list_of_dl_for_ag_type(i).PK_COLUMN_NAME5 IS NOT NULL AND l_list_of_dl_for_ag_type(i).PK_COLUMN_NAME5 <> 'NONE'
6466 AND INSTR(l_dynamic_query,l_list_of_dl_for_ag_type(i).PK_COLUMN_NAME5) = 0) THEN
6467 l_dl_pk_col5_sql := l_dl_pk_col5_sql||' , UAI1.' ||l_list_of_dl_for_ag_type(i).PK_COLUMN_NAME5;
6468 l_dynamic_group_by := l_dynamic_group_by ||' , UAI1.' ||l_list_of_dl_for_ag_type(i).PK_COLUMN_NAME5;
6469 l_deflatening_sql_where := l_deflatening_sql_where || ' AND (UAI1.'||l_list_of_dl_for_ag_type(i).PK_COLUMN_NAME5||
6470 ' = '||' EXTVL1.'||l_list_of_dl_for_ag_type(i).PK_COLUMN_NAME5||
6471 ' OR ('||'UAI1.'||l_list_of_dl_for_ag_type(i).PK_COLUMN_NAME5|| ' IS NULL '||
6472 'AND EXTVL1.'||l_list_of_dl_for_ag_type(i).PK_COLUMN_NAME5||' IS NULL))' ;
6473
6474 ELSE
6475 l_dl_pk_col5_sql := l_dl_pk_col5_sql||' , NULL ';
6476 END IF;
6477 END LOOP;
6478 l_dynamic_query := l_dynamic_query||', DECODE(UAI1.DATA_LEVEL_ID '||l_dl_pk_col1_sql||' ) DL_PK1_VAL ';
6479 l_dynamic_query := l_dynamic_query||', DECODE(UAI1.DATA_LEVEL_ID '||l_dl_pk_col2_sql||' ) DL_PK2_VAL ';
6480 l_dynamic_query := l_dynamic_query||', DECODE(UAI1.DATA_LEVEL_ID '||l_dl_pk_col3_sql||' ) DL_PK3_VAL ';
6481 l_dynamic_query := l_dynamic_query||', DECODE(UAI1.DATA_LEVEL_ID '||l_dl_pk_col4_sql||' ) DL_PK4_VAL ';
6482 l_dynamic_query := l_dynamic_query||', DECODE(UAI1.DATA_LEVEL_ID '||l_dl_pk_col5_sql||' ) DL_PK5_VAL ';
6483
6484 ELSE
6485 l_dynamic_query := l_dynamic_query||' ,NULL '; --this is one is to compensate for the data_level_id
6486 IF (l_num_data_level_columns = 0) THEN
6487 l_dynamic_query := l_dynamic_query ||' , NULL ';
6488 l_dynamic_query := l_dynamic_query ||' , NULL ';
6489 l_dynamic_query := l_dynamic_query ||' , NULL ';
6490 l_dynamic_query := l_dynamic_query ||' , NULL ';
6491 l_dynamic_query := l_dynamic_query ||' , NULL ';
6492 ELSIF (l_num_data_level_columns = 1) THEN
6493 l_dynamic_query := l_dynamic_query ||' , UAI1.' ||l_data_level_column_1;
6494 l_dynamic_query := l_dynamic_query ||' , NULL ';
6495 l_dynamic_query := l_dynamic_query ||' , NULL ';
6496 l_dynamic_query := l_dynamic_query ||' , NULL ';
6497 l_dynamic_query := l_dynamic_query ||' , NULL ';
6498 l_dynamic_group_by := l_dynamic_group_by ||' , UAI1.' ||l_data_level_column_1;
6499 l_deflatening_sql_where := l_deflatening_sql_where ||
6500 ' AND (UAI1.'||l_data_level_column_1||' = '||' EXTVL1.'||l_data_level_column_1||
6501 ' OR ('||'UAI1.'||l_data_level_column_1|| ' IS NULL AND EXTVL1.'||l_data_level_column_1||' IS NULL))' ;
6502 ELSIF (l_num_data_level_columns = 2) THEN
6503 l_dynamic_query := l_dynamic_query ||' , UAI1.' ||l_data_level_column_1;
6504 l_dynamic_query := l_dynamic_query ||' , UAI1.' ||l_data_level_column_2;
6505 l_dynamic_query := l_dynamic_query ||' , NULL ';
6506 l_dynamic_query := l_dynamic_query ||' , NULL ';
6507 l_dynamic_query := l_dynamic_query ||' , NULL ';
6508 l_dynamic_group_by := l_dynamic_group_by ||' , UAI1.' ||l_data_level_column_1;
6509 l_dynamic_group_by := l_dynamic_group_by ||' , UAI1.' ||l_data_level_column_2;
6510 l_deflatening_sql_where := l_deflatening_sql_where ||
6511 ' AND (UAI1.'||l_data_level_column_1||' = '||' EXTVL1.'||l_data_level_column_1||
6512 ' OR ('||'UAI1.'||l_data_level_column_1|| ' IS NULL AND EXTVL1.'||l_data_level_column_1||' IS NULL))' ;
6513 l_deflatening_sql_where := l_deflatening_sql_where ||
6514 ' AND (UAI1.'||l_data_level_column_2||' = '||' EXTVL1.'||l_data_level_column_2||
6515 ' OR ('||'UAI1.'||l_data_level_column_2|| ' IS NULL AND EXTVL1.'||l_data_level_column_2||' IS NULL))' ;
6516 ELSIF (l_num_data_level_columns = 3) THEN
6517 l_dynamic_query := l_dynamic_query ||' , UAI1.' ||l_data_level_column_1;
6518 l_dynamic_query := l_dynamic_query ||' , UAI1.' ||l_data_level_column_2;
6519 l_dynamic_query := l_dynamic_query ||' , UAI1.' ||l_data_level_column_3;
6520 l_dynamic_query := l_dynamic_query ||' , NULL ';
6521 l_dynamic_query := l_dynamic_query ||' , NULL ';
6522 l_dynamic_group_by := l_dynamic_group_by ||' , UAI1.' ||l_data_level_column_1;
6523 l_dynamic_group_by := l_dynamic_group_by ||' , UAI1.' ||l_data_level_column_2;
6524 l_dynamic_group_by := l_dynamic_group_by ||' , UAI1.' ||l_data_level_column_3;
6525 l_deflatening_sql_where := l_deflatening_sql_where ||
6526 ' AND (UAI1.'||l_data_level_column_1||' = '||' EXTVL1.'||l_data_level_column_1||
6527 ' OR ('||'UAI1.'||l_data_level_column_1|| ' IS NULL AND EXTVL1.'||l_data_level_column_1||' IS NULL))' ;
6528 l_deflatening_sql_where := l_deflatening_sql_where ||
6529 ' AND (UAI1.'||l_data_level_column_2||' = '||' EXTVL1.'||l_data_level_column_2||
6530 ' OR ('||'UAI1.'||l_data_level_column_2|| ' IS NULL AND EXTVL1.'||l_data_level_column_2||' IS NULL))' ;
6531 l_deflatening_sql_where := l_deflatening_sql_where ||
6532 ' AND (UAI1.'||l_data_level_column_3||' = '||' EXTVL1.'||l_data_level_column_3||
6533 ' OR ('||'UAI1.'||l_data_level_column_3|| ' IS NULL AND EXTVL1.'||l_data_level_column_3||' IS NULL))' ;
6534 END IF;
6535 END IF;
6536
6537 l_deflatening_sql_where := l_deflatening_sql_where || ' AND EXTVL1.ATTR_GROUP_ID ='||l_attr_group_metadata_obj.ATTR_GROUP_ID;
6538
6539 l_defaltening_sql := ' ';
6540 l_defaltening_sql_create := ' ';
6541 FOR i IN l_attr_metadata_table.FIRST .. l_attr_metadata_table.LAST
6542 LOOP
6543 -- abedajna begin
6544 if l_attr_metadata_table(i).DATA_TYPE_CODE = EGO_EXT_FWK_PUB.G_DATE_TIME_DATA_TYPE then
6545 l_correct_date_time_sql_uai := 'to_char(UAI1.ATTR_VALUE_DATE , '||''''||EGO_USER_ATTRS_COMMON_PVT.G_DATE_FORMAT ||''')';
6546 l_correct_date_time_sql_extvl := 'to_char(EXTVL1.'||l_attr_metadata_table(i).DATABASE_COLUMN||', '''||EGO_USER_ATTRS_COMMON_PVT.G_DATE_FORMAT ||''')';
6547 else
6548 l_correct_date_time_sql_uai := 'UAI1.ATTR_VALUE_DATE';
6549 l_correct_date_time_sql_extvl := 'EXTVL1.'||l_attr_metadata_table(i).DATABASE_COLUMN;
6550 end if;
6551 -- abedajna end
6552
6553 l_defaltening_sql := l_defaltening_sql ||
6554 '|| MAX(DECODE(UAI1.ATTR_INT_NAME'||
6555 ','||' '''||l_attr_metadata_table(i).ATTR_NAME||''' '||
6556 ','||'''#*'||l_attr_metadata_table(i).ATTR_NAME||'*#'||
6557 -- abedajna delete ' NEWVALUE:$['''|| '||' ||'UAI1.ATTR_VALUE_NUM'||'||'||'UAI1.ATTR_VALUE_DATE'||'||'||'UAI1.ATTR_VALUE_STR'||' || '']$OLDVALUE${''||'||'EXTVL1.'||l_attr_metadata_table(i).DATABASE_COLUMN||'||''}$'' '||
6558 -- abedajna add
6559 ' NEWVALUE:$['''|| '||' ||'UAI1.ATTR_VALUE_NUM'||'||'||l_correct_date_time_sql_uai||'||'||'UAI1.ATTR_VALUE_STR'||
6560 ' ||'']$OLDVALUE${''||'||l_correct_date_time_sql_extvl||'||''}$'' '|| ',NULL)) ';
6561
6562 l_defaltening_sql_create := l_defaltening_sql_create ||
6563 '|| MAX(DECODE(UAI1.ATTR_INT_NAME'||
6564 ','||' '''||l_attr_metadata_table(i).ATTR_NAME||''' '||
6565 -- abedajna delete ','||'''#*'||l_attr_metadata_table(i).ATTR_NAME||'*#'||' NEWVALUE:$['''|| '||' ||'UAI1.ATTR_VALUE_NUM'||'||'||'UAI1.ATTR_VALUE_DATE'||'||'||'UAI1.ATTR_VALUE_STR'||' || '']$'' '||
6566 -- abedajna add
6567 ','||'''#*'||l_attr_metadata_table(i).ATTR_NAME||'*#'||' NEWVALUE:$['''|| '||' ||'UAI1.ATTR_VALUE_NUM'||'||'||l_correct_date_time_sql_uai||'||'||'UAI1.ATTR_VALUE_STR'||' || '']$'' '||
6568 ',NULL)) ';
6569
6570 END LOOP;
6571
6572 l_dynamic_sql := l_dynamic_sql || l_dynamic_query;
6573 --l_dynamic_sql_1 := l_dynamic_sql || ' ,NULL ';
6574 l_dynamic_sql := l_dynamic_sql || ' , ' ||' '' '' ' || l_defaltening_sql;
6575 /*
6576 -------------------------------------------------
6577 -- Building the query for post event raising on
6578 -- rows with TT as DELETE
6579 -------------------------------------------------
6580 l_dynamic_sql_delete_post := l_dynamic_sql_delete_post || l_dynamic_query || ' ,NULL';
6581 l_dynamic_sql_delete_post := l_dynamic_sql_delete_post || ' FROM '||p_interface_table_name||' UAI1 ';
6582 l_dynamic_sql_delete_post := l_dynamic_sql_delete_post || ' WHERE UAI1.DATA_SET_ID = :data_set_id '||
6583 ' AND UAI1.PROCESS_STATUS = '||G_PS_IN_PROCESS||
6584 ' AND UAI1.ATTR_GROUP_INT_NAME = :attr_group_int_name '||
6585 ' AND UAI1.TRANSACTION_TYPE = '''||EGO_USER_ATTRS_DATA_PVT.G_DELETE_MODE||'''';
6586 l_dynamic_sql_delete_post := l_dynamic_sql_delete_post || ' GROUP BY UAI1.ATTR_GROUP_INT_NAME, UAI1.TRANSACTION_TYPE, UAI1.ROW_IDENTIFIER ';
6587
6588 l_dynamic_sql_delete_post := l_dynamic_sql_delete_post ||' '|| l_dynamic_group_by;
6589 */
6590 IF (l_attr_group_metadata_obj.MULTI_ROW_CODE = 'Y') THEN
6591 l_dynamic_sql := l_dynamic_sql ||
6592 ' FROM '||p_interface_table_name||' UAI1,';
6593 l_dynamic_sql := l_dynamic_sql || l_ext_table_select;
6594 --l_dynamic_sql_1 := l_dynamic_sql_1 ||
6595 -- ' FROM '||p_interface_table_name||' UAI1,';
6596 --l_dynamic_sql_1 := l_dynamic_sql_1 || l_ext_table_select;
6597 ELSE
6598 l_dynamic_sql := l_dynamic_sql ||
6599 ' FROM '||p_interface_table_name||' UAI1, '|| l_ext_vl_name || ' EXTVL1 WHERE';
6600 l_dynamic_sql := l_dynamic_sql || ' 1 = 1 ';
6601 --l_dynamic_sql_1 := l_dynamic_sql_1 ||
6602 -- ' FROM '||p_interface_table_name||' UAI1, '|| l_ext_vl_name || ' EXTVL1 WHERE';
6603 --l_dynamic_sql_1 := l_dynamic_sql_1 || ' 1 = 1 ';
6604 END IF;
6605
6606 --- Added Code ' AND UAI1.PROCESS_STATUS <> '||G_PS_SUCCESS|| for bug 7460377
6607 l_dynamic_sql := l_dynamic_sql ||' AND UAI1.DATA_SET_ID = :data_set_id '||
6608 ' AND UAI1.PROCESS_STATUS <> '||G_PS_GENERIC_ERROR||
6609 ' AND UAI1.PROCESS_STATUS <> '||G_PS_SUCCESS||
6610 ' AND UAI1.ATTR_GROUP_INT_NAME = :attr_group_int_name '||
6611 ' AND UAI1.TRANSACTION_TYPE <> '''||EGO_USER_ATTRS_DATA_PVT.G_CREATE_MODE||'''';
6612 --l_dynamic_sql_1 := l_dynamic_sql_1 ||' AND UAI1.DATA_SET_ID = :data_set_id '||
6613 -- ' AND UAI1.PROCESS_STATUS = '||G_PS_IN_PROCESS||
6614 -- ' AND UAI1.ATTR_GROUP_INT_NAME = :attr_group_int_name '||
6615 -- ' AND UAI1.TRANSACTION_TYPE <> '''||EGO_USER_ATTRS_DATA_PVT.G_DELETE_MODE||'''';
6616
6617 l_dynamic_sql := l_dynamic_sql || l_deflatening_sql_where;
6618 l_dynamic_sql := l_dynamic_sql || ' ' || l_group_by_pre || l_dynamic_group_by;
6619
6620 --l_dynamic_sql_1 := l_dynamic_sql_1 || l_deflatening_sql_where;
6621 --l_dynamic_sql_1 := l_dynamic_sql_1 || ' ' || l_group_by_pre || l_dynamic_group_by;
6622
6623 -- WE GENERATE THE DML FOR ERRORING OUT THE AG'S FOR WHICH PRE-EVENT RAISING HAS FAILED.
6624
6625 IF (l_attr_group_metadata_obj.MULTI_ROW_CODE = 'Y') THEN
6626 l_pre_event_failed_sql :=
6627 'UPDATE '||p_interface_table_name||' UAI1
6628 SET PROCESS_STATUS = PROCESS_STATUS + '||G_PS_PRE_EVENT_FAILED||'
6629 WHERE DATA_SET_ID = :data_set_id
6630 AND ATTR_GROUP_INT_NAME = :attr_group_int_name
6631 AND ROW_IDENTIFIER = :row_identifier';
6632 ELSE
6633 l_pre_event_failed_sql :=
6634 'UPDATE '||p_interface_table_name||' UAI1
6635 SET PROCESS_STATUS = PROCESS_STATUS + '||G_PS_PRE_EVENT_FAILED||'
6636 WHERE DATA_SET_ID = :data_set_id
6637 AND ATTR_GROUP_INT_NAME = :attr_group_int_name
6638 AND ROWNUM = 1';
6639 END IF;
6640
6641 IF(l_pk1_column_name IS NOT NULL ) THEN
6642 l_pre_event_failed_sql := l_pre_event_failed_sql || ' AND '||l_pk1_column_name||' = :pk1_value ' ;
6643 END IF;
6644 IF(l_pk2_column_name IS NOT NULL ) THEN
6645 l_pre_event_failed_sql := l_pre_event_failed_sql || ' AND '||l_pk2_column_name||' = :pk2_value ';
6646 END IF;
6647 IF(l_pk3_column_name IS NOT NULL ) THEN
6648 l_pre_event_failed_sql := l_pre_event_failed_sql || ' AND '||l_pk3_column_name||' = :pk3_value ' ;
6649 END IF;
6650 IF(l_pk4_column_name IS NOT NULL ) THEN
6651 l_pre_event_failed_sql := l_pre_event_failed_sql || ' AND '||l_pk4_column_name||' = :pk4_value ' ;
6652 END IF;
6653 IF(l_pk5_column_name IS NOT NULL ) THEN
6654 l_pre_event_failed_sql := l_pre_event_failed_sql || ' AND '||l_pk5_column_name||' = :pk5_value ' ;
6655 END IF;
6656
6657 IF(l_data_level_col_exists) THEN
6658
6659 l_pre_event_failed_sql := l_pre_event_failed_sql || ' AND ';
6660
6661 FOR i IN l_list_of_dl_for_ag_type.FIRST .. l_list_of_dl_for_ag_type.LAST
6662 LOOP
6663
6664 IF(i=1) THEN
6665 l_pre_event_failed_sql := l_pre_event_failed_sql || ' (DATA_LEVEL_ID = :dl_id ' ;
6666 ELSE
6667 l_pre_event_failed_sql := l_pre_event_failed_sql || ' OR (DATA_LEVEL_ID = :dl_id ' ;
6668 END IF;
6669
6670 IF (l_list_of_dl_for_ag_type(i).PK_COLUMN_NAME1 IS NOT NULL AND l_list_of_dl_for_ag_type(i).PK_COLUMN_NAME1 <> 'NONE' ) THEN
6671 l_pre_event_failed_sql := l_pre_event_failed_sql || ' AND '||l_list_of_dl_for_ag_type(i).PK_COLUMN_NAME1||' = :dl_pk1_val ' ;
6672 ELSE
6673 l_pre_event_failed_sql := l_pre_event_failed_sql || ' AND :dl_pk1_val IS NULL ' ;
6674 END IF;
6675
6676 IF (l_list_of_dl_for_ag_type(i).PK_COLUMN_NAME2 IS NOT NULL AND l_list_of_dl_for_ag_type(i).PK_COLUMN_NAME2 <> 'NONE' ) THEN
6677 l_pre_event_failed_sql := l_pre_event_failed_sql || ' AND '||l_list_of_dl_for_ag_type(i).PK_COLUMN_NAME2||' = :dl_pk2_val ' ;
6678 ELSE
6679 l_pre_event_failed_sql := l_pre_event_failed_sql || ' AND :dl_pk2_val IS NULL ' ;
6680 END IF;
6681 IF (l_list_of_dl_for_ag_type(i).PK_COLUMN_NAME3 IS NOT NULL AND l_list_of_dl_for_ag_type(i).PK_COLUMN_NAME3 <> 'NONE' ) THEN
6682 l_pre_event_failed_sql := l_pre_event_failed_sql || ' AND '||l_list_of_dl_for_ag_type(i).PK_COLUMN_NAME3||' = :dl_pk3_val ' ;
6683 ELSE
6684 l_pre_event_failed_sql := l_pre_event_failed_sql || ' AND :dl_pk3_val IS NULL ' ;
6685 END IF;
6686 IF (l_list_of_dl_for_ag_type(i).PK_COLUMN_NAME4 IS NOT NULL AND l_list_of_dl_for_ag_type(i).PK_COLUMN_NAME4 <> 'NONE' ) THEN
6687 l_pre_event_failed_sql := l_pre_event_failed_sql || ' AND '||l_list_of_dl_for_ag_type(i).PK_COLUMN_NAME4||' = :dl_pk4_val ' ;
6688 ELSE
6689 l_pre_event_failed_sql := l_pre_event_failed_sql || ' AND :dl_pk4_val IS NULL ' ;
6690 END IF;
6691 IF (l_list_of_dl_for_ag_type(i).PK_COLUMN_NAME5 IS NOT NULL AND l_list_of_dl_for_ag_type(i).PK_COLUMN_NAME5 <> 'NONE' ) THEN
6692 l_pre_event_failed_sql := l_pre_event_failed_sql || ' AND '||l_list_of_dl_for_ag_type(i).PK_COLUMN_NAME5||' = :dl_pk5_val ' ;
6693 ELSE
6694 l_pre_event_failed_sql := l_pre_event_failed_sql || ' AND :dl_pk5_val IS NULL ' ;
6695 END IF;
6696 ---
6697 -- Bug 16163078 , added below clause for
6698 -- correctly placing the braces in the constructed SQL
6699 -- otherwise the SQL errors out
6700 ---
6701 IF ( i <> 1) THEN
6702 l_pre_event_failed_sql := l_pre_event_failed_sql || ' ) ';
6703 END IF;
6704 END LOOP;
6705
6706 l_pre_event_failed_sql := l_pre_event_failed_sql || ' ) ';
6707
6708 ELSE
6709 IF(l_data_level_column_1 IS NOT NULL ) THEN
6710 l_pre_event_failed_sql := l_pre_event_failed_sql || ' AND ( ('||l_data_level_column_1||' = :dl1_value) OR ('||l_data_level_column_1||' IS NULL AND :dl1_value IS NULL)) ' ;
6711 END IF;
6712 IF(l_data_level_column_2 IS NOT NULL ) THEN
6713 l_pre_event_failed_sql := l_pre_event_failed_sql || ' AND ( ('||l_data_level_column_2||' = :dl2_value) OR ('||l_data_level_column_2||' IS NULL AND :dl2_value IS NULL)) ' ;
6714 END IF;
6715 IF(l_data_level_column_3 IS NOT NULL ) THEN
6716 l_pre_event_failed_sql := l_pre_event_failed_sql || ' AND ( ('||l_data_level_column_3||' = :dl3_value) OR ('||l_data_level_column_3||' IS NULL AND :dl3_value IS NULL)) ' ;
6717 END IF;
6718 END IF;
6719
6720 END IF;-- ending if for checking weather or not raise pre/post events
6721
6722 -----------------------------------------------------------------------
6723 -- WE ARE DONE WITH BUILDING TEH QUERIES ... NOW WE RAISE EVENTS ...
6724 -- RAISING EVENT FOR ALL THE AG ROWS WHICH ARE *NOT* BEING CREATED
6725 -----------------------------------------------------------------------
6726
6727 IF (l_pre_event_name IS NOT NULL AND l_is_pre_event_enabled_flag = 'Y') THEN
6728 --------------------------------------------------------------
6729 -- Here we raise events only for AG Rows not in CREATE Mode
6730 --------------------------------------------------------------
6731
6732 OPEN l_dynamic_cursor FOR l_dynamic_sql
6733 USING p_data_set_id, l_attr_group_metadata_obj.ATTR_GROUP_NAME;
6734 LOOP
6735 FETCH l_dynamic_cursor INTO l_ag_deflatened_row;
6736 EXIT WHEN l_dynamic_cursor%NOTFOUND;
6737 -- Loop through the deflatened string containing the old and new values and
6738 -- prepare the table to be passed in as a parameter to pre-event
6739 l_attr_name_val_str := l_ag_deflatened_row.ATTR_NAME_VALUES;
6740 attr_name_val_pair := EGO_ATTR_TABLE();
6741 WHILE (INSTR(l_attr_name_val_str,'#') <> 0 AND l_ag_deflatened_row.TRANSACTION_TYPE <> EGO_USER_ATTRS_DATA_PVT.G_DELETE_MODE)
6742 LOOP
6743 l_attr_name := SUBSTR(l_attr_name_val_str
6744 ,INSTR(l_attr_name_val_str,'#*')+2
6745 ,INSTR(l_attr_name_val_str,'*#')-INSTR(l_attr_name_val_str,'#*')-2
6746 );
6747 l_old_value := SUBSTR(l_attr_name_val_str
6748 ,INSTR(l_attr_name_val_str,'${')+2
6749 ,INSTR(l_attr_name_val_str,'}$')-INSTR(l_attr_name_val_str,'${')-2
6750 );
6751 l_new_value := SUBSTR(l_attr_name_val_str
6752 ,INSTR(l_attr_name_val_str,'$[')+2
6753 ,INSTR(l_attr_name_val_str,']$')-INSTR(l_attr_name_val_str,'$[')-2
6754 );
6755
6756 l_attr_name_val_str := SUBSTR(l_attr_name_val_str
6757 ,INSTR(l_attr_name_val_str,'}$')+2
6758 ,LENGTH(l_attr_name_val_str)-INSTR(l_attr_name_val_str,'}$')+2
6759 );
6760 IF (l_old_value = l_new_value OR (l_old_value IS NULL AND l_new_value IS NULL) ) THEN
6761 NULL;
6762 ELSE
6763 attr_name_val_pair.EXTEND();
6764 attr_name_val_pair(attr_name_val_pair.LAST) := EGO_ATTR_REC(l_attr_name, l_new_value);
6765 END IF;
6766 END LOOP; -- while for extracting name value pairs ends here
6767
6768 -------------------------------------------------
6769 -- NOW WE HAVE ALL THE DATA TO RAISE THE EVENT --
6770 -- HERE WE RAISE PRE-EVENTS FOR AG ROWS BEING
6771 -- UPDATED OR DELETED.
6772 -------------------------------------------------
6773 BEGIN
6774 IF(l_data_level_col_exists) THEN
6775 FOR i IN l_list_of_dl_for_ag_type.FIRST .. l_list_of_dl_for_ag_type.LAST
6776 LOOP
6777 IF(l_ag_deflatened_row.DATA_LEVEL_ID = l_list_of_dl_for_ag_type(i).DATA_LEVEL_ID) THEN
6778 l_dl_pk1_col_name := l_list_of_dl_for_ag_type(i).PK_COLUMN_NAME1;
6779 l_dl_pk2_col_name := l_list_of_dl_for_ag_type(i).PK_COLUMN_NAME2;
6780 l_dl_pk3_col_name := l_list_of_dl_for_ag_type(i).PK_COLUMN_NAME3;
6781 l_dl_pk4_col_name := l_list_of_dl_for_ag_type(i).PK_COLUMN_NAME4;
6782 l_dl_pk5_col_name := l_list_of_dl_for_ag_type(i).PK_COLUMN_NAME5;
6783 END IF;
6784 END LOOP;
6785 ELSE
6786 l_dl_pk1_col_name := l_data_level_column_1;
6787 l_dl_pk2_col_name := l_data_level_column_2;
6788 l_dl_pk3_col_name := l_data_level_column_3;
6789 l_dl_pk4_col_name := null;
6790 l_dl_pk5_col_name := null;
6791 END IF;
6792
6793 l_event_key := SUBSTRB(l_pre_event_name, 1, 225) || '-' || TO_CHAR(SYSDATE, 'J.SSSSS');
6794
6795 EGO_WF_WRAPPER_PVT.Raise_WF_Business_Event(
6796 p_event_name => l_pre_event_name
6797 ,p_event_key => l_event_key
6798 ,p_pre_event_flag => 'T'
6799 ,p_dml_type => l_ag_deflatened_row.TRANSACTION_TYPE
6800 ,p_attr_group_name => l_ag_deflatened_row.ATTR_GROUP_INT_NAME
6801 ,p_extension_id => l_ag_deflatened_row.EXTENSION_ID
6802 ,p_primary_key_1_col_name => l_pk1_column_name
6803 ,p_primary_key_1_value => l_ag_deflatened_row.PK1
6804 ,p_primary_key_2_col_name => l_pk2_column_name
6805 ,p_primary_key_2_value => l_ag_deflatened_row.PK2
6806 ,p_primary_key_3_col_name => l_pk3_column_name
6807 ,p_primary_key_3_value => l_ag_deflatened_row.PK3
6808 ,p_primary_key_4_col_name => l_pk4_column_name
6809 ,p_primary_key_4_value => l_ag_deflatened_row.PK4
6810 ,p_primary_key_5_col_name => l_pk5_column_name
6811 ,p_primary_key_5_value => l_ag_deflatened_row.PK5
6812 ,p_data_level_id => l_ag_deflatened_row.DATA_LEVEL_ID
6813 ,p_data_level_1_col_name => l_dl_pk1_col_name
6814 ,p_data_level_1_value => l_ag_deflatened_row.DL1
6815 ,p_data_level_2_col_name => l_dl_pk2_col_name
6816 ,p_data_level_2_value => l_ag_deflatened_row.DL2
6817 ,p_data_level_3_col_name => l_dl_pk3_col_name
6818 ,p_data_level_3_value => l_ag_deflatened_row.DL3
6819 ,p_data_level_4_col_name => l_dl_pk4_col_name
6820 ,p_data_level_4_value => l_ag_deflatened_row.DL4
6821 ,p_data_level_5_col_name => l_dl_pk5_col_name
6822 ,p_data_level_5_value => l_ag_deflatened_row.DL5
6823 ,p_user_row_identifier => l_ag_deflatened_row.ROW_IDENTIFIER
6824 ,p_attr_name_val_tbl => attr_name_val_pair
6825 ,p_entity_id => p_entity_id
6826 ,p_entity_index => p_entity_index
6827 ,p_entity_code => p_entity_code
6828 ,p_add_errors_to_fnd_stack => G_ADD_ERRORS_TO_FND_STACK
6829 );
6830 EXCEPTION
6831 WHEN EGO_USER_ATTRS_COMMON_PVT.G_SUBSCRIPTION_EXC THEN
6832 IF (l_pre_event_failed_cursor_id IS NULL) THEN
6833 l_pre_event_failed_cursor_id := DBMS_SQL.Open_Cursor;
6834 END IF;
6835
6836
6837 DBMS_SQL.Parse(l_pre_event_failed_cursor_id, l_pre_event_failed_sql, DBMS_SQL.NATIVE);
6838
6839 DBMS_SQL.Bind_Variable(l_pre_event_failed_cursor_id, ':data_set_id', p_data_set_id);
6840 DBMS_SQL.Bind_Variable(l_pre_event_failed_cursor_id, ':attr_group_int_name', l_ag_deflatened_row.ATTR_GROUP_INT_NAME);
6841 IF (l_attr_group_metadata_obj.MULTI_ROW_CODE = 'Y') THEN
6842 DBMS_SQL.Bind_Variable(l_pre_event_failed_cursor_id,':row_identifier',l_ag_deflatened_row.ROW_IDENTIFIER) ;
6843 END IF;
6844
6845 IF(l_pk1_column_name IS NOT NULL ) THEN
6846 DBMS_SQL.Bind_Variable(l_pre_event_failed_cursor_id,':pk1_value',l_ag_deflatened_row.PK1) ;
6847 END IF;
6848 IF(l_pk2_column_name IS NOT NULL ) THEN
6849 DBMS_SQL.Bind_Variable(l_pre_event_failed_cursor_id,':pk2_value',l_ag_deflatened_row.PK2) ;
6850 END IF;
6851 IF(l_pk3_column_name IS NOT NULL ) THEN
6852 DBMS_SQL.Bind_Variable(l_pre_event_failed_cursor_id,':pk3_value',l_ag_deflatened_row.PK3) ;
6853 END IF;
6854 IF(l_pk4_column_name IS NOT NULL ) THEN
6855 DBMS_SQL.Bind_Variable(l_pre_event_failed_cursor_id,':pk4_value',l_ag_deflatened_row.PK4) ;
6856 END IF;
6857 IF(l_pk5_column_name IS NOT NULL ) THEN
6858 DBMS_SQL.Bind_Variable(l_pre_event_failed_cursor_id,':pk5_value',l_ag_deflatened_row.PK5) ;
6859 END IF;
6860
6861 IF(l_data_level_col_exists) THEN
6862 DBMS_SQL.Bind_Variable(l_pre_event_failed_cursor_id,':dl_id',l_ag_deflatened_row.DATA_LEVEL_ID) ;
6863 DBMS_SQL.Bind_Variable(l_pre_event_failed_cursor_id,':dl_pk1_val',l_ag_deflatened_row.DL1) ;
6864 DBMS_SQL.Bind_Variable(l_pre_event_failed_cursor_id,':dl_pk2_val',l_ag_deflatened_row.DL2) ;
6865 DBMS_SQL.Bind_Variable(l_pre_event_failed_cursor_id,':dl_pk3_val',l_ag_deflatened_row.DL3) ;
6866 DBMS_SQL.Bind_Variable(l_pre_event_failed_cursor_id,':dl_pk4_val',l_ag_deflatened_row.DL4) ;
6867 DBMS_SQL.Bind_Variable(l_pre_event_failed_cursor_id,':dl_pk5_val',l_ag_deflatened_row.DL5) ;
6868 ELSE
6869 IF(l_data_level_column_1 IS NOT NULL ) THEN
6870 DBMS_SQL.Bind_Variable(l_pre_event_failed_cursor_id,':dl1_value',l_ag_deflatened_row.DL1) ;
6871 END IF;
6872 IF(l_data_level_column_2 IS NOT NULL ) THEN
6873 DBMS_SQL.Bind_Variable(l_pre_event_failed_cursor_id,':dl2_value',l_ag_deflatened_row.DL2) ;
6874 END IF;
6875 IF(l_data_level_column_3 IS NOT NULL ) THEN
6876 DBMS_SQL.Bind_Variable(l_pre_event_failed_cursor_id,':dl3_value',l_ag_deflatened_row.DL3) ;
6877 END IF;
6878 END IF;
6879
6880 l_dummy := DBMS_SQL.Execute(l_pre_event_failed_cursor_id);
6881 DBMS_SQL.Close_Cursor (l_pre_event_failed_cursor_id);
6882
6883 END;
6884 END LOOP;--iteration in l_dynamic_cursor ends
6885
6886 CLOSE l_dynamic_cursor;
6887 ----------------------------------------------------------------------------------------
6888 -- WE NEED TO BUILD THE SQL FOR THE CURSOR FOR RAISING EVENTS FOR AG ROWS BEING CREATED
6889 -- SINCE FOR THE ROWS BEING CREATED THE SQL CHANGES AS WE DO NOT HAVE TO GO TO THE EXT
6890 -- TABLE TO GET THE EXTENSION ID.
6891 ----------------------------------------------------------------------------------------
6892
6893 --- Added Code ' AND UAI1.PROCESS_STATUS <> '||G_PS_SUCCESS|| for bug 7460377
6894 l_dynamic_sql := ' SELECT NULL , UAI1.ATTR_GROUP_INT_NAME, UAI1.TRANSACTION_TYPE, UAI1.ROW_IDENTIFIER ';
6895 l_dynamic_sql := l_dynamic_sql || l_dynamic_query;
6896 l_dynamic_sql := l_dynamic_sql || ' , ' ||' '' '' ' || l_defaltening_sql_create;
6897 l_dynamic_sql := l_dynamic_sql || ' FROM '||p_interface_table_name||' UAI1 ';
6898 l_dynamic_sql := l_dynamic_sql || ' WHERE UAI1.DATA_SET_ID = :data_set_id '||
6899 ' AND UAI1.PROCESS_STATUS <> '||G_PS_GENERIC_ERROR||
6900 ' AND UAI1.PROCESS_STATUS <> '||G_PS_SUCCESS||
6901 ' AND UAI1.ATTR_GROUP_INT_NAME = :attr_group_int_name '||
6902 ' AND UAI1.TRANSACTION_TYPE = '''||EGO_USER_ATTRS_DATA_PVT.G_CREATE_MODE||'''';
6903 l_dynamic_sql := l_dynamic_sql || ' GROUP BY UAI1.ATTR_GROUP_INT_NAME, UAI1.TRANSACTION_TYPE, UAI1.ROW_IDENTIFIER '
6904 || l_dynamic_group_by;
6905
6906 -------------------------------------------------------------------
6907 -- RAISING EVENT FOR ALL THE AG ROWS WHICH ARE *BEING* CREATED
6908 -------------------------------------------------------------------
6909 code_debug('before raising event for create rows ...');
6910 code_debug(l_dynamic_sql);
6911 OPEN l_dynamic_cursor FOR l_dynamic_sql
6912 USING p_data_set_id, l_attr_group_metadata_obj.ATTR_GROUP_NAME;
6913 LOOP
6914 FETCH l_dynamic_cursor INTO l_ag_deflatened_row;
6915 EXIT WHEN l_dynamic_cursor%NOTFOUND;
6916 -- Loop through the deflatened string containing the old values and
6917 -- prepare the table to be passed in as a parameter to pre-event
6918 l_attr_name_val_str := l_ag_deflatened_row.ATTR_NAME_VALUES;
6919 attr_name_val_pair := EGO_ATTR_TABLE();
6920 WHILE (INSTR(l_attr_name_val_str,'#*') <> 0)
6921 LOOP
6922 l_attr_name := SUBSTR(l_attr_name_val_str
6923 ,INSTR(l_attr_name_val_str,'#*')+2
6924 ,INSTR(l_attr_name_val_str,'*#')-INSTR(l_attr_name_val_str,'#*')-2
6925 );
6926 l_new_value := SUBSTR(l_attr_name_val_str
6927 ,INSTR(l_attr_name_val_str,'$[')+2
6928 ,INSTR(l_attr_name_val_str,']$')-INSTR(l_attr_name_val_str,'$[')-2
6929 );
6930
6931 l_attr_name_val_str := SUBSTR(l_attr_name_val_str
6932 ,INSTR(l_attr_name_val_str,']$')+2
6933 ,LENGTH(l_attr_name_val_str)-INSTR(l_attr_name_val_str,'}$')+2
6934 );
6935 attr_name_val_pair.EXTEND();
6936 attr_name_val_pair(attr_name_val_pair.LAST) := EGO_ATTR_REC(l_attr_name, l_new_value);
6937 END LOOP; -- while for extracting name value pairs ends here
6938 -- We need to pass null as a value for all those attrs which are not
6939 -- entered by the user.
6940 FOR i IN l_attr_metadata_table.FIRST .. l_attr_metadata_table.LAST
6941 LOOP
6942 IF(INSTR(l_ag_deflatened_row.ATTR_NAME_VALUES,l_attr_metadata_table(i).ATTR_NAME) = 0) THEN
6943 attr_name_val_pair.EXTEND();
6944 attr_name_val_pair(attr_name_val_pair.LAST) := EGO_ATTR_REC(l_attr_metadata_table(i).ATTR_NAME, NULL);
6945 END IF;
6946 END LOOP;
6947
6948 ----------------------------------------------------------------------
6949 -- NOW WE HAVE ALL THE DATA TO RAISE THE EVENT (Lets do it now ...) --
6950 ----------------------------------------------------------------------
6951 BEGIN
6952
6953 IF(l_data_level_col_exists) THEN
6954 FOR i IN l_list_of_dl_for_ag_type.FIRST .. l_list_of_dl_for_ag_type.LAST
6955 LOOP
6956 IF(l_ag_deflatened_row.DATA_LEVEL_ID = l_list_of_dl_for_ag_type(i).DATA_LEVEL_ID) THEN
6957 l_dl_pk1_col_name := l_list_of_dl_for_ag_type(i).PK_COLUMN_NAME1;
6958 l_dl_pk2_col_name := l_list_of_dl_for_ag_type(i).PK_COLUMN_NAME2;
6959 l_dl_pk3_col_name := l_list_of_dl_for_ag_type(i).PK_COLUMN_NAME3;
6960 l_dl_pk4_col_name := l_list_of_dl_for_ag_type(i).PK_COLUMN_NAME4;
6961 l_dl_pk5_col_name := l_list_of_dl_for_ag_type(i).PK_COLUMN_NAME5;
6962 END IF;
6963 END LOOP;
6964 ELSE
6965 l_dl_pk1_col_name := l_data_level_column_1;
6966 l_dl_pk2_col_name := l_data_level_column_2;
6967 l_dl_pk3_col_name := l_data_level_column_3;
6968 l_dl_pk4_col_name := null;
6969 l_dl_pk5_col_name := null;
6970 END IF;
6971 l_event_key := SUBSTRB(l_pre_event_name, 1, 225) || '-' || TO_CHAR(SYSDATE, 'J.SSSSS');
6972
6973 EGO_WF_WRAPPER_PVT.Raise_WF_Business_Event(
6974 p_event_name => l_pre_event_name
6975 ,p_event_key => l_event_key
6976 ,p_pre_event_flag => 'T'
6977 ,p_dml_type => l_ag_deflatened_row.TRANSACTION_TYPE
6978 ,p_attr_group_name => l_ag_deflatened_row.ATTR_GROUP_INT_NAME
6979 ,p_extension_id => l_ag_deflatened_row.EXTENSION_ID
6980 ,p_primary_key_1_col_name => l_pk1_column_name
6981 ,p_primary_key_1_value => l_ag_deflatened_row.PK1
6982 ,p_primary_key_2_col_name => l_pk2_column_name
6983 ,p_primary_key_2_value => l_ag_deflatened_row.PK2
6984 ,p_primary_key_3_col_name => l_pk3_column_name
6985 ,p_primary_key_3_value => l_ag_deflatened_row.PK3
6986 ,p_primary_key_4_col_name => l_pk4_column_name
6987 ,p_primary_key_4_value => l_ag_deflatened_row.PK4
6988 ,p_primary_key_5_col_name => l_pk5_column_name
6989 ,p_primary_key_5_value => l_ag_deflatened_row.PK5
6990 ,p_data_level_id => l_ag_deflatened_row.DATA_LEVEL_ID
6991 ,p_data_level_1_col_name => l_dl_pk1_col_name
6992 ,p_data_level_1_value => l_ag_deflatened_row.DL1
6993 ,p_data_level_2_col_name => l_dl_pk2_col_name
6994 ,p_data_level_2_value => l_ag_deflatened_row.DL2
6995 ,p_data_level_3_col_name => l_dl_pk3_col_name
6996 ,p_data_level_3_value => l_ag_deflatened_row.DL3
6997 ,p_data_level_4_col_name => l_dl_pk4_col_name
6998 ,p_data_level_4_value => l_ag_deflatened_row.DL4
6999 ,p_data_level_5_col_name => l_dl_pk5_col_name
7000 ,p_data_level_5_value => l_ag_deflatened_row.DL5
7001 ,p_user_row_identifier => l_ag_deflatened_row.ROW_IDENTIFIER
7002 ,p_attr_name_val_tbl => attr_name_val_pair
7003 ,p_entity_id => p_entity_id
7004 ,p_entity_index => p_entity_index
7005 ,p_entity_code => p_entity_code
7006 ,p_add_errors_to_fnd_stack => G_ADD_ERRORS_TO_FND_STACK
7007 );
7008 EXCEPTION
7009 WHEN EGO_USER_ATTRS_COMMON_PVT.G_SUBSCRIPTION_EXC THEN
7010 IF (l_pre_event_failed_cursor_id IS NULL) THEN
7011 l_pre_event_failed_cursor_id := DBMS_SQL.Open_Cursor;
7012 END IF;
7013
7014 DBMS_SQL.Parse(l_pre_event_failed_cursor_id, l_pre_event_failed_sql, DBMS_SQL.NATIVE);
7015
7016 DBMS_SQL.Bind_Variable(l_pre_event_failed_cursor_id, ':data_set_id', p_data_set_id);
7017 DBMS_SQL.Bind_Variable(l_pre_event_failed_cursor_id, ':attr_group_int_name', l_ag_deflatened_row.ATTR_GROUP_INT_NAME);
7018 IF (l_attr_group_metadata_obj.MULTI_ROW_CODE = 'Y') THEN
7019 DBMS_SQL.Bind_Variable(l_pre_event_failed_cursor_id,':row_identifier',l_ag_deflatened_row.ROW_IDENTIFIER) ;
7020 END IF ;
7021
7022 IF(l_pk1_column_name IS NOT NULL ) THEN
7023 DBMS_SQL.Bind_Variable(l_pre_event_failed_cursor_id,':pk1_value',l_ag_deflatened_row.PK1) ;
7024 END IF;
7025 IF(l_pk2_column_name IS NOT NULL ) THEN
7026 DBMS_SQL.Bind_Variable(l_pre_event_failed_cursor_id,':pk2_value',l_ag_deflatened_row.PK2) ;
7027 END IF;
7028 IF(l_pk3_column_name IS NOT NULL ) THEN
7029 DBMS_SQL.Bind_Variable(l_pre_event_failed_cursor_id,':pk3_value',l_ag_deflatened_row.PK3) ;
7030 END IF;
7031 IF(l_pk4_column_name IS NOT NULL ) THEN
7032 DBMS_SQL.Bind_Variable(l_pre_event_failed_cursor_id,':pk4_value',l_ag_deflatened_row.PK4) ;
7033 END IF;
7034 IF(l_pk5_column_name IS NOT NULL ) THEN
7035 DBMS_SQL.Bind_Variable(l_pre_event_failed_cursor_id,':pk5_value',l_ag_deflatened_row.PK5) ;
7036 END IF;
7037
7038 IF(l_data_level_col_exists) THEN
7039 DBMS_SQL.Bind_Variable(l_pre_event_failed_cursor_id,':dl_id',l_ag_deflatened_row.DATA_LEVEL_ID) ;
7040 DBMS_SQL.Bind_Variable(l_pre_event_failed_cursor_id,':dl_pk1_val',l_ag_deflatened_row.DL1) ;
7041 DBMS_SQL.Bind_Variable(l_pre_event_failed_cursor_id,':dl_pk2_val',l_ag_deflatened_row.DL2) ;
7042 DBMS_SQL.Bind_Variable(l_pre_event_failed_cursor_id,':dl_pk3_val',l_ag_deflatened_row.DL3) ;
7043 DBMS_SQL.Bind_Variable(l_pre_event_failed_cursor_id,':dl_pk4_val',l_ag_deflatened_row.DL4) ;
7044 DBMS_SQL.Bind_Variable(l_pre_event_failed_cursor_id,':dl_pk5_val',l_ag_deflatened_row.DL5) ;
7045 ELSE
7046 IF(l_data_level_column_1 IS NOT NULL ) THEN
7047 DBMS_SQL.Bind_Variable(l_pre_event_failed_cursor_id,':dl1_value',l_ag_deflatened_row.DL1) ;
7048 END IF;
7049 IF(l_data_level_column_2 IS NOT NULL ) THEN
7050 DBMS_SQL.Bind_Variable(l_pre_event_failed_cursor_id,':dl2_value',l_ag_deflatened_row.DL2) ;
7051 END IF;
7052 IF(l_data_level_column_3 IS NOT NULL ) THEN
7053 DBMS_SQL.Bind_Variable(l_pre_event_failed_cursor_id,':dl3_value',l_ag_deflatened_row.DL3) ;
7054 END IF;
7055 END IF;
7056
7057 l_dummy := DBMS_SQL.Execute(l_pre_event_failed_cursor_id);
7058 DBMS_SQL.Close_Cursor (l_pre_event_failed_cursor_id);
7059
7060 END;
7061
7062 END LOOP;--iteration in l_dynamic_cursor ends
7063 CLOSE l_dynamic_cursor;
7064
7065 -------------------------------------------------
7066 --
7067 -------------------------------------------------
7068 END IF;
7069
7070 ------- WE ARE DONE WITH RAISING PRE EVENTS
7071 END IF; --*p_do_dml-IF-1* ending the p_do_dml IF
7072
7073
7074 --===========--
7075 -- DML SETUP --
7076 --===========--
7077
7078 code_debug(' Before the DML for ATTR GROUP '||l_attr_group_intf_rec.ATTR_GROUP_INT_NAME ,2);
7079
7080 ----------------------------------------------------------------
7081 -- Build a row-to-column transformation query and the various --
7082 -- bits and pieces needed for our DMLs; we can build the base --
7083 -- parts once and re-use them throughout our looping, but we --
7084 -- will need to build the Attr Group-specific parts for each --
7085 -- distinct Attr Group we process --
7086 ----------------------------------------------------------------
7087 IF (l_row_to_column_query_base IS NULL) THEN
7088
7089 -------------------------------------------------------------
7090 -- Start the query base, CC/PK/DL lists, etc. from scratch --
7091 -- as they will only be built once per call and re-used --
7092 -------------------------------------------------------------
7093 -- GNANDA: the extension_id col added in the select below is just a dummy column, we donot use it anywhere
7094 -- this was added coz for supporting TL UK cols we had to add the extension_id column in the UK where clause
7095 -- and hence it was reqd. in the RTCQ
7096 l_row_to_column_query_base := 'SELECT 2910 EXTENSION_ID, MAX(ROW_IDENTIFIER) ROW_IDENTIFIER,MAX(TRANSACTION_TYPE) TRANSACTION_TYPE,MAX(ATTR_GROUP_ID) ATTR_GROUP_ID,MAX('||l_class_code_column_name||') '||l_class_code_column_name;
7097 l_rtcq_alias_cc_pk_dl_list := ',RTCQ.'||l_class_code_column_name;
7098 l_no_alias_cc_pk_dl_list := ','||l_class_code_column_name;
7099 IF(l_ag_id_col_exists) THEN
7100 l_rtcq_to_ext_where_base := ' AND RTCQ.ATTR_GROUP_ID=EXT.ATTR_GROUP_ID AND EXT.ATTR_GROUP_ID=:curr_attr_group_id';
7101 ELSE
7102 l_rtcq_to_ext_where_base := ' AND 2=2 ';
7103 END IF;
7104
7105 l_db_col_tbl_declare_ext_id := 'ext_id_tbl EGO_USER_ATTRS_BULK_PVT.EGO_USER_ATTRS_BULK_NUM_TBL;';
7106 l_db_col_tbl_collect_ext_id := 'ext_id_tbl';
7107
7108 IF(l_ag_id_col_exists) THEN
7109 l_db_col_tbl_where_ext_id := 'EXT.ATTR_GROUP_ID=:curr_attr_group_id AND EXT.EXTENSION_ID=ext_id_tbl(i)';
7110 ELSE
7111 l_db_col_tbl_where_ext_id := ' 1=1 AND EXT.EXTENSION_ID=ext_id_tbl(i)';
7112 END IF;
7113
7114 ------------------------
7115 -- Add the PK columns --
7116 ------------------------
7117 l_concat_pk_cols := ''; -- Bug 9851212
7118
7119 IF (l_pk1_column_name IS NOT NULL) THEN
7120 l_row_to_column_query_base := l_row_to_column_query_base||
7121 ',MAX('||l_pk1_column_name||') '||
7122 l_pk1_column_name;
7123 l_rtcq_alias_cc_pk_dl_list := l_rtcq_alias_cc_pk_dl_list||
7124 ',RTCQ.'||l_pk1_column_name;
7125 l_no_alias_cc_pk_dl_list := l_no_alias_cc_pk_dl_list||','||l_pk1_column_name;
7126 l_rtcq_to_ext_where_base := l_rtcq_to_ext_where_base||
7127 ' AND RTCQ.'||l_pk1_column_name||'=EXT.'||l_pk1_column_name;
7128 l_concat_pk_cols := l_concat_pk_cols||', '||l_pk1_column_name; -- Bug 9851212
7129 END IF;
7130 IF (l_pk2_column_name IS NOT NULL) THEN
7131 l_row_to_column_query_base := l_row_to_column_query_base||
7132 ',MAX('||l_pk2_column_name||') '||
7133 l_pk2_column_name;
7134 l_rtcq_alias_cc_pk_dl_list := l_rtcq_alias_cc_pk_dl_list||
7135 ',RTCQ.'||l_pk2_column_name;
7136 l_no_alias_cc_pk_dl_list := l_no_alias_cc_pk_dl_list||','||l_pk2_column_name;
7137 l_rtcq_to_ext_where_base := l_rtcq_to_ext_where_base||
7138 ' AND RTCQ.'||l_pk2_column_name||'=EXT.'||l_pk2_column_name;
7139 l_concat_pk_cols := l_concat_pk_cols||', '||l_pk2_column_name; -- Bug 9851212
7140 END IF;
7141 IF (l_pk3_column_name IS NOT NULL) THEN
7142 l_row_to_column_query_base := l_row_to_column_query_base||
7143 ',MAX('||l_pk3_column_name||') '||
7144 l_pk3_column_name;
7145 l_rtcq_alias_cc_pk_dl_list := l_rtcq_alias_cc_pk_dl_list||
7146 ',RTCQ.'||l_pk3_column_name;
7147 l_no_alias_cc_pk_dl_list := l_no_alias_cc_pk_dl_list||','||l_pk3_column_name;
7148 l_rtcq_to_ext_where_base := l_rtcq_to_ext_where_base||
7149 ' AND RTCQ.'||l_pk3_column_name||'=EXT.'||l_pk3_column_name;
7150 l_concat_pk_cols := l_concat_pk_cols||', '||l_pk3_column_name; -- Bug 9851212
7151 END IF;
7152 IF (l_pk4_column_name IS NOT NULL) THEN
7153 l_row_to_column_query_base := l_row_to_column_query_base||
7154 ',MAX('||l_pk4_column_name||') '||
7155 l_pk4_column_name;
7156 l_rtcq_alias_cc_pk_dl_list := l_rtcq_alias_cc_pk_dl_list||
7157 ',RTCQ.'||l_pk4_column_name;
7158 l_no_alias_cc_pk_dl_list := l_no_alias_cc_pk_dl_list||','||l_pk4_column_name;
7159 l_rtcq_to_ext_where_base := l_rtcq_to_ext_where_base||
7160 ' AND RTCQ.'||l_pk4_column_name||'=EXT.'||l_pk4_column_name;
7161 l_concat_pk_cols := l_concat_pk_cols||', '||l_pk4_column_name; -- Bug 9851212
7162 END IF;
7163 IF (l_pk5_column_name IS NOT NULL) THEN
7164 l_row_to_column_query_base := l_row_to_column_query_base||
7165 ',MAX('||l_pk5_column_name||') '||
7166 l_pk5_column_name;
7167 l_rtcq_alias_cc_pk_dl_list := l_rtcq_alias_cc_pk_dl_list||
7168 ',RTCQ.'||l_pk5_column_name;
7169 l_no_alias_cc_pk_dl_list := l_no_alias_cc_pk_dl_list||','||l_pk5_column_name;
7170 l_rtcq_to_ext_where_base := l_rtcq_to_ext_where_base||
7171 ' AND RTCQ.'||l_pk5_column_name||'=EXT.'||l_pk5_column_name;
7172 l_concat_pk_cols := l_concat_pk_cols||', '||l_pk5_column_name; -- Bug 9851212
7173 END IF;
7174
7175 ------------------------------------------------
7176 -- Finally, add the DL columns (if necessary) --
7177 ------------------------------------------------
7178 IF(l_data_level_col_exists) THEN
7179
7180 l_row_to_column_query_base := l_row_to_column_query_base||',MAX(DATA_LEVEL_ID) DATA_LEVEL_ID ';
7181 l_rtcq_alias_cc_pk_dl_list := l_rtcq_alias_cc_pk_dl_list||',RTCQ.DATA_LEVEL_ID ';
7182 l_no_alias_cc_pk_dl_list := l_no_alias_cc_pk_dl_list||', DATA_LEVEL_ID ';
7183 l_rtcq_to_ext_where_base := l_rtcq_to_ext_where_base||
7184 ' AND NVL(RTCQ.DATA_LEVEL_ID,-1)=NVL(EXT.DATA_LEVEL_ID ,-1)';
7185
7186 FOR i IN l_list_of_dl_for_ag_type.FIRST .. l_list_of_dl_for_ag_type.LAST
7187 LOOP
7188 IF (l_list_of_dl_for_ag_type(i).PK_COLUMN_NAME1 IS NOT NULL AND l_list_of_dl_for_ag_type(i).PK_COLUMN_NAME1 <> 'NONE'
7189 AND INSTR(l_row_to_column_query_base,l_list_of_dl_for_ag_type(i).PK_COLUMN_NAME1) = 0) THEN
7190
7191 l_row_to_column_query_base := l_row_to_column_query_base||',MAX('||l_list_of_dl_for_ag_type(i).PK_COLUMN_NAME1||') '||
7192 l_list_of_dl_for_ag_type(i).PK_COLUMN_NAME1;
7193 l_rtcq_alias_cc_pk_dl_list := l_rtcq_alias_cc_pk_dl_list||',RTCQ.'||l_list_of_dl_for_ag_type(i).PK_COLUMN_NAME1;
7194 l_no_alias_cc_pk_dl_list := l_no_alias_cc_pk_dl_list||','||l_list_of_dl_for_ag_type(i).PK_COLUMN_NAME1;
7195 l_rtcq_to_ext_where_base := l_rtcq_to_ext_where_base||
7196 ' AND NVL(RTCQ.'||l_list_of_dl_for_ag_type(i).PK_COLUMN_NAME1||
7197 ',-1)=NVL(EXT.'||l_list_of_dl_for_ag_type(i).PK_COLUMN_NAME1||',-1)';
7198 END IF;
7199 IF (l_list_of_dl_for_ag_type(i).PK_COLUMN_NAME2 IS NOT NULL AND l_list_of_dl_for_ag_type(i).PK_COLUMN_NAME2 <> 'NONE'
7200 AND INSTR(l_row_to_column_query_base,l_list_of_dl_for_ag_type(i).PK_COLUMN_NAME2) = 0) THEN
7201
7202 l_row_to_column_query_base := l_row_to_column_query_base||',MAX('||l_list_of_dl_for_ag_type(i).PK_COLUMN_NAME2||') '||
7203 l_list_of_dl_for_ag_type(i).PK_COLUMN_NAME2;
7204 l_rtcq_alias_cc_pk_dl_list := l_rtcq_alias_cc_pk_dl_list||',RTCQ.'||l_list_of_dl_for_ag_type(i).PK_COLUMN_NAME2;
7205 l_no_alias_cc_pk_dl_list := l_no_alias_cc_pk_dl_list||','||l_list_of_dl_for_ag_type(i).PK_COLUMN_NAME2;
7206 l_rtcq_to_ext_where_base := l_rtcq_to_ext_where_base||
7207 ' AND NVL(RTCQ.'||l_list_of_dl_for_ag_type(i).PK_COLUMN_NAME2||
7208 ',-1)=NVL(EXT.'||l_list_of_dl_for_ag_type(i).PK_COLUMN_NAME2||',-1)';
7209 END IF;
7210 IF (l_list_of_dl_for_ag_type(i).PK_COLUMN_NAME3 IS NOT NULL AND l_list_of_dl_for_ag_type(i).PK_COLUMN_NAME3 <> 'NONE'
7211 AND INSTR(l_row_to_column_query_base,l_list_of_dl_for_ag_type(i).PK_COLUMN_NAME3) = 0) THEN
7212
7213 l_row_to_column_query_base := l_row_to_column_query_base||',MAX('||l_list_of_dl_for_ag_type(i).PK_COLUMN_NAME3||') '||
7214 l_list_of_dl_for_ag_type(i).PK_COLUMN_NAME3;
7215 l_rtcq_alias_cc_pk_dl_list := l_rtcq_alias_cc_pk_dl_list||',RTCQ.'||l_list_of_dl_for_ag_type(i).PK_COLUMN_NAME3;
7216 l_no_alias_cc_pk_dl_list := l_no_alias_cc_pk_dl_list||','||l_list_of_dl_for_ag_type(i).PK_COLUMN_NAME3;
7217 l_rtcq_to_ext_where_base := l_rtcq_to_ext_where_base||
7218 ' AND NVL(RTCQ.'||l_list_of_dl_for_ag_type(i).PK_COLUMN_NAME3||
7219 ',-1)=NVL(EXT.'||l_list_of_dl_for_ag_type(i).PK_COLUMN_NAME3||',-1)';
7220 END IF;
7221 IF (l_list_of_dl_for_ag_type(i).PK_COLUMN_NAME4 IS NOT NULL AND l_list_of_dl_for_ag_type(i).PK_COLUMN_NAME4 <> 'NONE'
7222 AND INSTR(l_row_to_column_query_base,l_list_of_dl_for_ag_type(i).PK_COLUMN_NAME4) = 0) THEN
7223
7224 l_row_to_column_query_base := l_row_to_column_query_base||',MAX('||l_list_of_dl_for_ag_type(i).PK_COLUMN_NAME4||') '||
7225 l_list_of_dl_for_ag_type(i).PK_COLUMN_NAME4;
7226 l_rtcq_alias_cc_pk_dl_list := l_rtcq_alias_cc_pk_dl_list||',RTCQ.'||l_list_of_dl_for_ag_type(i).PK_COLUMN_NAME4;
7227 l_no_alias_cc_pk_dl_list := l_no_alias_cc_pk_dl_list||','||l_list_of_dl_for_ag_type(i).PK_COLUMN_NAME4;
7228 l_rtcq_to_ext_where_base := l_rtcq_to_ext_where_base||
7229 ' AND NVL(RTCQ.'||l_list_of_dl_for_ag_type(i).PK_COLUMN_NAME4||
7230 ',-1)=NVL(EXT.'||l_list_of_dl_for_ag_type(i).PK_COLUMN_NAME4||',-1)';
7231 END IF;
7232 IF (l_list_of_dl_for_ag_type(i).PK_COLUMN_NAME5 IS NOT NULL AND l_list_of_dl_for_ag_type(i).PK_COLUMN_NAME5 <> 'NONE'
7233 AND INSTR(l_row_to_column_query_base,l_list_of_dl_for_ag_type(i).PK_COLUMN_NAME5) = 0) THEN
7234
7235 l_row_to_column_query_base := l_row_to_column_query_base||',MAX('||l_list_of_dl_for_ag_type(i).PK_COLUMN_NAME5||') '||
7236 l_list_of_dl_for_ag_type(i).PK_COLUMN_NAME5;
7237 l_rtcq_alias_cc_pk_dl_list := l_rtcq_alias_cc_pk_dl_list||',RTCQ.'||l_list_of_dl_for_ag_type(i).PK_COLUMN_NAME5;
7238 l_no_alias_cc_pk_dl_list := l_no_alias_cc_pk_dl_list||','||l_list_of_dl_for_ag_type(i).PK_COLUMN_NAME5;
7239 l_rtcq_to_ext_where_base := l_rtcq_to_ext_where_base||
7240 ' AND NVL(RTCQ.'||l_list_of_dl_for_ag_type(i).PK_COLUMN_NAME5||
7241 ',-1)=NVL(EXT.'||l_list_of_dl_for_ag_type(i).PK_COLUMN_NAME5||',-1)';
7242 END IF;
7243 END LOOP;
7244 ELSE
7245 IF (l_num_data_level_columns >= 1) THEN
7246 l_row_to_column_query_base := l_row_to_column_query_base||
7247 ',MAX('||l_data_level_column_1||') '||
7248 l_data_level_column_1;
7249 l_rtcq_alias_cc_pk_dl_list := l_rtcq_alias_cc_pk_dl_list||
7250 ',RTCQ.'||l_data_level_column_1;
7251 l_no_alias_cc_pk_dl_list := l_no_alias_cc_pk_dl_list||
7252 ','||l_data_level_column_1;
7253 l_rtcq_to_ext_where_base := l_rtcq_to_ext_where_base||
7254 ' AND NVL(RTCQ.'||l_data_level_column_1||
7255 ',-1)=NVL(EXT.'||l_data_level_column_1||',-1)';
7256 END IF;
7257 IF (l_num_data_level_columns >= 2) THEN
7258 l_row_to_column_query_base := l_row_to_column_query_base||
7259 ',MAX('||l_data_level_column_2||') '||
7260 l_data_level_column_2;
7261 l_rtcq_alias_cc_pk_dl_list := l_rtcq_alias_cc_pk_dl_list||
7262 ',RTCQ.'||l_data_level_column_2;
7263 l_no_alias_cc_pk_dl_list := l_no_alias_cc_pk_dl_list||
7264 ','||l_data_level_column_2;
7265 l_rtcq_to_ext_where_base := l_rtcq_to_ext_where_base||
7266 ' AND NVL(RTCQ.'||l_data_level_column_2||
7267 ',-1)=NVL(EXT.'||l_data_level_column_2||',-1)';
7268 END IF;
7269 IF (l_num_data_level_columns = 3) THEN
7270 l_row_to_column_query_base := l_row_to_column_query_base||
7271 ',MAX('||l_data_level_column_3||') '||
7272 l_data_level_column_3;
7273 l_rtcq_alias_cc_pk_dl_list := l_rtcq_alias_cc_pk_dl_list||
7274 ',RTCQ.'||l_data_level_column_3;
7275 l_no_alias_cc_pk_dl_list := l_no_alias_cc_pk_dl_list||
7276 ','||l_data_level_column_3;
7277 l_rtcq_to_ext_where_base := l_rtcq_to_ext_where_base||
7278 ' AND NVL(RTCQ.'||l_data_level_column_3||
7279 ',-1)=NVL(EXT.'||l_data_level_column_3||',-1)';
7280 END IF;
7281 END IF;
7282 END IF;
7283 ----------------------------------------------------------------------
7284 -- Now we build our DML and query pieces that differ by Attr Group; --
7285 -- we reset all of these variables for each distinct Attr Group --
7286 ----------------------------------------------------------------------
7287 l_rn_index_for_ag := 0;
7288 l_row_to_column_query_ag_part := NULL;
7289 l_row_to_column_attr_decode := NULL;
7290 l_rtcq_to_ext_where_uks := NULL;
7291 l_rtcq_to_ext_whr_uks_idnt_chk := NULL;
7292 l_rtcq_alias_b_cols_list := NULL;
7293 l_final_b_col_list := NULL;
7294 l_final_tl_col_list := NULL;
7295 l_rtcq_alias_b_cols_list_1 := NULL;
7296 l_rtcq_alias_tl_cols_list := NULL;
7297 l_rtcq_alias_tl_cols_list_1 := NULL;
7298 l_no_alias_b_cols_list := NULL;
7299 l_no_alias_b_values_list := NULL;
7300 l_no_alias_tl_cols_list := NULL;
7301 l_no_alias_tl_cols_sel_list := NULL;
7302 l_db_col_tbl_declare_attrs := NULL;
7303 l_db_col_tbl_collect_b_attrs := NULL;
7304 l_db_col_tbl_collect_tl_attrs := NULL;
7305 l_db_col_tbl_set_b_attrs := NULL;
7306 l_db_col_tbl_set_tl_attrs := NULL;
7307
7308 FOR d IN l_attr_metadata_table_sr.FIRST .. l_attr_metadata_table_sr.LAST
7309 LOOP
7310
7311 IF (Attr_Is_In_Data_Set(l_attr_metadata_table_sr(d), l_dist_attrs_in_data_set_table)
7312 OR
7313 l_attr_metadata_table_sr(d).UNIQUE_KEY_FLAG = 'Y' --BugFix: 5361255 : we need to add the uk attr in the where clause weather
7314 ) THEN -- or not we have data for it in the intf table.
7315
7316 l_rn_index_for_ag := l_rn_index_for_ag + 1;
7317
7318 -------------------------------------------------------
7319 -- lets get ready with the correct wierd constant --
7320 -------------------------------------------------------
7321
7322 IF (l_attr_metadata_table_sr(d).DATA_TYPE_CODE = EGO_EXT_FWK_PUB.G_NUMBER_DATA_TYPE) THEN
7323 wierd_constant := G_NULL_TOKEN_NUM;
7324 wierd_constant_2 := '8.88E125';
7325 ELSIF ( l_attr_metadata_table_sr(d).DATA_TYPE_CODE = EGO_EXT_FWK_PUB.G_DATE_DATA_TYPE
7326 OR l_attr_metadata_table_sr(d).DATA_TYPE_CODE = EGO_EXT_FWK_PUB.G_DATE_TIME_DATA_TYPE ) THEN
7327 wierd_constant := G_NULL_TOKEN_DATE;
7328 wierd_constant_2 := 'TO_DATE(''2'',''J'')';
7329 ELSE
7330 wierd_constant := G_NULL_TOKEN_STR;
7331 wierd_constant_2 := 'CHR(2)';
7332 END IF;
7333
7334 -------------------------------------------------------
7335 -- UK clause (note that we only update non-UK Attrs) --
7336 -------------------------------------------------------
7337 IF (l_attr_metadata_table_sr(d).UNIQUE_KEY_FLAG = 'Y') THEN
7338
7339 IF (l_attr_metadata_table_sr(d).DATA_TYPE_CODE = EGO_EXT_FWK_PUB.G_TRANS_TEXT_DATA_TYPE) THEN
7340 --GNANDA: While inserting rows in the TL table for a case where we have a TL Uk we insert rows for
7341 --all the rows int he B table for the given pk's and uk's which do not have a corresponding rows in the TL table.
7342
7343 --While checking for identical rows in the data_set there is a self join in RTCQ (RTCQ and EXT), contrary to the DML's
7344 --where EXT is the actual EXT base table, hence we need to build a seperate where clause for identical check
7345 --i.e. l_rtcq_to_ext_whr_uks_idnt_chk.
7346 l_rtcq_to_ext_where_uks := l_rtcq_to_ext_where_uks||
7347 ' AND NVL(RTCQ.'||l_attr_metadata_table_sr(d).DATABASE_COLUMN||','||wierd_constant||')'||
7348 '= DECODE (RTCQ.TRANSACTION_TYPE, '''||EGO_USER_ATTRS_DATA_PVT.G_CREATE_MODE||''' , '||
7349 'NVL((SELECT NVL(RTCQ.'||l_attr_metadata_table_sr(d).DATABASE_COLUMN||','||wierd_constant||') FROM DUAL WHERE NOT EXISTS (SELECT 1 FROM '||
7350 l_ext_tl_table_name||' WHERE EXTENSION_ID = EXT.EXTENSION_ID AND ROWNUM = 1 )), '||wierd_constant_2||' ) '||
7351 ',NVL((SELECT '||l_attr_metadata_table_sr(d).DATABASE_COLUMN || ' FROM '||l_ext_tl_table_name||' WHERE LANGUAGE = USERENV(''LANG'') AND EXTENSION_ID = EXT.EXTENSION_ID),'||wierd_constant||' ) '||
7352 ')';
7353 l_rtcq_to_ext_whr_uks_idnt_chk := l_rtcq_to_ext_whr_uks_idnt_chk||
7354 ' AND NVL(RTCQ.'||l_attr_metadata_table_sr(d).DATABASE_COLUMN||','||wierd_constant||')'||
7355 '= NVL(EXT.'||l_attr_metadata_table_sr(d).DATABASE_COLUMN||','||wierd_constant||')';
7356 ELSE
7357 l_rtcq_to_ext_where_uks := l_rtcq_to_ext_where_uks||
7358 ' AND NVL(RTCQ.'||l_attr_metadata_table_sr(d).DATABASE_COLUMN||','||wierd_constant||')'||
7359 '= NVL(EXT.'||l_attr_metadata_table_sr(d).DATABASE_COLUMN||','||wierd_constant||')';
7360
7361 l_rtcq_to_ext_whr_uks_idnt_chk := l_rtcq_to_ext_whr_uks_idnt_chk||
7362 ' AND NVL(RTCQ.'||l_attr_metadata_table_sr(d).DATABASE_COLUMN||','||wierd_constant||')'||
7363 '= NVL(EXT.'||l_attr_metadata_table_sr(d).DATABASE_COLUMN||','||wierd_constant||')';
7364 END IF;
7365
7366 END IF;
7367
7368 -----------------------------------
7369 -- Data type-independent clauses --
7370 -----------------------------------
7371 l_row_to_column_attr_decode := l_row_to_column_attr_decode||
7372 ','''||l_attr_metadata_table_sr(d).ATTR_NAME||
7373 ''','||l_rn_index_for_ag;
7374
7375 -- this one is closed below...
7376 l_row_to_column_query_ag_part := l_row_to_column_query_ag_part||
7377 ',MAX(DECODE(RN,'||l_rn_index_for_ag||',';
7378
7379 ---------------------------------
7380 -- Data type-dependent clauses --
7381 ---------------------------------
7382 IF (l_attr_metadata_table_sr(d).DATA_TYPE_CODE =
7383 EGO_EXT_FWK_PUB.G_NUMBER_DATA_TYPE) THEN
7384
7385 l_row_to_column_query_ag_part := l_row_to_column_query_ag_part||
7386 'DECODE(TRANSACTION_TYPE,'''||EGO_USER_ATTRS_DATA_PVT.G_CREATE_MODE||''',DECODE(ATTR_VALUE_NUM,'||wierd_constant||',NULL,ATTR_VALUE_NUM), ATTR_VALUE_NUM)';
7387 -- ...this closes what started above
7388 l_row_to_column_query_ag_part := l_row_to_column_query_ag_part||')) '||
7389 l_attr_metadata_table_sr(d).DATABASE_COLUMN;
7390
7391 IF (l_attr_metadata_table_sr(d).UNIT_OF_MEASURE_CLASS IS NOT NULL) THEN
7392 l_row_to_column_query_ag_part := l_row_to_column_query_ag_part||
7393 ',MAX(DECODE(RN,'||l_rn_index_for_ag||',';
7394 l_row_to_column_query_ag_part := l_row_to_column_query_ag_part||
7395 'DECODE(TRANSACTION_TYPE,'''||EGO_USER_ATTRS_DATA_PVT.G_CREATE_MODE||''',DECODE(ATTR_VALUE_UOM,'||G_NULL_TOKEN_STR||',NULL,ATTR_VALUE_UOM), ATTR_VALUE_UOM)';
7396 l_row_to_column_query_ag_part := l_row_to_column_query_ag_part||')) '||
7397 l_attr_metadata_table_sr(d).DATABASE_COLUMN||'_UOM';
7398 END IF;
7399
7400 l_db_col_tbl_declare_attrs := l_db_col_tbl_declare_attrs||
7401 'attr_'||l_rn_index_for_ag||
7402 '_tbl EGO_USER_ATTRS_BULK_PVT.EGO_USER_ATTRS_BULK_NUM_TBL;';
7403 l_db_col_tbl_declare_attrs := l_db_col_tbl_declare_attrs||
7404 'attr_'||l_rn_index_for_ag||
7405 '_uom_tbl EGO_USER_ATTRS_BULK_PVT.EGO_USER_ATTRS_BULK_STR_TBL;';
7406
7407 -- we only update non-UK Attrs
7408 IF (l_attr_metadata_table_sr(d).UNIQUE_KEY_FLAG IS NULL
7409 OR l_attr_metadata_table_sr(d).UNIQUE_KEY_FLAG <> 'Y') THEN
7410
7411 IF ( l_attr_metadata_table_sr(d).UNIT_OF_MEASURE_CLASS IS NOT NULL) THEN
7412
7413 IF (INSTR(l_attr_metadata_table_sr(d).DATABASE_COLUMN, 'N_EXT_ATTR') = 1) THEN
7414 l_uom_column1 := 'UOM_' || SUBSTR(l_attr_metadata_table_sr(d).DATABASE_COLUMN, 3);
7415 ELSE
7416 l_uom_column1 := 'UOM_' || l_attr_metadata_table_sr(d).DATABASE_COLUMN;
7417 END IF;
7418
7419 l_db_col_tbl_set_b_attrs := l_db_col_tbl_set_b_attrs||
7420 ',EXT.'||
7421 l_attr_metadata_table_sr(d).DATABASE_COLUMN||
7422 '=DECODE(attr_'||l_rn_index_for_ag||
7423 '_tbl(i),'||EGO_USER_ATTRS_BULK_PVT.G_NULL_TOKEN_NUM||
7424 ',NULL,NULL,EXT.'||l_attr_metadata_table_sr(d).DATABASE_COLUMN||
7425 ','||G_NULL_TOKEN_NUM_1||',EXT.'||l_attr_metadata_table_sr(d).DATABASE_COLUMN||--bugfix:6526366
7426 ',attr_'||l_rn_index_for_ag||'_tbl(i))'||
7427 ',EXT.'||l_uom_column1 ||
7428 '= DECODE(attr_'||l_rn_index_for_ag||'_uom_tbl(i) ,NULL, '||'NVL (EXT.'||l_uom_column1||' ,'''||l_attr_metadata_table_sr(d).UNIT_OF_MEASURE_BASE||''') '
7429 ||','||EGO_USER_ATTRS_BULK_PVT.G_NULL_TOKEN_STR||','||'NVL (EXT.'||l_uom_column1||' ,'''||l_attr_metadata_table_sr(d).UNIT_OF_MEASURE_BASE||''') '
7430 ||','||EGO_USER_ATTRS_BULK_PVT.G_NULL_TOKEN_STR_1||','||'NVL (EXT.'||l_uom_column1||' ,'''||l_attr_metadata_table_sr(d).UNIT_OF_MEASURE_BASE||''') '--bugfix:6526366
7431 ||',attr_'||l_rn_index_for_ag||'_uom_tbl(i) )';--BugFux:5509743
7432 ELSE
7433 l_db_col_tbl_set_b_attrs := l_db_col_tbl_set_b_attrs||
7434 ',EXT.'||
7435 l_attr_metadata_table_sr(d).DATABASE_COLUMN||
7436 '=DECODE(attr_'||l_rn_index_for_ag||
7437 '_tbl(i),'||EGO_USER_ATTRS_BULK_PVT.G_NULL_TOKEN_NUM||
7438 ',NULL,NULL,EXT.'||l_attr_metadata_table_sr(d).DATABASE_COLUMN||
7439 ','||G_NULL_TOKEN_NUM_1||',EXT.'||l_attr_metadata_table_sr(d).DATABASE_COLUMN||--bugfix:6526366
7440 ',attr_'||l_rn_index_for_ag||'_tbl(i))';
7441
7442 END IF;
7443 END IF;
7444
7445 ELSIF (l_attr_metadata_table_sr(d).DATA_TYPE_CODE =
7446 EGO_EXT_FWK_PUB.G_DATE_DATA_TYPE OR
7447 l_attr_metadata_table_sr(d).DATA_TYPE_CODE =
7448 EGO_EXT_FWK_PUB.G_DATE_TIME_DATA_TYPE) THEN
7449
7450 --Bug 4473391(gnanda) : we need to convert the attr_value_date to char in the decode and then convert the final value into
7451 --date otherwise decode would remove the time part from date time attribute.
7452 l_row_to_column_query_ag_part := l_row_to_column_query_ag_part||
7453 'DECODE(TRANSACTION_TYPE,'''||EGO_USER_ATTRS_DATA_PVT.G_UPDATE_MODE||''',ATTR_VALUE_DATE,TO_DATE(DECODE(ATTR_VALUE_DATE,'||wierd_constant||
7454 ',NULL,TO_CHAR(ATTR_VALUE_DATE,''DD/MM/YYYY HH24:MI:SS'')),''DD/MM/YYYY HH24:MI:SS'') )';
7455 -- ...this closes what started above
7456 l_row_to_column_query_ag_part := l_row_to_column_query_ag_part||')) '||
7457 l_attr_metadata_table_sr(d).DATABASE_COLUMN;
7458
7459 l_db_col_tbl_declare_attrs := l_db_col_tbl_declare_attrs||
7460 'attr_'||l_rn_index_for_ag||
7461 '_tbl EGO_USER_ATTRS_BULK_PVT.EGO_USER_ATTRS_BULK_DATE_TBL;';
7462
7463 -- we only update non-UK Attrs
7464 IF (l_attr_metadata_table_sr(d).UNIQUE_KEY_FLAG IS NULL
7465 OR l_attr_metadata_table_sr(d).UNIQUE_KEY_FLAG <> 'Y') THEN
7466
7467 --Bug 4473391(gnanda) : we need to convert the attr_value_date to char in the decode and then convert the final value into
7468 --date otherwise decode would remove the time part from date time attribute.
7469 l_db_col_tbl_set_b_attrs := l_db_col_tbl_set_b_attrs||
7470 ',EXT.'||
7471 l_attr_metadata_table_sr(d).DATABASE_COLUMN||
7472 --FP bug 8270556 with base bug 8238064
7473 '=DECODE(attr_'||l_rn_index_for_ag||'_tbl(i) ,NULL, EXT.'||l_attr_metadata_table_sr(d).DATABASE_COLUMN||' , '||
7474 'TO_DATE(DECODE(attr_'||l_rn_index_for_ag||
7475 '_tbl(i),'||EGO_USER_ATTRS_BULK_PVT.G_NULL_TOKEN_DATE||
7476 ',NULL,NULL,EXT.'||l_attr_metadata_table_sr(d).DATABASE_COLUMN||
7477 ','||G_NULL_TOKEN_DATE_1||',EXT.'||l_attr_metadata_table_sr(d).DATABASE_COLUMN||--bugfix:6526366
7478 ',TO_CHAR(attr_'||l_rn_index_for_ag||'_tbl(i), ''DD/MM/YYYY HH24:MI:SS'') ),''DD/MM/YYYY HH24:MI:SS''))';
7479
7480 END IF;
7481 ELSE
7482
7483 l_row_to_column_query_ag_part := l_row_to_column_query_ag_part||
7484 'DECODE(TRANSACTION_TYPE,'''||EGO_USER_ATTRS_DATA_PVT.G_CREATE_MODE||''',DECODE(ATTR_VALUE_STR,'||wierd_constant||',NULL,ATTR_VALUE_STR), ATTR_VALUE_STR)';
7485 -- ...this closes what started above
7486 l_row_to_column_query_ag_part := l_row_to_column_query_ag_part||')) '||
7487 l_attr_metadata_table_sr(d).DATABASE_COLUMN;
7488
7489 l_db_col_tbl_declare_attrs := l_db_col_tbl_declare_attrs||
7490 'attr_'||l_rn_index_for_ag||
7491 '_tbl EGO_USER_ATTRS_BULK_PVT.EGO_USER_ATTRS_BULK_STR_TBL;';
7492
7493 -- we only update non-UK Attrs
7494 IF (l_attr_metadata_table_sr(d).UNIQUE_KEY_FLAG IS NULL
7495 OR l_attr_metadata_table_sr(d).UNIQUE_KEY_FLAG <> 'Y') THEN
7496
7497 IF (l_attr_metadata_table_sr(d).DATA_TYPE_CODE =
7498 EGO_EXT_FWK_PUB.G_TRANS_TEXT_DATA_TYPE) THEN
7499
7500 l_db_col_tbl_set_tl_attrs := l_db_col_tbl_set_tl_attrs||
7501 ',EXT.'||
7502 l_attr_metadata_table_sr(d).DATABASE_COLUMN||
7503 '=DECODE(attr_'||l_rn_index_for_ag||
7504 '_tbl(i),'||EGO_USER_ATTRS_BULK_PVT.G_NULL_TOKEN_STR||
7505 ',NULL,NULL,EXT.'||l_attr_metadata_table_sr(d).DATABASE_COLUMN||
7506 ',attr_'||l_rn_index_for_ag||'_tbl(i))';
7507
7508 ELSE
7509
7510 l_db_col_tbl_set_b_attrs := l_db_col_tbl_set_b_attrs||
7511 ',EXT.'||
7512 l_attr_metadata_table_sr(d).DATABASE_COLUMN||
7513 '=DECODE(attr_'||l_rn_index_for_ag||
7514 '_tbl(i),'||EGO_USER_ATTRS_BULK_PVT.G_NULL_TOKEN_STR||
7515 ',NULL,NULL,EXT.'||l_attr_metadata_table_sr(d).DATABASE_COLUMN||
7516 ','||G_NULL_TOKEN_STR_1||',EXT.'||l_attr_metadata_table_sr(d).DATABASE_COLUMN||--bugfix:6526366
7517 ',attr_'||l_rn_index_for_ag||'_tbl(i))';
7518
7519 END IF;
7520 END IF;
7521 END IF;
7522
7523 ----------------------
7524 -- B vs. TL clauses --
7525 ----------------------
7526 IF (l_attr_metadata_table_sr(d).DATA_TYPE_CODE =
7527 EGO_EXT_FWK_PUB.G_TRANS_TEXT_DATA_TYPE) THEN
7528
7529 l_rtcq_alias_tl_cols_list := l_rtcq_alias_tl_cols_list||',RTCQ.'||
7530 l_attr_metadata_table_sr(d).DATABASE_COLUMN;
7531 l_rtcq_alias_tl_cols_list_1 := l_rtcq_alias_tl_cols_list_1||',DECODE(INTF_TL.COLUMN_NAME, '''||l_attr_metadata_table_sr(d).ATTR_NAME||''' ,'
7532 ||' INTF_TL.COLUMN_VALUE , '||G_NULL_TOKEN_STR||' ) '||l_attr_metadata_table_sr(d).DATABASE_COLUMN;
7533
7534 l_no_alias_tl_cols_list := l_no_alias_tl_cols_list||','||
7535 l_attr_metadata_table_sr(d).DATABASE_COLUMN;
7536 l_no_alias_tl_cols_sel_list := l_no_alias_tl_cols_sel_list||' , '||' NVL( (SELECT COLUMN_VALUE '
7537 ||' FROM EGO_INTERFACE_TL '
7538 ||' WHERE SET_PROCESS_ID = '||p_data_set_id
7539 ||' AND TABLE_NAME = '''||p_interface_table_name||''' '
7540 ||' AND COLUMN_NAME = '''||l_attr_metadata_table_sr(d).ATTR_NAME||''' '
7541 ||' AND UNIQUE_ID = RTCQ.ROW_IDENTIFIER '
7542 ||' AND LANGUAGE = L.LANGUAGE_CODE) ,'||l_attr_metadata_table_sr(d).DATABASE_COLUMN||') ';
7543
7544 l_db_col_tbl_collect_tl_attrs := l_db_col_tbl_collect_tl_attrs||
7545 ',attr_'||l_rn_index_for_ag||'_tbl';
7546
7547 l_final_tl_col_list := l_final_tl_col_list ||','||l_attr_metadata_table_sr(d).DATABASE_COLUMN;
7548
7549 ELSE
7550
7551 l_final_b_col_list := l_final_b_col_list ||','||l_attr_metadata_table_sr(d).DATABASE_COLUMN;
7552
7553 l_rtcq_alias_b_cols_list := l_rtcq_alias_b_cols_list||',RTCQ.'||
7554 l_attr_metadata_table_sr(d).DATABASE_COLUMN;
7555
7556 IF (l_attr_metadata_table_sr(d).DATA_TYPE_CODE =
7557 EGO_EXT_FWK_PUB.G_NUMBER_DATA_TYPE) THEN
7558 l_rtcq_alias_b_cols_list_1 := l_rtcq_alias_b_cols_list_1||', '''||EGO_USER_ATTRS_BULK_PVT.G_NULL_TOKEN_NUM_1||''' '
7559 ||l_attr_metadata_table_sr(d).DATABASE_COLUMN;
7560 ELSIF (l_attr_metadata_table_sr(d).DATA_TYPE_CODE = EGO_EXT_FWK_PUB.G_DATE_TIME_DATA_TYPE OR
7561 l_attr_metadata_table_sr(d).DATA_TYPE_CODE = EGO_EXT_FWK_PUB.G_DATE_DATA_TYPE ) THEN
7562 l_rtcq_alias_b_cols_list_1 := l_rtcq_alias_b_cols_list_1||', '||EGO_USER_ATTRS_BULK_PVT.G_NULL_TOKEN_DATE_1||' '
7563 ||l_attr_metadata_table_sr(d).DATABASE_COLUMN;
7564 ELSE
7565 l_rtcq_alias_b_cols_list_1 := l_rtcq_alias_b_cols_list_1||', '||EGO_USER_ATTRS_BULK_PVT.G_NULL_TOKEN_STR_1||' '
7566 ||l_attr_metadata_table_sr(d).DATABASE_COLUMN;
7567
7568 END IF;
7569 l_no_alias_b_cols_list := l_no_alias_b_cols_list||','||
7570 l_attr_metadata_table_sr(d).DATABASE_COLUMN;
7571 l_no_alias_b_values_list := l_no_alias_b_values_list||','||
7572 l_attr_metadata_table_sr(d).DATABASE_COLUMN;
7573 l_db_col_tbl_collect_b_attrs := l_db_col_tbl_collect_b_attrs||
7574 ',attr_'||l_rn_index_for_ag||'_tbl';
7575
7576 IF (l_attr_metadata_table_sr(d).UNIT_OF_MEASURE_CLASS IS NOT NULL) THEN
7577
7578 l_final_b_col_list := l_final_b_col_list ||','||l_attr_metadata_table_sr(d).DATABASE_COLUMN||'_UOM ';
7579
7580 l_rtcq_alias_b_cols_list := l_rtcq_alias_b_cols_list||',RTCQ.'||
7581 l_attr_metadata_table_sr(d).DATABASE_COLUMN||'_UOM';
7582 l_rtcq_alias_b_cols_list_1 := l_rtcq_alias_b_cols_list_1||', '||G_NULL_TOKEN_STR_1||
7583 l_attr_metadata_table_sr(d).DATABASE_COLUMN||'_UOM';
7584
7585 l_db_col_tbl_collect_b_attrs := l_db_col_tbl_collect_b_attrs||
7586 ',attr_'||l_rn_index_for_ag||'_uom_tbl';
7587 -------------------------------------------------------
7588 -- If it's a UOM Attr, we need to add the UOM column --
7589 -- and its base value into our no-alias lists, too --
7590 -------------------------------------------------------
7591 IF (INSTR(l_attr_metadata_table_sr(d).DATABASE_COLUMN, 'N_EXT_ATTR') = 1) THEN
7592 l_uom_column := 'UOM_' || SUBSTR(l_attr_metadata_table_sr(d).DATABASE_COLUMN, 3);
7593 ELSE
7594 l_uom_column := 'UOM_' || l_attr_metadata_table_sr(d).DATABASE_COLUMN;
7595 END IF;
7596
7597 l_no_alias_b_cols_list := l_no_alias_b_cols_list||
7598 ','||l_uom_column;
7599 l_no_alias_b_values_list := l_no_alias_b_values_list||
7600 ', NVL('||l_attr_metadata_table_sr(d).DATABASE_COLUMN||'_UOM ,'''||
7601 l_attr_metadata_table_sr(d).UNIT_OF_MEASURE_BASE||
7602 ''' )';
7603 END IF;
7604 END IF;
7605 END IF;
7606 END LOOP;
7607
7608 l_row_to_column_query :=
7609 l_row_to_column_query_base||
7610 l_row_to_column_query_ag_part||
7611 ' FROM (SELECT DECODE(ATTR_INT_NAME'||l_row_to_column_attr_decode||
7612 ') RN,TRANSACTION_TYPE,ATTR_GROUP_ID'||
7613 l_no_alias_cc_pk_dl_list||
7614 ',ATTR_INT_NAME,NVL(ATTR_VALUE_NUM,'||
7615 EGO_USER_ATTRS_BULK_PVT.G_NULL_TOKEN_NUM||
7616 ')ATTR_VALUE_NUM, NVL(ATTR_VALUE_UOM,'||
7617 EGO_USER_ATTRS_BULK_PVT.G_NULL_TOKEN_STR||
7618 ') ATTR_VALUE_UOM, NVL(ATTR_VALUE_STR,'||
7619 EGO_USER_ATTRS_BULK_PVT.G_NULL_TOKEN_STR||
7620 ')ATTR_VALUE_STR,NVL(ATTR_VALUE_DATE,'||
7621 EGO_USER_ATTRS_BULK_PVT.G_NULL_TOKEN_DATE||
7622 ')ATTR_VALUE_DATE,ROW_IDENTIFIER FROM '||
7623 p_interface_table_name||
7624 ' WHERE DATA_SET_ID = :data_set_id AND PROCESS_STATUS = '||G_PS_IN_PROCESS||
7625 ' AND ATTR_GROUP_INT_NAME = :attr_group_name AND ATTR_GROUP_TYPE = '''||p_attr_group_type||''') GROUP BY ROW_IDENTIFIER';
7626
7627 --------------------------------------------------
7628 -- If p_validate = TRUE do the final validation --
7629 --------------------------------------------------
7630
7631 -- The validation for erroring dupicate rows has been moved to the DML phase R12C
7632 -- onwards, this was needed by the items team.
7633
7634 IF (p_do_dml) THEN --*p_validate-IF-4*
7635
7636 code_debug(' Before validation for more than one logical AG rows int the interface table pointing to same row in the EXT table ' ,2);
7637 -----------------------------------------------------------------
7638 -- The final validation step is to error out all logical Attr --
7639 -- Group rows in the data set that map to the same destination --
7640 -- table row; we have to do this per AG because of UKs, and we --
7641 -- do it here because we have the RTCQ and its where clause(s) --
7642 -----------------------------------------------------------------
7643
7644 IF (l_ag_id_col_exists) THEN
7645 code_debug( 'UPDATE '||p_interface_table_name||
7646 ' SET PROCESS_STATUS = PROCESS_STATUS + '||G_PS_IDENTICAL_ROWS||
7647 ' WHERE DATA_SET_ID = :data_set_id
7648 AND PROCESS_STATUS <> '||G_PS_GENERIC_ERROR||'
7649 AND PROCESS_STATUS <> '||G_PS_SUCCESS||'
7650 AND BITAND(PROCESS_STATUS, '||G_PS_NO_PRIVILEGES||') = 0
7651 AND ROW_IDENTIFIER IN (SELECT DISTINCT RTCQ.ROW_IDENTIFIER
7652 FROM ('||l_row_to_column_query||') RTCQ,
7653 ('||l_row_to_column_query||') EXT
7654 WHERE RTCQ.ATTR_GROUP_ID = EXT.ATTR_GROUP_ID
7655 AND RTCQ.ROW_IDENTIFIER <> EXT.ROW_IDENTIFIER'||
7656 l_rtcq_to_ext_where_base||
7657 l_rtcq_to_ext_whr_uks_idnt_chk||')'
7658
7659 );
7660 EXECUTE IMMEDIATE
7661 'UPDATE '||p_interface_table_name||
7662 ' SET PROCESS_STATUS = PROCESS_STATUS + '||G_PS_IDENTICAL_ROWS||
7663 ' WHERE DATA_SET_ID = :data_set_id
7664 AND PROCESS_STATUS <> '||G_PS_GENERIC_ERROR||'
7665 AND PROCESS_STATUS <> '||G_PS_SUCCESS||'
7666 AND BITAND(PROCESS_STATUS, '||G_PS_NO_PRIVILEGES||') = 0
7667 AND ROW_IDENTIFIER IN (SELECT DISTINCT RTCQ.ROW_IDENTIFIER
7668 FROM ('||l_row_to_column_query||') RTCQ,
7669 ('||l_row_to_column_query||') EXT
7670 WHERE RTCQ.ATTR_GROUP_ID = EXT.ATTR_GROUP_ID
7671 AND RTCQ.ROW_IDENTIFIER <> EXT.ROW_IDENTIFIER'||
7672 l_rtcq_to_ext_where_base||
7673 l_rtcq_to_ext_whr_uks_idnt_chk||')'
7674 USING p_data_set_id,
7675 p_data_set_id,
7676 l_attr_group_metadata_obj.ATTR_GROUP_NAME,
7677 p_data_set_id,
7678 l_attr_group_metadata_obj.ATTR_GROUP_NAME,
7679 l_attr_group_metadata_obj.ATTR_GROUP_ID;
7680 ELSE
7681
7682 EXECUTE IMMEDIATE
7683 'UPDATE '||p_interface_table_name||
7684 ' SET PROCESS_STATUS = PROCESS_STATUS + '||G_PS_IDENTICAL_ROWS||
7685 ' WHERE DATA_SET_ID = :data_set_id
7686 AND PROCESS_STATUS <> '||G_PS_GENERIC_ERROR||'
7687 AND PROCESS_STATUS <> '||G_PS_SUCCESS||'
7688 AND BITAND(PROCESS_STATUS, '||G_PS_NO_PRIVILEGES||') = 0
7689 AND ROW_IDENTIFIER IN (SELECT DISTINCT RTCQ.ROW_IDENTIFIER
7690 FROM ('||l_row_to_column_query||') RTCQ,
7691 ('||l_row_to_column_query||') EXT
7692 WHERE RTCQ.ATTR_GROUP_ID = EXT.ATTR_GROUP_ID
7693 AND RTCQ.ROW_IDENTIFIER <> EXT.ROW_IDENTIFIER'||
7694 l_rtcq_to_ext_where_base||
7695 l_rtcq_to_ext_whr_uks_idnt_chk||')'
7696 USING p_data_set_id,
7697 p_data_set_id,
7698 l_attr_group_metadata_obj.ATTR_GROUP_NAME,
7699 p_data_set_id,
7700 l_attr_group_metadata_obj.ATTR_GROUP_NAME;
7701
7702 END IF;
7703
7704 code_debug(' After validation for more than one logical AG rows int the interface table pointing to same row in the EXT table ' ,2);
7705
7706 END IF; --*p_validate-IF-4*
7707
7708 IF(p_validate OR p_do_req_def_valiadtion) THEN --*p_validate-IF-4.5* BugFix:5355722
7709 -------------------------------------------------------------------------
7710 -- Update other attributes i ag if atleast one of attribute has failed
7711 -------------------------------------------------------------------------
7712 --considering the G_PS_BAD_ATTR_OR_AG_METADATA is the starting point for the intermittent errors.
7713
7714 /* Fix for bug#9678667 - Start */
7715 /*
7716 EXECUTE IMMEDIATE
7717 'UPDATE '||p_interface_table_name||' UAI1' ||
7718 ' SET UAI1.PROCESS_STATUS = UAI1.PROCESS_STATUS + '||G_PS_OTHER_ATTRS_INVALID||
7719 ' WHERE UAI1.DATA_SET_ID = :data_set_id '||--p_data_set_id||
7720 ' AND BITAND(PROCESS_STATUS,'||G_PS_OTHER_ATTRS_INVALID||') = 0'||
7721 ' AND UAI1.ROW_IDENTIFIER IN'||
7722 ' (SELECT DISTINCT UAI2.ROW_IDENTIFIER'||
7723 ' FROM '||p_interface_table_name||' UAI2'||
7724 ' WHERE UAI2.DATA_SET_ID = :data_set_id '||--p_data_set_id||
7725 ' AND UAI2.PROCESS_STATUS >= '||G_PS_BAD_ATTR_OR_AG_METADATA ||
7726 ' AND UAI2.ATTR_GROUP_INT_NAME = UAI1.ATTR_GROUP_INT_NAME)'
7727 USING p_data_set_id, p_data_set_id; */ /*Fix for bug#9678667. Literal to bind*/
7728
7729 EXECUTE IMMEDIATE
7730 'UPDATE '||p_interface_table_name||' UAI1' ||
7731 ' SET UAI1.PROCESS_STATUS = UAI1.PROCESS_STATUS + '||G_PS_OTHER_ATTRS_INVALID||
7732 ' WHERE UAI1.DATA_SET_ID = :data_set_id '||
7733 ' AND BITAND(PROCESS_STATUS,'||G_PS_OTHER_ATTRS_INVALID||') = 0'||
7734 ' AND (UAI1.ROW_IDENTIFIER, UAI1.ATTR_GROUP_INT_NAME) IN '||
7735 ' (SELECT /*+ UNNEST CARDINALITY(UAI2,10) INDEX(UAI2,EGO_ITM_USR_ATTR_INTRFC_N3) */ '|| /* Bug 9678667 */
7736 ' UAI2.ROW_IDENTIFIER, UAI2.ATTR_GROUP_INT_NAME '||
7737 ' FROM '||p_interface_table_name||' UAI2'||
7738 ' WHERE UAI2.DATA_SET_ID = :data_set_id '||
7739 ' AND UAI2.PROCESS_STATUS >= '||G_PS_BAD_ATTR_OR_AG_METADATA ||
7740 ' )'
7741 USING p_data_set_id, p_data_set_id;
7742 /* Fix for bug#9678667 - End */
7743
7744 END IF; --*p_validate-IF-4.5*
7745
7746 -------------------------------------------------------
7747 -- Before we do the DML for developer defined attr
7748 -- we gotta make sure that there exists a row in the
7749 -- production table for the processed attributes.
7750 -------------------------------------------------------
7751
7752 IF(NOT l_ag_id_col_exists AND p_do_dml ) THEN
7753
7754 l_dynamic_Sql := ' DECLARE ext_id_tbl EGO_USER_ATTRS_BULK_PVT.EGO_USER_ATTRS_BULK_NUM_TBL; '||l_pk_blk_tbl_declare||
7755 ' created_by_tbl EGO_USER_ATTRS_BULK_PVT.EGO_USER_ATTRS_BULK_NUM_TBL; '||
7756 ' creation_date_tbl EGO_USER_ATTRS_BULK_PVT.EGO_USER_ATTRS_BULK_DATE_TBL; lu_by_tbl EGO_USER_ATTRS_BULK_PVT.EGO_USER_ATTRS_BULK_NUM_TBL; '||
7757 ' lu_date_tbl EGO_USER_ATTRS_BULK_PVT.EGO_USER_ATTRS_BULK_DATE_TBL; '||l_dl_blk_tbl_declare||l_class_blk_tbl_declare||
7758 '
7759 '||
7760 ' BEGIN '||
7761 ' SELECT EGO_EXTFWK_S.NEXTVAL, '||l_concat_pk_cols_sel||
7762 ' CREATED_BY,CREATION_DATE,LAST_UPDATED_BY,LAST_UPDATE_DATE '||
7763 ' BULK COLLECT INTO ext_id_tbl, '||l_pk_blk_tbl_list||l_dl_blk_tbl_list||','||l_class_blk_tbl_list||
7764 ', created_by_tbl, creation_date_tbl, lu_by_tbl, lu_date_tbl '||
7765 ' FROM ( SELECT '|| l_concat_pk_cols_sel ||
7766 ' MAX(CREATED_BY) CREATED_BY, MAX(CREATION_DATE) CREATION_DATE, MAX(LAST_UPDATED_BY) LAST_UPDATED_BY, MAX(LAST_UPDATE_DATE) LAST_UPDATE_DATE '||
7767 ' FROM '||p_interface_table_name||' UAI2 '||
7768 ' WHERE NOT EXISTS ( '||
7769 ' SELECT NULL '||
7770 ' FROM '||l_ext_b_table_name||' B '||
7771 ' WHERE 1=1 '||l_concat_pk_cols_UAI2|| ' ) '||
7772 ' AND DATA_SET_ID = :data_set_id '||
7773 ' AND ATTR_GROUP_TYPE = :attr_group_type '||
7774 ' AND PROCESS_STATUS = '||G_PS_IN_PROCESS||' '||
7775 ' AND BITAND(PROCESS_STATUS, '||G_PS_NO_PRIVILEGES||') = 0 '||
7776 ' GROUP BY ' || l_concat_pk_cols_sel ||' NULL ); '||
7777 ' IF (ext_id_tbl.COUNT > 0) THEN '||
7778 ' FORALL i IN ext_id_tbl.FIRST .. ext_id_tbl.LAST '||
7779 ' INSERT INTO '||l_ext_b_table_name||
7780 ' ( EXTENSION_ID, '||l_concat_pk_cols_sel||
7781 ' CREATED_BY,CREATION_DATE,LAST_UPDATED_BY,LAST_UPDATE_DATE) '||
7782 ' VALUES ( ext_id_tbl(i) , '||l_pk_blk_tbl_list_2||l_dl_blk_tbl_list_2||','||l_class_blk_tbl_list_2||
7783 ' ,created_by_tbl(i), creation_date_tbl(i), '||
7784 ' lu_by_tbl(i) , lu_date_tbl(i) ); '||
7785 ' FORALL i IN ext_id_tbl.FIRST .. ext_id_tbl.LAST '||
7786 ' INSERT INTO '||l_ext_tl_table_name||
7787 ' ( EXTENSION_ID, '||l_concat_pk_cols_sel||
7788 ' CREATED_BY,CREATION_DATE,LAST_UPDATED_BY,LAST_UPDATE_DATE, '||
7789 ' SOURCE_LANG,LANGUAGE ) '||
7790 ' SELECT ext_id_tbl(i) , '||l_pk_blk_tbl_list_2||l_dl_blk_tbl_list_2||','||l_class_blk_tbl_list_2||
7791 ' ,created_by_tbl(i), creation_date_tbl(i), '||
7792 ' lu_by_tbl(i) , lu_date_tbl(i),USERENV(''LANG''),LANGUAGE_CODE '||
7793 ' FROM FND_LANGUAGES WHERE INSTALLED_FLAG IN (''I'', ''B'')'||
7794 ' ; '||
7795 ' END IF;'||
7796 ' END;';
7797
7798 code_debug(' DML for inserting dummy rows for dev defined attrs:'||l_dynamic_Sql,3);
7799 EXECUTE IMMEDIATE l_dynamic_sql
7800 USING p_data_Set_id, p_attr_group_type;
7801 code_debug(' After DML for inserting dummy rows for dev defined attrs.'||l_dynamic_Sql,2);
7802 EXECUTE IMMEDIATE
7803 'UPDATE '||p_interface_table_name||' UAI1
7804 SET TRANSACTION_TYPE = '''||EGO_USER_ATTRS_DATA_PVT.G_UPDATE_MODE||'''
7805 WHERE UAI1.DATA_SET_ID = :data_set_id
7806 AND UAI1.PROCESS_STATUS = '||G_PS_IN_PROCESS||'
7807 AND ATTR_GROUP_INT_NAME = :attr_grp_int_name
7808 AND ATTR_GROUP_TYPE = :attr_group_type '
7809 USING p_data_set_id, l_attr_group_metadata_obj.ATTR_GROUP_NAME, p_attr_group_type ;
7810
7811 END IF;
7812
7813 /*
7814 DYLAN: TO DO: This will mark every interface table row in the logical
7815 AG rows as an error; our error reporting will have to take care of that.
7816 */
7817
7818 IF (l_do_dml_for_this_ag AND p_do_dml) THEN -- *p_do_dml-IF-2*
7819
7820 code_debug(' Before Delete DML ' ,2);
7821
7822 --========--
7823 -- DELETE --
7824 --========--
7825 ---------------------------------------------------------------
7826 -- For deletion we fetch the extension IDs we'll be deleting --
7827 -- and then delete from both tables using a FORALL statement --
7828 ---------------------------------------------------------------
7829 l_dynamic_sql :=
7830 'DECLARE '||l_db_col_tbl_declare_ext_id||
7831 ' BEGIN SELECT EXT.EXTENSION_ID'||
7832 ' BULK COLLECT INTO '||l_db_col_tbl_collect_ext_id||
7833 ' FROM '||
7834 l_ext_vl_name||
7835 ' EXT, ('||l_row_to_column_query||') RTCQ WHERE 1=1'||
7836 l_rtcq_to_ext_where_base||
7837 l_rtcq_to_ext_where_uks||
7838 ' AND RTCQ.TRANSACTION_TYPE='''||
7839 EGO_USER_ATTRS_DATA_PVT.G_DELETE_MODE||
7840 '''; IF (ext_id_tbl.COUNT > 0) THEN
7841 FORALL i IN ext_id_tbl.FIRST .. ext_id_tbl.LAST
7842 DELETE FROM '||l_ext_b_table_name||' EXT
7843 WHERE '||l_db_col_tbl_where_ext_id||
7844 '; END IF;';
7845
7846 IF (l_ext_tl_table_name IS NOT NULL) THEN
7847 l_dynamic_sql := l_dynamic_sql||
7848 'IF (ext_id_tbl.COUNT > 0) THEN
7849 FORALL i IN ext_id_tbl.FIRST .. ext_id_tbl.LAST
7850 DELETE FROM '||l_ext_tl_table_name||' EXT
7851 WHERE '||l_db_col_tbl_where_ext_id||
7852 '; END IF;';
7853 END IF;
7854
7855 l_dynamic_sql := l_dynamic_sql||'END;';
7856
7857 code_debug(' Delete DML for AG '||l_attr_group_metadata_obj.ATTR_GROUP_NAME ,3);
7858 code_debug(' :--:'||l_dynamic_sql ,3);
7859
7860 IF(l_ag_id_col_exists) THEN
7861 EXECUTE IMMEDIATE l_dynamic_sql
7862 USING p_data_set_id,
7863 l_attr_group_metadata_obj.ATTR_GROUP_NAME,
7864 l_attr_group_metadata_obj.ATTR_GROUP_ID;
7865 ELSE
7866 EXECUTE IMMEDIATE l_dynamic_sql
7867 USING p_data_set_id,
7868 l_attr_group_metadata_obj.ATTR_GROUP_NAME;
7869 END IF;
7870
7871 code_debug(' After Delete DML ' ,2);
7872
7873 --========--
7874 -- UPDATE --
7875 --========--
7876
7877 /*
7878 DYLAN: TO DO:
7879 done 1159: Shalu's bug with multiple MR AG rows with same UKs in SYNC mode
7880 done 1159: Look at UPDATE behavior for LANGs
7881 done 1159: Set explicit NULLs
7882 done? 1159: need to ensure that MD code sorts Attrs by sequence
7883 11510: Also look into only firing DMLs for TTs we have in DS
7884 11510: we need to use IF (l_attr_group_metadata_obj.ATTR_GROUP_ID_FLAG ='Y') THEN
7885 11510+: deal with no-CC case (throughout the code)
7886 11510+: get rid of PK, DL data type fetches
7887 */
7888
7889 code_debug(' Before Update DML ' ,2);
7890 /**bug 14145164 start **/
7891 IF (LENGTH(l_db_col_tbl_set_b_attrs) > 0 OR
7892 LENGTH(l_db_col_tbl_set_tl_attrs) > 0) THEN
7893 BEGIN
7894 cur_l_dynamic_sql_clob := dbms_sql.open_cursor;
7895 l_dynamic_sql_clob :=
7896 'DECLARE '||l_db_col_tbl_declare_ext_id||' lang_tbl EGO_USER_ATTRS_BULK_PVT.EGO_USER_ATTRS_BULK_STR_TBL;'||
7897 l_db_col_tbl_declare_attrs||
7898 ' BEGIN SELECT LANGUAGE, EXTENSION_ID'||
7899 l_final_b_col_list ||
7900 l_final_tl_col_list ||
7901 ' BULK COLLECT INTO lang_tbl,'||l_db_col_tbl_collect_ext_id||
7902 l_db_col_tbl_collect_b_attrs||
7903 l_db_col_tbl_collect_tl_attrs||
7904 ' FROM '||
7905 '(SELECT USERENV(''LANG'') LANGUAGE, EXT.EXTENSION_ID'||
7906 l_rtcq_alias_b_cols_list||
7907 l_rtcq_alias_tl_cols_list||
7908 ' FROM '||
7909 l_ext_vl_name||
7910 ' EXT, ('||l_row_to_column_query||') RTCQ WHERE 1=1'||
7911 l_rtcq_to_ext_where_base||
7912 l_rtcq_to_ext_where_uks||
7913 ' AND RTCQ.TRANSACTION_TYPE='''||
7914 EGO_USER_ATTRS_DATA_PVT.G_UPDATE_MODE||''' )'||
7915 ' UNION '||
7916 '(SELECT INTF_TL.LANGUAGE LANGUAGE, '|| --Added the following UNIONED Query for R12C.. this wud bring bak
7917 ' INTFRTCQ.EXTENSION_ID EXTENSION_ID '|| --the results from the intf_tl table as well for updating records
7918 l_rtcq_alias_b_cols_list_1 || --in other languages. We assume that the Row_identifier in the itnf table
7919 l_rtcq_alias_tl_cols_list_1 || --is unique for ag rows and we can join it with unique_identifier in tl tbl
7920 ' FROM EGO_INTERFACE_TL INTF_TL, '|| --to get the correct joins.
7921 ' ( SELECT USERENV(''LANG'') LANGUAGE, RTCQ.ROW_IDENTIFIER, EXT.EXTENSION_ID'||
7922 l_rtcq_alias_b_cols_list||
7923 l_rtcq_alias_tl_cols_list||
7924 ' FROM '||
7925 l_ext_vl_name||
7926 ' EXT, ('||l_row_to_column_query||') RTCQ WHERE 1=1'||
7927 l_rtcq_to_ext_where_base||
7928 l_rtcq_to_ext_where_uks||
7929 ' AND RTCQ.TRANSACTION_TYPE='''||
7930 EGO_USER_ATTRS_DATA_PVT.G_UPDATE_MODE||''''||
7931 ' ) INTFRTCQ '||
7932 'WHERE INTF_TL.SET_PROCESS_ID = :data_set_id '||
7933 ' AND UPPER(INTF_TL.TABLE_NAME) = '''||UPPER(p_interface_table_name)||''' '||
7934 ' AND INTF_TL.UNIQUE_ID = INTFRTCQ.ROW_IDENTIFIER ) ;';
7935
7936 code_debug('Before updating B table Length of l_dynamic_sql_clob :'||dbms_lob.getlength(l_dynamic_sql_clob),3);
7937 ------------------------------------------------
7938 -- If we need to update the B table, we do so --
7939 ------------------------------------------------
7940 IF (LENGTH(l_db_col_tbl_set_b_attrs) > 1) THEN
7941 l_dynamic_sql_clob := l_dynamic_sql_clob|| -- Bug 13923293
7942 'IF (ext_id_tbl.COUNT > 0) THEN
7943 FORALL i IN ext_id_tbl.FIRST .. ext_id_tbl.LAST
7944 UPDATE '||l_ext_b_table_name||' EXT
7945 SET '||SUBSTR(l_db_col_tbl_set_b_attrs, 2)||
7946 ',LAST_UPDATED_BY=:current_user_id,
7947 LAST_UPDATE_DATE=:current_date,
7948 LAST_UPDATE_LOGIN=:current_login_id,
7949 REQUEST_ID = :request_id
7950 WHERE '||l_db_col_tbl_where_ext_id||';
7951 END IF;';
7952 END IF;
7953 code_debug('Before updating TL table Length of l_dynamic_sql_clob: '||dbms_lob.getlength(l_dynamic_sql_clob),3);
7954 -------------------------------------------------
7955 -- If we need to update the TL table, we do so --
7956 -------------------------------------------------
7957 IF (l_ext_tl_table_name IS NOT NULL AND
7958 LENGTH(l_db_col_tbl_set_tl_attrs) > 1) THEN
7959
7960 l_dynamic_sql_clob := l_dynamic_sql_clob|| -- Bug 13923293
7961 'IF (ext_id_tbl.COUNT > 0) THEN
7962 FORALL i IN ext_id_tbl.FIRST .. ext_id_tbl.LAST
7963 UPDATE '||l_ext_tl_table_name||' EXT
7964 SET '||SUBSTR(l_db_col_tbl_set_tl_attrs, 2)||
7965 ',LAST_UPDATED_BY=:current_user_id,
7966 LAST_UPDATE_DATE=:current_date,
7967 LAST_UPDATE_LOGIN=:current_login_id,
7968 SOURCE_LANG=lang_tbl(i)
7969 WHERE '||l_db_col_tbl_where_ext_id||
7970 ' AND (LANGUAGE=lang_tbl(i) OR SOURCE_LANG=lang_tbl(i));
7971 END IF;';
7972 --Added for bug 4473128(gnanda): In case there are no B table columns to be updated but we have some TL
7973 -- table columns being updated the request id should still be updated in the
7974 -- B table so that events can be raised properly, if required.
7975 IF (LENGTH(l_db_col_tbl_set_b_attrs) <= 1 OR l_db_col_tbl_set_b_attrs IS NULL) THEN
7976 l_dynamic_sql_clob := l_dynamic_sql_clob|| -- Bug 13923293
7977 ' IF (ext_id_tbl.COUNT > 0) THEN
7978 FORALL i IN ext_id_tbl.FIRST .. ext_id_tbl.LAST
7979 UPDATE '||l_ext_b_table_name||' EXT '||
7980 ' SET LAST_UPDATED_BY=:current_user_id,
7981 LAST_UPDATE_DATE=:current_date,
7982 LAST_UPDATE_LOGIN=:current_login_id,
7983 REQUEST_ID = :request_id
7984 WHERE '||l_db_col_tbl_where_ext_id||';
7985 END IF; ';
7986 END IF;
7987
7988 END IF;
7989
7990 l_dynamic_sql_clob := l_dynamic_sql_clob||'END;';
7991 -----------------------------------------------
7992 -- Even though there are either 7 or 11 bind --
7993 -- variables in this statement, we only need --
7994 -- to bind the 5 distinct variables, because --
7995 -- dynamic PL/SQL blocks bind by name --
7996 -----------------------------------------------
7997
7998 code_debug(' Update DML for AG '||l_attr_group_metadata_obj.ATTR_GROUP_NAME ,3);
7999 code_debug(' :--: final length : '||dbms_lob.getlength(l_dynamic_sql_clob) ,3);
8000
8001 DBMS_SQL.PARSE(cur_l_dynamic_sql_clob, l_dynamic_sql_clob,
8002 DBMS_SQL.NATIVE);
8003
8004 IF(l_ag_id_col_exists) THEN
8005 DBMS_SQL.BIND_VARIABLE(cur_l_dynamic_sql_clob, ':data_set_id', p_data_set_id);
8006 DBMS_SQL.BIND_VARIABLE(cur_l_dynamic_sql_clob, ':attr_group_name', l_attr_group_metadata_obj.ATTR_GROUP_NAME);
8007 DBMS_SQL.BIND_VARIABLE(cur_l_dynamic_sql_clob, ':curr_attr_group_id', l_attr_group_metadata_obj.ATTR_GROUP_ID);
8008 DBMS_SQL.BIND_VARIABLE(cur_l_dynamic_sql_clob, ':current_user_id', G_CURRENT_USER_ID);
8009 DBMS_SQL.BIND_VARIABLE(cur_l_dynamic_sql_clob, ':current_date', SYSDATE);
8010 DBMS_SQL.BIND_VARIABLE(cur_l_dynamic_sql_clob, ':current_login_id', G_CURRENT_LOGIN_ID);
8011 DBMS_SQL.BIND_VARIABLE(cur_l_dynamic_sql_clob, ':request_id', G_REQUEST_ID);
8012 l_dummy_ret_val := DBMS_SQL.EXECUTE(cur_l_dynamic_sql_clob);
8013
8014 ELSE
8015 DBMS_SQL.BIND_VARIABLE(cur_l_dynamic_sql_clob, ':data_set_id', p_data_set_id);
8016 DBMS_SQL.BIND_VARIABLE(cur_l_dynamic_sql_clob, ':curr_attr_group_id', l_attr_group_metadata_obj.ATTR_GROUP_ID);
8017 DBMS_SQL.BIND_VARIABLE(cur_l_dynamic_sql_clob, ':current_user_id', G_CURRENT_USER_ID);
8018 DBMS_SQL.BIND_VARIABLE(cur_l_dynamic_sql_clob, ':current_date', SYSDATE);
8019 DBMS_SQL.BIND_VARIABLE(cur_l_dynamic_sql_clob, ':current_login_id', G_CURRENT_LOGIN_ID);
8020 DBMS_SQL.BIND_VARIABLE(cur_l_dynamic_sql_clob, ':request_id', G_REQUEST_ID);
8021 l_dummy_ret_val := DBMS_SQL.EXECUTE(cur_l_dynamic_sql_clob);
8022
8023 END IF;
8024
8025 code_debug(' Don with executing the update DML ' ,2);
8026 DBMS_SQL.CLOSE_CURSOR(cur_l_dynamic_sql_clob);
8027 EXCEPTION
8028 WHEN OTHERS THEN
8029 DBMS_SQL.CLOSE_CURSOR(cur_l_dynamic_sql_clob);
8030 RAISE;
8031 END;
8032
8033 END IF;
8034 /**bug 14145164 end **/
8035
8036 /** start comment for bug 14145164
8037
8038 IF (LENGTH(l_db_col_tbl_set_b_attrs) > 0 OR
8039 LENGTH(l_db_col_tbl_set_tl_attrs) > 0) THEN
8040 l_dynamic_sql :=
8041 'DECLARE '||l_db_col_tbl_declare_ext_id||' lang_tbl EGO_USER_ATTRS_BULK_PVT.EGO_USER_ATTRS_BULK_STR_TBL;'||
8042 l_db_col_tbl_declare_attrs||
8043 ' BEGIN SELECT LANGUAGE, EXTENSION_ID'||
8044 l_final_b_col_list ||
8045 l_final_tl_col_list ||
8046 ' BULK COLLECT INTO lang_tbl,'||l_db_col_tbl_collect_ext_id||
8047 l_db_col_tbl_collect_b_attrs||
8048 l_db_col_tbl_collect_tl_attrs||
8049 ' FROM '||
8050 '(SELECT USERENV(''LANG'') LANGUAGE, EXT.EXTENSION_ID'||
8051 l_rtcq_alias_b_cols_list||
8052 l_rtcq_alias_tl_cols_list||
8053 ' FROM '||
8054 l_ext_vl_name||
8055 ' EXT, ('||l_row_to_column_query||') RTCQ WHERE 1=1'||
8056 l_rtcq_to_ext_where_base||
8057 l_rtcq_to_ext_where_uks||
8058 ' AND RTCQ.TRANSACTION_TYPE='''||
8059 EGO_USER_ATTRS_DATA_PVT.G_UPDATE_MODE||''' )'||
8060 ' UNION '||
8061 '(SELECT INTF_TL.LANGUAGE LANGUAGE, '|| --Added the following UNIONED Query for R12C.. this wud bring bak
8062 ' INTFRTCQ.EXTENSION_ID EXTENSION_ID '|| --the results from the intf_tl table as well for updating records
8063 l_rtcq_alias_b_cols_list_1 || --in other languages. We assume that the Row_identifier in the itnf table
8064 l_rtcq_alias_tl_cols_list_1 || --is unique for ag rows and we can join it with unique_identifier in tl tbl
8065 ' FROM EGO_INTERFACE_TL INTF_TL, '|| --to get the correct joins.
8066 ' ( SELECT USERENV(''LANG'') LANGUAGE, RTCQ.ROW_IDENTIFIER, EXT.EXTENSION_ID'||
8067 l_rtcq_alias_b_cols_list||
8068 l_rtcq_alias_tl_cols_list||
8069 ' FROM '||
8070 l_ext_vl_name||
8071 ' EXT, ('||l_row_to_column_query||') RTCQ WHERE 1=1'||
8072 l_rtcq_to_ext_where_base||
8073 l_rtcq_to_ext_where_uks||
8074 ' AND RTCQ.TRANSACTION_TYPE='''||
8075 EGO_USER_ATTRS_DATA_PVT.G_UPDATE_MODE||''''||
8076 ' ) INTFRTCQ '||
8077 'WHERE INTF_TL.SET_PROCESS_ID = :data_set_id '||
8078 ' AND UPPER(INTF_TL.TABLE_NAME) = '''||UPPER(p_interface_table_name)||''' '||
8079 ' AND INTF_TL.UNIQUE_ID = INTFRTCQ.ROW_IDENTIFIER ) ;';
8080
8081 l_dynamic_sql_2 := ''; --clear l_dynamic_sql_2 since we are in a loop, for bug 14335411
8082 ------------------------------------------------
8083 -- If we need to update the B table, we do so --
8084 ------------------------------------------------
8085 IF (LENGTH(l_db_col_tbl_set_b_attrs) > 1) THEN
8086 l_dynamic_sql_2 := l_dynamic_sql_2|| -- Bug 13923293
8087 'IF (ext_id_tbl.COUNT > 0) THEN
8088 FORALL i IN ext_id_tbl.FIRST .. ext_id_tbl.LAST
8089 UPDATE '||l_ext_b_table_name||' EXT
8090 SET '||SUBSTR(l_db_col_tbl_set_b_attrs, 2)||
8091 ',LAST_UPDATED_BY=:current_user_id,
8092 LAST_UPDATE_DATE=:current_date,
8093 LAST_UPDATE_LOGIN=:current_login_id,
8094 REQUEST_ID = :request_id
8095 WHERE '||l_db_col_tbl_where_ext_id||';
8096 END IF;';
8097 END IF;
8098 -------------------------------------------------
8099 -- If we need to update the TL table, we do so --
8100 -------------------------------------------------
8101 IF (l_ext_tl_table_name IS NOT NULL AND
8102 LENGTH(l_db_col_tbl_set_tl_attrs) > 1) THEN
8103
8104 l_dynamic_sql_2 := l_dynamic_sql_2|| -- Bug 13923293
8105 'IF (ext_id_tbl.COUNT > 0) THEN
8106 FORALL i IN ext_id_tbl.FIRST .. ext_id_tbl.LAST
8107 UPDATE '||l_ext_tl_table_name||' EXT
8108 SET '||SUBSTR(l_db_col_tbl_set_tl_attrs, 2)||
8109 ',LAST_UPDATED_BY=:current_user_id,
8110 LAST_UPDATE_DATE=:current_date,
8111 LAST_UPDATE_LOGIN=:current_login_id,
8112 SOURCE_LANG=lang_tbl(i)
8113 WHERE '||l_db_col_tbl_where_ext_id||
8114 ' AND (LANGUAGE=lang_tbl(i) OR SOURCE_LANG=lang_tbl(i));
8115 END IF;';
8116
8117 --Added for bug 4473128(gnanda): In case there are no B table columns to be updated but we have some TL
8118 -- table columns being updated the request id should still be updated in the
8119 -- B table so that events can be raised properly, if required.
8120 IF (LENGTH(l_db_col_tbl_set_b_attrs) <= 1 OR l_db_col_tbl_set_b_attrs IS NULL) THEN
8121 l_dynamic_sql_2 := l_dynamic_sql_2|| -- Bug 13923293
8122 ' IF (ext_id_tbl.COUNT > 0) THEN
8123 FORALL i IN ext_id_tbl.FIRST .. ext_id_tbl.LAST
8124 UPDATE '||l_ext_b_table_name||' EXT '||
8125 ' SET LAST_UPDATED_BY=:current_user_id,
8126 LAST_UPDATE_DATE=:current_date,
8127 LAST_UPDATE_LOGIN=:current_login_id,
8128 REQUEST_ID = :request_id
8129 WHERE '||l_db_col_tbl_where_ext_id||';
8130 END IF; ';
8131 END IF;
8132
8133 END IF;
8134
8135 l_dynamic_sql_2 := l_dynamic_sql_2||'END;';
8136 -----------------------------------------------
8137 -- Even though there are either 7 or 11 bind --
8138 -- variables in this statement, we only need --
8139 -- to bind the 5 distinct variables, because --
8140 -- dynamic PL/SQL blocks bind by name --
8141 -----------------------------------------------
8142
8143 code_debug(' Update DML for AG '||l_attr_group_metadata_obj.ATTR_GROUP_NAME ,3);
8144 code_debug(' :--:'||l_dynamic_sql||l_dynamic_sql_2 ,3);
8145
8146
8147 IF(l_ag_id_col_exists) THEN
8148 EXECUTE IMMEDIATE l_dynamic_sql||l_dynamic_sql_2 -- Bug 13923293
8149 USING p_data_set_id,
8150 l_attr_group_metadata_obj.ATTR_GROUP_NAME,
8151 l_attr_group_metadata_obj.ATTR_GROUP_ID,
8152 G_CURRENT_USER_ID,
8153 SYSDATE,
8154 G_CURRENT_LOGIN_ID,
8155 G_REQUEST_ID;
8156 ELSE
8157
8158 EXECUTE IMMEDIATE l_dynamic_sql||l_dynamic_sql_2 -- Bug 13923293
8159 USING p_data_set_id,
8160 l_attr_group_metadata_obj.ATTR_GROUP_NAME,
8161 G_CURRENT_USER_ID,
8162 SYSDATE,
8163 G_CURRENT_LOGIN_ID,
8164 G_REQUEST_ID;
8165 END IF;
8166
8167 code_debug(' Don with executing the update DML ' ,2);
8168
8169 END IF;
8170 /** end comment for bug 14145164 **/
8171
8172
8173 --========--
8174 -- INSERT --
8175 --========--
8176
8177 --------------------------------------------
8178 -- First we insert rows into the B table --
8179 -- (even if there are no non-trans Attrs) --
8180 --------------------------------------------
8181 /*
8182 GNANDA:
8183 Note:Since we had to support TL UK's and we had to insert the row_identifier*-2
8184 temporarily in the REQUEST_ID column so that while inserting rows in the
8185 TL table we can identify the exact extension_id's inserted for the rows in
8186 the B table. We would set the request_id back to the correct value after
8187 we are done with the TL table inserions.
8188 Without this it was failing if the AG had TL UK and more than
8189 one rows were being inserted for the MR AG.
8190 */
8191
8192 -- Bug 10097738 : Start
8193 IF (l_attr_group_metadata_obj.MULTI_ROW_CODE = 'Y') THEN
8194 -- The below function returns 'T' or 'F'
8195 l_column_exists:=EGO_USER_ATTRS_DATA_PVT.HAS_COLUMN_IN_TABLE_VIEW(l_ext_b_table_name,'UNIQUE_VALUE');
8196 END IF;
8197
8198 IF (l_attr_group_metadata_obj.MULTI_ROW_CODE = 'Y' AND FND_API.TO_BOOLEAN(l_column_exists)) THEN
8199 l_unique_value_col := ', UNIQUE_VALUE ';
8200 l_unique_value := ', EGO_EXTFWK_S.CURRVAL '; -- inserting the ext id value in UNIQUE_VALUE column for MR UDAs
8201 ELSE
8202 l_unique_value_col := '';
8203 l_unique_value := '';
8204 END IF;
8205 -- Bug 10097738 : End
8206
8207 l_dynamic_sql :=
8208 'INSERT INTO '||l_ext_b_table_name||
8209 '(REQUEST_ID, EXTENSION_ID'||
8210 l_no_alias_cc_pk_dl_list||
8211 l_unique_value_col||' '; /* Bug 10097738 */
8212
8213 IF (l_ag_id_col_exists) THEN
8214 l_dynamic_sql := l_dynamic_sql|| ',ATTR_GROUP_ID, ';
8215 ELSE
8216 l_dynamic_sql := l_dynamic_sql|| ' , ';
8217 END IF;
8218
8219 l_dynamic_sql := l_dynamic_sql|| ' CREATED_BY,
8220 CREATION_DATE,
8221 LAST_UPDATED_BY,
8222 LAST_UPDATE_DATE,
8223 LAST_UPDATE_LOGIN'||
8224 l_no_alias_b_cols_list||
8225 ') SELECT RTCQ.ROW_IDENTIFIER*-2 , EGO_EXTFWK_S.NEXTVAL'||
8226 l_rtcq_alias_cc_pk_dl_list||
8227 l_unique_value||' '; /* Bug 10097738 */
8228 IF (l_ag_id_col_exists) THEN
8229 l_dynamic_sql := l_dynamic_sql||',:curr_attr_group_id, ';
8230 ELSE
8231 l_dynamic_sql := l_dynamic_sql||', ';
8232 END IF;
8233 l_dynamic_sql := l_dynamic_sql|| ' :current_user_id,
8234 :current_date,
8235 :current_user_id,
8236 :current_date,
8237 :current_login_id'||
8238 l_no_alias_b_values_list||
8239 ' FROM ('||l_row_to_column_query||') RTCQ
8240 WHERE RTCQ.TRANSACTION_TYPE = '''||
8241 EGO_USER_ATTRS_DATA_PVT.G_CREATE_MODE||'''';
8242
8243 code_debug(' Before Inserting into B table ' ,2);
8244 code_debug(' B table Insert DML for AG '||l_attr_group_metadata_obj.ATTR_GROUP_NAME ,3);
8245 code_debug(' :--:'||l_dynamic_sql ,3);
8246
8247 IF(l_ag_id_col_exists) THEN
8248
8249
8250 EXECUTE IMMEDIATE l_dynamic_sql
8251 USING l_attr_group_metadata_obj.ATTR_GROUP_ID,
8252 G_CURRENT_USER_ID,
8253 SYSDATE,
8254 G_CURRENT_USER_ID,
8255 SYSDATE,
8256 G_CURRENT_LOGIN_ID,
8257 p_data_set_id,
8258 l_attr_group_metadata_obj.ATTR_GROUP_NAME;
8259 ELSE
8260
8261
8262 EXECUTE IMMEDIATE l_dynamic_sql
8263 USING G_CURRENT_USER_ID,
8264 SYSDATE,
8265 G_CURRENT_USER_ID,
8266 SYSDATE,
8267 G_CURRENT_LOGIN_ID,
8268 p_data_set_id,
8269 l_attr_group_metadata_obj.ATTR_GROUP_NAME;
8270 END IF;
8271
8272 code_debug(' After Inserting into B table ' ,2);
8273
8274 -----------------------------------------------
8275 -- Next we insert rows into the TL table, if --
8276 -- there is one (again, we insert even if --
8277 -- there are no trans Attrs, for VL joining) --
8278 -----------------------------------------------
8279
8280 code_debug(' Before Inserting into TL table ' ,2);
8281
8282 IF (l_ext_tl_table_name IS NOT NULL) THEN
8283
8284 l_dynamic_sql :=
8285 'INSERT INTO '||l_ext_tl_table_name||
8286 '(EXTENSION_ID'||
8287 l_no_alias_cc_pk_dl_list||' ';
8288
8289 IF (l_ag_id_col_exists) THEN
8290 l_dynamic_sql := l_dynamic_sql|| ',ATTR_GROUP_ID, ';
8291 ELSE
8292 l_dynamic_sql := l_dynamic_sql|| ' , ';
8293 END IF;
8294
8295 l_dynamic_sql := l_dynamic_sql|| ' CREATED_BY,
8296 CREATION_DATE,
8297 LAST_UPDATED_BY,
8298 LAST_UPDATE_DATE,
8299 LAST_UPDATE_LOGIN,
8300 SOURCE_LANG,
8301 LANGUAGE'||
8302 l_no_alias_tl_cols_list||
8303 ') SELECT EXT.EXTENSION_ID'||
8304 l_rtcq_alias_cc_pk_dl_list||' ';
8305
8306 IF (l_ag_id_col_exists) THEN
8307 l_dynamic_sql := l_dynamic_sql||',EXT.ATTR_GROUP_ID, ';
8308 ELSE
8309 l_dynamic_sql := l_dynamic_sql||', ';
8310 END IF;
8311
8312 l_dynamic_sql := l_dynamic_sql||'EXT.CREATED_BY,
8313 EXT.CREATION_DATE,
8314 EXT.LAST_UPDATED_BY,
8315 EXT.LAST_UPDATE_DATE,
8316 EXT.LAST_UPDATE_LOGIN,
8317 USERENV(''LANG''),
8318 L.LANGUAGE_CODE'||
8319 l_no_alias_tl_cols_sel_list||
8320 ' FROM '||l_ext_b_table_name||
8321 ' EXT, FND_LANGUAGES L, ('||l_row_to_column_query||') RTCQ
8322 WHERE
8323 (RTCQ.ROW_IDENTIFIER*-2) = EXT.REQUEST_ID
8324 AND L.INSTALLED_FLAG IN (''I'', ''B'')'||
8325 l_rtcq_to_ext_where_base||
8326 l_rtcq_to_ext_where_uks||
8327 ' AND RTCQ.TRANSACTION_TYPE='''||
8328 EGO_USER_ATTRS_DATA_PVT.G_CREATE_MODE||'''';
8329
8330 code_debug(' TL table Insert DML for AG '||l_attr_group_metadata_obj.ATTR_GROUP_NAME ,3);
8331 code_debug(' :--:'||l_dynamic_sql ,3);
8332
8333 IF(l_ag_id_col_exists) THEN
8334 EXECUTE IMMEDIATE l_dynamic_sql
8335 USING p_data_set_id,
8336 l_attr_group_metadata_obj.ATTR_GROUP_NAME,
8337 l_attr_group_metadata_obj.ATTR_GROUP_ID;
8338 ELSE
8339 EXECUTE IMMEDIATE l_dynamic_sql
8340 USING p_data_set_id,
8341 l_attr_group_metadata_obj.ATTR_GROUP_NAME;
8342 END IF;
8343
8344 code_debug(' After Inserting into TL table ' ,2);
8345
8346 /*
8347 GNANDA:
8348 Note:As mentioned above we had populated the request_id column with the row_identifier*-2
8349 in the INTF table we need to set it back to the correqt value now, since we are done
8350 with inserting rows in the TL table.
8351 */
8352 IF (l_ag_id_col_exists) THEN
8353 -- Bug 9851212 : Removed product specific table name.
8354 l_dynamic_sql := ' UPDATE '||l_ext_b_table_name||'
8355 SET REQUEST_ID = :REQUEST_ID
8356 WHERE ATTR_GROUP_ID = :atr_grp_id
8357 AND (REQUEST_ID'||l_concat_pk_cols||') IN
8358 ( SELECT /*+ cardinality(EGO_ITM_USR_ATTR_INTRFC,10) */
8359 (ROW_IDENTIFIER * -2)'||l_concat_pk_cols||'
8360 FROM '||p_interface_table_name||'
8361 WHERE DATA_SET_ID = :DATA_SET_ID
8362 AND ATTR_GROUP_ID = :ATTR_GROUP_ID
8363 AND PROCESS_STATUS = '||G_PS_IN_PROCESS||' )';
8364 -- ' AND REQUEST_ID <-1 ';
8365 EXECUTE IMMEDIATE l_dynamic_sql
8366 USING G_REQUEST_ID,l_attr_group_metadata_obj.ATTR_GROUP_ID, p_data_set_id, l_attr_group_metadata_obj.ATTR_GROUP_ID ; /* Fix for bug#9678667 */
8367 END IF;
8368
8369 END IF;
8370
8371 END IF; --ending l_do_dml_for_this_ag and p_do_dml check (*p_do_dml-IF-2*)
8372
8373 -- Following If condition is fix for bug 5842178
8374 IF (l_is_post_event_enabled_flag IS NULL OR l_is_post_event_enabled_flag <> 'Y') THEN
8375 l_dummy := 0;
8376
8377 SELECT COUNT(*)
8378 INTO l_dummy
8379 FROM EGO_ATTR_GROUP_DL
8380 WHERE ATTR_GROUP_ID = l_attr_group_metadata_obj.ATTR_GROUP_ID
8381 AND RAISE_POST_EVENT = 'Y';
8382
8383 IF(l_dummy > 0)THEN
8384 l_is_post_event_enabled_flag := 'Y';
8385 END IF;
8386 END IF;
8387 -- End of fix for bug 5842178.
8388 ----------------------------------------------------
8389 -- reporting of errors for all failed rows belonging
8390 -- to this attr grp.
8391 ----------------------------------------------------
8392 -- Bug 9705869 : Added p_do_dml, so that the errors are logged even while doing DML (i.e to log errors for duplicate records etc..)
8393 IF (p_validate OR p_do_req_def_valiadtion OR p_do_dml) THEN --*p-validate-IF-5* BugFix:5355722
8394
8395 code_debug(' In validate mode: Before logging errors ' ,2);
8396
8397 Log_Errors_Now(
8398 p_entity_id => p_entity_id
8399 ,p_entity_index => p_entity_index
8400 ,p_entity_code => p_entity_code
8401 ,p_object_name => p_object_name
8402 ,p_pk1_column_name => l_pk1_column_name
8403 ,p_pk2_column_name => l_pk2_column_name
8404 ,p_pk3_column_name => l_pk3_column_name
8405 ,p_pk4_column_name => l_pk4_column_name
8406 ,p_pk5_column_name => l_pk5_column_name
8407 ,p_classification_col_name => l_class_code_column_name
8408 ,p_interface_table_name => p_interface_table_name
8409 ,p_err_col_static_sql => l_err_col_static_sql
8410 ,p_err_where_static_sql => l_err_where_static_sql
8411 ,p_attr_grp_meta_obj => l_attr_group_metadata_obj
8412 ,p_data_set_id => p_data_set_id /*Fix for bug#9678667. Literal to bind*/
8413 );
8414
8415 code_debug(' After logging errors ' ,2);
8416
8417 END IF; -- *p-validate-IF-5* ending p_validate IF
8418
8419 /*Code changes for bug 8485287*/
8420 /* Added code to raise postAttributeChange BE for call of public API to create Item. */
8421 ----------------------------------------------------
8422 -- AFTER THE DML, NOW WE WILL RAISE THE POST EVENT
8423 -- (if we need to ...) gnanda
8424 ----------------------------------------------------
8425
8426 IF (p_do_dml) THEN --search for *p_do_dml-IF-YJain* to locate the END
8427 BEGIN
8428 SELECT BUSINESS_EVENT_NAME
8429 INTO l_new_post_event_name
8430 FROM EGO_FND_DESC_FLEXS_EXT
8431 WHERE APPLICATION_ID = p_application_id
8432 AND DESCRIPTIVE_FLEXFIELD_NAME = p_attr_group_type;
8433 EXCEPTION
8434 WHEN NO_DATA_FOUND THEN
8435 l_new_post_event_name := NULL;
8436 END;
8437
8438 -- Bug 10090254 Changes : Start
8439 /*
8440 SELECT BUSINESS_EVENT_FLAG
8441 INTO l_new_post_event_enabled_flag
8442 FROM EGO_FND_DSC_FLX_CTX_EXT
8443 WHERE ATTR_GROUP_ID = l_attr_group_metadata_obj.ATTR_GROUP_ID;
8444 */
8445
8446 SELECT COUNT(*)
8447 INTO l_dummy
8448 FROM EGO_ATTR_GROUP_DL
8449 WHERE ATTR_GROUP_ID = l_attr_group_metadata_obj.ATTR_GROUP_ID
8450 AND RAISE_POST_EVENT = 'Y';
8451
8452 IF (l_dummy > 0) THEN
8453 l_new_post_event_enabled_flag := 'Y';
8454 ELSE
8455 l_new_post_event_enabled_flag := 'N';
8456 END IF;
8457
8458 code_debug('inside raising events l_new_post_event_enabled_flag - '||l_new_post_event_enabled_flag);
8459 -- Bug 10090254 Changes : End
8460
8461 IF (l_new_post_event_name IS NOT NULL AND l_new_post_event_enabled_flag = 'Y' AND G_REQUEST_ID =-1) THEN
8462 -- IF (l_event_name IS NOT NULL AND l_is_event_enabled_flag = 'Y') THEN
8463
8464 --------------------------------------------------------------------
8465 -- HERE WE RAISE POST EVENT FOR ALL THE AG ROWS *NOT* BEING DELETED
8466 --------------------------------------------------------------------
8467 OPEN l_dynamic_cursor FOR l_dynamic_sql_1
8468 USING p_data_set_id, l_attr_group_metadata_obj.ATTR_GROUP_NAME;
8469 LOOP
8470 FETCH l_dynamic_cursor INTO l_ag_deflatened_row;
8471 EXIT WHEN l_dynamic_cursor%NOTFOUND;
8472
8473 l_event_key := SUBSTRB(l_new_post_event_name, 1, 225) || '-' || TO_CHAR(SYSDATE, 'J.SSSSS');
8474 EGO_WF_WRAPPER_PVT.Raise_WF_Business_Event(
8475 p_event_name => l_new_post_event_name
8476 ,p_event_key => l_event_key
8477 ,p_dml_type => l_ag_deflatened_row.TRANSACTION_TYPE
8478 ,p_attr_group_name => l_ag_deflatened_row.ATTR_GROUP_INT_NAME
8479 ,p_extension_id => l_ag_deflatened_row.EXTENSION_ID
8480 ,p_primary_key_1_col_name => l_pk1_column_name
8481 ,p_primary_key_1_value => l_ag_deflatened_row.PK1
8482 ,p_primary_key_2_col_name => l_pk2_column_name
8483 ,p_primary_key_2_value => l_ag_deflatened_row.PK2
8484 ,p_primary_key_3_col_name => l_pk3_column_name
8485 ,p_primary_key_3_value => l_ag_deflatened_row.PK3
8486 ,p_primary_key_4_col_name => l_pk4_column_name
8487 ,p_primary_key_4_value => l_ag_deflatened_row.PK4
8488 ,p_primary_key_5_col_name => l_pk5_column_name
8489 ,p_primary_key_5_value => l_ag_deflatened_row.PK5
8490 ,p_data_level_1_col_name => l_data_level_column_1
8491 ,p_data_level_1_value => l_ag_deflatened_row.DL1
8492 ,p_data_level_2_col_name => l_data_level_column_2
8493 ,p_data_level_2_value => l_ag_deflatened_row.DL1
8494 ,p_data_level_3_col_name => l_data_level_column_3
8495 ,p_data_level_3_value => l_ag_deflatened_row.DL1
8496 ,p_user_row_identifier => l_ag_deflatened_row.ROW_IDENTIFIER
8497 ,p_entity_id => p_entity_id
8498 ,p_entity_index => p_entity_index
8499 ,p_entity_code => p_entity_code
8500 ,p_add_errors_to_fnd_stack => G_ADD_ERRORS_TO_FND_STACK
8501 );
8502 END LOOP;
8503 CLOSE l_dynamic_cursor;
8504 ----------------------------------------------------------------
8505 -- HERE WE RAISE POST EVENT FOR ALL THE AG ROWS *BEING* DELETED
8506 ----------------------------------------------------------------
8507 OPEN l_dynamic_cursor FOR l_dynamic_sql_delete_post
8508 USING p_data_set_id, l_attr_group_metadata_obj.ATTR_GROUP_NAME;
8509 LOOP
8510 FETCH l_dynamic_cursor INTO l_ag_deflatened_row;
8511 EXIT WHEN l_dynamic_cursor%NOTFOUND;
8512 l_event_key := SUBSTRB(l_new_post_event_name, 1, 225) || '-' || TO_CHAR(SYSDATE, 'J.SSSSS');
8513 EGO_WF_WRAPPER_PVT.Raise_WF_Business_Event(
8514 p_event_name => l_new_post_event_name
8515 ,p_event_key => l_event_key
8516 ,p_dml_type => l_ag_deflatened_row.TRANSACTION_TYPE
8517 ,p_attr_group_name => l_ag_deflatened_row.ATTR_GROUP_INT_NAME
8518 ,p_extension_id => l_ag_deflatened_row.EXTENSION_ID
8519 ,p_primary_key_1_col_name => l_pk1_column_name
8520 ,p_primary_key_1_value => l_ag_deflatened_row.PK1
8521 ,p_primary_key_2_col_name => l_pk2_column_name
8522 ,p_primary_key_2_value => l_ag_deflatened_row.PK2
8523 ,p_primary_key_3_col_name => l_pk3_column_name
8524 ,p_primary_key_3_value => l_ag_deflatened_row.PK3
8525 ,p_primary_key_4_col_name => l_pk4_column_name
8526 ,p_primary_key_4_value => l_ag_deflatened_row.PK4
8527 ,p_primary_key_5_col_name => l_pk5_column_name
8528 ,p_primary_key_5_value => l_ag_deflatened_row.PK5
8529 ,p_data_level_1_col_name => l_data_level_column_1
8530 ,p_data_level_1_value => l_ag_deflatened_row.DL1
8531 ,p_data_level_2_col_name => l_data_level_column_2
8532 ,p_data_level_2_value => l_ag_deflatened_row.DL1
8533 ,p_data_level_3_col_name => l_data_level_column_3
8534 ,p_data_level_3_value => l_ag_deflatened_row.DL1
8535 ,p_user_row_identifier => l_ag_deflatened_row.ROW_IDENTIFIER
8536 ,p_entity_id => p_entity_id
8537 ,p_entity_index => p_entity_index
8538 ,p_entity_code => p_entity_code
8539 ,p_add_errors_to_fnd_stack => G_ADD_ERRORS_TO_FND_STACK
8540 );
8541 END LOOP;
8542 CLOSE l_dynamic_cursor;
8543 END IF; -- IF (l_new_post_event_name IS NOT NULL AND l_new_post_event_enabled_flag = 'Y' AND G_REQUEST_ID =-1) THEN
8544 END IF ; --end for *p_do_dml-IF-YJain*
8545 /* End code changes for bug 8485287*/
8546
8547 END LOOP;
8548
8549 -- Bug : 4099546
8550 CLOSE l_dynamic_dist_ag_cursor;
8551 code_debug(' After the Attr Group Level Validation loop ' ,1);
8552
8553 IF (ERROR_HANDLER.Get_Message_Count > l_no_of_err_recs) THEN
8554 x_return_status := G_FND_RET_STS_WARNING;
8555 ELSE
8556 x_return_status := FND_API.G_RET_STS_SUCCESS;
8557 END IF;
8558
8559 --
8560 -- let us write the error logs first
8561 --
8562 IF (FND_API.To_Boolean(p_init_error_handler)) THEN
8563 ERROR_HANDLER.Log_Error
8564 (p_write_err_to_inttable => 'Y'
8565 ,p_write_err_to_conclog => 'Y'
8566 ,p_write_err_to_debugfile => ERROR_HANDLER.Get_Debug()
8567 );
8568 IF (ERROR_HANDLER.Get_Debug() = 'Y') THEN
8569 ERROR_HANDLER.Close_Debug_Session();
8570 END IF;
8571 END IF;
8572
8573 IF (l_req_num_cursor_id) IS NOT NULL THEN
8574 DBMS_SQL.Close_Cursor(l_req_num_cursor_id);
8575 END IF;
8576 IF (l_req_char_cursor_id) IS NOT NULL THEN
8577 DBMS_SQL.Close_Cursor(l_req_char_cursor_id);
8578 END IF;
8579 IF (l_req_date_cursor_id) IS NOT NULL THEN
8580 DBMS_SQL.Close_Cursor(l_req_date_cursor_id);
8581 END IF;
8582 IF (l_default_num_cursor_id) IS NOT NULL THEN
8583 DBMS_SQL.Close_Cursor(l_default_num_cursor_id);
8584 END IF;
8585 IF (l_default_date_cursor_id) IS NOT NULL THEN
8586 DBMS_SQL.Close_Cursor(l_default_date_cursor_id);
8587 END IF;
8588 IF (l_default_char_cursor_id) IS NOT NULL THEN
8589 DBMS_SQL.Close_Cursor(l_default_char_cursor_id);
8590 END IF;
8591 IF (l_bad_tvs_sql_cursor_id) IS NOT NULL THEN
8592 DBMS_SQL.Close_Cursor(l_bad_tvs_sql_cursor_id);
8593 END IF;
8594
8595 IF (l_sr_tvs_num_cursor_id1) IS NOT NULL THEN
8596 DBMS_SQL.Close_Cursor(l_sr_tvs_num_cursor_id1);
8597 END IF;
8598 IF (l_sr_tvs_num_cursor_id2) IS NOT NULL THEN
8599 DBMS_SQL.Close_Cursor(l_sr_tvs_num_cursor_id2);
8600 END IF;
8601 IF (l_sr_tvs_date_cursor_id1) IS NOT NULL THEN
8602 DBMS_SQL.Close_Cursor(l_sr_tvs_date_cursor_id1);
8603 END IF;
8604 IF (l_sr_tvs_date_cursor_id2) IS NOT NULL THEN
8605 DBMS_SQL.Close_Cursor(l_sr_tvs_date_cursor_id2);
8606 END IF;
8607 IF (l_sr_tvs_str_cursor_id1) IS NOT NULL THEN
8608 DBMS_SQL.Close_Cursor(l_sr_tvs_str_cursor_id1);
8609 END IF;
8610 IF (l_sr_tvs_str_cursor_id2) IS NOT NULL THEN
8611 DBMS_SQL.Close_Cursor(l_sr_tvs_str_cursor_id2);
8612 END IF;
8613
8614 IF (l_tvs_char_cursor_id) IS NOT NULL THEN
8615 DBMS_SQL.Close_Cursor(l_tvs_char_cursor_id);
8616 END IF;
8617 IF (l_tvs_num_cursor_id) IS NOT NULL THEN
8618 DBMS_SQL.Close_Cursor(l_tvs_num_cursor_id);
8619 END IF;
8620 IF (l_tvs_date_cursor_id) IS NOT NULL THEN
8621 DBMS_SQL.Close_Cursor(l_tvs_date_cursor_id);
8622 END IF;
8623 IF (l_bad_bindattrs_tvs_cursor_id) IS NOT NULL THEN
8624 DBMS_SQL.Close_Cursor(l_bad_bindattrs_tvs_cursor_id);
8625 END IF;
8626
8627 -- Bug 10151142: Start
8628 IF (l_dynamic_sql_cursor_id) IS NOT NULL THEN
8629 DBMS_SQL.Close_Cursor(l_dynamic_sql_cursor_id);
8630 END IF;
8631 IF (l_dynamic_sql_1_cursor_id) IS NOT NULL THEN
8632 DBMS_SQL.Close_Cursor(l_dynamic_sql_1_cursor_id);
8633 END IF;
8634 -- Bug 10151142: End
8635
8636 --------------------------------------------------
8637 -- MARKING ALL THE ROWS AS 3 WHICH HAVE ERRORED --
8638 --------------------------------------------------
8639 --considering the G_PS_BAD_ATTR_OR_AG_METADATA is the starting point for the intermittent errors.
8640 -- Bug 9705869 : Added p_do_dml, so that the errors are logged even while doing DML (i.e to log errors for duplicate records etc..)
8641 IF (p_validate OR p_do_req_def_valiadtion OR p_do_dml) THEN -- *p_validate-IF-6* BugFix:5355722
8642 l_dynamic_sql :=
8643 'UPDATE '||p_interface_table_name||' UAI1 '||
8644 ' SET UAI1.PROCESS_STATUS = '||G_PS_GENERIC_ERROR||
8645 ' WHERE UAI1.DATA_SET_ID = :data_set_id '||--p_data_set_id||
8646 ' AND UAI1.ROW_IDENTIFIER IN '||
8647 ' (SELECT DISTINCT UAI2.ROW_IDENTIFIER'||
8648 ' FROM '||p_interface_table_name||' UAI2'||
8649 ' WHERE UAI2.DATA_SET_ID = :data_set_id '||--p_data_set_id||
8650 ' AND UAI2.PROCESS_STATUS >= '||G_PS_BAD_ATTR_OR_AG_METADATA ||')';
8651 EXECUTE IMMEDIATE l_dynamic_sql
8652 USING p_data_set_id, p_data_set_id;/*Fix for bug#9678667. Literal to bind*/
8653 END IF; -- *p_validate-IF-6* ending p_validate
8654
8655 ------------------------------------------------------------------------
8656 -- WE ARE DONE WITH THE PROCESSING... NOW IF THERE EXIST SUCCESSFUL --
8657 -- ROWS IN THE INTERFACE TABLE AND POST EVENT FLAG IS ENABLED --
8658 -- WE NEED TO RAISE A POST EVENT. THERE IS JUST ONE POST EVENT RAISED --
8659 -- WITH REQUEST_ID AS A PARAMER. --
8660 ------------------------------------------------------------------------
8661 IF (p_do_dml) THEN -- *p_do_dml-IF-3*
8662
8663 BEGIN
8664 SELECT BUSINESS_EVENT_NAME
8665 INTO l_event_name
8666 FROM EGO_FND_DESC_FLEXS_EXT
8667 WHERE APPLICATION_ID = p_application_id
8668 AND DESCRIPTIVE_FLEXFIELD_NAME = p_attr_group_type;
8669 EXCEPTION
8670 WHEN NO_DATA_FOUND THEN
8671 l_event_name := NULL;
8672 END;
8673
8674 l_successful_rowcount := 0;
8675 EXECUTE IMMEDIATE ' SELECT COUNT(*) FROM '|| p_interface_table_name ||
8676 ' WHERE DATA_SET_ID = :data_set_id '||
8677 ' AND ATTR_GROUP_TYPE = '''||p_attr_group_type||''' '||
8678 ' AND PROCESS_STATUS = '||G_PS_IN_PROCESS
8679 INTO l_successful_rowcount
8680 USING p_data_set_id;
8681 l_is_second_post_event_flag := EGO_WF_WRAPPER_PVT.Get_PostAttr_Change_Event ();
8682 IF (l_event_name IS NOT NULL AND l_is_post_event_enabled_flag = 'Y' AND l_successful_rowcount > 0 AND G_REQUEST_ID IS NOT NULL AND G_REQUEST_ID <>-1)
8683 THEN --code changes for bug 8485287
8684
8685 l_event_key := SUBSTRB(l_event_name, 1, 225) || '-' || TO_CHAR(SYSDATE, 'J.SSSSS');
8686 EGO_WF_WRAPPER_PVT.Raise_WF_Business_Event(
8687 p_event_name => l_event_name
8688 ,p_event_key => l_event_key
8689 ,p_request_id => G_REQUEST_ID
8690 ,p_entity_id => p_entity_id
8691 ,p_entity_index => p_entity_index
8692 ,p_entity_code => p_entity_code
8693 ,p_add_errors_to_fnd_stack => G_ADD_ERRORS_TO_FND_STACK
8694 );
8695 END IF;
8696 ----------------------------------
8697 -- DONE WITH RAISING POST EVENT
8698 ----------------------------------
8699 END IF; -- *p_do_dml-IF-3*
8700
8701 -- Standard check of p_commit
8702 IF FND_API.To_Boolean(p_commit) THEN
8703 COMMIT WORK;
8704 END IF;
8705
8706 code_debug(l_api_name|| 'Done ');
8707
8708 EXCEPTION
8709 WHEN G_NO_ROWS_IN_INTF_TABLE THEN
8710 -- We need not do any thing since there are no rows in the intf table to process.
8711 NULL;
8712
8713 WHEN OTHERS THEN
8714 code_debug('######## Oops ... came into the when others block-'||SQLERRM ,2);
8715 IF FND_API.To_Boolean(p_commit) THEN
8716 ROLLBACK TO Bulk_Load_User_Attrs_Data_PVT;
8717 END IF;
8718 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
8719 x_msg_data := 'Executing - '||G_PKG_NAME||'.'||l_api_name||' '||SQLERRM;
8720 -----------------------------------------------------
8721 -- MARKING ALL THE ROWS AS SINCE UN-EXPECTED ERROR --
8722 -- HAS OCCURED AND WE ARE ROLLING BACK --
8723 -----------------------------------------------------
8724 /* FOR TESTING COMMENTING THIS OUT
8725
8726 l_dynamic_sql :=
8727 'UPDATE '||p_interface_table_name||' UAI1
8728 SET UAI1.PROCESS_STATUS = '||G_PS_GENERIC_ERROR||'
8729 WHERE UAI1.DATA_SET_ID = :data_set_id
8730 AND UAI1.PROCESS_STATUS = '||G_PS_IN_PROCESS;
8731
8732 --EXECUTE IMMEDIATE l_dynamic_sql USING p_data_set_id;
8733
8734 */
8735 -----------------------------------------------------------------
8736 -- Get a default row identifier to use in logging this message --
8737 -----------------------------------------------------------------
8738 l_dynamic_sql :=
8739 'SELECT TRANSACTION_ID
8740 FROM '||p_interface_table_name||' UAI1
8741 WHERE UAI1.DATA_SET_ID = :data_set_id
8742 AND ROWNUM = 1';
8743 EXECUTE IMMEDIATE l_dynamic_sql
8744 INTO l_dummy
8745 USING p_data_set_id;
8746
8747 ERROR_HANDLER.Add_Error_Message(
8748 p_message_text => x_msg_data
8749 ,p_row_identifier => l_dummy
8750 ,p_application_id => 'EGO'
8751 ,p_message_type => FND_API.G_RET_STS_ERROR
8752 ,p_entity_id => G_ENTITY_ID
8753 ,p_table_name => p_interface_table_name
8754 ,p_entity_code => G_ENTITY_CODE
8755 );
8756
8757 END Bulk_Load_User_Attrs_Data;
8758
8759 ------------------------------------------------------------------
8760
8761
8762
8763
8764
8765
8766
8767
8768
8769
8770
8771
8772 ---------------------------------------------------------------------------------------------------------------------
8773 --API Name : Apply_Template_On_Intf_Table
8774 --Description : The api would apply the attribute values in the template to the interface
8775 -- table, this api should be called after the rows in the interface table are
8776 -- validated.
8777 --parameters required : p_api_version
8778 -- p_application_id
8779 -- p_object_name
8780 -- p_interface_table_name
8781 -- p_data_set_id
8782 -- p_template_id
8783 -- p_Classification_code
8784 -- p_attr_group_type
8785 -- p_target_entity_sql : this parameter should contain a query which would give a list of
8786 -- entities on which the template is to be applied and which template
8787 -- is to be applied and a rownum column.
8788 -- e.g. 'SELECT ROWNUM ENTITYNUMBER,
8789 -- Decode(ROWNUM, 1,256678,2,256679,null) INVENTORY_ITEM_ID,
8790 -- 204 ORGANIZATION_ID, 14978 ITEM_CATALOG_GROUP_ID, -
8791 -- 1 TEMPLATE_ID
8792 -- FROM ego_itm_usr_Attr_intrfc WHERE ROWNUM<3';
8793 --Return parameter : x_return_status = 1 if no associations exist
8794 -- 0 in all other cases
8795 -- x_return_status
8796 -- x_errorcode
8797 -- x_msg_count
8798 -- x_msg_data
8799 --
8800 --
8801 ----------------------------------------------------------------------------------------------------------------------
8802
8803 PROCEDURE Apply_Template_On_Intf_Table (
8804 p_api_version IN NUMBER
8805 ,p_application_id IN NUMBER
8806 ,p_object_name IN VARCHAR2
8807 ,p_interface_table_name IN VARCHAR2
8808 ,p_data_set_id IN NUMBER
8809 ,p_attr_group_type IN VARCHAR2
8810 ,p_request_id IN NUMBER
8811 ,p_program_application_id IN NUMBER
8812 ,p_program_id IN NUMBER
8813 ,p_program_update_date IN DATE
8814 ,p_current_user_party_id IN NUMBER
8815 ,p_target_entity_sql IN VARCHAR2
8816 ,p_process_status IN NUMBER DEFAULT G_PS_IN_PROCESS
8817 ,p_class_code_hierarchy_sql IN VARCHAR2 DEFAULT NULL
8818 ,p_hierarchy_template_tbl_sql IN VARCHAR2 DEFAULT NULL
8819 ,x_return_status OUT NOCOPY VARCHAR2
8820 ,x_errorcode OUT NOCOPY NUMBER
8821 ,x_msg_count OUT NOCOPY NUMBER
8822 ,x_msg_data OUT NOCOPY VARCHAR2
8823 ) IS
8824
8825 l_api_name CONSTANT VARCHAR2(30) := 'Apply_template_on_intf_table';
8826 l_api_version CONSTANT NUMBER := 1.0;
8827
8828 CURSOR data_level_cols_cursor (cp_application_id IN NUMBER
8829 ,cp_attr_group_type IN VARCHAR2)
8830 IS
8831 SELECT data_level_id
8832 ,data_level_name
8833 ,pk1_column_name
8834 ,pk1_column_type
8835 ,pk2_column_name
8836 ,pk2_column_type
8837 ,pk3_column_name
8838 ,pk3_column_type
8839 ,pk4_column_name
8840 ,pk4_column_type
8841 ,pk5_column_name
8842 ,pk5_column_type
8843 FROM EGO_DATA_LEVEL_B
8844 WHERE application_id = cp_application_id
8845 AND attr_group_type = cp_attr_group_type
8846 ORDER BY data_level_id;
8847
8848 G_NO_ROWS_IN_INTF_TABLE EXCEPTION;
8849
8850 l_num_dl_columns NUMBER := 0;
8851 l_class_code_column_name VARCHAR2(30);
8852 l_class_code_column_type VARCHAR2(30);
8853
8854 l_ext_vl_name VARCHAR2(30);
8855
8856 l_pk1_column_name VARCHAR2(30);
8857 l_pk2_column_name VARCHAR2(30);
8858 l_pk3_column_name VARCHAR2(30);
8859 l_pk4_column_name VARCHAR2(30);
8860 l_pk5_column_name VARCHAR2(30);
8861
8862 l_dl_col_decode_list VARCHAR2(1000);
8863 l_dl_col_list VARCHAR2(1000);
8864 l_temp VARCHAR2(100);
8865
8866 l_has_data_level_id BOOLEAN;
8867 l_dl_col_templrtcq_list VARCHAR2(1000);
8868
8869 TYPE data_level_info IS RECORD
8870 (dl_id NUMBER
8871 ,dl_name VARCHAR2(150)
8872 ,dl_column1 VARCHAR2(150)
8873 ,dl_column2 VARCHAR2(150)
8874 ,dl_column3 VARCHAR2(150)
8875 ,dl_column4 VARCHAR2(150)
8876 ,dl_column5 VARCHAR2(150)
8877 -- ,dl_column_type1 VARCHAR2(150)
8878 -- ,dl_column_type2 VARCHAR2(150)
8879 -- ,dl_column_type3 VARCHAR2(150)
8880 -- ,dl_column_type4 VARCHAR2(150)
8881 -- ,dl_column_type5 VARCHAR2(150)
8882 -- ,dl_disp_name VARCHAR2(240)
8883 ,dl_concat_pk_cols VARCHAR2(1000)
8884 ,dl_col_list VARCHAR2(1000)
8885 ,dl_intfrtcq_trtcq_join VARCHAR2(1000)
8886 ,dl_ext_trtcq_join VARCHAR2(1000)
8887 );
8888
8889 TYPE data_level_table IS TABLE OF data_level_info;
8890
8891 l_dl_record DATA_LEVEL_TABLE;
8892
8893 l_dynamic_sql VARCHAR2(32767);
8894 l_ag_to_process EGO_USER_ATTRS_BULK_NUM_TBL;
8895 l_template_to_process EGO_USER_ATTRS_BULK_NUM_TBL;
8896 l_cc_to_process EGO_USER_ATTRS_BULK_NUM_TBL;
8897
8898 l_ag_to_process_list VARCHAR2(10000);
8899 l_template_to_process_list VARCHAR2(10000);
8900 l_cc_to_process_list VARCHAR2(10000);
8901
8902 l_concat_pk_cols VARCHAR2(400) := '';
8903 l_concat_pk_cols_entities VARCHAR2(800) := '';
8904 l_pk_col_where_ent_uartcq VARCHAR2(1500) := '';
8905 l_ext_templrtcq_join VARCHAR2(3000);
8906 l_ext_templrtcq_pk_join VARCHAR2(1000);
8907 l_ext_templrtcq_uk_join VARCHAR2(2000);
8908 l_dl_intfrtcq_trtcq_join VARCHAR2(200);
8909 l_dl_ext_trtcq_join VARCHAR2(400);
8910 l_uk_tmpl_intf_rtcq_where VARCHAR2(5000);
8911 l_attr_null_chk_decode VARCHAR2(10000);
8912
8913 l_attr_group_metadata_obj EGO_ATTR_GROUP_METADATA_OBJ;
8914 l_attr_metadata_table EGO_ATTR_METADATA_TABLE;
8915 l_template_table_RTCQ VARCHAR2(32767);
8916 l_intf_table_RTCQ VARCHAR2(32767);
8917 l_ag_row_cursor INTEGER;
8918 l_dummy_number NUMBER;
8919 l_num_value NUMBER;
8920 l_str_value VARCHAR2(4000);
8921 l_date_value DATE;
8922 l_value VARCHAR2(32767);
8923 l_union_tbl_value VARCHAR2(3000);
8924 l_rows_to_insert_sql VARCHAR2(32767);
8925 l_max_trans_id NUMBER;
8926 l_max_row_identifier NUMBER;
8927 l_ag_id_col_exists BOOLEAN;
8928 l_ag_id_clause VARCHAR2(100);
8929 l_ag_assoc_data_level_id NUMBER;
8930 l_assoc_data_level NUMBER;
8931 l_num_val_col VARCHAR2(2000);
8932 l_template_table_sql VARCHAR2(10000);
8933 l_ext_b_table_name VARCHAR2(100);
8934
8935 BEGIN
8936
8937 code_debug(l_api_name||' Starting ',0);
8938 code_debug(l_api_name||' p_application_id '|| p_application_id );
8939 code_debug(l_api_name||' p_object_name '|| p_object_name );
8940 code_debug(l_api_name||' p_interface_table_name '|| p_interface_table_name );
8941 code_debug(l_api_name||' p_data_set_id '|| p_data_set_id );
8942 code_debug(l_api_name||' p_attr_group_type '|| p_attr_group_type );
8943 code_debug(l_api_name||' p_request_id '|| p_request_id );
8944 code_debug(l_api_name||' p_program_application_id '|| p_program_application_id);
8945 code_debug(l_api_name||' p_program_id '|| p_program_id );
8946 code_debug(l_api_name||' p_program_update_date '|| p_program_update_date );
8947 code_debug(l_api_name||' p_current_user_party_id '|| p_current_user_party_id );
8948 code_debug(l_api_name||' p_target_entity_sql '|| p_target_entity_sql );
8949
8950 IF(p_hierarchy_template_tbl_sql IS NULL) THEN
8951 l_template_table_sql := ' EGO_TEMPL_ATTRIBUTES ';
8952 ELSE
8953 l_template_table_sql := p_hierarchy_template_tbl_sql;
8954 END IF;
8955
8956 l_dynamic_sql := ' SELECT count(*) FROM ( '||p_target_entity_sql||') ';
8957 EXECUTE IMMEDIATE l_dynamic_sql INTO l_dummy_number;
8958 code_debug (l_api_name ||' no records to be processed '||l_dummy_number);
8959 IF l_dummy_number = 0 THEN
8960 code_debug (l_api_name ||' returning as there are no records to process ');
8961 x_return_status := FND_API.G_RET_STS_SUCCESS;
8962 RETURN;
8963 END IF;
8964
8965 l_dynamic_sql :=
8966 ' SELECT MAX(ROW_IDENTIFIER),MAX(TRANSACTION_ID)'||
8967 ' FROM '||p_interface_table_name||
8968 ' WHERE DATA_SET_ID = :data_Set_id ';
8969
8970 -----------------------------------------
8971 -- Fetch the PK column names and data --
8972 -- types for the passed-in object name --
8973 -----------------------------------------
8974 SELECT PK1_COLUMN_NAME,
8975 PK2_COLUMN_NAME,
8976 PK3_COLUMN_NAME,
8977 PK4_COLUMN_NAME,
8978 PK5_COLUMN_NAME
8979 INTO l_pk1_column_name,
8980 l_pk2_column_name,
8981 l_pk3_column_name,
8982 l_pk4_column_name,
8983 l_pk5_column_name
8984 FROM FND_OBJECTS
8985 WHERE OBJ_NAME = p_object_name;
8986
8987 ----------------------------------------------------------------------------
8988 -- CONSTRUCTING THE PK, DL AND THE CLASS CODE COLUMN SELECT LIST. --
8989 ----------------------------------------------------------------------------
8990
8991 IF (l_pk1_column_name IS NOT NULL) THEN
8992 l_concat_pk_cols := l_pk1_column_name||',';
8993 l_concat_pk_cols_entities := l_concat_pk_cols_entities||' TEMPLRTCQ.'||l_pk1_column_name||',';
8994 l_pk_col_where_ent_uartcq := l_pk_col_where_ent_uartcq || ' AND TEMPLRTCQ.'||l_pk1_column_name||' = INTFRTCQ.'||l_pk1_column_name||'(+)';
8995 -- l_ext_templrtcq_pk_join := l_ext_templrtcq_pk_join||' TEMPLRTCQ.'||l_pk1_column_name||' = EXT.'||l_pk1_column_name||'(+) '; -- Bug 13414358
8996 END IF;
8997
8998 IF (l_pk2_column_name IS NOT NULL) THEN
8999 l_concat_pk_cols := l_concat_pk_cols ||l_pk2_column_name||',';
9000 l_concat_pk_cols_entities := l_concat_pk_cols_entities||' TEMPLRTCQ.'||l_pk2_column_name||',';
9001 l_pk_col_where_ent_uartcq := l_pk_col_where_ent_uartcq || ' AND TEMPLRTCQ.'||l_pk2_column_name||' = INTFRTCQ.'||l_pk2_column_name||'(+)';
9002 -- l_ext_templrtcq_pk_join := l_ext_templrtcq_pk_join||' AND TEMPLRTCQ.'||l_pk2_column_name||' = EXT.'||l_pk2_column_name||'(+) '; -- Bug 13414358
9003 END IF;
9004
9005 IF (l_pk3_column_name IS NOT NULL) THEN
9006 l_concat_pk_cols := l_concat_pk_cols ||l_pk3_column_name||',';
9007 l_concat_pk_cols_entities := l_concat_pk_cols_entities||' TEMPLRTCQ.'||l_pk3_column_name||',';
9008 l_pk_col_where_ent_uartcq := l_pk_col_where_ent_uartcq || ' AND TEMPLRTCQ.'||l_pk3_column_name||' = INTFRTCQ.'||l_pk3_column_name||'(+)';
9009 -- l_ext_templrtcq_pk_join := l_ext_templrtcq_pk_join||' AND TEMPLRTCQ.'||l_pk3_column_name||' = EXT.'||l_pk3_column_name||'(+) '; -- Bug 13414358
9010 END IF;
9011
9012 IF (l_pk4_column_name IS NOT NULL) THEN
9013 l_concat_pk_cols := l_concat_pk_cols ||l_pk4_column_name||',';
9014 l_concat_pk_cols_entities := l_concat_pk_cols_entities||' TEMPLRTCQ.'||l_pk4_column_name||',';
9015 l_pk_col_where_ent_uartcq := l_pk_col_where_ent_uartcq || ' AND TEMPLRTCQ.'||l_pk4_column_name||' = INTFRTCQ.'||l_pk4_column_name||'(+)';
9016 -- l_ext_templrtcq_pk_join := l_ext_templrtcq_pk_join||' AND TEMPLRTCQ.'||l_pk4_column_name||' = EXT.'||l_pk4_column_name||'(+) '; -- Bug 13414358
9017 END IF;
9018
9019 IF (l_pk5_column_name IS NOT NULL) THEN
9020 l_concat_pk_cols := l_concat_pk_cols ||l_pk5_column_name||',';
9021 l_concat_pk_cols_entities := l_concat_pk_cols_entities||' TEMPLRTCQ.'||l_pk5_column_name||',';
9022 l_pk_col_where_ent_uartcq := l_pk_col_where_ent_uartcq || ' AND TEMPLRTCQ.'||l_pk5_column_name||' = INTFRTCQ.'||l_pk5_column_name||'(+)';
9023 -- l_ext_templrtcq_pk_join := l_ext_templrtcq_pk_join||' AND TEMPLRTCQ.'||l_pk5_column_name||' = EXT.'||l_pk5_column_name||'(+) '; -- Bug 13414358
9024 END IF;
9025
9026 code_debug(l_api_name||' Phase 1');
9027 code_debug(l_api_name||' l_concat_pk_cols: '||l_concat_pk_cols);
9028 code_debug(l_api_name||' l_concat_pk_cols_entities: '||l_concat_pk_cols_entities);
9029 code_debug(l_api_name||' l_pk_col_where_ent_uartcq: '||l_pk_col_where_ent_uartcq);
9030 -- code_debug(l_api_name||' l_ext_templrtcq_pk_join: '||l_ext_templrtcq_pk_join); -- Bug 13414358
9031
9032 SELECT classification_col_name, classification_col_type
9033 INTO l_class_code_column_name, l_class_code_column_type
9034 FROM ego_fnd_objects_ext
9035 WHERE object_name = p_object_name;
9036 code_debug(l_api_name||' l_class_code_column_name: ' ||l_class_code_column_name);
9037
9038 -- adding the class code column
9039 IF l_class_code_column_name IS NOT NULL THEN
9040 l_concat_pk_cols := l_concat_pk_cols ||l_class_code_column_name||' ';
9041 l_concat_pk_cols_entities := l_concat_pk_cols_entities || ' TEMPLRTCQ.'||l_class_code_column_name||' , ';
9042 l_pk_col_where_ent_uartcq := l_pk_col_where_ent_uartcq ||' AND TEMPLRTCQ.'||l_class_code_column_name||' = INTFRTCQ.'||l_class_code_column_name||'(+) ';
9043 -- l_ext_templrtcq_pk_join := l_ext_templrtcq_pk_join || ' AND TEMPLRTCQ.'||l_class_code_column_name||' = EXT.'||l_class_code_column_name||'(+) '; -- Bug 13414358
9044 END IF;
9045
9046 code_debug(l_api_name||' Phase 2 after class code ');
9047 code_debug(l_api_name||' l_concat_pk_cols: '||l_concat_pk_cols);
9048 code_debug(l_api_name||' l_concat_pk_cols_entities: '||l_concat_pk_cols_entities);
9049 code_debug(l_api_name||' l_pk_col_where_ent_uartcq: '||l_pk_col_where_ent_uartcq);
9050 -- code_debug(l_api_name||' l_ext_templrtcq_pk_join: '|| l_ext_templrtcq_pk_join); -- Bug 13414358
9051 ------------------------------------------------------------
9052 -- Get data level information for the given attribute group type, aplication
9053 -- The assumption is that the template table has the DL columns if requested
9054 -- for application into the template
9055 ------------------------------------------------------------
9056 l_dl_record := DATA_LEVEL_TABLE();
9057
9058 FOR dl_rec IN data_level_cols_cursor(cp_application_id => p_application_id
9059 ,cp_attr_group_type => p_attr_group_type)
9060 LOOP
9061 l_dl_record.EXTEND();
9062 l_num_dl_columns := l_dl_record.LAST;
9063 l_dl_record(l_num_dl_columns).dl_id := dl_rec.data_level_id;
9064 l_dl_record(l_num_dl_columns).dl_name := dl_rec.data_level_name;
9065 l_dl_record(l_num_dl_columns).dl_column1 := dl_rec.pk1_column_name;
9066 l_dl_record(l_num_dl_columns).dl_column2 := dl_rec.pk2_column_name;
9067 l_dl_record(l_num_dl_columns).dl_column3 := dl_rec.pk3_column_name;
9068 l_dl_record(l_num_dl_columns).dl_column4 := dl_rec.pk4_column_name;
9069 l_dl_record(l_num_dl_columns).dl_column5 := dl_rec.pk5_column_name;
9070 l_dl_record(l_num_dl_columns).dl_col_list := null;
9071 l_dl_record(l_num_dl_columns).dl_intfrtcq_trtcq_join := ' 1=1 ';
9072 l_dl_record(l_num_dl_columns).dl_ext_trtcq_join := ' 1=1 ';
9073
9074 IF dl_rec.pk1_column_name IS NOT NULL THEN
9075 l_dl_record(l_num_dl_columns).dl_col_list := ' ' ||dl_rec.pk1_column_name||' ';
9076 l_dl_record(l_num_dl_columns).dl_intfrtcq_trtcq_join := ' NVL(INTFRTCQ.'||dl_rec.pk1_column_name||'(+),-1) = NVL2(INTFRTCQ.'||dl_rec.pk1_column_name||'(+),TEMPLRTCQ.'||dl_rec.pk1_column_name||',-1)';
9077 -- l_dl_record(l_num_dl_columns).dl_ext_trtcq_join := ' NVL(EXT.'||dl_rec.pk1_column_name||'(+),-1) = NVL(TEMPLRTCQ.'||dl_rec.pk1_column_name||',-1)'; -- Bug 13414358
9078 END IF;
9079 IF dl_rec.pk2_column_name IS NOT NULL THEN
9080 l_dl_record(l_num_dl_columns).dl_col_list :=
9081 l_dl_record(l_num_dl_columns).dl_col_list||','||dl_rec.pk2_column_name||' ';
9082 l_dl_record(l_num_dl_columns).dl_intfrtcq_trtcq_join :=
9083 l_dl_record(l_num_dl_columns).dl_intfrtcq_trtcq_join || ' AND NVL(INTFRTCQ.'||dl_rec.pk2_column_name||'(+),-1) = NVL2(INTFRTCQ.'||dl_rec.pk2_column_name||'(+),TEMPLRTCQ.'||dl_rec.pk2_column_name||',-1)';
9084 -- Bug 13414358
9085 /*
9086 l_dl_record(l_num_dl_columns).dl_ext_trtcq_join :=
9087 l_dl_record(l_num_dl_columns).dl_ext_trtcq_join ||' AND NVL(EXT.'||dl_rec.pk2_column_name||'(+),-1) = NVL(TEMPLRTCQ.'||dl_rec.pk2_column_name||',-1)';
9088 */
9089 END IF;
9090 IF dl_rec.pk3_column_name IS NOT NULL THEN
9091 l_dl_record(l_num_dl_columns).dl_col_list :=
9092 l_dl_record(l_num_dl_columns).dl_col_list||','||dl_rec.pk3_column_name||' ';
9093 l_dl_record(l_num_dl_columns).dl_intfrtcq_trtcq_join :=
9094 l_dl_record(l_num_dl_columns).dl_intfrtcq_trtcq_join || ' AND NVL(INTFRTCQ.'||dl_rec.pk3_column_name||'(+),-1) = NVL2(INTFRTCQ.'||dl_rec.pk3_column_name||'(+),TEMPLRTCQ.'||dl_rec.pk3_column_name||',-1)';
9095 -- Bug 13414358
9096 /*
9097 l_dl_record(l_num_dl_columns).dl_ext_trtcq_join :=
9098 l_dl_record(l_num_dl_columns).dl_ext_trtcq_join ||' AND NVL(EXT.'||dl_rec.pk3_column_name||'(+),-1) = NVL(TEMPLRTCQ.'||dl_rec.pk3_column_name||',-1)';
9099 */
9100 END IF;
9101 IF dl_rec.pk4_column_name IS NOT NULL THEN
9102 l_dl_record(l_num_dl_columns).dl_col_list :=
9103 l_dl_record(l_num_dl_columns).dl_col_list||','||dl_rec.pk4_column_name||' ';
9104 l_dl_record(l_num_dl_columns).dl_intfrtcq_trtcq_join :=
9105 l_dl_record(l_num_dl_columns).dl_intfrtcq_trtcq_join || ' AND NVL(INTFRTCQ.'||dl_rec.pk4_column_name||'(+),-1) = NVL2(INTFRTCQ.'||dl_rec.pk4_column_name||'(+),TEMPLRTCQ.'||dl_rec.pk4_column_name||',-1)';
9106 -- Bug 13414358
9107 /*
9108 l_dl_record(l_num_dl_columns).dl_ext_trtcq_join :=
9109 l_dl_record(l_num_dl_columns).dl_ext_trtcq_join ||' AND NVL(EXT.'||dl_rec.pk4_column_name||'(+),-1) = NVL(TEMPLRTCQ.'||dl_rec.pk4_column_name||',-1)';
9110 */
9111 END IF;
9112 IF dl_rec.pk5_column_name IS NOT NULL THEN
9113 l_dl_record(l_num_dl_columns).dl_col_list :=
9114 l_dl_record(l_num_dl_columns).dl_col_list||','||dl_rec.pk5_column_name||' ';
9115 l_dl_record(l_num_dl_columns).dl_intfrtcq_trtcq_join :=
9116 l_dl_record(l_num_dl_columns).dl_intfrtcq_trtcq_join || ' AND NVL(INTFRTCQ.'||dl_rec.pk5_column_name||'(+),-1) = NVL2(INTFRTCQ.'||dl_rec.pk5_column_name||'(+),TEMPLRTCQ.'||dl_rec.pk5_column_name||',-1)';
9117 -- Bug 13414358
9118 /*
9119 l_dl_record(l_num_dl_columns).dl_ext_trtcq_join :=
9120 l_dl_record(l_num_dl_columns).dl_ext_trtcq_join ||' AND NVL(EXT.'||dl_rec.pk5_column_name||'(+),-1) = NVL(TEMPLRTCQ.'||dl_rec.pk5_column_name||',-1)';
9121 */
9122 END IF;
9123
9124 l_num_dl_columns := l_num_dl_columns + 1;
9125 END LOOP;
9126
9127 SELECT application_table_name
9128 INTO l_ext_b_table_name
9129 FROM FND_DESCRIPTIVE_FLEXS
9130 WHERE application_id = p_application_id
9131 AND descriptive_flexfield_name = p_attr_group_type;
9132
9133 l_has_data_level_id := FND_API.TO_BOOLEAN(EGO_USER_ATTRS_COMMON_PVT.has_column_in_table(l_ext_b_table_name, 'DATA_LEVEL_ID'));
9134
9135 ------------------------------
9136 -- dl level column query part
9137 ------------------------------
9138 l_dl_col_list := NULL;
9139 l_dl_col_templrtcq_list := NULL;
9140 IF l_has_data_level_id THEN
9141 l_dl_col_list := EGO_USER_ATTRS_COMMON_PVT.Get_All_Data_Level_PK_Names (p_application_id => p_application_id
9142 ,p_attr_group_type => p_attr_group_type);
9143 IF l_dl_col_list IS NOT NULL THEN
9144 l_dl_col_templrtcq_list := ' TEMPLRTCQ.'||REPLACE(l_dl_col_list, ', ', ' , TEMPLRTCQ.');
9145 ELSE
9146 l_dl_col_templrtcq_list := NULL;
9147 END IF;
9148 ELSE
9149 FOR cr IN data_level_cols_cursor(cp_application_id => p_application_id
9150 ,cp_attr_group_type => p_attr_group_type) LOOP
9151 IF l_dl_col_list IS NULL THEN
9152 l_dl_col_list := ' '||cr.data_level_name||' ';
9153 ELSE
9154 l_dl_col_list := l_dl_col_list||', '||cr.data_level_name||' ';
9155 END IF;
9156 END LOOP;
9157 END IF; -- l_has_data_level_id - 1
9158
9159 code_debug(l_api_name||' Phase 3 ');
9160 code_debug(l_api_name||' l_dl_col_list: ' ||l_dl_col_list);
9161 code_debug(l_api_name||' l_dl_intfrtcq_trtcq_join: '||l_dl_intfrtcq_trtcq_join);
9162 code_debug(l_api_name||' l_dl_ext_trtcq_join: '||l_dl_ext_trtcq_join);
9163
9164 SELECT flex_ext.application_vl_name
9165 INTO l_ext_vl_name
9166 FROM ego_fnd_desc_flexs_ext flex_ext
9167 WHERE flex_ext.application_id = p_application_id
9168 AND flex_ext.descriptive_flexfield_name = p_attr_group_type;
9169
9170 ----------------------------------------------------------------------------
9171 -- WE ARE ASSUMING THAT THE ROWS IN THE INTERFACE TABLE ARE ALREADY --
9172 -- VALIDATED BY NOW. AND HENCE THE ATTR GROUP ID COLUMN IS ALREADY --
9173 -- POPULATED. --
9174 ----------------------------------------------------------------------------
9175
9176 ----------------------------------------------------------------------------
9177 -- Collect the atttributes --
9178 ----------------------------------------------------------------------------
9179
9180 l_dynamic_sql :=
9181 ' SELECT DISTINCT ATTRIBUTE_GROUP_ID, TEMPL.TEMPLATE_ID, TEMPL.CLASSIFICATION_CODE '||
9182 ' FROM EGO_TEMPL_ATTRIBUTES TEMPL, '||
9183 ' EGO_FND_DSC_FLX_CTX_EXT AGMDATA, '||
9184 ' ('||p_target_entity_sql||') ENTITIES '||
9185 ' WHERE TEMPL.TEMPLATE_ID = ENTITIES.TEMPLATE_ID ';
9186 IF (p_class_code_hierarchy_sql IS NOT NULL) THEN
9187 l_dynamic_sql := l_dynamic_sql ||' AND ( TEMPL.CLASSIFICATION_CODE = ENTITIES.'||l_class_code_column_name
9188 ||' OR TEMPL.CLASSIFICATION_CODE IN ('||p_class_code_hierarchy_sql||' ) ) ';
9189 ELSE
9190 l_dynamic_sql := l_dynamic_sql ||' AND TEMPL.CLASSIFICATION_CODE = ENTITIES.'||l_class_code_column_name;
9191 END IF;
9192
9193 l_dynamic_sql := l_dynamic_sql ||
9194 ' AND AGMDATA.ATTR_GROUP_ID = TEMPL.ATTRIBUTE_GROUP_ID '||
9195 ' AND AGMDATA.DESCRIPTIVE_FLEXFIELD_NAME = :ag_type '||
9196 ' AND ENABLED_FLAG = ''Y'' ';
9197
9198 code_debug(l_api_name||' Phase 4 ');
9199 code_debug(l_api_name||' l_dynamic_sql: '|| l_dynamic_sql);
9200 code_debug(l_api_name||' executed using bind: '|| p_attr_group_type);
9201 BEGIN
9202
9203 EXECUTE IMMEDIATE l_dynamic_sql
9204 BULK COLLECT INTO l_ag_to_process,l_template_to_process,l_cc_to_process
9205 USING p_attr_group_type;
9206 EXCEPTION
9207 WHEN NO_DATA_FOUND THEN
9208 code_debug(' ...... No row to process in the for this template ',1);
9209 RAISE G_NO_ROWS_IN_INTF_TABLE;
9210 END;
9211
9212 ----------------------------------------------------------------------------
9213 -- BUILD THE LIST OF AG_ID,CLASS_CODE AND TEMPL_ID TO BE USED IN THE --
9214 -- TEMPLATE RTCQ (this will reduce the records in the RTCQ tbale and the --
9215 -- index will be picked up.) --
9216 ----------------------------------------------------------------------------
9217 l_ag_to_process_list := ' -2910 ';
9218 l_template_to_process_list := ' -2910 ';
9219 l_cc_to_process_list := ' -2910 ';
9220
9221 IF (l_ag_to_process.COUNT >0) THEN
9222 FOR x IN l_ag_to_process.FIRST .. l_ag_to_process.LAST
9223 LOOP
9224 l_ag_to_process_list := l_ag_to_process_list || ','|| l_ag_to_process(x);
9225 l_template_to_process_list := l_template_to_process_list ||','||l_template_to_process(x);
9226 l_cc_to_process_list := l_cc_to_process_list||','||l_cc_to_process(x);
9227 END LOOP;
9228 END IF;
9229
9230 -- Bug 10125885 - Start
9231 -- Add all the ICC ids available in the interface table.
9232 l_dynamic_sql := 'SELECT DISTINCT ITEM_CATALOG_GROUP_ID '||
9233 ' FROM ('||p_target_entity_sql||')';
9234
9235 EXECUTE IMMEDIATE l_dynamic_sql
9236 BULK COLLECT INTO l_cc_to_process;
9237
9238 IF (l_cc_to_process.Count > 0) THEN
9239 FOR x IN l_cc_to_process.FIRST .. l_cc_to_process.LAST
9240 LOOP
9241 l_cc_to_process_list := l_cc_to_process_list||','||l_cc_to_process(x);
9242 END LOOP;
9243 END IF;
9244 -- Bug 10125885 - End
9245
9246 code_debug(l_api_name||' Phase 5 ');
9247 code_debug(l_api_name||' l_ag_to_process_list: '|| l_ag_to_process_list);
9248 code_debug(l_api_name||' l_template_to_process_list: '|| l_template_to_process_list);
9249 code_debug(l_api_name||' l_cc_to_process_list: '|| l_cc_to_process_list);
9250 ----------------------------------------------------------------------------
9251 -- Now we will loop thru this list of ag id's to process each AG . --
9252 ----------------------------------------------------------------------------
9253
9254 IF (l_ag_to_process.COUNT >0) THEN
9255
9256 FOR x IN l_ag_to_process.FIRST .. l_ag_to_process.LAST
9257 LOOP
9258
9259
9260 l_attr_group_metadata_obj := EGO_USER_ATTRS_COMMON_PVT.Get_Attr_Group_Metadata(
9261 p_attr_group_id => l_ag_to_process(x)
9262 ,p_application_id => p_application_id
9263 ,p_attr_group_type => null
9264 ,p_attr_group_name => NULL
9265 );
9266
9267 ------------------------------------------------------------------------
9268 -- Checking the data level at which the attr group is associated --
9269 ------------------------------------------------------------------------
9270 IF l_has_data_level_id THEN -- l_has_data_level_id - 2
9271 l_dl_col_decode_list := l_dl_col_templrtcq_list;
9272 --
9273 -- do we really need this?
9274 --
9275 l_dl_ext_trtcq_join := ' 0 = 0 ';
9276 l_dl_intfrtcq_trtcq_join := ' 0 = 0 ';
9277 ELSE
9278 -- existing code which takes in the
9279 SELECT DATA_LEVEL_ID
9280 INTO l_ag_assoc_data_level_id
9281 FROM EGO_OBJ_AG_ASSOCS_B
9282 WHERE ATTR_GROUP_ID = l_attr_group_metadata_obj.ATTR_GROUP_ID
9283 AND ROWNUM = 1;
9284
9285 FOR loop_dl_count IN l_dl_record.first .. l_dl_record.last LOOP
9286 IF l_dl_record(loop_dl_count).dl_id = l_ag_assoc_data_level_id THEN
9287 IF l_dl_record(loop_dl_count).dl_column1 IS NULL THEN
9288 l_assoc_data_level := 0;
9289 ELSE
9290 l_assoc_data_level := 1;
9291 END IF;
9292 ------------------------------------------------------------------
9293 -- Building the data level col decode for pluggin into the --
9294 -- select --
9295 ------------------------------------------------------------------
9296 IF l_dl_record(loop_dl_count).dl_column1 IS NOT NULL THEN
9297 l_dl_col_decode_list := ' DECODE(1,'||l_assoc_data_level||',TEMPLRTCQ.'||l_dl_record(loop_dl_count).dl_column1||',null) '||l_dl_record(loop_dl_count).dl_column1||' ';
9298 IF l_dl_record(loop_dl_count).dl_column1 IS NOT NULL THEN
9299 l_dl_col_decode_list := ', DECODE(1,'||l_assoc_data_level||',TEMPLRTCQ.'||l_dl_record(loop_dl_count).dl_column2||',null) '||l_dl_record(loop_dl_count).dl_column2||' ';
9300 IF l_dl_record(loop_dl_count).dl_column3 IS NOT NULL THEN
9301 l_dl_col_decode_list := ', DECODE(1,'||l_assoc_data_level||',TEMPLRTCQ.'||l_dl_record(loop_dl_count).dl_column3||',null) '||l_dl_record(loop_dl_count).dl_column3||' ';
9302 END IF;
9303 END IF;
9304 END IF;
9305 EXIT; -- loop
9306 END IF;
9307 END LOOP;
9308
9309 ----------------------------------------------------------------------
9310 -- In case the AG is associated at entity level there is no need to --
9311 -- have the data level clause --
9312 ----------------------------------------------------------------------
9313 IF(l_assoc_data_level = 0) THEN
9314 l_dl_ext_trtcq_join := ' 0 = 0 ';
9315 l_dl_intfrtcq_trtcq_join := ' 0 = 0 ';
9316 END IF;
9317
9318 END IF; -- l_has_data_level_id - 2
9319 code_debug(l_api_name||' ATTR_GROUP_NAME: '|| l_attr_group_metadata_obj.ATTR_GROUP_NAME);
9320 code_debug(l_api_name||' l_assoc_data_level: '|| l_assoc_data_level);
9321 code_debug(l_api_name||' l_dl_col_decode_list: '|| l_dl_col_decode_list);
9322
9323 ------------------------------------------------------------------------
9324 -- LET US FIRST BUILD THE RTCQ QUERY FOR TEMPLATE AND INTF TABLE --
9325 ------------------------------------------------------------------------
9326 l_attr_metadata_table := l_attr_group_metadata_obj.ATTR_METADATA_TABLE;
9327
9328 l_template_table_RTCQ := 'SELECT '||l_attr_group_metadata_obj.ATTR_GROUP_ID||', CLASSIFICATION_CODE CLASSIFICATION_CODE1,'||
9329 'MAX(TEMPLATE_ID) TEMPLATE_ID1, ATTRIBUTE_GROUP_ID, ROW_NUMBER ';
9330
9331 -- l_ext_templrtcq_uk_join := ' AND 3=3 '; -- Bug 13414358
9332
9333 l_intf_table_RTCQ := 'SELECT ROW_IDENTIFIER, ATTR_GROUP_ID, '||l_concat_pk_cols;
9334
9335 IF l_has_data_level_id THEN -- l_has_data_level_id - 3
9336 l_intf_table_RTCQ := l_intf_table_RTCQ ||', DATA_LEVEL_ID ';
9337 END IF; -- l_has_data_level_id - 3
9338
9339 IF(l_dl_col_list IS NOT NULL) THEN
9340 l_intf_table_RTCQ := l_intf_table_RTCQ ||','||l_dl_col_list;
9341 END IF;
9342 l_intf_table_RTCQ := l_intf_table_RTCQ||
9343 ',MAX(TRANSACTION_TYPE) TRANSACTION_TYPE ,MAX(REQUEST_ID) REQUEST_ID '||
9344 ',MAX(PROGRAM_APPLICATION_ID) PROGRAM_APPLICATION_ID '||
9345 ',MAX(PROGRAM_ID) PROGRAM_ID, MAX(PROGRAM_UPDATE_DATE) PROGRAM_UPDATE_DATE '||
9346 ',MAX(CREATED_BY) CREATED_BY,MAX(CREATION_DATE) CREATION_DATE '||
9347 ',MAX(LAST_UPDATED_BY) LAST_UPDATED_BY, MAX(LAST_UPDATE_DATE) LAST_UPDATE_DATE '||
9348 ',MAX(LAST_UPDATE_LOGIN) LAST_UPDATE_LOGIN ';
9349 l_uk_tmpl_intf_rtcq_where := ' 2=2 ';
9350
9351 l_attr_null_chk_decode := ' AND DECODE(TEMPL.ATTRIBUTE_ID,';
9352 code_debug(l_api_name||' Phase 6 ');
9353 code_debug(l_api_name||' l_template_table_RTCQ: '|| l_template_table_RTCQ);
9354 code_debug(l_api_name||' l_intf_table_RTCQ: '|| l_intf_table_RTCQ);
9355
9356 l_num_val_col := NULL;
9357 ------------------------------------------------------------------------
9358 -- Looping thru all the attrs to build the RTCQ for the template --
9359 -- table. --
9360 ------------------------------------------------------------------------
9361 FOR i IN l_attr_metadata_table.FIRST .. l_attr_metadata_table.LAST
9362 LOOP
9363
9364 l_attr_null_chk_decode := l_attr_null_chk_decode||l_attr_metadata_table(i).ATTR_ID||
9365 ', NVL2(INTFRTCQ.'||l_attr_metadata_table(i).ATTR_NAME||',CHR(0),NULL) , ';
9366
9367 ----------------------------------------------------------------------
9368 -- Add SELECT list attributes that are specific to NUMBER type --
9369 ----------------------------------------------------------------------
9370
9371 IF (l_attr_metadata_table(i).DATA_TYPE_CODE = EGO_EXT_FWK_PUB.G_NUMBER_DATA_TYPE) THEN
9372 l_template_table_RTCQ := l_template_table_RTCQ ||
9373 ', MAX(DECODE(TEMPL.ATTRIBUTE_ID '||
9374 ','||TO_CHAR(l_attr_metadata_table(i).ATTR_ID)||
9375 ','||'TEMPL.ATTRIBUTE_NUMBER_VALUE'||
9376 ',NULL)) '||TO_CHAR(l_attr_metadata_table(i).ATTR_NAME);
9377
9378 l_intf_table_RTCQ := l_intf_table_RTCQ ||
9379 ', MAX(DECODE(INTF.ATTR_INT_NAME '||
9380 ','''||l_attr_metadata_table(i).ATTR_NAME||''' '||
9381 ','||'NVL(INTF.ATTR_VALUE_NUM,'||G_NULL_TOKEN_NUM||') '||
9382 ',NULL)) '||TO_CHAR(l_attr_metadata_table(i).ATTR_NAME);
9383
9384 -- BUILDING THE UK MATCHING WHERE SEGMENT
9385 IF (l_attr_metadata_table(i).UNIQUE_KEY_FLAG = 'Y' AND l_attr_group_metadata_obj.MULTI_ROW_CODE='Y') THEN
9386 l_uk_tmpl_intf_rtcq_where := l_uk_tmpl_intf_rtcq_where||' AND NVL(TEMPLRTCQ.'||l_attr_metadata_table(i).ATTR_NAME||','||G_NULL_TOKEN_NUM||')'||
9387 '= NVL(INTFRTCQ.'||l_attr_metadata_table(i).ATTR_NAME||'(+),'||G_NULL_TOKEN_NUM||' ) ';
9388
9389 -- Bug 13414358
9390 /*
9391 l_ext_templrtcq_uk_join := l_ext_templrtcq_uk_join||' AND NVL(TEMPLRTCQ.'||l_attr_metadata_table(i).ATTR_NAME||','||G_NULL_TOKEN_NUM||')'||
9392 '= NVL(EXT.'||l_attr_metadata_table(i).DATABASE_COLUMN||'(+),'||G_NULL_TOKEN_NUM||') ';
9393 */
9394 END IF;
9395
9396 --IF THE ATTRIBUTE HAS A UOM ATTACHED THE VALUE SHOULD BE CONVERTED TO USER ENTERED
9397 --UOM FROM THE BASE UOM BugFix:5704230
9398 IF(l_attr_metadata_table(i).UNIT_OF_MEASURE_CLASS IS NOT NULL) THEN
9399 l_num_val_col := l_num_val_col||', '''||l_attr_metadata_table(i).ATTR_NAME||''' '||
9400 ', ATTR_VALUE_NUM / (SELECT CONVERSION_RATE FROM MTL_UOM_CONVERSIONS '||
9401 ' WHERE UOM_CLASS = '''||l_attr_metadata_table(i).UNIT_OF_MEASURE_CLASS||''' '||
9402 ' AND UOM_CODE = NVL(ATTR_VALUE_UOM,'''||l_attr_metadata_table(i).UNIT_OF_MEASURE_BASE||''') '||
9403 ' AND ROWNUM = 1)';
9404 END IF;
9405
9406 ----------------------------------------------------------------------
9407 -- Add SELECT list attributes that are specific to DATE TIME type --
9408 ----------------------------------------------------------------------
9409
9410 ELSIF ( l_attr_metadata_table(i).DATA_TYPE_CODE = EGO_EXT_FWK_PUB.G_DATE_TIME_DATA_TYPE
9411 OR l_attr_metadata_table(i).DATA_TYPE_CODE = EGO_EXT_FWK_PUB.G_DATE_DATA_TYPE) THEN
9412 l_template_table_RTCQ := l_template_table_RTCQ ||
9413 ', MAX(DECODE(TEMPL.ATTRIBUTE_ID '||
9414 ','||TO_CHAR(l_attr_metadata_table(i).ATTR_ID)||
9415 ','||'TEMPL.ATTRIBUTE_DATE_VALUE'||
9416 ',NULL)) '||TO_CHAR(l_attr_metadata_table(i).ATTR_NAME);
9417 l_intf_table_RTCQ := l_intf_table_RTCQ ||
9418 ', MAX(DECODE(INTF.ATTR_INT_NAME '||
9419 ','''||l_attr_metadata_table(i).ATTR_NAME||''' '||
9420 ','||'NVL(INTF.ATTR_VALUE_DATE,'||G_NULL_TOKEN_DATE||')'||
9421 ',NULL)) '||TO_CHAR(l_attr_metadata_table(i).ATTR_NAME);
9422
9423 -- BUILDING THE UK MATCHING WHERE SEGMENT
9424 IF (l_attr_metadata_table(i).UNIQUE_KEY_FLAG = 'Y' AND l_attr_group_metadata_obj.MULTI_ROW_CODE='Y') THEN
9425 l_uk_tmpl_intf_rtcq_where := l_uk_tmpl_intf_rtcq_where||' AND NVL(TEMPLRTCQ.'||l_attr_metadata_table(i).ATTR_NAME||','||G_NULL_TOKEN_DATE||')'||
9426 '= NVL(INTFRTCQ.'||l_attr_metadata_table(i).ATTR_NAME||'(+),'||G_NULL_TOKEN_DATE||' ) ';
9427
9428 -- Bug 13414358
9429 /*
9430 l_ext_templrtcq_uk_join := l_ext_templrtcq_uk_join||' AND NVL(TEMPLRTCQ.'||l_attr_metadata_table(i).ATTR_NAME||','||G_NULL_TOKEN_DATE||')'||
9431 '= NVL(EXT.'||l_attr_metadata_table(i).DATABASE_COLUMN||'(+),'||G_NULL_TOKEN_DATE||') ';
9432 */
9433 END IF;
9434
9435 ----------------------------------------------------------------------
9436 -- Add SELECT list attributes that are specific to STRING type --
9437 ----------------------------------------------------------------------
9438
9439 ELSE
9440 l_template_table_RTCQ := l_template_table_RTCQ ||
9441 ', MAX(DECODE(TEMPL.ATTRIBUTE_ID '||
9442 ','||TO_CHAR(l_attr_metadata_table(i).ATTR_ID)||
9443 ','||'TEMPL.ATTRIBUTE_STRING_VALUE'||
9444 ',NULL)) '||TO_CHAR(l_attr_metadata_table(i).ATTR_NAME);
9445 l_intf_table_RTCQ := l_intf_table_RTCQ ||
9446 ', MAX(DECODE(INTF.ATTR_INT_NAME '||
9447 ','''||l_attr_metadata_table(i).ATTR_NAME||''' '||
9448 ','||'NVL(INTF.ATTR_VALUE_STR,'||G_NULL_TOKEN_STR||')'||
9449 ',NULL)) '||TO_CHAR(l_attr_metadata_table(i).ATTR_NAME);
9450
9451 -- BUILDING THE UK MATCHING WHERE SEGMENT
9452 IF (l_attr_metadata_table(i).UNIQUE_KEY_FLAG = 'Y' AND l_attr_group_metadata_obj.MULTI_ROW_CODE='Y') THEN
9453 l_uk_tmpl_intf_rtcq_where := l_uk_tmpl_intf_rtcq_where||' AND NVL(TEMPLRTCQ.'||l_attr_metadata_table(i).ATTR_NAME||','||G_NULL_TOKEN_STR||')'||
9454 '= NVL(INTFRTCQ.'||l_attr_metadata_table(i).ATTR_NAME||'(+),'||G_NULL_TOKEN_STR||' ) ';
9455
9456 -- Bug 13414358
9457 /*
9458 l_ext_templrtcq_uk_join := l_ext_templrtcq_uk_join||' AND NVL(TEMPLRTCQ.'||l_attr_metadata_table(i).ATTR_NAME||','||G_NULL_TOKEN_STR||')'||
9459 '= NVL(EXT.'||l_attr_metadata_table(i).DATABASE_COLUMN||'(+),'||G_NULL_TOKEN_STR||') ';
9460 */
9461 END IF;
9462
9463 END IF;
9464
9465 ------------------------------------------------------------------------
9466 -- WE DONOT HAVE THE ATTR NAME IN THE TEMPL TABLE SO WE WILL USE THE --
9467 -- FOLLOWING DECODE IN THE FINAL QUERY TO AVOID JOINING TO --
9468 -- EGO_ATTRS_V --
9469 ------------------------------------------------------------------------
9470
9471 END LOOP;-- Attr loop
9472 code_debug(l_api_name||' Phase 7 After attribute loop ');
9473 code_debug(l_api_name||' l_template_table_RTCQ: '|| l_template_table_RTCQ);
9474 code_debug(l_api_name||' l_intf_table_RTCQ: '|| l_intf_table_RTCQ);
9475 code_debug(l_api_name||' l_uk_tmpl_intf_rtcq_where: '|| l_uk_tmpl_intf_rtcq_where);
9476 -- code_debug(l_api_name||' l_ext_templrtcq_uk_join: '|| l_ext_templrtcq_uk_join); -- Bug 13414358
9477
9478 IF (l_num_val_col IS NOT NULL) THEN --Bugfix:5704230
9479 l_num_val_col := ' DECODE(ATTR_INT_NAME '||l_num_val_col||', ATTR_VALUE_NUM )';
9480 ELSE
9481 l_num_val_col := ' ATTR_VALUE_NUM';
9482 END IF;
9483
9484 -- l_ext_templrtcq_join := l_ext_templrtcq_pk_join || l_ext_templrtcq_uk_join; -- Bug 13414358
9485
9486 ----------------------------------------------------------------------
9487 -- FROM and WHERE clause --
9488 ----------------------------------------------------------------------
9489
9490 l_template_table_RTCQ := l_template_table_RTCQ ||' FROM ('||l_template_table_sql||') TEMPL '||
9491 ' WHERE TEMPLATE_ID IN ('||l_template_to_process_list||') '||
9492 ' AND CLASSIFICATION_CODE IN ('||l_cc_to_process_list||') '||
9493 ' AND ATTRIBUTE_GROUP_ID IN ('||l_ag_to_process_list||') '||
9494 ' AND ENABLED_FLAG = ''Y'' '||
9495 ' GROUP BY CLASSIFICATION_CODE, ATTRIBUTE_GROUP_ID, ROW_NUMBER ';
9496
9497 l_intf_table_RTCQ := l_intf_table_RTCQ || ' FROM '||p_interface_table_name||' INTF '||
9498 ' WHERE DATA_SET_ID = '||p_data_set_id||' '||
9499 -- ' AND PROCESS_STATUS = '||p_process_status|| /*Commented to fix Bug#8349855*/
9500 ' AND REQUEST_ID = '||p_request_id|| /*Added to fix Bug#8349855*/
9501 ' AND ATTR_GROUP_ID = :ag_id '||
9502 ' AND ATTR_GROUP_INT_NAME = :ag_name '||
9503 --' AND '||l_dl_intfrtcq_trtcq_join||' '||
9504 'GROUP BY ROW_IDENTIFIER, ATTR_GROUP_ID, '||l_concat_pk_cols;
9505 IF l_has_data_level_id THEN
9506 l_intf_table_RTCQ := l_intf_table_RTCQ ||', DATA_LEVEL_ID';
9507 END IF;
9508 IF l_dl_col_list IS NOT NULL THEN
9509 l_intf_table_RTCQ := l_intf_table_RTCQ ||', '||l_dl_col_list;
9510 END IF;
9511
9512 l_attr_null_chk_decode := l_attr_null_chk_decode||' chr(0)) IS NULL ';
9513
9514 code_debug(l_api_name||' Phase 8 Complete queries ');
9515 code_debug(l_api_name||' l_template_table_RTCQ: '|| l_template_table_RTCQ);
9516 code_debug(l_api_name||' l_intf_table_RTCQ: '|| l_intf_table_RTCQ);
9517 -- code_debug(l_api_name||' l_ext_templrtcq_join: '|| l_ext_templrtcq_join); -- Bug 13414358
9518 code_debug(l_api_name||' l_attr_null_chk_decode: '|| l_attr_null_chk_decode);
9519
9520 l_dynamic_sql :=
9521 ' SELECT MAX(ROW_IDENTIFIER),MAX(TRANSACTION_ID) '||
9522 ' FROM '||p_interface_table_name||
9523 ' WHERE DATA_SET_ID = :data_Set_id ';
9524
9525 BEGIN
9526 EXECUTE IMMEDIATE l_dynamic_sql
9527 INTO l_max_row_identifier,l_max_trans_id
9528 USING p_data_set_id;
9529 EXCEPTION
9530 WHEN NO_DATA_FOUND THEN
9531 l_max_row_identifier := 0;
9532 l_max_trans_id := 0;
9533 END;
9534
9535 IF(l_max_row_identifier IS NULL) THEN
9536 l_max_row_identifier := 0;
9537 END IF;
9538
9539 IF(l_max_trans_id IS NULL) THEN
9540 l_max_trans_id := 0;
9541 END IF;
9542
9543 l_max_trans_id := l_max_trans_id +1;
9544 l_max_row_identifier := l_max_row_identifier + 1;
9545
9546 ----------------------------------------------------------------------
9547 -- Find out weather the ATTR_GROUP_ID column exists in the EXT --
9548 -- table or not --
9549 ----------------------------------------------------------------------
9550 BEGIN
9551 l_dynamic_sql := ' SELECT ATTR_GROUP_ID FROM '||l_ext_vl_name||' WHERE ROWNUM=1 ';
9552 EXECUTE IMMEDIATE l_dynamic_sql;
9553 l_ag_id_col_exists := TRUE;
9554 EXCEPTION
9555 WHEN OTHERS THEN
9556 l_ag_id_col_exists := FALSE;
9557 END;
9558
9559 -- Bug 13414358 : Start
9560 /*
9561 IF(l_ag_id_col_exists) THEN
9562 l_ag_id_clause :=' AND EXT.ATTR_GROUP_ID(+) = TEMPLRTCQ.ATTRIBUTE_GROUP_ID ';
9563 ELSE
9564 l_ag_id_clause :=' AND 1=1 ';
9565 END IF;
9566 */
9567 -- Bug 13414358 : End
9568
9569 l_rows_to_insert_sql :=
9570 'SELECT (TRANSACTION_ID+'||l_max_trans_id||') TRANSACTION_ID,PROCESS_STATUS,DATA_SET_ID ,ROW_IDENTIFIER, '||
9571 ' ATTR_GROUP_INT_NAME, ATTR_INT_NAME, ATTR_VALUE_STR,'||l_num_val_col||', ATTR_VALUE_UOM, ATTR_VALUE_DATE, '||
9572 ' ATTR_DISP_VALUE, TRANSACTION_TYPE, ATTR_GROUP_ID, REQUEST_ID, PROGRAM_APPLICATION_ID, PROGRAM_ID, '||
9573 ' PROGRAM_UPDATE_DATE,CREATED_BY, CREATION_DATE, LAST_UPDATED_BY, LAST_UPDATE_DATE, '||
9574 ' LAST_UPDATE_LOGIN, '||l_concat_pk_cols||', ATTR_GROUP_TYPE ';
9575
9576 IF l_has_data_level_id THEN
9577 l_rows_to_insert_sql := l_rows_to_insert_sql ||', DATA_LEVEL_ID ';
9578 END IF;
9579
9580 IF(l_dl_col_list IS NOT NULL) THEN
9581 l_rows_to_insert_sql := l_rows_to_insert_sql ||','||l_dl_col_list;
9582 END IF;
9583
9584 l_rows_to_insert_sql := l_rows_to_insert_sql||
9585 ' FROM '||
9586 '(SELECT ROWNUM TRANSACTION_ID, '||
9587 p_process_status||' PROCESS_STATUS, '||
9588 p_data_set_id||' DATA_SET_ID, '||
9589 ' NVL(INTFRTCQ.ROW_IDENTIFIER,'||l_max_row_identifier||'+TEMPLRTCQ.ENTITY_ROWID) ROW_IDENTIFIER, '||
9590 ''''||l_attr_group_metadata_obj.ATTR_GROUP_NAME||''' ATTR_GROUP_INT_NAME, '||
9591 ' ATTRSV.ATTR_NAME ATTR_INT_NAME, '||
9592 ' NVL(TEMPL.ATTRIBUTE_STRING_VALUE,TEMPL.ATTRIBUTE_TRANSLATED_VALUE) ATTR_VALUE_STR , '||
9593 ' TEMPL.ATTRIBUTE_NUMBER_VALUE ATTR_VALUE_NUM , '||
9594 ' TEMPL.ATTRIBUTE_UOM_CODE ATTR_VALUE_UOM , '||
9595 ' TEMPL.ATTRIBUTE_DATE_VALUE ATTR_VALUE_DATE , '||
9596 ' NULL ATTR_DISP_VALUE, '||
9597 -- Bug 13414358 : Start
9598 /* Instead of inserting transaction type as CREATE/UPDATE insert as SYNC directly, so that the later part of the
9599 code will take care of resolving the TRANSACTION type. */
9600 -- ' NVL(INTFRTCQ.TRANSACTION_TYPE,NVL2(EXT.EXTENSION_ID,''UPDATE'',''CREATE'')) TRANSACTION_TYPE, ';
9601 ' NVL(INTFRTCQ.TRANSACTION_TYPE,'''||EGO_USER_ATTRS_DATA_PVT.G_SYNC_MODE||''') TRANSACTION_TYPE, ';
9602 -- Bug 13414358 : End
9603 IF l_has_data_level_id THEN
9604 l_rows_to_insert_sql := l_rows_to_insert_sql ||' TEMPLRTCQ.DATA_LEVEL_ID, ';
9605 IF l_dl_col_templrtcq_list IS NOT NULL THEN
9606 l_rows_to_insert_sql := l_rows_to_insert_sql ||l_dl_col_templrtcq_list||', ';
9607 END IF;
9608 ELSE
9609 IF(l_dl_col_decode_list IS NOT NULL)THEN --the data level joins bugfix:5401212
9610 l_rows_to_insert_sql := l_rows_to_insert_sql||l_dl_col_decode_list||', ';
9611 END IF;
9612 END IF;
9613
9614 l_rows_to_insert_sql := l_rows_to_insert_sql||
9615 l_attr_group_metadata_obj.ATTR_GROUP_ID||' ATTR_GROUP_ID, '||
9616 p_request_id||' REQUEST_ID, '||
9617 p_program_application_id||' PROGRAM_APPLICATION_ID, '||
9618 p_program_id||' PROGRAM_ID, '||
9619 'SYSDATE PROGRAM_UPDATE_DATE, '||
9620 p_current_user_party_id||' CREATED_BY, '||
9621 'SYSDATE CREATION_DATE, '||
9622 p_current_user_party_id||' LAST_UPDATED_BY, '||
9623 'SYSDATE LAST_UPDATE_DATE, '||
9624 p_current_user_party_id||' LAST_UPDATE_LOGIN, '||
9625 l_concat_pk_cols_entities||' '||
9626 ''''||p_attr_group_type||''' ATTR_GROUP_TYPE '||
9627 ' FROM ('||l_intf_table_RTCQ||') INTFRTCQ, '||
9628 ' ('||l_template_table_sql||') TEMPL, '||
9629 ' EGO_ATTRS_V ATTRSV, '||
9630 ' (SELECT ROWNUM ENTITY_ROWID, TEMPLRTCQ.* FROM '||
9631 ' (SELECT * FROM ('||p_target_entity_sql||') ENTITIES, '||
9632 ' ('||l_template_table_RTCQ||') TEMPLRTCQ '||
9633 ' WHERE TEMPLRTCQ.TEMPLATE_ID1 = ENTITIES.TEMPLATE_ID '||
9634 ' AND TEMPLRTCQ.CLASSIFICATION_CODE1 = ENTITIES.'||l_class_code_column_name ||
9635 -- Bug 13414358 : Start
9636 /* Removing the join to the view l_ext_vl_name, as we do not need to resolve the transaction type at this point. */
9637 --' ) TEMPLRTCQ) TEMPLRTCQ, '||
9638 --' '||l_ext_vl_name||' EXT '||
9639 ' ) TEMPLRTCQ) TEMPLRTCQ '||
9640 -- Bug 13414358 : Start
9641 'WHERE 1 = 1 '||
9642 -- l_ag_id_clause||' '|| -- Bug 13414358
9643 ' AND '||l_dl_ext_trtcq_join||' AND '||l_dl_intfrtcq_trtcq_join||--the data level joins bugfix:5401212
9644 -- ' AND '|| -- Bug 13414358
9645 -- l_ext_templrtcq_join||' '|| -- Bug 13414358
9646 ' AND TEMPL.ATTRIBUTE_GROUP_ID = '||l_attr_group_metadata_obj.ATTR_GROUP_ID||' '||
9647 ' AND TEMPL.CLASSIFICATION_CODE = TEMPLRTCQ.'||l_class_code_column_name||' '||
9648 ' AND TEMPL.TEMPLATE_ID = TEMPLRTCQ.TEMPLATE_ID '||
9649 ' AND TEMPL.ATTRIBUTE_GROUP_ID = TEMPLRTCQ.ATTRIBUTE_GROUP_ID '||
9650 ' AND TEMPL.ENABLED_FLAG = ''Y'' '||
9651 ' AND TEMPL.ROW_NUMBER = TEMPLRTCQ.ROW_NUMBER '||
9652 ' AND TEMPLRTCQ.'||l_class_code_column_name||'= INTFRTCQ.'||l_class_code_column_name||'(+)'||
9653 ' '||l_pk_col_where_ent_uartcq||' '||
9654 ' AND '||l_uk_tmpl_intf_rtcq_where||' '||--for unique key joi in intf and templ
9655 ' AND ATTRSV.ATTR_ID = TEMPL.ATTRIBUTE_ID '||
9656 l_attr_null_chk_decode||' ';
9657 IF l_has_data_level_id THEN
9658 l_rows_to_insert_sql := l_rows_to_insert_sql ||' AND EXISTS (SELECT 1 FROM ego_attr_group_dl WHERE attr_group_id = :ag_id2 AND data_level_id = TEMPLRTCQ.data_level_id) ';
9659 END IF;
9660 l_rows_to_insert_sql := l_rows_to_insert_sql || ')';
9661
9662 IF l_has_data_level_id THEN
9663 l_temp := ', DATA_LEVEL_ID ';
9664 ELSE
9665 l_temp := ' ';
9666 END IF;
9667 IF(l_dl_col_list IS NOT NULL) THEN
9668 l_temp := l_temp||','||l_dl_col_list;
9669 END IF;
9670
9671 ----------------------------------------------------------------------
9672 -- Build the INSERT statement to insert the attribute values into --
9673 -- the interface table --
9674 ----------------------------------------------------------------------
9675
9676 l_rows_to_insert_sql := ' INSERT INTO '||p_interface_table_name||' ( '||
9677 ' TRANSACTION_ID,PROCESS_STATUS,DATA_SET_ID ,ROW_IDENTIFIER,ATTR_GROUP_INT_NAME, '||
9678 ' ATTR_INT_NAME, ATTR_VALUE_STR,ATTR_VALUE_NUM,ATTR_VALUE_UOM,ATTR_VALUE_DATE, '||
9679 ' ATTR_DISP_VALUE, TRANSACTION_TYPE, ATTR_GROUP_ID, REQUEST_ID, PROGRAM_APPLICATION_ID, PROGRAM_ID, '||
9680 ' PROGRAM_UPDATE_DATE,CREATED_BY, CREATION_DATE, LAST_UPDATED_BY, LAST_UPDATE_DATE, '||
9681 ' LAST_UPDATE_LOGIN, '||l_concat_pk_cols||', ATTR_GROUP_TYPE '||l_temp||' ) '||
9682 l_rows_to_insert_sql;
9683
9684 code_debug(l_api_name||' Phase 8 SQL to insert ');
9685 code_debug(l_api_name||' '|| l_rows_to_insert_sql);
9686
9687 ----------------------------------------------------------------
9688 -- Finally, execute the query to insert the attribute values --
9689 -- into the interface table. --
9690 ----------------------------------------------------------------
9691 IF l_has_data_level_id THEN
9692 code_debug(l_api_name||' binds: ATTR_GROUP_ID: '||l_attr_group_metadata_obj.ATTR_GROUP_ID||' ATTR_GROUP_NAME: '||l_attr_group_metadata_obj.ATTR_GROUP_NAME||' ATTR_GROUP_ID2 '||l_attr_group_metadata_obj.ATTR_GROUP_ID);
9693 EXECUTE IMMEDIATE l_rows_to_insert_sql
9694 USING l_attr_group_metadata_obj.ATTR_GROUP_ID,
9695 l_attr_group_metadata_obj.ATTR_GROUP_NAME,
9696 l_attr_group_metadata_obj.ATTR_GROUP_ID;
9697 ELSE
9698 code_debug(l_api_name||' binds: ATTR_GROUP_ID: '||l_attr_group_metadata_obj.ATTR_GROUP_ID||' ATTR_GROUP_NAME: '||l_attr_group_metadata_obj.ATTR_GROUP_NAME);
9699 EXECUTE IMMEDIATE l_rows_to_insert_sql
9700 USING l_attr_group_metadata_obj.ATTR_GROUP_ID,
9701 l_attr_group_metadata_obj.ATTR_GROUP_NAME;
9702 END IF;
9703 END LOOP;
9704 END IF;
9705 x_return_status := FND_API.G_RET_STS_SUCCESS;
9706 code_debug(l_api_name||' Done ',0);
9707
9708 EXCEPTION
9709 WHEN G_NO_ROWS_IN_INTF_TABLE THEN
9710 code_debug(l_api_name||' Exception: '||SQLERRM,0);
9711 WHEN OTHERS THEN
9712 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
9713 x_msg_data := 'Executing - '||G_PKG_NAME||'.'||l_api_name||' - '||SQLERRM;
9714
9715 END Apply_Template_On_Intf_Table;
9716
9717 ------------------------------------------------------------------
9718
9719 FUNCTION Get_Datatype_Error_Val (
9720 p_value_to_convert IN VARCHAR2
9721 ,p_datatype IN VARCHAR2
9722 ) RETURN NUMBER
9723 IS
9724 l_num_value NUMBER;
9725 l_date_value DATE;
9726 l_error_code NUMBER;
9727 l_dynamic_sql VARCHAR2(200);
9728 l_formated_String VARCHAR2(500);
9729 BEGIN
9730
9731 IF (p_datatype = EGO_EXT_FWK_PUB.G_DATE_DATA_TYPE ) THEN
9732 l_error_code := G_PS_INVALID_DATE_DATA ;
9733 IF (INSTR(p_value_to_convert,'$SYSDATE$') > 0 ) THEN
9734 l_formated_string := TRIM(REPLACE(p_value_to_convert, '$'));
9735 l_dynamic_sql := 'SELECT TO_CHAR('||l_formated_string||', '''||
9736 EGO_USER_ATTRS_COMMON_PVT.G_DATE_FORMAT||''') FROM DUAL';
9737 EXECUTE IMMEDIATE l_dynamic_sql INTO l_formated_string;
9738 l_date_value := TO_DATE(l_formated_string,EGO_USER_ATTRS_COMMON_PVT.G_DATE_FORMAT);
9739 ELSE
9740 l_date_value := TO_DATE(p_value_to_convert, EGO_USER_ATTRS_COMMON_PVT.G_DATE_FORMAT);
9741 END IF;
9742
9743 ELSIF (p_datatype = EGO_EXT_FWK_PUB.G_DATE_TIME_DATA_TYPE) THEN
9744 l_error_code := G_PS_INVALID_DATE_TIME_DATA ;
9745 IF (INSTR(p_value_to_convert,'$SYSDATE$') > 0 ) THEN
9746 l_formated_string := TRIM(REPLACE(p_value_to_convert, '$'));
9747 l_dynamic_sql := 'SELECT TO_CHAR('||l_formated_string||', '''||
9748 EGO_USER_ATTRS_COMMON_PVT.G_DATE_FORMAT||''') FROM DUAL';
9749 EXECUTE IMMEDIATE l_dynamic_sql INTO l_formated_string;
9750 l_date_value := TO_DATE(l_formated_string,EGO_USER_ATTRS_COMMON_PVT.G_DATE_FORMAT);
9751 ELSE
9752 l_date_value := TO_DATE(p_value_to_convert,EGO_USER_ATTRS_COMMON_PVT.G_DATE_FORMAT);
9753 END IF;
9754
9755 ELSIF (p_datatype = EGO_EXT_FWK_PUB.G_NUMBER_DATA_TYPE) THEN
9756 l_error_code := G_PS_INVALID_NUMBER_DATA ;
9757 l_num_value := TO_NUMBER(p_value_to_convert);
9758 END IF;
9759
9760 RETURN 0;
9761
9762 EXCEPTION
9763 WHEN OTHERS THEN
9764 RETURN l_error_code;
9765
9766 END Get_Datatype_Error_Val;
9767
9768 ---------------------------------------------------------------------
9769
9770 FUNCTION Get_Date (
9771 p_date IN VARCHAR2
9772 ,p_format IN VARCHAR2 DEFAULT NULL
9773 ) RETURN DATE
9774 IS
9775 l_date DATE;
9776 l_dynamic_sql VARCHAR2(200);
9777 l_formated_string VARCHAR2(500);
9778 BEGIN
9779
9780 IF (INSTR(UPPER(p_date),'$SYSDATE$') > 0 ) THEN
9781 l_formated_string := TRIM(REPLACE(p_date, '$'));
9782 l_dynamic_sql := 'SELECT TO_CHAR('||l_formated_string||', '''||
9783 'YYYY-MM-DD HH24:MI:SS'||''') FROM DUAL';
9784 EXECUTE IMMEDIATE l_dynamic_sql INTO l_formated_string;
9785 l_date := TO_DATE(l_formated_string,EGO_USER_ATTRS_COMMON_PVT.G_DATE_FORMAT);
9786 RETURN l_date;
9787 ELSE
9788 IF (p_format IS NOT NULL ) THEN
9789 l_date := TO_DATE(p_date, p_format);
9790 ELSE
9791 l_date := TO_DATE(p_date,EGO_USER_ATTRS_COMMON_PVT.G_DATE_FORMAT);
9792 END IF;
9793 RETURN l_date;
9794 END IF;
9795 RETURN l_date;
9796
9797 EXCEPTION
9798 WHEN OTHERS THEN
9799 RETURN NULL;
9800 END Get_Date;
9801
9802 -------------------------------------------------------------------
9803
9804 ---------------------------------------------------------------------
9805 --NOTE: the function would return a 0 even if the conversion to
9806 -- appropriate datatype throws an exception.
9807 ---------------------------------------------------------------------
9808
9809 FUNCTION Get_Max_Min_Error_Val (
9810 p_value_to_check IN VARCHAR2
9811 ,p_datatype IN VARCHAR2
9812 ,p_min_value IN VARCHAR2
9813 ,p_max_value IN VARCHAR2
9814 ) RETURN NUMBER
9815 IS
9816 l_num_value NUMBER;
9817 l_date_value DATE;
9818 l_error_code NUMBER;
9819 l_max_date DATE;
9820 l_min_date DATE;
9821 l_index_min NUMBER;
9822 l_index_max NUMBER;
9823 l_dynamic_sql VARCHAR2(200);
9824 l_formated_string VARCHAR2(500);
9825 BEGIN
9826 /*
9827 the conversion of max min date fails since the format they are in is 2004-07-01 00:00:00.0
9828 this is the format in which the date string we get from the Value set, since this format
9829 for date is not supported in 8i I
9830 */
9831 IF (p_datatype = EGO_EXT_FWK_PUB.G_DATE_DATA_TYPE OR p_datatype = EGO_EXT_FWK_PUB.G_DATE_TIME_DATA_TYPE) THEN
9832
9833 IF (INSTR(p_value_to_check,'$SYSDATE$') > 0 ) THEN
9834 l_formated_string := TRIM(REPLACE(p_value_to_check, '$'));
9835 l_dynamic_sql := 'SELECT TO_CHAR('||l_formated_string||', '''||
9836 EGO_USER_ATTRS_COMMON_PVT.G_DATE_FORMAT||''') FROM DUAL';--'SYYYY-MM-DD HH24:MI:SS'
9837 EXECUTE IMMEDIATE l_dynamic_sql INTO l_formated_string;
9838 l_date_value := TO_DATE(l_formated_string,EGO_USER_ATTRS_COMMON_PVT.G_DATE_FORMAT);--'SYYYY-MM-DD HH24:MI:SS'
9839 ELSE
9840 l_date_value := TO_DATE(p_value_to_check,EGO_USER_ATTRS_COMMON_PVT.G_DATE_FORMAT);
9841 END IF;
9842
9843 IF (INSTR(p_max_value,'$SYSDATE$') > 0 ) THEN
9844 l_formated_string := TRIM(REPLACE(p_max_value, '$'));
9845 l_dynamic_sql := 'SELECT TO_CHAR('||l_formated_string||', '''||
9846 EGO_USER_ATTRS_COMMON_PVT.G_DATE_FORMAT||''') FROM DUAL';--'SYYYY-MM-DD HH24:MI:SS'
9847 EXECUTE IMMEDIATE l_dynamic_sql INTO l_formated_string;
9848 l_max_date := TO_DATE(l_formated_string,EGO_USER_ATTRS_COMMON_PVT.G_DATE_FORMAT);--'YYYY-MM-DD HH24:MI:SS'
9849 ELSE
9850 l_index_max := INSTR(p_max_value,'.');
9851 IF ( l_index_max = 0 ) THEN
9852 l_max_date := TO_DATE(p_max_value,EGO_USER_ATTRS_COMMON_PVT.G_DATE_FORMAT);--'SYYYY-MM-DD HH24:MI:SS'
9853 ELSE
9854 l_max_date := TO_DATE(SUBSTR(p_max_value,1,l_index_max-1),EGO_USER_ATTRS_COMMON_PVT.G_DATE_FORMAT);--'SYYYY-MM-DD HH24:MI:SS'
9855 END IF;
9856 END IF;
9857
9858
9859 IF (INSTR(p_min_value,'$SYSDATE$') > 0 ) THEN
9860 l_formated_string := TRIM(REPLACE(p_min_value, '$'));
9861 l_dynamic_sql := 'SELECT TO_CHAR('||l_formated_string||', '''||
9862 EGO_USER_ATTRS_COMMON_PVT.G_DATE_FORMAT||''') FROM DUAL';
9863 EXECUTE IMMEDIATE l_dynamic_sql INTO l_formated_string;
9864 l_min_date := TO_DATE(l_formated_string,EGO_USER_ATTRS_COMMON_PVT.G_DATE_FORMAT);
9865 ELSE
9866 l_index_min := INSTR(p_min_value,'.');
9867 IF (l_index_min = 0) THEN
9868 l_min_date := TO_DATE(p_min_value,EGO_USER_ATTRS_COMMON_PVT.G_DATE_FORMAT);
9869 ELSE
9870 l_min_date := TO_DATE(SUBSTR(p_min_value,1,l_index_min-1),EGO_USER_ATTRS_COMMON_PVT.G_DATE_FORMAT);
9871 END IF;
9872 END IF;
9873
9874 IF (l_date_value > NVL(l_max_date, l_date_value) ) THEN
9875 RETURN G_PS_MAX_VAL_VIOLATION;
9876 END IF;
9877
9878 IF ( l_date_value < NVL(l_min_date, l_date_value) ) THEN
9879 RETURN G_PS_MIN_VAL_VIOLATION;
9880 END IF;
9881
9882 ELSIF (p_datatype = EGO_EXT_FWK_PUB.G_NUMBER_DATA_TYPE ) THEN
9883 l_num_value := TO_NUMBER(p_value_to_check);
9884
9885 IF (l_num_value > NVL(TO_NUMBER(p_max_value), l_num_value) ) THEN
9886 IF p_min_value IS NULL THEN
9887 RETURN G_PS_MAX_VAL_VIOLATION;
9888 ELSE
9889 RETURN G_PS_VAL_RANGE_VIOLATION;
9890 END IF;
9891 END IF;
9892
9893 IF (l_num_value < NVL(TO_NUMBER(p_min_value), l_num_value) ) THEN
9894 IF p_max_value IS NULL THEN
9895 RETURN G_PS_MIN_VAL_VIOLATION;
9896 ELSE
9897 RETURN G_PS_VAL_RANGE_VIOLATION;
9898 END IF;
9899 END IF;
9900
9901 END IF;
9902
9903 RETURN 0;
9904
9905 EXCEPTION
9906 WHEN OTHERS THEN
9907 RETURN 0;
9908 END Get_Max_Min_Error_Val;
9909
9910
9911 -------------------------------------------------------------------------------------------------------
9912 --API Name : Insert_Default_Val_Rows
9913 --Description : This API would insert rows with default values for attributes in attribute
9914 -- groups not present in the interface table. Here only single row attr groups
9915 -- with no required attrs are processed.
9916
9917 --parameters : p_api_version : Api version
9918 --parameters : p_application_id : Application Id
9919 --parameters : p_attr_group_type : The type of attr groups to be processed for the given
9920 -- data set id.
9921 --parameters : p_object_name : Object name.
9922 --parameters : p_interface_table_name : Interface table name for the UDA.
9923 --parameters : p_data_set_id : Data set to be processed.
9924 --parameters : p_target_entity_sql : This SQL should return all the entities to be processed,
9925 -- it should give the pk's, class code and data level of
9926 -- the entity. Sample SQL:
9927 -- 'SELECT INVENTORY_ITEM_ID,
9928 -- ORGANIZATION_ID,
9929 -- ITEM_CATALOG_GROUP_ID,
9930 -- DATA_LEVEL_ID,
9931 -- PK1_VALUE,
9932 -- PK2_VALUE,
9933 -- REVISION_ID
9934 -- FROM MTL_SYSTEM_ITEMS_INTERFACE
9935 -- WHERE SET_PROCESS_ID = 2910
9936 -- AND PROCESS_FLAG = 7'
9937
9938 --parameters : p_additional_class_Code_query : This sQL should return all the classification
9939 -- codes for which attr group associations are to be
9940 -- considered, for example this can give all the parent
9941 -- class codes for an entity. Sampl SQL:
9942 -- SELECT CHILD_CATALOG_GROUP_ID
9943 -- FROM EGO_ITEM_CAT_DENORM_HIER
9944 -- WHERE PARENT_CATALOG_GROUP_ID = ENTITY.ITEM_CATALOG_GROUP_ID
9945 --parameters : p_commit : Should the changes made be commited in the API
9946 ------------------------------------------------------------------------------------------
9947
9948
9949 PROCEDURE Insert_Default_Val_Rows (
9950 p_api_version IN NUMBER
9951 ,p_application_id IN NUMBER
9952 ,p_attr_group_type IN VARCHAR2
9953 ,p_object_name IN VARCHAR2
9954 ,p_interface_table_name IN VARCHAR2
9955 ,p_data_set_id IN NUMBER
9956 ,p_target_entity_sql IN VARCHAR2
9957 ,p_attr_groups_to_exclude IN VARCHAR2 DEFAULT NULL
9958 ,p_additional_class_Code_query IN VARCHAR2 DEFAULT NULL
9959 ,p_extra_column_names IN VARCHAr2 DEFAULT NULL
9960 ,p_extra_column_values IN VARCHAR2 DEFAULT NULL
9961 ,p_commit IN VARCHAR2 DEFAULT FND_API.G_FALSE
9962 ,p_process_status IN NUMBER DEFAULT G_PS_IN_PROCESS
9963 /* Begin Bug 13729672 */
9964 ,p_comp_seq_id IN NUMBER DEFAULT NULL
9965 ,p_bill_seq_id IN NUMBER DEFAULT NULL
9966 ,p_structure_type_id IN NUMBER DEFAULT NULL
9967 ,p_data_level_column IN VARCHAR2 DEFAULT NULL
9968 ,p_datalevel_id IN NUMBER DEFAULT NULL
9969 ,p_context_id IN NUMBER DEFAULT NULL
9970 ,p_transaction_id IN NUMBER DEFAULT NULL
9971 /* End Bug 13729672 */
9972 ,x_return_status OUT NOCOPY VARCHAR2
9973 ,x_msg_data OUT NOCOPY VARCHAR2
9974 )
9975 IS
9976
9977 l_api_name VARCHAR2(30) := 'Insert_Default_Val_Rows';
9978 l_pk1_column_name VARCHAR2(30);
9979 l_pk2_column_name VARCHAR2(30);
9980 l_pk3_column_name VARCHAR2(30);
9981 l_pk4_column_name VARCHAR2(30);
9982 l_pk5_column_name VARCHAR2(30);
9983 l_pk1_column_type VARCHAR2(8);
9984 l_pk2_column_type VARCHAR2(8);
9985 l_pk3_column_type VARCHAR2(8);
9986 l_pk4_column_type VARCHAR2(8);
9987 l_pk5_column_type VARCHAR2(8);
9988
9989 l_num_data_level_columns NUMBER := 0;
9990 l_max_row_id NUMBER := 0;
9991
9992 l_data_level_none VARCHAR2(30);
9993 l_data_level_column_1 VARCHAR2(150);
9994 l_data_level_column_2 VARCHAR2(150);
9995 l_data_level_column_3 VARCHAR2(150);
9996
9997 l_class_code_column_name VARCHAR2(30);
9998 l_dynamic_sql VARCHAR2(10000);
9999 l_object_id NUMBER;
10000
10001 l_ag_presence_chk_sql VARCHAR2(5000);
10002 l_additional_class_Code_query VARCHAR2(1000);
10003 l_all_dl_cols VARCHAR2(500);
10004 l_pk_cc_select_list VARCHAR2(500);
10005 l_pk_cc_dl_col_list VARCHAR2(300);
10006 l_inner_pk_cc_dl_col_list VARCHAR2(400);
10007 l_col_to_insert_list VARCHAR2(800);
10008 l_attr_groups_to_exclude VARCHAR2(2000);
10009
10010 l_has_data_level_id BOOLEAN := FALSE;
10011 l_dummy_number NUMBER;
10012 l_ext_b_table_name VARCHAR2(100);
10013 wierd_constant VARCHAR2(100);
10014 l_list_of_dl_for_ag_type EGO_DATA_LEVEL_METADATA_TABLE;
10015
10016
10017 CURSOR data_level_cols_cursor (cp_application_id IN NUMBER
10018 ,cp_attr_group_type IN VARCHAR2)
10019 IS
10020 SELECT data_level_id
10021 ,data_level_name
10022 ,pk1_column_name
10023 ,pk1_column_type
10024 ,pk2_column_name
10025 ,pk2_column_type
10026 ,pk3_column_name
10027 ,pk3_column_type
10028 ,pk4_column_name
10029 ,pk4_column_type
10030 ,pk5_column_name
10031 ,pk5_column_type
10032 FROM EGO_DATA_LEVEL_B
10033 WHERE application_id = cp_application_id
10034 AND attr_group_type = cp_attr_group_type
10035 ORDER BY data_level_id;
10036
10037 -- Fix for bug#9336604
10038 l_schema VARCHAR2(30);
10039 l_status VARCHAR2(1);
10040 l_industry VARCHAR2(1);
10041
10042 BEGIN
10043
10044 code_debug (l_api_name ||' Started with params ');
10045 code_debug (l_api_name ||' p_attr_group_type '||p_attr_group_type );
10046 code_debug (l_api_name ||' p_object_name '||p_object_name );
10047 code_debug (l_api_name ||' p_interface_table_name '||p_interface_table_name );
10048 code_debug (l_api_name ||' p_data_set_id '||p_data_set_id );
10049 code_debug (l_api_name ||' p_target_entity_sql '||p_target_entity_sql );
10050 code_debug (l_api_name ||' p_attr_groups_to_exclude '||p_attr_groups_to_exclude );
10051 code_debug (l_api_name ||' p_additional_class_Code_query '||p_additional_class_Code_query );
10052 code_debug (l_api_name ||' p_extra_column_names '||p_extra_column_names );
10053 code_debug (l_api_name ||' p_extra_column_values '||p_extra_column_values );
10054
10055 l_dynamic_sql := ' SELECT count(*) FROM ( '||p_target_entity_sql||') ';
10056 /*Bug 13729672*/
10057 IF p_datalevel_id IS NULL THEN
10058 EXECUTE IMMEDIATE l_dynamic_sql INTO l_dummy_number;
10059 ELSE
10060 EXECUTE IMMEDIATE l_dynamic_sql INTO l_dummy_number
10061 USING p_comp_seq_id,
10062 p_bill_seq_id,
10063 p_structure_type_id,
10064 p_data_level_column,
10065 p_datalevel_id,
10066 p_context_id,
10067 p_transaction_id;
10068 END IF;
10069
10070 code_debug (l_api_name ||' no records to be processed '||l_dummy_number);
10071 IF l_dummy_number = 0 THEN
10072 code_debug (l_api_name ||' returning as there are no records to process ');
10073 x_return_status := FND_API.G_RET_STS_SUCCESS;
10074 RETURN;
10075 END IF;
10076
10077 -----------------------------------------
10078 -- Fetch the PK column names and data --
10079 -- types for the passed-in object name --
10080 -----------------------------------------
10081 SELECT pk1_column_name, pk1_column_type,
10082 pk2_column_name, pk2_column_type,
10083 pk3_column_name, pk3_column_type,
10084 pk4_column_name, pk4_column_type,
10085 pk5_column_name, pk5_column_type
10086 INTO l_pk1_column_name, l_pk1_column_type,
10087 l_pk2_column_name, l_pk2_column_type,
10088 l_pk3_column_name, l_pk3_column_type,
10089 l_pk4_column_name, l_pk4_column_type,
10090 l_pk5_column_name, l_pk5_column_type
10091 FROM FND_OBJECTS
10092 WHERE OBJ_NAME = p_object_name;
10093
10094 SELECT application_table_name
10095 INTO l_ext_b_table_name
10096 FROM FND_DESCRIPTIVE_FLEXS
10097 WHERE application_id = p_application_id
10098 AND descriptive_flexfield_name = p_attr_group_type;
10099
10100 l_has_data_level_id := FND_API.TO_BOOLEAN(
10101 EGO_USER_ATTRS_COMMON_PVT.has_column_in_table(
10102 p_table_name => l_ext_b_table_name
10103 ,p_column_name => 'DATA_LEVEL_ID'
10104 )
10105 );
10106 IF l_has_data_level_id THEN
10107 code_debug (l_api_name ||' data level id IS present ');
10108 ELSE
10109 code_debug (l_api_name ||' data level id is NOT present ');
10110 END IF;
10111 ------------------------------------------------------------
10112 -- Geting the classification code for the given object --
10113 ------------------------------------------------------------
10114
10115 SELECT CLASSIFICATION_COL_NAME
10116 INTO l_class_code_column_name
10117 FROM EGO_FND_OBJECTS_EXT
10118 WHERE OBJECT_NAME = p_object_name;
10119
10120 ----------------------------------------------------------
10121 -- Building the SQL --
10122 ----------------------------------------------------------
10123
10124 l_pk_cc_select_list := ' , ENTITYAG_TBL.'|| l_class_code_column_name;
10125 l_pk_cc_dl_col_list := ' , '||l_class_code_column_name;
10126 l_inner_pk_cc_dl_col_list := ' , ENTITY.'||l_class_code_column_name;
10127 /*Added Hint to improve performance for bug 8598093,9660659 -Added space*/
10128 l_ag_presence_chk_sql := ' SELECT /*+ index(uai EGO_ITM_USR_ATTR_INTRFC_N2 ) */ 1 FROM '||p_interface_table_name||' UAI '||
10129 ' WHERE NVL(UAI.ATTR_GROUP_ID,ATTR_GROUP_TBL.ATTR_GROUP_ID) = ATTR_GROUP_TBL.ATTR_GROUP_ID'||
10130 ' AND NVL(UAI.ATTR_GROUP_TYPE,ATTR_GROUP_TBL.DESCRIPTIVE_FLEXFIELD_NAME) = ATTR_GROUP_TBL.DESCRIPTIVE_FLEXFIELD_NAME'||
10131 ' AND UAI.DATA_SET_ID = :data_set_id '||
10132 ' AND UAI.ATTR_GROUP_INT_NAME = ATTR_GROUP_TBL.DESCRIPTIVE_FLEX_CONTEXT_CODE ';
10133 code_debug(l_api_name ||' phase 1 ');
10134 code_debug(l_api_name ||' l_pk_cc_select_list '||l_pk_cc_select_list);
10135 code_debug(l_api_name ||' l_pk_cc_dl_col_list '|| l_pk_cc_dl_col_list );
10136 code_debug(l_api_name ||' l_inner_pk_cc_dl_col_list '|| l_inner_pk_cc_dl_col_list );
10137 code_debug(l_api_name ||' l_ag_presence_chk_sql '|| l_ag_presence_chk_sql );
10138
10139 IF (l_pk1_column_name IS NOT NULL) THEN
10140 l_ag_presence_chk_sql := l_ag_presence_chk_sql || ' AND UAI.'||l_pk1_column_name||' = ENTITY.'||l_pk1_column_name;
10141 l_pk_cc_select_list := l_pk_cc_select_list || ',ENTITYAG_TBL.'||l_pk1_column_name;
10142 l_pk_cc_dl_col_list := l_pk_cc_dl_col_list || ',' || l_pk1_column_name;
10143 l_inner_pk_cc_dl_col_list := l_inner_pk_cc_dl_col_list || ', ENTITY.'||l_pk1_column_name;
10144 END IF;
10145 IF (l_pk2_column_name IS NOT NULL) THEN
10146 l_ag_presence_chk_sql := l_ag_presence_chk_sql || ' AND UAI.'||l_pk2_column_name||' = ENTITY.'||l_pk2_column_name;
10147 l_pk_cc_select_list := l_pk_cc_select_list || ',ENTITYAG_TBL.'||l_pk2_column_name;
10148 l_pk_cc_dl_col_list := l_pk_cc_dl_col_list || ',' || l_pk2_column_name;
10149 l_inner_pk_cc_dl_col_list := l_inner_pk_cc_dl_col_list || ', ENTITY.'||l_pk2_column_name;
10150 END IF;
10151 IF (l_pk3_column_name IS NOT NULL) THEN
10152 l_ag_presence_chk_sql := l_ag_presence_chk_sql || ' AND UAI.'||l_pk3_column_name||' = ENTITY.'||l_pk3_column_name;
10153 l_pk_cc_select_list := l_pk_cc_select_list || ',ENTITYAG_TBL.'||l_pk3_column_name;
10154 l_pk_cc_dl_col_list := l_pk_cc_dl_col_list || ',' || l_pk3_column_name;
10155 l_inner_pk_cc_dl_col_list := l_inner_pk_cc_dl_col_list || ', ENTITY.'||l_pk3_column_name;
10156 END IF;
10157 IF (l_pk4_column_name IS NOT NULL) THEN
10158 l_ag_presence_chk_sql := l_ag_presence_chk_sql || ' AND UAI.'||l_pk4_column_name||' = ENTITY.'||l_pk4_column_name;
10159 l_pk_cc_select_list := l_pk_cc_select_list || ',ENTITYAG_TBL.'||l_pk4_column_name;
10160 l_pk_cc_dl_col_list := l_pk_cc_dl_col_list || ',' || l_pk4_column_name;
10161 l_inner_pk_cc_dl_col_list := l_inner_pk_cc_dl_col_list || ', ENTITY.'||l_pk4_column_name;
10162 END IF;
10163 IF (l_pk5_column_name IS NOT NULL) THEN
10164 l_ag_presence_chk_sql := l_ag_presence_chk_sql || ' AND UAI.'||l_pk5_column_name||' = ENTITY.'||l_pk5_column_name;
10165 l_pk_cc_select_list := l_pk_cc_select_list || ',ENTITYAG_TBL.'||l_pk5_column_name;
10166 l_pk_cc_dl_col_list := l_pk_cc_dl_col_list || ',' || l_pk5_column_name;
10167 l_inner_pk_cc_dl_col_list := l_inner_pk_cc_dl_col_list || ', ENTITY.'||l_pk5_column_name;
10168 END IF;
10169
10170
10171
10172 l_list_of_dl_for_ag_type := EGO_USER_ATTRS_COMMON_PVT.Get_Data_Levels_For_AGType( p_application_id => p_application_id
10173 ,p_attr_group_type => p_attr_group_type);
10174 IF(l_has_data_level_id) THEN
10175 l_ag_presence_chk_sql := l_ag_presence_chk_sql || ' AND NVL(UAI.DATA_LEVEL_ID,'||G_NULL_TOKEN_NUM||') '||
10176 ' = NVL(ENTITY.DATA_LEVEL_ID,'||G_NULL_TOKEN_NUM||')';
10177
10178 FOR i IN l_list_of_dl_for_ag_type.FIRST .. l_list_of_dl_for_ag_type.LAST
10179 LOOP
10180
10181 IF (l_list_of_dl_for_ag_type(i).PK_COLUMN_NAME1 IS NOT NULL AND l_list_of_dl_for_ag_type(i).PK_COLUMN_NAME1 <> 'NONE'
10182 AND INSTR(l_ag_presence_chk_sql,l_list_of_dl_for_ag_type(i).PK_COLUMN_NAME1) = 0) THEN
10183
10184 IF(l_list_of_dl_for_ag_type(i).PK_COLUMN_TYPE1 = 'NUMBER') THEN
10185 wierd_constant := G_NULL_TOKEN_NUM;
10186 ELSIF (l_list_of_dl_for_ag_type(i).PK_COLUMN_TYPE1 = 'DATE' OR l_list_of_dl_for_ag_type(i).PK_COLUMN_TYPE1 = 'DATETIME') THEN
10187 wierd_constant := G_NULL_TOKEN_DATE;
10188 ELSE
10189 wierd_constant := G_NULL_TOKEN_STR;
10190 END IF;
10191
10192 l_ag_presence_chk_sql := l_ag_presence_chk_sql || ' AND NVL(UAI.'||l_list_of_dl_for_ag_type(i).PK_COLUMN_NAME1||','||wierd_constant||') '||
10193 ' = NVL(ENTITY.'||l_list_of_dl_for_ag_type(i).PK_COLUMN_NAME1||','||wierd_constant||')';
10194 END IF;
10195 IF (l_list_of_dl_for_ag_type(i).PK_COLUMN_NAME2 IS NOT NULL AND l_list_of_dl_for_ag_type(i).PK_COLUMN_NAME2 <> 'NONE'
10196 AND INSTR(l_ag_presence_chk_sql,l_list_of_dl_for_ag_type(i).PK_COLUMN_NAME2) = 0) THEN
10197 IF(l_list_of_dl_for_ag_type(i).PK_COLUMN_TYPE2 = 'NUMBER') THEN
10198 wierd_constant := G_NULL_TOKEN_NUM;
10199 ELSIF (l_list_of_dl_for_ag_type(i).PK_COLUMN_TYPE2 = 'DATE' OR l_list_of_dl_for_ag_type(i).PK_COLUMN_TYPE2 = 'DATETIME') THEN
10200 wierd_constant := G_NULL_TOKEN_DATE;
10201 ELSE
10202 wierd_constant := G_NULL_TOKEN_STR;
10203 END IF;
10204 l_ag_presence_chk_sql := l_ag_presence_chk_sql || ' AND NVL(UAI.'||l_list_of_dl_for_ag_type(i).PK_COLUMN_NAME2||','||wierd_constant||') '||
10205 ' = NVL(ENTITY.'||l_list_of_dl_for_ag_type(i).PK_COLUMN_NAME2||','||wierd_constant||')';
10206 END IF;
10207 IF (l_list_of_dl_for_ag_type(i).PK_COLUMN_NAME3 IS NOT NULL AND l_list_of_dl_for_ag_type(i).PK_COLUMN_NAME3 <> 'NONE'
10208 AND INSTR(l_ag_presence_chk_sql,l_list_of_dl_for_ag_type(i).PK_COLUMN_NAME3) = 0) THEN
10209 IF(l_list_of_dl_for_ag_type(i).PK_COLUMN_TYPE3 = 'NUMBER') THEN
10210 wierd_constant := G_NULL_TOKEN_NUM;
10211 ELSIF (l_list_of_dl_for_ag_type(i).PK_COLUMN_TYPE3 = 'DATE' OR l_list_of_dl_for_ag_type(i).PK_COLUMN_TYPE3 = 'DATETIME') THEN
10212 wierd_constant := G_NULL_TOKEN_DATE;
10213 ELSE
10214 wierd_constant := G_NULL_TOKEN_STR;
10215 END IF;
10216 l_ag_presence_chk_sql := l_ag_presence_chk_sql || ' AND NVL(UAI.'||l_list_of_dl_for_ag_type(i).PK_COLUMN_NAME3||','||wierd_constant||') '||
10217 ' = NVL(ENTITY.'||l_list_of_dl_for_ag_type(i).PK_COLUMN_NAME3||','||wierd_constant||')';
10218 END IF;
10219 IF (l_list_of_dl_for_ag_type(i).PK_COLUMN_NAME4 IS NOT NULL AND l_list_of_dl_for_ag_type(i).PK_COLUMN_NAME4 <> 'NONE'
10220 AND INSTR(l_ag_presence_chk_sql,l_list_of_dl_for_ag_type(i).PK_COLUMN_NAME4) = 0) THEN
10221 IF(l_list_of_dl_for_ag_type(i).PK_COLUMN_TYPE4 = 'NUMBER') THEN
10222 wierd_constant := G_NULL_TOKEN_NUM;
10223 ELSIF (l_list_of_dl_for_ag_type(i).PK_COLUMN_TYPE4 = 'DATE' OR l_list_of_dl_for_ag_type(i).PK_COLUMN_TYPE4 = 'DATETIME') THEN
10224 wierd_constant := G_NULL_TOKEN_DATE;
10225 ELSE
10226 wierd_constant := G_NULL_TOKEN_STR;
10227 END IF;
10228 l_ag_presence_chk_sql := l_ag_presence_chk_sql || ' AND NVL(UAI.'||l_list_of_dl_for_ag_type(i).PK_COLUMN_NAME4||','||wierd_constant||') '||
10229 ' = NVL(ENTITY.'||l_list_of_dl_for_ag_type(i).PK_COLUMN_NAME4||','||wierd_constant||')';
10230 END IF;
10231 IF (l_list_of_dl_for_ag_type(i).PK_COLUMN_NAME5 IS NOT NULL AND l_list_of_dl_for_ag_type(i).PK_COLUMN_NAME5 <> 'NONE'
10232 AND INSTR(l_ag_presence_chk_sql,l_list_of_dl_for_ag_type(i).PK_COLUMN_NAME5) = 0) THEN
10233 IF(l_list_of_dl_for_ag_type(i).PK_COLUMN_TYPE5 = 'NUMBER') THEN
10234 wierd_constant := G_NULL_TOKEN_NUM;
10235 ELSIF (l_list_of_dl_for_ag_type(i).PK_COLUMN_TYPE5 = 'DATE' OR l_list_of_dl_for_ag_type(i).PK_COLUMN_TYPE5 = 'DATETIME') THEN
10236 wierd_constant := G_NULL_TOKEN_DATE;
10237 ELSE
10238 wierd_constant := G_NULL_TOKEN_STR;
10239 END IF;
10240 l_ag_presence_chk_sql := l_ag_presence_chk_sql || ' AND NVL(UAI.'||l_list_of_dl_for_ag_type(i).PK_COLUMN_NAME5||','||wierd_constant||') '||
10241 ' = NVL(ENTITY.'||l_list_of_dl_for_ag_type(i).PK_COLUMN_NAME5||','||wierd_constant||')';
10242 END IF;
10243 END LOOP;
10244 END IF;
10245
10246
10247
10248
10249
10250 IF l_has_data_level_id THEN -- R12C specific code
10251 l_all_dl_cols := EGO_USER_ATTRS_COMMON_PVT.Get_All_Data_Level_PK_Names
10252 (p_application_id => p_application_id
10253 ,p_attr_group_type => p_attr_group_type);
10254
10255 l_pk_cc_select_list := l_pk_cc_select_list || ', ENTITYAG_TBL.DATA_LEVEL_ID ';
10256 l_pk_cc_dl_col_list := l_pk_cc_dl_col_list || ', DATA_LEVEL_ID ';
10257 l_inner_pk_cc_dl_col_list := l_inner_pk_cc_dl_col_list ||', ENTITY.DATA_LEVEL_ID ';
10258 -- l_all_dl_cols are in the format a,b,c
10259 IF l_all_dl_cols IS NOT NULL THEN
10260 l_all_dl_cols := ','||l_all_dl_cols;
10261 l_pk_cc_select_list := l_pk_cc_select_list || REPLACE(l_all_dl_cols,',',', ENTITYAG_TBL.');
10262 l_pk_cc_dl_col_list := l_pk_cc_dl_col_list || l_all_dl_cols;
10263 l_inner_pk_cc_dl_col_list := l_inner_pk_cc_dl_col_list ||REPLACE(l_all_dl_cols,',',', ENTITY.');
10264 ELSE
10265 l_all_dl_cols := ' ';
10266 END IF;
10267
10268 ELSE -- R12 code
10269 ------------------------------------------------------------
10270 -- Get data level information for the given object name --
10271 ------------------------------------------------------------
10272 FOR d_l_rec IN data_level_cols_cursor(cp_application_id => p_application_id
10273 ,cp_attr_group_type => p_attr_group_type)
10274 LOOP
10275
10276 IF (data_level_cols_cursor%ROWCOUNT = 1) THEN
10277 l_data_level_none := d_l_rec.data_level_name;
10278 l_num_data_level_columns := 0;
10279 ELSIF (data_level_cols_cursor%ROWCOUNT = 2) THEN
10280 l_data_level_column_1 := d_l_rec.data_level_name;
10281 l_num_data_level_columns := 1;
10282 ELSIF (data_level_cols_cursor%ROWCOUNT = 3) THEN
10283 l_data_level_column_2 := d_l_rec.data_level_name;
10284 l_num_data_level_columns := 2;
10285 ELSIF (data_level_cols_cursor%ROWCOUNT = 4) THEN
10286 l_data_level_column_3 := d_l_rec.data_level_name;
10287 l_num_data_level_columns := 3;
10288 END IF;
10289 END LOOP;
10290 END IF; -- l_has_data_level_id
10291
10292 IF (p_additional_class_Code_query IS NULL) THEN
10293 l_additional_class_Code_query := ' SELECT -2910 FROM DUAL ';
10294 ELSE
10295 l_additional_class_Code_query := p_additional_class_Code_query;
10296 END IF;
10297 code_debug(l_api_name ||' phase 2 ');
10298 code_debug(l_api_name ||' l_pk_cc_select_list '||l_pk_cc_select_list);
10299 code_debug(l_api_name ||' l_pk_cc_dl_col_list '|| l_pk_cc_dl_col_list );
10300 code_debug(l_api_name ||' l_inner_pk_cc_dl_col_list '|| l_inner_pk_cc_dl_col_list );
10301 code_debug(l_api_name ||' l_ag_presence_chk_sql '|| l_ag_presence_chk_sql );
10302 ----------------------------------------------------------
10303 -- Getting the max ROW_IDENTIFIER in the given data set --
10304 -- All the inserted rows will have ROW_IDENTIFIERS in a --
10305 -- series starting with this number --
10306 ----------------------------------------------------------
10307
10308 BEGIN
10309 l_dynamic_sql := 'SELECT MAX(ROW_IDENTIFIER)+1 FROM '||p_interface_table_name||
10310 ' WHERE DATA_SET_ID = :data_Set_id ';
10311 EXECUTE IMMEDIATE l_dynamic_sql
10312 INTO l_max_row_id
10313 USING p_Data_Set_id;
10314 EXCEPTION
10315 WHEN NO_DATA_FOUND THEN
10316 l_max_row_id := 1;
10317 END;
10318
10319 IF(l_max_row_id IS NULL) THEN
10320 l_max_row_id := 1;
10321 END IF;
10322
10323 IF (p_extra_column_names IS NOT NULL) THEN
10324 l_dynamic_sql:= ' SELECT /*+ leading(ATTR_EXT_TBL,ATTR_TBL,INNER_ATTR_TBL) */ /* Bug 9678667 */ '||p_extra_column_values||', '||p_process_status; -- p_extra_column_values, PROCESS_STATUS
10325 ELSE
10326 l_dynamic_sql:= ' SELECT /*+ leading(ATTR_EXT_TBL,ATTR_TBL,INNER_ATTR_TBL) */ /* Bug 9678667 */ '||p_process_status||' '; -- PROCESS_STATUS
10327 END IF;
10328
10329 l_dynamic_sql := l_dynamic_sql||
10330 ' ,'''||p_attr_group_type||''' '|| --ATTR_GROUP_TYPE
10331 ' ,:data_set_id '|| --DATA_SET_ID
10332 ' ,:request_id '|| --REQUEST_ID
10333 ' ,:max_row_id + ROW_ID '|| --ROW_IDENTIFIER
10334 ' ,ATTR_TBL.DESCRIPTIVE_FLEX_CONTEXT_CODE '|| --ATTR_GROUP_INT_NAME
10335 ' ,ATTR_TBL.END_USER_COLUMN_NAME '|| --ATTR_INT_NAME
10336 ' ,TO_NUMBER(DECODE(ATTR_EXT_TBL.DATA_TYPE, '''||EGO_EXT_FWK_PUB.G_NUMBER_DATA_TYPE||''' '||--ATTR_VALUE_NUM
10337 ' ,ATTR_TBL.DEFAULT_VALUE '||
10338 ' ,NULL)) '||
10339 ' ,DECODE(ATTR_EXT_TBL.DATA_TYPE, '''||EGO_EXT_FWK_PUB.G_TRANS_TEXT_DATA_TYPE||''' '||--ATTR_VALUE_STR
10340 ' ,ATTR_TBL.DEFAULT_VALUE '||
10341 ' , '''||EGO_EXT_FWK_PUB.G_CHAR_DATA_TYPE||''' '||
10342 ' ,ATTR_TBL.DEFAULT_VALUE '||
10343 ' ,NULL) '||
10344 ' ,DECODE(ATTR_EXT_TBL.DATA_TYPE, '''||EGO_EXT_FWK_PUB.G_DATE_DATA_TYPE||''' '||--ATTR_VALUE_DATE
10345 ' ,EGO_USER_ATTRS_BULK_PVT.Get_Date(ATTR_TBL.DEFAULT_VALUE,NULL)'||
10346 ' , '''||EGO_EXT_FWK_PUB.G_DATE_TIME_DATA_TYPE||''' '||
10347 ' ,EGO_USER_ATTRS_BULK_PVT.Get_Date(ATTR_TBL.DEFAULT_VALUE,NULL)'||
10348 ' ,NULL) ';
10349
10350 l_dynamic_sql := l_dynamic_sql || l_pk_cc_select_list;
10351 code_debug(l_api_name ||' phase 3 ');
10352 code_debug(l_api_name ||' l_dynamic_sql '||l_dynamic_sql);
10353
10354 IF NOT l_has_data_level_id THEN -- R12 CODE
10355 -------------------------------------------------
10356 -- Adding Data Level data columns to the query --
10357 -------------------------------------------------
10358 IF (l_num_data_level_columns = 1 OR l_num_data_level_columns = 2 OR l_num_data_level_columns = 3) THEN
10359 l_dynamic_sql := l_dynamic_sql || ' , DECODE(ENTITYAG_TBL.DATA_LEVEL '||
10360 ' ,'''||l_data_level_none||''' '||
10361 ' ,NULL '||
10362 ' ,ENTITYAG_TBL.'||l_data_level_column_1||') ';
10363 l_pk_cc_dl_col_list := l_pk_cc_dl_col_list||' , '||l_data_level_column_1;
10364 l_inner_pk_cc_dl_col_list := l_inner_pk_cc_dl_col_list || ', ENTITY.'||l_data_level_column_1;
10365 END IF;
10366
10367 IF (l_num_data_level_columns = 2 OR l_num_data_level_columns = 3) THEN
10368 l_dynamic_sql := l_dynamic_sql || ' , DECODE(ENTITYAG_TBL.DATA_LEVEL '||
10369 ' ,'''||l_data_level_none||''' '||
10370 ' ,NULL '||
10371 ' ,ENTITYAG_TBL.'||l_data_level_column_2||') ';
10372 l_pk_cc_dl_col_list := l_pk_cc_dl_col_list||' , '||l_data_level_column_2;
10373 l_inner_pk_cc_dl_col_list := l_inner_pk_cc_dl_col_list || ', ENTITY.'||l_data_level_column_2;
10374 END IF;
10375
10376 IF (l_num_data_level_columns = 3) THEN
10377 l_dynamic_sql := l_dynamic_sql || ' , DECODE(ENTITYAG_TBL.DATA_LEVEL '||
10378 ' ,'''||l_data_level_none||''' '||
10379 ' ,NULL '||
10380 ' ,ENTITYAG_TBL.'||l_data_level_column_3||') ';
10381 l_pk_cc_dl_col_list := l_pk_cc_dl_col_list||' , '||l_data_level_column_3;
10382 l_inner_pk_cc_dl_col_list := l_inner_pk_cc_dl_col_list || ', ENTITY.'||l_data_level_column_3;
10383 END IF;
10384 END IF;
10385
10386 code_debug(l_api_name ||' phase 4 ');
10387 code_debug(l_api_name ||' l_pk_cc_dl_col_list '|| l_pk_cc_dl_col_list );
10388 code_debug(l_api_name ||' l_inner_pk_cc_dl_col_list '|| l_inner_pk_cc_dl_col_list );
10389 code_debug(l_api_name ||' l_dynamic_sql '||l_dynamic_sql);
10390
10391 l_dynamic_sql := l_dynamic_sql ||
10392 ' ,'''||EGO_USER_ATTRS_DATA_PVT.G_CREATE_MODE||''' '||--TRANSACTION_TYPE
10393 ' ,ENTITYAG_TBL.ATTR_GROUP_ID '||--ATTR_GROUP_ID
10394 ' ,ENTITYAG_TBL.TRANSACTION_ID '||--TRANSACTION_ID
10395 ' ,:current_user_id '||--CREATED_BY
10396 ' ,SYSDATE '||--CREATION_DATE
10397 ' ,:current_user_id '||--LAST_UPDATED_BY
10398 ' ,SYSDATE '||--LAST_UPDATE_DATE
10399 ' ,:current_login_id '||--LAST_UPDATE_LOGIN
10400 ' FROM FND_DESCR_FLEX_COLUMN_USAGES ATTR_TBL, '||
10401 ' EGO_FND_DF_COL_USGS_EXT ATTR_EXT_TBL, '||
10402 ' (SELECT /*+ FULL (ASSOC_TBL) */ TRANSACTION_ID, '||
10403 --Bug7315142,hint added to increase the performance
10404 ' ROWNUM ROW_ID, '||
10405 ' APPLICATION_ID, '||
10406 ' ATTR_GROUP_TBL.DESCRIPTIVE_FLEXFIELD_NAME, '||
10407 ' ATTR_GROUP_TBL.DESCRIPTIVE_FLEX_CONTEXT_CODE, '||
10408 ' ATTR_GROUP_TBL.ATTR_GROUP_ID, '||
10409 ' ASSOC_TBL.DATA_LEVEL '||
10410 ' '||l_inner_pk_cc_dl_col_list||' '||
10411 ' FROM EGO_FND_DSC_FLX_CTX_EXT ATTR_GROUP_TBL, '||
10412 ' EGO_OBJ_AG_ASSOCS_B ASSOC_TBL, '||
10413 ' ('||p_target_entity_sql||') ENTITY '||
10414 ' WHERE '||
10415 ' ATTR_GROUP_TBL.DESCRIPTIVE_FLEXFIELD_NAME = :attr_group_type ';
10416 IF l_has_data_level_id THEN
10417 l_dynamic_sql := l_dynamic_sql ||
10418 ' AND ASSOC_TBL.DATA_LEVEL_ID = ENTITY.DATA_LEVEL_ID ';
10419 END IF;
10420 IF (p_attr_groups_to_exclude IS NOT NULL) THEN
10421 l_dynamic_sql := l_dynamic_sql||
10422 ' AND ATTR_GROUP_TBL.ATTR_GROUP_ID NOT IN ('||p_attr_groups_to_exclude||') ';
10423 END IF;
10424
10425 l_dynamic_sql := l_dynamic_sql||
10426 ' AND ATTR_GROUP_TBL.ATTR_GROUP_ID = ASSOC_TBL.ATTR_GROUP_ID '||
10427 ' AND ATTR_GROUP_TBL.APPLICATION_ID = :app_id '||
10428 ' AND ASSOC_TBL.OBJECT_ID = :object_id '||
10429 ' AND ATTR_GROUP_TBL.MULTI_ROW = ''N'' '||
10430 ' AND ( ASSOC_TBL.CLASSIFICATION_CODE IN ('||l_additional_class_Code_query||') '||
10431 ' OR ASSOC_TBL.CLASSIFICATION_CODE = ENTITY.'||l_class_code_column_name||') '||
10432 ' AND NOT EXISTS ('||l_ag_presence_chk_sql||') '||
10433 ' ) ENTITYAG_TBL '||
10434 ' WHERE ATTR_TBL.APPLICATION_ID = ENTITYAG_TBL.APPLICATION_ID '||
10435 ' AND ATTR_TBL.DESCRIPTIVE_FLEXFIELD_NAME = ENTITYAG_TBL.DESCRIPTIVE_FLEXFIELD_NAME '||
10436 ' AND ATTR_TBL.DESCRIPTIVE_FLEX_CONTEXT_CODE = ENTITYAG_TBL.DESCRIPTIVE_FLEX_CONTEXT_CODE '||
10437 ' AND ATTR_TBL.DEFAULT_VALUE IS NOT NULL '||
10438 ' AND ATTR_TBL.ENABLED_FLAG = ''Y'' '||
10439 ' AND ATTR_EXT_TBL.APPLICATION_ID = :app_id '||
10440 ' AND ATTR_EXT_TBL.DESCRIPTIVE_FLEXFIELD_NAME = :attr_group_type '||
10441 ' AND ATTR_EXT_TBL.DESCRIPTIVE_FLEX_CONTEXT_CODE = ATTR_TBL.DESCRIPTIVE_FLEX_CONTEXT_CODE '||
10442 ' AND ATTR_EXT_TBL.APPLICATION_COLUMN_NAME = ATTR_TBL.APPLICATION_COLUMN_NAME '||
10443 ' AND NOT EXISTS '||
10444 ' ( SELECT 1 '||
10445 ' FROM FND_DESCR_FLEX_COLUMN_USAGES INNER_ATTR_TBL '||
10446 ' WHERE INNER_ATTR_TBL.APPLICATION_ID = ATTR_TBL.APPLICATION_ID '||
10447 ' AND INNER_ATTR_TBL.DESCRIPTIVE_FLEXFIELD_NAME = ATTR_TBL.DESCRIPTIVE_FLEXFIELD_NAME '||
10448 ' AND INNER_ATTR_TBL.DESCRIPTIVE_FLEX_CONTEXT_CODE = ATTR_TBL.DESCRIPTIVE_FLEX_CONTEXT_CODE '||
10449 ' AND INNER_ATTR_TBL.REQUIRED_FLAG = ''Y'' '||
10450 ' AND INNER_ATTR_TBL.DEFAULT_VALUE IS NULL '||
10451 ' ) ';
10452 code_debug(l_api_name ||' phase 5 ');
10453 code_debug(l_api_name ||' l_dynamic_sql '||l_dynamic_sql);
10454
10455 IF (p_extra_column_names IS NOT NULL) THEN
10456 l_col_to_insert_list:= p_extra_column_names||' ,PROCESS_STATUS ';
10457 ELSE
10458 l_col_to_insert_list:= ' PROCESS_STATUS ';
10459 END IF;
10460
10461 l_col_to_insert_list:= l_col_to_insert_list ||
10462 ' ,ATTR_GROUP_TYPE '||
10463 ' ,DATA_SET_ID '||
10464 ' ,REQUEST_ID '||
10465 ' ,ROW_IDENTIFIER '||
10466 ' ,ATTR_GROUP_INT_NAME '||
10467 ' ,ATTR_INT_NAME '||
10468 ' ,ATTR_VALUE_NUM '||
10469 ' ,ATTR_VALUE_STR '||
10470 ' ,ATTR_VALUE_DATE '||
10471 l_pk_cc_dl_col_list ||
10472 ' ,TRANSACTION_TYPE '||
10473 ' ,ATTR_GROUP_ID '||
10474 ' ,TRANSACTION_ID '||
10475 ' ,CREATED_BY '||
10476 ' ,CREATION_DATE '||
10477 ' ,LAST_UPDATED_BY '||
10478 ' ,LAST_UPDATE_DATE '||
10479 ' ,LAST_UPDATE_LOGIN ';
10480
10481 ---------------------------
10482 -- The final DML --
10483 ---------------------------
10484 --Bug No:5386049
10485 --Getting the currnet userid and loginid
10486 --if not initialised.so that they are not inserted as null
10487 IF (G_CURRENT_USER_ID IS NULL ) THEN
10488 G_CURRENT_USER_ID := FND_GLOBAL.User_Id;
10489 END IF;
10490 IF (G_CURRENT_LOGIN_ID IS NULL ) THEN
10491 G_CURRENT_LOGIN_ID := FND_GLOBAL.Login_Id;
10492 END IF;
10493
10494 l_dynamic_sql := ' INSERT INTO '||p_interface_table_name||
10495 ' ( '||l_col_to_insert_list ||' ) '||
10496 l_dynamic_sql;
10497 l_object_id := EGO_USER_ATTRS_DATA_PVT.Get_Object_Id_From_Name(p_object_name);
10498
10499 code_debug(l_api_name ||' Final SQL ');
10500 code_debug(l_api_name ||l_dynamic_sql);
10501 code_debug(l_api_name ||'params 1: '||p_data_Set_id||' 2: '||FND_GLOBAL.CONC_REQUEST_ID||
10502 ' 3: '||l_max_row_id||' 4: '||G_CURRENT_USER_ID||
10503 ' 5: '||G_CURRENT_USER_ID||' 6: '||G_CURRENT_LOGIN_ID||
10504 ' 7: '||p_attr_group_type||' 8: '||p_application_id||
10505 ' 9: '||l_object_id||' 10: '||p_data_set_id||
10506 ' 11: '||p_application_id||' 12: '||p_attr_group_type
10507 );
10508
10509 /* Begin Bug 13729672*/
10510 IF p_datalevel_id IS NULL THEN
10511 EXECUTE IMMEDIATE l_dynamic_sql
10512 USING p_data_Set_id,
10513 FND_GLOBAL.CONC_REQUEST_ID,
10514 l_max_row_id,
10515 G_CURRENT_USER_ID,
10516 G_CURRENT_USER_ID,
10517 G_CURRENT_LOGIN_ID,
10518 p_attr_group_type,
10519 p_application_id,
10520 l_object_id,
10521 p_data_set_id,
10522 p_application_id,
10523 p_attr_group_type;
10524 ELSE
10525 EXECUTE IMMEDIATE l_dynamic_sql
10526 USING p_data_Set_id,
10527 FND_GLOBAL.CONC_REQUEST_ID,
10528 l_max_row_id,
10529 G_CURRENT_USER_ID,
10530 G_CURRENT_USER_ID,
10531 G_CURRENT_LOGIN_ID,
10532 p_comp_seq_id,
10533 p_bill_seq_id,
10534 p_structure_type_id,
10535 p_data_level_column,
10536 p_datalevel_id,
10537 p_context_id,
10538 p_transaction_id,
10539 p_attr_group_type,
10540 p_application_id,
10541 l_object_id,
10542 p_data_set_id,
10543 p_application_id,
10544 p_attr_group_type;
10545 END IF;
10546 /* End Bug 1379672 */
10547
10548 -- Fix for bug#9336604
10549 -- Added gather stats based on profile
10550 IF SQL%ROWCOUNT > 0 THEN
10551 IF (FND_INSTALLATION.GET_APP_INFO('EGO', l_status, l_industry, l_schema)) THEN
10552
10553 IF (nvl(fnd_profile.value('EGO_ENABLE_GATHER_STATS'),'N') = 'Y') THEN
10554
10555 FND_STATS.GATHER_TABLE_STATS(OWNNAME => l_schema,
10556 TABNAME => 'EGO_ITM_USR_ATTR_INTRFC',
10557 CASCADE => True);
10558 END IF;
10559
10560 END IF;
10561 END IF;
10562 --------------------------------
10563 -- Standard check of p_commit --
10564 --------------------------------
10565 IF FND_API.To_Boolean(p_commit) THEN
10566 COMMIT WORK;
10567 END IF;
10568
10569 x_return_status := FND_API.G_RET_STS_SUCCESS;
10570 code_debug(l_api_name ||' Returning with status '||x_return_status);
10571
10572 EXCEPTION
10573 WHEN OTHERS THEN
10574 code_debug(l_api_name ||' Returning EXCEPTION '||SQLERRM);
10575 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
10576 x_msg_data := 'Executing - EGO_USER_ATTRS_BULK_PVT.Insert_Default_Val_Rows: '||SQLERRM;
10577
10578 END Insert_Default_Val_Rows;
10579
10580 ----------------------------------------------------------------------
10581
10582 PROCEDURE Mark_Unchanged_Attr_Rows ( p_api_version IN NUMBER
10583 ,p_application_id IN NUMBER
10584 ,p_attr_group_type IN VARCHAR2
10585 ,p_object_name IN VARCHAR2
10586 ,p_interface_table_name IN VARCHAR2
10587 ,p_data_set_id IN NUMBER
10588 ,p_new_status IN NUMBER
10589 ,p_commit IN VARCHAR2 DEFAULT FND_API.G_FALSE
10590 ,x_return_status OUT NOCOPY VARCHAR2
10591 ,x_msg_data OUT NOCOPY VARCHAR2
10592 )
10593 IS
10594
10595 TYPE DYNAMIC_CUR IS REF CURSOR;
10596
10597 l_attr_group_int_name VARCHAR2(30);
10598 l_dynamic_dist_ag_cursor DYNAMIC_CUR;
10599 l_dynamic_sql VARCHAR2(30000);
10600 l_ext_vl_table_name VARCHAR2(30);
10601 l_ext_b_table_name VARCHAR2(30);
10602 l_ext_intf_pk_join_sql VARCHAR2(2000);
10603 l_ext_intf_dl_join_sql VARCHAR2(2000);
10604 l_uk_where_caluse VARCHAR2(32000); -- VARCHAR2(10000); bug# 9448576
10605 l_ag_id_col_exists BOOLEAN;
10606 l_uk_attr_list VARCHAR2(32000); -- VARCHAR2(7000); bug# 9448576
10607
10608 l_str_attr_decode_list_Ext VARCHAR2(10000);
10609 l_num_attr_decode_list_Ext VARCHAR2(10000);
10610 l_date_attr_decode_list_Ext VARCHAR2(10000);
10611
10612 l_str_attr_decode_list_Intf VARCHAR2(10000);
10613 l_num_attr_decode_list_Intf VARCHAR2(10000);
10614 l_date_attr_decode_list_Intf VARCHAR2(10000);
10615
10616 l_pk1_column_name VARCHAR2(30);
10617 l_pk2_column_name VARCHAR2(30);
10618 l_pk3_column_name VARCHAR2(30);
10619 l_pk4_column_name VARCHAR2(30);
10620 l_pk5_column_name VARCHAR2(30);
10621
10622 l_num_data_level_columns NUMBER := 0;
10623 l_data_level_1 VARCHAR2(30);
10624 l_data_level_column_1 VARCHAR2(150);
10625 l_data_level_2 VARCHAR2(30);
10626 l_data_level_column_2 VARCHAR2(150);
10627 l_data_level_3 VARCHAR2(30);
10628 l_data_level_column_3 VARCHAR2(150);
10629 l_object_id NUMBER;
10630
10631 l_dyn_cursor NUMBER;
10632 l_dummy NUMBER;
10633 l_attr_group_metadata_obj EGO_ATTR_GROUP_METADATA_OBJ;
10634 l_attr_metadata_table EGO_ATTR_METADATA_TABLE;
10635 l_list_of_dl_for_ag_type EGO_DATA_LEVEL_METADATA_TABLE;
10636 l_data_level_col_exists BOOLEAN;
10637 wierd_constant VARCHAR2(100);
10638
10639 CURSOR data_level_cols_cursor (cp_object_name VARCHAR2)
10640 IS
10641 SELECT LOOKUP_CODE DATA_LEVEL_INTERNAL_NAME
10642 ,MEANING DATA_LEVEL_DISPLAY_NAME
10643 ,DECODE(ATTRIBUTE2, 1, ATTRIBUTE3,
10644 2, ATTRIBUTE5,
10645 3, ATTRIBUTE7,
10646 'NONE') DATA_LEVEL_COLUMN
10647 ,DECODE(ATTRIBUTE2, 1, ATTRIBUTE4,
10648 2, ATTRIBUTE6,
10649 3, ATTRIBUTE8,
10650 'NONE') DL_COL_DATA_TYPE
10651 FROM FND_LOOKUP_VALUES
10652 WHERE LOOKUP_TYPE = 'EGO_EF_DATA_LEVEL'
10653 AND ATTRIBUTE1 = cp_object_name
10654 AND LANGUAGE = USERENV('LANG')
10655 ORDER BY ATTRIBUTE2;
10656
10657 BEGIN
10658
10659 code_debug('*** Inside Mark_Unchanged_Attr_Rows ...',2);
10660
10661 -----------------------------------------
10662 -- Fetch the PK column names and data --
10663 -- types for the passed-in object name --
10664 -----------------------------------------
10665 SELECT PK1_COLUMN_NAME,
10666 PK2_COLUMN_NAME,
10667 PK3_COLUMN_NAME,
10668 PK4_COLUMN_NAME,
10669 PK5_COLUMN_NAME
10670 INTO l_pk1_column_name,
10671 l_pk2_column_name,
10672 l_pk3_column_name,
10673 l_pk4_column_name,
10674 l_pk5_column_name
10675 FROM FND_OBJECTS
10676 WHERE OBJ_NAME = p_object_name;
10677
10678 --------------------------------------------
10679 -- Fetching the ext table/vl name --
10680 --------------------------------------------
10681 SELECT FLEX_EXT.APPLICATION_VL_NAME EXT_VL_NAME,
10682 FLEX.APPLICATION_TABLE_NAME EXT_TABLE_NAME
10683 INTO l_ext_vl_table_name,
10684 l_ext_b_table_name
10685 FROM FND_DESCRIPTIVE_FLEXS FLEX,
10686 EGO_FND_DESC_FLEXS_EXT FLEX_EXT
10687 WHERE FLEX.APPLICATION_ID = FLEX_EXT.APPLICATION_ID(+)
10688 AND FLEX.DESCRIPTIVE_FLEXFIELD_NAME = FLEX_EXT.DESCRIPTIVE_FLEXFIELD_NAME(+)
10689 AND FLEX.APPLICATION_ID = p_application_id
10690 AND FLEX.DESCRIPTIVE_FLEXFIELD_NAME = p_attr_group_type;
10691
10692 IF(l_ext_vl_table_name IS NULL) THEN
10693 l_ext_vl_table_name := l_ext_b_table_name;
10694 END IF;
10695
10696
10697 /**********************
10698 ***********************/
10699 ------------------------------------------------------------
10700 -- Get data level information for the given object name --
10701 ------------------------------------------------------------
10702 l_data_level_col_exists := FND_API.TO_BOOLEAN(
10703 EGO_USER_ATTRS_COMMON_PVT.has_column_in_table(
10704 p_table_name => l_ext_b_table_name,
10705 p_column_name => 'DATA_LEVEL_ID'));
10706
10707 l_list_of_dl_for_ag_type := EGO_USER_ATTRS_COMMON_PVT.Get_Data_Levels_For_AGType( p_application_id => p_application_id
10708 ,p_attr_group_type => p_attr_group_type);
10709
10710 ------------------------------------------------------------
10711 -- Get data level information for the given object name --
10712 -- R12C onwards the data level info wud not be stored in --
10713 -- lookups table. Hence we get it from the dl meta data --
10714 -- table fetched. We assume here that there can be only 3 --
10715 -- data levels with only one pk column. This assumption is -
10716 -- as per the support offered prior to R12C --
10717 ------------------------------------------------------------
10718 l_dummy := 0;
10719 FOR i IN l_list_of_dl_for_ag_type.FIRST .. l_list_of_dl_for_ag_type.LAST
10720 LOOP
10721
10722 IF(l_list_of_dl_for_ag_type(i).PK_COLUMN_NAME1 <> 'NONE'
10723 AND l_list_of_dl_for_ag_type(i).PK_COLUMN_NAME1 IS NOT NULL) THEN
10724
10725 l_dummy := l_dummy + 1;
10726
10727 IF (l_dummy = 1) THEN
10728
10729 l_data_level_1 := l_list_of_dl_for_ag_type(i).DATA_LEVEL_NAME;
10730 l_data_level_column_1 := l_list_of_dl_for_ag_type(i).PK_COLUMN_NAME1;
10731 l_num_data_level_columns := 1;
10732
10733 ELSIF (l_dummy = 2) THEN
10734
10735 l_data_level_2 := l_list_of_dl_for_ag_type(i).DATA_LEVEL_NAME;
10736 l_data_level_column_2 := l_list_of_dl_for_ag_type(i).PK_COLUMN_NAME1;
10737 l_num_data_level_columns := 2;
10738
10739 ELSIF (l_dummy = 3) THEN
10740 l_data_level_3 := l_list_of_dl_for_ag_type(i).DATA_LEVEL_NAME;
10741 l_data_level_column_3 := l_list_of_dl_for_ag_type(i).PK_COLUMN_NAME1;
10742 l_num_data_level_columns := 3;
10743
10744 END IF;
10745
10746 END IF;
10747
10748 END LOOP;
10749
10750 ------------------------------------------------
10751 -- Building the PK Join for the where clause --
10752 ------------------------------------------------
10753
10754 l_ext_intf_pk_join_sql := ' ';
10755
10756 IF (l_pk1_column_name IS NOT NULL) THEN
10757 l_ext_intf_pk_join_sql := l_ext_intf_pk_join_sql || ' AND '||l_pk1_column_name||' = INTRFC.'||l_pk1_column_name;
10758 END IF;
10759 IF (l_pk2_column_name IS NOT NULL) THEN
10760 l_ext_intf_pk_join_sql := l_ext_intf_pk_join_sql || ' AND '||l_pk2_column_name||' = INTRFC.'||l_pk2_column_name;
10761 END IF;
10762 IF (l_pk3_column_name IS NOT NULL) THEN
10763 l_ext_intf_pk_join_sql := l_ext_intf_pk_join_sql || ' AND '||l_pk3_column_name||' = INTRFC.'||l_pk3_column_name;
10764 END IF;
10765 IF (l_pk4_column_name IS NOT NULL) THEN
10766 l_ext_intf_pk_join_sql := l_ext_intf_pk_join_sql || ' AND '||l_pk4_column_name||' = INTRFC.'||l_pk4_column_name;
10767 END IF;
10768 IF (l_pk5_column_name IS NOT NULL) THEN
10769 l_ext_intf_pk_join_sql := l_ext_intf_pk_join_sql || ' AND '||l_pk5_column_name||' = INTRFC.'||l_pk5_column_name;
10770 END IF;
10771
10772 --------------------------------------------------------
10773 -- Building the Data Level Join for the where clause --
10774 --------------------------------------------------------
10775
10776 l_ext_intf_dl_join_sql := ' ';
10777
10778
10779 IF(l_data_level_col_exists) THEN
10780 l_ext_intf_dl_join_sql := l_ext_intf_dl_join_sql || ' AND NVL(DATA_LEVEL_ID,'||G_NULL_TOKEN_NUM||') '||
10781 ' = NVL(INTRFC.DATA_LEVEL_ID,'||G_NULL_TOKEN_NUM||')';
10782
10783 FOR i IN l_list_of_dl_for_ag_type.FIRST .. l_list_of_dl_for_ag_type.LAST
10784 LOOP
10785
10786 IF (l_list_of_dl_for_ag_type(i).PK_COLUMN_NAME1 IS NOT NULL AND l_list_of_dl_for_ag_type(i).PK_COLUMN_NAME1 <> 'NONE'
10787 AND INSTR(l_ext_intf_dl_join_sql,l_list_of_dl_for_ag_type(i).PK_COLUMN_NAME1) = 0) THEN
10788
10789 IF(l_list_of_dl_for_ag_type(i).PK_COLUMN_TYPE1 = 'NUMBER') THEN
10790 wierd_constant := G_NULL_TOKEN_NUM;
10791 ELSIF (l_list_of_dl_for_ag_type(i).PK_COLUMN_TYPE1 = 'DATE' OR l_list_of_dl_for_ag_type(i).PK_COLUMN_TYPE1 = 'DATETIME') THEN
10792 wierd_constant := G_NULL_TOKEN_DATE;
10793 ELSE
10794 wierd_constant := G_NULL_TOKEN_STR;
10795 END IF;
10796
10797 l_ext_intf_dl_join_sql := l_ext_intf_dl_join_sql || ' AND NVL('||l_list_of_dl_for_ag_type(i).PK_COLUMN_NAME1||','||wierd_constant||') '||
10798 ' = NVL(INTRFC.'||l_list_of_dl_for_ag_type(i).PK_COLUMN_NAME1||','||wierd_constant||')';
10799 END IF;
10800 IF (l_list_of_dl_for_ag_type(i).PK_COLUMN_NAME2 IS NOT NULL AND l_list_of_dl_for_ag_type(i).PK_COLUMN_NAME2 <> 'NONE'
10801 AND INSTR(l_ext_intf_dl_join_sql,l_list_of_dl_for_ag_type(i).PK_COLUMN_NAME2) = 0) THEN
10802 IF(l_list_of_dl_for_ag_type(i).PK_COLUMN_TYPE2 = 'NUMBER') THEN
10803 wierd_constant := G_NULL_TOKEN_NUM;
10804 ELSIF (l_list_of_dl_for_ag_type(i).PK_COLUMN_TYPE2 = 'DATE' OR l_list_of_dl_for_ag_type(i).PK_COLUMN_TYPE2 = 'DATETIME') THEN
10805 wierd_constant := G_NULL_TOKEN_DATE;
10806 ELSE
10807 wierd_constant := G_NULL_TOKEN_STR;
10808 END IF;
10809 l_ext_intf_dl_join_sql := l_ext_intf_dl_join_sql || ' AND NVL('||l_list_of_dl_for_ag_type(i).PK_COLUMN_NAME2||','||wierd_constant||') '||
10810 ' = NVL(INTRFC.'||l_list_of_dl_for_ag_type(i).PK_COLUMN_NAME2||','||wierd_constant||')';
10811 END IF;
10812 IF (l_list_of_dl_for_ag_type(i).PK_COLUMN_NAME3 IS NOT NULL AND l_list_of_dl_for_ag_type(i).PK_COLUMN_NAME3 <> 'NONE'
10813 AND INSTR(l_ext_intf_dl_join_sql,l_list_of_dl_for_ag_type(i).PK_COLUMN_NAME3) = 0) THEN
10814 IF(l_list_of_dl_for_ag_type(i).PK_COLUMN_TYPE3 = 'NUMBER') THEN
10815 wierd_constant := G_NULL_TOKEN_NUM;
10816 ELSIF (l_list_of_dl_for_ag_type(i).PK_COLUMN_TYPE3 = 'DATE' OR l_list_of_dl_for_ag_type(i).PK_COLUMN_TYPE3 = 'DATETIME') THEN
10817 wierd_constant := G_NULL_TOKEN_DATE;
10818 ELSE
10819 wierd_constant := G_NULL_TOKEN_STR;
10820 END IF;
10821 l_ext_intf_dl_join_sql := l_ext_intf_dl_join_sql || ' AND NVL('||l_list_of_dl_for_ag_type(i).PK_COLUMN_NAME3||','||wierd_constant||') '||
10822 ' = NVL(INTRFC.'||l_list_of_dl_for_ag_type(i).PK_COLUMN_NAME3||','||wierd_constant||')';
10823 END IF;
10824 IF (l_list_of_dl_for_ag_type(i).PK_COLUMN_NAME4 IS NOT NULL AND l_list_of_dl_for_ag_type(i).PK_COLUMN_NAME4 <> 'NONE'
10825 AND INSTR(l_ext_intf_dl_join_sql,l_list_of_dl_for_ag_type(i).PK_COLUMN_NAME4) = 0) THEN
10826 IF(l_list_of_dl_for_ag_type(i).PK_COLUMN_TYPE4 = 'NUMBER') THEN
10827 wierd_constant := G_NULL_TOKEN_NUM;
10828 ELSIF (l_list_of_dl_for_ag_type(i).PK_COLUMN_TYPE4 = 'DATE' OR l_list_of_dl_for_ag_type(i).PK_COLUMN_TYPE4 = 'DATETIME') THEN
10829 wierd_constant := G_NULL_TOKEN_DATE;
10830 ELSE
10831 wierd_constant := G_NULL_TOKEN_STR;
10832 END IF;
10833 l_ext_intf_dl_join_sql := l_ext_intf_dl_join_sql || ' AND NVL('||l_list_of_dl_for_ag_type(i).PK_COLUMN_NAME4||','||wierd_constant||') '||
10834 ' = NVL(INTRFC.'||l_list_of_dl_for_ag_type(i).PK_COLUMN_NAME4||','||wierd_constant||')';
10835 END IF;
10836 IF (l_list_of_dl_for_ag_type(i).PK_COLUMN_NAME5 IS NOT NULL AND l_list_of_dl_for_ag_type(i).PK_COLUMN_NAME5 <> 'NONE'
10837 AND INSTR(l_ext_intf_dl_join_sql,l_list_of_dl_for_ag_type(i).PK_COLUMN_NAME5) = 0) THEN
10838 IF(l_list_of_dl_for_ag_type(i).PK_COLUMN_TYPE5 = 'NUMBER') THEN
10839 wierd_constant := G_NULL_TOKEN_NUM;
10840 ELSIF (l_list_of_dl_for_ag_type(i).PK_COLUMN_TYPE5 = 'DATE' OR l_list_of_dl_for_ag_type(i).PK_COLUMN_TYPE5 = 'DATETIME') THEN
10841 wierd_constant := G_NULL_TOKEN_DATE;
10842 ELSE
10843 wierd_constant := G_NULL_TOKEN_STR;
10844 END IF;
10845 l_ext_intf_dl_join_sql := l_ext_intf_dl_join_sql || ' AND NVL('||l_list_of_dl_for_ag_type(i).PK_COLUMN_NAME5||','||wierd_constant||') '||
10846 ' = NVL(INTRFC.'||l_list_of_dl_for_ag_type(i).PK_COLUMN_NAME5||','||wierd_constant||')';
10847 END IF;
10848 END LOOP;
10849 ELSE
10850 IF(l_num_data_level_columns = 1 ) THEN
10851 l_ext_intf_dl_join_sql := l_ext_intf_dl_join_sql || ' AND NVL('||l_data_level_column_1||',-1) = NVL(INTRFC.'||l_data_level_column_1||', -1) ';
10852 ELSIF(l_num_data_level_columns = 2 ) THEN
10853 l_ext_intf_dl_join_sql := l_ext_intf_dl_join_sql || ' AND NVL('||l_data_level_column_1||',-1) = NVL(INTRFC.'||l_data_level_column_1||', -1) ';
10854 l_ext_intf_dl_join_sql := l_ext_intf_dl_join_sql || ' AND NVL('||l_data_level_column_2||',-1) = NVL(INTRFC.'||l_data_level_column_2||', -1) ';
10855 ELSIF(l_num_data_level_columns = 3 ) THEN
10856 l_ext_intf_dl_join_sql := l_ext_intf_dl_join_sql || ' AND NVL('||l_data_level_column_1||',-1) = NVL(INTRFC.'||l_data_level_column_1||', -1) ';
10857 l_ext_intf_dl_join_sql := l_ext_intf_dl_join_sql || ' AND NVL('||l_data_level_column_2||',-1) = NVL(INTRFC.'||l_data_level_column_2||', -1) ';
10858 l_ext_intf_dl_join_sql := l_ext_intf_dl_join_sql || ' AND NVL('||l_data_level_column_3||',-1) = NVL(INTRFC.'||l_data_level_column_3||', -1) ';
10859 END IF;
10860 END IF;
10861
10862
10863
10864
10865 -----------------------------------------------------------------------
10866 -- Looping thru distinct attr groups to be present in the intf table --
10867 -----------------------------------------------------------------------
10868 OPEN l_dynamic_dist_ag_cursor FOR
10869 ' SELECT DISTINCT ATTR_GROUP_INT_NAME
10870 FROM '||p_interface_table_name||' UAI1
10871 WHERE DATA_SET_ID = :data_set_id
10872 AND ATTR_GROUP_TYPE = :attr_group_type
10873 AND UAI1.PROCESS_STATUS = '||G_PS_IN_PROCESS||' '
10874 USING p_data_set_id, p_attr_group_type;
10875 LOOP
10876 FETCH l_dynamic_dist_ag_cursor INTO l_attr_group_int_name;
10877 EXIT WHEN l_dynamic_dist_ag_cursor%NOTFOUND;
10878
10879 code_debug(' ... Processing attr group '||l_attr_group_int_name ,2);
10880
10881 -------------------------------------------------------------
10882 -- Find out weather the ATTR_GROUP_ID column exists in the --
10883 -- table where attribute data is to be uploaded or not --
10884 -------------------------------------------------------------
10885 /* bug 9849770 we can't use this API since it is querying all_tables to find out if col exists or not, while l_ext_vl_table_name is actually a view
10886 it will always return false for this API. Change back to the code R12.0 used in determine if attrGroup id exists
10887 l_ag_id_col_exists := FND_API.TO_BOOLEAN(
10888 EGO_USER_ATTRS_COMMON_PVT.has_column_in_table(
10889 p_table_name => l_ext_vl_table_name,
10890 p_column_name => 'ATTR_GROUP_ID')); */
10891 BEGIN
10892 l_dynamic_sql := ' SELECT ATTR_GROUP_ID FROM '||l_ext_vl_table_name||' WHERE ROWNUM=1 ';
10893 EXECUTE IMMEDIATE l_dynamic_sql;
10894 l_ag_id_col_exists := TRUE;
10895 EXCEPTION
10896 WHEN OTHERS THEN
10897 l_ag_id_col_exists := FALSE;
10898 END;
10899 -- End bug 9849770
10900
10901 l_attr_group_metadata_obj := EGO_USER_ATTRS_COMMON_PVT.Get_Attr_Group_Metadata(
10902 p_attr_group_id => NULL
10903 ,p_application_id => p_application_id
10904 ,p_attr_group_type => p_attr_group_type
10905 ,p_attr_group_name => l_attr_group_int_name
10906 );
10907
10908 --------------------------------------------------------------------
10909 -- Here we build the SQL to be executed for each of the attribute --
10910 -- groups present in the interface table --
10911 --------------------------------------------------------------------
10912 l_dynamic_sql := ' UPDATE '||p_interface_table_name||' INTRFC '||
10913 ' SET PROCESS_STATUS = '||p_new_status||
10914 ' WHERE PROCESS_STATUS = '||G_PS_IN_PROCESS||
10915 ' AND ATTR_GROUP_INT_NAME = '''||l_attr_group_int_name||''' '||
10916 ' AND ATTR_GROUP_TYPE = '''||p_attr_group_type||''' '||
10917 ' AND DATA_SET_ID = :data_set_id '||
10918 ' AND EXISTS ( SELECT 1 '||
10919 ' FROM '||l_ext_vl_table_name||
10920 ' WHERE 1=1 ';
10921
10922 IF(l_ag_id_col_exists) THEN
10923 l_dynamic_sql := l_dynamic_sql||' AND ATTR_GROUP_ID = INTRFC.ATTR_GROUP_ID ';
10924 END IF;
10925
10926 l_dynamic_sql := l_dynamic_sql||l_ext_intf_pk_join_sql||l_ext_intf_dl_join_sql;
10927
10928 l_uk_where_caluse := '';
10929 l_str_attr_decode_list_Ext := '';
10930 l_num_attr_decode_list_Ext := '';
10931 l_date_attr_decode_list_Ext := '';
10932 l_uk_attr_list := '';
10933 --FP bug 8274031
10934 l_str_attr_decode_list_Intf := '';
10935 l_num_attr_decode_list_Intf := '';
10936 l_date_attr_decode_list_Intf := '';
10937 --FP bug 8274031
10938 l_attr_metadata_table := l_attr_group_metadata_obj.ATTR_METADATA_TABLE;
10939 ------------------------------------------------------
10940 -- Looping through the attrs for building the SQL
10941 ------------------------------------------------------
10942 FOR i IN l_attr_metadata_table.FIRST .. l_attr_metadata_table.LAST
10943 LOOP
10944
10945 IF (l_attr_group_metadata_obj.MULTI_ROW_CODE = 'Y' AND l_attr_metadata_table(i).UNIQUE_KEY_FLAG = 'Y') THEN
10946
10947 l_uk_attr_list := l_uk_attr_list||' '''||l_attr_metadata_table(i).ATTR_NAME||''', ';
10948 IF (l_attr_metadata_table(i).DATA_TYPE_CODE = EGO_EXT_FWK_PUB.G_NUMBER_DATA_TYPE) THEN
10949
10950 l_uk_where_caluse := l_uk_where_caluse||
10951 ' AND NVL('||l_attr_metadata_table(i).DATABASE_COLUMN||', '||G_NULL_TOKEN_NUM||' ) '||
10952 ' = NVL((SELECT ATTR_VALUE_NUM '||
10953 ' FROM '||p_interface_table_name||' UAI '||
10954 ' WHERE UAI.DATA_SET_ID = :data_set_id '||
10955 ' AND UAI.ATTR_GROUP_INT_NAME = '''||l_attr_group_int_name||''' '||
10956 ' AND UAI.PROCESS_STATUS = '||G_PS_IN_PROCESS||
10957 ' AND UAI.ATTR_INT_NAME = '''||l_attr_metadata_table(i).ATTR_NAME||''' '||
10958 ' AND UAI.ROW_IDENTIFIER = INTRFC.ROW_IDENTIFIER '||
10959 ' ) '||
10960 ' ,'||G_NULL_TOKEN_NUM||' ) ';
10961
10962 ELSIF (l_attr_metadata_table(i).DATA_TYPE_CODE = EGO_EXT_FWK_PUB.G_DATE_DATA_TYPE OR
10963 l_attr_metadata_table(i).DATA_TYPE_CODE = EGO_EXT_FWK_PUB.G_DATE_TIME_DATA_TYPE) THEN
10964
10965 l_uk_where_caluse := l_uk_where_caluse||
10966 ' AND NVL('||l_attr_metadata_table(i).DATABASE_COLUMN||', '||G_NULL_TOKEN_DATE||' ) '||
10967 ' = NVL((SELECT ATTR_VALUE_DATE '||
10968 ' FROM '||p_interface_table_name||' UAI '||
10969 ' WHERE UAI.DATA_SET_ID = :data_set_id '||
10970 ' AND UAI.ATTR_GROUP_INT_NAME = '''||l_attr_group_int_name||''' '||
10971 ' AND UAI.PROCESS_STATUS = '||G_PS_IN_PROCESS||
10972 ' AND UAI.ATTR_INT_NAME = '''||l_attr_metadata_table(i).ATTR_NAME||''' '||
10973 ' AND UAI.ROW_IDENTIFIER = INTRFC.ROW_IDENTIFIER '||
10974 ' ) '||
10975 ' ,'||G_NULL_TOKEN_DATE||' ) ';
10976
10977 ELSE
10978
10979 l_uk_where_caluse := l_uk_where_caluse||
10980 ' AND NVL('||l_attr_metadata_table(i).DATABASE_COLUMN||', '||G_NULL_TOKEN_STR||' ) '||
10981 ' = NVL((SELECT ATTR_VALUE_STR '||
10982 ' FROM '||p_interface_table_name||' UAI '||
10983 ' WHERE UAI.DATA_SET_ID = :data_set_id '||
10984 ' AND UAI.ATTR_GROUP_INT_NAME = '''||l_attr_group_int_name||''' '||
10985 ' AND UAI.PROCESS_STATUS = '||G_PS_IN_PROCESS||
10986 ' AND UAI.ATTR_INT_NAME = '''||l_attr_metadata_table(i).ATTR_NAME||''' '||
10987 ' AND UAI.ROW_IDENTIFIER = INTRFC.ROW_IDENTIFIER '||
10988 ' ) '||
10989 ' ,'||G_NULL_TOKEN_STR||' ) ';
10990
10991 END IF;
10992
10993 ELSE -- If the AG is not multi row and the attr being processed is not a UK
10994
10995 IF (l_attr_metadata_table(i).DATA_TYPE_CODE = EGO_EXT_FWK_PUB.G_NUMBER_DATA_TYPE) THEN
10996 l_num_attr_decode_list_Ext := l_num_attr_decode_list_Ext||' ,'''||l_attr_metadata_table(i).ATTR_NAME||''' ,'||l_attr_metadata_table(i).DATABASE_COLUMN;
10997 l_num_attr_decode_list_Intf := l_num_attr_decode_list_Intf||' ,'''||l_attr_metadata_table(i).ATTR_NAME||''' , INTRFC.ATTR_VALUE_NUM ';
10998 ELSIF (l_attr_metadata_table(i).DATA_TYPE_CODE = EGO_EXT_FWK_PUB.G_DATE_DATA_TYPE OR
10999 l_attr_metadata_table(i).DATA_TYPE_CODE = EGO_EXT_FWK_PUB.G_DATE_TIME_DATA_TYPE) THEN
11000 l_date_attr_decode_list_Ext := l_date_attr_decode_list_Ext||' ,'''||l_attr_metadata_table(i).ATTR_NAME||''' ,'||l_attr_metadata_table(i).DATABASE_COLUMN;
11001 l_date_attr_decode_list_Intf := l_date_attr_decode_list_Intf||' ,'''||l_attr_metadata_table(i).ATTR_NAME||''' , INTRFC.ATTR_VALUE_DATE ';
11002 ELSE
11003 l_str_attr_decode_list_Ext := l_str_attr_decode_list_Ext||' ,'''||l_attr_metadata_table(i).ATTR_NAME||''' ,'||l_attr_metadata_table(i).DATABASE_COLUMN;
11004 l_str_attr_decode_list_Intf := l_str_attr_decode_list_Intf||' ,'''||l_attr_metadata_table(i).ATTR_NAME||''' , INTRFC.ATTR_VALUE_STR ';
11005 END IF;
11006
11007 END IF;
11008
11009 END LOOP;
11010
11011 -------------------------------------------------------------------
11012 -- Appending whatever we built in the attr loop above to the DML --
11013 -------------------------------------------------------------------
11014 IF( LENGTH(l_num_attr_decode_list_Ext)>2 ) THEN
11015 l_dynamic_sql := l_dynamic_sql||' AND NVL(DECODE(INTRFC.ATTR_INT_NAME '||l_num_attr_decode_list_Intf||', NULL),'||G_NULL_TOKEN_NUM||' ) '||
11016 ' = NVL(DECODE(INTRFC.ATTR_INT_NAME '||l_num_attr_decode_list_Ext||', NULL),'||G_NULL_TOKEN_NUM||' ) ';
11017 END IF;
11018
11019 IF( LENGTH(l_date_attr_decode_list_Ext)>2 ) THEN
11020 l_dynamic_sql := l_dynamic_sql||' AND NVL(DECODE(INTRFC.ATTR_INT_NAME '||l_date_attr_decode_list_Intf||', NULL),'||G_NULL_TOKEN_DATE||' ) '||
11021 ' = NVL(DECODE(INTRFC.ATTR_INT_NAME '||l_date_attr_decode_list_Ext||', NULL),'||G_NULL_TOKEN_DATE||' ) ';
11022 END IF;
11023
11024 IF( LENGTH(l_str_attr_decode_list_Ext)>2 ) THEN
11025 l_dynamic_sql := l_dynamic_sql||' AND NVL(DECODE(INTRFC.ATTR_INT_NAME '||l_str_attr_decode_list_Intf||', NULL),'||G_NULL_TOKEN_STR||' ) '||
11026 ' = NVL(DECODE(INTRFC.ATTR_INT_NAME '||l_str_attr_decode_list_Ext||', NULL),'||G_NULL_TOKEN_STR||' ) ';
11027 END IF;
11028
11029 l_dynamic_sql := l_dynamic_sql||l_uk_where_caluse||')';
11030
11031 IF(LENGTH(l_uk_attr_list)>3) THEN
11032 l_dynamic_sql := l_dynamic_sql||' AND ATTR_INT_NAME NOT IN ('||l_uk_attr_list||' ''!@#$%^'')';
11033 END IF;
11034
11035 ---------------------------------
11036 -- Executing the Final DML --
11037 ----------------------------------
11038 IF(l_dyn_cursor IS NULL ) THEN
11039 l_dyn_cursor := DBMS_SQL.Open_Cursor;
11040 END IF;
11041 DBMS_SQL.Parse(l_dyn_cursor, l_dynamic_sql, DBMS_SQL.NATIVE);
11042 DBMS_SQL.Bind_Variable(l_dyn_cursor, ':data_set_id', p_data_set_id);
11043 l_dummy := DBMS_SQL.Execute(l_dyn_cursor);
11044 END LOOP; --Ending the loop for distinct AG's
11045
11046 IF (l_dyn_cursor IS NOT NULL) THEN
11047 DBMS_SQL.Close_Cursor(l_dyn_cursor);
11048 END IF;
11049
11050 --------------------------------
11051 -- Standard check of p_commit --
11052 --------------------------------
11053 IF FND_API.To_Boolean(p_commit) THEN
11054 COMMIT WORK;
11055 END IF;
11056
11057 x_return_status := FND_API.G_RET_STS_SUCCESS;
11058
11059 EXCEPTION
11060 WHEN OTHERS THEN
11061 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
11062 x_msg_data := 'Executing - EGO_USER_ATTRS_BULK_PVT.Mark_Unchanged_Attr_Rows: '||SQLERRM;
11063
11064
11065 END Mark_Unchanged_Attr_Rows;
11066
11067 -- abedajna Bug 6322809
11068
11069 -- This procedure finds the starting index of the 'final' order by clause in a sql.
11070 -- Consider the following sql:
11071 -- select * from (select * from abb_vs order by id desc) where rownum < 4 order by
11072 -- ( select id from (select id from abb_vs order by id) where rownum = 1 ) asc
11073 -- In this case, this method will return the starting index of the last order by clause
11074 -- that is used to "order" the query result, in contrast with the order by clause
11075 -- which is used as an integral part of the query to "determine" the query result
11076
11077 -- Algorithm used:
11078 -- Is the whereclause null? exit ; else continue
11079 -- Does the whereclause start with order by? exit ; else continue
11080 -- Only /* ... */ type of comments are allowed in value set whereclauses. Parse the query to strip
11081 -- it of all comments. Users may put parentheses in comments that can interefere with the following algorithm.
11082 -- Start investigating the remaining whereclause from the end.
11083 -- Get the position of the first order by clause (i.e. the last one).
11084 -- Calculate the number of '(' and the number of ')' after the order by clause.
11085 -- Are they equal? If yes, that's the last order by.
11086 -- No? Get the order by prior to that, from the end of the string, backwards, and repeat the same calculation.
11087 -- When you get the target order by clause, seperate it out, take the rest of the whereclause,
11088 -- assuming it's not null, wrap it around parenthesis, add it back to the whereclause and return the result.
11089
11090 function process_whereclause (p_whereclausein in varchar2) return varchar2 is
11091 len number;
11092 pos number;
11093 cls varchar2(32767);
11094 startcomment number;
11095 endcomment number;
11096 l_whereclausein varchar2(32767);
11097 begin
11098
11099 --Bug 9733672, adding the validations about where clause with null value
11100 /*if p_whereclausein is null then
11101 return null;
11102 end if;*/
11103 IF (Length(Trim(p_whereclausein)) IS NULL OR Length(Trim(p_whereclausein)) < 3) THEN
11104 RETURN p_whereclausein;
11105 ELSE
11106
11107 --if ( ( instr(p_whereclausein, '(', 1,1) = 1 ) AND ( instr(p_whereclausein,')', -1,1) = length(p_whereclausein) ) ) then
11108 -- return p_whereclausein;
11109 --end if;
11110
11111 startcomment := instr(p_whereclausein, '/*', 1,1);
11112 endcomment := instr(p_whereclausein, '*/', 1,1);
11113 if (( startcomment <> 0 ) OR (endcomment <> 0)) then
11114 if (( startcomment <> 0 ) AND (endcomment <> 0) AND (startcomment <
11115 endcomment)) then
11116 l_whereclausein := substr(p_whereclausein, 1, startcomment - 1) ||
11117 substr(p_whereclausein, endcomment + 2);
11118 else
11119 return p_whereclausein; -- unlikely case
11120 end if;
11121 else
11122 l_whereclausein := p_whereclausein;
11123 end if;
11124
11125 len := length(l_whereclausein);
11126
11127 pos := get_order_by( l_whereclausein, len );
11128
11129 if pos <> 0 then
11130 cls := substr( l_whereclausein, 1, pos-1 );
11131 if ( cls is not null ) then
11132 return '('||cls||')'||substr(l_whereclausein, pos);
11133 -- Sean, bug 12910136, add the return value for else case
11134 else
11135 return '('||l_whereclausein||')';
11136 end if;
11137 else
11138 return '('||l_whereclausein||')';
11139 end if;
11140 END IF; --end if for 'IF (Length(Trim(p_whereclausein)) IS NULL ) THEN'
11141 end process_whereclause;
11142
11143
11144 -- abedajna Bug 6322809
11145 function get_num_occur (p_string in varchar2, p_char in varchar2) return number
11146 is
11147 startpos number := 1;
11148 currentpos number := 0;
11149 num_occur number := 0;
11150 begin
11151 loop
11152 currentpos := instr(p_string, p_char, startpos);
11153 exit when currentpos = 0;
11154 num_occur := num_occur + 1;
11155 startpos := currentpos + 1;
11156 end loop;
11157 return num_occur;
11158 end get_num_occur;
11159
11160
11161 -- abedajna Bug 6322809
11162 function get_order_by (p_whereclause in varchar2, p_len in number) return number
11163 is
11164 pos number := 0;
11165 startpos number := -1;
11166 begin
11167 loop
11168 pos := instr(upper(p_whereclause), 'ORDER BY', startpos, 1);
11169 exit when pos = 0;
11170 if ( get_num_occur( substr(p_whereclause, pos), '(' ) = get_num_occur( substr(p_whereclause, pos), ')' ) ) then
11171 return pos;
11172 end if;
11173 startpos := (-1) * (p_len - pos + 2);
11174 end loop;
11175 return 0;
11176 end get_order_by;
11177
11178 END EGO_USER_ATTRS_BULK_PVT;