DBA Data[Home] [Help]

PACKAGE BODY: APPS.EGO_IMPORT_PVT

Source


1 PACKAGE BODY EGO_IMPORT_PVT AS
2 /* $Header: EGOVIMPB.pls 120.173 2007/11/09 03:04:37 mantyaku ship $ */
3 
4     G_DEFAULT_ATTR_GROUP_TYPE    CONSTANT VARCHAR2(30) := 'EGO_ITEMMGMT_GROUP';
5 --  G_IOI_STAMP_REQUEST_ID_FLAG  CONSTANT NUMBER := -1;
6 
7     G_TRANS_TYPE_CREATE         CONSTANT VARCHAR2(10) := 'CREATE';
8     G_TRANS_TYPE_UPDATE         CONSTANT VARCHAR2(10) := 'UPDATE';
9     G_TRANS_TYPE_DELETE         CONSTANT VARCHAR2(10) := 'DELETE';
10     G_TRANS_TYPE_SYNC           CONSTANT VARCHAR2(10) := 'SYNC';
11 
12     TYPE UROWID_TABLE    IS     TABLE OF UROWID;
13     G_MSII_REIMPORT_ROWS        UROWID_TABLE;
14 
15     G_NEEDS_REQUEST_ID_STAMP    CONSTANT NUMBER := -1;
16     G_NEED_TO_LOG_ERROR         CONSTANT NUMBER := -3;
17 
18     SUBTYPE MSII_ROW    IS MTL_SYSTEM_ITEMS_INTERFACE%ROWTYPE;
19     TYPE COLUMN_NAMES   IS TABLE OF ALL_TAB_COLUMNS.COLUMN_NAME%TYPE;
20     SUBTYPE EIUAI_ROW   IS EGO_ITM_USR_ATTR_INTRFC%ROWTYPE;
21     TYPE EIUAI_ROWS     IS TABLE OF EIUAI_ROW INDEX BY BINARY_INTEGER;
22     SUBTYPE IAssocs_Row IS EGO_ITEM_ASSOCIATIONS_INTF%ROWTYPE;
23     TYPE IAssocs_Rows   IS TABLE OF IAssocs_Row INDEX BY BINARY_INTEGER;
24 
25     G_PARTY_NAME        VARCHAR2(100);
26 
27     G_LOG_TIMESTAMP_FORMAT CONSTANT VARCHAR2( 30 ) := 'dd-mon-yyyy hh:mi:ss.ff';
28 
29     G_EXCEL_MISS_DATE_VAL   CONSTANT DATE           := to_date( '9999-12-31', 'YYYY-MM-DD' );
30     G_EXCEL_MISS_DATE_STR   CONSTANT VARCHAR2(50)   := 'to_date(''9999-12-31'', ''YYYY-MM-DD'') ';
31 
32     G_EXCEL_MISS_NUM_STR    CONSTANT VARCHAR2(20)   := EGO_USER_ATTRS_BULK_PVT.G_NULL_NUM_VAL;
33     G_EXCEL_MISS_CHAR_VAL   CONSTANT VARCHAR2(30)   := EGO_USER_ATTRS_BULK_PVT.G_NULL_CHAR_VAL;
34 
35     G_EXCEL_MISS_VS_VAL     CONSTANT VARCHAR2(30)   := ''''||G_EXCEL_MISS_CHAR_VAL||'''';
36 
37     -- Confirm Status Constants Available in package spec
38     G_DATE_TIME_DATA_TYPE     CONSTANT FLAG := 'Y';
39 
40   /*
41    * This method writes into concurrent program log
42    */
43   PROCEDURE Debug_Conc_Log( p_message IN VARCHAR2
44                           , p_add_timestamp IN BOOLEAN DEFAULT TRUE )
45   IS
46      l_inv_debug_level  NUMBER := INVPUTLI.get_debug_level;     --Bug: 4667452
47   BEGIN
48     IF l_inv_debug_level IN(101, 102) THEN
49       INVPUTLI.info(  ( CASE
50                         WHEN p_add_timestamp THEN to_char( systimestamp, G_LOG_TIMESTAMP_FORMAT ) || ': '
51                         ELSE ''
52                         END  )
53                    ||   p_message );
54     END IF;
55   END Debug_Conc_Log;
56 
57   /*
58    * Private method to return current party name string associated with current user
59    */
60   FUNCTION Get_Current_Party_Name RETURN VARCHAR2
61   IS
62     l_party_id NUMBER;
63   BEGIN
64     IF G_PARTY_NAME IS NULL THEN
65       BEGIN
66         SELECT PARTY_ID INTO l_party_id
67         FROM ego_user_v
68         WHERE USER_ID = FND_GLOBAL.USER_ID;
69       EXCEPTION WHEN OTHERS THEN
70         RETURN NULL;
71       END;
72 
73       G_PARTY_NAME := 'HZ_PARTY:' || TO_CHAR(l_party_id);
74       RETURN G_PARTY_NAME;
75     ELSE
76       RETURN G_PARTY_NAME;
77     END IF;
78   END Get_Current_Party_Name;
79 
80        /*This method errors out all those rows in interface tables which have
81     *NULL source System reference or have invalid source system id.
82     *
83     *For handling the case when user insert data through BackEnd and tries to import
84     *data using Import WorkBench.
85     *
86     *Done for Bug 5352143
87     */
88   PROCEDURE Err_null_ssxref_ssid( p_data_set_id  IN  NUMBER )
89   IS
90     l_msg_text          VARCHAR2(4000);
91     l_err_text          VARCHAR2(4000);
92     l_user_id           NUMBER := FND_GLOBAL.USER_ID;
93     l_login_id          NUMBER := FND_GLOBAL.LOGIN_ID;
94     l_prog_appid        NUMBER := FND_GLOBAL.PROG_APPL_ID;
95     l_prog_id           NUMBER := FND_GLOBAL.CONC_PROGRAM_ID;
96     l_request_id        NUMBER := FND_GLOBAL.CONC_REQUEST_ID;
97     dumm_status         VARCHAR2(100);
98 
99     CURSOR c_ssxref_null_msii IS
100       SELECT
101         ORGANIZATION_ID,
102         TRANSACTION_ID,
103         PROCESS_FLAG
104       FROM MTL_SYSTEM_ITEMS_INTERFACE
105       WHERE SET_PROCESS_ID = p_data_set_id
106         AND PROCESS_FLAG IN (33379, 33389);
107 
108     CURSOR c_ssxref_null_miri IS
109       SELECT
110         ORGANIZATION_ID,
111         TRANSACTION_ID,
112         PROCESS_FLAG
113       FROM MTL_ITEM_REVISIONS_INTERFACE
114       WHERE SET_PROCESS_ID = p_data_set_id
115         AND PROCESS_FLAG  IN (33379, 33389);
116 
117     CURSOR c_ssxref_null_mici IS
118       SELECT
119         ORGANIZATION_ID,
120         TRANSACTION_ID,
121         PROCESS_FLAG
122       FROM MTL_ITEM_CATEGORIES_INTERFACE
123       WHERE SET_PROCESS_ID = p_data_set_id
124         AND PROCESS_FLAG  IN (33379, 33389);
125 
126     CURSOR c_ssxref_null_eiuai IS
127       SELECT
128         ORGANIZATION_ID,
129         TRANSACTION_ID,
130         PROCESS_STATUS
131       FROM EGO_ITM_USR_ATTR_INTRFC
132       WHERE DATA_SET_ID = p_data_set_id
133         AND PROCESS_STATUS  IN (33379, 33389);
134 
135     CURSOR c_ssxref_null_eipi IS
136       SELECT
137         ORGANIZATION_ID,
138         TRANSACTION_ID,
139         PROCESS_STATUS
140       FROM EGO_ITEM_PEOPLE_INTF
141       WHERE DATA_SET_ID = p_data_set_id
142         AND PROCESS_STATUS  IN (33379, 33389);
143 
144     CURSOR c_ssxref_null_eai IS
145       SELECT
146         ORGANIZATION_ID,
147         TRANSACTION_ID,
148         PROCESS_FLAG
149       FROM EGO_AML_INTF
150       WHERE DATA_SET_ID = p_data_set_id
151         AND PROCESS_FLAG  IN (33379, 33389);
152    --R12C:BEGIN
153    CURSOR c_ssxref_null_assocs IS
154      SELECT
155        ORGANIZATION_ID,
156        TRANSACTION_ID,
157        PROCESS_FLAG
158      FROM EGO_ITEM_ASSOCIATIONS_INTF
159      WHERE BATCH_ID = p_data_set_id
160      AND PROCESS_FLAG  IN (33379, 33389);
161    --R12C:BEGIN
162   BEGIN
163     Debug_Conc_Log( 'Err_null_ssxref_ssid - Begin' );
164 -- MSII
165     UPDATE MTL_SYSTEM_ITEMS_INTERFACE MSII
166     SET PROCESS_FLAG = (CASE WHEN MSII.SOURCE_SYSTEM_REFERENCE IS NULL THEN 33379 ELSE 33389 END),
167         TRANSACTION_ID   = NVL(TRANSACTION_ID, MTL_SYSTEM_ITEMS_INTERFACE_S.NEXTVAL),
168         PROGRAM_APPLICATION_ID = l_prog_appid,
169         PROGRAM_ID = l_prog_id,
170         REQUEST_ID = l_request_id
171     WHERE SET_PROCESS_ID = p_data_set_id
172       AND PROCESS_FLAG = 0
173       AND (MSII.SOURCE_SYSTEM_REFERENCE IS NULL
174         OR MSII.SOURCE_SYSTEM_ID <>
175               (SELECT SOURCE_SYSTEM_ID
176                FROM EGO_IMPORT_BATCHES_B
177                WHERE BATCH_ID = MSII.SET_PROCESS_ID
178               )
179           );
180 
181 -- MIRI
182     UPDATE MTL_ITEM_REVISIONS_INTERFACE MIRI
183     SET PROCESS_FLAG = (CASE WHEN MIRI.SOURCE_SYSTEM_REFERENCE IS NULL THEN 33379 ELSE 33389 END),
184         TRANSACTION_ID   = NVL(TRANSACTION_ID, MTL_SYSTEM_ITEMS_INTERFACE_S.NEXTVAL),
185         PROGRAM_APPLICATION_ID = l_prog_appid,
186         PROGRAM_ID = l_prog_id,
187         REQUEST_ID = l_request_id
188     WHERE SET_PROCESS_ID = p_data_set_id
189     AND   PROCESS_FLAG = 0
190     AND ( MIRI.SOURCE_SYSTEM_REFERENCE IS NULL
191         OR MIRI.SOURCE_SYSTEM_ID <>
192               (SELECT SOURCE_SYSTEM_ID
193                FROM EGO_IMPORT_BATCHES_B
194                WHERE BATCH_ID = MIRI.SET_PROCESS_ID
195               )
196           );
197 
198 -- MICI
199     UPDATE MTL_ITEM_CATEGORIES_INTERFACE MICI
200     SET PROCESS_FLAG = (CASE WHEN MICI.SOURCE_SYSTEM_REFERENCE IS NULL THEN 33379 ELSE 33389 END),
201         TRANSACTION_ID   = NVL(TRANSACTION_ID, MTL_SYSTEM_ITEMS_INTERFACE_S.NEXTVAL),
202         PROGRAM_APPLICATION_ID = l_prog_appid,
203         PROGRAM_ID = l_prog_id,
204         REQUEST_ID = l_request_id
205     WHERE SET_PROCESS_ID = p_data_set_id
206       AND PROCESS_FLAG = 0
207       AND (MICI.SOURCE_SYSTEM_REFERENCE IS NULL
208         OR MICI.SOURCE_SYSTEM_ID <>
209               (SELECT SOURCE_SYSTEM_ID
210                FROM EGO_IMPORT_BATCHES_B
211                WHERE BATCH_ID = MICI.SET_PROCESS_ID
212               )
213           );
214 
215 -- EIUAI
216     UPDATE EGO_ITM_USR_ATTR_INTRFC EIUAI
217     SET PROCESS_STATUS = (CASE WHEN EIUAI.SOURCE_SYSTEM_REFERENCE IS NULL THEN 33379 ELSE 33389 END),
218         TRANSACTION_ID   = NVL(TRANSACTION_ID, MTL_SYSTEM_ITEMS_INTERFACE_S.NEXTVAL),
219         PROGRAM_APPLICATION_ID = l_prog_appid,
220         PROGRAM_ID = l_prog_id,
221         REQUEST_ID = l_request_id
222     WHERE DATA_SET_ID = p_data_set_id
223       AND PROCESS_STATUS = 0
224       AND (EIUAI.SOURCE_SYSTEM_REFERENCE IS NULL
225         OR EIUAI.SOURCE_SYSTEM_ID <>
226               (SELECT SOURCE_SYSTEM_ID
227                FROM EGO_IMPORT_BATCHES_B
228                WHERE BATCH_ID = EIUAI.DATA_SET_ID
229               )
230           );
231 
232 -- EIPI
233     UPDATE EGO_ITEM_PEOPLE_INTF EIPI
234     SET PROCESS_STATUS = (CASE WHEN EIPI.SOURCE_SYSTEM_REFERENCE IS NULL THEN 33379 ELSE 33389 END),
235         TRANSACTION_ID   = NVL(TRANSACTION_ID, MTL_SYSTEM_ITEMS_INTERFACE_S.NEXTVAL),
236         PROGRAM_APPLICATION_ID = l_prog_appid,
237         PROGRAM_ID = l_prog_id,
238         REQUEST_ID = l_request_id
239     WHERE DATA_SET_ID = p_data_set_id
240       AND PROCESS_STATUS = 0
241       AND (EIPI.SOURCE_SYSTEM_REFERENCE IS NULL
242         OR EIPI.SOURCE_SYSTEM_ID <>
243               (SELECT SOURCE_SYSTEM_ID
244                FROM EGO_IMPORT_BATCHES_B
245                WHERE BATCH_ID = EIPI.DATA_SET_ID
246               )
247           );
248 
249 -- EAI
250     UPDATE EGO_AML_INTF EAI
251     SET PROCESS_FLAG = (CASE WHEN EAI.SOURCE_SYSTEM_REFERENCE IS NULL THEN 33379 ELSE 33389 END),
252         TRANSACTION_ID   = NVL(TRANSACTION_ID, MTL_SYSTEM_ITEMS_INTERFACE_S.NEXTVAL),
253         PROGRAM_APPLICATION_ID = l_prog_appid,
254         PROGRAM_ID = l_prog_id,
255         REQUEST_ID = l_request_id
256     WHERE DATA_SET_ID = p_data_set_id
257       AND PROCESS_FLAG = 0
258       AND (EAI.SOURCE_SYSTEM_REFERENCE IS NULL
259         OR EAI.SOURCE_SYSTEM_ID <>
260               (SELECT SOURCE_SYSTEM_ID
261                FROM EGO_IMPORT_BATCHES_B
262                WHERE BATCH_ID = EAI.DATA_SET_ID
263               )
264           );
265 
266 -- R12C:BEGIN ASSOCSINTF
267     UPDATE EGO_ITEM_ASSOCIATIONS_INTF EIAI
268     SET PROCESS_FLAG = (CASE WHEN EIAI.SOURCE_SYSTEM_REFERENCE IS NULL THEN 33379 ELSE 33389 END),
269         TRANSACTION_ID   = NVL(TRANSACTION_ID, MTL_SYSTEM_ITEMS_INTERFACE_S.NEXTVAL),
270         PROGRAM_APPLICATION_ID = l_prog_appid,
271         PROGRAM_ID = l_prog_id,
272         REQUEST_ID = l_request_id
273     WHERE BATCH_ID = p_data_set_id
274       AND PROCESS_FLAG = 0
275       AND (EIAI.SOURCE_SYSTEM_REFERENCE IS NULL
276         OR EIAI.SOURCE_SYSTEM_ID <>
277               (SELECT SOURCE_SYSTEM_ID
278                FROM EGO_IMPORT_BATCHES_B
279                WHERE BATCH_ID = EIAI.BATCH_ID
280               )
281           );
282 -- R12C:END ASSOCSINTF
283     Debug_Conc_Log( 'Err_null_ssxref_ssid - Completed updating rows having null SSxRef or invalid SSid' );
284     Debug_Conc_Log( 'Err_null_ssxref_ssid - Started inserting Errors' );
285   -- MSII
286     FOR i IN c_ssxref_null_msii LOOP
287       IF i.PROCESS_FLAG = 33379 THEN
288         FND_MESSAGE.SET_NAME('EGO', 'EGO_SSXREF_IS_NULL');
289         l_msg_text := FND_MESSAGE.GET;
290         dumm_status  := INVPUOPI.mtl_log_interface_err(
291                                 i.ORGANIZATION_ID
292                                ,l_user_id
293                                ,l_login_id
294                                ,l_prog_appid
295                                ,l_prog_id
296                                ,l_request_id
297                                ,i.TRANSACTION_ID
298                                ,l_msg_text
299                                ,'SOURCE_SYSTEM_REFERENCE'
300                                ,'MTL_SYSTEM_ITEMS_INTERFACE'
301                                ,'INV_IOI_ERR'
302                                ,l_err_text);
303 
304       ELSIF i.PROCESS_FLAG = 33389 THEN
305         FND_MESSAGE.SET_NAME('EGO', 'EGO_SSXID_INVALID');
306         l_msg_text := FND_MESSAGE.GET;
307         dumm_status  := INVPUOPI.mtl_log_interface_err(
308                                 i.ORGANIZATION_ID
309                                ,l_user_id
310                                ,l_login_id
311                                ,l_prog_appid
312                                ,l_prog_id
313                                ,l_request_id
314                                ,i.TRANSACTION_ID
315                                ,l_msg_text
316                                ,'SOURCE_SYSTEM_ID'
317                                ,'MTL_SYSTEM_ITEMS_INTERFACE'
318                                ,'INV_IOI_ERR'
319                                ,l_err_text);
320       END IF;
321     END LOOP;
322 
323   -- MIRI
324     FOR i IN c_ssxref_null_miri LOOP
325       IF i.PROCESS_FLAG = 33379 THEN
326         FND_MESSAGE.SET_NAME('EGO', 'EGO_SSXREF_IS_NULL');
327         l_msg_text := FND_MESSAGE.GET;
328         dumm_status  := INVPUOPI.mtl_log_interface_err(
329                                 i.ORGANIZATION_ID
330                                ,l_user_id
331                                ,l_login_id
332                                ,l_prog_appid
333                                ,l_prog_id
334                                ,l_request_id
335                                ,i.TRANSACTION_ID
336                                ,l_msg_text
337                                ,'SOURCE_SYSTEM_REFERENCE'
338                                ,'MTL_ITEM_REVISIONS_INTERFACE'
339                                ,'INV_IOI_ERR'
340                                ,l_err_text);
341       ELSIF i.PROCESS_FLAG = 33389 THEN
342         FND_MESSAGE.SET_NAME('EGO', 'EGO_SSXID_INVALID');
343         l_msg_text := FND_MESSAGE.GET;
344         dumm_status  := INVPUOPI.mtl_log_interface_err(
345                                 i.ORGANIZATION_ID
346                                ,l_user_id
347                                ,l_login_id
348                                ,l_prog_appid
349                                ,l_prog_id
350                                ,l_request_id
351                                ,i.TRANSACTION_ID
352                                ,l_msg_text
353                                ,'SOURCE_SYSTEM_ID'
354                                ,'MTL_ITEM_REVISIONS_INTERFACE'
355                                ,'INV_IOI_ERR'
356                                ,l_err_text);
357       END IF;
358     END LOOP;
359 
360   -- MICI
361     FOR i IN c_ssxref_null_mici LOOP
362       IF i.PROCESS_FLAG = 33379 THEN
363         FND_MESSAGE.SET_NAME('EGO', 'EGO_SSXREF_IS_NULL');
364         l_msg_text := FND_MESSAGE.GET;
365         dumm_status  := INVPUOPI.mtl_log_interface_err(
366                                 i.ORGANIZATION_ID
367                                ,l_user_id
368                                ,l_login_id
369                                ,l_prog_appid
370                                ,l_prog_id
371                                ,l_request_id
372                                ,i.TRANSACTION_ID
373                                ,l_msg_text
374                                ,'SOURCE_SYSTEM_REFERENCE'
375                                ,'MTL_ITEM_CATEGORIES_INTERFACE'
376                                ,'INV_IOI_ERR'
377                                ,l_err_text);
378       ELSIF i.PROCESS_FLAG = 33389 THEN
379         FND_MESSAGE.SET_NAME('EGO', 'EGO_SSXID_INVALID');
380         l_msg_text := FND_MESSAGE.GET;
381         dumm_status  := INVPUOPI.mtl_log_interface_err(
382                                 i.ORGANIZATION_ID
383                                ,l_user_id
384                                ,l_login_id
385                                ,l_prog_appid
386                                ,l_prog_id
387                                ,l_request_id
388                                ,i.TRANSACTION_ID
389                                ,l_msg_text
390                                ,'SOURCE_SYSTEM_ID'
391                                ,'MTL_ITEM_CATEGORIES_INTERFACE'
392                                ,'INV_IOI_ERR'
393                                ,l_err_text);
394       END IF;
395     END LOOP;
396 
397   -- EIUAI
398     FOR i IN c_ssxref_null_eiuai LOOP
399       IF i.PROCESS_STATUS = 33379 THEN
400         FND_MESSAGE.SET_NAME('EGO', 'EGO_SSXREF_IS_NULL');
401         l_msg_text := FND_MESSAGE.GET;
402         dumm_status  := INVPUOPI.mtl_log_interface_err(
403                                 i.ORGANIZATION_ID
404                                ,l_user_id
405                                ,l_login_id
406                                ,l_prog_appid
407                                ,l_prog_id
408                                ,l_request_id
409                                ,i.TRANSACTION_ID
410                                ,l_msg_text
411                                ,'SOURCE_SYSTEM_REFERENCE'
412                                ,'EGO_ITM_USR_ATTR_INTRFC'
413                                ,'INV_IOI_ERR'
414                                ,l_err_text);
415       ELSIF i.PROCESS_STATUS = 33389 THEN
416         FND_MESSAGE.SET_NAME('EGO', 'EGO_SSXID_INVALID');
417         l_msg_text := FND_MESSAGE.GET;
418         dumm_status  := INVPUOPI.mtl_log_interface_err(
419                                 i.ORGANIZATION_ID
420                                ,l_user_id
421                                ,l_login_id
422                                ,l_prog_appid
423                                ,l_prog_id
424                                ,l_request_id
425                                ,i.TRANSACTION_ID
426                                ,l_msg_text
427                                ,'SOURCE_SYSTEM_ID'
428                                ,'EGO_ITM_USR_ATTR_INTRFC'
429                                ,'INV_IOI_ERR'
430                                ,l_err_text);
431       END IF;
432     END LOOP;
433 
434   -- EIPI
435     FOR i IN c_ssxref_null_eipi LOOP
436       IF i.PROCESS_STATUS = 33379 THEN
437         FND_MESSAGE.SET_NAME('EGO', 'EGO_SSXREF_IS_NULL');
438         l_msg_text := FND_MESSAGE.GET;
439         dumm_status  := INVPUOPI.mtl_log_interface_err(
440                                 i.ORGANIZATION_ID
441                                ,l_user_id
442                                ,l_login_id
443                                ,l_prog_appid
444                                ,l_prog_id
445                                ,l_request_id
446                                ,i.TRANSACTION_ID
447                                ,l_msg_text
448                                ,'SOURCE_SYSTEM_REFERENCE'
449                                ,'EGO_ITEM_PEOPLE_INTF'
450                                ,'INV_IOI_ERR'
451                                ,l_err_text);
452       ELSIF i.PROCESS_STATUS = 33389 THEN
453         FND_MESSAGE.SET_NAME('EGO', 'EGO_SSXID_INVALID');
454         l_msg_text := FND_MESSAGE.GET;
455         dumm_status  := INVPUOPI.mtl_log_interface_err(
456                                 i.ORGANIZATION_ID
457                                ,l_user_id
458                                ,l_login_id
459                                ,l_prog_appid
460                                ,l_prog_id
461                                ,l_request_id
462                                ,i.TRANSACTION_ID
463                                ,l_msg_text
464                                ,'SOURCE_SYSTEM_ID'
465                                ,'EGO_ITEM_PEOPLE_INTF'
466                                ,'INV_IOI_ERR'
467                                ,l_err_text);
468       END IF;
469     END LOOP;
470 
471   -- EAI
472     FOR i IN c_ssxref_null_eai LOOP
473       IF i.PROCESS_FLAG = 33379 THEN
474         FND_MESSAGE.SET_NAME('EGO', 'EGO_SSXREF_IS_NULL');
475         l_msg_text := FND_MESSAGE.GET;
476         dumm_status  := INVPUOPI.mtl_log_interface_err(
477                                 i.ORGANIZATION_ID
478                                ,l_user_id
479                                ,l_login_id
480                                ,l_prog_appid
481                                ,l_prog_id
482                                ,l_request_id
483                                ,i.TRANSACTION_ID
484                                ,l_msg_text
485                                ,'SOURCE_SYSTEM_REFERENCE'
486                                ,'EGO_AML_INTF'
487                                ,'INV_IOI_ERR'
488                                ,l_err_text);
489       ELSIF i.PROCESS_FLAG = 33389 THEN
490         FND_MESSAGE.SET_NAME('EGO', 'EGO_SSXID_INVALID');
491         l_msg_text := FND_MESSAGE.GET;
492         dumm_status  := INVPUOPI.mtl_log_interface_err(
493                                 i.ORGANIZATION_ID
494                                ,l_user_id
495                                ,l_login_id
496                                ,l_prog_appid
497                                ,l_prog_id
498                                ,l_request_id
499                                ,i.TRANSACTION_ID
500                                ,l_msg_text
501                                ,'SOURCE_SYSTEM_ID'
502                                ,'EGO_AML_INTF'
503                                ,'INV_IOI_ERR'
504                                ,l_err_text);
505       END IF;
506         END LOOP;
507 
508   -- R12C:BEGIN
509       FOR i IN c_ssxref_null_assocs LOOP
510         IF i.PROCESS_FLAG = 33379 THEN
511           FND_MESSAGE.SET_NAME('EGO', 'EGO_SSXREF_IS_NULL');
512           l_msg_text := FND_MESSAGE.GET;
513           dumm_status  := INVPUOPI.mtl_log_interface_err(
514                                 i.ORGANIZATION_ID
515                                ,l_user_id
516                                ,l_login_id
517                                ,l_prog_appid
518                                ,l_prog_id
519                                ,l_request_id
520                                ,i.TRANSACTION_ID
521                                ,l_msg_text
522                                ,'SOURCE_SYSTEM_REFERENCE'
523                                ,'EGO_ITEM_ASSOCIATIONS_INTF'
524                                ,'INV_IOI_ERR'
525                                ,l_err_text);
526         ELSIF i.PROCESS_FLAG = 33389 THEN
527           FND_MESSAGE.SET_NAME('EGO', 'EGO_SSXID_INVALID');
528           l_msg_text := FND_MESSAGE.GET;
529           dumm_status  := INVPUOPI.mtl_log_interface_err(
530                                 i.ORGANIZATION_ID
531                                ,l_user_id
532                                ,l_login_id
533                                ,l_prog_appid
534                                ,l_prog_id
535                                ,l_request_id
536                                ,i.TRANSACTION_ID
537                                ,l_msg_text
538                                ,'SOURCE_SYSTEM_ID'
539                                ,'EGO_ITEM_ASSOCIATIONS_INTF'
540                                ,'INV_IOI_ERR'
541                                ,l_err_text);
542         END IF;
543     END LOOP;
544   --R12C: END
545 
546     Debug_Conc_Log( 'Err_null_ssxref_ssid - Finished inserting Errors' );
547 
548     UPDATE MTL_SYSTEM_ITEMS_INTERFACE
549     SET PROCESS_FLAG =3
550     WHERE PROCESS_FLAG IN (33379, 33389)
551       AND SET_PROCESS_ID = p_data_set_id;
552 
553     UPDATE MTL_ITEM_REVISIONS_INTERFACE
554     SET PROCESS_FLAG =3
555     WHERE PROCESS_FLAG IN (33379, 33389)
556       AND SET_PROCESS_ID = p_data_set_id;
557 
558     UPDATE MTL_ITEM_CATEGORIES_INTERFACE
559     SET PROCESS_FLAG =3
560     WHERE PROCESS_FLAG IN (33379, 33389)
561       AND SET_PROCESS_ID = p_data_set_id;
562 
563     UPDATE EGO_ITM_USR_ATTR_INTRFC
564     SET PROCESS_STATUS =3
565     WHERE PROCESS_STATUS IN (33379, 33389)
566       AND DATA_SET_ID = p_data_set_id;
567 
568     UPDATE EGO_ITEM_PEOPLE_INTF
569     SET PROCESS_STATUS =3
570     WHERE PROCESS_STATUS IN (33379, 33389)
571       AND DATA_SET_ID = p_data_set_id;
572 
573     UPDATE EGO_AML_INTF
574     SET PROCESS_FLAG =3
575     WHERE PROCESS_FLAG IN (33379, 33389)
576       AND DATA_SET_ID = p_data_set_id;
577       --R12C: BEGIN
578       UPDATE EGO_ITEM_ASSOCIATIONS_INTF
579       SET PROCESS_FLAG =3
580       WHERE PROCESS_FLAG IN (33379, 33389)
581       AND BATCH_ID = p_data_set_id;
582       --R12C:END
583   END Err_null_ssxref_ssid;
584 
585   /*
586    * Method to get next item number for a sequence generated item
587    * This method is only for use in Resolve_Child_Entities
588    */
589   FUNCTION GET_NEXT_ITEM_NUMBER(p_catalog_group_id NUMBER) RETURN VARCHAR2 AS
590     l_seq_name      MTL_ITEM_CATALOG_GROUPS_B.ITEM_NUM_SEQ_NAME%TYPE;
591     l_prefix        MTL_ITEM_CATALOG_GROUPS_B.PREFIX%TYPE;
592     l_suffix        MTL_ITEM_CATALOG_GROUPS_B.SUFFIX%TYPE;
593     l_gen_method    MTL_ITEM_CATALOG_GROUPS_B.ITEM_NUM_GEN_METHOD%TYPE;
594     l_item_number   VARCHAR2(2000);
595     l_sql           VARCHAR2(2000);
596   BEGIN
597     SELECT ITEM_NUM_SEQ_NAME, PREFIX, SUFFIX, ITEM_NUM_GEN_METHOD
598       INTO l_seq_name, l_prefix, l_suffix, l_gen_method
599     FROM
600     (
601         SELECT  ICC.ITEM_NUM_SEQ_NAME, ICC.PREFIX, ICC.SUFFIX, ICC.ITEM_NUM_GEN_METHOD
602         FROM    MTL_ITEM_CATALOG_GROUPS_B ICC
603         WHERE   ICC.ITEM_NUM_GEN_METHOD IS NOT NULL
604           AND   ICC.ITEM_NUM_GEN_METHOD <> 'I'
605         CONNECT BY PRIOR ICC.PARENT_CATALOG_GROUP_ID = ICC.ITEM_CATALOG_GROUP_ID
606             START WITH ICC.ITEM_CATALOG_GROUP_ID = p_catalog_group_id
607         ORDER BY LEVEL ASC
608     )
609     WHERE ROWNUM = 1;
610 
611     IF 'S' <> l_gen_method THEN
612         Debug_Conc_Log( 'GET_NEXT_ITEM_NUMBER for category-'||p_catalog_group_id||': Generation Method was ' || l_gen_method ||', not S.' );
613         RETURN NULL;
614     END IF;
615 
616     l_sql := 'SELECT '''||l_prefix||'''||'||l_seq_name||'.NEXTVAL||'''||l_suffix||''' FROM DUAL';
617     EXECUTE IMMEDIATE l_sql INTO l_item_number;
618 
619     RETURN l_item_number;
620   EXCEPTION WHEN OTHERS THEN
621     Debug_Conc_Log( 'Error in - GET_NEXT_ITEM_NUMBER for category-'||p_catalog_group_id||': '||SQLCODE||'-'|| SQLERRM );
622     RETURN NULL;
623   END GET_NEXT_ITEM_NUMBER;
624 
625   /*
626    * This method gathers statistics on interface tables, if required
627    */
628   PROCEDURE Gather_Stats_For_Intf_Tables(p_data_set_id IN NUMBER) AS
629     l_records        NUMBER;
630     l_status         VARCHAR2(1000);
631     l_industry       VARCHAR2(1000);
632     l_schema         VARCHAR2(1000);
633     l_inv_installed  BOOLEAN;
634     l_ego_installed  BOOLEAN;
635     --6602290 : Stats gather through profile
636     l_stats_profile  NUMBER := NVL(FND_PROFILE.VALUE('EGO_GATHER_STATS'),100);
637   BEGIN
638     Debug_Conc_Log('Starting Gather_Stats_For_Intf_Tables');
639     -- checking whether stats needs to be collected on MTL_SYSTEM_ITEMS_INTERFACE
640     SELECT COUNT(1) INTO l_records
641     FROM MTL_SYSTEM_ITEMS_INTERFACE
642     WHERE SET_PROCESS_ID = p_data_set_id;
643 
644     l_inv_installed := FND_INSTALLATION.GET_APP_INFO('INV', l_status, l_industry, l_schema);
645     IF (l_records > l_stats_profile) AND l_inv_installed AND l_schema IS NOT NULL THEN
646       FND_STATS.GATHER_TABLE_STATS(l_schema, 'MTL_SYSTEM_ITEMS_INTERFACE');
647       Debug_Conc_Log('Collected Statistics on MTL_SYSTEM_ITEMS_INTERFACE');
648     END IF;
649 
650     -- checking whether stats needs to be collected on MTL_ITEM_REVISIONS_INTERFACE
651     SELECT COUNT(1) INTO l_records
652     FROM MTL_ITEM_REVISIONS_INTERFACE
653     WHERE SET_PROCESS_ID = p_data_set_id;
654 
655     IF (l_records > l_stats_profile) AND l_inv_installed AND l_schema IS NOT NULL THEN
656       FND_STATS.GATHER_TABLE_STATS(l_schema, 'MTL_ITEM_REVISIONS_INTERFACE');
657       Debug_Conc_Log('Collected Statistics on MTL_ITEM_REVISIONS_INTERFACE');
658     END IF;
659 
660     -- checking whether stats needs to be collected on MTL_ITEM_CATEGORIES_INTERFACE
661     SELECT COUNT(1) INTO l_records
662     FROM MTL_ITEM_CATEGORIES_INTERFACE
663     WHERE SET_PROCESS_ID = p_data_set_id;
664 
665     IF (l_records > l_stats_profile) AND l_inv_installed AND l_schema IS NOT NULL THEN
666       FND_STATS.GATHER_TABLE_STATS(l_schema, 'MTL_ITEM_CATEGORIES_INTERFACE');
667       Debug_Conc_Log('Collected Statistics on MTL_ITEM_CATEGORIES_INTERFACE');
668     END IF;
669 
670     l_ego_installed := FND_INSTALLATION.GET_APP_INFO('EGO', l_status, l_industry, l_schema);
671     -- checking whether stats needs to be collected on EGO_ITEM_PEOPLE_INTF
672     SELECT COUNT(1) INTO l_records
673     FROM EGO_ITEM_PEOPLE_INTF
674     WHERE DATA_SET_ID = p_data_set_id;
675 
676     IF (l_records > l_stats_profile) AND l_ego_installed AND l_schema IS NOT NULL THEN
677       FND_STATS.GATHER_TABLE_STATS(l_schema, 'EGO_ITEM_PEOPLE_INTF');
678       Debug_Conc_Log('Collected Statistics on EGO_ITEM_PEOPLE_INTF');
679     END IF;
680 
681     -- checking whether stats needs to be collected on EGO_AML_INTF
682     SELECT COUNT(1) INTO l_records
683     FROM EGO_AML_INTF
684     WHERE DATA_SET_ID = p_data_set_id;
685 
686     IF (l_records > l_stats_profile) AND l_ego_installed AND l_schema IS NOT NULL THEN
687       FND_STATS.GATHER_TABLE_STATS(l_schema, 'EGO_AML_INTF');
688       Debug_Conc_Log('Collected Statistics on EGO_AML_INTF');
689     END IF;
690 
691     -- checking whether stats needs to be collected on EGO_ITM_USR_ATTR_INTRFC
692     SELECT COUNT(1) INTO l_records
693     FROM EGO_ITM_USR_ATTR_INTRFC
694     WHERE DATA_SET_ID = p_data_set_id;
695 
696     IF (l_records > (l_stats_profile*25)) AND l_ego_installed AND l_schema IS NOT NULL THEN
697       FND_STATS.GATHER_TABLE_STATS(l_schema, 'EGO_ITM_USR_ATTR_INTRFC');
698       Debug_Conc_Log('Collected Statistics on EGO_ITM_USR_ATTR_INTRFC');
699     END IF;
700 
701     -- R12C: BEGIN
702     -- checking whether stats needs to be collected on EGO_ITEM_ASSOCIATIONS_INTF
703 
704     SELECT COUNT(1) INTO l_records
705     FROM EGO_ITEM_ASSOCIATIONS_INTF
706     WHERE BATCH_ID = p_data_set_id;
707 
708     IF (l_records > l_stats_profile) AND l_ego_installed AND l_schema IS NOT NULL THEN
709       FND_STATS.GATHER_TABLE_STATS(l_schema, 'EGO_ITEM_ASSOCIATIONS_INTF');
710       Debug_Conc_Log('Collected Statistics on EGO_ITEM_ASSOCIATIONS_INTF');
711     END IF;
712 
713     --R12C: END
714     Debug_Conc_Log('Done Gather_Stats_For_Intf_Tables');
715   EXCEPTION WHEN OTHERS THEN
716     Debug_Conc_Log('Error in Gather_Stats_For_Intf_Tables-'||SQLERRM);
717   END Gather_Stats_For_Intf_Tables;
718 
719     --=================================================================================================================--
720     --------------------------------------- Start of Merging Section ----------------------------------------------------
721     --=================================================================================================================--
722     /*
723      * The procedures in this section, both public and private, relate to the task of identifying the rows in various
724      * item interface tables that have the same keys and need to be merged - i.e. collapsed into one row. The result of
725      * the merging operation on a subset of the table should be that there is at most one row for any set of keys.
726      *
727      *
728      * All the MERGE_* procedures take the following arguments:
729      *  p_batch_id       IN NUMBER                  =>
730      *      The batch identifier (MANDATORY).
731      *  p_is_pdh_batch   IN FLAG      DEFAULT NULL  =>
732      *      Used to determine the set of keys to use for merging.
733      *          - Pass FND_API.G_TRUE to indicate that the batch is a PIMDH batch
734      *          - Pass FND_API.G_FALSE to indicate that the batch is a non-PIMDH batch
735      *          - If not passed, the batch header will be used to determine whether or not
736      *              the batch is a PIMDH batch (absence of a header implies that it is).
737      *  p_master_org_id  IN NUMBER    DEFAULT NULL =>
738      *      The ID of the default batch organization, to be used for rows for which neither
739      *          ORGANIZATION_ID nor ORGANIZATION_CODE are provided.
740      *      If not passed, the ORGANIZATION_ID in the batch header will be used.
741      *
742      *  p_commit         IN FLAG      DEFAULT FND_API.G_FALSE =>
743      *      Pass FND_API.G_TRUE to have a COMMIT issued at the end of the procedure.
744      */
745 
746     PROCEDURE merge_params_from_batch_header( p_batch_id        IN           NUMBER
747                                             , x_is_pdh_batch    OUT NOCOPY   FLAG
748                                             , x_master_org_id   OUT NOCOPY   NUMBER
749                                             , x_ss_id           OUT NOCOPY   NUMBER
750                                             )
751     IS
752         l_org_id        NUMBER                                      := NULL;
753         l_ss_id         EGO_IMPORT_BATCHES_B.SOURCE_SYSTEM_ID%TYPE  := NULL;
754     BEGIN
755         Debug_Conc_Log( 'Attempting to resolve merge parameters from batch header for batch_id='
756                       || to_char( p_batch_id ) );
757         BEGIN
758             SELECT  MP.ORGANIZATION_ID,
759                     BA.SOURCE_SYSTEM_ID
760             INTO    l_org_id
761                   , l_ss_id
762             FROM    MTL_PARAMETERS MP
763                   , EGO_IMPORT_BATCHES_B ba
764             WHERE   BA.ORGANIZATION_ID = MP.ORGANIZATION_ID
765                 AND BA.BATCH_ID = p_batch_id;
766         EXCEPTION
767             WHEN NO_DATA_FOUND THEN
768                 Debug_Conc_Log( 'Batch header not found!' );
769                 NULL;
770         END;
771 
772         x_ss_id := l_ss_id;
773         Debug_Conc_Log( 'SS ID:' || x_ss_id );
774         x_is_pdh_batch :=   CASE l_ss_id
775                                 WHEN NULL                       THEN FND_API.G_TRUE
776                                 WHEN get_pdh_source_system_id   THEN FND_API.G_TRUE
777                                 ELSE FND_API.G_FALSE
778                             END;
779         Debug_Conc_Log( 'Is PDH Batch:' || x_is_pdh_batch );
780         x_master_org_id :=  l_org_id;
781         Debug_Conc_Log( 'Master Org ID:' || x_master_org_id );
782 
783         Debug_Conc_Log( 'Done resolving merge parameters from batch header' );
784     END merge_params_from_batch_header;
785 
786 
787     PROCEDURE merge_rev_attrs   ( p_batch_id       IN NUMBER
788                                 , p_is_pdh_batch   IN FLAG      DEFAULT NULL
789                                 , p_ss_id          IN NUMBER    DEFAULT NULL
790                                 , p_master_org_id  IN NUMBER    DEFAULT NULL
791                                 , p_commit         IN FLAG      DEFAULT FND_API.G_FALSE
792                                 )
793     IS
794         --6468564:Perf issue replacing EGO_ATTRS_V
795         CURSOR c_pdh_target_rev_attrs( cp_master_org_id EGO_ITM_USR_ATTR_INTRFC.ORGANIZATION_ID%TYPE, cp_rev_dl_id NUMBER ) IS
796             SELECT  sub.*
797                    ,EXT.DATA_TYPE DATA_TYPE_CODE
798             FROM
799                 ( SELECT
800                         EIUAI.ROWID rid
801                         , COUNT( * ) OVER ( PARTITION BY
802                                                     ITEM_NUMBER
803                                                     , ATTR_GROUP_INT_NAME
804                                                     , ATTR_INT_NAME
805                                                     , COALESCE( EIUAI.ORGANIZATION_ID,
806                                                                 (   SELECT  ORGANIZATION_ID
807                                                                     FROM    MTL_PARAMETERS P
808                                                                     WHERE   P.ORGANIZATION_CODE = EIUAI.ORGANIZATION_CODE
809                                                                 ),
810                                                                 (   SELECT  ORGANIZATION_ID
811                                                                     FROM    MTL_ITEM_REVISIONS_B R
812                                                                     WHERE   R.REVISION_ID = EIUAI.REVISION_ID
813                                                                 ),
814                                                                 NVL2( ORGANIZATION_CODE, cp_master_org_id, NULL )
815                                                               )
816                                                     , NVL( eiuai.REVISION,
817                                                            (    SELECT  r.REVISION
818                                                                 FROM    MTL_ITEM_REVISIONS_B r
819                                                                 WHERE   r.REVISION_ID = eiuai.REVISION_ID
820                                                            )
821                                                          )
822                                                     , NVL( eiuai.ATTR_GROUP_TYPE, G_DEFAULT_ATTR_GROUP_TYPE )
823                                           )
824                         cnt
825                         , RANK() OVER   ( ORDER BY
826                                                     ITEM_NUMBER
827                                                     , ATTR_GROUP_INT_NAME
828                                                     , ATTR_INT_NAME
829                                                     , COALESCE( EIUAI.ORGANIZATION_ID,
830                                                                 (   SELECT  ORGANIZATION_ID
831                                                                     FROM    MTL_PARAMETERS P
832                                                                     WHERE   P.ORGANIZATION_CODE = EIUAI.ORGANIZATION_CODE
833                                                                 ),
834                                                                 (   SELECT  ORGANIZATION_ID
835                                                                     FROM    MTL_ITEM_REVISIONS_B R
836                                                                     WHERE   R.REVISION_ID = EIUAI.REVISION_ID
837                                                                 ),
838                                                                 NVL2( ORGANIZATION_CODE, cp_master_org_id, NULL )
839                                                               )
840                                                     , NVL( eiuai.REVISION,
841                                                            (    SELECT  r.REVISION
842                                                                 FROM    MTL_ITEM_REVISIONS_B r
843                                                                 WHERE   r.REVISION_ID = eiuai.REVISION_ID
844                                                            )
845                                                          )
846                                                     , NVL( eiuai.ATTR_GROUP_TYPE, G_DEFAULT_ATTR_GROUP_TYPE )
847                                         )
848                         rnk
849                         , eiuai.*
850                    FROM EGO_ITM_USR_ATTR_INTRFC EIUAI, EGO_FND_DSC_FLX_CTX_EXT FL_CTX_EXT
851                    WHERE DATA_SET_ID = p_batch_id
852                      AND PROCESS_STATUS                           = 1
853                      AND ITEM_NUMBER                              IS NOT NULL
854                      AND FL_CTX_EXT.DESCRIPTIVE_FLEXFIELD_NAME    = NVL( EIUAI.ATTR_GROUP_TYPE, G_DEFAULT_ATTR_GROUP_TYPE )
855                      AND FL_CTX_EXT.APPLICATION_ID                = 431
856                      AND FL_CTX_EXT.DESCRIPTIVE_FLEX_CONTEXT_CODE = EIUAI.ATTR_GROUP_INT_NAME
857                      AND FL_CTX_EXT.MULTI_ROW                     = 'N'
858                      AND EXISTS( SELECT NULL
859                                  FROM EGO_ATTR_GROUP_DL A
860                                  WHERE A.DATA_LEVEL_ID = cp_rev_dl_id
861                                    AND A.ATTR_GROUP_ID = FL_CTX_EXT.ATTR_GROUP_ID
862                                )
863                 ) sub
864                  ,FND_DESCR_FLEX_COLUMN_USAGES FL_COL
865                  ,EGO_FND_DF_COL_USGS_EXT EXT
866             WHERE sub.CNT > 1
867               AND FL_COL.APPLICATION_ID                = 431
868               AND FL_COL.DESCRIPTIVE_FLEX_CONTEXT_CODE = sub.ATTR_GROUP_INT_NAME
869               AND FL_COL.END_USER_COLUMN_NAME          = sub.ATTR_INT_NAME
870               AND FL_COL.DESCRIPTIVE_FLEXFIELD_NAME    = SUB.ATTR_GROUP_TYPE
871               AND EXT.APPLICATION_ID                   = FL_COL.APPLICATION_ID
872               AND EXT.DESCRIPTIVE_FLEXFIELD_NAME       = FL_COL.DESCRIPTIVE_FLEXFIELD_NAME
873               AND EXT.DESCRIPTIVE_FLEX_CONTEXT_CODE    = FL_COL.DESCRIPTIVE_FLEX_CONTEXT_CODE
874               AND EXT.APPLICATION_COLUMN_NAME          = FL_COL.APPLICATION_COLUMN_NAME
875             ORDER BY rnk, sub.last_update_date DESC, interface_table_unique_id DESC ;
876 
877         --6468564:Perf issue replacing EGO_ATTRS_V
878         CURSOR c_ss_target_rev_attrs( cp_master_org_id EGO_ITM_USR_ATTR_INTRFC.ORGANIZATION_ID%TYPE, cp_rev_dl_id NUMBER ) IS
879             SELECT  sub.*
880                    ,EXT.DATA_TYPE DATA_TYPE_CODE
881             FROM
882                 ( SELECT
883                         EIUAI.ROWID rid
884                         , COUNT( * ) OVER ( PARTITION BY
885                                                     SOURCE_SYSTEM_ID
886                                                     , SOURCE_SYSTEM_REFERENCE
887                                                     , ATTR_GROUP_INT_NAME
888                                                     , ATTR_INT_NAME
889                                                     , COALESCE( EIUAI.ORGANIZATION_ID,
890                                                                 (   SELECT  ORGANIZATION_ID
891                                                                     FROM    MTL_PARAMETERS P
892                                                                     WHERE   P.ORGANIZATION_CODE = EIUAI.ORGANIZATION_CODE
893                                                                 ),
894                                                                 (   SELECT  ORGANIZATION_ID
895                                                                     FROM    MTL_ITEM_REVISIONS_B R
896                                                                     WHERE   R.REVISION_ID = EIUAI.REVISION_ID
897                                                                 ),
898                                                                 NVL2( ORGANIZATION_CODE, cp_master_org_id, NULL )
899                                                               )
900                                                     , NVL( eiuai.REVISION,
901                                                            (    SELECT  r.REVISION
902                                                                 FROM    MTL_ITEM_REVISIONS_B r
903                                                                 WHERE   r.REVISION_ID = eiuai.REVISION_ID
904                                                            )
905                                                          )
906                                                     , NVL( eiuai.ATTR_GROUP_TYPE, G_DEFAULT_ATTR_GROUP_TYPE )
907                                           )
908                         cnt
909                         , RANK() OVER   ( ORDER BY
910                                                     SOURCE_SYSTEM_ID
911                                                     , SOURCE_SYSTEM_REFERENCE
912                                                     , ATTR_GROUP_INT_NAME
913                                                     , ATTR_INT_NAME
914                                                     , COALESCE( EIUAI.ORGANIZATION_ID,
915                                                                 (   SELECT  ORGANIZATION_ID
916                                                                     FROM    MTL_PARAMETERS P
917                                                                     WHERE   P.ORGANIZATION_CODE = EIUAI.ORGANIZATION_CODE
918                                                                 ),
919                                                                 (   SELECT  ORGANIZATION_ID
920                                                                     FROM    MTL_ITEM_REVISIONS_B R
921                                                                     WHERE   R.REVISION_ID = EIUAI.REVISION_ID
922                                                                 ),
923                                                                 NVL2( ORGANIZATION_CODE, cp_master_org_id, NULL )
924                                                               )
925                                                     , NVL( eiuai.REVISION,
926                                                            (    SELECT  r.REVISION
927                                                                 FROM    MTL_ITEM_REVISIONS_B r
928                                                                 WHERE   r.REVISION_ID = eiuai.REVISION_ID
929                                                            )
930                                                          )
931                                                     , NVL( eiuai.ATTR_GROUP_TYPE, G_DEFAULT_ATTR_GROUP_TYPE )
932                                         )
933                         rnk
934                         , eiuai.*
935                    FROM EGO_ITM_USR_ATTR_INTRFC EIUAI, EGO_FND_DSC_FLX_CTX_EXT FL_CTX_EXT
936                    WHERE DATA_SET_ID                              = p_batch_id
937                      AND PROCESS_STATUS                           = 0
938                      AND FL_CTX_EXT.DESCRIPTIVE_FLEXFIELD_NAME    = NVL( EIUAI.ATTR_GROUP_TYPE, G_DEFAULT_ATTR_GROUP_TYPE )
939                      AND FL_CTX_EXT.APPLICATION_ID                = 431
940                      AND FL_CTX_EXT.DESCRIPTIVE_FLEX_CONTEXT_CODE = EIUAI.ATTR_GROUP_INT_NAME
941                      AND FL_CTX_EXT.MULTI_ROW                     = 'N'
942                      AND EXISTS( SELECT NULL
943                                  FROM EGO_ATTR_GROUP_DL A
944                                  WHERE A.DATA_LEVEL_ID = cp_rev_dl_id
945                                    AND A.ATTR_GROUP_ID = FL_CTX_EXT.ATTR_GROUP_ID
946                                )
947                 ) sub
948                  ,FND_DESCR_FLEX_COLUMN_USAGES FL_COL
949                  ,EGO_FND_DF_COL_USGS_EXT EXT
950             WHERE sub.CNT > 1
951               AND FL_COL.APPLICATION_ID                = 431
952               AND FL_COL.DESCRIPTIVE_FLEX_CONTEXT_CODE = sub.ATTR_GROUP_INT_NAME
953               AND FL_COL.END_USER_COLUMN_NAME          = sub.ATTR_INT_NAME
954               AND FL_COL.DESCRIPTIVE_FLEXFIELD_NAME    = SUB.ATTR_GROUP_TYPE
955               AND EXT.APPLICATION_ID                   = FL_COL.APPLICATION_ID
956               AND EXT.DESCRIPTIVE_FLEXFIELD_NAME       = FL_COL.DESCRIPTIVE_FLEXFIELD_NAME
957               AND EXT.DESCRIPTIVE_FLEX_CONTEXT_CODE    = FL_COL.DESCRIPTIVE_FLEX_CONTEXT_CODE
958               AND EXT.APPLICATION_COLUMN_NAME          = FL_COL.APPLICATION_COLUMN_NAME
959             ORDER BY rnk, sub.last_update_date DESC, interface_table_unique_id DESC ;
960 
961         TYPE TARGET_ROWS    IS TABLE OF c_pdh_target_rev_attrs%ROWTYPE;
962 
963         l_merged_rows   EIUAI_ROWS;
964         l_merge_base    EIUAI_ROW;
965         l_old_rows      TARGET_ROWS;
966         l_old_rowids    UROWID_TABLE;
967 
968         l_ss_id         EGO_ITM_USR_ATTR_INTRFC.SOURCE_SYSTEM_ID%TYPE := p_ss_id;
969         l_ssr           EGO_ITM_USR_ATTR_INTRFC.SOURCE_SYSTEM_REFERENCE%TYPE;
970         l_candidate_trans EGO_ITM_USR_ATTR_INTRFC.TRANSACTION_TYPE%TYPE;
971 
972         l_cur_rank      PLS_INTEGER := 0; -- because rank() starts at 1
973         l_mrow_ix       PLS_INTEGER := 0;
974         l_is_pdh_batch  BOOLEAN;
975 
976         l_data_type_code EGO_ATTRS_V.DATA_TYPE_CODE%TYPE;
977 
978         l_org_id        EGO_ITM_USR_ATTR_INTRFC.ORGANIZATION_ID%TYPE := p_master_org_id;
979         l_pdh_batch_flag FLAG := p_is_pdh_batch;
980         l_rev_dl_id     NUMBER;
981 
982         l_proc_log_prefix CONSTANT VARCHAR2(30) := '  merge_rev_attrs - ';
983     BEGIN
984         Debug_Conc_Log( l_proc_log_prefix || 'Entering' );
985         Debug_Conc_Log( l_proc_log_prefix || 'Batch ID: ' || p_batch_id );
986         BEGIN
987           SELECT DATA_LEVEL_ID INTO l_rev_dl_id
988           FROM EGO_DATA_LEVEL_B
989           WHERE ATTR_GROUP_TYPE = 'EGO_ITEMMGMT_GROUP'
990             AND APPLICATION_ID = 431
991             AND DATA_LEVEL_NAME = 'ITEM_REVISION_LEVEL';
992         EXCEPTION WHEN NO_DATA_FOUND THEN
993           RETURN;
994         END;
995         Debug_Conc_Log( l_proc_log_prefix || 'l_rev_dl_id: ' || l_rev_dl_id );
996         IF  l_pdh_batch_flag IS NULL OR l_org_id IS NULL OR l_ss_id IS NULL THEN
997             merge_params_from_batch_header( p_batch_id      => p_batch_id
998                                           , x_is_pdh_batch  => l_pdh_batch_flag
999                                           , x_ss_id         => l_ss_id
1000                                           , x_master_org_id => l_org_id
1001                                           );
1002         END IF;
1003         Debug_Conc_Log( l_proc_log_prefix || 'Master Org ID: '|| l_org_id );
1004         Debug_Conc_Log( l_proc_log_prefix || 'SS ID: ' || l_ss_id );
1005         Debug_Conc_Log( l_proc_log_prefix || 'Is PDH Batch?: '|| l_pdh_batch_flag );
1006 
1007         l_is_pdh_batch  := ( l_pdh_batch_flag = FND_API.G_TRUE );
1008         IF  l_is_pdh_batch THEN
1009             -- DBMS_OUTPUT.PUT_LINE( 'PDH Batch' );
1010             OPEN c_pdh_target_rev_attrs( l_org_id, l_rev_dl_id );
1011             FETCH c_pdh_target_rev_attrs BULK COLLECT INTO l_old_rows;
1012             CLOSE c_pdh_target_rev_attrs;
1013         ELSE
1014             -- DBMS_OUTPUT.PUT_LINE( 'SS Batch' );
1015             OPEN c_ss_target_rev_attrs( l_org_id, l_rev_dl_id );
1016             FETCH c_ss_target_rev_attrs BULK COLLECT INTO l_old_rows;
1017             CLOSE c_ss_target_rev_attrs;
1018         END IF;
1019 
1020         Debug_Conc_Log( l_proc_log_prefix || 'Rows requiring merging: ' || l_old_rows.COUNT );
1021         IF  0 <> l_old_rows.COUNT THEN
1022             -- attributes common to every merged row
1023             l_merge_base.DATA_SET_ID    := p_batch_id;
1024             l_merge_base.PROCESS_STATUS := CASE WHEN l_is_pdh_batch THEN 1 ELSE 0 END;
1025 
1026             l_old_rowids := UROWID_TABLE( );
1027             l_old_rowids.EXTEND( l_old_rows.COUNT );
1028 
1029             -- process the item-level attrs
1030             FOR orow_ix IN l_old_rows.FIRST .. l_old_rows.LAST LOOP
1031                 l_old_rowids( orow_ix ) := l_old_rows( orow_ix ).RID;
1032 
1033                 IF( l_old_rows( orow_ix ).RNK <> l_cur_rank ) THEN
1034                     l_cur_rank := l_old_rows( orow_ix ).RNK;
1035                     Debug_Conc_Log( l_proc_log_prefix || '  Starting new merged row; rank = '|| l_cur_rank );
1036                     l_mrow_ix := l_mrow_ix + 1;
1037                     l_merged_rows( l_mrow_ix ) := l_merge_base;
1038                     IF NOT l_is_pdh_batch THEN
1039                         l_merged_rows( l_mrow_ix ).SOURCE_SYSTEM_ID          := l_old_rows( orow_ix ).SOURCE_SYSTEM_ID;
1040                         l_merged_rows( l_mrow_ix ).SOURCE_SYSTEM_REFERENCE   := l_old_rows( orow_ix ).SOURCE_SYSTEM_REFERENCE;
1041                         Debug_Conc_Log( l_proc_log_prefix || '   Source System Reference = ' || l_merged_rows( l_mrow_ix ).SOURCE_SYSTEM_REFERENCE );
1042                     END IF;
1043 
1044                     l_merged_rows( l_mrow_ix ).ATTR_GROUP_INT_NAME  := l_old_rows( orow_ix ).ATTR_GROUP_INT_NAME;
1045                     l_merged_rows( l_mrow_ix ).ATTR_INT_NAME        := l_old_rows( orow_ix ).ATTR_INT_NAME;
1046                     l_merged_rows( l_mrow_ix ).DATA_LEVEL_ID        := l_old_rows( orow_ix ).DATA_LEVEL_ID;
1047                     l_data_type_code := l_old_rows( orow_ix ).DATA_TYPE_CODE;
1048                     Debug_Conc_Log( l_proc_log_prefix || '   AttrGroup = ' || l_merged_rows( l_mrow_ix ).ATTR_GROUP_INT_NAME
1049                                                       || ', Attr = '    || l_merged_rows( l_mrow_ix ).ATTR_INT_NAME
1050                                                       || ', AttrDataTypeCode = ' || l_data_type_code
1051                                   );
1052                 ELSE
1053                     Debug_Conc_Log( l_proc_log_prefix || '  Merging another record into current merged row; rank = '|| l_cur_rank );
1054                 END IF;
1055 
1056                 -- Special Cases:
1057                 -- Transaction type
1058                 l_candidate_trans := UPPER( l_old_rows( orow_ix ).TRANSACTION_TYPE );
1059 
1060                 IF      l_merged_rows( l_mrow_ix ).TRANSACTION_TYPE IS NULL
1061                     OR  l_merged_rows( l_mrow_ix ).TRANSACTION_TYPE <> l_candidate_trans     -- <> filters out nulls
1062                 THEN
1063                     -- CREATE > SYNC > UPDATE : order of case expression matters
1064                     l_merged_rows( l_mrow_ix ).TRANSACTION_TYPE :=
1065                         CASE
1066                             WHEN l_merged_rows( l_mrow_ix ).TRANSACTION_TYPE = G_TRANS_TYPE_CREATE
1067                               OR l_candidate_trans = G_TRANS_TYPE_CREATE                            THEN G_TRANS_TYPE_CREATE
1068                             WHEN l_merged_rows( l_mrow_ix ).TRANSACTION_TYPE = G_TRANS_TYPE_SYNC
1069                               OR l_candidate_trans = G_TRANS_TYPE_SYNC                              THEN G_TRANS_TYPE_SYNC
1070                             WHEN l_merged_rows( l_mrow_ix ).TRANSACTION_TYPE = G_TRANS_TYPE_UPDATE
1071                               OR l_candidate_trans = G_TRANS_TYPE_UPDATE                            THEN G_TRANS_TYPE_UPDATE
1072                             ELSE NULL -- INVALID transaction types encountered so far ...
1073                         END;
1074                 END IF;
1075 
1076 
1077                 -- The following columns need to be treated as atomic groups
1078                 -- 1. Item Identifier
1079                 IF      l_merged_rows( l_mrow_ix ).INVENTORY_ITEM_ID  IS NULL
1080                     AND l_merged_rows( l_mrow_ix ).ITEM_NUMBER        IS NULL
1081                 THEN
1082                     l_merged_rows( l_mrow_ix ).INVENTORY_ITEM_ID  := l_old_rows( orow_ix ).INVENTORY_ITEM_ID;
1083                     l_merged_rows( l_mrow_ix ).ITEM_NUMBER        := l_old_rows( orow_ix ).ITEM_NUMBER;
1084                 END IF;
1085 
1086                 -- 2. Organization
1087                 IF      l_merged_rows( l_mrow_ix ).ORGANIZATION_ID    IS NULL
1088                     AND l_merged_rows( l_mrow_ix ).ORGANIZATION_CODE  IS NULL
1089                 THEN
1090                     l_merged_rows( l_mrow_ix ).ORGANIZATION_ID        := l_old_rows( orow_ix ).ORGANIZATION_ID ;
1091                     l_merged_rows( l_mrow_ix ).ORGANIZATION_CODE      := l_old_rows( orow_ix ).ORGANIZATION_CODE ;
1092                 END IF;
1093 
1094                 -- 3. Revision
1095 
1096                 -- 4. The attribute value
1097                 IF      l_merged_rows( l_mrow_ix ).ATTR_DISP_VALUE  IS NULL
1098                     AND l_merged_rows( l_mrow_ix ).ATTR_VALUE_STR   IS NULL
1099                     AND l_merged_rows( l_mrow_ix ).ATTR_VALUE_DATE  IS NULL
1100                     AND l_merged_rows( l_mrow_ix ).ATTR_VALUE_NUM   IS NULL
1101                     AND l_merged_rows( l_mrow_ix ).ATTR_VALUE_UOM       IS NULL
1102                     AND l_merged_rows( l_mrow_ix ).ATTR_UOM_DISP_VALUE  IS NULL
1103                 THEN
1104                     CASE
1105                         WHEN l_data_type_code = 'C' OR l_data_type_code = 'A' THEN      -- String Attribute
1106                             IF      l_old_rows( orow_ix ).ATTR_VALUE_STR    IS NOT NULL
1107                                 OR  l_old_rows( orow_ix ).ATTR_DISP_VALUE   IS NOT NULL
1108                             THEN
1109                                 l_merged_rows( l_mrow_ix ).ATTR_VALUE_STR       := l_old_rows( orow_ix ).ATTR_VALUE_STR;
1110                                 l_merged_rows( l_mrow_ix ).ATTR_DISP_VALUE      := l_old_rows( orow_ix ).ATTR_DISP_VALUE;
1111                                 l_merged_rows( l_mrow_ix ).ATTR_VALUE_UOM       := l_old_rows( orow_ix ).ATTR_VALUE_UOM;
1112                                 l_merged_rows( l_mrow_ix ).ATTR_UOM_DISP_VALUE  := l_old_rows( orow_ix ).ATTR_UOM_DISP_VALUE;
1113                             END IF;
1114                         WHEN l_data_type_code = 'X' or l_data_type_code = 'Y' THEN      -- Date Attribute
1115                             IF      l_old_rows( orow_ix ).ATTR_VALUE_DATE   IS NOT NULL
1116                                 OR  l_old_rows( orow_ix ).ATTR_DISP_VALUE   IS NOT NULL
1117                             THEN
1118                                 l_merged_rows( l_mrow_ix ).ATTR_VALUE_DATE      := l_old_rows( orow_ix ).ATTR_VALUE_DATE;
1119                                 l_merged_rows( l_mrow_ix ).ATTR_DISP_VALUE      := l_old_rows( orow_ix ).ATTR_DISP_VALUE;
1120                                 l_merged_rows( l_mrow_ix ).ATTR_VALUE_UOM       := l_old_rows( orow_ix ).ATTR_VALUE_UOM;
1121                                 l_merged_rows( l_mrow_ix ).ATTR_UOM_DISP_VALUE  := l_old_rows( orow_ix ).ATTR_UOM_DISP_VALUE;
1122                             END IF;
1123                         WHEN l_data_type_code = 'N' THEN                                -- Num Attribute
1124                             IF      l_old_rows( orow_ix ).ATTR_VALUE_NUM    IS NOT NULL
1125                                 OR  l_old_rows( orow_ix ).ATTR_DISP_VALUE   IS NOT NULL
1126                             THEN
1127                                 l_merged_rows( l_mrow_ix ).ATTR_VALUE_NUM       := l_old_rows( orow_ix ).ATTR_VALUE_NUM;
1128                                 l_merged_rows( l_mrow_ix ).ATTR_DISP_VALUE      := l_old_rows( orow_ix ).ATTR_DISP_VALUE;
1129                                 l_merged_rows( l_mrow_ix ).ATTR_VALUE_UOM       := l_old_rows( orow_ix ).ATTR_VALUE_UOM;
1130                                 l_merged_rows( l_mrow_ix ).ATTR_UOM_DISP_VALUE  := l_old_rows( orow_ix ).ATTR_UOM_DISP_VALUE;
1131                             END IF;
1132                     END CASE;
1133                 END IF;
1134 
1135                 -- Non-special cased
1136                 -- Start Generated Code
1137                 /* Generated using:
1138                     SET LINESIZE 200
1139                     SELECT  'if l_merged_rows( l_mrow_ix ).' ||column_name || ' is null then l_merged_rows( l_mrow_ix ).' || column_name || ' := l_old_rows( orow_ix ).' || column_name || '; end if; '
1140                     FROM    ALL_TAB_COLUMNS
1141                     WHERE   TABLE_NAME = 'EGO_ITM_USR_ATTR_INTRFC'
1142                     AND COLUMN_NAME NOT IN
1143                         ( -- special cases (for merge)
1144                           'INVENTORY_ITEM_ID'
1145                         , 'ITEM_NUMBER'
1146                         , 'ORGANIZATION_ID'
1147                         , 'ORGANIZATION_CODE'
1148                         , 'TRANSACTION_TYPE'
1149                         , 'ATTR_INT_NAME'
1150                         , 'ATTR_GROUP_INT_NAME'
1151                         , 'ATTR_DISP_VALUE'
1152                         , 'ATTR_VALUE_STR'
1153                         , 'ATTR_VALUE_DATE'
1154                         , 'ATTR_VALUE_NUM'
1155                         , 'ATTR_VALUE_UOM'
1156                         , 'ATTR_UOM_DISP_VALUE'
1157                         , 'ATTR_GROUP_ID' -- ignore; assume will be filled during processing
1158                           -- special columns
1159                         , 'DATA_SET_ID'
1160                         , 'PROCESS_STATUS'
1161                         , 'SOURCE_SYSTEM_ID'
1162                         , 'SOURCE_SYSTEM_REFERENCE'
1163                         , 'INTERFACE_TABLE_UNIQUE_ID' -- should be handled by INSERT trigger
1164                           -- who columns
1165                         , 'LAST_UPDATE_DATE'
1166                         , 'CREATION_DATE'
1167                         , 'CREATED_BY'
1168                         , 'LAST_UPDATED_BY'
1169                         , 'LAST_UPDATE_LOGIN'
1170                           -- XXX: exclude concurrent processing columns?
1171                         )
1172                     ORDER BY COLUMN_NAME ASC
1173                 */
1174                 if l_merged_rows( l_mrow_ix ).ATTR_GROUP_TYPE is null then l_merged_rows( l_mrow_ix ).ATTR_GROUP_TYPE := l_old_rows( orow_ix ).ATTR_GROUP_TYPE; end if;
1175                 if l_merged_rows( l_mrow_ix ).CHANGE_ID is null then l_merged_rows( l_mrow_ix ).CHANGE_ID := l_old_rows( orow_ix ).CHANGE_ID; end if;
1176                 if l_merged_rows( l_mrow_ix ).CHANGE_LINE_ID is null then l_merged_rows( l_mrow_ix ).CHANGE_LINE_ID := l_old_rows( orow_ix ).CHANGE_LINE_ID; end if;
1177                 if l_merged_rows( l_mrow_ix ).ITEM_CATALOG_GROUP_ID is null then l_merged_rows( l_mrow_ix ).ITEM_CATALOG_GROUP_ID := l_old_rows( orow_ix ).ITEM_CATALOG_GROUP_ID; end if;
1178                 if l_merged_rows( l_mrow_ix ).PROGRAM_APPLICATION_ID is null then l_merged_rows( l_mrow_ix ).PROGRAM_APPLICATION_ID := l_old_rows( orow_ix ).PROGRAM_APPLICATION_ID; end if;
1179                 if l_merged_rows( l_mrow_ix ).PROGRAM_ID is null then l_merged_rows( l_mrow_ix ).PROGRAM_ID := l_old_rows( orow_ix ).PROGRAM_ID; end if;
1180                 if l_merged_rows( l_mrow_ix ).PROGRAM_UPDATE_DATE is null then l_merged_rows( l_mrow_ix ).PROGRAM_UPDATE_DATE := l_old_rows( orow_ix ).PROGRAM_UPDATE_DATE; end if;
1181                 if l_merged_rows( l_mrow_ix ).REVISION is null then l_merged_rows( l_mrow_ix ).REVISION := l_old_rows( orow_ix ).REVISION; end if;
1182                 if l_merged_rows( l_mrow_ix ).REVISION_ID is null then l_merged_rows( l_mrow_ix ).REVISION_ID := l_old_rows( orow_ix ).REVISION_ID; end if;
1183                 if l_merged_rows( l_mrow_ix ).REQUEST_ID is null then l_merged_rows( l_mrow_ix ).REQUEST_ID := l_old_rows( orow_ix ).REQUEST_ID; end if;
1184                 if l_merged_rows( l_mrow_ix ).ROW_IDENTIFIER is null then l_merged_rows( l_mrow_ix ).ROW_IDENTIFIER := l_old_rows( orow_ix ).ROW_IDENTIFIER; end if;
1185                 if l_merged_rows( l_mrow_ix ).TRANSACTION_ID is null then l_merged_rows( l_mrow_ix ).TRANSACTION_ID := l_old_rows( orow_ix ).TRANSACTION_ID; end if;
1186                 -- End Generated Code
1187             END LOOP; -- loop over old rows
1188 
1189             /*
1190             -- XXX: In case only null/invalid transaction types encountered, set transaction type to SYNC ?.
1191             IF l_merged_rows( l_mrow_ix ).TRANSACTION_TYPE IS NULL THEN
1192                 l_merged_rows( l_mrow_ix ).TRANSACTION_TYPE := G_TRANS_TYPE_SYNC;
1193             END IF;
1194             */
1195             IF l_merged_rows IS NOT NULL THEN
1196                 -- delete
1197                 Debug_Conc_Log( l_proc_log_prefix || 'Deleting ' || l_old_rowids.COUNT || ' old rows ...' );
1198                 FORALL rid_ix IN INDICES OF l_old_rowids
1199                     DELETE FROM EGO_ITM_USR_ATTR_INTRFC
1200                         WHERE ROWID = l_old_rowids( rid_ix );
1201                 -- insert
1202                 Debug_Conc_Log( l_proc_log_prefix || 'Inserting ' || l_merged_rows.COUNT || ' merged rows ...' );
1203                 FORALL row_index IN INDICES OF l_merged_rows
1204                     INSERT INTO EGO_ITM_USR_ATTR_INTRFC
1205                         VALUES l_merged_rows( row_index );
1206             END IF;
1207         END IF; -- ENDS IF l_old_rows.count <> 0
1208 
1209         IF p_commit = FND_API.G_TRUE THEN
1210             Debug_Conc_Log( l_proc_log_prefix || 'Committing' );
1211             COMMIT;
1212         END IF;
1213         Debug_Conc_Log( l_proc_log_prefix || 'Exiting' );
1214     END merge_rev_attrs;
1215 
1216     PROCEDURE merge_item_attrs  ( p_batch_id       IN NUMBER
1217                                 , p_is_pdh_batch   IN FLAG      DEFAULT NULL
1218                                 , p_ss_id          IN NUMBER    DEFAULT NULL
1219                                 , p_master_org_id  IN NUMBER    DEFAULT NULL
1220                                 , p_commit         IN FLAG      DEFAULT FND_API.G_FALSE
1221                                 )
1222     IS
1223 
1224         --6468564:Perf issue replacing EGO_ATTRS_V
1225         CURSOR c_pdh_target_item_attrs( cp_master_org_id EGO_ITM_USR_ATTR_INTRFC.ORGANIZATION_ID%TYPE ) IS
1226             SELECT  sub.*
1227                 ,EXT.DATA_TYPE DATA_TYPE_CODE
1228             FROM
1229                 ( SELECT
1230                         eiuai.ROWID rid
1231                         , COUNT( * ) OVER ( PARTITION BY
1232                                                     ITEM_NUMBER
1233                                                     , ATTR_GROUP_INT_NAME
1234                                                     , ATTR_INT_NAME
1235                                                     , DATA_LEVEL_ID
1236                                                     , PK1_VALUE
1237                                                     , PK2_VALUE
1238                                                     , PK3_VALUE
1239                                                     , PK4_VALUE
1240                                                     , PK5_VALUE
1241                                                     , COALESCE  ( eiuai.ORGANIZATION_ID
1242                                                                 , (  SELECT  ORGANIZATION_ID
1243                                                                      FROM    MTL_PARAMETERS p
1244                                                                      WHERE   p.ORGANIZATION_CODE = eiuai.ORGANIZATION_CODE
1245                                                                   )
1246                                                                 , NVL2( ORGANIZATION_CODE, cp_master_org_id, NULL )
1247                                                                 )
1248                                                     , NVL(  ATTR_GROUP_TYPE, G_DEFAULT_ATTR_GROUP_TYPE )
1249                                           )
1250                         cnt
1251                         , RANK() OVER   ( ORDER BY
1252                                                     ITEM_NUMBER
1253                                                     , ATTR_GROUP_INT_NAME
1254                                                     , ATTR_INT_NAME
1255                                                     , DATA_LEVEL_ID
1256                                                     , PK1_VALUE
1257                                                     , PK2_VALUE
1258                                                     , PK3_VALUE
1259                                                     , PK4_VALUE
1260                                                     , PK5_VALUE
1261                                                     , COALESCE  ( eiuai.ORGANIZATION_ID
1262                                                                 , (  SELECT  ORGANIZATION_ID
1263                                                                      FROM    MTL_PARAMETERS p
1264                                                                      WHERE   p.ORGANIZATION_CODE = eiuai.ORGANIZATION_CODE
1265                                                                   )
1266                                                                 , NVL2( ORGANIZATION_CODE, cp_master_org_id, NULL )
1267                                                                 )
1268                                                     , NVL(  ATTR_GROUP_TYPE, G_DEFAULT_ATTR_GROUP_TYPE )
1269                                         )
1270                         rnk
1271                         , eiuai.*
1272                    FROM EGO_ITM_USR_ATTR_INTRFC eiuai, EGO_FND_DSC_FLX_CTX_EXT FL_CTX_EXT
1273                    WHERE DATA_SET_ID                              = p_batch_id
1274                      AND PROCESS_STATUS                           = 1
1275                      AND FL_CTX_EXT.DESCRIPTIVE_FLEXFIELD_NAME    = NVL( EIUAI.ATTR_GROUP_TYPE, G_DEFAULT_ATTR_GROUP_TYPE )
1276                      AND FL_CTX_EXT.APPLICATION_ID                = 431
1277                      AND FL_CTX_EXT.DESCRIPTIVE_FLEX_CONTEXT_CODE = EIUAI.ATTR_GROUP_INT_NAME
1278                      AND FL_CTX_EXT.MULTI_ROW                     = 'N'
1279                      AND EXISTS( SELECT NULL
1280                                  FROM EGO_ATTR_GROUP_DL A, EGO_DATA_LEVEL_B DL
1281                                  WHERE DL.APPLICATION_ID  = 431
1282                                    AND DL.ATTR_GROUP_TYPE = FL_CTX_EXT.DESCRIPTIVE_FLEXFIELD_NAME
1283                                    AND DL.DATA_LEVEL_NAME IN ( 'ITEM_LEVEL' , 'ITEM_ORG', 'ITEM_SUP', 'ITEM_SUP_SITE', 'ITEM_SUP_SITE_ORG' )
1284                                    AND DL.DATA_LEVEL_ID   = DL.DATA_LEVEL_ID
1285                                    AND A.ATTR_GROUP_ID    = FL_CTX_EXT.ATTR_GROUP_ID
1286                                )
1287                 ) sub
1288                  ,FND_DESCR_FLEX_COLUMN_USAGES FL_COL
1289                  ,EGO_FND_DF_COL_USGS_EXT EXT
1290             WHERE sub.CNT > 1
1291               AND FL_COL.APPLICATION_ID                = 431
1292               AND FL_COL.DESCRIPTIVE_FLEX_CONTEXT_CODE = sub.ATTR_GROUP_INT_NAME
1293               AND FL_COL.END_USER_COLUMN_NAME          = sub.ATTR_INT_NAME
1294               AND FL_COL.DESCRIPTIVE_FLEXFIELD_NAME    = SUB.ATTR_GROUP_TYPE
1295               AND EXT.APPLICATION_ID                   = FL_COL.APPLICATION_ID
1296               AND EXT.DESCRIPTIVE_FLEXFIELD_NAME       = FL_COL.DESCRIPTIVE_FLEXFIELD_NAME
1297               AND EXT.DESCRIPTIVE_FLEX_CONTEXT_CODE    = FL_COL.DESCRIPTIVE_FLEX_CONTEXT_CODE
1298               AND EXT.APPLICATION_COLUMN_NAME          = FL_COL.APPLICATION_COLUMN_NAME
1299             ORDER BY rnk, sub.last_update_date DESC, interface_table_unique_id DESC ;
1300 
1301         --6468564 : Perf issue replacing EGO_ATTRS_V
1302         CURSOR c_ss_target_item_attrs( cp_master_org_id EGO_ITM_USR_ATTR_INTRFC.ORGANIZATION_ID%TYPE ) IS
1303             SELECT  sub.*
1304                    ,EXT.DATA_TYPE DATA_TYPE_CODE
1305             FROM
1306                 ( SELECT
1307                         EIUAI.ROWID rid
1308                         , COUNT( * ) OVER ( PARTITION BY
1309                                                     SOURCE_SYSTEM_ID
1310                                                     , SOURCE_SYSTEM_REFERENCE
1311                                                     , ATTR_GROUP_INT_NAME
1312                                                     , ATTR_INT_NAME
1313                                                     , DATA_LEVEL_ID
1314                                                     , PK1_VALUE
1315                                                     , PK2_VALUE
1316                                                     , PK3_VALUE
1317                                                     , PK4_VALUE
1318                                                     , PK5_VALUE
1319                                                     , COALESCE  ( eiuai.ORGANIZATION_ID
1320                                                                 , (  SELECT  ORGANIZATION_ID
1321                                                                      FROM    MTL_PARAMETERS p
1322                                                                      WHERE   p.ORGANIZATION_CODE = eiuai.ORGANIZATION_CODE
1323                                                                   )
1324                                                                 , NVL2( ORGANIZATION_CODE, cp_master_org_id, NULL )
1325                                                                 )
1326                                                     , NVL( ATTR_GROUP_TYPE, G_DEFAULT_ATTR_GROUP_TYPE )
1327                                           )
1328                         cnt
1329                         , RANK() OVER   ( ORDER BY
1330                                                     SOURCE_SYSTEM_ID
1331                                                     , SOURCE_SYSTEM_REFERENCE
1332                                                     , ATTR_GROUP_INT_NAME
1333                                                     , ATTR_INT_NAME
1334                                                     , DATA_LEVEL_ID
1335                                                     , PK1_VALUE
1336                                                     , PK2_VALUE
1337                                                     , PK3_VALUE
1338                                                     , PK4_VALUE
1339                                                     , PK5_VALUE
1340                                                     , COALESCE  ( eiuai.ORGANIZATION_ID
1341                                                                 , (  SELECT  ORGANIZATION_ID
1342                                                                      FROM    MTL_PARAMETERS p
1343                                                                      WHERE   p.ORGANIZATION_CODE = eiuai.ORGANIZATION_CODE
1344                                                                   )
1345                                                                 , NVL2( ORGANIZATION_CODE, cp_master_org_id, NULL )
1346                                                                 )
1347                                                     , NVL( ATTR_GROUP_TYPE, G_DEFAULT_ATTR_GROUP_TYPE )
1348                                         )
1349                         rnk
1350                         , eiuai.*
1351                    FROM EGO_ITM_USR_ATTR_INTRFC eiuai, EGO_FND_DSC_FLX_CTX_EXT FL_CTX_EXT
1352                    WHERE DATA_SET_ID                              = p_batch_id
1353                      AND PROCESS_STATUS                           = 0
1354                      AND FL_CTX_EXT.DESCRIPTIVE_FLEXFIELD_NAME    = NVL( EIUAI.ATTR_GROUP_TYPE, G_DEFAULT_ATTR_GROUP_TYPE )
1355                      AND FL_CTX_EXT.APPLICATION_ID                = 431
1356                      AND FL_CTX_EXT.DESCRIPTIVE_FLEX_CONTEXT_CODE = EIUAI.ATTR_GROUP_INT_NAME
1357                      AND FL_CTX_EXT.MULTI_ROW                     = 'N'
1358                      AND EXISTS( SELECT NULL
1359                                  FROM EGO_ATTR_GROUP_DL A, EGO_DATA_LEVEL_B DL
1360                                  WHERE DL.APPLICATION_ID  = 431
1361                                    AND DL.ATTR_GROUP_TYPE = FL_CTX_EXT.DESCRIPTIVE_FLEXFIELD_NAME
1362                                    AND DL.DATA_LEVEL_NAME IN ( 'ITEM_LEVEL' , 'ITEM_ORG', 'ITEM_SUP', 'ITEM_SUP_SITE', 'ITEM_SUP_SITE_ORG' )
1363                                    AND DL.DATA_LEVEL_ID   = DL.DATA_LEVEL_ID
1364                                    AND A.ATTR_GROUP_ID    = FL_CTX_EXT.ATTR_GROUP_ID
1365                                )
1366                 ) sub
1367                  ,FND_DESCR_FLEX_COLUMN_USAGES FL_COL
1368                  ,EGO_FND_DF_COL_USGS_EXT EXT
1369             WHERE sub.CNT > 1
1370               AND FL_COL.APPLICATION_ID                = 431
1371               AND FL_COL.DESCRIPTIVE_FLEX_CONTEXT_CODE = sub.ATTR_GROUP_INT_NAME
1372               AND FL_COL.END_USER_COLUMN_NAME          = sub.ATTR_INT_NAME
1373               AND FL_COL.DESCRIPTIVE_FLEXFIELD_NAME    = SUB.ATTR_GROUP_TYPE
1374               AND EXT.APPLICATION_ID                   = FL_COL.APPLICATION_ID
1375               AND EXT.DESCRIPTIVE_FLEXFIELD_NAME       = FL_COL.DESCRIPTIVE_FLEXFIELD_NAME
1376               AND EXT.DESCRIPTIVE_FLEX_CONTEXT_CODE    = FL_COL.DESCRIPTIVE_FLEX_CONTEXT_CODE
1377               AND EXT.APPLICATION_COLUMN_NAME          = FL_COL.APPLICATION_COLUMN_NAME
1378             ORDER BY rnk, sub.last_update_date DESC, interface_table_unique_id DESC ;
1379 
1380         TYPE TARGET_ROWS    IS TABLE OF c_ss_target_item_attrs%ROWTYPE;
1381 
1382         l_merged_rows   EIUAI_ROWS;
1383         l_merge_base    EIUAI_ROW;
1384         l_old_rows      TARGET_ROWS;
1385         l_old_rowids    UROWID_TABLE;
1386 
1387         l_ss_id         EGO_ITM_USR_ATTR_INTRFC.SOURCE_SYSTEM_ID%TYPE := p_ss_id;
1388         l_ssr           EGO_ITM_USR_ATTR_INTRFC.SOURCE_SYSTEM_REFERENCE%TYPE;
1389         l_candidate_trans EGO_ITM_USR_ATTR_INTRFC.TRANSACTION_TYPE%TYPE;
1390 
1391         l_cur_rank      PLS_INTEGER := 0; -- because rank() starts at 1
1392         l_mrow_ix       PLS_INTEGER := 0;
1393         l_is_pdh_batch  BOOLEAN;
1394 
1395         l_data_type_code EGO_ATTRS_V.DATA_TYPE_CODE%TYPE;
1396         l_org_id        EGO_ITM_USR_ATTR_INTRFC.ORGANIZATION_ID%TYPE := p_master_org_id;
1397         l_pdh_batch_flag FLAG := p_is_pdh_batch;
1398 
1399         l_proc_log_prefix CONSTANT VARCHAR2(30) := '  merge_item_attrs - ';
1400     BEGIN
1401         Debug_Conc_Log( l_proc_log_prefix || 'Entering' );
1402         Debug_Conc_Log( l_proc_log_prefix || 'Batch ID: ' || p_batch_id );
1403         IF  l_pdh_batch_flag IS NULL OR l_org_id IS NULL OR l_ss_id IS NULL THEN
1404             merge_params_from_batch_header( p_batch_id      => p_batch_id
1405                                           , x_is_pdh_batch  => l_pdh_batch_flag
1406                                           , x_master_org_id => l_org_id
1407                                           , x_ss_id         => l_ss_id
1408                                           );
1409         END IF;
1410         Debug_Conc_Log( l_proc_log_prefix || 'Master Org ID: ' || l_org_id );
1411         Debug_Conc_Log( l_proc_log_prefix || 'SS ID: ' || l_ss_id );
1412         Debug_Conc_Log( l_proc_log_prefix || 'Is PDH Batch?: ' || l_pdh_batch_flag );
1413 
1414         l_is_pdh_batch  := ( l_pdh_batch_flag = FND_API.G_TRUE );
1415         IF  l_is_pdh_batch THEN
1416             -- DBMS_OUTPUT.PUT_LINE( 'PDH Batch' );
1417             OPEN c_pdh_target_item_attrs( l_org_id );
1418             FETCH c_pdh_target_item_attrs BULK COLLECT INTO l_old_rows;
1419             CLOSE c_pdh_target_item_attrs;
1420         ELSE
1421             -- DBMS_OUTPUT.PUT_LINE( 'SS Batch' );
1422             OPEN c_ss_target_item_attrs( l_org_id );
1423             FETCH c_ss_target_item_attrs BULK COLLECT INTO l_old_rows;
1424             CLOSE c_ss_target_item_attrs;
1425         END IF;
1426 
1427         Debug_Conc_Log( l_proc_log_prefix || 'Rows requiring merging: ' || l_old_rows.COUNT );
1428         IF  0 <> l_old_rows.COUNT THEN
1429             -- attributes common to every merged row
1430             l_merge_base.DATA_SET_ID    := p_batch_id;
1431             l_merge_base.PROCESS_STATUS := CASE WHEN l_is_pdh_batch THEN 1 ELSE 0 END;
1432 
1433             l_old_rowids := UROWID_TABLE( );
1434             l_old_rowids.EXTEND( l_old_rows.COUNT );
1435 
1436             -- process the item-level attrs
1437             FOR orow_ix IN l_old_rows.FIRST .. l_old_rows.LAST LOOP
1438                 l_old_rowids( orow_ix ) := l_old_rows( orow_ix ).RID;
1439 
1440                 IF( l_old_rows( orow_ix ).RNK <> l_cur_rank ) THEN
1441                     l_cur_rank := l_old_rows( orow_ix ).RNK;
1442                     Debug_Conc_Log( l_proc_log_prefix || '  Starting new merged row; rank = '|| l_cur_rank );
1443                     l_mrow_ix := l_mrow_ix + 1;
1444                     l_merged_rows( l_mrow_ix ) := l_merge_base;
1445                     IF NOT l_is_pdh_batch THEN
1446                         l_merged_rows( l_mrow_ix ).SOURCE_SYSTEM_ID          := l_old_rows( orow_ix ).SOURCE_SYSTEM_ID;
1447                         l_merged_rows( l_mrow_ix ).SOURCE_SYSTEM_REFERENCE   := l_old_rows( orow_ix ).SOURCE_SYSTEM_REFERENCE;
1448                         Debug_Conc_Log( l_proc_log_prefix || '   Source System Reference = ' || l_merged_rows( l_mrow_ix ).SOURCE_SYSTEM_REFERENCE );
1449                     END IF;
1450 
1451                     l_merged_rows( l_mrow_ix ).ATTR_GROUP_INT_NAME  := l_old_rows( orow_ix ).ATTR_GROUP_INT_NAME;
1452                     l_merged_rows( l_mrow_ix ).ATTR_INT_NAME        := l_old_rows( orow_ix ).ATTR_INT_NAME;
1453                     l_merged_rows( l_mrow_ix ).DATA_LEVEL_ID        := l_old_rows( orow_ix ).DATA_LEVEL_ID;
1454                     l_merged_rows( l_mrow_ix ).DATA_LEVEL_NAME      := l_old_rows( orow_ix ).DATA_LEVEL_NAME;
1455                     l_merged_rows( l_mrow_ix ).PK1_VALUE      := l_old_rows( orow_ix ).PK1_VALUE;
1456                     l_merged_rows( l_mrow_ix ).PK2_VALUE      := l_old_rows( orow_ix ).PK2_VALUE;
1457                     l_merged_rows( l_mrow_ix ).PK3_VALUE      := l_old_rows( orow_ix ).PK3_VALUE;
1458                     l_merged_rows( l_mrow_ix ).PK4_VALUE      := l_old_rows( orow_ix ).PK4_VALUE;
1459                     l_merged_rows( l_mrow_ix ).PK5_VALUE      := l_old_rows( orow_ix ).PK5_VALUE;
1460                     l_data_type_code := l_old_rows( orow_ix ).DATA_TYPE_CODE;
1461                     Debug_Conc_Log( l_proc_log_prefix || '   AttrGroup = ' || l_merged_rows( l_mrow_ix ).ATTR_GROUP_INT_NAME
1462                                                       || ', Attr = '    || l_merged_rows( l_mrow_ix ).ATTR_INT_NAME
1463                                                       || ', AttrDataTypeCode = ' || l_data_type_code
1464                                   );
1465                 ELSE
1466                     Debug_Conc_Log( l_proc_log_prefix || '  Merging another record into current merged row; rank = '|| l_cur_rank );
1467                 END IF;
1468 
1469                 -- Special Cases:
1470                 -- Transaction type
1471                 l_candidate_trans := UPPER( l_old_rows( orow_ix ).TRANSACTION_TYPE );
1472 
1473                 IF      l_merged_rows( l_mrow_ix ).TRANSACTION_TYPE IS NULL
1474                     OR  l_merged_rows( l_mrow_ix ).TRANSACTION_TYPE <> l_candidate_trans     -- <> filters out nulls
1475                 THEN
1476                     -- CREATE > SYNC > UPDATE : order of case expression matters
1477                     l_merged_rows( l_mrow_ix ).TRANSACTION_TYPE :=
1478                         CASE
1479                             WHEN l_merged_rows( l_mrow_ix ).TRANSACTION_TYPE = G_TRANS_TYPE_CREATE
1480                               OR l_candidate_trans = G_TRANS_TYPE_CREATE                            THEN G_TRANS_TYPE_CREATE
1481                             WHEN l_merged_rows( l_mrow_ix ).TRANSACTION_TYPE = G_TRANS_TYPE_SYNC
1482                               OR l_candidate_trans = G_TRANS_TYPE_SYNC                              THEN G_TRANS_TYPE_SYNC
1483                             WHEN l_merged_rows( l_mrow_ix ).TRANSACTION_TYPE = G_TRANS_TYPE_UPDATE
1484                               OR l_candidate_trans = G_TRANS_TYPE_UPDATE                            THEN G_TRANS_TYPE_UPDATE
1485                             ELSE NULL -- INVALID transaction types encountered so far ...
1486                         END;
1487                 END IF;
1488 
1489 
1490                 -- The following columns need to be treated as atomic groups
1491                 -- 1. Item Identifier
1492                 IF      l_merged_rows( l_mrow_ix ).INVENTORY_ITEM_ID  IS NULL
1493                     AND l_merged_rows( l_mrow_ix ).ITEM_NUMBER        IS NULL
1494                 THEN
1495                     l_merged_rows( l_mrow_ix ).INVENTORY_ITEM_ID  := l_old_rows( orow_ix ).INVENTORY_ITEM_ID;
1496                     l_merged_rows( l_mrow_ix ).ITEM_NUMBER        := l_old_rows( orow_ix ).ITEM_NUMBER;
1497                 END IF;
1498 
1499                 -- 2. Organization
1500                 IF      l_merged_rows( l_mrow_ix ).ORGANIZATION_ID    IS NULL
1501                     AND l_merged_rows( l_mrow_ix ).ORGANIZATION_CODE  IS NULL
1502                 THEN
1503                     l_merged_rows( l_mrow_ix ).ORGANIZATION_ID        := l_old_rows( orow_ix ).ORGANIZATION_ID ;
1504                     l_merged_rows( l_mrow_ix ).ORGANIZATION_CODE      := l_old_rows( orow_ix ).ORGANIZATION_CODE ;
1505                 END IF;
1506 
1507                 -- 3. The attribute value
1508                 IF      l_merged_rows( l_mrow_ix ).ATTR_DISP_VALUE  IS NULL
1509                     AND l_merged_rows( l_mrow_ix ).ATTR_VALUE_STR   IS NULL
1510                     AND l_merged_rows( l_mrow_ix ).ATTR_VALUE_DATE  IS NULL
1511                     AND l_merged_rows( l_mrow_ix ).ATTR_VALUE_NUM   IS NULL
1512                     AND l_merged_rows( l_mrow_ix ).ATTR_VALUE_UOM       IS NULL
1513                     AND l_merged_rows( l_mrow_ix ).ATTR_UOM_DISP_VALUE  IS NULL
1514                 THEN
1515                     CASE
1516                         WHEN l_data_type_code = 'C' OR l_data_type_code = 'A' THEN      -- String Attribute
1517                             IF      l_old_rows( orow_ix ).ATTR_VALUE_STR    IS NOT NULL
1518                                 OR  l_old_rows( orow_ix ).ATTR_DISP_VALUE   IS NOT NULL
1519                             THEN
1520                                 l_merged_rows( l_mrow_ix ).ATTR_VALUE_STR       := l_old_rows( orow_ix ).ATTR_VALUE_STR;
1521                                 l_merged_rows( l_mrow_ix ).ATTR_DISP_VALUE      := l_old_rows( orow_ix ).ATTR_DISP_VALUE;
1522                                 l_merged_rows( l_mrow_ix ).ATTR_VALUE_UOM       := l_old_rows( orow_ix ).ATTR_VALUE_UOM;
1523                                 l_merged_rows( l_mrow_ix ).ATTR_UOM_DISP_VALUE  := l_old_rows( orow_ix ).ATTR_UOM_DISP_VALUE;
1524                             END IF;
1525                         WHEN l_data_type_code = 'X' or l_data_type_code = 'Y' THEN      -- Date Attribute
1526                             IF      l_old_rows( orow_ix ).ATTR_VALUE_DATE   IS NOT NULL
1527                                 OR  l_old_rows( orow_ix ).ATTR_DISP_VALUE   IS NOT NULL
1528                             THEN
1529                                 l_merged_rows( l_mrow_ix ).ATTR_VALUE_DATE      := l_old_rows( orow_ix ).ATTR_VALUE_DATE;
1530                                 l_merged_rows( l_mrow_ix ).ATTR_DISP_VALUE      := l_old_rows( orow_ix ).ATTR_DISP_VALUE;
1531                                 l_merged_rows( l_mrow_ix ).ATTR_VALUE_UOM       := l_old_rows( orow_ix ).ATTR_VALUE_UOM;
1532                                 l_merged_rows( l_mrow_ix ).ATTR_UOM_DISP_VALUE  := l_old_rows( orow_ix ).ATTR_UOM_DISP_VALUE;
1533                             END IF;
1534                         WHEN l_data_type_code = 'N' THEN                                -- Num Attribute
1535                             IF      l_old_rows( orow_ix ).ATTR_VALUE_NUM    IS NOT NULL
1536                                 OR  l_old_rows( orow_ix ).ATTR_DISP_VALUE   IS NOT NULL
1537                             THEN
1538                                 l_merged_rows( l_mrow_ix ).ATTR_VALUE_NUM       := l_old_rows( orow_ix ).ATTR_VALUE_NUM;
1539                                 l_merged_rows( l_mrow_ix ).ATTR_DISP_VALUE      := l_old_rows( orow_ix ).ATTR_DISP_VALUE;
1540                                 l_merged_rows( l_mrow_ix ).ATTR_VALUE_UOM       := l_old_rows( orow_ix ).ATTR_VALUE_UOM;
1541                                 l_merged_rows( l_mrow_ix ).ATTR_UOM_DISP_VALUE  := l_old_rows( orow_ix ).ATTR_UOM_DISP_VALUE;
1542                             END IF;
1543                     END CASE;
1544                 END IF;
1545 
1546                 -- Non-special cased
1547                 -- Start Generated Code
1548                 /* Generated using:
1549                     SET LINESIZE 200
1550                     SELECT  'if l_merged_rows( l_mrow_ix ).' ||column_name || ' is null then l_merged_rows( l_mrow_ix ).' || column_name || ' := l_old_rows( orow_ix ).' || column_name || '; end if; '
1551                     FROM    ALL_TAB_COLUMNS
1552                     WHERE   TABLE_NAME = 'EGO_ITM_USR_ATTR_INTRFC'
1553                     AND COLUMN_NAME NOT IN
1554                         ( -- special cases (for merge)
1555                           'INVENTORY_ITEM_ID'
1556                         , 'ITEM_NUMBER'
1557                         , 'ORGANIZATION_ID'
1558                         , 'ORGANIZATION_CODE'
1559                         , 'TRANSACTION_TYPE'
1560                         , 'REVISION_ID' -- ignore for item-level attrs
1561                         , 'REVISION'    -- ignore for item-level attrs
1562                         , 'ATTR_INT_NAME'
1563                         , 'ATTR_GROUP_INT_NAME'
1564                         , 'ATTR_DISP_VALUE'
1565                         , 'ATTR_VALUE_STR'
1566                         , 'ATTR_VALUE_DATE'
1567                         , 'ATTR_VALUE_NUM'
1568                         , 'ATTR_VALUE_UOM'
1569                         , 'ATTR_UOM_DISP_VALUE'
1570                         , 'ATTR_GROUP_ID' -- ignore; assume will be filled during processing
1571                           -- special columns
1572                         , 'DATA_SET_ID'
1573                         , 'PROCESS_STATUS'
1574                         , 'SOURCE_SYSTEM_ID'
1575                         , 'SOURCE_SYSTEM_REFERENCE'
1576                         , 'INTERFACE_TABLE_UNIQUE_ID' -- should be handled by INSERT trigger
1577                           -- who columns
1578                         , 'LAST_UPDATE_DATE'
1579                         , 'CREATION_DATE'
1580                         , 'CREATED_BY'
1581                         , 'LAST_UPDATED_BY'
1582                         , 'LAST_UPDATE_LOGIN'
1583                           -- XXX: exclude concurrent processing columns?
1584                         )
1585                     ORDER BY COLUMN_NAME ASC
1586                 */
1587                 if l_merged_rows( l_mrow_ix ).ATTR_GROUP_TYPE is null then l_merged_rows( l_mrow_ix ).ATTR_GROUP_TYPE := l_old_rows( orow_ix ).ATTR_GROUP_TYPE; end if;
1588                 if l_merged_rows( l_mrow_ix ).CHANGE_ID is null then l_merged_rows( l_mrow_ix ).CHANGE_ID := l_old_rows( orow_ix ).CHANGE_ID; end if;
1589                 if l_merged_rows( l_mrow_ix ).CHANGE_LINE_ID is null then l_merged_rows( l_mrow_ix ).CHANGE_LINE_ID := l_old_rows( orow_ix ).CHANGE_LINE_ID; end if;
1590                 if l_merged_rows( l_mrow_ix ).ITEM_CATALOG_GROUP_ID is null then l_merged_rows( l_mrow_ix ).ITEM_CATALOG_GROUP_ID := l_old_rows( orow_ix ).ITEM_CATALOG_GROUP_ID; end if;
1591                 if l_merged_rows( l_mrow_ix ).PROGRAM_APPLICATION_ID is null then l_merged_rows( l_mrow_ix ).PROGRAM_APPLICATION_ID := l_old_rows( orow_ix ).PROGRAM_APPLICATION_ID; end if;
1592                 if l_merged_rows( l_mrow_ix ).PROGRAM_ID is null then l_merged_rows( l_mrow_ix ).PROGRAM_ID := l_old_rows( orow_ix ).PROGRAM_ID; end if;
1593                 if l_merged_rows( l_mrow_ix ).PROGRAM_UPDATE_DATE is null then l_merged_rows( l_mrow_ix ).PROGRAM_UPDATE_DATE := l_old_rows( orow_ix ).PROGRAM_UPDATE_DATE; end if;
1594                 if l_merged_rows( l_mrow_ix ).REQUEST_ID is null then l_merged_rows( l_mrow_ix ).REQUEST_ID := l_old_rows( orow_ix ).REQUEST_ID; end if;
1595                 if l_merged_rows( l_mrow_ix ).ROW_IDENTIFIER is null then l_merged_rows( l_mrow_ix ).ROW_IDENTIFIER := l_old_rows( orow_ix ).ROW_IDENTIFIER; end if;
1596                 if l_merged_rows( l_mrow_ix ).TRANSACTION_ID is null then l_merged_rows( l_mrow_ix ).TRANSACTION_ID := l_old_rows( orow_ix ).TRANSACTION_ID; end if;
1597                 -- End Generated Code
1598             END LOOP; -- loop over old rows
1599 
1600             /*
1601             -- XXX: In case only null/invalid transaction types encountered, set transaction type to SYNC ?.
1602             IF l_merged_rows( l_mrow_ix ).TRANSACTION_TYPE IS NULL THEN
1603                 l_merged_rows( l_mrow_ix ).TRANSACTION_TYPE := G_TRANS_TYPE_SYNC;
1604             END IF;
1605             */
1606             IF l_merged_rows IS NOT NULL THEN
1607                 -- delete
1608                 Debug_Conc_Log( l_proc_log_prefix || l_old_rowids.COUNT || ' old rows ...' );
1609                 FORALL rid_ix IN INDICES OF l_old_rowids
1610                     DELETE FROM EGO_ITM_USR_ATTR_INTRFC
1611                         WHERE ROWID = l_old_rowids( rid_ix );
1612                 -- insert
1613                 Debug_Conc_Log( l_proc_log_prefix || l_merged_rows.COUNT || ' merged rows ...' );
1614                 FORALL row_index IN INDICES OF l_merged_rows
1615                     INSERT INTO EGO_ITM_USR_ATTR_INTRFC
1616                         VALUES l_merged_rows( row_index );
1617             END IF;
1618         END IF; -- ENDS IF l_old_rows.count <> 0
1619 
1620         IF p_commit = FND_API.G_TRUE THEN
1621             Debug_Conc_Log( l_proc_log_prefix || 'Committing' );
1622             COMMIT;
1623         END IF;
1624         Debug_Conc_Log( l_proc_log_prefix || 'Exiting' );
1625     END merge_item_attrs;
1626 
1627     PROCEDURE merge_items( p_batch_id       IN NUMBER
1628                          , p_is_pdh_batch   IN FLAG
1629                          , p_ss_id          IN NUMBER   DEFAULT NULL
1630                          , p_master_org_id  IN NUMBER   DEFAULT NULL
1631                          , p_commit         IN FLAG     DEFAULT FND_API.G_FALSE
1632                          )
1633     IS
1634         TYPE MSII_ROWS      IS TABLE OF MSII_ROW INDEX BY BINARY_INTEGER;
1635 
1636         /*
1637          * This cursor is never executed.
1638          * It's only used for type definition.
1639          */
1640         CURSOR c_target_rec_type IS
1641             SELECT ROWID rid
1642                  , 0     cnt
1643                  , 0     rnk
1644                  , 'N'   excluded_flag
1645                  , msii.*
1646             FROM MTL_SYSTEM_ITEMS_INTERFACE msii;
1647 
1648         /*
1649          * Types for fetching the rows to merged.
1650          */
1651         TYPE MSII_CURSOR    IS REF CURSOR;
1652         c_target_rows       MSII_CURSOR;
1653         old_row             c_target_rec_type%ROWTYPE;
1654 
1655         l_merged_rows   MSII_ROWS;
1656         l_merge_base    MSII_ROW;
1657         l_old_rowids    UROWID_TABLE;
1658 
1659         l_ss_id         MTL_SYSTEM_ITEMS_INTERFACE.SOURCE_SYSTEM_ID%TYPE := p_ss_id;
1660         l_ssr           MTL_SYSTEM_ITEMS_INTERFACE.SOURCE_SYSTEM_REFERENCE%TYPE;
1661         l_candidate_trans MTL_SYSTEM_ITEMS_INTERFACE.TRANSACTION_TYPE%TYPE;
1662 
1663         l_cur_rank      PLS_INTEGER := 0; -- because rank() starts at 1
1664         l_mrow_ix       PLS_INTEGER := 0;
1665         l_is_pdh_batch  BOOLEAN;
1666         l_excluded_flag VARCHAR2(1);
1667 
1668         l_org_id        MTL_SYSTEM_ITEMS_INTERFACE.ORGANIZATION_ID%TYPE := p_master_org_id;
1669         l_pdh_batch_flag FLAG := p_is_pdh_batch;
1670         l_proc_log_prefix     CONSTANT VARCHAR2( 30 ) := 'merge_items - ';
1671     BEGIN
1672         Debug_Conc_Log( l_proc_log_prefix || 'Entering' );
1673         Debug_Conc_Log( l_proc_log_prefix || 'Batch ID: ' || p_batch_id );
1674         IF  l_pdh_batch_flag IS NULL OR l_org_id IS NULL OR l_ss_id IS NULL THEN
1675             merge_params_from_batch_header( p_batch_id      => p_batch_id
1676                                           , x_is_pdh_batch  => l_pdh_batch_flag
1677                                           , x_master_org_id => l_org_id
1678                                           , x_ss_id         => l_ss_id
1679                                           );
1680         END IF;
1681         Debug_Conc_Log( l_proc_log_prefix || 'Master Org ID: ' || l_org_id );
1682         Debug_Conc_Log( l_proc_log_prefix || 'SS ID: '         || l_ss_id );
1683         Debug_Conc_Log( l_proc_log_prefix || 'Is PDH Batch?: ' || l_pdh_batch_flag );
1684 
1685         l_is_pdh_batch  := ( l_pdh_batch_flag = FND_API.G_TRUE );
1686         IF  l_is_pdh_batch THEN
1687             OPEN c_target_rows FOR
1688                 SELECT  *
1689                 FROM
1690                     ( SELECT
1691                         ROWID rid,
1692                         COUNT( * ) OVER ( PARTITION BY  ITEM_NUMBER
1693                                                     ,   ORGANIZATION_ID
1694                                         )
1695                         cnt
1696                         , RANK() OVER   ( ORDER BY      ITEM_NUMBER
1697                                                     ,   ORGANIZATION_ID
1698                                         )
1699                         rnk
1700                         , null EXCLUDED_FLAG
1701                         , msii.*
1702                     FROM MTL_SYSTEM_ITEMS_INTERFACE msii
1703                     WHERE   PROCESS_FLAG        = 1
1704                         AND SET_PROCESS_ID      = p_batch_id
1705                         AND (   SOURCE_SYSTEM_ID    IS NULL
1706                             OR  SOURCE_SYSTEM_ID    = G_PDH_SOURCE_SYSTEM_ID
1707                             )
1708                         AND ITEM_NUMBER         IS NOT NULL
1709                         AND ORGANIZATION_ID     IS NOT NULL
1710                         AND EXISTS ( SELECT NULL
1711                                      FROM   MTL_PARAMETERS mp
1712                                      WHERE  mp.ORGANIZATION_ID          = msii.ORGANIZATION_ID
1713                                        AND  mp.MASTER_ORGANIZATION_ID   = l_org_id
1714                                    )
1715                     )
1716                     sub
1717                 WHERE sub.cnt > 1
1718                 ORDER BY rnk, last_update_date DESC NULLS LAST, interface_table_unique_id DESC NULLS LAST;
1719         ELSE
1720             OPEN c_target_rows FOR
1721                 SELECT  *
1722                 FROM
1723                     ( SELECT
1724                         ROWID rid,
1725                         COUNT( * ) OVER ( PARTITION BY  SOURCE_SYSTEM_ID
1726                                                     ,   SOURCE_SYSTEM_REFERENCE
1727                                                     ,   ORGANIZATION_ID
1728                                         )
1729                         cnt
1730                         , RANK() OVER   ( ORDER BY      SOURCE_SYSTEM_ID
1731                                                     ,   SOURCE_SYSTEM_REFERENCE
1732                                                     ,   ORGANIZATION_ID
1733                                         )
1734                         rnk
1735                         , ( SELECT 'Y' FROM DUAL
1736                             WHERE EXISTS (
1737                                           SELECT NULL FROM EGO_IMPORT_EXCLUDED_SS_ITEMS
1738                                           WHERE SOURCE_SYSTEM_REFERENCE = MSII.SOURCE_SYSTEM_REFERENCE
1739                                             AND SOURCE_SYSTEM_ID = MSII.SOURCE_SYSTEM_ID
1740                                          )
1741                           )
1742                         EXCLUDED_FLAG
1743                         , msii.*
1744                     FROM MTL_SYSTEM_ITEMS_INTERFACE msii
1745                     WHERE   PROCESS_FLAG        = 0
1746                         AND SET_PROCESS_ID      = p_batch_id
1747                         AND SOURCE_SYSTEM_ID    = l_ss_id
1748                         AND SOURCE_SYSTEM_REFERENCE IS NOT NULL
1749                         AND ORGANIZATION_ID         IS NOT NULL
1750                         AND EXISTS ( SELECT NULL
1751                                      FROM   MTL_PARAMETERS mp
1752                                      WHERE  mp.ORGANIZATION_ID          = msii.ORGANIZATION_ID
1753                                        AND  mp.MASTER_ORGANIZATION_ID   = l_org_id
1754                                    )
1755                     )
1756                     sub
1757                 WHERE sub.cnt > 1
1758                 ORDER BY rnk, last_update_date DESC NULLS LAST, interface_table_unique_id DESC NULLS LAST;
1759         END IF;
1760 
1761         -- attributes common to every merged row
1762         l_merge_base.SET_PROCESS_ID := p_batch_id;
1763         l_merge_base.PROCESS_FLAG   := CASE WHEN l_is_pdh_batch THEN 1 ELSE 0 END;
1764 
1765         l_old_rowids := UROWID_TABLE( );
1766         LOOP
1767             FETCH c_target_rows INTO old_row;
1768             EXIT WHEN c_target_rows%NOTFOUND;
1769 
1770             l_old_rowids.EXTEND;
1771             l_old_rowids( l_old_rowids.LAST ) := old_row.RID;
1772 
1773             IF( old_row.RNK <> l_cur_rank ) THEN
1774                 IF( l_cur_rank <> 0 AND NOT l_is_pdh_batch) THEN
1775                     IF( l_merged_rows(l_mrow_ix).CONFIRM_STATUS NOT IN ( G_UNCONF_NONE_MATCH, G_UNCONF_SIGL_MATCH, G_UNCONF_MULT_MATCH  )
1776                         AND l_merged_rows(l_mrow_ix).TRANSACTION_TYPE = G_TRANS_TYPE_CREATE )
1777                     THEN
1778                         l_merged_rows(l_mrow_ix).CONFIRM_STATUS := G_CONF_NEW;
1779                     END IF;
1780                     IF( l_excluded_flag IS NOT NULL ) THEN
1781                         l_merged_rows( l_mrow_ix ).CONFIRM_STATUS := G_EXCLUDED;
1782                     END IF;
1783                 END IF; --IF( l_cur_rank <> 0 AND NOT l_is_pdh_batch)
1784 
1785                 l_cur_rank := old_row.RNK;
1786                 Debug_Conc_Log( l_proc_log_prefix || '  Starting new merged row; rank = '|| l_cur_rank );
1787                 l_mrow_ix := l_mrow_ix + 1;
1788                 l_merged_rows( l_mrow_ix ) := l_merge_base;
1789                 IF NOT l_is_pdh_batch THEN
1790                     l_merged_rows( l_mrow_ix ).SOURCE_SYSTEM_ID          := old_row.SOURCE_SYSTEM_ID;
1791                     l_merged_rows( l_mrow_ix ).SOURCE_SYSTEM_REFERENCE   := old_row.SOURCE_SYSTEM_REFERENCE;
1792                     Debug_Conc_Log( l_proc_log_prefix || '   Source System Reference: ' || l_merged_rows( l_mrow_ix ).SOURCE_SYSTEM_REFERENCE );
1793                 END IF;
1794             ELSE
1795                 Debug_Conc_Log( l_proc_log_prefix || '  Merging another record into current merged row; rank = '|| l_cur_rank );
1796             END IF;
1797 
1798             -- Special Cases:
1799             -- Transaction type
1800             l_candidate_trans := UPPER( old_row.TRANSACTION_TYPE );
1801             l_excluded_flag := old_row.EXCLUDED_FLAG;
1802 
1803             IF      l_merged_rows( l_mrow_ix ).TRANSACTION_TYPE IS NULL
1804                 OR  l_merged_rows( l_mrow_ix ).TRANSACTION_TYPE <> l_candidate_trans     -- <> filters out nulls
1805             THEN
1806                 -- CREATE > SYNC > UPDATE : order of case expression matters
1807                 l_merged_rows( l_mrow_ix ).TRANSACTION_TYPE :=
1808                     CASE
1809                         WHEN l_merged_rows( l_mrow_ix ).TRANSACTION_TYPE = G_TRANS_TYPE_CREATE
1810                           OR l_candidate_trans = G_TRANS_TYPE_CREATE                            THEN G_TRANS_TYPE_CREATE
1811                         WHEN l_merged_rows( l_mrow_ix ).TRANSACTION_TYPE = G_TRANS_TYPE_SYNC
1812                           OR l_candidate_trans = G_TRANS_TYPE_SYNC                              THEN G_TRANS_TYPE_SYNC
1813                         WHEN l_merged_rows( l_mrow_ix ).TRANSACTION_TYPE = G_TRANS_TYPE_UPDATE
1814                           OR l_candidate_trans = G_TRANS_TYPE_UPDATE                            THEN G_TRANS_TYPE_UPDATE
1815                         ELSE NULL -- INVALID transaction types encountered so far ...
1816                     END;
1817             END IF;
1818             Debug_Conc_Log('The Old - item columns are - ' || old_row.INVENTORY_ITEM_ID || ' -- ' || old_row.CONFIRM_STATUS );
1819 
1820             -- The following columns need to be treated as atomic groups
1821             -- 1. Item Identifier
1822             IF      l_merged_rows( l_mrow_ix ).INVENTORY_ITEM_ID  IS NULL
1823                 AND l_merged_rows( l_mrow_ix ).ITEM_NUMBER        IS NULL
1824                 AND l_merged_rows( l_mrow_ix ).SEGMENT1           IS NULL
1825                 AND l_merged_rows( l_mrow_ix ).SEGMENT2           IS NULL
1826                 AND l_merged_rows( l_mrow_ix ).SEGMENT3           IS NULL
1827                 AND l_merged_rows( l_mrow_ix ).SEGMENT4           IS NULL
1828                 AND l_merged_rows( l_mrow_ix ).SEGMENT5           IS NULL
1829                 AND l_merged_rows( l_mrow_ix ).SEGMENT6           IS NULL
1830                 AND l_merged_rows( l_mrow_ix ).SEGMENT7           IS NULL
1831                 AND l_merged_rows( l_mrow_ix ).SEGMENT8           IS NULL
1832                 AND l_merged_rows( l_mrow_ix ).SEGMENT9           IS NULL
1833                 AND l_merged_rows( l_mrow_ix ).SEGMENT10          IS NULL
1834                 AND l_merged_rows( l_mrow_ix ).SEGMENT11          IS NULL
1835                 AND l_merged_rows( l_mrow_ix ).SEGMENT12          IS NULL
1836                 AND l_merged_rows( l_mrow_ix ).SEGMENT13          IS NULL
1837                 AND l_merged_rows( l_mrow_ix ).SEGMENT14          IS NULL
1838                 AND l_merged_rows( l_mrow_ix ).SEGMENT15          IS NULL
1839                 AND l_merged_rows( l_mrow_ix ).SEGMENT16          IS NULL
1840                 AND l_merged_rows( l_mrow_ix ).SEGMENT17          IS NULL
1841                 AND l_merged_rows( l_mrow_ix ).SEGMENT18          IS NULL
1842                 AND l_merged_rows( l_mrow_ix ).SEGMENT19          IS NULL
1843                 AND l_merged_rows( l_mrow_ix ).SEGMENT20          IS NULL
1844             THEN
1845                 l_merged_rows( l_mrow_ix ).INVENTORY_ITEM_ID  := old_row.INVENTORY_ITEM_ID;
1846                 l_merged_rows( l_mrow_ix ).ITEM_NUMBER        := old_row.ITEM_NUMBER;
1847                 l_merged_rows( l_mrow_ix ).SEGMENT1           := old_row.SEGMENT1;
1848                 l_merged_rows( l_mrow_ix ).SEGMENT2           := old_row.SEGMENT2;
1849                 l_merged_rows( l_mrow_ix ).SEGMENT3           := old_row.SEGMENT3;
1850                 l_merged_rows( l_mrow_ix ).SEGMENT4           := old_row.SEGMENT4;
1851                 l_merged_rows( l_mrow_ix ).SEGMENT5           := old_row.SEGMENT5;
1852                 l_merged_rows( l_mrow_ix ).SEGMENT6           := old_row.SEGMENT6;
1853                 l_merged_rows( l_mrow_ix ).SEGMENT7           := old_row.SEGMENT7;
1854                 l_merged_rows( l_mrow_ix ).SEGMENT8           := old_row.SEGMENT8;
1855                 l_merged_rows( l_mrow_ix ).SEGMENT9           := old_row.SEGMENT9;
1856                 l_merged_rows( l_mrow_ix ).SEGMENT10          := old_row.SEGMENT10;
1857                 l_merged_rows( l_mrow_ix ).SEGMENT11          := old_row.SEGMENT11;
1858                 l_merged_rows( l_mrow_ix ).SEGMENT12          := old_row.SEGMENT12;
1859                 l_merged_rows( l_mrow_ix ).SEGMENT13          := old_row.SEGMENT13;
1860                 l_merged_rows( l_mrow_ix ).SEGMENT14          := old_row.SEGMENT14;
1861                 l_merged_rows( l_mrow_ix ).SEGMENT15          := old_row.SEGMENT15;
1862                 l_merged_rows( l_mrow_ix ).SEGMENT16          := old_row.SEGMENT16;
1863                 l_merged_rows( l_mrow_ix ).SEGMENT17          := old_row.SEGMENT17;
1864                 l_merged_rows( l_mrow_ix ).SEGMENT18          := old_row.SEGMENT18;
1865                 l_merged_rows( l_mrow_ix ).SEGMENT19          := old_row.SEGMENT19;
1866                 l_merged_rows( l_mrow_ix ).SEGMENT20          := old_row.SEGMENT20;
1867                 -- Copying Confirm Status
1868                 -- If confirm_Status is fake make it real else copy the old confirm_status.
1869                 IF( old_row.CONFIRM_STATUS = G_CONF_XREF_FAKE ) THEN
1870                    l_merged_rows( l_mrow_ix ).CONFIRM_STATUS := G_CONF_XREF;
1871                 ELSIF ( old_row.CONFIRM_STATUS = G_CONF_MATCH_FAKE ) THEN
1872                    l_merged_rows( l_mrow_ix ).CONFIRM_STATUS := G_CONF_MATCH;
1873                 ELSIF ( old_row.CONFIRM_STATUS = G_FAKE_MATCH_READY ) THEN
1874                    l_merged_rows( l_mrow_ix ).CONFIRM_STATUS := G_CONF_MATCH_READY;
1875                 ELSIF ( old_row.CONFIRM_STATUS = G_UNCONF_SINGLE_MATCH_FAKE ) THEN
1876                    l_merged_rows( l_mrow_ix ).CONFIRM_STATUS := G_UNCONF_SIGL_MATCH;
1877                 ELSIF ( old_row.CONFIRM_STATUS = G_UNCONF_MULTI_MATCH_FAKE ) THEN
1878                    l_merged_rows( l_mrow_ix ).CONFIRM_STATUS := G_UNCONF_MULT_MATCH;
1879                 ELSIF ( old_row.CONFIRM_STATUS = G_FAKE_EXCLUDED ) THEN
1880                    l_merged_rows( l_mrow_ix ).CONFIRM_STATUS := G_EXCLUDED;
1881                 ELSIF ( old_row.CONFIRM_STATUS = G_FAKE_CONF_STATUS_FLAG ) THEN
1882                    l_merged_rows( l_mrow_ix ).CONFIRM_STATUS := NULL;
1883                 ELSE
1884                    l_merged_rows( l_mrow_ix ).CONFIRM_STATUS := old_row.CONFIRM_STATUS;
1885                 END IF;
1886             END IF;
1887 
1888             Debug_Conc_Log('The merged - item columns are - ' || l_merged_rows( l_mrow_ix ).INVENTORY_ITEM_ID || ' -- ' || l_merged_rows( l_mrow_ix ).CONFIRM_STATUS );
1889 
1890             -- 2. Template Identifier
1891             IF      l_merged_rows( l_mrow_ix ).TEMPLATE_ID        IS NULL
1892                 AND l_merged_rows( l_mrow_ix ).TEMPLATE_NAME      IS NULL
1893             THEN
1894                 l_merged_rows( l_mrow_ix ).TEMPLATE_ID    := old_row.TEMPLATE_ID ;
1895                 l_merged_rows( l_mrow_ix ).TEMPLATE_NAME  := old_row.TEMPLATE_NAME ;
1896             END IF;
1897 
1898             -- 3. Item Catalog Category
1899             IF      l_merged_rows( l_mrow_ix ).ITEM_CATALOG_GROUP_ID      IS NULL
1900                 AND l_merged_rows( l_mrow_ix ).ITEM_CATALOG_GROUP_NAME    IS NULL
1901             THEN
1902                 l_merged_rows( l_mrow_ix ).ITEM_CATALOG_GROUP_ID      := old_row.ITEM_CATALOG_GROUP_ID ;
1903                 l_merged_rows( l_mrow_ix ).ITEM_CATALOG_GROUP_NAME    := old_row.ITEM_CATALOG_GROUP_NAME ;
1904             END IF;
1905 
1906             -- 4. Primary UOM
1907             IF      l_merged_rows( l_mrow_ix ).PRIMARY_UOM_CODE           IS NULL
1908                 AND l_merged_rows( l_mrow_ix ).PRIMARY_UNIT_OF_MEASURE    IS NULL
1909             THEN
1910                 l_merged_rows( l_mrow_ix ).PRIMARY_UOM_CODE           := old_row.PRIMARY_UOM_CODE ;
1911                 l_merged_rows( l_mrow_ix ).PRIMARY_UNIT_OF_MEASURE    := old_row.PRIMARY_UNIT_OF_MEASURE ;
1912             END IF;
1913 
1914             -- 5. Organization
1915             IF      l_merged_rows( l_mrow_ix ).ORGANIZATION_ID    IS NULL
1916                 AND l_merged_rows( l_mrow_ix ).ORGANIZATION_CODE  IS NULL
1917             THEN
1918                 l_merged_rows( l_mrow_ix ).ORGANIZATION_ID        := old_row.ORGANIZATION_ID ;
1919                 l_merged_rows( l_mrow_ix ).ORGANIZATION_CODE      := old_row.ORGANIZATION_CODE ;
1920             END IF;
1921 
1922             -- 6. Copy Organization
1923             IF      l_merged_rows( l_mrow_ix ).COPY_ORGANIZATION_ID    IS NULL
1924                 AND l_merged_rows( l_mrow_ix ).COPY_ORGANIZATION_CODE  IS NULL
1925             THEN
1926                 l_merged_rows( l_mrow_ix ).COPY_ORGANIZATION_ID        := old_row.COPY_ORGANIZATION_ID ;
1927                 l_merged_rows( l_mrow_ix ).COPY_ORGANIZATION_CODE      := old_row.COPY_ORGANIZATION_CODE ;
1928             END IF;
1929 
1930             -- 7. Merging StyleItemNumber and SytleItemFlag
1931             IF      l_merged_rows( l_mrow_ix ).STYLE_ITEM_NUMBER IS NULL
1932                 AND l_merged_rows( l_mrow_ix ).STYLE_ITEM_FLAG   IS NULL
1933             THEN
1934                 l_merged_rows( l_mrow_ix ).STYLE_ITEM_NUMBER := old_row.STYLE_ITEM_NUMBER;
1935                 l_merged_rows( l_mrow_ix ).STYLE_ITEM_FLAG   := old_row.STYLE_ITEM_FLAG;
1936             END IF;
1937 
1938             /* ELETUCHY: commented out due to the regressions this code would introduce
1939             --Bug.5336962 Begin (Nisar) -> Copy Confirm Status
1940             -- If old row that is to be merged is fake, we don't copy the ConfirmStatus or we make confirm status null
1941             -- If old row already have non fake ConfirmStatus we copy it as it is.
1942             IF      l_merged_rows( l_mrow_ix ).CONFIRM_STATUS IS NULL
1943                 AND old_row.CONFIRM_STATUS NOT IN ('CFC', 'CFM', 'FMR', 'UFS', 'UFM', 'FK', 'FEX')
1944             THEN
1945                 l_merged_rows( l_mrow_ix ).CONFIRM_STATUS := old_row.CONFIRM_STATUS;
1946             END IF;
1947             --Bug.5336962 End
1948             */
1949 
1950             -- Non-special-cased
1951             -- Starting generated code
1952             /* generate using the following script:
1953                 SET LINESIZE 200
1954                 SELECT  'if l_merged_rows( l_mrow_ix ).' ||column_name || ' is null then l_merged_rows( l_mrow_ix ).' || column_name || ' := old_row.' || column_name || '; end if; '
1955                 FROM    ALL_TAB_COLUMNS
1956                 WHERE   TABLE_NAME = 'MTL_SYSTEM_ITEMS_INTERFACE'
1957                 AND COLUMN_NAME NOT IN
1958                     ( -- special cases (for merge)
1959                       'INVENTORY_ITEM_ID'
1960                     , 'ITEM_NUMBER'
1961                     , 'SEGMENT1'
1962                     , 'SEGMENT2'
1963                     , 'SEGMENT3'
1964                     , 'SEGMENT4'
1965                     , 'SEGMENT5'
1966                     , 'SEGMENT6'
1967                     , 'SEGMENT7'
1968                     , 'SEGMENT8'
1969                     , 'SEGMENT9'
1970                     , 'SEGMENT10'
1971                     , 'SEGMENT11'
1972                     , 'SEGMENT12'
1973                     , 'SEGMENT13'
1974                     , 'SEGMENT14'
1975                     , 'SEGMENT15'
1976                     , 'SEGMENT16'
1977                     , 'SEGMENT17'
1978                     , 'SEGMENT18'
1979                     , 'SEGMENT19'
1980                     , 'SEGMENT20'
1981                     , 'TRANSACTION_TYPE'
1982                     , 'TEMPLATE_ID'
1983                     , 'TEMPLATE_NAME'
1984                     , 'ITEM_CATALOG_GROUP_ID'
1985                     , 'ITEM_CATALOG_GROUP_NAME'
1986                     , 'PRIMARY_UOM_CODE'
1987                     , 'PRIMARY_UNIT_OF_MEASURE'
1988                     , 'ORGANIZATION_ID'
1989                     , 'ORGANIZATION_CODE'
1990                     , 'COPY_ORGANIZATION_ID'
1991                     , 'COPY_ORGANIZATION_CODE'
1992                       -- special columns
1993                     , 'SET_PROCESS_ID'
1994                     , 'PROCESS_FLAG'
1995                     , 'SOURCE_SYSTEM_ID'
1996                     , 'SOURCE_SYSTEM_REFERENCE'
1997                     , 'INTERFACE_TABLE_UNIQUE_ID' -- handled by INSERT trigger
1998                     , 'CONFIRM_STATUS'            -- should always be left null after a MERGE is performed
1999                       -- who columns
2000                     , 'LAST_UPDATE_DATE'
2001                     , 'CREATION_DATE'
2002                     , 'CREATED_BY'
2003                     , 'LAST_UPDATED_BY'
2004                     , 'LAST_UPDATE_LOGIN'
2005                       -- XXX: exclude concurrent processing columns?
2006                     )
2007                 order by column_name asc;
2008             */
2009             if l_merged_rows( l_mrow_ix ).ACCEPTABLE_EARLY_DAYS is null then l_merged_rows( l_mrow_ix ).ACCEPTABLE_EARLY_DAYS := old_row.ACCEPTABLE_EARLY_DAYS; end if;
2010             if l_merged_rows( l_mrow_ix ).ACCEPTABLE_RATE_DECREASE is null then l_merged_rows( l_mrow_ix ).ACCEPTABLE_RATE_DECREASE := old_row.ACCEPTABLE_RATE_DECREASE; end if;
2011             if l_merged_rows( l_mrow_ix ).ACCEPTABLE_RATE_INCREASE is null then l_merged_rows( l_mrow_ix ).ACCEPTABLE_RATE_INCREASE := old_row.ACCEPTABLE_RATE_INCREASE; end if;
2012             if l_merged_rows( l_mrow_ix ).ACCOUNTING_RULE_ID is null then l_merged_rows( l_mrow_ix ).ACCOUNTING_RULE_ID := old_row.ACCOUNTING_RULE_ID; end if;
2013             if l_merged_rows( l_mrow_ix ).ALLOWED_UNITS_LOOKUP_CODE is null then l_merged_rows( l_mrow_ix ).ALLOWED_UNITS_LOOKUP_CODE := old_row.ALLOWED_UNITS_LOOKUP_CODE; end if;
2014             if l_merged_rows( l_mrow_ix ).ALLOW_EXPRESS_DELIVERY_FLAG is null then l_merged_rows( l_mrow_ix ).ALLOW_EXPRESS_DELIVERY_FLAG := old_row.ALLOW_EXPRESS_DELIVERY_FLAG; end if;
2015             if l_merged_rows( l_mrow_ix ).ALLOW_ITEM_DESC_UPDATE_FLAG is null then l_merged_rows( l_mrow_ix ).ALLOW_ITEM_DESC_UPDATE_FLAG := old_row.ALLOW_ITEM_DESC_UPDATE_FLAG; end if;
2016             if l_merged_rows( l_mrow_ix ).ALLOW_SUBSTITUTE_RECEIPTS_FLAG is null then l_merged_rows( l_mrow_ix ).ALLOW_SUBSTITUTE_RECEIPTS_FLAG := old_row.ALLOW_SUBSTITUTE_RECEIPTS_FLAG; end if;
2017             if l_merged_rows( l_mrow_ix ).ALLOW_UNORDERED_RECEIPTS_FLAG is null then l_merged_rows( l_mrow_ix ).ALLOW_UNORDERED_RECEIPTS_FLAG := old_row.ALLOW_UNORDERED_RECEIPTS_FLAG; end if;
2018             if l_merged_rows( l_mrow_ix ).ASN_AUTOEXPIRE_FLAG is null then l_merged_rows( l_mrow_ix ).ASN_AUTOEXPIRE_FLAG := old_row.ASN_AUTOEXPIRE_FLAG; end if;
2019             if l_merged_rows( l_mrow_ix ).ASSET_CATEGORY_ID is null then l_merged_rows( l_mrow_ix ).ASSET_CATEGORY_ID := old_row.ASSET_CATEGORY_ID; end if;
2020             if l_merged_rows( l_mrow_ix ).ASSET_CREATION_CODE is null then l_merged_rows( l_mrow_ix ).ASSET_CREATION_CODE := old_row.ASSET_CREATION_CODE; end if;
2021             if l_merged_rows( l_mrow_ix ).ATO_FORECAST_CONTROL is null then l_merged_rows( l_mrow_ix ).ATO_FORECAST_CONTROL := old_row.ATO_FORECAST_CONTROL; end if;
2022             if l_merged_rows( l_mrow_ix ).ATP_COMPONENTS_FLAG is null then l_merged_rows( l_mrow_ix ).ATP_COMPONENTS_FLAG := old_row.ATP_COMPONENTS_FLAG; end if;
2023             if l_merged_rows( l_mrow_ix ).ATP_FLAG is null then l_merged_rows( l_mrow_ix ).ATP_FLAG := old_row.ATP_FLAG; end if;
2024             if l_merged_rows( l_mrow_ix ).ATP_RULE_ID is null then l_merged_rows( l_mrow_ix ).ATP_RULE_ID := old_row.ATP_RULE_ID; end if;
2025             if l_merged_rows( l_mrow_ix ).ATTRIBUTE1 is null then l_merged_rows( l_mrow_ix ).ATTRIBUTE1 := old_row.ATTRIBUTE1; end if;
2026             if l_merged_rows( l_mrow_ix ).ATTRIBUTE10 is null then l_merged_rows( l_mrow_ix ).ATTRIBUTE10 := old_row.ATTRIBUTE10; end if;
2027             if l_merged_rows( l_mrow_ix ).ATTRIBUTE11 is null then l_merged_rows( l_mrow_ix ).ATTRIBUTE11 := old_row.ATTRIBUTE11; end if;
2028             if l_merged_rows( l_mrow_ix ).ATTRIBUTE12 is null then l_merged_rows( l_mrow_ix ).ATTRIBUTE12 := old_row.ATTRIBUTE12; end if;
2029             if l_merged_rows( l_mrow_ix ).ATTRIBUTE13 is null then l_merged_rows( l_mrow_ix ).ATTRIBUTE13 := old_row.ATTRIBUTE13; end if;
2030             if l_merged_rows( l_mrow_ix ).ATTRIBUTE14 is null then l_merged_rows( l_mrow_ix ).ATTRIBUTE14 := old_row.ATTRIBUTE14; end if;
2031             if l_merged_rows( l_mrow_ix ).ATTRIBUTE15 is null then l_merged_rows( l_mrow_ix ).ATTRIBUTE15 := old_row.ATTRIBUTE15; end if;
2032             if l_merged_rows( l_mrow_ix ).ATTRIBUTE16 is null then l_merged_rows( l_mrow_ix ).ATTRIBUTE16 := old_row.ATTRIBUTE16; end if;
2033             if l_merged_rows( l_mrow_ix ).ATTRIBUTE17 is null then l_merged_rows( l_mrow_ix ).ATTRIBUTE17 := old_row.ATTRIBUTE17; end if;
2034             if l_merged_rows( l_mrow_ix ).ATTRIBUTE18 is null then l_merged_rows( l_mrow_ix ).ATTRIBUTE18 := old_row.ATTRIBUTE18; end if;
2035             if l_merged_rows( l_mrow_ix ).ATTRIBUTE19 is null then l_merged_rows( l_mrow_ix ).ATTRIBUTE19 := old_row.ATTRIBUTE19; end if;
2036             if l_merged_rows( l_mrow_ix ).ATTRIBUTE2 is null then l_merged_rows( l_mrow_ix ).ATTRIBUTE2 := old_row.ATTRIBUTE2; end if;
2037             if l_merged_rows( l_mrow_ix ).ATTRIBUTE20 is null then l_merged_rows( l_mrow_ix ).ATTRIBUTE20 := old_row.ATTRIBUTE20; end if;
2038             if l_merged_rows( l_mrow_ix ).ATTRIBUTE21 is null then l_merged_rows( l_mrow_ix ).ATTRIBUTE21 := old_row.ATTRIBUTE21; end if;
2039             if l_merged_rows( l_mrow_ix ).ATTRIBUTE22 is null then l_merged_rows( l_mrow_ix ).ATTRIBUTE22 := old_row.ATTRIBUTE22; end if;
2040             if l_merged_rows( l_mrow_ix ).ATTRIBUTE23 is null then l_merged_rows( l_mrow_ix ).ATTRIBUTE23 := old_row.ATTRIBUTE23; end if;
2041             if l_merged_rows( l_mrow_ix ).ATTRIBUTE24 is null then l_merged_rows( l_mrow_ix ).ATTRIBUTE24 := old_row.ATTRIBUTE24; end if;
2042             if l_merged_rows( l_mrow_ix ).ATTRIBUTE25 is null then l_merged_rows( l_mrow_ix ).ATTRIBUTE25 := old_row.ATTRIBUTE25; end if;
2043             if l_merged_rows( l_mrow_ix ).ATTRIBUTE26 is null then l_merged_rows( l_mrow_ix ).ATTRIBUTE26 := old_row.ATTRIBUTE26; end if;
2044             if l_merged_rows( l_mrow_ix ).ATTRIBUTE27 is null then l_merged_rows( l_mrow_ix ).ATTRIBUTE27 := old_row.ATTRIBUTE27; end if;
2045             if l_merged_rows( l_mrow_ix ).ATTRIBUTE28 is null then l_merged_rows( l_mrow_ix ).ATTRIBUTE28 := old_row.ATTRIBUTE28; end if;
2046             if l_merged_rows( l_mrow_ix ).ATTRIBUTE29 is null then l_merged_rows( l_mrow_ix ).ATTRIBUTE29 := old_row.ATTRIBUTE29; end if;
2047             if l_merged_rows( l_mrow_ix ).ATTRIBUTE3 is null then l_merged_rows( l_mrow_ix ).ATTRIBUTE3 := old_row.ATTRIBUTE3; end if;
2048             if l_merged_rows( l_mrow_ix ).ATTRIBUTE30 is null then l_merged_rows( l_mrow_ix ).ATTRIBUTE30 := old_row.ATTRIBUTE30; end if;
2049             if l_merged_rows( l_mrow_ix ).ATTRIBUTE4 is null then l_merged_rows( l_mrow_ix ).ATTRIBUTE4 := old_row.ATTRIBUTE4; end if;
2050             if l_merged_rows( l_mrow_ix ).ATTRIBUTE5 is null then l_merged_rows( l_mrow_ix ).ATTRIBUTE5 := old_row.ATTRIBUTE5; end if;
2051             if l_merged_rows( l_mrow_ix ).ATTRIBUTE6 is null then l_merged_rows( l_mrow_ix ).ATTRIBUTE6 := old_row.ATTRIBUTE6; end if;
2052             if l_merged_rows( l_mrow_ix ).ATTRIBUTE7 is null then l_merged_rows( l_mrow_ix ).ATTRIBUTE7 := old_row.ATTRIBUTE7; end if;
2053             if l_merged_rows( l_mrow_ix ).ATTRIBUTE8 is null then l_merged_rows( l_mrow_ix ).ATTRIBUTE8 := old_row.ATTRIBUTE8; end if;
2054             if l_merged_rows( l_mrow_ix ).ATTRIBUTE9 is null then l_merged_rows( l_mrow_ix ).ATTRIBUTE9 := old_row.ATTRIBUTE9; end if;
2055             if l_merged_rows( l_mrow_ix ).ATTRIBUTE_CATEGORY is null then l_merged_rows( l_mrow_ix ).ATTRIBUTE_CATEGORY := old_row.ATTRIBUTE_CATEGORY; end if;
2056             if l_merged_rows( l_mrow_ix ).AUTO_CREATED_CONFIG_FLAG is null then l_merged_rows( l_mrow_ix ).AUTO_CREATED_CONFIG_FLAG := old_row.AUTO_CREATED_CONFIG_FLAG; end if;
2057             if l_merged_rows( l_mrow_ix ).AUTO_LOT_ALPHA_PREFIX is null then l_merged_rows( l_mrow_ix ).AUTO_LOT_ALPHA_PREFIX := old_row.AUTO_LOT_ALPHA_PREFIX; end if;
2058             if l_merged_rows( l_mrow_ix ).AUTO_REDUCE_MPS is null then l_merged_rows( l_mrow_ix ).AUTO_REDUCE_MPS := old_row.AUTO_REDUCE_MPS; end if;
2059             if l_merged_rows( l_mrow_ix ).AUTO_SERIAL_ALPHA_PREFIX is null then l_merged_rows( l_mrow_ix ).AUTO_SERIAL_ALPHA_PREFIX := old_row.AUTO_SERIAL_ALPHA_PREFIX; end if;
2060             if l_merged_rows( l_mrow_ix ).BACK_ORDERABLE_FLAG is null then l_merged_rows( l_mrow_ix ).BACK_ORDERABLE_FLAG := old_row.BACK_ORDERABLE_FLAG; end if;
2061             if l_merged_rows( l_mrow_ix ).BASE_ITEM_ID is null then l_merged_rows( l_mrow_ix ).BASE_ITEM_ID := old_row.BASE_ITEM_ID; end if;
2062             if l_merged_rows( l_mrow_ix ).BASE_WARRANTY_SERVICE_ID is null then l_merged_rows( l_mrow_ix ).BASE_WARRANTY_SERVICE_ID := old_row.BASE_WARRANTY_SERVICE_ID; end if;
2063             if l_merged_rows( l_mrow_ix ).BOM_ENABLED_FLAG is null then l_merged_rows( l_mrow_ix ).BOM_ENABLED_FLAG := old_row.BOM_ENABLED_FLAG; end if;
2064             if l_merged_rows( l_mrow_ix ).BOM_ITEM_TYPE is null then l_merged_rows( l_mrow_ix ).BOM_ITEM_TYPE := old_row.BOM_ITEM_TYPE; end if;
2065             if l_merged_rows( l_mrow_ix ).BUILD_IN_WIP_FLAG is null then l_merged_rows( l_mrow_ix ).BUILD_IN_WIP_FLAG := old_row.BUILD_IN_WIP_FLAG; end if;
2066             if l_merged_rows( l_mrow_ix ).BULK_PICKED_FLAG is null then l_merged_rows( l_mrow_ix ).BULK_PICKED_FLAG := old_row.BULK_PICKED_FLAG; end if;
2067             if l_merged_rows( l_mrow_ix ).BUYER_ID is null then l_merged_rows( l_mrow_ix ).BUYER_ID := old_row.BUYER_ID; end if;
2068             if l_merged_rows( l_mrow_ix ).CARRYING_COST is null then l_merged_rows( l_mrow_ix ).CARRYING_COST := old_row.CARRYING_COST; end if;
2069             if l_merged_rows( l_mrow_ix ).CAS_NUMBER is null then l_merged_rows( l_mrow_ix ).CAS_NUMBER := old_row.CAS_NUMBER; end if;
2070             if l_merged_rows( l_mrow_ix ).CATALOG_STATUS_FLAG is null then l_merged_rows( l_mrow_ix ).CATALOG_STATUS_FLAG := old_row.CATALOG_STATUS_FLAG; end if;
2071             if l_merged_rows( l_mrow_ix ).CHANGE_ID is null then l_merged_rows( l_mrow_ix ).CHANGE_ID := old_row.CHANGE_ID; end if;
2072             if l_merged_rows( l_mrow_ix ).CHANGE_LINE_ID is null then l_merged_rows( l_mrow_ix ).CHANGE_LINE_ID := old_row.CHANGE_LINE_ID; end if;
2073             if l_merged_rows( l_mrow_ix ).CHARGE_PERIODICITY_CODE is null then l_merged_rows( l_mrow_ix ).CHARGE_PERIODICITY_CODE := old_row.CHARGE_PERIODICITY_CODE; end if;
2074             if l_merged_rows( l_mrow_ix ).CHECK_SHORTAGES_FLAG is null then l_merged_rows( l_mrow_ix ).CHECK_SHORTAGES_FLAG := old_row.CHECK_SHORTAGES_FLAG; end if;
2075             if l_merged_rows( l_mrow_ix ).CHILD_LOT_FLAG is null then l_merged_rows( l_mrow_ix ).CHILD_LOT_FLAG := old_row.CHILD_LOT_FLAG; end if;
2076             if l_merged_rows( l_mrow_ix ).CHILD_LOT_PREFIX is null then l_merged_rows( l_mrow_ix ).CHILD_LOT_PREFIX := old_row.CHILD_LOT_PREFIX; end if;
2077             if l_merged_rows( l_mrow_ix ).CHILD_LOT_STARTING_NUMBER is null then l_merged_rows( l_mrow_ix ).CHILD_LOT_STARTING_NUMBER := old_row.CHILD_LOT_STARTING_NUMBER; end if;
2078             if l_merged_rows( l_mrow_ix ).CHILD_LOT_VALIDATION_FLAG is null then l_merged_rows( l_mrow_ix ).CHILD_LOT_VALIDATION_FLAG := old_row.CHILD_LOT_VALIDATION_FLAG; end if;
2079             if l_merged_rows( l_mrow_ix ).COLLATERAL_FLAG is null then l_merged_rows( l_mrow_ix ).COLLATERAL_FLAG := old_row.COLLATERAL_FLAG; end if;
2080             if l_merged_rows( l_mrow_ix ).COMMS_ACTIVATION_REQD_FLAG is null then l_merged_rows( l_mrow_ix ).COMMS_ACTIVATION_REQD_FLAG := old_row.COMMS_ACTIVATION_REQD_FLAG; end if;
2081             if l_merged_rows( l_mrow_ix ).COMMS_NL_TRACKABLE_FLAG is null then l_merged_rows( l_mrow_ix ).COMMS_NL_TRACKABLE_FLAG := old_row.COMMS_NL_TRACKABLE_FLAG; end if;
2082             if l_merged_rows( l_mrow_ix ).CONFIG_MATCH is null then l_merged_rows( l_mrow_ix ).CONFIG_MATCH := old_row.CONFIG_MATCH; end if;
2083             if l_merged_rows( l_mrow_ix ).CONFIG_MODEL_TYPE is null then l_merged_rows( l_mrow_ix ).CONFIG_MODEL_TYPE := old_row.CONFIG_MODEL_TYPE; end if;
2084             if l_merged_rows( l_mrow_ix ).CONFIG_ORGS is null then l_merged_rows( l_mrow_ix ).CONFIG_ORGS := old_row.CONFIG_ORGS; end if;
2085             if l_merged_rows( l_mrow_ix ).CONSIGNED_FLAG is null then l_merged_rows( l_mrow_ix ).CONSIGNED_FLAG := old_row.CONSIGNED_FLAG; end if;
2086             if l_merged_rows( l_mrow_ix ).CONTAINER_ITEM_FLAG is null then l_merged_rows( l_mrow_ix ).CONTAINER_ITEM_FLAG := old_row.CONTAINER_ITEM_FLAG; end if;
2087             if l_merged_rows( l_mrow_ix ).CONTAINER_TYPE_CODE is null then l_merged_rows( l_mrow_ix ).CONTAINER_TYPE_CODE := old_row.CONTAINER_TYPE_CODE; end if;
2088             if l_merged_rows( l_mrow_ix ).CONTINOUS_TRANSFER is null then l_merged_rows( l_mrow_ix ).CONTINOUS_TRANSFER := old_row.CONTINOUS_TRANSFER; end if;
2089             if l_merged_rows( l_mrow_ix ).CONTRACT_ITEM_TYPE_CODE is null then l_merged_rows( l_mrow_ix ).CONTRACT_ITEM_TYPE_CODE := old_row.CONTRACT_ITEM_TYPE_CODE; end if;
2090             if l_merged_rows( l_mrow_ix ).CONVERGENCE is null then l_merged_rows( l_mrow_ix ).CONVERGENCE := old_row.CONVERGENCE; end if;
2091             if l_merged_rows( l_mrow_ix ).COPY_ITEM_ID is null then l_merged_rows( l_mrow_ix ).COPY_ITEM_ID := old_row.COPY_ITEM_ID; end if;
2092             if l_merged_rows( l_mrow_ix ).COPY_ITEM_NUMBER is null then l_merged_rows( l_mrow_ix ).COPY_ITEM_NUMBER := old_row.COPY_ITEM_NUMBER; end if;
2093             if l_merged_rows( l_mrow_ix ).COPY_LOT_ATTRIBUTE_FLAG is null then l_merged_rows( l_mrow_ix ).COPY_LOT_ATTRIBUTE_FLAG := old_row.COPY_LOT_ATTRIBUTE_FLAG; end if;
2094             if l_merged_rows( l_mrow_ix ).COSTING_ENABLED_FLAG is null then l_merged_rows( l_mrow_ix ).COSTING_ENABLED_FLAG := old_row.COSTING_ENABLED_FLAG; end if;
2095             if l_merged_rows( l_mrow_ix ).COST_OF_SALES_ACCOUNT is null then l_merged_rows( l_mrow_ix ).COST_OF_SALES_ACCOUNT := old_row.COST_OF_SALES_ACCOUNT; end if;
2096             if l_merged_rows( l_mrow_ix ).COUPON_EXEMPT_FLAG is null then l_merged_rows( l_mrow_ix ).COUPON_EXEMPT_FLAG := old_row.COUPON_EXEMPT_FLAG; end if;
2097             if l_merged_rows( l_mrow_ix ).COVERAGE_SCHEDULE_ID is null then l_merged_rows( l_mrow_ix ).COVERAGE_SCHEDULE_ID := old_row.COVERAGE_SCHEDULE_ID; end if;
2098             if l_merged_rows( l_mrow_ix ).CREATE_SUPPLY_FLAG is null then l_merged_rows( l_mrow_ix ).CREATE_SUPPLY_FLAG := old_row.CREATE_SUPPLY_FLAG; end if;
2099             if l_merged_rows( l_mrow_ix ).CRITICAL_COMPONENT_FLAG is null then l_merged_rows( l_mrow_ix ).CRITICAL_COMPONENT_FLAG := old_row.CRITICAL_COMPONENT_FLAG; end if;
2100             if l_merged_rows( l_mrow_ix ).CUMULATIVE_TOTAL_LEAD_TIME is null then l_merged_rows( l_mrow_ix ).CUMULATIVE_TOTAL_LEAD_TIME := old_row.CUMULATIVE_TOTAL_LEAD_TIME; end if;
2101             if l_merged_rows( l_mrow_ix ).CUM_MANUFACTURING_LEAD_TIME is null then l_merged_rows( l_mrow_ix ).CUM_MANUFACTURING_LEAD_TIME := old_row.CUM_MANUFACTURING_LEAD_TIME; end if;
2102             if l_merged_rows( l_mrow_ix ).CURRENT_PHASE_ID is null then l_merged_rows( l_mrow_ix ).CURRENT_PHASE_ID := old_row.CURRENT_PHASE_ID; end if;
2103             if l_merged_rows( l_mrow_ix ).CUSTOMER_ORDER_ENABLED_FLAG is null then l_merged_rows( l_mrow_ix ).CUSTOMER_ORDER_ENABLED_FLAG := old_row.CUSTOMER_ORDER_ENABLED_FLAG; end if;
2104             if l_merged_rows( l_mrow_ix ).CUSTOMER_ORDER_FLAG is null then l_merged_rows( l_mrow_ix ).CUSTOMER_ORDER_FLAG := old_row.CUSTOMER_ORDER_FLAG; end if;
2105             if l_merged_rows( l_mrow_ix ).CYCLE_COUNT_ENABLED_FLAG is null then l_merged_rows( l_mrow_ix ).CYCLE_COUNT_ENABLED_FLAG := old_row.CYCLE_COUNT_ENABLED_FLAG; end if;
2106             if l_merged_rows( l_mrow_ix ).DAYS_EARLY_RECEIPT_ALLOWED is null then l_merged_rows( l_mrow_ix ).DAYS_EARLY_RECEIPT_ALLOWED := old_row.DAYS_EARLY_RECEIPT_ALLOWED; end if;
2107             if l_merged_rows( l_mrow_ix ).DAYS_LATE_RECEIPT_ALLOWED is null then l_merged_rows( l_mrow_ix ).DAYS_LATE_RECEIPT_ALLOWED := old_row.DAYS_LATE_RECEIPT_ALLOWED; end if;
2108             if l_merged_rows( l_mrow_ix ).DAYS_MAX_INV_SUPPLY is null then l_merged_rows( l_mrow_ix ).DAYS_MAX_INV_SUPPLY := old_row.DAYS_MAX_INV_SUPPLY; end if;
2109             if l_merged_rows( l_mrow_ix ).DAYS_MAX_INV_WINDOW is null then l_merged_rows( l_mrow_ix ).DAYS_MAX_INV_WINDOW := old_row.DAYS_MAX_INV_WINDOW; end if;
2110             if l_merged_rows( l_mrow_ix ).DAYS_TGT_INV_SUPPLY is null then l_merged_rows( l_mrow_ix ).DAYS_TGT_INV_SUPPLY := old_row.DAYS_TGT_INV_SUPPLY; end if;
2111             if l_merged_rows( l_mrow_ix ).DAYS_TGT_INV_WINDOW is null then l_merged_rows( l_mrow_ix ).DAYS_TGT_INV_WINDOW := old_row.DAYS_TGT_INV_WINDOW; end if;
2112             if l_merged_rows( l_mrow_ix ).DEFAULT_GRADE is null then l_merged_rows( l_mrow_ix ).DEFAULT_GRADE := old_row.DEFAULT_GRADE; end if;
2113             if l_merged_rows( l_mrow_ix ).DEFAULT_INCLUDE_IN_ROLLUP_FLAG is null then l_merged_rows( l_mrow_ix ).DEFAULT_INCLUDE_IN_ROLLUP_FLAG := old_row.DEFAULT_INCLUDE_IN_ROLLUP_FLAG; end if;
2114             if l_merged_rows( l_mrow_ix ).DEFAULT_LOT_STATUS_ID is null then l_merged_rows( l_mrow_ix ).DEFAULT_LOT_STATUS_ID := old_row.DEFAULT_LOT_STATUS_ID; end if;
2115             if l_merged_rows( l_mrow_ix ).DEFAULT_SERIAL_STATUS_ID is null then l_merged_rows( l_mrow_ix ).DEFAULT_SERIAL_STATUS_ID := old_row.DEFAULT_SERIAL_STATUS_ID; end if;
2116             if l_merged_rows( l_mrow_ix ).DEFAULT_SHIPPING_ORG is null then l_merged_rows( l_mrow_ix ).DEFAULT_SHIPPING_ORG := old_row.DEFAULT_SHIPPING_ORG; end if;
2117             if l_merged_rows( l_mrow_ix ).DEFAULT_SO_SOURCE_TYPE is null then l_merged_rows( l_mrow_ix ).DEFAULT_SO_SOURCE_TYPE := old_row.DEFAULT_SO_SOURCE_TYPE; end if;
2118             if l_merged_rows( l_mrow_ix ).DEFECT_TRACKING_ON_FLAG is null then l_merged_rows( l_mrow_ix ).DEFECT_TRACKING_ON_FLAG := old_row.DEFECT_TRACKING_ON_FLAG; end if;
2119             if l_merged_rows( l_mrow_ix ).DEMAND_SOURCE_HEADER_ID is null then l_merged_rows( l_mrow_ix ).DEMAND_SOURCE_HEADER_ID := old_row.DEMAND_SOURCE_HEADER_ID; end if;
2120             if l_merged_rows( l_mrow_ix ).DEMAND_SOURCE_LINE is null then l_merged_rows( l_mrow_ix ).DEMAND_SOURCE_LINE := old_row.DEMAND_SOURCE_LINE; end if;
2121             if l_merged_rows( l_mrow_ix ).DEMAND_SOURCE_TYPE is null then l_merged_rows( l_mrow_ix ).DEMAND_SOURCE_TYPE := old_row.DEMAND_SOURCE_TYPE; end if;
2122             if l_merged_rows( l_mrow_ix ).DEMAND_TIME_FENCE_CODE is null then l_merged_rows( l_mrow_ix ).DEMAND_TIME_FENCE_CODE := old_row.DEMAND_TIME_FENCE_CODE; end if;
2123             if l_merged_rows( l_mrow_ix ).DEMAND_TIME_FENCE_DAYS is null then l_merged_rows( l_mrow_ix ).DEMAND_TIME_FENCE_DAYS := old_row.DEMAND_TIME_FENCE_DAYS; end if;
2124             if l_merged_rows( l_mrow_ix ).DESCRIPTION is null then l_merged_rows( l_mrow_ix ).DESCRIPTION := old_row.DESCRIPTION; end if;
2125             if l_merged_rows( l_mrow_ix ).DIMENSION_UOM_CODE is null then l_merged_rows( l_mrow_ix ).DIMENSION_UOM_CODE := old_row.DIMENSION_UOM_CODE; end if;
2126             if l_merged_rows( l_mrow_ix ).DIVERGENCE is null then l_merged_rows( l_mrow_ix ).DIVERGENCE := old_row.DIVERGENCE; end if;
2127             if l_merged_rows( l_mrow_ix ).DOWNLOADABLE_FLAG is null then l_merged_rows( l_mrow_ix ).DOWNLOADABLE_FLAG := old_row.DOWNLOADABLE_FLAG; end if;
2128             if l_merged_rows( l_mrow_ix ).DRP_PLANNED_FLAG is null then l_merged_rows( l_mrow_ix ).DRP_PLANNED_FLAG := old_row.DRP_PLANNED_FLAG; end if;
2129             if l_merged_rows( l_mrow_ix ).DUAL_UOM_CONTROL is null then l_merged_rows( l_mrow_ix ).DUAL_UOM_CONTROL := old_row.DUAL_UOM_CONTROL; end if;
2130             if l_merged_rows( l_mrow_ix ).DUAL_UOM_DEVIATION_HIGH is null then l_merged_rows( l_mrow_ix ).DUAL_UOM_DEVIATION_HIGH := old_row.DUAL_UOM_DEVIATION_HIGH; end if;
2131             if l_merged_rows( l_mrow_ix ).DUAL_UOM_DEVIATION_LOW is null then l_merged_rows( l_mrow_ix ).DUAL_UOM_DEVIATION_LOW := old_row.DUAL_UOM_DEVIATION_LOW; end if;
2132             if l_merged_rows( l_mrow_ix ).EAM_ACTIVITY_CAUSE_CODE is null then l_merged_rows( l_mrow_ix ).EAM_ACTIVITY_CAUSE_CODE := old_row.EAM_ACTIVITY_CAUSE_CODE; end if;
2133             if l_merged_rows( l_mrow_ix ).EAM_ACTIVITY_SOURCE_CODE is null then l_merged_rows( l_mrow_ix ).EAM_ACTIVITY_SOURCE_CODE := old_row.EAM_ACTIVITY_SOURCE_CODE; end if;
2134             if l_merged_rows( l_mrow_ix ).EAM_ACTIVITY_TYPE_CODE is null then l_merged_rows( l_mrow_ix ).EAM_ACTIVITY_TYPE_CODE := old_row.EAM_ACTIVITY_TYPE_CODE; end if;
2135             if l_merged_rows( l_mrow_ix ).EAM_ACT_NOTIFICATION_FLAG is null then l_merged_rows( l_mrow_ix ).EAM_ACT_NOTIFICATION_FLAG := old_row.EAM_ACT_NOTIFICATION_FLAG; end if;
2136             if l_merged_rows( l_mrow_ix ).EAM_ACT_SHUTDOWN_STATUS is null then l_merged_rows( l_mrow_ix ).EAM_ACT_SHUTDOWN_STATUS := old_row.EAM_ACT_SHUTDOWN_STATUS; end if;
2137             if l_merged_rows( l_mrow_ix ).EAM_ITEM_TYPE is null then l_merged_rows( l_mrow_ix ).EAM_ITEM_TYPE := old_row.EAM_ITEM_TYPE; end if;
2138             if l_merged_rows( l_mrow_ix ).EFFECTIVITY_CONTROL is null then l_merged_rows( l_mrow_ix ).EFFECTIVITY_CONTROL := old_row.EFFECTIVITY_CONTROL; end if;
2139             if l_merged_rows( l_mrow_ix ).ELECTRONIC_FLAG is null then l_merged_rows( l_mrow_ix ).ELECTRONIC_FLAG := old_row.ELECTRONIC_FLAG; end if;
2140             if l_merged_rows( l_mrow_ix ).ENABLED_FLAG is null then l_merged_rows( l_mrow_ix ).ENABLED_FLAG := old_row.ENABLED_FLAG; end if;
2141             if l_merged_rows( l_mrow_ix ).ENCUMBRANCE_ACCOUNT is null then l_merged_rows( l_mrow_ix ).ENCUMBRANCE_ACCOUNT := old_row.ENCUMBRANCE_ACCOUNT; end if;
2142             if l_merged_rows( l_mrow_ix ).END_ASSEMBLY_PEGGING_FLAG is null then l_merged_rows( l_mrow_ix ).END_ASSEMBLY_PEGGING_FLAG := old_row.END_ASSEMBLY_PEGGING_FLAG; end if;
2143             if l_merged_rows( l_mrow_ix ).END_DATE_ACTIVE is null then l_merged_rows( l_mrow_ix ).END_DATE_ACTIVE := old_row.END_DATE_ACTIVE; end if;
2144             if l_merged_rows( l_mrow_ix ).ENFORCE_SHIP_TO_LOCATION_CODE is null then l_merged_rows( l_mrow_ix ).ENFORCE_SHIP_TO_LOCATION_CODE := old_row.ENFORCE_SHIP_TO_LOCATION_CODE; end if;
2145             if l_merged_rows( l_mrow_ix ).ENGINEERING_DATE is null then l_merged_rows( l_mrow_ix ).ENGINEERING_DATE := old_row.ENGINEERING_DATE; end if;
2146             if l_merged_rows( l_mrow_ix ).ENGINEERING_ECN_CODE is null then l_merged_rows( l_mrow_ix ).ENGINEERING_ECN_CODE := old_row.ENGINEERING_ECN_CODE; end if;
2147             if l_merged_rows( l_mrow_ix ).ENGINEERING_ITEM_ID is null then l_merged_rows( l_mrow_ix ).ENGINEERING_ITEM_ID := old_row.ENGINEERING_ITEM_ID; end if;
2148             if l_merged_rows( l_mrow_ix ).ENG_ITEM_FLAG is null then l_merged_rows( l_mrow_ix ).ENG_ITEM_FLAG := old_row.ENG_ITEM_FLAG; end if;
2149             if l_merged_rows( l_mrow_ix ).EQUIPMENT_TYPE is null then l_merged_rows( l_mrow_ix ).EQUIPMENT_TYPE := old_row.EQUIPMENT_TYPE; end if;
2150             if l_merged_rows( l_mrow_ix ).EVENT_FLAG is null then l_merged_rows( l_mrow_ix ).EVENT_FLAG := old_row.EVENT_FLAG; end if;
2151             if l_merged_rows( l_mrow_ix ).EXCLUDE_FROM_BUDGET_FLAG is null then l_merged_rows( l_mrow_ix ).EXCLUDE_FROM_BUDGET_FLAG := old_row.EXCLUDE_FROM_BUDGET_FLAG; end if;
2152             if l_merged_rows( l_mrow_ix ).EXPENSE_ACCOUNT is null then l_merged_rows( l_mrow_ix ).EXPENSE_ACCOUNT := old_row.EXPENSE_ACCOUNT; end if;
2153             if l_merged_rows( l_mrow_ix ).EXPENSE_BILLABLE_FLAG is null then l_merged_rows( l_mrow_ix ).EXPENSE_BILLABLE_FLAG := old_row.EXPENSE_BILLABLE_FLAG; end if;
2154             if l_merged_rows( l_mrow_ix ).EXPIRATION_ACTION_CODE is null then l_merged_rows( l_mrow_ix ).EXPIRATION_ACTION_CODE := old_row.EXPIRATION_ACTION_CODE; end if;
2155             if l_merged_rows( l_mrow_ix ).EXPIRATION_ACTION_INTERVAL is null then l_merged_rows( l_mrow_ix ).EXPIRATION_ACTION_INTERVAL := old_row.EXPIRATION_ACTION_INTERVAL; end if;
2156             if l_merged_rows( l_mrow_ix ).FINANCING_ALLOWED_FLAG is null then l_merged_rows( l_mrow_ix ).FINANCING_ALLOWED_FLAG := old_row.FINANCING_ALLOWED_FLAG; end if;
2157             if l_merged_rows( l_mrow_ix ).FIXED_DAYS_SUPPLY is null then l_merged_rows( l_mrow_ix ).FIXED_DAYS_SUPPLY := old_row.FIXED_DAYS_SUPPLY; end if;
2158             if l_merged_rows( l_mrow_ix ).FIXED_LEAD_TIME is null then l_merged_rows( l_mrow_ix ).FIXED_LEAD_TIME := old_row.FIXED_LEAD_TIME; end if;
2159             if l_merged_rows( l_mrow_ix ).FIXED_LOT_MULTIPLIER is null then l_merged_rows( l_mrow_ix ).FIXED_LOT_MULTIPLIER := old_row.FIXED_LOT_MULTIPLIER; end if;
2160             if l_merged_rows( l_mrow_ix ).FIXED_ORDER_QUANTITY is null then l_merged_rows( l_mrow_ix ).FIXED_ORDER_QUANTITY := old_row.FIXED_ORDER_QUANTITY; end if;
2161             if l_merged_rows( l_mrow_ix ).FORECAST_HORIZON is null then l_merged_rows( l_mrow_ix ).FORECAST_HORIZON := old_row.FORECAST_HORIZON; end if;
2162             if l_merged_rows( l_mrow_ix ).FULL_LEAD_TIME is null then l_merged_rows( l_mrow_ix ).FULL_LEAD_TIME := old_row.FULL_LEAD_TIME; end if;
2163             if l_merged_rows( l_mrow_ix ).GLOBAL_ATTRIBUTE1 is null then l_merged_rows( l_mrow_ix ).GLOBAL_ATTRIBUTE1 := old_row.GLOBAL_ATTRIBUTE1; end if;
2164             if l_merged_rows( l_mrow_ix ).GLOBAL_ATTRIBUTE10 is null then l_merged_rows( l_mrow_ix ).GLOBAL_ATTRIBUTE10 := old_row.GLOBAL_ATTRIBUTE10; end if;
2165             if l_merged_rows( l_mrow_ix ).GLOBAL_ATTRIBUTE2 is null then l_merged_rows( l_mrow_ix ).GLOBAL_ATTRIBUTE2 := old_row.GLOBAL_ATTRIBUTE2; end if;
2166             if l_merged_rows( l_mrow_ix ).GLOBAL_ATTRIBUTE3 is null then l_merged_rows( l_mrow_ix ).GLOBAL_ATTRIBUTE3 := old_row.GLOBAL_ATTRIBUTE3; end if;
2167             if l_merged_rows( l_mrow_ix ).GLOBAL_ATTRIBUTE4 is null then l_merged_rows( l_mrow_ix ).GLOBAL_ATTRIBUTE4 := old_row.GLOBAL_ATTRIBUTE4; end if;
2168             if l_merged_rows( l_mrow_ix ).GLOBAL_ATTRIBUTE5 is null then l_merged_rows( l_mrow_ix ).GLOBAL_ATTRIBUTE5 := old_row.GLOBAL_ATTRIBUTE5; end if;
2169             if l_merged_rows( l_mrow_ix ).GLOBAL_ATTRIBUTE6 is null then l_merged_rows( l_mrow_ix ).GLOBAL_ATTRIBUTE6 := old_row.GLOBAL_ATTRIBUTE6; end if;
2170             if l_merged_rows( l_mrow_ix ).GLOBAL_ATTRIBUTE7 is null then l_merged_rows( l_mrow_ix ).GLOBAL_ATTRIBUTE7 := old_row.GLOBAL_ATTRIBUTE7; end if;
2171             if l_merged_rows( l_mrow_ix ).GLOBAL_ATTRIBUTE8 is null then l_merged_rows( l_mrow_ix ).GLOBAL_ATTRIBUTE8 := old_row.GLOBAL_ATTRIBUTE8; end if;
2172             if l_merged_rows( l_mrow_ix ).GLOBAL_ATTRIBUTE9 is null then l_merged_rows( l_mrow_ix ).GLOBAL_ATTRIBUTE9 := old_row.GLOBAL_ATTRIBUTE9; end if;
2173             if l_merged_rows( l_mrow_ix ).GLOBAL_ATTRIBUTE_CATEGORY is null then l_merged_rows( l_mrow_ix ).GLOBAL_ATTRIBUTE_CATEGORY := old_row.GLOBAL_ATTRIBUTE_CATEGORY; end if;
2174             if l_merged_rows( l_mrow_ix ).GLOBAL_TRADE_ITEM_NUMBER is null then l_merged_rows( l_mrow_ix ).GLOBAL_TRADE_ITEM_NUMBER := old_row.GLOBAL_TRADE_ITEM_NUMBER; end if;
2175             if l_merged_rows( l_mrow_ix ).GRADE_CONTROL_FLAG is null then l_merged_rows( l_mrow_ix ).GRADE_CONTROL_FLAG := old_row.GRADE_CONTROL_FLAG; end if;
2176             if l_merged_rows( l_mrow_ix ).GTIN_DESCRIPTION is null then l_merged_rows( l_mrow_ix ).GTIN_DESCRIPTION := old_row.GTIN_DESCRIPTION; end if;
2177             if l_merged_rows( l_mrow_ix ).HAZARDOUS_MATERIAL_FLAG is null then l_merged_rows( l_mrow_ix ).HAZARDOUS_MATERIAL_FLAG := old_row.HAZARDOUS_MATERIAL_FLAG; end if;
2178             if l_merged_rows( l_mrow_ix ).HAZARD_CLASS_ID is null then l_merged_rows( l_mrow_ix ).HAZARD_CLASS_ID := old_row.HAZARD_CLASS_ID; end if;
2179             if l_merged_rows( l_mrow_ix ).HOLD_DAYS is null then l_merged_rows( l_mrow_ix ).HOLD_DAYS := old_row.HOLD_DAYS; end if;
2180             if l_merged_rows( l_mrow_ix ).IB_ITEM_INSTANCE_CLASS is null then l_merged_rows( l_mrow_ix ).IB_ITEM_INSTANCE_CLASS := old_row.IB_ITEM_INSTANCE_CLASS; end if;
2181             if l_merged_rows( l_mrow_ix ).INDIVISIBLE_FLAG is null then l_merged_rows( l_mrow_ix ).INDIVISIBLE_FLAG := old_row.INDIVISIBLE_FLAG; end if;
2182             if l_merged_rows( l_mrow_ix ).INSPECTION_REQUIRED_FLAG is null then l_merged_rows( l_mrow_ix ).INSPECTION_REQUIRED_FLAG := old_row.INSPECTION_REQUIRED_FLAG; end if;
2183             if l_merged_rows( l_mrow_ix ).INTERNAL_ORDER_ENABLED_FLAG is null then l_merged_rows( l_mrow_ix ).INTERNAL_ORDER_ENABLED_FLAG := old_row.INTERNAL_ORDER_ENABLED_FLAG; end if;
2184             if l_merged_rows( l_mrow_ix ).INTERNAL_ORDER_FLAG is null then l_merged_rows( l_mrow_ix ).INTERNAL_ORDER_FLAG := old_row.INTERNAL_ORDER_FLAG; end if;
2185             if l_merged_rows( l_mrow_ix ).INTERNAL_VOLUME is null then l_merged_rows( l_mrow_ix ).INTERNAL_VOLUME := old_row.INTERNAL_VOLUME; end if;
2186             if l_merged_rows( l_mrow_ix ).INVENTORY_ASSET_FLAG is null then l_merged_rows( l_mrow_ix ).INVENTORY_ASSET_FLAG := old_row.INVENTORY_ASSET_FLAG; end if;
2187             if l_merged_rows( l_mrow_ix ).INVENTORY_CARRY_PENALTY is null then l_merged_rows( l_mrow_ix ).INVENTORY_CARRY_PENALTY := old_row.INVENTORY_CARRY_PENALTY; end if;
2188             if l_merged_rows( l_mrow_ix ).INVENTORY_ITEM_FLAG is null then l_merged_rows( l_mrow_ix ).INVENTORY_ITEM_FLAG := old_row.INVENTORY_ITEM_FLAG; end if;
2189             if l_merged_rows( l_mrow_ix ).INVENTORY_ITEM_STATUS_CODE is null then l_merged_rows( l_mrow_ix ).INVENTORY_ITEM_STATUS_CODE := old_row.INVENTORY_ITEM_STATUS_CODE; end if;
2190             if l_merged_rows( l_mrow_ix ).INVENTORY_PLANNING_CODE is null then l_merged_rows( l_mrow_ix ).INVENTORY_PLANNING_CODE := old_row.INVENTORY_PLANNING_CODE; end if;
2191             if l_merged_rows( l_mrow_ix ).INVOICEABLE_ITEM_FLAG is null then l_merged_rows( l_mrow_ix ).INVOICEABLE_ITEM_FLAG := old_row.INVOICEABLE_ITEM_FLAG; end if;
2192             if l_merged_rows( l_mrow_ix ).INVOICE_CLOSE_TOLERANCE is null then l_merged_rows( l_mrow_ix ).INVOICE_CLOSE_TOLERANCE := old_row.INVOICE_CLOSE_TOLERANCE; end if;
2193             if l_merged_rows( l_mrow_ix ).INVOICE_ENABLED_FLAG is null then l_merged_rows( l_mrow_ix ).INVOICE_ENABLED_FLAG := old_row.INVOICE_ENABLED_FLAG; end if;
2194             if l_merged_rows( l_mrow_ix ).INVOICING_RULE_ID is null then l_merged_rows( l_mrow_ix ).INVOICING_RULE_ID := old_row.INVOICING_RULE_ID; end if;
2195             if l_merged_rows( l_mrow_ix ).ITEM_TYPE is null then l_merged_rows( l_mrow_ix ).ITEM_TYPE := old_row.ITEM_TYPE; end if;
2196             if l_merged_rows( l_mrow_ix ).LEAD_TIME_LOT_SIZE is null then l_merged_rows( l_mrow_ix ).LEAD_TIME_LOT_SIZE := old_row.LEAD_TIME_LOT_SIZE; end if;
2197             if l_merged_rows( l_mrow_ix ).LIFECYCLE_ID is null then l_merged_rows( l_mrow_ix ).LIFECYCLE_ID := old_row.LIFECYCLE_ID; end if;
2198             if l_merged_rows( l_mrow_ix ).LIST_PRICE_PER_UNIT is null then l_merged_rows( l_mrow_ix ).LIST_PRICE_PER_UNIT := old_row.LIST_PRICE_PER_UNIT; end if;
2199             if l_merged_rows( l_mrow_ix ).LOCATION_CONTROL_CODE is null then l_merged_rows( l_mrow_ix ).LOCATION_CONTROL_CODE := old_row.LOCATION_CONTROL_CODE; end if;
2200             if l_merged_rows( l_mrow_ix ).LONG_DESCRIPTION is null then l_merged_rows( l_mrow_ix ).LONG_DESCRIPTION := old_row.LONG_DESCRIPTION; end if;
2201             if l_merged_rows( l_mrow_ix ).LOT_CONTROL_CODE is null then l_merged_rows( l_mrow_ix ).LOT_CONTROL_CODE := old_row.LOT_CONTROL_CODE; end if;
2202             if l_merged_rows( l_mrow_ix ).LOT_DIVISIBLE_FLAG is null then l_merged_rows( l_mrow_ix ).LOT_DIVISIBLE_FLAG := old_row.LOT_DIVISIBLE_FLAG; end if;
2203             if l_merged_rows( l_mrow_ix ).LOT_MERGE_ENABLED is null then l_merged_rows( l_mrow_ix ).LOT_MERGE_ENABLED := old_row.LOT_MERGE_ENABLED; end if;
2204             if l_merged_rows( l_mrow_ix ).LOT_SPLIT_ENABLED is null then l_merged_rows( l_mrow_ix ).LOT_SPLIT_ENABLED := old_row.LOT_SPLIT_ENABLED; end if;
2205             if l_merged_rows( l_mrow_ix ).LOT_STATUS_ENABLED is null then l_merged_rows( l_mrow_ix ).LOT_STATUS_ENABLED := old_row.LOT_STATUS_ENABLED; end if;
2206             if l_merged_rows( l_mrow_ix ).LOT_SUBSTITUTION_ENABLED is null then l_merged_rows( l_mrow_ix ).LOT_SUBSTITUTION_ENABLED := old_row.LOT_SUBSTITUTION_ENABLED; end if;
2207             if l_merged_rows( l_mrow_ix ).LOT_TRANSLATE_ENABLED is null then l_merged_rows( l_mrow_ix ).LOT_TRANSLATE_ENABLED := old_row.LOT_TRANSLATE_ENABLED; end if;
2208             if l_merged_rows( l_mrow_ix ).MARKET_PRICE is null then l_merged_rows( l_mrow_ix ).MARKET_PRICE := old_row.MARKET_PRICE; end if;
2209             if l_merged_rows( l_mrow_ix ).MATERIAL_BILLABLE_FLAG is null then l_merged_rows( l_mrow_ix ).MATERIAL_BILLABLE_FLAG := old_row.MATERIAL_BILLABLE_FLAG; end if;
2210             if l_merged_rows( l_mrow_ix ).MATERIAL_COST is null then l_merged_rows( l_mrow_ix ).MATERIAL_COST := old_row.MATERIAL_COST; end if;
2211             if l_merged_rows( l_mrow_ix ).MATERIAL_OH_RATE is null then l_merged_rows( l_mrow_ix ).MATERIAL_OH_RATE := old_row.MATERIAL_OH_RATE; end if;
2212             if l_merged_rows( l_mrow_ix ).MATERIAL_OH_SUB_ELEM is null then l_merged_rows( l_mrow_ix ).MATERIAL_OH_SUB_ELEM := old_row.MATERIAL_OH_SUB_ELEM; end if;
2213             if l_merged_rows( l_mrow_ix ).MATERIAL_OH_SUB_ELEM_ID is null then l_merged_rows( l_mrow_ix ).MATERIAL_OH_SUB_ELEM_ID := old_row.MATERIAL_OH_SUB_ELEM_ID; end if;
2214             if l_merged_rows( l_mrow_ix ).MATERIAL_SUB_ELEM is null then l_merged_rows( l_mrow_ix ).MATERIAL_SUB_ELEM := old_row.MATERIAL_SUB_ELEM; end if;
2215             if l_merged_rows( l_mrow_ix ).MATERIAL_SUB_ELEM_ID is null then l_merged_rows( l_mrow_ix ).MATERIAL_SUB_ELEM_ID := old_row.MATERIAL_SUB_ELEM_ID; end if;
2216             if l_merged_rows( l_mrow_ix ).MATURITY_DAYS is null then l_merged_rows( l_mrow_ix ).MATURITY_DAYS := old_row.MATURITY_DAYS; end if;
2217             if l_merged_rows( l_mrow_ix ).MAXIMUM_LOAD_WEIGHT is null then l_merged_rows( l_mrow_ix ).MAXIMUM_LOAD_WEIGHT := old_row.MAXIMUM_LOAD_WEIGHT; end if;
2218             if l_merged_rows( l_mrow_ix ).MAXIMUM_ORDER_QUANTITY is null then l_merged_rows( l_mrow_ix ).MAXIMUM_ORDER_QUANTITY := old_row.MAXIMUM_ORDER_QUANTITY; end if;
2219             if l_merged_rows( l_mrow_ix ).MAX_MINMAX_QUANTITY is null then l_merged_rows( l_mrow_ix ).MAX_MINMAX_QUANTITY := old_row.MAX_MINMAX_QUANTITY; end if;
2220             if l_merged_rows( l_mrow_ix ).MAX_WARRANTY_AMOUNT is null then l_merged_rows( l_mrow_ix ).MAX_WARRANTY_AMOUNT := old_row.MAX_WARRANTY_AMOUNT; end if;
2221             if l_merged_rows( l_mrow_ix ).MINIMUM_FILL_PERCENT is null then l_merged_rows( l_mrow_ix ).MINIMUM_FILL_PERCENT := old_row.MINIMUM_FILL_PERCENT; end if;
2222             if l_merged_rows( l_mrow_ix ).MINIMUM_LICENSE_QUANTITY is null then l_merged_rows( l_mrow_ix ).MINIMUM_LICENSE_QUANTITY := old_row.MINIMUM_LICENSE_QUANTITY; end if;
2223             if l_merged_rows( l_mrow_ix ).MINIMUM_ORDER_QUANTITY is null then l_merged_rows( l_mrow_ix ).MINIMUM_ORDER_QUANTITY := old_row.MINIMUM_ORDER_QUANTITY; end if;
2224             if l_merged_rows( l_mrow_ix ).MIN_MINMAX_QUANTITY is null then l_merged_rows( l_mrow_ix ).MIN_MINMAX_QUANTITY := old_row.MIN_MINMAX_QUANTITY; end if;
2225             if l_merged_rows( l_mrow_ix ).MODEL_CONFIG_CLAUSE_NAME is null then l_merged_rows( l_mrow_ix ).MODEL_CONFIG_CLAUSE_NAME := old_row.MODEL_CONFIG_CLAUSE_NAME; end if;
2226             if l_merged_rows( l_mrow_ix ).MRP_CALCULATE_ATP_FLAG is null then l_merged_rows( l_mrow_ix ).MRP_CALCULATE_ATP_FLAG := old_row.MRP_CALCULATE_ATP_FLAG; end if;
2227             if l_merged_rows( l_mrow_ix ).MRP_PLANNING_CODE is null then l_merged_rows( l_mrow_ix ).MRP_PLANNING_CODE := old_row.MRP_PLANNING_CODE; end if;
2228             if l_merged_rows( l_mrow_ix ).MRP_SAFETY_STOCK_CODE is null then l_merged_rows( l_mrow_ix ).MRP_SAFETY_STOCK_CODE := old_row.MRP_SAFETY_STOCK_CODE; end if;
2229             if l_merged_rows( l_mrow_ix ).MRP_SAFETY_STOCK_PERCENT is null then l_merged_rows( l_mrow_ix ).MRP_SAFETY_STOCK_PERCENT := old_row.MRP_SAFETY_STOCK_PERCENT; end if;
2230             if l_merged_rows( l_mrow_ix ).MTL_TRANSACTIONS_ENABLED_FLAG is null then l_merged_rows( l_mrow_ix ).MTL_TRANSACTIONS_ENABLED_FLAG := old_row.MTL_TRANSACTIONS_ENABLED_FLAG; end if;
2231             if l_merged_rows( l_mrow_ix ).MUST_USE_APPROVED_VENDOR_FLAG is null then l_merged_rows( l_mrow_ix ).MUST_USE_APPROVED_VENDOR_FLAG := old_row.MUST_USE_APPROVED_VENDOR_FLAG; end if;
2232             if l_merged_rows( l_mrow_ix ).NEGATIVE_MEASUREMENT_ERROR is null then l_merged_rows( l_mrow_ix ).NEGATIVE_MEASUREMENT_ERROR := old_row.NEGATIVE_MEASUREMENT_ERROR; end if;
2233             if l_merged_rows( l_mrow_ix ).NEW_REVISION_CODE is null then l_merged_rows( l_mrow_ix ).NEW_REVISION_CODE := old_row.NEW_REVISION_CODE; end if;
2234             if l_merged_rows( l_mrow_ix ).ONT_PRICING_QTY_SOURCE is null then l_merged_rows( l_mrow_ix ).ONT_PRICING_QTY_SOURCE := old_row.ONT_PRICING_QTY_SOURCE; end if;
2235             if l_merged_rows( l_mrow_ix ).OPERATION_SLACK_PENALTY is null then l_merged_rows( l_mrow_ix ).OPERATION_SLACK_PENALTY := old_row.OPERATION_SLACK_PENALTY; end if;
2236             if l_merged_rows( l_mrow_ix ).ORDERABLE_ON_WEB_FLAG is null then l_merged_rows( l_mrow_ix ).ORDERABLE_ON_WEB_FLAG := old_row.ORDERABLE_ON_WEB_FLAG; end if;
2237             if l_merged_rows( l_mrow_ix ).ORDER_COST is null then l_merged_rows( l_mrow_ix ).ORDER_COST := old_row.ORDER_COST; end if;
2238             if l_merged_rows( l_mrow_ix ).OUTSIDE_OPERATION_FLAG is null then l_merged_rows( l_mrow_ix ).OUTSIDE_OPERATION_FLAG := old_row.OUTSIDE_OPERATION_FLAG; end if;
2239             if l_merged_rows( l_mrow_ix ).OUTSIDE_OPERATION_UOM_TYPE is null then l_merged_rows( l_mrow_ix ).OUTSIDE_OPERATION_UOM_TYPE := old_row.OUTSIDE_OPERATION_UOM_TYPE; end if;
2240             if l_merged_rows( l_mrow_ix ).OUTSOURCED_ASSEMBLY is null then l_merged_rows( l_mrow_ix ).OUTSOURCED_ASSEMBLY := old_row.OUTSOURCED_ASSEMBLY; end if;
2241             if l_merged_rows( l_mrow_ix ).OVERCOMPLETION_TOLERANCE_TYPE is null then l_merged_rows( l_mrow_ix ).OVERCOMPLETION_TOLERANCE_TYPE := old_row.OVERCOMPLETION_TOLERANCE_TYPE; end if;
2242             if l_merged_rows( l_mrow_ix ).OVERCOMPLETION_TOLERANCE_VALUE is null then l_merged_rows( l_mrow_ix ).OVERCOMPLETION_TOLERANCE_VALUE := old_row.OVERCOMPLETION_TOLERANCE_VALUE; end if;
2243             if l_merged_rows( l_mrow_ix ).OVERRUN_PERCENTAGE is null then l_merged_rows( l_mrow_ix ).OVERRUN_PERCENTAGE := old_row.OVERRUN_PERCENTAGE; end if;
2244             if l_merged_rows( l_mrow_ix ).OVER_RETURN_TOLERANCE is null then l_merged_rows( l_mrow_ix ).OVER_RETURN_TOLERANCE := old_row.OVER_RETURN_TOLERANCE; end if;
2245             if l_merged_rows( l_mrow_ix ).OVER_SHIPMENT_TOLERANCE is null then l_merged_rows( l_mrow_ix ).OVER_SHIPMENT_TOLERANCE := old_row.OVER_SHIPMENT_TOLERANCE; end if;
2246             if l_merged_rows( l_mrow_ix ).PARENT_CHILD_GENERATION_FLAG is null then l_merged_rows( l_mrow_ix ).PARENT_CHILD_GENERATION_FLAG := old_row.PARENT_CHILD_GENERATION_FLAG; end if;
2247             if l_merged_rows( l_mrow_ix ).PAYMENT_TERMS_ID is null then l_merged_rows( l_mrow_ix ).PAYMENT_TERMS_ID := old_row.PAYMENT_TERMS_ID; end if;
2248             if l_merged_rows( l_mrow_ix ).PICKING_RULE_ID is null then l_merged_rows( l_mrow_ix ).PICKING_RULE_ID := old_row.PICKING_RULE_ID; end if;
2249             if l_merged_rows( l_mrow_ix ).PICK_COMPONENTS_FLAG is null then l_merged_rows( l_mrow_ix ).PICK_COMPONENTS_FLAG := old_row.PICK_COMPONENTS_FLAG; end if;
2250             if l_merged_rows( l_mrow_ix ).PLANNED_INV_POINT_FLAG is null then l_merged_rows( l_mrow_ix ).PLANNED_INV_POINT_FLAG := old_row.PLANNED_INV_POINT_FLAG; end if;
2251             if l_merged_rows( l_mrow_ix ).PLANNER_CODE is null then l_merged_rows( l_mrow_ix ).PLANNER_CODE := old_row.PLANNER_CODE; end if;
2252             if l_merged_rows( l_mrow_ix ).PLANNING_EXCEPTION_SET is null then l_merged_rows( l_mrow_ix ).PLANNING_EXCEPTION_SET := old_row.PLANNING_EXCEPTION_SET; end if;
2253             if l_merged_rows( l_mrow_ix ).PLANNING_MAKE_BUY_CODE is null then l_merged_rows( l_mrow_ix ).PLANNING_MAKE_BUY_CODE := old_row.PLANNING_MAKE_BUY_CODE; end if;
2254             if l_merged_rows( l_mrow_ix ).PLANNING_TIME_FENCE_CODE is null then l_merged_rows( l_mrow_ix ).PLANNING_TIME_FENCE_CODE := old_row.PLANNING_TIME_FENCE_CODE; end if;
2255             if l_merged_rows( l_mrow_ix ).PLANNING_TIME_FENCE_DAYS is null then l_merged_rows( l_mrow_ix ).PLANNING_TIME_FENCE_DAYS := old_row.PLANNING_TIME_FENCE_DAYS; end if;
2256             if l_merged_rows( l_mrow_ix ).POSITIVE_MEASUREMENT_ERROR is null then l_merged_rows( l_mrow_ix ).POSITIVE_MEASUREMENT_ERROR := old_row.POSITIVE_MEASUREMENT_ERROR; end if;
2257             if l_merged_rows( l_mrow_ix ).POSTPROCESSING_LEAD_TIME is null then l_merged_rows( l_mrow_ix ).POSTPROCESSING_LEAD_TIME := old_row.POSTPROCESSING_LEAD_TIME; end if;
2258             if l_merged_rows( l_mrow_ix ).PREPOSITION_POINT is null then l_merged_rows( l_mrow_ix ).PREPOSITION_POINT := old_row.PREPOSITION_POINT; end if;
2259             if l_merged_rows( l_mrow_ix ).PREPROCESSING_LEAD_TIME is null then l_merged_rows( l_mrow_ix ).PREPROCESSING_LEAD_TIME := old_row.PREPROCESSING_LEAD_TIME; end if;
2260             if l_merged_rows( l_mrow_ix ).PREVENTIVE_MAINTENANCE_FLAG is null then l_merged_rows( l_mrow_ix ).PREVENTIVE_MAINTENANCE_FLAG := old_row.PREVENTIVE_MAINTENANCE_FLAG; end if;
2261             if l_merged_rows( l_mrow_ix ).PRICE_TOLERANCE_PERCENT is null then l_merged_rows( l_mrow_ix ).PRICE_TOLERANCE_PERCENT := old_row.PRICE_TOLERANCE_PERCENT; end if;
2262             if l_merged_rows( l_mrow_ix ).PRIMARY_SPECIALIST_ID is null then l_merged_rows( l_mrow_ix ).PRIMARY_SPECIALIST_ID := old_row.PRIMARY_SPECIALIST_ID; end if;
2263             if l_merged_rows( l_mrow_ix ).PROCESS_COSTING_ENABLED_FLAG is null then l_merged_rows( l_mrow_ix ).PROCESS_COSTING_ENABLED_FLAG := old_row.PROCESS_COSTING_ENABLED_FLAG; end if;
2264             if l_merged_rows( l_mrow_ix ).PROCESS_EXECUTION_ENABLED_FLAG is null then l_merged_rows( l_mrow_ix ).PROCESS_EXECUTION_ENABLED_FLAG := old_row.PROCESS_EXECUTION_ENABLED_FLAG; end if;
2265             if l_merged_rows( l_mrow_ix ).PROCESS_QUALITY_ENABLED_FLAG is null then l_merged_rows( l_mrow_ix ).PROCESS_QUALITY_ENABLED_FLAG := old_row.PROCESS_QUALITY_ENABLED_FLAG; end if;
2266             if l_merged_rows( l_mrow_ix ).PROCESS_SUPPLY_LOCATOR_ID is null then l_merged_rows( l_mrow_ix ).PROCESS_SUPPLY_LOCATOR_ID := old_row.PROCESS_SUPPLY_LOCATOR_ID; end if;
2267             if l_merged_rows( l_mrow_ix ).PROCESS_SUPPLY_SUBINVENTORY is null then l_merged_rows( l_mrow_ix ).PROCESS_SUPPLY_SUBINVENTORY := old_row.PROCESS_SUPPLY_SUBINVENTORY; end if;
2268             if l_merged_rows( l_mrow_ix ).PROCESS_YIELD_LOCATOR_ID is null then l_merged_rows( l_mrow_ix ).PROCESS_YIELD_LOCATOR_ID := old_row.PROCESS_YIELD_LOCATOR_ID; end if;
2269             if l_merged_rows( l_mrow_ix ).PROCESS_YIELD_SUBINVENTORY is null then l_merged_rows( l_mrow_ix ).PROCESS_YIELD_SUBINVENTORY := old_row.PROCESS_YIELD_SUBINVENTORY; end if;
2270             if l_merged_rows( l_mrow_ix ).PRODUCT_FAMILY_ITEM_ID is null then l_merged_rows( l_mrow_ix ).PRODUCT_FAMILY_ITEM_ID := old_row.PRODUCT_FAMILY_ITEM_ID; end if;
2271             if l_merged_rows( l_mrow_ix ).PROGRAM_APPLICATION_ID is null then l_merged_rows( l_mrow_ix ).PROGRAM_APPLICATION_ID := old_row.PROGRAM_APPLICATION_ID; end if;
2272             if l_merged_rows( l_mrow_ix ).PROGRAM_ID is null then l_merged_rows( l_mrow_ix ).PROGRAM_ID := old_row.PROGRAM_ID; end if;
2273             if l_merged_rows( l_mrow_ix ).PROGRAM_UPDATE_DATE is null then l_merged_rows( l_mrow_ix ).PROGRAM_UPDATE_DATE := old_row.PROGRAM_UPDATE_DATE; end if;
2274             if l_merged_rows( l_mrow_ix ).PRORATE_SERVICE_FLAG is null then l_merged_rows( l_mrow_ix ).PRORATE_SERVICE_FLAG := old_row.PRORATE_SERVICE_FLAG; end if;
2275             if l_merged_rows( l_mrow_ix ).PURCHASING_ENABLED_FLAG is null then l_merged_rows( l_mrow_ix ).PURCHASING_ENABLED_FLAG := old_row.PURCHASING_ENABLED_FLAG; end if;
2276             if l_merged_rows( l_mrow_ix ).PURCHASING_ITEM_FLAG is null then l_merged_rows( l_mrow_ix ).PURCHASING_ITEM_FLAG := old_row.PURCHASING_ITEM_FLAG; end if;
2277             if l_merged_rows( l_mrow_ix ).PURCHASING_TAX_CODE is null then l_merged_rows( l_mrow_ix ).PURCHASING_TAX_CODE := old_row.PURCHASING_TAX_CODE; end if;
2278             if l_merged_rows( l_mrow_ix ).QTY_RCV_EXCEPTION_CODE is null then l_merged_rows( l_mrow_ix ).QTY_RCV_EXCEPTION_CODE := old_row.QTY_RCV_EXCEPTION_CODE; end if;
2279             if l_merged_rows( l_mrow_ix ).QTY_RCV_TOLERANCE is null then l_merged_rows( l_mrow_ix ).QTY_RCV_TOLERANCE := old_row.QTY_RCV_TOLERANCE; end if;
2280             if l_merged_rows( l_mrow_ix ).RECEIPT_DAYS_EXCEPTION_CODE is null then l_merged_rows( l_mrow_ix ).RECEIPT_DAYS_EXCEPTION_CODE := old_row.RECEIPT_DAYS_EXCEPTION_CODE; end if;
2281             if l_merged_rows( l_mrow_ix ).RECEIPT_REQUIRED_FLAG is null then l_merged_rows( l_mrow_ix ).RECEIPT_REQUIRED_FLAG := old_row.RECEIPT_REQUIRED_FLAG; end if;
2282             if l_merged_rows( l_mrow_ix ).RECEIVE_CLOSE_TOLERANCE is null then l_merged_rows( l_mrow_ix ).RECEIVE_CLOSE_TOLERANCE := old_row.RECEIVE_CLOSE_TOLERANCE; end if;
2283             if l_merged_rows( l_mrow_ix ).RECEIVING_ROUTING_ID is null then l_merged_rows( l_mrow_ix ).RECEIVING_ROUTING_ID := old_row.RECEIVING_ROUTING_ID; end if;
2284             if l_merged_rows( l_mrow_ix ).RECIPE_ENABLED_FLAG is null then l_merged_rows( l_mrow_ix ).RECIPE_ENABLED_FLAG := old_row.RECIPE_ENABLED_FLAG; end if;
2285             if l_merged_rows( l_mrow_ix ).RECOVERED_PART_DISP_CODE is null then l_merged_rows( l_mrow_ix ).RECOVERED_PART_DISP_CODE := old_row.RECOVERED_PART_DISP_CODE; end if;
2286             if l_merged_rows( l_mrow_ix ).RELEASE_TIME_FENCE_CODE is null then l_merged_rows( l_mrow_ix ).RELEASE_TIME_FENCE_CODE := old_row.RELEASE_TIME_FENCE_CODE; end if;
2287             if l_merged_rows( l_mrow_ix ).RELEASE_TIME_FENCE_DAYS is null then l_merged_rows( l_mrow_ix ).RELEASE_TIME_FENCE_DAYS := old_row.RELEASE_TIME_FENCE_DAYS; end if;
2288             if l_merged_rows( l_mrow_ix ).REPAIR_LEADTIME is null then l_merged_rows( l_mrow_ix ).REPAIR_LEADTIME := old_row.REPAIR_LEADTIME; end if;
2289             if l_merged_rows( l_mrow_ix ).REPAIR_PROGRAM is null then l_merged_rows( l_mrow_ix ).REPAIR_PROGRAM := old_row.REPAIR_PROGRAM; end if;
2290             if l_merged_rows( l_mrow_ix ).REPAIR_YIELD is null then l_merged_rows( l_mrow_ix ).REPAIR_YIELD := old_row.REPAIR_YIELD; end if;
2291             if l_merged_rows( l_mrow_ix ).REPETITIVE_PLANNING_FLAG is null then l_merged_rows( l_mrow_ix ).REPETITIVE_PLANNING_FLAG := old_row.REPETITIVE_PLANNING_FLAG; end if;
2292             if l_merged_rows( l_mrow_ix ).REPLENISH_TO_ORDER_FLAG is null then l_merged_rows( l_mrow_ix ).REPLENISH_TO_ORDER_FLAG := old_row.REPLENISH_TO_ORDER_FLAG; end if;
2293             if l_merged_rows( l_mrow_ix ).REQUEST_ID is null then l_merged_rows( l_mrow_ix ).REQUEST_ID := old_row.REQUEST_ID; end if;
2294             if l_merged_rows( l_mrow_ix ).RESERVABLE_TYPE is null then l_merged_rows( l_mrow_ix ).RESERVABLE_TYPE := old_row.RESERVABLE_TYPE; end if;
2295             if l_merged_rows( l_mrow_ix ).RESPONSE_TIME_PERIOD_CODE is null then l_merged_rows( l_mrow_ix ).RESPONSE_TIME_PERIOD_CODE := old_row.RESPONSE_TIME_PERIOD_CODE; end if;
2296             if l_merged_rows( l_mrow_ix ).RESPONSE_TIME_VALUE is null then l_merged_rows( l_mrow_ix ).RESPONSE_TIME_VALUE := old_row.RESPONSE_TIME_VALUE; end if;
2297             if l_merged_rows( l_mrow_ix ).RESTRICT_LOCATORS_CODE is null then l_merged_rows( l_mrow_ix ).RESTRICT_LOCATORS_CODE := old_row.RESTRICT_LOCATORS_CODE; end if;
2298             if l_merged_rows( l_mrow_ix ).RESTRICT_SUBINVENTORIES_CODE is null then l_merged_rows( l_mrow_ix ).RESTRICT_SUBINVENTORIES_CODE := old_row.RESTRICT_SUBINVENTORIES_CODE; end if;
2299             if l_merged_rows( l_mrow_ix ).RETEST_INTERVAL is null then l_merged_rows( l_mrow_ix ).RETEST_INTERVAL := old_row.RETEST_INTERVAL; end if;
2300             if l_merged_rows( l_mrow_ix ).RETURNABLE_FLAG is null then l_merged_rows( l_mrow_ix ).RETURNABLE_FLAG := old_row.RETURNABLE_FLAG; end if;
2301             if l_merged_rows( l_mrow_ix ).RETURN_INSPECTION_REQUIREMENT is null then l_merged_rows( l_mrow_ix ).RETURN_INSPECTION_REQUIREMENT := old_row.RETURN_INSPECTION_REQUIREMENT; end if;
2302             if l_merged_rows( l_mrow_ix ).REVISION is null then l_merged_rows( l_mrow_ix ).REVISION := old_row.REVISION; end if;
2303             if l_merged_rows( l_mrow_ix ).REVISION_IMPORT_POLICY is null then l_merged_rows( l_mrow_ix ).REVISION_IMPORT_POLICY := old_row.REVISION_IMPORT_POLICY; end if;
2304             if l_merged_rows( l_mrow_ix ).REVISION_QTY_CONTROL_CODE is null then l_merged_rows( l_mrow_ix ).REVISION_QTY_CONTROL_CODE := old_row.REVISION_QTY_CONTROL_CODE; end if;
2305             if l_merged_rows( l_mrow_ix ).RFQ_REQUIRED_FLAG is null then l_merged_rows( l_mrow_ix ).RFQ_REQUIRED_FLAG := old_row.RFQ_REQUIRED_FLAG; end if;
2306             if l_merged_rows( l_mrow_ix ).ROUNDING_CONTROL_TYPE is null then l_merged_rows( l_mrow_ix ).ROUNDING_CONTROL_TYPE := old_row.ROUNDING_CONTROL_TYPE; end if;
2307             if l_merged_rows( l_mrow_ix ).ROUNDING_FACTOR is null then l_merged_rows( l_mrow_ix ).ROUNDING_FACTOR := old_row.ROUNDING_FACTOR; end if;
2308             if l_merged_rows( l_mrow_ix ).SAFETY_STOCK_BUCKET_DAYS is null then l_merged_rows( l_mrow_ix ).SAFETY_STOCK_BUCKET_DAYS := old_row.SAFETY_STOCK_BUCKET_DAYS; end if;
2309             if l_merged_rows( l_mrow_ix ).SALES_ACCOUNT is null then l_merged_rows( l_mrow_ix ).SALES_ACCOUNT := old_row.SALES_ACCOUNT; end if;
2310             if l_merged_rows( l_mrow_ix ).SECONDARY_DEFAULT_IND is null then l_merged_rows( l_mrow_ix ).SECONDARY_DEFAULT_IND := old_row.SECONDARY_DEFAULT_IND; end if;
2311             if l_merged_rows( l_mrow_ix ).SECONDARY_SPECIALIST_ID is null then l_merged_rows( l_mrow_ix ).SECONDARY_SPECIALIST_ID := old_row.SECONDARY_SPECIALIST_ID; end if;
2312             if l_merged_rows( l_mrow_ix ).SECONDARY_UOM_CODE is null then l_merged_rows( l_mrow_ix ).SECONDARY_UOM_CODE := old_row.SECONDARY_UOM_CODE; end if;
2313             if l_merged_rows( l_mrow_ix ).SERIAL_NUMBER_CONTROL_CODE is null then l_merged_rows( l_mrow_ix ).SERIAL_NUMBER_CONTROL_CODE := old_row.SERIAL_NUMBER_CONTROL_CODE; end if;
2314             if l_merged_rows( l_mrow_ix ).SERIAL_STATUS_ENABLED is null then l_merged_rows( l_mrow_ix ).SERIAL_STATUS_ENABLED := old_row.SERIAL_STATUS_ENABLED; end if;
2315             if l_merged_rows( l_mrow_ix ).SERVICEABLE_COMPONENT_FLAG is null then l_merged_rows( l_mrow_ix ).SERVICEABLE_COMPONENT_FLAG := old_row.SERVICEABLE_COMPONENT_FLAG; end if;
2316             if l_merged_rows( l_mrow_ix ).SERVICEABLE_ITEM_CLASS_ID is null then l_merged_rows( l_mrow_ix ).SERVICEABLE_ITEM_CLASS_ID := old_row.SERVICEABLE_ITEM_CLASS_ID; end if;
2317             if l_merged_rows( l_mrow_ix ).SERVICEABLE_PRODUCT_FLAG is null then l_merged_rows( l_mrow_ix ).SERVICEABLE_PRODUCT_FLAG := old_row.SERVICEABLE_PRODUCT_FLAG; end if;
2318             if l_merged_rows( l_mrow_ix ).SERVICE_DURATION is null then l_merged_rows( l_mrow_ix ).SERVICE_DURATION := old_row.SERVICE_DURATION; end if;
2319             if l_merged_rows( l_mrow_ix ).SERVICE_DURATION_PERIOD_CODE is null then l_merged_rows( l_mrow_ix ).SERVICE_DURATION_PERIOD_CODE := old_row.SERVICE_DURATION_PERIOD_CODE; end if;
2320             if l_merged_rows( l_mrow_ix ).SERVICE_ITEM_FLAG is null then l_merged_rows( l_mrow_ix ).SERVICE_ITEM_FLAG := old_row.SERVICE_ITEM_FLAG; end if;
2321             if l_merged_rows( l_mrow_ix ).SERVICE_STARTING_DELAY is null then l_merged_rows( l_mrow_ix ).SERVICE_STARTING_DELAY := old_row.SERVICE_STARTING_DELAY; end if;
2322             if l_merged_rows( l_mrow_ix ).SERV_BILLING_ENABLED_FLAG is null then l_merged_rows( l_mrow_ix ).SERV_BILLING_ENABLED_FLAG := old_row.SERV_BILLING_ENABLED_FLAG; end if;
2323             if l_merged_rows( l_mrow_ix ).SERV_IMPORTANCE_LEVEL is null then l_merged_rows( l_mrow_ix ).SERV_IMPORTANCE_LEVEL := old_row.SERV_IMPORTANCE_LEVEL; end if;
2324             if l_merged_rows( l_mrow_ix ).SERV_REQ_ENABLED_CODE is null then l_merged_rows( l_mrow_ix ).SERV_REQ_ENABLED_CODE := old_row.SERV_REQ_ENABLED_CODE; end if;
2325             if l_merged_rows( l_mrow_ix ).SET_ID is null then l_merged_rows( l_mrow_ix ).SET_ID := old_row.SET_ID; end if;
2326             if l_merged_rows( l_mrow_ix ).SHELF_LIFE_CODE is null then l_merged_rows( l_mrow_ix ).SHELF_LIFE_CODE := old_row.SHELF_LIFE_CODE; end if;
2327             if l_merged_rows( l_mrow_ix ).SHELF_LIFE_DAYS is null then l_merged_rows( l_mrow_ix ).SHELF_LIFE_DAYS := old_row.SHELF_LIFE_DAYS; end if;
2328             if l_merged_rows( l_mrow_ix ).SHIPPABLE_ITEM_FLAG is null then l_merged_rows( l_mrow_ix ).SHIPPABLE_ITEM_FLAG := old_row.SHIPPABLE_ITEM_FLAG; end if;
2329             if l_merged_rows( l_mrow_ix ).SHIP_MODEL_COMPLETE_FLAG is null then l_merged_rows( l_mrow_ix ).SHIP_MODEL_COMPLETE_FLAG := old_row.SHIP_MODEL_COMPLETE_FLAG; end if;
2330             if l_merged_rows( l_mrow_ix ).SHRINKAGE_RATE is null then l_merged_rows( l_mrow_ix ).SHRINKAGE_RATE := old_row.SHRINKAGE_RATE; end if;
2331             if l_merged_rows( l_mrow_ix ).SOURCE_ORGANIZATION_ID is null then l_merged_rows( l_mrow_ix ).SOURCE_ORGANIZATION_ID := old_row.SOURCE_ORGANIZATION_ID; end if;
2332             if l_merged_rows( l_mrow_ix ).SOURCE_SUBINVENTORY is null then l_merged_rows( l_mrow_ix ).SOURCE_SUBINVENTORY := old_row.SOURCE_SUBINVENTORY; end if;
2333             if l_merged_rows( l_mrow_ix ).SOURCE_SYSTEM_REFERENCE_DESC is null then l_merged_rows( l_mrow_ix ).SOURCE_SYSTEM_REFERENCE_DESC := old_row.SOURCE_SYSTEM_REFERENCE_DESC; end if;
2334             if l_merged_rows( l_mrow_ix ).SOURCE_TYPE is null then l_merged_rows( l_mrow_ix ).SOURCE_TYPE := old_row.SOURCE_TYPE; end if;
2335             if l_merged_rows( l_mrow_ix ).SO_AUTHORIZATION_FLAG is null then l_merged_rows( l_mrow_ix ).SO_AUTHORIZATION_FLAG := old_row.SO_AUTHORIZATION_FLAG; end if;
2336             if l_merged_rows( l_mrow_ix ).SO_TRANSACTIONS_FLAG is null then l_merged_rows( l_mrow_ix ).SO_TRANSACTIONS_FLAG := old_row.SO_TRANSACTIONS_FLAG; end if;
2337             if l_merged_rows( l_mrow_ix ).START_AUTO_LOT_NUMBER is null then l_merged_rows( l_mrow_ix ).START_AUTO_LOT_NUMBER := old_row.START_AUTO_LOT_NUMBER; end if;
2338             if l_merged_rows( l_mrow_ix ).START_AUTO_SERIAL_NUMBER is null then l_merged_rows( l_mrow_ix ).START_AUTO_SERIAL_NUMBER := old_row.START_AUTO_SERIAL_NUMBER; end if;
2339             if l_merged_rows( l_mrow_ix ).START_DATE_ACTIVE is null then l_merged_rows( l_mrow_ix ).START_DATE_ACTIVE := old_row.START_DATE_ACTIVE; end if;
2340             if l_merged_rows( l_mrow_ix ).STD_LOT_SIZE is null then l_merged_rows( l_mrow_ix ).STD_LOT_SIZE := old_row.STD_LOT_SIZE; end if;
2341             if l_merged_rows( l_mrow_ix ).STOCK_ENABLED_FLAG is null then l_merged_rows( l_mrow_ix ).STOCK_ENABLED_FLAG := old_row.STOCK_ENABLED_FLAG; end if;
2342             if l_merged_rows( l_mrow_ix ).SUBCONTRACTING_COMPONENT is null then l_merged_rows( l_mrow_ix ).SUBCONTRACTING_COMPONENT := old_row.SUBCONTRACTING_COMPONENT; end if;
2343             if l_merged_rows( l_mrow_ix ).SUBSCRIPTION_DEPEND_FLAG is null then l_merged_rows( l_mrow_ix ).SUBSCRIPTION_DEPEND_FLAG := old_row.SUBSCRIPTION_DEPEND_FLAG; end if;
2344             if l_merged_rows( l_mrow_ix ).SUBSTITUTION_WINDOW_CODE is null then l_merged_rows( l_mrow_ix ).SUBSTITUTION_WINDOW_CODE := old_row.SUBSTITUTION_WINDOW_CODE; end if;
2345             if l_merged_rows( l_mrow_ix ).SUBSTITUTION_WINDOW_DAYS is null then l_merged_rows( l_mrow_ix ).SUBSTITUTION_WINDOW_DAYS := old_row.SUBSTITUTION_WINDOW_DAYS; end if;
2346             if l_merged_rows( l_mrow_ix ).SUMMARY_FLAG is null then l_merged_rows( l_mrow_ix ).SUMMARY_FLAG := old_row.SUMMARY_FLAG; end if;
2347             if l_merged_rows( l_mrow_ix ).TAXABLE_FLAG is null then l_merged_rows( l_mrow_ix ).TAXABLE_FLAG := old_row.TAXABLE_FLAG; end if;
2348             if l_merged_rows( l_mrow_ix ).TAX_CODE is null then l_merged_rows( l_mrow_ix ).TAX_CODE := old_row.TAX_CODE; end if;
2349             if l_merged_rows( l_mrow_ix ).TIME_BILLABLE_FLAG is null then l_merged_rows( l_mrow_ix ).TIME_BILLABLE_FLAG := old_row.TIME_BILLABLE_FLAG; end if;
2350             if l_merged_rows( l_mrow_ix ).TRACKING_QUANTITY_IND is null then l_merged_rows( l_mrow_ix ).TRACKING_QUANTITY_IND := old_row.TRACKING_QUANTITY_IND; end if;
2351             if l_merged_rows( l_mrow_ix ).TRANSACTION_ID is null then l_merged_rows( l_mrow_ix ).TRANSACTION_ID := old_row.TRANSACTION_ID; end if;
2352             if l_merged_rows( l_mrow_ix ).UNDER_RETURN_TOLERANCE is null then l_merged_rows( l_mrow_ix ).UNDER_RETURN_TOLERANCE := old_row.UNDER_RETURN_TOLERANCE; end if;
2353             if l_merged_rows( l_mrow_ix ).UNDER_SHIPMENT_TOLERANCE is null then l_merged_rows( l_mrow_ix ).UNDER_SHIPMENT_TOLERANCE := old_row.UNDER_SHIPMENT_TOLERANCE; end if;
2354             if l_merged_rows( l_mrow_ix ).UNIT_HEIGHT is null then l_merged_rows( l_mrow_ix ).UNIT_HEIGHT := old_row.UNIT_HEIGHT; end if;
2355             if l_merged_rows( l_mrow_ix ).UNIT_LENGTH is null then l_merged_rows( l_mrow_ix ).UNIT_LENGTH := old_row.UNIT_LENGTH; end if;
2356             if l_merged_rows( l_mrow_ix ).UNIT_OF_ISSUE is null then l_merged_rows( l_mrow_ix ).UNIT_OF_ISSUE := old_row.UNIT_OF_ISSUE; end if;
2357             if l_merged_rows( l_mrow_ix ).UNIT_VOLUME is null then l_merged_rows( l_mrow_ix ).UNIT_VOLUME := old_row.UNIT_VOLUME; end if;
2358             if l_merged_rows( l_mrow_ix ).UNIT_WEIGHT is null then l_merged_rows( l_mrow_ix ).UNIT_WEIGHT := old_row.UNIT_WEIGHT; end if;
2359             if l_merged_rows( l_mrow_ix ).UNIT_WIDTH is null then l_merged_rows( l_mrow_ix ).UNIT_WIDTH := old_row.UNIT_WIDTH; end if;
2360             if l_merged_rows( l_mrow_ix ).UN_NUMBER_ID is null then l_merged_rows( l_mrow_ix ).UN_NUMBER_ID := old_row.UN_NUMBER_ID; end if;
2361             if l_merged_rows( l_mrow_ix ).USAGE_ITEM_FLAG is null then l_merged_rows( l_mrow_ix ).USAGE_ITEM_FLAG := old_row.USAGE_ITEM_FLAG; end if;
2362             if l_merged_rows( l_mrow_ix ).VARIABLE_LEAD_TIME is null then l_merged_rows( l_mrow_ix ).VARIABLE_LEAD_TIME := old_row.VARIABLE_LEAD_TIME; end if;
2363             if l_merged_rows( l_mrow_ix ).VEHICLE_ITEM_FLAG is null then l_merged_rows( l_mrow_ix ).VEHICLE_ITEM_FLAG := old_row.VEHICLE_ITEM_FLAG; end if;
2364             if l_merged_rows( l_mrow_ix ).VENDOR_WARRANTY_FLAG is null then l_merged_rows( l_mrow_ix ).VENDOR_WARRANTY_FLAG := old_row.VENDOR_WARRANTY_FLAG; end if;
2365             if l_merged_rows( l_mrow_ix ).VMI_FIXED_ORDER_QUANTITY is null then l_merged_rows( l_mrow_ix ).VMI_FIXED_ORDER_QUANTITY := old_row.VMI_FIXED_ORDER_QUANTITY; end if;
2366             if l_merged_rows( l_mrow_ix ).VMI_FORECAST_TYPE is null then l_merged_rows( l_mrow_ix ).VMI_FORECAST_TYPE := old_row.VMI_FORECAST_TYPE; end if;
2367             if l_merged_rows( l_mrow_ix ).VMI_MAXIMUM_DAYS is null then l_merged_rows( l_mrow_ix ).VMI_MAXIMUM_DAYS := old_row.VMI_MAXIMUM_DAYS; end if;
2368             if l_merged_rows( l_mrow_ix ).VMI_MAXIMUM_UNITS is null then l_merged_rows( l_mrow_ix ).VMI_MAXIMUM_UNITS := old_row.VMI_MAXIMUM_UNITS; end if;
2369             if l_merged_rows( l_mrow_ix ).VMI_MINIMUM_DAYS is null then l_merged_rows( l_mrow_ix ).VMI_MINIMUM_DAYS := old_row.VMI_MINIMUM_DAYS; end if;
2370             if l_merged_rows( l_mrow_ix ).VMI_MINIMUM_UNITS is null then l_merged_rows( l_mrow_ix ).VMI_MINIMUM_UNITS := old_row.VMI_MINIMUM_UNITS; end if;
2371             if l_merged_rows( l_mrow_ix ).VOLUME_UOM_CODE is null then l_merged_rows( l_mrow_ix ).VOLUME_UOM_CODE := old_row.VOLUME_UOM_CODE; end if;
2372             if l_merged_rows( l_mrow_ix ).VOL_DISCOUNT_EXEMPT_FLAG is null then l_merged_rows( l_mrow_ix ).VOL_DISCOUNT_EXEMPT_FLAG := old_row.VOL_DISCOUNT_EXEMPT_FLAG; end if;
2373             if l_merged_rows( l_mrow_ix ).WARRANTY_VENDOR_ID is null then l_merged_rows( l_mrow_ix ).WARRANTY_VENDOR_ID := old_row.WARRANTY_VENDOR_ID; end if;
2374             if l_merged_rows( l_mrow_ix ).WEB_STATUS is null then l_merged_rows( l_mrow_ix ).WEB_STATUS := old_row.WEB_STATUS; end if;
2375             if l_merged_rows( l_mrow_ix ).WEIGHT_UOM_CODE is null then l_merged_rows( l_mrow_ix ).WEIGHT_UOM_CODE := old_row.WEIGHT_UOM_CODE; end if;
2376             if l_merged_rows( l_mrow_ix ).WH_UPDATE_DATE is null then l_merged_rows( l_mrow_ix ).WH_UPDATE_DATE := old_row.WH_UPDATE_DATE; end if;
2377             if l_merged_rows( l_mrow_ix ).WIP_SUPPLY_LOCATOR_ID is null then l_merged_rows( l_mrow_ix ).WIP_SUPPLY_LOCATOR_ID := old_row.WIP_SUPPLY_LOCATOR_ID; end if;
2378             if l_merged_rows( l_mrow_ix ).WIP_SUPPLY_SUBINVENTORY is null then l_merged_rows( l_mrow_ix ).WIP_SUPPLY_SUBINVENTORY := old_row.WIP_SUPPLY_SUBINVENTORY; end if;
2379             if l_merged_rows( l_mrow_ix ).WIP_SUPPLY_TYPE is null then l_merged_rows( l_mrow_ix ).WIP_SUPPLY_TYPE := old_row.WIP_SUPPLY_TYPE; end if;
2380             -- end generated code
2381         END LOOP; -- over old rows
2382         /*
2383         -- XXX: In case only null/invalid transaction types encountered, set transaction type to SYNC ?.
2384         IF l_merged_rows( l_mrow_ix ).TRANSACTION_TYPE IS NULL THEN
2385             l_merged_rows( l_mrow_ix ).TRANSACTION_TYPE := G_TRANS_TYPE_SYNC;
2386         END IF;
2387         */
2388         --Changing the confirm status for the last group of merged items.
2389         IF( l_cur_rank > 0 AND NOT l_is_pdh_batch) THEN
2390             IF( l_merged_rows(l_mrow_ix).CONFIRM_STATUS NOT IN ( G_UNCONF_NONE_MATCH, G_UNCONF_SIGL_MATCH, G_UNCONF_MULT_MATCH  )
2391                 AND l_merged_rows(l_mrow_ix).TRANSACTION_TYPE = G_TRANS_TYPE_CREATE )
2392             THEN
2393                 l_merged_rows(l_mrow_ix).CONFIRM_STATUS := G_CONF_NEW;
2394             END IF;
2395             IF( l_excluded_flag IS NOT NULL) THEN
2396                 l_merged_rows( l_mrow_ix ).CONFIRM_STATUS := G_EXCLUDED;
2397             END IF;
2398         END IF; --IF( l_cur_rank > 0 AND NOT l_is_pdh_batch)
2399 
2400         Debug_Conc_Log( l_proc_log_prefix || 'Rows requiring merging: ' || c_target_rows%ROWCOUNT );
2401         IF c_target_rows%ISOPEN THEN
2402             CLOSE c_target_rows;
2403         END IF;
2404 
2405         IF l_merged_rows IS NOT NULL THEN
2406             -- delete
2407             Debug_Conc_Log( l_proc_log_prefix || 'Deleting ' || l_old_rowids.COUNT || ' old rows ...' );
2408             FORALL rid_ix IN INDICES OF l_old_rowids
2409                 DELETE FROM MTL_SYSTEM_ITEMS_INTERFACE
2410                     WHERE ROWID = l_old_rowids( rid_ix );
2411             -- insert
2412             Debug_Conc_Log( l_proc_log_prefix || 'Inserting ' || l_merged_rows.COUNT || ' merged rows ...' );
2413             FORALL row_index IN INDICES OF l_merged_rows
2414                 INSERT INTO MTL_SYSTEM_ITEMS_INTERFACE
2415                     VALUES l_merged_rows( row_index );
2416         END IF;
2417 
2418         IF p_commit = FND_API.G_TRUE THEN
2419             Debug_Conc_Log( l_proc_log_prefix || 'Committing' );
2420             COMMIT;
2421         END IF;
2422         Debug_Conc_Log( l_proc_log_prefix || 'Exiting' );
2423     END merge_items;
2424 
2425     PROCEDURE merge_revs( p_batch_id       IN NUMBER
2426                         , p_is_pdh_batch   IN FLAG
2427                         , p_ss_id          IN NUMBER    DEFAULT NULL
2428                         , p_master_org_id  IN NUMBER    DEFAULT NULL
2429                         , p_commit         IN FLAG      DEFAULT FND_API.G_FALSE
2430                         )
2431     IS
2432         SUBTYPE MIRI_ROW   IS MTL_ITEM_REVISIONS_INTERFACE%ROWTYPE;
2433         TYPE MIRI_ROWS  IS TABLE OF MIRI_ROW INDEX BY BINARY_INTEGER;
2434 
2435         /*
2436          * Note that the organization_id column is filled in from the organization_code and batch organization_id
2437          *   as part of resolve_ssxref_on_data_load
2438          * revision column is filled in from the revision_id before this cursor is fetched.
2439          */
2440         CURSOR c_ss_target_revs( cp_ss_id         MTL_ITEM_REVISIONS_INTERFACE.SOURCE_SYSTEM_ID%TYPE
2441                                , cp_master_org_id MTL_ITEM_REVISIONS_INTERFACE.ORGANIZATION_ID%TYPE ) IS
2442             SELECT
2443                 rowid rid
2444                 , FIRST_VALUE( ROWID ) OVER ( PARTITION BY
2445                                               source_system_id
2446                                             , source_system_reference
2447                                             , organization_id
2448                                             , revision
2449                                               ORDER BY
2450                                               last_update_date desc nulls last
2451                                             , interface_table_unique_id desc nulls last
2452                                             ) master_rid
2453                 , RANK( ) OVER ( PARTITION BY
2454                                   source_system_id
2455                                 , source_system_reference
2456                                 , organization_id
2457                                 , revision
2458                                   ORDER BY
2459                                   last_update_date desc nulls last
2460                                 , interface_table_unique_id desc nulls last
2461                                 ) local_rank
2462                 , sub.*
2463             FROM
2464                 ( SELECT
2465                     COUNT( * ) OVER ( PARTITION BY
2466                                       source_system_id
2467                                     , source_system_reference
2468                                     , organization_id
2469                                     , revision
2470                                     )
2471                     cnt
2472                     , miri.*
2473                 FROM mtl_item_revisions_interface miri
2474                 WHERE   PROCESS_FLAG            = 0
2475                    and  SET_PROCESS_ID          = p_batch_id
2476                    and  SOURCE_SYSTEM_ID        = cp_ss_id
2477                    and  SOURCE_SYSTEM_REFERENCE IS NOT NULL
2478                    AND  ORGANIZATION_ID         IS NOT NULL
2479                    and  EXISTS ( SELECT null
2480                                  FROM   mtl_parameters mp
2481                                  WHERE  mp.ORGANIZATION_ID        = miri.ORGANIZATION_ID
2482                                    and  mp.MASTER_ORGANIZATION_ID = cp_master_org_id
2483                                )
2484                 )
2485                 sub
2486             WHERE sub.cnt > 1
2487             ORDER BY master_rid, local_rank;
2488 
2489         CURSOR c_pdh_target_revs( cp_master_org_id MTL_ITEM_REVISIONS_INTERFACE.ORGANIZATION_ID%TYPE ) IS
2490             SELECT
2491                 rowid rid
2492                 , first_value( rowid ) over ( PARTITION BY
2493                                               item_number
2494                                             , organization_id
2495                                             , revision
2496                                               ORDER BY
2497                                               last_update_date desc nulls last
2498                                             , interface_table_unique_id desc nulls last
2499                                             ) master_rid
2500                 , rank( ) over ( PARTITION BY
2501                                   item_number
2502                                 , organization_id
2503                                 , revision
2504                                   ORDER BY
2505                                   last_update_date desc nulls last
2506                                 , interface_table_unique_id desc nulls last
2507                                 ) local_rank
2508                 , sub.*
2509             FROM
2510                 ( select
2511                     count( * ) over ( PARTITION BY
2512                                       item_number
2513                                     , organization_id
2514                                     , revision
2515                                     )
2516                     cnt
2517                     , miri.*
2518                 FROM MTL_ITEM_REVISIONS_INTERFACE miri
2519                 WHERE   PROCESS_FLAG            = 1
2520                    AND  SET_PROCESS_ID          = p_batch_id
2521                    AND  ITEM_NUMBER             IS NOT NULL
2522                    AND  ORGANIZATION_ID         IS NOT NULL
2523                    AND  (   SOURCE_SYSTEM_ID    IS NULL
2524                         OR  SOURCE_SYSTEM_ID    = G_PDH_SOURCE_SYSTEM_ID
2525                         )
2526                    AND  EXISTS ( SELECT null
2527                                  FROM   mtl_parameters mp
2528                                  WHERE  mp.organization_id        = miri.organization_id
2529                                    AND  mp.master_organization_id = cp_master_org_id
2530                                )
2531                 )
2532                 sub
2533             WHERE sub.cnt > 1
2534             ORDER BY master_rid, local_rank;
2535 
2536         TYPE TARGET_ROWS    IS TABLE OF c_ss_target_revs%ROWTYPE;
2537 
2538         l_merged_rows   MIRI_ROWS;
2539         l_merge_base    MIRI_ROW;
2540         l_old_rows      TARGET_ROWS;
2541         l_old_rowids    UROWID_TABLE;
2542 
2543         l_ss_id         MTL_ITEM_REVISIONS_INTERFACE.SOURCE_SYSTEM_ID%TYPE := p_ss_id;
2544         l_ssr           MTL_ITEM_REVISIONS_INTERFACE.SOURCE_SYSTEM_REFERENCE%TYPE;
2545         l_candidate_trans MTL_ITEM_REVISIONS_INTERFACE.TRANSACTION_TYPE%TYPE;
2546 
2547         l_cur_master_rid    UROWID := NULL;
2548         l_mrow_ix           PLS_INTEGER := 0;
2549         l_is_pdh_batch      BOOLEAN;
2550 
2551         l_org_id        MTL_ITEM_REVISIONS_INTERFACE.ORGANIZATION_ID%TYPE := p_master_org_id;
2552         l_pdh_batch_flag FLAG := p_is_pdh_batch;
2553 
2554         l_proc_log_prefix CONSTANT VARCHAR2(30) := 'merge_revs - ';
2555     BEGIN
2556         Debug_Conc_Log( l_proc_log_prefix || 'Entering' );
2557         Debug_Conc_Log( l_proc_log_prefix || 'Batch ID: ' || p_batch_id );
2558         IF  l_pdh_batch_flag IS NULL OR l_org_id IS NULL OR l_ss_id IS NULL THEN
2559             merge_params_from_batch_header( p_batch_id      => p_batch_id
2560                                           , x_is_pdh_batch  => l_pdh_batch_flag
2561                                           , x_master_org_id => l_org_id
2562                                           , x_ss_id         => l_ss_id
2563                                           );
2564         END IF;
2565         Debug_Conc_Log( l_proc_log_prefix || 'Master Org ID: ' || l_org_id );
2566         Debug_Conc_Log( l_proc_log_prefix || 'SS ID: ' || l_ss_id );
2567         Debug_Conc_Log( l_proc_log_prefix || 'Is PDH Batch?: ' || l_pdh_batch_flag );
2568 
2569         UPDATE MTL_ITEM_REVISIONS_INTERFACE miri
2570             SET REVISION = NVL( (   SELECT  r.REVISION
2571                                     FROM    MTL_ITEM_REVISIONS_B r
2572                                     WHERE   r.REVISION_ID       = miri.REVISION_ID
2573                                         AND r.ORGANIZATION_ID   = miri.ORGANIZATION_ID
2574                                 )
2575                               , REVISION
2576                               )
2577              WHERE REVISION_ID IS NOT NULL
2578                AND SET_PROCESS_ID = p_batch_id
2579                AND REVISION IS NULL;
2580 
2581         l_is_pdh_batch  := ( l_pdh_batch_flag = FND_API.G_TRUE );
2582         IF  l_is_pdh_batch THEN
2583             OPEN c_pdh_target_revs( l_org_id );
2584             FETCH c_pdh_target_revs BULK COLLECT INTO l_old_rows;
2585             CLOSE c_pdh_target_revs;
2586         ELSE
2587             OPEN c_ss_target_revs( l_ss_id, l_org_id );
2588             FETCH c_ss_target_revs BULK COLLECT INTO l_old_rows;
2589             CLOSE c_ss_target_revs;
2590         END IF;
2591 
2592         Debug_Conc_Log( l_proc_log_prefix || 'Rows requiring merging: ' || l_old_rows.COUNT );
2593         IF 0 <>  l_old_rows.COUNT THEN
2594             -- attributes common to every merged row
2595             l_merge_base.SET_PROCESS_ID := p_batch_id;
2596             l_merge_base.PROCESS_FLAG   := CASE WHEN l_is_pdh_batch THEN 1 ELSE 0 END;
2597 
2598             l_old_rowids := UROWID_TABLE( );
2599             l_old_rowids.EXTEND( l_old_rows.COUNT );
2600 
2601             FOR orow_ix IN l_old_rows.FIRST .. l_old_rows.LAST LOOP
2602                 l_old_rowids( orow_ix ) := l_old_rows( orow_ix ).RID;
2603 
2604                 IF( l_cur_master_rid IS NULL
2605                   OR l_old_rows( orow_ix ).master_rid <> l_cur_master_rid )
2606                 THEN
2607                     l_cur_master_rid := l_old_rows( orow_ix ).master_rid;
2608                     Debug_Conc_Log( l_proc_log_prefix || '  Starting new merged row; ROWID = '|| l_cur_master_rid );
2609                     l_mrow_ix := l_mrow_ix + 1;
2610                     l_merged_rows( l_mrow_ix ) := l_merge_base;
2611                     IF NOT l_is_pdh_batch THEN
2612                         l_merged_rows( l_mrow_ix ).SOURCE_SYSTEM_ID          := l_old_rows( orow_ix ).SOURCE_SYSTEM_ID;
2613                         l_merged_rows( l_mrow_ix ).SOURCE_SYSTEM_REFERENCE   := l_old_rows( orow_ix ).SOURCE_SYSTEM_REFERENCE;
2614                         Debug_Conc_Log( l_proc_log_prefix || '   Source System Reference = ' || l_merged_rows( l_mrow_ix ).SOURCE_SYSTEM_REFERENCE );
2615                     END IF;
2616                 ELSE
2617                     Debug_Conc_Log( l_proc_log_prefix || '  Merging another record into current merged row; ROWID = '
2618                                   || l_old_rows( orow_ix ).rid || '; master ROWID = '|| l_cur_master_rid );
2619                 END IF;
2620 
2621                 -- Special Cases:
2622                 -- Transaction type
2623                 l_candidate_trans := UPPER( l_old_rows( orow_ix ).TRANSACTION_TYPE );
2624 
2625                 IF      l_merged_rows( l_mrow_ix ).TRANSACTION_TYPE IS NULL
2626                     OR  l_merged_rows( l_mrow_ix ).TRANSACTION_TYPE <> l_candidate_trans -- <> filters out nulls
2627                 THEN
2628                     -- CREATE > SYNC > UPDATE : order of case expression matters
2629                     l_merged_rows( l_mrow_ix ).TRANSACTION_TYPE :=
2630                         CASE
2631                             WHEN l_merged_rows( l_mrow_ix ).TRANSACTION_TYPE = G_TRANS_TYPE_CREATE
2632                               OR l_candidate_trans = G_TRANS_TYPE_CREATE                            THEN G_TRANS_TYPE_CREATE
2633                             WHEN l_merged_rows( l_mrow_ix ).TRANSACTION_TYPE = G_TRANS_TYPE_SYNC
2634                               OR l_candidate_trans = G_TRANS_TYPE_SYNC                              THEN G_TRANS_TYPE_SYNC
2635                             WHEN l_merged_rows( l_mrow_ix ).TRANSACTION_TYPE = G_TRANS_TYPE_UPDATE
2636                               OR l_candidate_trans = G_TRANS_TYPE_UPDATE                            THEN G_TRANS_TYPE_UPDATE
2637                             ELSE NULL -- INVALID transaction types encountered ...
2638                         END;
2639                 END IF;
2640 
2641                 -- The following columns need to be treated as atomic groups
2642                 -- 1. Item Identifier
2643                 IF      l_merged_rows( l_mrow_ix ).INVENTORY_ITEM_ID  IS NULL
2644                     AND l_merged_rows( l_mrow_ix ).ITEM_NUMBER        IS NULL
2645                 THEN
2646                     l_merged_rows( l_mrow_ix ).INVENTORY_ITEM_ID  := l_old_rows( orow_ix ).INVENTORY_ITEM_ID;
2647                     l_merged_rows( l_mrow_ix ).ITEM_NUMBER        := l_old_rows( orow_ix ).ITEM_NUMBER;
2648                 END IF;
2649 
2650                 -- 2. Organization
2651                 IF      l_merged_rows( l_mrow_ix ).ORGANIZATION_ID    IS NULL
2652                     AND l_merged_rows( l_mrow_ix ).ORGANIZATION_CODE  IS NULL
2653                 THEN
2654                     l_merged_rows( l_mrow_ix ).ORGANIZATION_ID        := l_old_rows( orow_ix ).ORGANIZATION_ID;
2655                     l_merged_rows( l_mrow_ix ).ORGANIZATION_CODE      := l_old_rows( orow_ix ).ORGANIZATION_CODE;
2656                 END IF;
2657 
2658                 -- Non-special cased
2659                 -- Start Generated Code
2660                 /* Generated using:
2661                     SET LINESIZE 200
2662                     SELECT  'if l_merged_rows( l_mrow_ix ).' ||column_name || ' is null then l_merged_rows( l_mrow_ix ).' || column_name || ' := l_old_rows( orow_ix ).' || column_name || '; end if; '
2663                     FROM    ALL_TAB_COLUMNS
2664                     WHERE   TABLE_NAME = 'MTL_ITEM_REVISIONS_INTERFACE'
2665                     AND COLUMN_NAME NOT IN
2666                         ( -- special cases (for merge)
2667                           'INVENTORY_ITEM_ID'
2668                         , 'ITEM_NUMBER'
2669                         , 'ORGANIZATION_ID'
2670                         , 'ORGANIZATION_CODE'
2671                         , 'TRANSACTION_TYPE'
2672                           -- special columns
2673                         , 'SET_PROCESS_ID'
2674                         , 'PROCESS_FLAG'
2675                         , 'SOURCE_SYSTEM_ID'
2676                         , 'SOURCE_SYSTEM_REFERENCE'
2677                         , 'INTERFACE_TABLE_UNIQUE_ID'
2678                           -- who columns
2679                         , 'LAST_UPDATE_DATE'
2680                         , 'CREATION_DATE'
2681                         , 'CREATED_BY'
2682                         , 'LAST_UPDATED_BY'
2683                         , 'LAST_UPDATE_LOGIN'
2684                           -- XXX: exclude concurrent processing columns?
2685                         )
2686                     ORDER BY COLUMN_NAME ASC
2687                 */
2688                 if l_merged_rows( l_mrow_ix ).ATTRIBUTE1 is null then l_merged_rows( l_mrow_ix ).ATTRIBUTE1 := l_old_rows( orow_ix ).ATTRIBUTE1; end if;
2689                 if l_merged_rows( l_mrow_ix ).ATTRIBUTE10 is null then l_merged_rows( l_mrow_ix ).ATTRIBUTE10 := l_old_rows( orow_ix ).ATTRIBUTE10; end if;
2690                 if l_merged_rows( l_mrow_ix ).ATTRIBUTE11 is null then l_merged_rows( l_mrow_ix ).ATTRIBUTE11 := l_old_rows( orow_ix ).ATTRIBUTE11; end if;
2691                 if l_merged_rows( l_mrow_ix ).ATTRIBUTE12 is null then l_merged_rows( l_mrow_ix ).ATTRIBUTE12 := l_old_rows( orow_ix ).ATTRIBUTE12; end if;
2692                 if l_merged_rows( l_mrow_ix ).ATTRIBUTE13 is null then l_merged_rows( l_mrow_ix ).ATTRIBUTE13 := l_old_rows( orow_ix ).ATTRIBUTE13; end if;
2693                 if l_merged_rows( l_mrow_ix ).ATTRIBUTE14 is null then l_merged_rows( l_mrow_ix ).ATTRIBUTE14 := l_old_rows( orow_ix ).ATTRIBUTE14; end if;
2694                 if l_merged_rows( l_mrow_ix ).ATTRIBUTE15 is null then l_merged_rows( l_mrow_ix ).ATTRIBUTE15 := l_old_rows( orow_ix ).ATTRIBUTE15; end if;
2695                 if l_merged_rows( l_mrow_ix ).ATTRIBUTE2 is null then l_merged_rows( l_mrow_ix ).ATTRIBUTE2 := l_old_rows( orow_ix ).ATTRIBUTE2; end if;
2696                 if l_merged_rows( l_mrow_ix ).ATTRIBUTE3 is null then l_merged_rows( l_mrow_ix ).ATTRIBUTE3 := l_old_rows( orow_ix ).ATTRIBUTE3; end if;
2697                 if l_merged_rows( l_mrow_ix ).ATTRIBUTE4 is null then l_merged_rows( l_mrow_ix ).ATTRIBUTE4 := l_old_rows( orow_ix ).ATTRIBUTE4; end if;
2698                 if l_merged_rows( l_mrow_ix ).ATTRIBUTE5 is null then l_merged_rows( l_mrow_ix ).ATTRIBUTE5 := l_old_rows( orow_ix ).ATTRIBUTE5; end if;
2699                 if l_merged_rows( l_mrow_ix ).ATTRIBUTE6 is null then l_merged_rows( l_mrow_ix ).ATTRIBUTE6 := l_old_rows( orow_ix ).ATTRIBUTE6; end if;
2700                 if l_merged_rows( l_mrow_ix ).ATTRIBUTE7 is null then l_merged_rows( l_mrow_ix ).ATTRIBUTE7 := l_old_rows( orow_ix ).ATTRIBUTE7; end if;
2701                 if l_merged_rows( l_mrow_ix ).ATTRIBUTE8 is null then l_merged_rows( l_mrow_ix ).ATTRIBUTE8 := l_old_rows( orow_ix ).ATTRIBUTE8; end if;
2702                 if l_merged_rows( l_mrow_ix ).ATTRIBUTE9 is null then l_merged_rows( l_mrow_ix ).ATTRIBUTE9 := l_old_rows( orow_ix ).ATTRIBUTE9; end if;
2703                 if l_merged_rows( l_mrow_ix ).ATTRIBUTE_CATEGORY is null then l_merged_rows( l_mrow_ix ).ATTRIBUTE_CATEGORY := l_old_rows( orow_ix ).ATTRIBUTE_CATEGORY; end if;
2704                 if l_merged_rows( l_mrow_ix ).CHANGE_ID is null then l_merged_rows( l_mrow_ix ).CHANGE_ID := l_old_rows( orow_ix ).CHANGE_ID; end if;
2705                 if l_merged_rows( l_mrow_ix ).CHANGE_NOTICE is null then l_merged_rows( l_mrow_ix ).CHANGE_NOTICE := l_old_rows( orow_ix ).CHANGE_NOTICE; end if;
2706                 if l_merged_rows( l_mrow_ix ).CURRENT_PHASE_ID is null then l_merged_rows( l_mrow_ix ).CURRENT_PHASE_ID := l_old_rows( orow_ix ).CURRENT_PHASE_ID; end if;
2707                 if l_merged_rows( l_mrow_ix ).DESCRIPTION is null then l_merged_rows( l_mrow_ix ).DESCRIPTION := l_old_rows( orow_ix ).DESCRIPTION; end if;
2708                 if l_merged_rows( l_mrow_ix ).ECN_INITIATION_DATE is null then l_merged_rows( l_mrow_ix ).ECN_INITIATION_DATE := l_old_rows( orow_ix ).ECN_INITIATION_DATE; end if;
2709                 if l_merged_rows( l_mrow_ix ).EFFECTIVITY_DATE is null then l_merged_rows( l_mrow_ix ).EFFECTIVITY_DATE := l_old_rows( orow_ix ).EFFECTIVITY_DATE; end if;
2710                 if l_merged_rows( l_mrow_ix ).IMPLEMENTATION_DATE is null then l_merged_rows( l_mrow_ix ).IMPLEMENTATION_DATE := l_old_rows( orow_ix ).IMPLEMENTATION_DATE; end if;
2711                 if l_merged_rows( l_mrow_ix ).IMPLEMENTED_SERIAL_NUMBER is null then l_merged_rows( l_mrow_ix ).IMPLEMENTED_SERIAL_NUMBER := l_old_rows( orow_ix ).IMPLEMENTED_SERIAL_NUMBER; end if;
2712                 if l_merged_rows( l_mrow_ix ).LIFECYCLE_ID is null then l_merged_rows( l_mrow_ix ).LIFECYCLE_ID := l_old_rows( orow_ix ).LIFECYCLE_ID; end if;
2713                 if l_merged_rows( l_mrow_ix ).PROGRAM_APPLICATION_ID is null then l_merged_rows( l_mrow_ix ).PROGRAM_APPLICATION_ID := l_old_rows( orow_ix ).PROGRAM_APPLICATION_ID; end if;
2714                 if l_merged_rows( l_mrow_ix ).PROGRAM_ID is null then l_merged_rows( l_mrow_ix ).PROGRAM_ID := l_old_rows( orow_ix ).PROGRAM_ID; end if;
2715                 if l_merged_rows( l_mrow_ix ).PROGRAM_UPDATE_DATE is null then l_merged_rows( l_mrow_ix ).PROGRAM_UPDATE_DATE := l_old_rows( orow_ix ).PROGRAM_UPDATE_DATE; end if;
2716                 if l_merged_rows( l_mrow_ix ).REQUEST_ID is null then l_merged_rows( l_mrow_ix ).REQUEST_ID := l_old_rows( orow_ix ).REQUEST_ID; end if;
2717                 if l_merged_rows( l_mrow_ix ).REVISED_ITEM_SEQUENCE_ID is null then l_merged_rows( l_mrow_ix ).REVISED_ITEM_SEQUENCE_ID := l_old_rows( orow_ix ).REVISED_ITEM_SEQUENCE_ID; end if;
2718                 if l_merged_rows( l_mrow_ix ).REVISION is null then l_merged_rows( l_mrow_ix ).REVISION := l_old_rows( orow_ix ).REVISION; end if;
2719                 if l_merged_rows( l_mrow_ix ).REVISION_ID is null then l_merged_rows( l_mrow_ix ).REVISION_ID := l_old_rows( orow_ix ).REVISION_ID; end if;
2720                 if l_merged_rows( l_mrow_ix ).REVISION_LABEL is null then l_merged_rows( l_mrow_ix ).REVISION_LABEL := l_old_rows( orow_ix ).REVISION_LABEL; end if;
2721                 if l_merged_rows( l_mrow_ix ).REVISION_REASON is null then l_merged_rows( l_mrow_ix ).REVISION_REASON := l_old_rows( orow_ix ).REVISION_REASON; end if;
2722                 if l_merged_rows( l_mrow_ix ).TRANSACTION_ID is null then l_merged_rows( l_mrow_ix ).TRANSACTION_ID := l_old_rows( orow_ix ).TRANSACTION_ID; end if;
2723                 -- End Generated Code
2724 
2725             END LOOP; -- loop over old rows
2726 
2727             /*
2728             -- XXX: In case only null/invalid transaction types encountered, set transaction type to SYNC ?.
2729             IF l_merged_rows( l_mrow_ix ).TRANSACTION_TYPE IS NULL THEN
2730                 l_merged_rows( l_mrow_ix ).TRANSACTION_TYPE := G_TRANS_TYPE_SYNC;
2731             END IF;
2732             */
2733             IF l_merged_rows IS NOT NULL THEN
2734                 -- delete
2735                 Debug_Conc_Log( l_proc_log_prefix || 'Deleting ' || l_old_rowids.COUNT || ' old rows ...' );
2736                 FORALL rid_ix IN INDICES OF l_old_rowids
2737                     DELETE FROM MTL_ITEM_REVISIONS_INTERFACE
2738                         WHERE ROWID = l_old_rowids( rid_ix );
2739                 -- insert
2740                 Debug_Conc_Log( l_proc_log_prefix || 'Inserting ' || l_merged_rows.COUNT || ' merged rows ...' );
2741                 FORALL row_index IN INDICES OF l_merged_rows
2742                     INSERT INTO MTL_ITEM_REVISIONS_INTERFACE
2743                         VALUES l_merged_rows( row_index );
2744             END IF;
2745         END IF; -- ENDS IF l_old_rows.count <> 0
2746         IF p_commit = FND_API.G_TRUE THEN
2747             Debug_Conc_Log( l_proc_log_prefix || 'Committing' );
2748             COMMIT;
2749         END IF;
2750         Debug_Conc_Log( l_proc_log_prefix || 'Exiting' );
2751     END merge_revs;
2752 
2753     -- Merging Item Associations.
2754     PROCEDURE Merge_Associations  ( p_batch_id       IN NUMBER
2755                                   , p_is_pdh_batch   IN FLAG      DEFAULT NULL
2756                                   , p_commit         IN FLAG      DEFAULT FND_API.G_FALSE
2757                                   )
2758     IS
2759 
2760     CURSOR pdh_candidate_assocs_rows_cur IS
2761         SELECT *
2762         FROM
2763           (
2764             SELECT
2765               ROWID rid,
2766               Count(*) OVER ( PARTITION BY ITEM_NUMBER,
2767                                           PK1_VALUE,
2768                                           PK2_VALUE,
2769                                           PK3_VALUE,
2770                                           PK4_VALUE,
2771                                           PK5_VALUE,
2772                                           BUNDLE_ID,
2773                                           DATA_LEVEL_ID,
2774                                           ORGANIZATION_ID )
2775               CNT,
2776               Rank()  OVER ( ORDER BY ITEM_NUMBER,
2777                                       PK1_VALUE,
2778                                       PK2_VALUE,
2779                                       PK3_VALUE,
2780                                       PK4_VALUE,
2781                                       PK5_VALUE,
2782                                       BUNDLE_ID,
2783                                       DATA_LEVEL_ID,
2784                                       ORGANIZATION_ID )
2785               RNK,
2786               eiai.*
2787             FROM EGO_ITEM_ASSOCIATIONS_INTF eiai
2788             WHERE BATCH_ID = p_batch_id
2789             AND PROCESS_FLAG = 1
2790           )
2791         WHERE CNT > 1
2792         ORDER BY rnk, last_update_date DESC;
2793 
2794     CURSOR ss_candidate_assocs_rows_cur IS
2795         SELECT *
2796         FROM
2797           (
2798             SELECT
2799               ROWID rid,
2800               Count(*) OVER ( PARTITION BY SOURCE_SYSTEM_ID,
2801                                           SOURCE_SYSTEM_REFERENCE,
2802                                           PK1_VALUE,
2803                                           PK2_VALUE,
2804                                           PK3_VALUE,
2805                                           PK4_VALUE,
2806                                           PK5_VALUE,
2807                                           BUNDLE_ID,
2808                                           DATA_LEVEL_ID,
2809                                           ORGANIZATION_ID )
2810               CNT,
2811               Rank()  OVER ( ORDER BY SOURCE_SYSTEM_ID,
2812                                       SOURCE_SYSTEM_REFERENCE,
2813                                       PK1_VALUE,
2814                                       PK2_VALUE,
2815                                       PK3_VALUE,
2816                                       PK4_VALUE,
2817                                       PK5_VALUE,
2818                                       BUNDLE_ID,
2819                                       DATA_LEVEL_ID,
2820                                       ORGANIZATION_ID )
2821               RNK,
2822               eiai.*
2823             FROM EGO_ITEM_ASSOCIATIONS_INTF eiai
2824             WHERE BATCH_ID = p_batch_id
2825             AND PROCESS_FLAG = 0
2826           )
2827         WHERE CNT > 1
2828         ORDER BY rnk, last_update_date DESC;
2829 
2830     TYPE Assocs_Rows_With_RowId    IS TABLE OF ss_candidate_assocs_rows_cur%ROWTYPE;
2831 
2832     l_current_rank_handled          NUMBER;
2833     l_previous_rank_handled         NUMBER;
2834     l_new_row_index                 NUMBER := 0;
2835     l_old_row_ids                   UROWID_TABLE;
2836     l_current_merged_tran_type      VARCHAR2(10);
2837 
2838     l_new_row      IAssocs_Row;
2839     l_new_rows     IAssocs_Rows;
2840     l_old_rows     Assocs_Rows_With_RowId;
2841 
2842     BEGIN
2843       Debug_Conc_Log( 'Calling Merge_Associations ');
2844       l_current_rank_handled := 0;
2845       l_previous_rank_handled := 0;
2846 
2847       IF p_is_pdh_batch = FND_API.G_TRUE THEN
2848         -- 'PDH Batch'
2849         Debug_Conc_Log( 'Getting candidate rows for merging for PDH Batch ');
2850         OPEN pdh_candidate_assocs_rows_cur;
2851         FETCH pdh_candidate_assocs_rows_cur BULK COLLECT INTO l_old_rows;
2852         CLOSE pdh_candidate_assocs_rows_cur;
2853       ELSE
2854         -- 'SS Batch'
2855         Debug_Conc_Log( 'Getting candidate rows for merging for Source System Batch ');
2856         OPEN ss_candidate_assocs_rows_cur;
2857         FETCH ss_candidate_assocs_rows_cur BULK COLLECT INTO l_old_rows;
2858         CLOSE ss_candidate_assocs_rows_cur;
2859       END IF;
2860 
2861       Debug_Conc_Log( 'Merging '|| l_old_rows.COUNT || ' rows in associations table' );
2862 
2863       IF l_old_rows.COUNT < 1 THEN
2864         RETURN;
2865       END IF;
2866 
2867       l_old_row_ids := UROWID_TABLE( );
2868       l_old_row_ids.EXTEND( l_old_rows.COUNT );
2869 
2870       FOR l_index IN l_old_rows.FIRST .. l_old_rows.LAST
2871       LOOP
2872         l_old_row_ids( l_index ) := l_old_rows( l_index ).RID;
2873         l_current_rank_handled := l_old_rows( l_index ).RNK;
2874         IF l_current_rank_handled <> l_previous_rank_handled THEN
2875           l_new_row_index                := l_new_row_index + 1 ;
2876           l_new_rows( l_new_row_index )  := l_new_row;
2877           l_new_rows( l_new_row_index ).BATCH_ID                  := l_old_rows( l_index ).BATCH_ID;
2878           l_new_rows( l_new_row_index ).ORGANIZATION_ID           := l_old_rows( l_index ).ORGANIZATION_ID;
2879           l_new_rows( l_new_row_index ).PK1_VALUE                 := l_old_rows( l_index ).PK1_VALUE;
2880           l_new_rows( l_new_row_index ).PK2_VALUE                 := l_old_rows( l_index ).PK2_VALUE;
2881           l_new_rows( l_new_row_index ).PK3_VALUE                 := l_old_rows( l_index ).PK3_VALUE;
2882           l_new_rows( l_new_row_index ).PK4_VALUE                 := l_old_rows( l_index ).PK4_VALUE;
2883           l_new_rows( l_new_row_index ).PK5_VALUE                 := l_old_rows( l_index ).PK5_VALUE;
2884           l_new_rows( l_new_row_index ).DATA_LEVEL_ID             := l_old_rows( l_index ).DATA_LEVEL_ID;
2885           l_new_rows( l_new_row_index ).ORGANIZATION_CODE         := l_old_rows( l_index ).ORGANIZATION_CODE;
2886           l_new_rows( l_new_row_index ).PROCESS_FLAG              := l_old_rows( l_index ).PROCESS_FLAG;
2887           l_new_rows( l_new_row_index ).TRANSACTION_ID            := l_old_rows( l_index ).TRANSACTION_ID;
2888           l_new_rows( l_new_row_index ).ASSOCIATION_ID            := l_old_rows( l_index ).ASSOCIATION_ID;
2889           l_new_rows( l_new_row_index ).REQUEST_ID                := l_old_rows( l_index ).REQUEST_ID;
2890           l_new_rows( l_new_row_index ).PROGRAM_APPLICATION_ID    := l_old_rows( l_index ).PROGRAM_APPLICATION_ID;
2891           l_new_rows( l_new_row_index ).PROGRAM_ID                := l_old_rows( l_index ).PROGRAM_ID;
2892           l_new_rows( l_new_row_index ).PROGRAM_UPDATE_DATE       := l_old_rows( l_index ).PROGRAM_UPDATE_DATE;
2893           l_new_rows( l_new_row_index ).SUPPLIER_NAME             := l_old_rows( l_index ).SUPPLIER_NAME;
2894           l_new_rows( l_new_row_index ).SUPPLIER_NUMBER           := l_old_rows( l_index ).SUPPLIER_NUMBER;
2895           l_new_rows( l_new_row_index ).SUPPLIER_SITE_NAME        := l_old_rows( l_index ).SUPPLIER_SITE_NAME;
2896           l_new_rows( l_new_row_index ).DATA_LEVEL_NAME           := l_old_rows( l_index ).DATA_LEVEL_NAME;
2897           l_new_rows( l_new_row_index ).STYLE_ITEM_FLAG           := l_old_rows( l_index ).STYLE_ITEM_FLAG;
2898           l_new_rows( l_new_row_index ).STYLE_ITEM_ID             := l_old_rows( l_index ).STYLE_ITEM_ID;
2899           l_new_rows( l_new_row_index ).BUNDLE_ID                 := l_old_rows( l_index ).BUNDLE_ID;
2900           l_new_rows( l_new_row_index ).SOURCE_SYSTEM_ID          := l_old_rows( l_index ).SOURCE_SYSTEM_ID;
2901           l_new_rows( l_new_row_index ).SOURCE_SYSTEM_REFERENCE   := l_old_rows( l_index ).SOURCE_SYSTEM_REFERENCE;
2902           l_new_rows( l_new_row_index ).ITEM_NUMBER               := l_old_rows( l_index ).ITEM_NUMBER;
2903           l_new_rows( l_new_row_index ).CREATED_BY                := l_old_rows( l_index ).CREATED_BY;
2904           l_new_rows( l_new_row_index ).CREATION_DATE             := l_old_rows( l_index ).CREATION_DATE;
2905           l_new_rows( l_new_row_index ).LAST_UPDATED_BY           := l_old_rows( l_index ).LAST_UPDATED_BY;
2906           l_new_rows( l_new_row_index ).LAST_UPDATE_DATE          := l_old_rows( l_index ).LAST_UPDATE_DATE;
2907           l_new_rows( l_new_row_index ).LAST_UPDATE_LOGIN         := l_old_rows( l_index ).LAST_UPDATE_LOGIN;
2908           l_current_merged_tran_type                              := l_old_rows( l_index ).TRANSACTION_TYPE;
2909         END IF;
2910         IF l_new_rows( l_new_row_index ).INVENTORY_ITEM_ID IS NULL THEN
2911           l_new_rows( l_new_row_index ).INVENTORY_ITEM_ID := l_old_rows( l_index ).INVENTORY_ITEM_ID;
2912         END IF;
2913         IF l_new_rows( l_new_row_index ).PRIMARY_FLAG IS NULL
2914           AND l_new_rows( l_new_row_index ).STATUS_CODE <> 2
2915           AND l_old_rows( l_index ).PRIMARY_FLAG <> 'Y' THEN
2916           l_new_rows( l_new_row_index ).PRIMARY_FLAG := l_old_rows( l_index ).PRIMARY_FLAG;
2917         END IF;
2918         IF l_new_rows( l_new_row_index ).STATUS_CODE IS NULL
2919           AND l_new_rows( l_new_row_index ).PRIMARY_FLAG <> 'Y'
2920           AND l_old_rows( l_index ).STATUS_CODE <> '2' THEN
2921           l_new_rows( l_new_row_index ).STATUS_CODE := l_old_rows( l_index ).STATUS_CODE;
2922         END IF;
2923         IF l_new_rows( l_new_row_index ).TRANSACTION_TYPE IS NULL
2924           OR l_new_rows( l_new_row_index ).TRANSACTION_TYPE <> l_current_merged_tran_type THEN
2925           l_new_rows( l_new_row_index ).TRANSACTION_TYPE :=
2926                           CASE
2927                               WHEN l_new_rows( l_new_row_index ).TRANSACTION_TYPE = G_TRANS_TYPE_CREATE
2928                                   OR l_current_merged_tran_type = G_TRANS_TYPE_CREATE
2929                                 THEN G_TRANS_TYPE_CREATE
2930                               WHEN l_new_rows( l_new_row_index ).TRANSACTION_TYPE = G_TRANS_TYPE_SYNC
2931                                   OR l_current_merged_tran_type = G_TRANS_TYPE_SYNC
2932                                 THEN G_TRANS_TYPE_SYNC
2933                               WHEN l_new_rows( l_new_row_index ).TRANSACTION_TYPE = G_TRANS_TYPE_UPDATE
2934                                   OR l_current_merged_tran_type = G_TRANS_TYPE_UPDATE
2935                                 THEN G_TRANS_TYPE_UPDATE
2936                               ELSE NULL  -- Transaction type is not valid.
2937                             END;
2938           l_current_merged_tran_type := l_new_rows( l_new_row_index ).TRANSACTION_TYPE;
2939         END IF;
2940         l_previous_rank_handled := l_old_rows( l_index ).RNK;
2941       END LOOP;
2942 
2943       -- Updating default values for primary_flag and status_code
2944       -- primary_flag null is defaulted with  'N'
2945       -- status_code null is defaulted with 1
2946       UPDATE EGO_ITEM_ASSOCIATIONS_INTF
2947       SET PRIMARY_FLAG = 'N'
2948       WHERE PRIMARY_FLAG IS NULL
2949         AND BATCH_ID = p_batch_id;
2950 
2951       UPDATE EGO_ITEM_ASSOCIATIONS_INTF
2952       SET PRIMARY_FLAG = 'N'
2953       WHERE PRIMARY_FLAG IS NULL
2954         AND BATCH_ID = p_batch_id;
2955 
2956       IF l_new_rows IS NOT NULL THEN
2957         -- Delete
2958         FORALL rid_ix IN INDICES OF l_old_row_ids
2959             DELETE FROM EGO_ITEM_ASSOCIATIONS_INTF
2960                 WHERE ROWID = l_old_row_ids( rid_ix );
2961         -- Insert
2962         FORALL row_index IN INDICES OF l_new_rows
2963             INSERT INTO EGO_ITEM_ASSOCIATIONS_INTF
2964                 VALUES l_new_rows( row_index );
2965       END IF;
2966       Debug_Conc_Log( 'End of Call to Merge_Associations ');
2967 
2968     END merge_associations;
2969 
2970 
2971     PROCEDURE merge_batch   ( p_batch_id       IN NUMBER
2972                             , p_is_pdh_batch   IN FLAG      DEFAULT NULL
2973                             , p_ss_id          IN NUMBER    DEFAULT NULL
2974                             , p_master_org_id  IN NUMBER    DEFAULT NULL
2975                             , p_commit         IN FLAG      DEFAULT FND_API.G_FALSE
2976                             )
2977     IS
2978         l_org_id            NUMBER  := p_master_org_id;
2979         l_pdh_batch_flag    FLAG    := p_is_pdh_batch;
2980         l_ss_id             NUMBER  := p_ss_id;
2981     BEGIN
2982         Debug_Conc_Log( 'merge_batch: Starting for batch_id=' || TO_CHAR(p_batch_id) );
2983         IF  l_pdh_batch_flag IS NULL OR l_org_id IS NULL OR l_ss_id IS NULL THEN
2984             merge_params_from_batch_header( p_batch_id      => p_batch_id
2985                                           , x_is_pdh_batch  => l_pdh_batch_flag
2986                                           , x_ss_id         => l_ss_id
2987                                           , x_master_org_id => l_org_id
2988                                           );
2989         END IF;
2990 
2991         Debug_Conc_Log( 'merge_batch: Merging batch items' );
2992         MERGE_ITEMS(  p_batch_id        => p_batch_id
2993                    ,  p_master_org_id   => l_org_id
2994                    ,  p_is_pdh_batch    => l_pdh_batch_flag
2995                    ,  p_ss_id           => l_ss_id
2996                    ,  p_commit          => FND_API.G_FALSE
2997                    );
2998         Debug_Conc_Log( 'merge_batch: Merging batch revisions' );
2999         MERGE_REVS (  p_batch_id        => p_batch_id
3000                    ,  p_master_org_id   => l_org_id
3001                    ,  p_is_pdh_batch    => l_pdh_batch_flag
3002                    ,  p_ss_id           => l_ss_id
3003                    ,  p_commit          => FND_API.G_FALSE
3004                    );
3005         Debug_Conc_Log( 'merge_batch: Merging Associations' );
3006         merge_associations( p_batch_id       => p_batch_id
3007                           , p_is_pdh_batch   => l_pdh_batch_flag
3008                           , p_commit         => FND_API.G_FALSE
3009                           );
3010 
3011         Debug_Conc_Log( 'merge_batch: Merging batch extended attributes' );
3012         MERGE_ATTRS(  p_batch_id        => p_batch_id
3013                    ,  p_master_org_id   => l_org_id
3014                    ,  p_is_pdh_batch    => l_pdh_batch_flag
3015                    ,  p_ss_id           => l_ss_id
3016                    ,  p_commit          => FND_API.G_FALSE
3017                    );
3018         IF p_commit = FND_API.G_TRUE   THEN
3019             Debug_Conc_Log( 'merge_batch: Committing' );
3020             COMMIT;
3021         END IF;
3022         Debug_Conc_Log( 'merge_batch: Exiting' );
3023     END merge_batch;
3024 
3025     PROCEDURE merge_attrs   ( p_batch_id       IN NUMBER
3026                             , p_is_pdh_batch   IN FLAG      DEFAULT NULL
3027                             , p_ss_id          IN NUMBER    DEFAULT NULL
3028                             , p_master_org_id  IN NUMBER    DEFAULT NULL
3029                             , p_commit         IN FLAG      DEFAULT FND_API.G_FALSE
3030                             )
3031     IS
3032         l_org_id            NUMBER  := p_master_org_id;
3033         l_pdh_batch_flag    FLAG    := p_is_pdh_batch;
3034         l_ss_id             NUMBER  := p_ss_id;
3035     BEGIN
3036         Debug_Conc_Log( 'Starting merge_attrs for batch_id:' || to_char( p_batch_id ) );
3037         IF  l_pdh_batch_flag IS NULL OR l_org_id IS NULL OR l_ss_id IS NULL THEN
3038             merge_params_from_batch_header( p_batch_id      => p_batch_id
3039                                           , x_is_pdh_batch  => l_pdh_batch_flag
3040                                           , x_ss_id         => l_ss_id
3041                                           , x_master_org_id => l_org_id
3042                                           );
3043         END IF;
3044 
3045         Debug_Conc_Log( 'merge_attrs: merging item-level extended attributes' );
3046         MERGE_ITEM_ATTRS   (  p_batch_id        => p_batch_id
3047                            ,  p_master_org_id   => l_org_id
3048                            ,  p_is_pdh_batch    => l_pdh_batch_flag
3049                            ,  p_ss_id           => l_ss_id
3050                            ,  p_commit          => FND_API.G_FALSE
3051                            );
3052         Debug_Conc_Log( 'merge_attrs: merging revision-level extended attributes' );
3053         MERGE_REV_ATTRS(  p_batch_id        => p_batch_id
3054                        ,  p_master_org_id   => l_org_id
3055                        ,  p_is_pdh_batch    => l_pdh_batch_flag
3056                        ,  p_ss_id           => l_ss_id
3057                        ,  p_commit          => FND_API.G_FALSE
3058                        );
3059         IF p_commit = FND_API.G_TRUE   THEN
3060             Debug_Conc_Log( 'merge_attrs: Committing' );
3061             COMMIT;
3062         END IF;
3063         Debug_Conc_Log( 'merge_attrs: Exiting' );
3064     END merge_attrs;
3065 
3066     --=================================================================================================================--
3067     --------------------------------------- End of Merging Section ----------------------------------------------------
3068     --=================================================================================================================--
3069 
3070     --=================================================================================================================--
3071     --------------------------------- Start of Merging Section for Import -----------------------------------------------
3072     --=================================================================================================================--
3073     /*
3074      * All methods in this section does the following - For all the ready records in batch i.e. with process status = 1,
3075      *   if more than one record found for same primary keys (for example ITEM_NUMBER, ORGANIZATION_ID, REVISION for
3076      *   revisions interface table), then merge all the data to all the rows having same PKs. Then mark all other rows
3077      *   with process status = 111 and keep only one row with process status = 1. This way only one record will get
3078      *   processed and all the data from all the records will get processed. Later, after completion of all imports,
3079      *   the rows with process status = 111 will get converted to success or failure depending on the status of row
3080      *   that got processed.
3081      */
3082 
3083     -- Merges item and org assignments
3084     PROCEDURE Merge_Items_For_Import( p_batch_id       IN NUMBER
3085                                     , p_master_org_id  IN NUMBER
3086                                     )
3087     IS
3088         /*
3089          * This cursor is never executed.
3090          * It's only used for type definition.
3091          */
3092         CURSOR c_target_rec_type IS
3093             SELECT ROWID rid
3094                  , 0     cnt
3095                  , 0     rnk
3096                  , msii.*
3097             FROM MTL_SYSTEM_ITEMS_INTERFACE msii;
3098 
3099         TYPE MSII_ROWS      IS TABLE OF MSII_ROW INDEX BY BINARY_INTEGER;
3100         TYPE MSII_CURSOR    IS REF CURSOR;
3101         c_target_rows       MSII_CURSOR;
3102         old_row             c_target_rec_type%ROWTYPE;
3103 
3104         l_merged_rows   MSII_ROWS;
3105         l_new_rows      MSII_ROWS;
3106         l_merged_row    MSII_ROW;
3107         l_old_rowids    UROWID_TABLE;
3108 
3109         l_candidate_trans MTL_SYSTEM_ITEMS_INTERFACE.TRANSACTION_TYPE%TYPE;
3110 
3111         l_cur_rank      PLS_INTEGER := 0; -- because rank() starts at 1
3112         l_mrow_ix       PLS_INTEGER := 0;
3113         l_new_row_idx   PLS_INTEGER := 0;
3114 
3115         l_org_id        MTL_SYSTEM_ITEMS_INTERFACE.ORGANIZATION_ID%TYPE := p_master_org_id;
3116         l_proc_log_prefix     CONSTANT VARCHAR2( 30 ) := 'Merge_Items_For_Import - ';
3117     BEGIN
3118         Debug_Conc_Log( l_proc_log_prefix || 'Entering' );
3119         Debug_Conc_Log( l_proc_log_prefix || 'Batch ID: ' || p_batch_id );
3120         -- making sure that item_number always has a value for ready records
3121         UPDATE MTL_SYSTEM_ITEMS_INTERFACE MSII
3122         SET ITEM_NUMBER = (SELECT CONCATENATED_SEGMENTS
3123                            FROM MTL_SYSTEM_ITEMS_KFV
3124                            WHERE INVENTORY_ITEM_ID = MSII.INVENTORY_ITEM_ID
3125                              AND ORGANIZATION_ID = MSII.ORGANIZATION_ID)
3126         WHERE SET_PROCESS_ID = p_batch_id
3127           AND PROCESS_FLAG = 1
3128           AND INVENTORY_ITEM_ID IS NOT NULL
3129           AND ITEM_NUMBER IS NULL;
3130 
3131         OPEN c_target_rows FOR
3132           SELECT *
3133           FROM
3134             (SELECT
3135               ROWID rid,
3136               COUNT( * ) OVER ( PARTITION BY ITEM_NUMBER, ORGANIZATION_ID) cnt,
3137               RANK() OVER ( ORDER BY ITEM_NUMBER, ORGANIZATION_ID) rnk,
3138               msii.*
3139             FROM MTL_SYSTEM_ITEMS_INTERFACE msii
3140             WHERE PROCESS_FLAG   = 1
3141               AND SET_PROCESS_ID = p_batch_id
3142               AND ITEM_NUMBER IS NOT NULL
3143               AND ORGANIZATION_ID IS NOT NULL
3144               AND EXISTS
3145                   (SELECT NULL
3146                    FROM MTL_PARAMETERS mp
3147                    WHERE mp.ORGANIZATION_ID        = msii.ORGANIZATION_ID
3148                      AND mp.MASTER_ORGANIZATION_ID = l_org_id
3149                   )
3150             ) sub
3151           WHERE sub.cnt > 1
3152           ORDER BY rnk, last_update_date DESC NULLS LAST, interface_table_unique_id DESC NULLS LAST;
3153 
3154         l_old_rowids := UROWID_TABLE( );
3155         l_new_row_idx := 0;
3156         LOOP
3157             FETCH c_target_rows INTO old_row;
3158             IF c_target_rows%NOTFOUND AND l_new_row_idx > 0 THEN
3159                 FOR i IN 1..l_new_row_idx LOOP
3160                     Debug_Conc_Log( l_proc_log_prefix || '  No More records found for processing.');
3161                     Debug_Conc_Log( l_proc_log_prefix || '  Creating merged record for SSR, SS-ID = ' ||
3162                                                          l_new_rows( i ).SOURCE_SYSTEM_REFERENCE || ',' ||
3163                                                          l_new_rows( i ).SOURCE_SYSTEM_ID);
3164                     l_mrow_ix := l_mrow_ix + 1;
3165                     l_merged_rows( l_mrow_ix )                              := l_merged_row;
3166                     l_merged_rows( l_mrow_ix ).SET_PROCESS_ID               := l_new_rows( i ).SET_PROCESS_ID;
3167                     l_merged_rows( l_mrow_ix ).PROCESS_FLAG                 := l_new_rows( i ).PROCESS_FLAG;
3168                     l_merged_rows( l_mrow_ix ).SOURCE_SYSTEM_ID             := l_new_rows( i ).SOURCE_SYSTEM_ID;
3169                     l_merged_rows( l_mrow_ix ).SOURCE_SYSTEM_REFERENCE      := l_new_rows( i ).SOURCE_SYSTEM_REFERENCE;
3170                     l_merged_rows( l_mrow_ix ).SOURCE_SYSTEM_REFERENCE_DESC := l_new_rows( i ).SOURCE_SYSTEM_REFERENCE_DESC;
3171                     l_merged_rows( l_mrow_ix ).CONFIRM_STATUS               := l_new_rows( i ).CONFIRM_STATUS;
3172                     l_merged_rows( l_mrow_ix ).CREATED_BY                   := l_new_rows( i ).CREATED_BY;
3173                     l_merged_rows( l_mrow_ix ).LAST_UPDATED_BY              := l_new_rows( i ).LAST_UPDATED_BY;
3174                     l_merged_rows( l_mrow_ix ).REQUEST_ID                   := FND_GLOBAL.CONC_REQUEST_ID;
3175                     l_merged_rows( l_mrow_ix ).PROGRAM_APPLICATION_ID       := FND_GLOBAL.PROG_APPL_ID;
3176                     l_merged_rows( l_mrow_ix ).PROGRAM_ID                   := FND_GLOBAL.CONC_PROGRAM_ID;
3177                     l_merged_rows( l_mrow_ix ).PROGRAM_UPDATE_DATE          := SYSDATE;
3178                 END LOOP; --FOR i IN 1..l_new_row_idx LOOP
3179             END IF; --IF l_new_row_idx > 0 THEN
3180             EXIT WHEN c_target_rows%NOTFOUND;
3181 
3182             l_old_rowids.EXTEND;
3183             l_old_rowids( l_old_rowids.LAST ) := old_row.RID;
3184 
3185             IF( old_row.RNK <> l_cur_rank ) THEN
3186                 -- check if already merged rows exists, then insert them into l_merged_rows
3187                 -- when a final merged record is ready for one item-org then for each source system reference
3188                 -- we will insert a merged record i.e. ssr, msii.merged_record
3189                 IF l_new_row_idx > 0 THEN
3190                     FOR i IN 1..l_new_row_idx LOOP
3191                         Debug_Conc_Log( l_proc_log_prefix || '  Creating merged record for SSR, SS-ID = ' ||
3192                                                              l_new_rows( i ).SOURCE_SYSTEM_REFERENCE || ', ' ||
3193                                                              l_new_rows( i ).SOURCE_SYSTEM_ID);
3194                         l_mrow_ix := l_mrow_ix + 1;
3195                         l_merged_rows( l_mrow_ix )                              := l_merged_row;
3196                         l_merged_rows( l_mrow_ix ).SET_PROCESS_ID               := l_new_rows( i ).SET_PROCESS_ID;
3197                         l_merged_rows( l_mrow_ix ).PROCESS_FLAG                 := l_new_rows( i ).PROCESS_FLAG;
3198                         l_merged_rows( l_mrow_ix ).SOURCE_SYSTEM_ID             := l_new_rows( i ).SOURCE_SYSTEM_ID;
3199                         l_merged_rows( l_mrow_ix ).SOURCE_SYSTEM_REFERENCE      := l_new_rows( i ).SOURCE_SYSTEM_REFERENCE;
3200                         l_merged_rows( l_mrow_ix ).SOURCE_SYSTEM_REFERENCE_DESC := l_new_rows( i ).SOURCE_SYSTEM_REFERENCE_DESC;
3201                         l_merged_rows( l_mrow_ix ).CONFIRM_STATUS               := l_new_rows( i ).CONFIRM_STATUS;
3202                         l_merged_rows( l_mrow_ix ).CREATED_BY                   := l_new_rows( i ).CREATED_BY;
3203                         l_merged_rows( l_mrow_ix ).LAST_UPDATED_BY              := l_new_rows( i ).LAST_UPDATED_BY;
3204                         l_merged_rows( l_mrow_ix ).REQUEST_ID                   := FND_GLOBAL.CONC_REQUEST_ID;
3205                         l_merged_rows( l_mrow_ix ).PROGRAM_APPLICATION_ID       := FND_GLOBAL.PROG_APPL_ID;
3206                         l_merged_rows( l_mrow_ix ).PROGRAM_ID                   := FND_GLOBAL.CONC_PROGRAM_ID;
3207                         l_merged_rows( l_mrow_ix ).PROGRAM_UPDATE_DATE          := SYSDATE;
3208                     END LOOP; --FOR i IN 1..l_new_row_idx LOOP
3209                 END IF; --IF l_new_row_idx > 0 THEN
3210                 l_cur_rank := old_row.RNK;
3211                 Debug_Conc_Log( l_proc_log_prefix || '  Starting new merged row; rank = '|| l_cur_rank );
3212                 Debug_Conc_Log( l_proc_log_prefix || '    Item, Org-ID, Item-ID = ' ||
3213                                                      old_row.ITEM_NUMBER || ',' ||
3214                                                      old_row.ORGANIZATION_ID || ', ' ||
3215                                                      old_row.INVENTORY_ITEM_ID);
3216                 l_new_rows.DELETE;
3217                 l_new_row_idx := 1;
3218                 l_new_rows( l_new_row_idx ).PROCESS_FLAG              := old_row.PROCESS_FLAG;
3219                 -- initializing l_merged_row . This row will contain the current merged row for an item
3220                 l_merged_row := NULL;
3221                 l_merged_row.SET_PROCESS_ID            := p_batch_id;
3222                 l_merged_row.PROCESS_FLAG              := old_row.PROCESS_FLAG;
3223             ELSE
3224                 Debug_Conc_Log( l_proc_log_prefix || '  Merging another record into current merged row; rank = '|| l_cur_rank );
3225                 Debug_Conc_Log( l_proc_log_prefix || '    Item, Org-ID, Item-ID = ' ||
3226                                                      old_row.ITEM_NUMBER || ', ' ||
3227                                                      old_row.ORGANIZATION_ID || ', ' ||
3228                                                      old_row.INVENTORY_ITEM_ID);
3229                 l_new_row_idx := l_new_row_idx + 1;
3230                 l_new_rows( l_new_row_idx ).PROCESS_FLAG              := 111;
3231             END IF;
3232 
3233             l_new_rows( l_new_row_idx ).SET_PROCESS_ID               := p_batch_id;
3234             l_new_rows( l_new_row_idx ).SOURCE_SYSTEM_ID             := old_row.SOURCE_SYSTEM_ID;
3235             l_new_rows( l_new_row_idx ).SOURCE_SYSTEM_REFERENCE      := old_row.SOURCE_SYSTEM_REFERENCE;
3236             l_new_rows( l_new_row_idx ).SOURCE_SYSTEM_REFERENCE_DESC := old_row.SOURCE_SYSTEM_REFERENCE_DESC;
3237             l_new_rows( l_new_row_idx ).CONFIRM_STATUS               := old_row.CONFIRM_STATUS;
3238             l_new_rows( l_new_row_idx ).CREATED_BY                   := old_row.CREATED_BY;
3239             l_new_rows( l_new_row_idx ).LAST_UPDATED_BY              := old_row.LAST_UPDATED_BY;
3240 
3241             -- Special Cases:
3242             -- Transaction type
3243             l_candidate_trans := UPPER( old_row.TRANSACTION_TYPE );
3244 
3245             IF      l_merged_row.TRANSACTION_TYPE IS NULL
3246                 OR  l_merged_row.TRANSACTION_TYPE <> l_candidate_trans     -- <> filters out nulls
3247             THEN
3248                 -- CREATE > SYNC > UPDATE : order of case expression matters
3249                 l_merged_row.TRANSACTION_TYPE :=
3250                     CASE
3251                         WHEN l_merged_row.TRANSACTION_TYPE = G_TRANS_TYPE_CREATE
3252                           OR l_candidate_trans = G_TRANS_TYPE_CREATE                            THEN G_TRANS_TYPE_CREATE
3253                         WHEN l_merged_row.TRANSACTION_TYPE = G_TRANS_TYPE_SYNC
3254                           OR l_candidate_trans = G_TRANS_TYPE_SYNC                              THEN G_TRANS_TYPE_SYNC
3255                         WHEN l_merged_row.TRANSACTION_TYPE = G_TRANS_TYPE_UPDATE
3256                           OR l_candidate_trans = G_TRANS_TYPE_UPDATE                            THEN G_TRANS_TYPE_UPDATE
3257                         ELSE NULL -- INVALID transaction types encountered so far ...
3258                     END;
3259             END IF;
3260 
3261             -- The following columns need to be treated as atomic groups
3262             -- 1. Item Identifier
3263             IF      l_merged_row.INVENTORY_ITEM_ID  IS NULL
3264                 AND l_merged_row.ITEM_NUMBER        IS NULL
3265                 AND l_merged_row.SEGMENT1           IS NULL
3266                 AND l_merged_row.SEGMENT2           IS NULL
3267                 AND l_merged_row.SEGMENT3           IS NULL
3268                 AND l_merged_row.SEGMENT4           IS NULL
3269                 AND l_merged_row.SEGMENT5           IS NULL
3270                 AND l_merged_row.SEGMENT6           IS NULL
3271                 AND l_merged_row.SEGMENT7           IS NULL
3272                 AND l_merged_row.SEGMENT8           IS NULL
3273                 AND l_merged_row.SEGMENT9           IS NULL
3274                 AND l_merged_row.SEGMENT10          IS NULL
3275                 AND l_merged_row.SEGMENT11          IS NULL
3276                 AND l_merged_row.SEGMENT12          IS NULL
3277                 AND l_merged_row.SEGMENT13          IS NULL
3278                 AND l_merged_row.SEGMENT14          IS NULL
3279                 AND l_merged_row.SEGMENT15          IS NULL
3280                 AND l_merged_row.SEGMENT16          IS NULL
3281                 AND l_merged_row.SEGMENT17          IS NULL
3282                 AND l_merged_row.SEGMENT18          IS NULL
3283                 AND l_merged_row.SEGMENT19          IS NULL
3284                 AND l_merged_row.SEGMENT20          IS NULL
3285             THEN
3286                 l_merged_row.INVENTORY_ITEM_ID  := old_row.INVENTORY_ITEM_ID;
3287                 l_merged_row.ITEM_NUMBER        := old_row.ITEM_NUMBER;
3288                 l_merged_row.SEGMENT1           := old_row.SEGMENT1;
3289                 l_merged_row.SEGMENT2           := old_row.SEGMENT2;
3290                 l_merged_row.SEGMENT3           := old_row.SEGMENT3;
3291                 l_merged_row.SEGMENT4           := old_row.SEGMENT4;
3292                 l_merged_row.SEGMENT5           := old_row.SEGMENT5;
3293                 l_merged_row.SEGMENT6           := old_row.SEGMENT6;
3294                 l_merged_row.SEGMENT7           := old_row.SEGMENT7;
3295                 l_merged_row.SEGMENT8           := old_row.SEGMENT8;
3296                 l_merged_row.SEGMENT9           := old_row.SEGMENT9;
3297                 l_merged_row.SEGMENT10          := old_row.SEGMENT10;
3298                 l_merged_row.SEGMENT11          := old_row.SEGMENT11;
3299                 l_merged_row.SEGMENT12          := old_row.SEGMENT12;
3300                 l_merged_row.SEGMENT13          := old_row.SEGMENT13;
3301                 l_merged_row.SEGMENT14          := old_row.SEGMENT14;
3302                 l_merged_row.SEGMENT15          := old_row.SEGMENT15;
3303                 l_merged_row.SEGMENT16          := old_row.SEGMENT16;
3304                 l_merged_row.SEGMENT17          := old_row.SEGMENT17;
3305                 l_merged_row.SEGMENT18          := old_row.SEGMENT18;
3306                 l_merged_row.SEGMENT19          := old_row.SEGMENT19;
3307                 l_merged_row.SEGMENT20          := old_row.SEGMENT20;
3308             END IF;
3309 
3310             -- 2. Template Identifier
3311             IF      l_merged_row.TEMPLATE_ID        IS NULL
3312                 AND l_merged_row.TEMPLATE_NAME      IS NULL
3313             THEN
3314                 l_merged_row.TEMPLATE_ID    := old_row.TEMPLATE_ID ;
3315                 l_merged_row.TEMPLATE_NAME  := old_row.TEMPLATE_NAME ;
3316             END IF;
3317 
3318             -- 3. Item Catalog Category
3319             IF      l_merged_row.ITEM_CATALOG_GROUP_ID      IS NULL
3320                 AND l_merged_row.ITEM_CATALOG_GROUP_NAME    IS NULL
3321             THEN
3322                 l_merged_row.ITEM_CATALOG_GROUP_ID      := old_row.ITEM_CATALOG_GROUP_ID ;
3323                 l_merged_row.ITEM_CATALOG_GROUP_NAME    := old_row.ITEM_CATALOG_GROUP_NAME ;
3324             END IF;
3325 
3326             -- 4. Primary UOM
3327             IF      l_merged_row.PRIMARY_UOM_CODE           IS NULL
3328                 AND l_merged_row.PRIMARY_UNIT_OF_MEASURE    IS NULL
3329             THEN
3330                 l_merged_row.PRIMARY_UOM_CODE           := old_row.PRIMARY_UOM_CODE ;
3331                 l_merged_row.PRIMARY_UNIT_OF_MEASURE    := old_row.PRIMARY_UNIT_OF_MEASURE ;
3332             END IF;
3333 
3334             -- 5. Organization
3335             IF      l_merged_row.ORGANIZATION_ID    IS NULL
3336                 AND l_merged_row.ORGANIZATION_CODE  IS NULL
3337             THEN
3338                 l_merged_row.ORGANIZATION_ID        := old_row.ORGANIZATION_ID ;
3339                 l_merged_row.ORGANIZATION_CODE      := old_row.ORGANIZATION_CODE ;
3340             END IF;
3341 
3342             -- 6. Copy Organization
3343             IF      l_merged_row.COPY_ORGANIZATION_ID    IS NULL
3344                 AND l_merged_row.COPY_ORGANIZATION_CODE  IS NULL
3345             THEN
3346                 l_merged_row.COPY_ORGANIZATION_ID        := old_row.COPY_ORGANIZATION_ID ;
3347                 l_merged_row.COPY_ORGANIZATION_CODE      := old_row.COPY_ORGANIZATION_CODE ;
3348             END IF;
3349 
3350             if l_merged_row.ACCEPTABLE_EARLY_DAYS is null then l_merged_row.ACCEPTABLE_EARLY_DAYS := old_row.ACCEPTABLE_EARLY_DAYS; end if;
3351             if l_merged_row.ACCEPTABLE_RATE_DECREASE is null then l_merged_row.ACCEPTABLE_RATE_DECREASE := old_row.ACCEPTABLE_RATE_DECREASE; end if;
3352             if l_merged_row.ACCEPTABLE_RATE_INCREASE is null then l_merged_row.ACCEPTABLE_RATE_INCREASE := old_row.ACCEPTABLE_RATE_INCREASE; end if;
3353             if l_merged_row.ACCOUNTING_RULE_ID is null then l_merged_row.ACCOUNTING_RULE_ID := old_row.ACCOUNTING_RULE_ID; end if;
3354             if l_merged_row.ALLOWED_UNITS_LOOKUP_CODE is null then l_merged_row.ALLOWED_UNITS_LOOKUP_CODE := old_row.ALLOWED_UNITS_LOOKUP_CODE; end if;
3355             if l_merged_row.ALLOW_EXPRESS_DELIVERY_FLAG is null then l_merged_row.ALLOW_EXPRESS_DELIVERY_FLAG := old_row.ALLOW_EXPRESS_DELIVERY_FLAG; end if;
3356             if l_merged_row.ALLOW_ITEM_DESC_UPDATE_FLAG is null then l_merged_row.ALLOW_ITEM_DESC_UPDATE_FLAG := old_row.ALLOW_ITEM_DESC_UPDATE_FLAG; end if;
3357             if l_merged_row.ALLOW_SUBSTITUTE_RECEIPTS_FLAG is null then l_merged_row.ALLOW_SUBSTITUTE_RECEIPTS_FLAG := old_row.ALLOW_SUBSTITUTE_RECEIPTS_FLAG; end if;
3358             if l_merged_row.ALLOW_UNORDERED_RECEIPTS_FLAG is null then l_merged_row.ALLOW_UNORDERED_RECEIPTS_FLAG := old_row.ALLOW_UNORDERED_RECEIPTS_FLAG; end if;
3359             if l_merged_row.ASN_AUTOEXPIRE_FLAG is null then l_merged_row.ASN_AUTOEXPIRE_FLAG := old_row.ASN_AUTOEXPIRE_FLAG; end if;
3360             if l_merged_row.ASSET_CATEGORY_ID is null then l_merged_row.ASSET_CATEGORY_ID := old_row.ASSET_CATEGORY_ID; end if;
3361             if l_merged_row.ASSET_CREATION_CODE is null then l_merged_row.ASSET_CREATION_CODE := old_row.ASSET_CREATION_CODE; end if;
3362             if l_merged_row.ATO_FORECAST_CONTROL is null then l_merged_row.ATO_FORECAST_CONTROL := old_row.ATO_FORECAST_CONTROL; end if;
3363             if l_merged_row.ATP_COMPONENTS_FLAG is null then l_merged_row.ATP_COMPONENTS_FLAG := old_row.ATP_COMPONENTS_FLAG; end if;
3364             if l_merged_row.ATP_FLAG is null then l_merged_row.ATP_FLAG := old_row.ATP_FLAG; end if;
3365             if l_merged_row.ATP_RULE_ID is null then l_merged_row.ATP_RULE_ID := old_row.ATP_RULE_ID; end if;
3366             if l_merged_row.ATTRIBUTE1 is null then l_merged_row.ATTRIBUTE1 := old_row.ATTRIBUTE1; end if;
3367             if l_merged_row.ATTRIBUTE10 is null then l_merged_row.ATTRIBUTE10 := old_row.ATTRIBUTE10; end if;
3368             if l_merged_row.ATTRIBUTE11 is null then l_merged_row.ATTRIBUTE11 := old_row.ATTRIBUTE11; end if;
3369             if l_merged_row.ATTRIBUTE12 is null then l_merged_row.ATTRIBUTE12 := old_row.ATTRIBUTE12; end if;
3370             if l_merged_row.ATTRIBUTE13 is null then l_merged_row.ATTRIBUTE13 := old_row.ATTRIBUTE13; end if;
3371             if l_merged_row.ATTRIBUTE14 is null then l_merged_row.ATTRIBUTE14 := old_row.ATTRIBUTE14; end if;
3372             if l_merged_row.ATTRIBUTE15 is null then l_merged_row.ATTRIBUTE15 := old_row.ATTRIBUTE15; end if;
3373             if l_merged_row.ATTRIBUTE16 is null then l_merged_row.ATTRIBUTE16 := old_row.ATTRIBUTE16; end if;
3374             if l_merged_row.ATTRIBUTE17 is null then l_merged_row.ATTRIBUTE17 := old_row.ATTRIBUTE17; end if;
3375             if l_merged_row.ATTRIBUTE18 is null then l_merged_row.ATTRIBUTE18 := old_row.ATTRIBUTE18; end if;
3376             if l_merged_row.ATTRIBUTE19 is null then l_merged_row.ATTRIBUTE19 := old_row.ATTRIBUTE19; end if;
3377             if l_merged_row.ATTRIBUTE2 is null then l_merged_row.ATTRIBUTE2 := old_row.ATTRIBUTE2; end if;
3378             if l_merged_row.ATTRIBUTE20 is null then l_merged_row.ATTRIBUTE20 := old_row.ATTRIBUTE20; end if;
3379             if l_merged_row.ATTRIBUTE21 is null then l_merged_row.ATTRIBUTE21 := old_row.ATTRIBUTE21; end if;
3380             if l_merged_row.ATTRIBUTE22 is null then l_merged_row.ATTRIBUTE22 := old_row.ATTRIBUTE22; end if;
3381             if l_merged_row.ATTRIBUTE23 is null then l_merged_row.ATTRIBUTE23 := old_row.ATTRIBUTE23; end if;
3382             if l_merged_row.ATTRIBUTE24 is null then l_merged_row.ATTRIBUTE24 := old_row.ATTRIBUTE24; end if;
3383             if l_merged_row.ATTRIBUTE25 is null then l_merged_row.ATTRIBUTE25 := old_row.ATTRIBUTE25; end if;
3384             if l_merged_row.ATTRIBUTE26 is null then l_merged_row.ATTRIBUTE26 := old_row.ATTRIBUTE26; end if;
3385             if l_merged_row.ATTRIBUTE27 is null then l_merged_row.ATTRIBUTE27 := old_row.ATTRIBUTE27; end if;
3386             if l_merged_row.ATTRIBUTE28 is null then l_merged_row.ATTRIBUTE28 := old_row.ATTRIBUTE28; end if;
3387             if l_merged_row.ATTRIBUTE29 is null then l_merged_row.ATTRIBUTE29 := old_row.ATTRIBUTE29; end if;
3388             if l_merged_row.ATTRIBUTE3 is null then l_merged_row.ATTRIBUTE3 := old_row.ATTRIBUTE3; end if;
3389             if l_merged_row.ATTRIBUTE30 is null then l_merged_row.ATTRIBUTE30 := old_row.ATTRIBUTE30; end if;
3390             if l_merged_row.ATTRIBUTE4 is null then l_merged_row.ATTRIBUTE4 := old_row.ATTRIBUTE4; end if;
3391             if l_merged_row.ATTRIBUTE5 is null then l_merged_row.ATTRIBUTE5 := old_row.ATTRIBUTE5; end if;
3392             if l_merged_row.ATTRIBUTE6 is null then l_merged_row.ATTRIBUTE6 := old_row.ATTRIBUTE6; end if;
3393             if l_merged_row.ATTRIBUTE7 is null then l_merged_row.ATTRIBUTE7 := old_row.ATTRIBUTE7; end if;
3394             if l_merged_row.ATTRIBUTE8 is null then l_merged_row.ATTRIBUTE8 := old_row.ATTRIBUTE8; end if;
3395             if l_merged_row.ATTRIBUTE9 is null then l_merged_row.ATTRIBUTE9 := old_row.ATTRIBUTE9; end if;
3396             if l_merged_row.ATTRIBUTE_CATEGORY is null then l_merged_row.ATTRIBUTE_CATEGORY := old_row.ATTRIBUTE_CATEGORY; end if;
3397             if l_merged_row.AUTO_CREATED_CONFIG_FLAG is null then l_merged_row.AUTO_CREATED_CONFIG_FLAG := old_row.AUTO_CREATED_CONFIG_FLAG; end if;
3398             if l_merged_row.AUTO_LOT_ALPHA_PREFIX is null then l_merged_row.AUTO_LOT_ALPHA_PREFIX := old_row.AUTO_LOT_ALPHA_PREFIX; end if;
3399             if l_merged_row.AUTO_REDUCE_MPS is null then l_merged_row.AUTO_REDUCE_MPS := old_row.AUTO_REDUCE_MPS; end if;
3400             if l_merged_row.AUTO_SERIAL_ALPHA_PREFIX is null then l_merged_row.AUTO_SERIAL_ALPHA_PREFIX := old_row.AUTO_SERIAL_ALPHA_PREFIX; end if;
3401             if l_merged_row.BACK_ORDERABLE_FLAG is null then l_merged_row.BACK_ORDERABLE_FLAG := old_row.BACK_ORDERABLE_FLAG; end if;
3402             if l_merged_row.BASE_ITEM_ID is null then l_merged_row.BASE_ITEM_ID := old_row.BASE_ITEM_ID; end if;
3403             if l_merged_row.BASE_WARRANTY_SERVICE_ID is null then l_merged_row.BASE_WARRANTY_SERVICE_ID := old_row.BASE_WARRANTY_SERVICE_ID; end if;
3404             if l_merged_row.BOM_ENABLED_FLAG is null then l_merged_row.BOM_ENABLED_FLAG := old_row.BOM_ENABLED_FLAG; end if;
3405             if l_merged_row.BOM_ITEM_TYPE is null then l_merged_row.BOM_ITEM_TYPE := old_row.BOM_ITEM_TYPE; end if;
3406             if l_merged_row.BUILD_IN_WIP_FLAG is null then l_merged_row.BUILD_IN_WIP_FLAG := old_row.BUILD_IN_WIP_FLAG; end if;
3407             if l_merged_row.BULK_PICKED_FLAG is null then l_merged_row.BULK_PICKED_FLAG := old_row.BULK_PICKED_FLAG; end if;
3408             if l_merged_row.BUYER_ID is null then l_merged_row.BUYER_ID := old_row.BUYER_ID; end if;
3409             if l_merged_row.CARRYING_COST is null then l_merged_row.CARRYING_COST := old_row.CARRYING_COST; end if;
3410             if l_merged_row.CAS_NUMBER is null then l_merged_row.CAS_NUMBER := old_row.CAS_NUMBER; end if;
3411             if l_merged_row.CATALOG_STATUS_FLAG is null then l_merged_row.CATALOG_STATUS_FLAG := old_row.CATALOG_STATUS_FLAG; end if;
3412             if l_merged_row.CHANGE_ID is null then l_merged_row.CHANGE_ID := old_row.CHANGE_ID; end if;
3413             if l_merged_row.CHANGE_LINE_ID is null then l_merged_row.CHANGE_LINE_ID := old_row.CHANGE_LINE_ID; end if;
3414             if l_merged_row.CHARGE_PERIODICITY_CODE is null then l_merged_row.CHARGE_PERIODICITY_CODE := old_row.CHARGE_PERIODICITY_CODE; end if;
3415             if l_merged_row.CHECK_SHORTAGES_FLAG is null then l_merged_row.CHECK_SHORTAGES_FLAG := old_row.CHECK_SHORTAGES_FLAG; end if;
3416             if l_merged_row.CHILD_LOT_FLAG is null then l_merged_row.CHILD_LOT_FLAG := old_row.CHILD_LOT_FLAG; end if;
3417             if l_merged_row.CHILD_LOT_PREFIX is null then l_merged_row.CHILD_LOT_PREFIX := old_row.CHILD_LOT_PREFIX; end if;
3418             if l_merged_row.CHILD_LOT_STARTING_NUMBER is null then l_merged_row.CHILD_LOT_STARTING_NUMBER := old_row.CHILD_LOT_STARTING_NUMBER; end if;
3419             if l_merged_row.CHILD_LOT_VALIDATION_FLAG is null then l_merged_row.CHILD_LOT_VALIDATION_FLAG := old_row.CHILD_LOT_VALIDATION_FLAG; end if;
3420             if l_merged_row.COLLATERAL_FLAG is null then l_merged_row.COLLATERAL_FLAG := old_row.COLLATERAL_FLAG; end if;
3421             if l_merged_row.COMMS_ACTIVATION_REQD_FLAG is null then l_merged_row.COMMS_ACTIVATION_REQD_FLAG := old_row.COMMS_ACTIVATION_REQD_FLAG; end if;
3422             if l_merged_row.COMMS_NL_TRACKABLE_FLAG is null then l_merged_row.COMMS_NL_TRACKABLE_FLAG := old_row.COMMS_NL_TRACKABLE_FLAG; end if;
3423             if l_merged_row.CONFIG_MATCH is null then l_merged_row.CONFIG_MATCH := old_row.CONFIG_MATCH; end if;
3424             if l_merged_row.CONFIG_MODEL_TYPE is null then l_merged_row.CONFIG_MODEL_TYPE := old_row.CONFIG_MODEL_TYPE; end if;
3425             if l_merged_row.CONFIG_ORGS is null then l_merged_row.CONFIG_ORGS := old_row.CONFIG_ORGS; end if;
3426             if l_merged_row.CONSIGNED_FLAG is null then l_merged_row.CONSIGNED_FLAG := old_row.CONSIGNED_FLAG; end if;
3427             if l_merged_row.CONTAINER_ITEM_FLAG is null then l_merged_row.CONTAINER_ITEM_FLAG := old_row.CONTAINER_ITEM_FLAG; end if;
3428             if l_merged_row.CONTAINER_TYPE_CODE is null then l_merged_row.CONTAINER_TYPE_CODE := old_row.CONTAINER_TYPE_CODE; end if;
3429             if l_merged_row.CONTINOUS_TRANSFER is null then l_merged_row.CONTINOUS_TRANSFER := old_row.CONTINOUS_TRANSFER; end if;
3430             if l_merged_row.CONTRACT_ITEM_TYPE_CODE is null then l_merged_row.CONTRACT_ITEM_TYPE_CODE := old_row.CONTRACT_ITEM_TYPE_CODE; end if;
3431             if l_merged_row.CONVERGENCE is null then l_merged_row.CONVERGENCE := old_row.CONVERGENCE; end if;
3432             if l_merged_row.COPY_ITEM_ID is null then l_merged_row.COPY_ITEM_ID := old_row.COPY_ITEM_ID; end if;
3433             if l_merged_row.COPY_ITEM_NUMBER is null then l_merged_row.COPY_ITEM_NUMBER := old_row.COPY_ITEM_NUMBER; end if;
3434             if l_merged_row.COPY_LOT_ATTRIBUTE_FLAG is null then l_merged_row.COPY_LOT_ATTRIBUTE_FLAG := old_row.COPY_LOT_ATTRIBUTE_FLAG; end if;
3435             if l_merged_row.COSTING_ENABLED_FLAG is null then l_merged_row.COSTING_ENABLED_FLAG := old_row.COSTING_ENABLED_FLAG; end if;
3436             if l_merged_row.COST_OF_SALES_ACCOUNT is null then l_merged_row.COST_OF_SALES_ACCOUNT := old_row.COST_OF_SALES_ACCOUNT; end if;
3437             if l_merged_row.COUPON_EXEMPT_FLAG is null then l_merged_row.COUPON_EXEMPT_FLAG := old_row.COUPON_EXEMPT_FLAG; end if;
3438             if l_merged_row.COVERAGE_SCHEDULE_ID is null then l_merged_row.COVERAGE_SCHEDULE_ID := old_row.COVERAGE_SCHEDULE_ID; end if;
3439             if l_merged_row.CREATE_SUPPLY_FLAG is null then l_merged_row.CREATE_SUPPLY_FLAG := old_row.CREATE_SUPPLY_FLAG; end if;
3440             if l_merged_row.CRITICAL_COMPONENT_FLAG is null then l_merged_row.CRITICAL_COMPONENT_FLAG := old_row.CRITICAL_COMPONENT_FLAG; end if;
3441             if l_merged_row.CUMULATIVE_TOTAL_LEAD_TIME is null then l_merged_row.CUMULATIVE_TOTAL_LEAD_TIME := old_row.CUMULATIVE_TOTAL_LEAD_TIME; end if;
3442             if l_merged_row.CUM_MANUFACTURING_LEAD_TIME is null then l_merged_row.CUM_MANUFACTURING_LEAD_TIME := old_row.CUM_MANUFACTURING_LEAD_TIME; end if;
3443             if l_merged_row.CURRENT_PHASE_ID is null then l_merged_row.CURRENT_PHASE_ID := old_row.CURRENT_PHASE_ID; end if;
3444             if l_merged_row.CUSTOMER_ORDER_ENABLED_FLAG is null then l_merged_row.CUSTOMER_ORDER_ENABLED_FLAG := old_row.CUSTOMER_ORDER_ENABLED_FLAG; end if;
3445             if l_merged_row.CUSTOMER_ORDER_FLAG is null then l_merged_row.CUSTOMER_ORDER_FLAG := old_row.CUSTOMER_ORDER_FLAG; end if;
3446             if l_merged_row.CYCLE_COUNT_ENABLED_FLAG is null then l_merged_row.CYCLE_COUNT_ENABLED_FLAG := old_row.CYCLE_COUNT_ENABLED_FLAG; end if;
3447             if l_merged_row.DAYS_EARLY_RECEIPT_ALLOWED is null then l_merged_row.DAYS_EARLY_RECEIPT_ALLOWED := old_row.DAYS_EARLY_RECEIPT_ALLOWED; end if;
3448             if l_merged_row.DAYS_LATE_RECEIPT_ALLOWED is null then l_merged_row.DAYS_LATE_RECEIPT_ALLOWED := old_row.DAYS_LATE_RECEIPT_ALLOWED; end if;
3449             if l_merged_row.DAYS_MAX_INV_SUPPLY is null then l_merged_row.DAYS_MAX_INV_SUPPLY := old_row.DAYS_MAX_INV_SUPPLY; end if;
3450             if l_merged_row.DAYS_MAX_INV_WINDOW is null then l_merged_row.DAYS_MAX_INV_WINDOW := old_row.DAYS_MAX_INV_WINDOW; end if;
3451             if l_merged_row.DAYS_TGT_INV_SUPPLY is null then l_merged_row.DAYS_TGT_INV_SUPPLY := old_row.DAYS_TGT_INV_SUPPLY; end if;
3452             if l_merged_row.DAYS_TGT_INV_WINDOW is null then l_merged_row.DAYS_TGT_INV_WINDOW := old_row.DAYS_TGT_INV_WINDOW; end if;
3453             if l_merged_row.DEFAULT_GRADE is null then l_merged_row.DEFAULT_GRADE := old_row.DEFAULT_GRADE; end if;
3454             if l_merged_row.DEFAULT_INCLUDE_IN_ROLLUP_FLAG is null then l_merged_row.DEFAULT_INCLUDE_IN_ROLLUP_FLAG := old_row.DEFAULT_INCLUDE_IN_ROLLUP_FLAG; end if;
3455             if l_merged_row.DEFAULT_LOT_STATUS_ID is null then l_merged_row.DEFAULT_LOT_STATUS_ID := old_row.DEFAULT_LOT_STATUS_ID; end if;
3456             if l_merged_row.DEFAULT_SERIAL_STATUS_ID is null then l_merged_row.DEFAULT_SERIAL_STATUS_ID := old_row.DEFAULT_SERIAL_STATUS_ID; end if;
3457             if l_merged_row.DEFAULT_SHIPPING_ORG is null then l_merged_row.DEFAULT_SHIPPING_ORG := old_row.DEFAULT_SHIPPING_ORG; end if;
3458             if l_merged_row.DEFAULT_SO_SOURCE_TYPE is null then l_merged_row.DEFAULT_SO_SOURCE_TYPE := old_row.DEFAULT_SO_SOURCE_TYPE; end if;
3459             if l_merged_row.DEFECT_TRACKING_ON_FLAG is null then l_merged_row.DEFECT_TRACKING_ON_FLAG := old_row.DEFECT_TRACKING_ON_FLAG; end if;
3460             if l_merged_row.DEMAND_SOURCE_HEADER_ID is null then l_merged_row.DEMAND_SOURCE_HEADER_ID := old_row.DEMAND_SOURCE_HEADER_ID; end if;
3461             if l_merged_row.DEMAND_SOURCE_LINE is null then l_merged_row.DEMAND_SOURCE_LINE := old_row.DEMAND_SOURCE_LINE; end if;
3462             if l_merged_row.DEMAND_SOURCE_TYPE is null then l_merged_row.DEMAND_SOURCE_TYPE := old_row.DEMAND_SOURCE_TYPE; end if;
3463             if l_merged_row.DEMAND_TIME_FENCE_CODE is null then l_merged_row.DEMAND_TIME_FENCE_CODE := old_row.DEMAND_TIME_FENCE_CODE; end if;
3464             if l_merged_row.DEMAND_TIME_FENCE_DAYS is null then l_merged_row.DEMAND_TIME_FENCE_DAYS := old_row.DEMAND_TIME_FENCE_DAYS; end if;
3465             if l_merged_row.DESCRIPTION is null then l_merged_row.DESCRIPTION := old_row.DESCRIPTION; end if;
3466             if l_merged_row.DIMENSION_UOM_CODE is null then l_merged_row.DIMENSION_UOM_CODE := old_row.DIMENSION_UOM_CODE; end if;
3467             if l_merged_row.DIVERGENCE is null then l_merged_row.DIVERGENCE := old_row.DIVERGENCE; end if;
3468             if l_merged_row.DOWNLOADABLE_FLAG is null then l_merged_row.DOWNLOADABLE_FLAG := old_row.DOWNLOADABLE_FLAG; end if;
3469             if l_merged_row.DRP_PLANNED_FLAG is null then l_merged_row.DRP_PLANNED_FLAG := old_row.DRP_PLANNED_FLAG; end if;
3470             if l_merged_row.DUAL_UOM_CONTROL is null then l_merged_row.DUAL_UOM_CONTROL := old_row.DUAL_UOM_CONTROL; end if;
3471             if l_merged_row.DUAL_UOM_DEVIATION_HIGH is null then l_merged_row.DUAL_UOM_DEVIATION_HIGH := old_row.DUAL_UOM_DEVIATION_HIGH; end if;
3472             if l_merged_row.DUAL_UOM_DEVIATION_LOW is null then l_merged_row.DUAL_UOM_DEVIATION_LOW := old_row.DUAL_UOM_DEVIATION_LOW; end if;
3473             if l_merged_row.EAM_ACTIVITY_CAUSE_CODE is null then l_merged_row.EAM_ACTIVITY_CAUSE_CODE := old_row.EAM_ACTIVITY_CAUSE_CODE; end if;
3474             if l_merged_row.EAM_ACTIVITY_SOURCE_CODE is null then l_merged_row.EAM_ACTIVITY_SOURCE_CODE := old_row.EAM_ACTIVITY_SOURCE_CODE; end if;
3475             if l_merged_row.EAM_ACTIVITY_TYPE_CODE is null then l_merged_row.EAM_ACTIVITY_TYPE_CODE := old_row.EAM_ACTIVITY_TYPE_CODE; end if;
3476             if l_merged_row.EAM_ACT_NOTIFICATION_FLAG is null then l_merged_row.EAM_ACT_NOTIFICATION_FLAG := old_row.EAM_ACT_NOTIFICATION_FLAG; end if;
3477             if l_merged_row.EAM_ACT_SHUTDOWN_STATUS is null then l_merged_row.EAM_ACT_SHUTDOWN_STATUS := old_row.EAM_ACT_SHUTDOWN_STATUS; end if;
3478             if l_merged_row.EAM_ITEM_TYPE is null then l_merged_row.EAM_ITEM_TYPE := old_row.EAM_ITEM_TYPE; end if;
3479             if l_merged_row.EFFECTIVITY_CONTROL is null then l_merged_row.EFFECTIVITY_CONTROL := old_row.EFFECTIVITY_CONTROL; end if;
3480             if l_merged_row.ELECTRONIC_FLAG is null then l_merged_row.ELECTRONIC_FLAG := old_row.ELECTRONIC_FLAG; end if;
3481             if l_merged_row.ENABLED_FLAG is null then l_merged_row.ENABLED_FLAG := old_row.ENABLED_FLAG; end if;
3482             if l_merged_row.ENCUMBRANCE_ACCOUNT is null then l_merged_row.ENCUMBRANCE_ACCOUNT := old_row.ENCUMBRANCE_ACCOUNT; end if;
3483             if l_merged_row.END_ASSEMBLY_PEGGING_FLAG is null then l_merged_row.END_ASSEMBLY_PEGGING_FLAG := old_row.END_ASSEMBLY_PEGGING_FLAG; end if;
3484             if l_merged_row.END_DATE_ACTIVE is null then l_merged_row.END_DATE_ACTIVE := old_row.END_DATE_ACTIVE; end if;
3485             if l_merged_row.ENFORCE_SHIP_TO_LOCATION_CODE is null then l_merged_row.ENFORCE_SHIP_TO_LOCATION_CODE := old_row.ENFORCE_SHIP_TO_LOCATION_CODE; end if;
3486             if l_merged_row.ENGINEERING_DATE is null then l_merged_row.ENGINEERING_DATE := old_row.ENGINEERING_DATE; end if;
3487             if l_merged_row.ENGINEERING_ECN_CODE is null then l_merged_row.ENGINEERING_ECN_CODE := old_row.ENGINEERING_ECN_CODE; end if;
3488             if l_merged_row.ENGINEERING_ITEM_ID is null then l_merged_row.ENGINEERING_ITEM_ID := old_row.ENGINEERING_ITEM_ID; end if;
3489             if l_merged_row.ENG_ITEM_FLAG is null then l_merged_row.ENG_ITEM_FLAG := old_row.ENG_ITEM_FLAG; end if;
3490             if l_merged_row.EQUIPMENT_TYPE is null then l_merged_row.EQUIPMENT_TYPE := old_row.EQUIPMENT_TYPE; end if;
3491             if l_merged_row.EVENT_FLAG is null then l_merged_row.EVENT_FLAG := old_row.EVENT_FLAG; end if;
3492             if l_merged_row.EXCLUDE_FROM_BUDGET_FLAG is null then l_merged_row.EXCLUDE_FROM_BUDGET_FLAG := old_row.EXCLUDE_FROM_BUDGET_FLAG; end if;
3493             if l_merged_row.EXPENSE_ACCOUNT is null then l_merged_row.EXPENSE_ACCOUNT := old_row.EXPENSE_ACCOUNT; end if;
3494             if l_merged_row.EXPENSE_BILLABLE_FLAG is null then l_merged_row.EXPENSE_BILLABLE_FLAG := old_row.EXPENSE_BILLABLE_FLAG; end if;
3495             if l_merged_row.EXPIRATION_ACTION_CODE is null then l_merged_row.EXPIRATION_ACTION_CODE := old_row.EXPIRATION_ACTION_CODE; end if;
3496             if l_merged_row.EXPIRATION_ACTION_INTERVAL is null then l_merged_row.EXPIRATION_ACTION_INTERVAL := old_row.EXPIRATION_ACTION_INTERVAL; end if;
3497             if l_merged_row.FINANCING_ALLOWED_FLAG is null then l_merged_row.FINANCING_ALLOWED_FLAG := old_row.FINANCING_ALLOWED_FLAG; end if;
3498             if l_merged_row.FIXED_DAYS_SUPPLY is null then l_merged_row.FIXED_DAYS_SUPPLY := old_row.FIXED_DAYS_SUPPLY; end if;
3499             if l_merged_row.FIXED_LEAD_TIME is null then l_merged_row.FIXED_LEAD_TIME := old_row.FIXED_LEAD_TIME; end if;
3500             if l_merged_row.FIXED_LOT_MULTIPLIER is null then l_merged_row.FIXED_LOT_MULTIPLIER := old_row.FIXED_LOT_MULTIPLIER; end if;
3501             if l_merged_row.FIXED_ORDER_QUANTITY is null then l_merged_row.FIXED_ORDER_QUANTITY := old_row.FIXED_ORDER_QUANTITY; end if;
3502             if l_merged_row.FORECAST_HORIZON is null then l_merged_row.FORECAST_HORIZON := old_row.FORECAST_HORIZON; end if;
3503             if l_merged_row.FULL_LEAD_TIME is null then l_merged_row.FULL_LEAD_TIME := old_row.FULL_LEAD_TIME; end if;
3504             if l_merged_row.GLOBAL_ATTRIBUTE1 is null then l_merged_row.GLOBAL_ATTRIBUTE1 := old_row.GLOBAL_ATTRIBUTE1; end if;
3505             if l_merged_row.GLOBAL_ATTRIBUTE10 is null then l_merged_row.GLOBAL_ATTRIBUTE10 := old_row.GLOBAL_ATTRIBUTE10; end if;
3506             if l_merged_row.GLOBAL_ATTRIBUTE2 is null then l_merged_row.GLOBAL_ATTRIBUTE2 := old_row.GLOBAL_ATTRIBUTE2; end if;
3507             if l_merged_row.GLOBAL_ATTRIBUTE3 is null then l_merged_row.GLOBAL_ATTRIBUTE3 := old_row.GLOBAL_ATTRIBUTE3; end if;
3508             if l_merged_row.GLOBAL_ATTRIBUTE4 is null then l_merged_row.GLOBAL_ATTRIBUTE4 := old_row.GLOBAL_ATTRIBUTE4; end if;
3509             if l_merged_row.GLOBAL_ATTRIBUTE5 is null then l_merged_row.GLOBAL_ATTRIBUTE5 := old_row.GLOBAL_ATTRIBUTE5; end if;
3510             if l_merged_row.GLOBAL_ATTRIBUTE6 is null then l_merged_row.GLOBAL_ATTRIBUTE6 := old_row.GLOBAL_ATTRIBUTE6; end if;
3511             if l_merged_row.GLOBAL_ATTRIBUTE7 is null then l_merged_row.GLOBAL_ATTRIBUTE7 := old_row.GLOBAL_ATTRIBUTE7; end if;
3512             if l_merged_row.GLOBAL_ATTRIBUTE8 is null then l_merged_row.GLOBAL_ATTRIBUTE8 := old_row.GLOBAL_ATTRIBUTE8; end if;
3513             if l_merged_row.GLOBAL_ATTRIBUTE9 is null then l_merged_row.GLOBAL_ATTRIBUTE9 := old_row.GLOBAL_ATTRIBUTE9; end if;
3514             if l_merged_row.GLOBAL_ATTRIBUTE_CATEGORY is null then l_merged_row.GLOBAL_ATTRIBUTE_CATEGORY := old_row.GLOBAL_ATTRIBUTE_CATEGORY; end if;
3515             if l_merged_row.GLOBAL_TRADE_ITEM_NUMBER is null then l_merged_row.GLOBAL_TRADE_ITEM_NUMBER := old_row.GLOBAL_TRADE_ITEM_NUMBER; end if;
3516             if l_merged_row.GRADE_CONTROL_FLAG is null then l_merged_row.GRADE_CONTROL_FLAG := old_row.GRADE_CONTROL_FLAG; end if;
3517             if l_merged_row.GTIN_DESCRIPTION is null then l_merged_row.GTIN_DESCRIPTION := old_row.GTIN_DESCRIPTION; end if;
3518             if l_merged_row.HAZARDOUS_MATERIAL_FLAG is null then l_merged_row.HAZARDOUS_MATERIAL_FLAG := old_row.HAZARDOUS_MATERIAL_FLAG; end if;
3519             if l_merged_row.HAZARD_CLASS_ID is null then l_merged_row.HAZARD_CLASS_ID := old_row.HAZARD_CLASS_ID; end if;
3520             if l_merged_row.HOLD_DAYS is null then l_merged_row.HOLD_DAYS := old_row.HOLD_DAYS; end if;
3521             if l_merged_row.IB_ITEM_INSTANCE_CLASS is null then l_merged_row.IB_ITEM_INSTANCE_CLASS := old_row.IB_ITEM_INSTANCE_CLASS; end if;
3522             if l_merged_row.INDIVISIBLE_FLAG is null then l_merged_row.INDIVISIBLE_FLAG := old_row.INDIVISIBLE_FLAG; end if;
3523             if l_merged_row.INSPECTION_REQUIRED_FLAG is null then l_merged_row.INSPECTION_REQUIRED_FLAG := old_row.INSPECTION_REQUIRED_FLAG; end if;
3524             if l_merged_row.INTERNAL_ORDER_ENABLED_FLAG is null then l_merged_row.INTERNAL_ORDER_ENABLED_FLAG := old_row.INTERNAL_ORDER_ENABLED_FLAG; end if;
3525             if l_merged_row.INTERNAL_ORDER_FLAG is null then l_merged_row.INTERNAL_ORDER_FLAG := old_row.INTERNAL_ORDER_FLAG; end if;
3526             if l_merged_row.INTERNAL_VOLUME is null then l_merged_row.INTERNAL_VOLUME := old_row.INTERNAL_VOLUME; end if;
3527             if l_merged_row.INVENTORY_ASSET_FLAG is null then l_merged_row.INVENTORY_ASSET_FLAG := old_row.INVENTORY_ASSET_FLAG; end if;
3528             if l_merged_row.INVENTORY_CARRY_PENALTY is null then l_merged_row.INVENTORY_CARRY_PENALTY := old_row.INVENTORY_CARRY_PENALTY; end if;
3529             if l_merged_row.INVENTORY_ITEM_FLAG is null then l_merged_row.INVENTORY_ITEM_FLAG := old_row.INVENTORY_ITEM_FLAG; end if;
3530             if l_merged_row.INVENTORY_ITEM_STATUS_CODE is null then l_merged_row.INVENTORY_ITEM_STATUS_CODE := old_row.INVENTORY_ITEM_STATUS_CODE; end if;
3531             if l_merged_row.INVENTORY_PLANNING_CODE is null then l_merged_row.INVENTORY_PLANNING_CODE := old_row.INVENTORY_PLANNING_CODE; end if;
3532             if l_merged_row.INVOICEABLE_ITEM_FLAG is null then l_merged_row.INVOICEABLE_ITEM_FLAG := old_row.INVOICEABLE_ITEM_FLAG; end if;
3533             if l_merged_row.INVOICE_CLOSE_TOLERANCE is null then l_merged_row.INVOICE_CLOSE_TOLERANCE := old_row.INVOICE_CLOSE_TOLERANCE; end if;
3534             if l_merged_row.INVOICE_ENABLED_FLAG is null then l_merged_row.INVOICE_ENABLED_FLAG := old_row.INVOICE_ENABLED_FLAG; end if;
3535             if l_merged_row.INVOICING_RULE_ID is null then l_merged_row.INVOICING_RULE_ID := old_row.INVOICING_RULE_ID; end if;
3536             if l_merged_row.ITEM_TYPE is null then l_merged_row.ITEM_TYPE := old_row.ITEM_TYPE; end if;
3537             if l_merged_row.LEAD_TIME_LOT_SIZE is null then l_merged_row.LEAD_TIME_LOT_SIZE := old_row.LEAD_TIME_LOT_SIZE; end if;
3538             if l_merged_row.LIFECYCLE_ID is null then l_merged_row.LIFECYCLE_ID := old_row.LIFECYCLE_ID; end if;
3539             if l_merged_row.LIST_PRICE_PER_UNIT is null then l_merged_row.LIST_PRICE_PER_UNIT := old_row.LIST_PRICE_PER_UNIT; end if;
3540             if l_merged_row.LOCATION_CONTROL_CODE is null then l_merged_row.LOCATION_CONTROL_CODE := old_row.LOCATION_CONTROL_CODE; end if;
3541             if l_merged_row.LONG_DESCRIPTION is null then l_merged_row.LONG_DESCRIPTION := old_row.LONG_DESCRIPTION; end if;
3542             if l_merged_row.LOT_CONTROL_CODE is null then l_merged_row.LOT_CONTROL_CODE := old_row.LOT_CONTROL_CODE; end if;
3543             if l_merged_row.LOT_DIVISIBLE_FLAG is null then l_merged_row.LOT_DIVISIBLE_FLAG := old_row.LOT_DIVISIBLE_FLAG; end if;
3544             if l_merged_row.LOT_MERGE_ENABLED is null then l_merged_row.LOT_MERGE_ENABLED := old_row.LOT_MERGE_ENABLED; end if;
3545             if l_merged_row.LOT_SPLIT_ENABLED is null then l_merged_row.LOT_SPLIT_ENABLED := old_row.LOT_SPLIT_ENABLED; end if;
3546             if l_merged_row.LOT_STATUS_ENABLED is null then l_merged_row.LOT_STATUS_ENABLED := old_row.LOT_STATUS_ENABLED; end if;
3547             if l_merged_row.LOT_SUBSTITUTION_ENABLED is null then l_merged_row.LOT_SUBSTITUTION_ENABLED := old_row.LOT_SUBSTITUTION_ENABLED; end if;
3548             if l_merged_row.LOT_TRANSLATE_ENABLED is null then l_merged_row.LOT_TRANSLATE_ENABLED := old_row.LOT_TRANSLATE_ENABLED; end if;
3549             if l_merged_row.MARKET_PRICE is null then l_merged_row.MARKET_PRICE := old_row.MARKET_PRICE; end if;
3550             if l_merged_row.MATERIAL_BILLABLE_FLAG is null then l_merged_row.MATERIAL_BILLABLE_FLAG := old_row.MATERIAL_BILLABLE_FLAG; end if;
3551             if l_merged_row.MATERIAL_COST is null then l_merged_row.MATERIAL_COST := old_row.MATERIAL_COST; end if;
3552             if l_merged_row.MATERIAL_OH_RATE is null then l_merged_row.MATERIAL_OH_RATE := old_row.MATERIAL_OH_RATE; end if;
3553             if l_merged_row.MATERIAL_OH_SUB_ELEM is null then l_merged_row.MATERIAL_OH_SUB_ELEM := old_row.MATERIAL_OH_SUB_ELEM; end if;
3554             if l_merged_row.MATERIAL_OH_SUB_ELEM_ID is null then l_merged_row.MATERIAL_OH_SUB_ELEM_ID := old_row.MATERIAL_OH_SUB_ELEM_ID; end if;
3555             if l_merged_row.MATERIAL_SUB_ELEM is null then l_merged_row.MATERIAL_SUB_ELEM := old_row.MATERIAL_SUB_ELEM; end if;
3556             if l_merged_row.MATERIAL_SUB_ELEM_ID is null then l_merged_row.MATERIAL_SUB_ELEM_ID := old_row.MATERIAL_SUB_ELEM_ID; end if;
3557             if l_merged_row.MATURITY_DAYS is null then l_merged_row.MATURITY_DAYS := old_row.MATURITY_DAYS; end if;
3558             if l_merged_row.MAXIMUM_LOAD_WEIGHT is null then l_merged_row.MAXIMUM_LOAD_WEIGHT := old_row.MAXIMUM_LOAD_WEIGHT; end if;
3559             if l_merged_row.MAXIMUM_ORDER_QUANTITY is null then l_merged_row.MAXIMUM_ORDER_QUANTITY := old_row.MAXIMUM_ORDER_QUANTITY; end if;
3560             if l_merged_row.MAX_MINMAX_QUANTITY is null then l_merged_row.MAX_MINMAX_QUANTITY := old_row.MAX_MINMAX_QUANTITY; end if;
3561             if l_merged_row.MAX_WARRANTY_AMOUNT is null then l_merged_row.MAX_WARRANTY_AMOUNT := old_row.MAX_WARRANTY_AMOUNT; end if;
3562             if l_merged_row.MINIMUM_FILL_PERCENT is null then l_merged_row.MINIMUM_FILL_PERCENT := old_row.MINIMUM_FILL_PERCENT; end if;
3563             if l_merged_row.MINIMUM_LICENSE_QUANTITY is null then l_merged_row.MINIMUM_LICENSE_QUANTITY := old_row.MINIMUM_LICENSE_QUANTITY; end if;
3564             if l_merged_row.MINIMUM_ORDER_QUANTITY is null then l_merged_row.MINIMUM_ORDER_QUANTITY := old_row.MINIMUM_ORDER_QUANTITY; end if;
3565             if l_merged_row.MIN_MINMAX_QUANTITY is null then l_merged_row.MIN_MINMAX_QUANTITY := old_row.MIN_MINMAX_QUANTITY; end if;
3566             if l_merged_row.MODEL_CONFIG_CLAUSE_NAME is null then l_merged_row.MODEL_CONFIG_CLAUSE_NAME := old_row.MODEL_CONFIG_CLAUSE_NAME; end if;
3567             if l_merged_row.MRP_CALCULATE_ATP_FLAG is null then l_merged_row.MRP_CALCULATE_ATP_FLAG := old_row.MRP_CALCULATE_ATP_FLAG; end if;
3568             if l_merged_row.MRP_PLANNING_CODE is null then l_merged_row.MRP_PLANNING_CODE := old_row.MRP_PLANNING_CODE; end if;
3569             if l_merged_row.MRP_SAFETY_STOCK_CODE is null then l_merged_row.MRP_SAFETY_STOCK_CODE := old_row.MRP_SAFETY_STOCK_CODE; end if;
3570             if l_merged_row.MRP_SAFETY_STOCK_PERCENT is null then l_merged_row.MRP_SAFETY_STOCK_PERCENT := old_row.MRP_SAFETY_STOCK_PERCENT; end if;
3571             if l_merged_row.MTL_TRANSACTIONS_ENABLED_FLAG is null then l_merged_row.MTL_TRANSACTIONS_ENABLED_FLAG := old_row.MTL_TRANSACTIONS_ENABLED_FLAG; end if;
3572             if l_merged_row.MUST_USE_APPROVED_VENDOR_FLAG is null then l_merged_row.MUST_USE_APPROVED_VENDOR_FLAG := old_row.MUST_USE_APPROVED_VENDOR_FLAG; end if;
3573             if l_merged_row.NEGATIVE_MEASUREMENT_ERROR is null then l_merged_row.NEGATIVE_MEASUREMENT_ERROR := old_row.NEGATIVE_MEASUREMENT_ERROR; end if;
3574             if l_merged_row.NEW_REVISION_CODE is null then l_merged_row.NEW_REVISION_CODE := old_row.NEW_REVISION_CODE; end if;
3575             if l_merged_row.ONT_PRICING_QTY_SOURCE is null then l_merged_row.ONT_PRICING_QTY_SOURCE := old_row.ONT_PRICING_QTY_SOURCE; end if;
3576             if l_merged_row.OPERATION_SLACK_PENALTY is null then l_merged_row.OPERATION_SLACK_PENALTY := old_row.OPERATION_SLACK_PENALTY; end if;
3577             if l_merged_row.ORDERABLE_ON_WEB_FLAG is null then l_merged_row.ORDERABLE_ON_WEB_FLAG := old_row.ORDERABLE_ON_WEB_FLAG; end if;
3578             if l_merged_row.ORDER_COST is null then l_merged_row.ORDER_COST := old_row.ORDER_COST; end if;
3579             if l_merged_row.OUTSIDE_OPERATION_FLAG is null then l_merged_row.OUTSIDE_OPERATION_FLAG := old_row.OUTSIDE_OPERATION_FLAG; end if;
3580             if l_merged_row.OUTSIDE_OPERATION_UOM_TYPE is null then l_merged_row.OUTSIDE_OPERATION_UOM_TYPE := old_row.OUTSIDE_OPERATION_UOM_TYPE; end if;
3581             if l_merged_row.OUTSOURCED_ASSEMBLY is null then l_merged_row.OUTSOURCED_ASSEMBLY := old_row.OUTSOURCED_ASSEMBLY; end if;
3582             if l_merged_row.OVERCOMPLETION_TOLERANCE_TYPE is null then l_merged_row.OVERCOMPLETION_TOLERANCE_TYPE := old_row.OVERCOMPLETION_TOLERANCE_TYPE; end if;
3583             if l_merged_row.OVERCOMPLETION_TOLERANCE_VALUE is null then l_merged_row.OVERCOMPLETION_TOLERANCE_VALUE := old_row.OVERCOMPLETION_TOLERANCE_VALUE; end if;
3584             if l_merged_row.OVERRUN_PERCENTAGE is null then l_merged_row.OVERRUN_PERCENTAGE := old_row.OVERRUN_PERCENTAGE; end if;
3585             if l_merged_row.OVER_RETURN_TOLERANCE is null then l_merged_row.OVER_RETURN_TOLERANCE := old_row.OVER_RETURN_TOLERANCE; end if;
3586             if l_merged_row.OVER_SHIPMENT_TOLERANCE is null then l_merged_row.OVER_SHIPMENT_TOLERANCE := old_row.OVER_SHIPMENT_TOLERANCE; end if;
3587             if l_merged_row.PARENT_CHILD_GENERATION_FLAG is null then l_merged_row.PARENT_CHILD_GENERATION_FLAG := old_row.PARENT_CHILD_GENERATION_FLAG; end if;
3588             if l_merged_row.PAYMENT_TERMS_ID is null then l_merged_row.PAYMENT_TERMS_ID := old_row.PAYMENT_TERMS_ID; end if;
3589             if l_merged_row.PICKING_RULE_ID is null then l_merged_row.PICKING_RULE_ID := old_row.PICKING_RULE_ID; end if;
3590             if l_merged_row.PICK_COMPONENTS_FLAG is null then l_merged_row.PICK_COMPONENTS_FLAG := old_row.PICK_COMPONENTS_FLAG; end if;
3591             if l_merged_row.PLANNED_INV_POINT_FLAG is null then l_merged_row.PLANNED_INV_POINT_FLAG := old_row.PLANNED_INV_POINT_FLAG; end if;
3592             if l_merged_row.PLANNER_CODE is null then l_merged_row.PLANNER_CODE := old_row.PLANNER_CODE; end if;
3593             if l_merged_row.PLANNING_EXCEPTION_SET is null then l_merged_row.PLANNING_EXCEPTION_SET := old_row.PLANNING_EXCEPTION_SET; end if;
3594             if l_merged_row.PLANNING_MAKE_BUY_CODE is null then l_merged_row.PLANNING_MAKE_BUY_CODE := old_row.PLANNING_MAKE_BUY_CODE; end if;
3595             if l_merged_row.PLANNING_TIME_FENCE_CODE is null then l_merged_row.PLANNING_TIME_FENCE_CODE := old_row.PLANNING_TIME_FENCE_CODE; end if;
3596             if l_merged_row.PLANNING_TIME_FENCE_DAYS is null then l_merged_row.PLANNING_TIME_FENCE_DAYS := old_row.PLANNING_TIME_FENCE_DAYS; end if;
3597             if l_merged_row.POSITIVE_MEASUREMENT_ERROR is null then l_merged_row.POSITIVE_MEASUREMENT_ERROR := old_row.POSITIVE_MEASUREMENT_ERROR; end if;
3598             if l_merged_row.POSTPROCESSING_LEAD_TIME is null then l_merged_row.POSTPROCESSING_LEAD_TIME := old_row.POSTPROCESSING_LEAD_TIME; end if;
3599             if l_merged_row.PREPOSITION_POINT is null then l_merged_row.PREPOSITION_POINT := old_row.PREPOSITION_POINT; end if;
3600             if l_merged_row.PREPROCESSING_LEAD_TIME is null then l_merged_row.PREPROCESSING_LEAD_TIME := old_row.PREPROCESSING_LEAD_TIME; end if;
3601             if l_merged_row.PREVENTIVE_MAINTENANCE_FLAG is null then l_merged_row.PREVENTIVE_MAINTENANCE_FLAG := old_row.PREVENTIVE_MAINTENANCE_FLAG; end if;
3602             if l_merged_row.PRICE_TOLERANCE_PERCENT is null then l_merged_row.PRICE_TOLERANCE_PERCENT := old_row.PRICE_TOLERANCE_PERCENT; end if;
3603             if l_merged_row.PRIMARY_SPECIALIST_ID is null then l_merged_row.PRIMARY_SPECIALIST_ID := old_row.PRIMARY_SPECIALIST_ID; end if;
3604             if l_merged_row.PROCESS_COSTING_ENABLED_FLAG is null then l_merged_row.PROCESS_COSTING_ENABLED_FLAG := old_row.PROCESS_COSTING_ENABLED_FLAG; end if;
3605             if l_merged_row.PROCESS_EXECUTION_ENABLED_FLAG is null then l_merged_row.PROCESS_EXECUTION_ENABLED_FLAG := old_row.PROCESS_EXECUTION_ENABLED_FLAG; end if;
3606             if l_merged_row.PROCESS_QUALITY_ENABLED_FLAG is null then l_merged_row.PROCESS_QUALITY_ENABLED_FLAG := old_row.PROCESS_QUALITY_ENABLED_FLAG; end if;
3607             if l_merged_row.PROCESS_SUPPLY_LOCATOR_ID is null then l_merged_row.PROCESS_SUPPLY_LOCATOR_ID := old_row.PROCESS_SUPPLY_LOCATOR_ID; end if;
3608             if l_merged_row.PROCESS_SUPPLY_SUBINVENTORY is null then l_merged_row.PROCESS_SUPPLY_SUBINVENTORY := old_row.PROCESS_SUPPLY_SUBINVENTORY; end if;
3609             if l_merged_row.PROCESS_YIELD_LOCATOR_ID is null then l_merged_row.PROCESS_YIELD_LOCATOR_ID := old_row.PROCESS_YIELD_LOCATOR_ID; end if;
3610             if l_merged_row.PROCESS_YIELD_SUBINVENTORY is null then l_merged_row.PROCESS_YIELD_SUBINVENTORY := old_row.PROCESS_YIELD_SUBINVENTORY; end if;
3611             if l_merged_row.PRODUCT_FAMILY_ITEM_ID is null then l_merged_row.PRODUCT_FAMILY_ITEM_ID := old_row.PRODUCT_FAMILY_ITEM_ID; end if;
3612             if l_merged_row.PRORATE_SERVICE_FLAG is null then l_merged_row.PRORATE_SERVICE_FLAG := old_row.PRORATE_SERVICE_FLAG; end if;
3613             if l_merged_row.PURCHASING_ENABLED_FLAG is null then l_merged_row.PURCHASING_ENABLED_FLAG := old_row.PURCHASING_ENABLED_FLAG; end if;
3614             if l_merged_row.PURCHASING_ITEM_FLAG is null then l_merged_row.PURCHASING_ITEM_FLAG := old_row.PURCHASING_ITEM_FLAG; end if;
3615             if l_merged_row.PURCHASING_TAX_CODE is null then l_merged_row.PURCHASING_TAX_CODE := old_row.PURCHASING_TAX_CODE; end if;
3616             if l_merged_row.QTY_RCV_EXCEPTION_CODE is null then l_merged_row.QTY_RCV_EXCEPTION_CODE := old_row.QTY_RCV_EXCEPTION_CODE; end if;
3617             if l_merged_row.QTY_RCV_TOLERANCE is null then l_merged_row.QTY_RCV_TOLERANCE := old_row.QTY_RCV_TOLERANCE; end if;
3618             if l_merged_row.RECEIPT_DAYS_EXCEPTION_CODE is null then l_merged_row.RECEIPT_DAYS_EXCEPTION_CODE := old_row.RECEIPT_DAYS_EXCEPTION_CODE; end if;
3619             if l_merged_row.RECEIPT_REQUIRED_FLAG is null then l_merged_row.RECEIPT_REQUIRED_FLAG := old_row.RECEIPT_REQUIRED_FLAG; end if;
3620             if l_merged_row.RECEIVE_CLOSE_TOLERANCE is null then l_merged_row.RECEIVE_CLOSE_TOLERANCE := old_row.RECEIVE_CLOSE_TOLERANCE; end if;
3621             if l_merged_row.RECEIVING_ROUTING_ID is null then l_merged_row.RECEIVING_ROUTING_ID := old_row.RECEIVING_ROUTING_ID; end if;
3622             if l_merged_row.RECIPE_ENABLED_FLAG is null then l_merged_row.RECIPE_ENABLED_FLAG := old_row.RECIPE_ENABLED_FLAG; end if;
3623             if l_merged_row.RECOVERED_PART_DISP_CODE is null then l_merged_row.RECOVERED_PART_DISP_CODE := old_row.RECOVERED_PART_DISP_CODE; end if;
3624             if l_merged_row.RELEASE_TIME_FENCE_CODE is null then l_merged_row.RELEASE_TIME_FENCE_CODE := old_row.RELEASE_TIME_FENCE_CODE; end if;
3625             if l_merged_row.RELEASE_TIME_FENCE_DAYS is null then l_merged_row.RELEASE_TIME_FENCE_DAYS := old_row.RELEASE_TIME_FENCE_DAYS; end if;
3626             if l_merged_row.REPAIR_LEADTIME is null then l_merged_row.REPAIR_LEADTIME := old_row.REPAIR_LEADTIME; end if;
3627             if l_merged_row.REPAIR_PROGRAM is null then l_merged_row.REPAIR_PROGRAM := old_row.REPAIR_PROGRAM; end if;
3628             if l_merged_row.REPAIR_YIELD is null then l_merged_row.REPAIR_YIELD := old_row.REPAIR_YIELD; end if;
3629             if l_merged_row.REPETITIVE_PLANNING_FLAG is null then l_merged_row.REPETITIVE_PLANNING_FLAG := old_row.REPETITIVE_PLANNING_FLAG; end if;
3630             if l_merged_row.REPLENISH_TO_ORDER_FLAG is null then l_merged_row.REPLENISH_TO_ORDER_FLAG := old_row.REPLENISH_TO_ORDER_FLAG; end if;
3631             if l_merged_row.RESERVABLE_TYPE is null then l_merged_row.RESERVABLE_TYPE := old_row.RESERVABLE_TYPE; end if;
3632             if l_merged_row.RESPONSE_TIME_PERIOD_CODE is null then l_merged_row.RESPONSE_TIME_PERIOD_CODE := old_row.RESPONSE_TIME_PERIOD_CODE; end if;
3633             if l_merged_row.RESPONSE_TIME_VALUE is null then l_merged_row.RESPONSE_TIME_VALUE := old_row.RESPONSE_TIME_VALUE; end if;
3634             if l_merged_row.RESTRICT_LOCATORS_CODE is null then l_merged_row.RESTRICT_LOCATORS_CODE := old_row.RESTRICT_LOCATORS_CODE; end if;
3635             if l_merged_row.RESTRICT_SUBINVENTORIES_CODE is null then l_merged_row.RESTRICT_SUBINVENTORIES_CODE := old_row.RESTRICT_SUBINVENTORIES_CODE; end if;
3636             if l_merged_row.RETEST_INTERVAL is null then l_merged_row.RETEST_INTERVAL := old_row.RETEST_INTERVAL; end if;
3637             if l_merged_row.RETURNABLE_FLAG is null then l_merged_row.RETURNABLE_FLAG := old_row.RETURNABLE_FLAG; end if;
3638             if l_merged_row.RETURN_INSPECTION_REQUIREMENT is null then l_merged_row.RETURN_INSPECTION_REQUIREMENT := old_row.RETURN_INSPECTION_REQUIREMENT; end if;
3639             if l_merged_row.REVISION is null then l_merged_row.REVISION := old_row.REVISION; end if;
3640             if l_merged_row.REVISION_IMPORT_POLICY is null then l_merged_row.REVISION_IMPORT_POLICY := old_row.REVISION_IMPORT_POLICY; end if;
3641             if l_merged_row.REVISION_QTY_CONTROL_CODE is null then l_merged_row.REVISION_QTY_CONTROL_CODE := old_row.REVISION_QTY_CONTROL_CODE; end if;
3642             if l_merged_row.RFQ_REQUIRED_FLAG is null then l_merged_row.RFQ_REQUIRED_FLAG := old_row.RFQ_REQUIRED_FLAG; end if;
3643             if l_merged_row.ROUNDING_CONTROL_TYPE is null then l_merged_row.ROUNDING_CONTROL_TYPE := old_row.ROUNDING_CONTROL_TYPE; end if;
3644             if l_merged_row.ROUNDING_FACTOR is null then l_merged_row.ROUNDING_FACTOR := old_row.ROUNDING_FACTOR; end if;
3645             if l_merged_row.SAFETY_STOCK_BUCKET_DAYS is null then l_merged_row.SAFETY_STOCK_BUCKET_DAYS := old_row.SAFETY_STOCK_BUCKET_DAYS; end if;
3646             if l_merged_row.SALES_ACCOUNT is null then l_merged_row.SALES_ACCOUNT := old_row.SALES_ACCOUNT; end if;
3647             if l_merged_row.SECONDARY_DEFAULT_IND is null then l_merged_row.SECONDARY_DEFAULT_IND := old_row.SECONDARY_DEFAULT_IND; end if;
3648             if l_merged_row.SECONDARY_SPECIALIST_ID is null then l_merged_row.SECONDARY_SPECIALIST_ID := old_row.SECONDARY_SPECIALIST_ID; end if;
3649             if l_merged_row.SECONDARY_UOM_CODE is null then l_merged_row.SECONDARY_UOM_CODE := old_row.SECONDARY_UOM_CODE; end if;
3650             if l_merged_row.SERIAL_NUMBER_CONTROL_CODE is null then l_merged_row.SERIAL_NUMBER_CONTROL_CODE := old_row.SERIAL_NUMBER_CONTROL_CODE; end if;
3651             if l_merged_row.SERIAL_STATUS_ENABLED is null then l_merged_row.SERIAL_STATUS_ENABLED := old_row.SERIAL_STATUS_ENABLED; end if;
3652             if l_merged_row.SERVICEABLE_COMPONENT_FLAG is null then l_merged_row.SERVICEABLE_COMPONENT_FLAG := old_row.SERVICEABLE_COMPONENT_FLAG; end if;
3653             if l_merged_row.SERVICEABLE_ITEM_CLASS_ID is null then l_merged_row.SERVICEABLE_ITEM_CLASS_ID := old_row.SERVICEABLE_ITEM_CLASS_ID; end if;
3654             if l_merged_row.SERVICEABLE_PRODUCT_FLAG is null then l_merged_row.SERVICEABLE_PRODUCT_FLAG := old_row.SERVICEABLE_PRODUCT_FLAG; end if;
3655             if l_merged_row.SERVICE_DURATION is null then l_merged_row.SERVICE_DURATION := old_row.SERVICE_DURATION; end if;
3656             if l_merged_row.SERVICE_DURATION_PERIOD_CODE is null then l_merged_row.SERVICE_DURATION_PERIOD_CODE := old_row.SERVICE_DURATION_PERIOD_CODE; end if;
3657             if l_merged_row.SERVICE_ITEM_FLAG is null then l_merged_row.SERVICE_ITEM_FLAG := old_row.SERVICE_ITEM_FLAG; end if;
3658             if l_merged_row.SERVICE_STARTING_DELAY is null then l_merged_row.SERVICE_STARTING_DELAY := old_row.SERVICE_STARTING_DELAY; end if;
3659             if l_merged_row.SERV_BILLING_ENABLED_FLAG is null then l_merged_row.SERV_BILLING_ENABLED_FLAG := old_row.SERV_BILLING_ENABLED_FLAG; end if;
3660             if l_merged_row.SERV_IMPORTANCE_LEVEL is null then l_merged_row.SERV_IMPORTANCE_LEVEL := old_row.SERV_IMPORTANCE_LEVEL; end if;
3661             if l_merged_row.SERV_REQ_ENABLED_CODE is null then l_merged_row.SERV_REQ_ENABLED_CODE := old_row.SERV_REQ_ENABLED_CODE; end if;
3662             if l_merged_row.SET_ID is null then l_merged_row.SET_ID := old_row.SET_ID; end if;
3663             if l_merged_row.SHELF_LIFE_CODE is null then l_merged_row.SHELF_LIFE_CODE := old_row.SHELF_LIFE_CODE; end if;
3664             if l_merged_row.SHELF_LIFE_DAYS is null then l_merged_row.SHELF_LIFE_DAYS := old_row.SHELF_LIFE_DAYS; end if;
3665             if l_merged_row.SHIPPABLE_ITEM_FLAG is null then l_merged_row.SHIPPABLE_ITEM_FLAG := old_row.SHIPPABLE_ITEM_FLAG; end if;
3666             if l_merged_row.SHIP_MODEL_COMPLETE_FLAG is null then l_merged_row.SHIP_MODEL_COMPLETE_FLAG := old_row.SHIP_MODEL_COMPLETE_FLAG; end if;
3667             if l_merged_row.SHRINKAGE_RATE is null then l_merged_row.SHRINKAGE_RATE := old_row.SHRINKAGE_RATE; end if;
3668             if l_merged_row.SOURCE_ORGANIZATION_ID is null then l_merged_row.SOURCE_ORGANIZATION_ID := old_row.SOURCE_ORGANIZATION_ID; end if;
3669             if l_merged_row.SOURCE_SUBINVENTORY is null then l_merged_row.SOURCE_SUBINVENTORY := old_row.SOURCE_SUBINVENTORY; end if;
3670             if l_merged_row.SOURCE_TYPE is null then l_merged_row.SOURCE_TYPE := old_row.SOURCE_TYPE; end if;
3671             if l_merged_row.SO_AUTHORIZATION_FLAG is null then l_merged_row.SO_AUTHORIZATION_FLAG := old_row.SO_AUTHORIZATION_FLAG; end if;
3672             if l_merged_row.SO_TRANSACTIONS_FLAG is null then l_merged_row.SO_TRANSACTIONS_FLAG := old_row.SO_TRANSACTIONS_FLAG; end if;
3673             if l_merged_row.START_AUTO_LOT_NUMBER is null then l_merged_row.START_AUTO_LOT_NUMBER := old_row.START_AUTO_LOT_NUMBER; end if;
3674             if l_merged_row.START_AUTO_SERIAL_NUMBER is null then l_merged_row.START_AUTO_SERIAL_NUMBER := old_row.START_AUTO_SERIAL_NUMBER; end if;
3675             if l_merged_row.START_DATE_ACTIVE is null then l_merged_row.START_DATE_ACTIVE := old_row.START_DATE_ACTIVE; end if;
3676             if l_merged_row.STD_LOT_SIZE is null then l_merged_row.STD_LOT_SIZE := old_row.STD_LOT_SIZE; end if;
3677             if l_merged_row.STOCK_ENABLED_FLAG is null then l_merged_row.STOCK_ENABLED_FLAG := old_row.STOCK_ENABLED_FLAG; end if;
3678             if l_merged_row.SUBCONTRACTING_COMPONENT is null then l_merged_row.SUBCONTRACTING_COMPONENT := old_row.SUBCONTRACTING_COMPONENT; end if;
3679             if l_merged_row.SUBSCRIPTION_DEPEND_FLAG is null then l_merged_row.SUBSCRIPTION_DEPEND_FLAG := old_row.SUBSCRIPTION_DEPEND_FLAG; end if;
3680             if l_merged_row.SUBSTITUTION_WINDOW_CODE is null then l_merged_row.SUBSTITUTION_WINDOW_CODE := old_row.SUBSTITUTION_WINDOW_CODE; end if;
3681             if l_merged_row.SUBSTITUTION_WINDOW_DAYS is null then l_merged_row.SUBSTITUTION_WINDOW_DAYS := old_row.SUBSTITUTION_WINDOW_DAYS; end if;
3682             if l_merged_row.SUMMARY_FLAG is null then l_merged_row.SUMMARY_FLAG := old_row.SUMMARY_FLAG; end if;
3683             if l_merged_row.TAXABLE_FLAG is null then l_merged_row.TAXABLE_FLAG := old_row.TAXABLE_FLAG; end if;
3684             if l_merged_row.TAX_CODE is null then l_merged_row.TAX_CODE := old_row.TAX_CODE; end if;
3685             if l_merged_row.TIME_BILLABLE_FLAG is null then l_merged_row.TIME_BILLABLE_FLAG := old_row.TIME_BILLABLE_FLAG; end if;
3686             if l_merged_row.TRACKING_QUANTITY_IND is null then l_merged_row.TRACKING_QUANTITY_IND := old_row.TRACKING_QUANTITY_IND; end if;
3687             if l_merged_row.TRANSACTION_ID is null then l_merged_row.TRANSACTION_ID := old_row.TRANSACTION_ID; end if;
3688             if l_merged_row.UNDER_RETURN_TOLERANCE is null then l_merged_row.UNDER_RETURN_TOLERANCE := old_row.UNDER_RETURN_TOLERANCE; end if;
3689             if l_merged_row.UNDER_SHIPMENT_TOLERANCE is null then l_merged_row.UNDER_SHIPMENT_TOLERANCE := old_row.UNDER_SHIPMENT_TOLERANCE; end if;
3690             if l_merged_row.UNIT_HEIGHT is null then l_merged_row.UNIT_HEIGHT := old_row.UNIT_HEIGHT; end if;
3691             if l_merged_row.UNIT_LENGTH is null then l_merged_row.UNIT_LENGTH := old_row.UNIT_LENGTH; end if;
3692             if l_merged_row.UNIT_OF_ISSUE is null then l_merged_row.UNIT_OF_ISSUE := old_row.UNIT_OF_ISSUE; end if;
3693             if l_merged_row.UNIT_VOLUME is null then l_merged_row.UNIT_VOLUME := old_row.UNIT_VOLUME; end if;
3694             if l_merged_row.UNIT_WEIGHT is null then l_merged_row.UNIT_WEIGHT := old_row.UNIT_WEIGHT; end if;
3695             if l_merged_row.UNIT_WIDTH is null then l_merged_row.UNIT_WIDTH := old_row.UNIT_WIDTH; end if;
3696             if l_merged_row.UN_NUMBER_ID is null then l_merged_row.UN_NUMBER_ID := old_row.UN_NUMBER_ID; end if;
3697             if l_merged_row.USAGE_ITEM_FLAG is null then l_merged_row.USAGE_ITEM_FLAG := old_row.USAGE_ITEM_FLAG; end if;
3698             if l_merged_row.VARIABLE_LEAD_TIME is null then l_merged_row.VARIABLE_LEAD_TIME := old_row.VARIABLE_LEAD_TIME; end if;
3699             if l_merged_row.VEHICLE_ITEM_FLAG is null then l_merged_row.VEHICLE_ITEM_FLAG := old_row.VEHICLE_ITEM_FLAG; end if;
3700             if l_merged_row.VENDOR_WARRANTY_FLAG is null then l_merged_row.VENDOR_WARRANTY_FLAG := old_row.VENDOR_WARRANTY_FLAG; end if;
3701             if l_merged_row.VMI_FIXED_ORDER_QUANTITY is null then l_merged_row.VMI_FIXED_ORDER_QUANTITY := old_row.VMI_FIXED_ORDER_QUANTITY; end if;
3702             if l_merged_row.VMI_FORECAST_TYPE is null then l_merged_row.VMI_FORECAST_TYPE := old_row.VMI_FORECAST_TYPE; end if;
3703             if l_merged_row.VMI_MAXIMUM_DAYS is null then l_merged_row.VMI_MAXIMUM_DAYS := old_row.VMI_MAXIMUM_DAYS; end if;
3704             if l_merged_row.VMI_MAXIMUM_UNITS is null then l_merged_row.VMI_MAXIMUM_UNITS := old_row.VMI_MAXIMUM_UNITS; end if;
3705             if l_merged_row.VMI_MINIMUM_DAYS is null then l_merged_row.VMI_MINIMUM_DAYS := old_row.VMI_MINIMUM_DAYS; end if;
3706             if l_merged_row.VMI_MINIMUM_UNITS is null then l_merged_row.VMI_MINIMUM_UNITS := old_row.VMI_MINIMUM_UNITS; end if;
3707             if l_merged_row.VOLUME_UOM_CODE is null then l_merged_row.VOLUME_UOM_CODE := old_row.VOLUME_UOM_CODE; end if;
3708             if l_merged_row.VOL_DISCOUNT_EXEMPT_FLAG is null then l_merged_row.VOL_DISCOUNT_EXEMPT_FLAG := old_row.VOL_DISCOUNT_EXEMPT_FLAG; end if;
3709             if l_merged_row.WARRANTY_VENDOR_ID is null then l_merged_row.WARRANTY_VENDOR_ID := old_row.WARRANTY_VENDOR_ID; end if;
3710             if l_merged_row.WEB_STATUS is null then l_merged_row.WEB_STATUS := old_row.WEB_STATUS; end if;
3711             if l_merged_row.WEIGHT_UOM_CODE is null then l_merged_row.WEIGHT_UOM_CODE := old_row.WEIGHT_UOM_CODE; end if;
3712             if l_merged_row.WH_UPDATE_DATE is null then l_merged_row.WH_UPDATE_DATE := old_row.WH_UPDATE_DATE; end if;
3713             if l_merged_row.WIP_SUPPLY_LOCATOR_ID is null then l_merged_row.WIP_SUPPLY_LOCATOR_ID := old_row.WIP_SUPPLY_LOCATOR_ID; end if;
3714             if l_merged_row.WIP_SUPPLY_SUBINVENTORY is null then l_merged_row.WIP_SUPPLY_SUBINVENTORY := old_row.WIP_SUPPLY_SUBINVENTORY; end if;
3715             if l_merged_row.WIP_SUPPLY_TYPE is null then l_merged_row.WIP_SUPPLY_TYPE := old_row.WIP_SUPPLY_TYPE; end if;
3716             -- end generated code
3717         END LOOP; -- over old rows
3718 
3719         Debug_Conc_Log( l_proc_log_prefix || 'Total rows requiring merging = ' || c_target_rows%ROWCOUNT );
3720         IF c_target_rows%ISOPEN THEN
3721             CLOSE c_target_rows;
3722         END IF;
3723 
3724         IF l_merged_rows IS NOT NULL THEN
3725             -- delete
3726             Debug_Conc_Log( l_proc_log_prefix || 'Deleting ' || l_old_rowids.COUNT || ' old rows ...' );
3727             FORALL rid_ix IN INDICES OF l_old_rowids
3728                 DELETE FROM MTL_SYSTEM_ITEMS_INTERFACE
3729                     WHERE ROWID = l_old_rowids( rid_ix );
3730             -- insert
3731             Debug_Conc_Log( l_proc_log_prefix || 'Inserting ' || l_merged_rows.COUNT || ' merged rows ...' );
3732             FORALL row_index IN INDICES OF l_merged_rows
3733                 INSERT INTO MTL_SYSTEM_ITEMS_INTERFACE
3734                     VALUES l_merged_rows( row_index );
3735         END IF;
3736         Debug_Conc_Log( l_proc_log_prefix || 'Exiting' );
3737     EXCEPTION WHEN OTHERS THEN
3738         Debug_Conc_Log( l_proc_log_prefix || 'Error - ' || SQLERRM);
3739         IF c_target_rows%ISOPEN THEN
3740             CLOSE c_target_rows;
3741         END IF;
3742         RAISE;
3743     END Merge_Items_For_Import;
3744 
3745     -- Merges Item Revision records
3746     PROCEDURE Merge_Revs_For_Import( p_batch_id       IN NUMBER
3747                                    , p_master_org_id  IN NUMBER
3748                                    )
3749     IS
3750         SUBTYPE MIRI_ROW   IS MTL_ITEM_REVISIONS_INTERFACE%ROWTYPE;
3751         TYPE MIRI_ROWS  IS TABLE OF MIRI_ROW INDEX BY BINARY_INTEGER;
3752 
3753         /*
3754          * Note that the organization_id column is filled in from the organization_code and batch organization_id
3755          *   as part of resolve_ssxref_on_data_load
3756          * revision column is filled in from the revision_id before this cursor is fetched.
3757          */
3758         CURSOR c_target_revs IS
3759           SELECT *
3760           FROM
3761             (SELECT
3762               ROWID rid,
3763               COUNT( * ) OVER ( PARTITION BY ITEM_NUMBER, ORGANIZATION_ID, REVISION ) cnt,
3764               RANK() OVER ( ORDER BY ITEM_NUMBER, ORGANIZATION_ID, REVISION ) rnk,
3765               miri.*
3766             FROM MTL_ITEM_REVISIONS_INTERFACE miri
3767             WHERE PROCESS_FLAG   = 1
3768               AND SET_PROCESS_ID = p_batch_id
3769               AND ITEM_NUMBER IS NOT NULL
3770               AND ORGANIZATION_ID IS NOT NULL
3771               AND REVISION IS NOT NULL
3772               AND EXISTS
3773                   (SELECT NULL
3774                    FROM MTL_PARAMETERS mp
3775                    WHERE mp.ORGANIZATION_ID        = miri.ORGANIZATION_ID
3776                      AND mp.MASTER_ORGANIZATION_ID = p_master_org_id
3777                   )
3778             ) sub
3779           WHERE sub.cnt > 1
3780           ORDER BY rnk, last_update_date DESC NULLS LAST, interface_table_unique_id DESC NULLS LAST;
3781 
3782         TYPE TARGET_ROWS    IS TABLE OF c_target_revs%ROWTYPE;
3783 
3784         l_merged_rows   MIRI_ROWS;
3785         l_new_rows      MIRI_ROWS;
3786         l_merged_row    MIRI_ROW;
3787         l_old_rows      TARGET_ROWS;
3788         l_old_rowids    UROWID_TABLE;
3789 
3790         l_candidate_trans MTL_ITEM_REVISIONS_INTERFACE.TRANSACTION_TYPE%TYPE;
3791 
3792         l_mrow_ix       PLS_INTEGER := 0;
3793         l_new_row_idx   PLS_INTEGER := 0;
3794         l_cur_rank      PLS_INTEGER := 0; -- because rank() starts at 1
3795 
3796         l_proc_log_prefix CONSTANT VARCHAR2(30) := 'Merge_Revs_For_Import - ';
3797     BEGIN
3798         Debug_Conc_Log( l_proc_log_prefix || 'Entering' );
3799         Debug_Conc_Log( l_proc_log_prefix || 'Batch ID: ' || p_batch_id );
3800 
3801         UPDATE MTL_ITEM_REVISIONS_INTERFACE miri
3802             SET REVISION = NVL( (   SELECT r.REVISION
3803                                     FROM MTL_ITEM_REVISIONS_B r
3804                                     WHERE r.REVISION_ID       = miri.REVISION_ID
3805                                       AND r.ORGANIZATION_ID   = miri.ORGANIZATION_ID
3806                                 )
3807                               , REVISION
3808                               )
3809         WHERE REVISION_ID IS NOT NULL
3810           AND SET_PROCESS_ID = p_batch_id
3811           AND PROCESS_FLAG = 1
3812           AND REVISION IS NULL;
3813 
3814         UPDATE MTL_ITEM_REVISIONS_INTERFACE miri
3815         SET ITEM_NUMBER = (SELECT CONCATENATED_SEGMENTS
3816                            FROM MTL_SYSTEM_ITEMS_KFV
3817                            WHERE INVENTORY_ITEM_ID = miri.INVENTORY_ITEM_ID
3818                              AND ORGANIZATION_ID = miri.ORGANIZATION_ID)
3819         WHERE SET_PROCESS_ID = p_batch_id
3820           AND PROCESS_FLAG = 1
3821           AND INVENTORY_ITEM_ID IS NOT NULL
3822           AND ITEM_NUMBER IS NULL;
3823 
3824         OPEN c_target_revs;
3825         FETCH c_target_revs BULK COLLECT INTO l_old_rows;
3826         CLOSE c_target_revs;
3827 
3828         Debug_Conc_Log( l_proc_log_prefix || 'Total rows requiring merging = ' || l_old_rows.COUNT );
3829         IF 0 <>  l_old_rows.COUNT THEN
3830             l_old_rowids := UROWID_TABLE( );
3831             l_old_rowids.EXTEND( l_old_rows.COUNT );
3832 
3833             FOR idx IN l_old_rows.FIRST .. l_old_rows.LAST LOOP
3834                 l_old_rowids( idx ) := l_old_rows( idx ).RID;
3835 
3836                 IF ( l_cur_rank <> l_old_rows( idx ).RNK )
3837                 THEN
3838                     IF l_new_row_idx > 0 THEN
3839                         FOR i IN 1..l_new_row_idx LOOP
3840                             Debug_Conc_Log( l_proc_log_prefix || '  Creating merged record for SSR, SS-ID = ' ||
3841                                                                  l_new_rows( i ).SOURCE_SYSTEM_REFERENCE || ', ' ||
3842                                                                  l_new_rows( i ).SOURCE_SYSTEM_ID);
3843                             l_mrow_ix := l_mrow_ix + 1;
3844                             l_merged_rows( l_mrow_ix )                           := l_merged_row;
3845                             l_merged_rows( l_mrow_ix ).SET_PROCESS_ID            := l_new_rows( i ).SET_PROCESS_ID;
3846                             l_merged_rows( l_mrow_ix ).PROCESS_FLAG              := l_new_rows( i ).PROCESS_FLAG;
3847                             l_merged_rows( l_mrow_ix ).SOURCE_SYSTEM_ID          := l_new_rows( i ).SOURCE_SYSTEM_ID;
3848                             l_merged_rows( l_mrow_ix ).SOURCE_SYSTEM_REFERENCE   := l_new_rows( i ).SOURCE_SYSTEM_REFERENCE;
3849                             l_merged_rows( l_mrow_ix ).CREATED_BY                := l_new_rows( i ).CREATED_BY;
3850                             l_merged_rows( l_mrow_ix ).LAST_UPDATED_BY           := l_new_rows( i ).LAST_UPDATED_BY;
3851                             l_merged_rows( l_mrow_ix ).REQUEST_ID                := FND_GLOBAL.CONC_REQUEST_ID;
3852                             l_merged_rows( l_mrow_ix ).PROGRAM_APPLICATION_ID    := FND_GLOBAL.PROG_APPL_ID;
3853                             l_merged_rows( l_mrow_ix ).PROGRAM_ID                := FND_GLOBAL.CONC_PROGRAM_ID;
3854                             l_merged_rows( l_mrow_ix ).PROGRAM_UPDATE_DATE       := SYSDATE;
3855                         END LOOP; --FOR i IN 1..l_new_row_idx LOOP
3856                     END IF; --IF l_new_row_idx > 0 THEN
3857                     l_cur_rank := l_old_rows( idx ).RNK;
3858                     Debug_Conc_Log( l_proc_log_prefix || '  Starting new merged row; rank = '|| l_cur_rank );
3859                     Debug_Conc_Log( l_proc_log_prefix || '    Item, Org-ID, Item-ID, Revision = ' ||
3860                                                          l_old_rows( idx ).ITEM_NUMBER || ', ' ||
3861                                                          l_old_rows( idx ).ORGANIZATION_ID || ', ' ||
3862                                                          l_old_rows( idx ).INVENTORY_ITEM_ID || ', ' ||
3863                                                          l_old_rows( idx ).REVISION);
3864                     l_new_rows.DELETE;
3865                     l_new_row_idx := 1;
3866                     l_new_rows( l_new_row_idx ).PROCESS_FLAG              := l_old_rows( idx ).PROCESS_FLAG;
3867                     -- initializing l_merged_row . This row will contain the current merged row for an item
3868                     l_merged_row := NULL;
3869                     l_merged_row.SET_PROCESS_ID            := p_batch_id;
3870                     l_merged_row.PROCESS_FLAG              := l_old_rows( idx ).PROCESS_FLAG;
3871                 ELSE
3872                     Debug_Conc_Log( l_proc_log_prefix || '  Merging another record into current merged row; rank = '|| l_cur_rank );
3873                     Debug_Conc_Log( l_proc_log_prefix || '    Item, Org-ID, Item-ID, Revision = ' ||
3874                                                          l_old_rows( idx ).ITEM_NUMBER || ', ' ||
3875                                                          l_old_rows( idx ).ORGANIZATION_ID || ', ' ||
3876                                                          l_old_rows( idx ).INVENTORY_ITEM_ID || ', ' ||
3877                                                          l_old_rows( idx ).REVISION);
3878                     l_new_row_idx := l_new_row_idx + 1;
3879                     l_new_rows( l_new_row_idx ).PROCESS_FLAG              := 111;
3880                 END IF;
3881 
3882                 l_new_rows( l_new_row_idx ).SET_PROCESS_ID            := p_batch_id;
3883                 l_new_rows( l_new_row_idx ).SOURCE_SYSTEM_ID          := l_old_rows( idx ).SOURCE_SYSTEM_ID;
3884                 l_new_rows( l_new_row_idx ).SOURCE_SYSTEM_REFERENCE   := l_old_rows( idx ).SOURCE_SYSTEM_REFERENCE;
3885                 l_new_rows( l_new_row_idx ).CREATED_BY                := l_old_rows( idx ).CREATED_BY;
3886                 l_new_rows( l_new_row_idx ).LAST_UPDATED_BY           := l_old_rows( idx ).LAST_UPDATED_BY;
3887 
3888                 -- Special Cases:
3889                 -- Transaction type
3890                 l_candidate_trans := UPPER( l_old_rows( idx ).TRANSACTION_TYPE );
3891 
3892                 IF      l_merged_row.TRANSACTION_TYPE IS NULL
3893                     OR  l_merged_row.TRANSACTION_TYPE <> l_candidate_trans -- <> filters out nulls
3894                 THEN
3895                     -- CREATE > SYNC > UPDATE : order of case expression matters
3896                     l_merged_row.TRANSACTION_TYPE :=
3897                         CASE
3898                             WHEN l_merged_row.TRANSACTION_TYPE = G_TRANS_TYPE_CREATE
3899                               OR l_candidate_trans = G_TRANS_TYPE_CREATE                            THEN G_TRANS_TYPE_CREATE
3900                             WHEN l_merged_row.TRANSACTION_TYPE = G_TRANS_TYPE_SYNC
3901                               OR l_candidate_trans = G_TRANS_TYPE_SYNC                              THEN G_TRANS_TYPE_SYNC
3902                             WHEN l_merged_row.TRANSACTION_TYPE = G_TRANS_TYPE_UPDATE
3903                               OR l_candidate_trans = G_TRANS_TYPE_UPDATE                            THEN G_TRANS_TYPE_UPDATE
3904                             ELSE NULL -- INVALID transaction types encountered ...
3905                         END;
3906                 END IF;
3907 
3908                 -- The following columns need to be treated as atomic groups
3909                 -- 1. Item Identifier
3910                 IF      l_merged_row.INVENTORY_ITEM_ID  IS NULL
3911                     AND l_merged_row.ITEM_NUMBER        IS NULL
3912                 THEN
3913                     l_merged_row.INVENTORY_ITEM_ID  := l_old_rows( idx ).INVENTORY_ITEM_ID;
3914                     l_merged_row.ITEM_NUMBER        := l_old_rows( idx ).ITEM_NUMBER;
3915                 END IF;
3916 
3917                 -- 2. Organization
3918                 IF      l_merged_row.ORGANIZATION_ID    IS NULL
3919                     AND l_merged_row.ORGANIZATION_CODE  IS NULL
3920                 THEN
3921                     l_merged_row.ORGANIZATION_ID        := l_old_rows( idx ).ORGANIZATION_ID;
3922                     l_merged_row.ORGANIZATION_CODE      := l_old_rows( idx ).ORGANIZATION_CODE;
3923                 END IF;
3924 
3925                 -- 3. Template Identifier
3926                 IF      l_merged_row.TEMPLATE_ID        IS NULL
3927                     AND l_merged_row.TEMPLATE_NAME      IS NULL
3928                 THEN
3929                     l_merged_row.TEMPLATE_ID    := l_old_rows( idx ).TEMPLATE_ID ;
3930                     l_merged_row.TEMPLATE_NAME  := l_old_rows( idx ).TEMPLATE_NAME ;
3931                 END IF;
3932 
3933                 -- Non-special cased
3934                 if l_merged_row.ATTRIBUTE1 is null then l_merged_row.ATTRIBUTE1 := l_old_rows( idx ).ATTRIBUTE1; end if;
3935                 if l_merged_row.ATTRIBUTE10 is null then l_merged_row.ATTRIBUTE10 := l_old_rows( idx ).ATTRIBUTE10; end if;
3936                 if l_merged_row.ATTRIBUTE11 is null then l_merged_row.ATTRIBUTE11 := l_old_rows( idx ).ATTRIBUTE11; end if;
3937                 if l_merged_row.ATTRIBUTE12 is null then l_merged_row.ATTRIBUTE12 := l_old_rows( idx ).ATTRIBUTE12; end if;
3938                 if l_merged_row.ATTRIBUTE13 is null then l_merged_row.ATTRIBUTE13 := l_old_rows( idx ).ATTRIBUTE13; end if;
3939                 if l_merged_row.ATTRIBUTE14 is null then l_merged_row.ATTRIBUTE14 := l_old_rows( idx ).ATTRIBUTE14; end if;
3940                 if l_merged_row.ATTRIBUTE15 is null then l_merged_row.ATTRIBUTE15 := l_old_rows( idx ).ATTRIBUTE15; end if;
3941                 if l_merged_row.ATTRIBUTE2 is null then l_merged_row.ATTRIBUTE2 := l_old_rows( idx ).ATTRIBUTE2; end if;
3942                 if l_merged_row.ATTRIBUTE3 is null then l_merged_row.ATTRIBUTE3 := l_old_rows( idx ).ATTRIBUTE3; end if;
3943                 if l_merged_row.ATTRIBUTE4 is null then l_merged_row.ATTRIBUTE4 := l_old_rows( idx ).ATTRIBUTE4; end if;
3944                 if l_merged_row.ATTRIBUTE5 is null then l_merged_row.ATTRIBUTE5 := l_old_rows( idx ).ATTRIBUTE5; end if;
3945                 if l_merged_row.ATTRIBUTE6 is null then l_merged_row.ATTRIBUTE6 := l_old_rows( idx ).ATTRIBUTE6; end if;
3946                 if l_merged_row.ATTRIBUTE7 is null then l_merged_row.ATTRIBUTE7 := l_old_rows( idx ).ATTRIBUTE7; end if;
3947                 if l_merged_row.ATTRIBUTE8 is null then l_merged_row.ATTRIBUTE8 := l_old_rows( idx ).ATTRIBUTE8; end if;
3948                 if l_merged_row.ATTRIBUTE9 is null then l_merged_row.ATTRIBUTE9 := l_old_rows( idx ).ATTRIBUTE9; end if;
3949                 if l_merged_row.ATTRIBUTE_CATEGORY is null then l_merged_row.ATTRIBUTE_CATEGORY := l_old_rows( idx ).ATTRIBUTE_CATEGORY; end if;
3950                 if l_merged_row.CHANGE_ID is null then l_merged_row.CHANGE_ID := l_old_rows( idx ).CHANGE_ID; end if;
3951                 if l_merged_row.CHANGE_NOTICE is null then l_merged_row.CHANGE_NOTICE := l_old_rows( idx ).CHANGE_NOTICE; end if;
3952                 if l_merged_row.CURRENT_PHASE_ID is null then l_merged_row.CURRENT_PHASE_ID := l_old_rows( idx ).CURRENT_PHASE_ID; end if;
3953                 if l_merged_row.DESCRIPTION is null then l_merged_row.DESCRIPTION := l_old_rows( idx ).DESCRIPTION; end if;
3954                 if l_merged_row.ECN_INITIATION_DATE is null then l_merged_row.ECN_INITIATION_DATE := l_old_rows( idx ).ECN_INITIATION_DATE; end if;
3955                 if l_merged_row.EFFECTIVITY_DATE is null then l_merged_row.EFFECTIVITY_DATE := l_old_rows( idx ).EFFECTIVITY_DATE; end if;
3956                 if l_merged_row.IMPLEMENTATION_DATE is null then l_merged_row.IMPLEMENTATION_DATE := l_old_rows( idx ).IMPLEMENTATION_DATE; end if;
3957                 if l_merged_row.IMPLEMENTED_SERIAL_NUMBER is null then l_merged_row.IMPLEMENTED_SERIAL_NUMBER := l_old_rows( idx ).IMPLEMENTED_SERIAL_NUMBER; end if;
3958                 if l_merged_row.LIFECYCLE_ID is null then l_merged_row.LIFECYCLE_ID := l_old_rows( idx ).LIFECYCLE_ID; end if;
3959                 if l_merged_row.REVISED_ITEM_SEQUENCE_ID is null then l_merged_row.REVISED_ITEM_SEQUENCE_ID := l_old_rows( idx ).REVISED_ITEM_SEQUENCE_ID; end if;
3960                 if l_merged_row.REVISION is null then l_merged_row.REVISION := l_old_rows( idx ).REVISION; end if;
3961                 if l_merged_row.REVISION_ID is null then l_merged_row.REVISION_ID := l_old_rows( idx ).REVISION_ID; end if;
3962                 if l_merged_row.REVISION_LABEL is null then l_merged_row.REVISION_LABEL := l_old_rows( idx ).REVISION_LABEL; end if;
3963                 if l_merged_row.REVISION_REASON is null then l_merged_row.REVISION_REASON := l_old_rows( idx ).REVISION_REASON; end if;
3964                 if l_merged_row.TRANSACTION_ID is null then l_merged_row.TRANSACTION_ID := l_old_rows( idx ).TRANSACTION_ID; end if;
3965 
3966                 IF idx = l_old_rows.LAST AND l_new_row_idx > 0 THEN
3967                     FOR i IN 1..l_new_row_idx LOOP
3968                         Debug_Conc_Log( l_proc_log_prefix || '  No More records found for processing.');
3969                         Debug_Conc_Log( l_proc_log_prefix || '  Creating merged record for SSR, SS-ID = ' ||
3970                                                              l_new_rows( i ).SOURCE_SYSTEM_REFERENCE || ', ' ||
3971                                                              l_new_rows( i ).SOURCE_SYSTEM_ID);
3972                         l_mrow_ix := l_mrow_ix + 1;
3973                         l_merged_rows( l_mrow_ix )                           := l_merged_row;
3974                         l_merged_rows( l_mrow_ix ).SET_PROCESS_ID            := l_new_rows( i ).SET_PROCESS_ID;
3975                         l_merged_rows( l_mrow_ix ).PROCESS_FLAG              := l_new_rows( i ).PROCESS_FLAG;
3976                         l_merged_rows( l_mrow_ix ).SOURCE_SYSTEM_ID          := l_new_rows( i ).SOURCE_SYSTEM_ID;
3977                         l_merged_rows( l_mrow_ix ).SOURCE_SYSTEM_REFERENCE   := l_new_rows( i ).SOURCE_SYSTEM_REFERENCE;
3978                         l_merged_rows( l_mrow_ix ).CREATED_BY                := l_new_rows( i ).CREATED_BY;
3979                         l_merged_rows( l_mrow_ix ).LAST_UPDATED_BY           := l_new_rows( i ).LAST_UPDATED_BY;
3980                         l_merged_rows( l_mrow_ix ).REQUEST_ID                := FND_GLOBAL.CONC_REQUEST_ID;
3981                         l_merged_rows( l_mrow_ix ).PROGRAM_APPLICATION_ID    := FND_GLOBAL.PROG_APPL_ID;
3982                         l_merged_rows( l_mrow_ix ).PROGRAM_ID                := FND_GLOBAL.CONC_PROGRAM_ID;
3983                         l_merged_rows( l_mrow_ix ).PROGRAM_UPDATE_DATE       := SYSDATE;
3984                     END LOOP; --FOR i IN 1..l_new_row_idx LOOP
3985                 END IF; --IF idx = l_old_rows.LAST AND l_new_row_idx > 0 THEN
3986             END LOOP; -- loop over old rows
3987 
3988             IF l_merged_rows IS NOT NULL THEN
3989                 -- delete
3990                 Debug_Conc_Log( l_proc_log_prefix || 'Deleting ' || l_old_rowids.COUNT || ' old rows ...' );
3991                 FORALL rid_ix IN INDICES OF l_old_rowids
3992                     DELETE FROM MTL_ITEM_REVISIONS_INTERFACE
3993                         WHERE ROWID = l_old_rowids( rid_ix );
3994                 -- insert
3995                 Debug_Conc_Log( l_proc_log_prefix || 'Inserting ' || l_merged_rows.COUNT || ' merged rows ...' );
3996                 FORALL row_index IN INDICES OF l_merged_rows
3997                     INSERT INTO MTL_ITEM_REVISIONS_INTERFACE
3998                         VALUES l_merged_rows( row_index );
3999             END IF;
4000         END IF; -- ENDS IF l_old_rows.count <> 0
4001         Debug_Conc_Log( l_proc_log_prefix || 'Exiting' );
4002     EXCEPTION WHEN OTHERS THEN
4003         Debug_Conc_Log( l_proc_log_prefix || 'Error - ' || SQLERRM);
4004         IF c_target_revs%ISOPEN THEN
4005             CLOSE c_target_revs;
4006         END IF;
4007         RAISE;
4008     END Merge_Revs_For_Import;
4009 
4010     -- Merges Item Category assignments
4011     PROCEDURE Merge_Categories_For_Import( p_batch_id       IN NUMBER
4012                                          , p_master_org_id  IN NUMBER
4013                                          )
4014     IS
4015         SUBTYPE MICI_ROW   IS MTL_ITEM_CATEGORIES_INTERFACE%ROWTYPE;
4016         TYPE MICI_ROWS  IS TABLE OF MICI_ROW INDEX BY BINARY_INTEGER;
4017 
4018         /*
4019          * Note that the organization_id column is filled in from the organization_code and batch organization_id
4020          *   as part of resolve_ssxref_on_data_load
4021          */
4022         CURSOR c_target_categories IS
4023           SELECT *
4024           FROM
4025             (SELECT
4026               ROWID rid,
4027               COUNT( * ) OVER ( PARTITION BY ITEM_NUMBER, ORGANIZATION_ID, CATEGORY_SET_NAME, CATEGORY_NAME ) cnt,
4028               RANK() OVER ( ORDER BY ITEM_NUMBER, ORGANIZATION_ID, CATEGORY_SET_NAME, CATEGORY_NAME ) rnk,
4029               mici.*
4030             FROM MTL_ITEM_CATEGORIES_INTERFACE mici
4031             WHERE PROCESS_FLAG   = 1
4032               AND SET_PROCESS_ID = p_batch_id
4033               AND ITEM_NUMBER IS NOT NULL
4034               AND ORGANIZATION_ID IS NOT NULL
4035               AND CATEGORY_SET_NAME IS NOT NULL
4036               AND CATEGORY_NAME IS NOT NULL
4037               AND EXISTS
4038                   (SELECT NULL
4039                    FROM MTL_PARAMETERS mp
4040                    WHERE mp.ORGANIZATION_ID        = mici.ORGANIZATION_ID
4041                      AND mp.MASTER_ORGANIZATION_ID = p_master_org_id
4042                   )
4043             ) sub
4044           WHERE sub.cnt > 1
4045           ORDER BY rnk, last_update_date DESC NULLS LAST;
4046 
4047         TYPE TARGET_ROWS    IS TABLE OF c_target_categories%ROWTYPE;
4048 
4049         l_merged_rows   MICI_ROWS;
4050         l_new_rows      MICI_ROWS;
4051         l_merged_row    MICI_ROW;
4052         l_old_rows      TARGET_ROWS;
4053         l_old_rowids    UROWID_TABLE;
4054 
4055         l_candidate_trans MTL_ITEM_CATEGORIES_INTERFACE.TRANSACTION_TYPE%TYPE;
4056 
4057         l_mrow_ix       PLS_INTEGER := 0;
4058         l_new_row_idx   PLS_INTEGER := 0;
4059         l_cur_rank      PLS_INTEGER := 0; -- because rank() starts at 1
4060 
4061         l_proc_log_prefix CONSTANT VARCHAR2(50) := 'Merge_Categories_For_Import - ';
4062     BEGIN
4063         Debug_Conc_Log( l_proc_log_prefix || 'Entering' );
4064         Debug_Conc_Log( l_proc_log_prefix || 'Batch ID: ' || p_batch_id );
4065 
4066         UPDATE MTL_ITEM_CATEGORIES_INTERFACE mici
4067             SET CATEGORY_SET_NAME = NVL( mici.CATEGORY_SET_NAME,
4068                                          ( SELECT mcs.CATEGORY_SET_NAME
4069                                            FROM MTL_CATEGORY_SETS mcs
4070                                            WHERE mcs.CATEGORY_SET_ID     = mici.CATEGORY_SET_ID
4071                                          )
4072                                        ),
4073                 CATEGORY_NAME     = NVL( mici.CATEGORY_NAME,
4074                                          ( SELECT mc.CONCATENATED_SEGMENTS
4075                                            FROM MTL_CATEGORIES_KFV mc
4076                                            WHERE mc.CATEGORY_ID     = mici.CATEGORY_ID
4077                                          )
4078                                        )
4079         WHERE ( ( CATEGORY_NAME IS NULL AND CATEGORY_ID IS NOT NULL )
4080              OR ( CATEGORY_SET_NAME IS NULL AND CATEGORY_SET_ID IS NOT NULL )
4081               )
4082           AND SET_PROCESS_ID = p_batch_id
4083           AND PROCESS_FLAG = 1;
4084 
4085         UPDATE MTL_ITEM_CATEGORIES_INTERFACE mici
4086         SET ITEM_NUMBER = (SELECT CONCATENATED_SEGMENTS
4087                            FROM MTL_SYSTEM_ITEMS_KFV
4088                            WHERE INVENTORY_ITEM_ID = mici.INVENTORY_ITEM_ID
4089                              AND ORGANIZATION_ID = mici.ORGANIZATION_ID)
4090         WHERE SET_PROCESS_ID = p_batch_id
4091           AND PROCESS_FLAG = 1
4092           AND INVENTORY_ITEM_ID IS NOT NULL
4093           AND ITEM_NUMBER IS NULL;
4094 
4095         OPEN c_target_categories;
4096         FETCH c_target_categories BULK COLLECT INTO l_old_rows;
4097         CLOSE c_target_categories;
4098 
4099         Debug_Conc_Log( l_proc_log_prefix || 'Total rows requiring merging = ' || l_old_rows.COUNT );
4100         IF 0 <>  l_old_rows.COUNT THEN
4101             l_old_rowids := UROWID_TABLE( );
4102             l_old_rowids.EXTEND( l_old_rows.COUNT );
4103 
4104             FOR idx IN l_old_rows.FIRST .. l_old_rows.LAST LOOP
4105                 l_old_rowids( idx ) := l_old_rows( idx ).RID;
4106 
4107                 IF ( l_cur_rank <> l_old_rows( idx ).RNK )
4108                 THEN
4109                     IF l_new_row_idx > 0 THEN
4110                         FOR i IN 1..l_new_row_idx LOOP
4111                             Debug_Conc_Log( l_proc_log_prefix || '  Creating merged record for SSR, SS-ID = ' ||
4112                                                                  l_new_rows( i ).SOURCE_SYSTEM_REFERENCE || ', ' ||
4113                                                                  l_new_rows( i ).SOURCE_SYSTEM_ID);
4114                             l_mrow_ix := l_mrow_ix + 1;
4115                             l_merged_rows( l_mrow_ix )                           := l_merged_row;
4116                             l_merged_rows( l_mrow_ix ).SET_PROCESS_ID            := l_new_rows( i ).SET_PROCESS_ID;
4117                             l_merged_rows( l_mrow_ix ).PROCESS_FLAG              := l_new_rows( i ).PROCESS_FLAG;
4118                             l_merged_rows( l_mrow_ix ).SOURCE_SYSTEM_ID          := l_new_rows( i ).SOURCE_SYSTEM_ID;
4119                             l_merged_rows( l_mrow_ix ).SOURCE_SYSTEM_REFERENCE   := l_new_rows( i ).SOURCE_SYSTEM_REFERENCE;
4120                             l_merged_rows( l_mrow_ix ).CREATED_BY                := l_new_rows( i ).CREATED_BY;
4121                             l_merged_rows( l_mrow_ix ).LAST_UPDATED_BY           := l_new_rows( i ).LAST_UPDATED_BY;
4122                             l_merged_rows( l_mrow_ix ).REQUEST_ID                := FND_GLOBAL.CONC_REQUEST_ID;
4123                             l_merged_rows( l_mrow_ix ).PROGRAM_APPLICATION_ID    := FND_GLOBAL.PROG_APPL_ID;
4124                             l_merged_rows( l_mrow_ix ).PROGRAM_ID                := FND_GLOBAL.CONC_PROGRAM_ID;
4125                             l_merged_rows( l_mrow_ix ).PROGRAM_UPDATE_DATE       := SYSDATE;
4126                         END LOOP; --FOR i IN 1..l_new_row_idx LOOP
4127                     END IF; --IF l_new_row_idx > 0 THEN
4128                     l_cur_rank := l_old_rows( idx ).RNK;
4129                     Debug_Conc_Log( l_proc_log_prefix || '  Starting new merged row; rank = '|| l_cur_rank );
4130                     Debug_Conc_Log( l_proc_log_prefix || '    Item, Org-ID, Item-ID, Cat-Set, Cat = ' ||
4131                                                          l_old_rows( idx ).ITEM_NUMBER || ', ' ||
4132                                                          l_old_rows( idx ).ORGANIZATION_ID || ', ' ||
4133                                                          l_old_rows( idx ).INVENTORY_ITEM_ID || ', ' ||
4134                                                          l_old_rows( idx ).CATEGORY_SET_NAME || ', ' ||
4135                                                          l_old_rows( idx ).CATEGORY_NAME);
4136                     l_new_rows.DELETE;
4137                     l_new_row_idx := 1;
4138                     l_new_rows( l_new_row_idx ).PROCESS_FLAG              := l_old_rows( idx ).PROCESS_FLAG;
4139                     -- initializing l_merged_row . This row will contain the current merged row for an item
4140                     l_merged_row := NULL;
4141                     l_merged_row.SET_PROCESS_ID            := p_batch_id;
4142                     l_merged_row.PROCESS_FLAG              := l_old_rows( idx ).PROCESS_FLAG;
4143                 ELSE
4144                     Debug_Conc_Log( l_proc_log_prefix || '  Merging another record into current merged row; rank = '|| l_cur_rank );
4145                     Debug_Conc_Log( l_proc_log_prefix || '    Item, Org-ID, Item-ID, Cat-Set, Cat = ' ||
4146                                                          l_old_rows( idx ).ITEM_NUMBER || ', ' ||
4147                                                          l_old_rows( idx ).ORGANIZATION_ID || ', ' ||
4148                                                          l_old_rows( idx ).INVENTORY_ITEM_ID || ', ' ||
4149                                                          l_old_rows( idx ).CATEGORY_SET_NAME || ', ' ||
4150                                                          l_old_rows( idx ).CATEGORY_NAME);
4151                     l_new_row_idx := l_new_row_idx + 1;
4152                     l_new_rows( l_new_row_idx ).PROCESS_FLAG              := 111;
4153                 END IF;
4154 
4155                 l_new_rows( l_new_row_idx ).SET_PROCESS_ID            := p_batch_id;
4156                 l_new_rows( l_new_row_idx ).SOURCE_SYSTEM_ID          := l_old_rows( idx ).SOURCE_SYSTEM_ID;
4157                 l_new_rows( l_new_row_idx ).SOURCE_SYSTEM_REFERENCE   := l_old_rows( idx ).SOURCE_SYSTEM_REFERENCE;
4158                 l_new_rows( l_new_row_idx ).CREATED_BY                := l_old_rows( idx ).CREATED_BY;
4159                 l_new_rows( l_new_row_idx ).LAST_UPDATED_BY           := l_old_rows( idx ).LAST_UPDATED_BY;
4160 
4161                 -- Special Cases:
4162                 -- Transaction type
4163                 l_candidate_trans := UPPER( l_old_rows( idx ).TRANSACTION_TYPE );
4164 
4165                 IF      l_merged_row.TRANSACTION_TYPE IS NULL
4166                     OR  l_merged_row.TRANSACTION_TYPE <> l_candidate_trans -- <> filters out nulls
4167                 THEN
4168                     -- CREATE > SYNC > UPDATE : order of case expression matters
4169                     l_merged_row.TRANSACTION_TYPE :=
4170                         CASE
4171                             WHEN l_merged_row.TRANSACTION_TYPE = G_TRANS_TYPE_CREATE
4172                               OR l_candidate_trans = G_TRANS_TYPE_CREATE                            THEN G_TRANS_TYPE_CREATE
4173                             WHEN l_merged_row.TRANSACTION_TYPE = G_TRANS_TYPE_SYNC
4174                               OR l_candidate_trans = G_TRANS_TYPE_SYNC                              THEN G_TRANS_TYPE_SYNC
4175                             WHEN l_merged_row.TRANSACTION_TYPE = G_TRANS_TYPE_UPDATE
4176                               OR l_candidate_trans = G_TRANS_TYPE_UPDATE                            THEN G_TRANS_TYPE_UPDATE
4177                             ELSE NULL -- INVALID transaction types encountered ...
4178                         END;
4179                 END IF;
4180 
4181                 -- The following columns need to be treated as atomic groups
4182                 -- 1. Item Identifier
4183                 IF      l_merged_row.INVENTORY_ITEM_ID  IS NULL
4184                     AND l_merged_row.ITEM_NUMBER        IS NULL
4185                 THEN
4186                     l_merged_row.INVENTORY_ITEM_ID  := l_old_rows( idx ).INVENTORY_ITEM_ID;
4187                     l_merged_row.ITEM_NUMBER        := l_old_rows( idx ).ITEM_NUMBER;
4188                 END IF;
4189 
4190                 -- 2. Organization
4191                 IF      l_merged_row.ORGANIZATION_ID    IS NULL
4192                     AND l_merged_row.ORGANIZATION_CODE  IS NULL
4193                 THEN
4194                     l_merged_row.ORGANIZATION_ID        := l_old_rows( idx ).ORGANIZATION_ID;
4195                     l_merged_row.ORGANIZATION_CODE      := l_old_rows( idx ).ORGANIZATION_CODE;
4196                 END IF;
4197 
4198                 -- 3. Category Set
4199                 IF      l_merged_row.CATEGORY_SET_ID    IS NULL
4200                     AND l_merged_row.CATEGORY_SET_NAME  IS NULL
4201                 THEN
4202                     l_merged_row.CATEGORY_SET_ID        := l_old_rows( idx ).CATEGORY_SET_ID;
4203                     l_merged_row.CATEGORY_SET_NAME      := l_old_rows( idx ).CATEGORY_SET_NAME;
4204                 END IF;
4205 
4206                 -- 4. Category
4207                 IF      l_merged_row.CATEGORY_ID    IS NULL
4208                     AND l_merged_row.CATEGORY_NAME  IS NULL
4209                 THEN
4210                     l_merged_row.CATEGORY_ID        := l_old_rows( idx ).CATEGORY_ID;
4211                     l_merged_row.CATEGORY_NAME      := l_old_rows( idx ).CATEGORY_NAME;
4212                 END IF;
4213 
4214                 -- Non-special cased
4215                 if l_merged_row.CHANGE_ID is null then l_merged_row.CHANGE_ID := l_old_rows( idx ).CHANGE_ID; end if;
4216                 if l_merged_row.CHANGE_LINE_ID is null then l_merged_row.CHANGE_LINE_ID := l_old_rows( idx ).CHANGE_LINE_ID; end if;
4217                 if l_merged_row.OLD_CATEGORY_ID is null then l_merged_row.OLD_CATEGORY_ID := l_old_rows( idx ).OLD_CATEGORY_ID; end if;
4218                 if l_merged_row.OLD_CATEGORY_NAME is null then l_merged_row.OLD_CATEGORY_NAME := l_old_rows( idx ).OLD_CATEGORY_NAME; end if;
4219                 if l_merged_row.TRANSACTION_ID is null then l_merged_row.TRANSACTION_ID := l_old_rows( idx ).TRANSACTION_ID; end if;
4220 
4221                 IF idx = l_old_rows.LAST AND l_new_row_idx > 0 THEN
4222                     FOR i IN 1..l_new_row_idx LOOP
4223                         Debug_Conc_Log( l_proc_log_prefix || '  No More records found for processing.');
4224                         Debug_Conc_Log( l_proc_log_prefix || '  Creating merged record for SSR, SS-ID = ' ||
4225                                                              l_new_rows( i ).SOURCE_SYSTEM_REFERENCE || ', ' ||
4226                                                              l_new_rows( i ).SOURCE_SYSTEM_ID);
4227                         l_mrow_ix := l_mrow_ix + 1;
4228                         l_merged_rows( l_mrow_ix )                           := l_merged_row;
4229                         l_merged_rows( l_mrow_ix ).SET_PROCESS_ID            := l_new_rows( i ).SET_PROCESS_ID;
4230                         l_merged_rows( l_mrow_ix ).PROCESS_FLAG              := l_new_rows( i ).PROCESS_FLAG;
4231                         l_merged_rows( l_mrow_ix ).SOURCE_SYSTEM_ID          := l_new_rows( i ).SOURCE_SYSTEM_ID;
4232                         l_merged_rows( l_mrow_ix ).SOURCE_SYSTEM_REFERENCE   := l_new_rows( i ).SOURCE_SYSTEM_REFERENCE;
4233                         l_merged_rows( l_mrow_ix ).CREATED_BY                := l_new_rows( i ).CREATED_BY;
4234                         l_merged_rows( l_mrow_ix ).LAST_UPDATED_BY           := l_new_rows( i ).LAST_UPDATED_BY;
4235                         l_merged_rows( l_mrow_ix ).REQUEST_ID                := FND_GLOBAL.CONC_REQUEST_ID;
4236                         l_merged_rows( l_mrow_ix ).PROGRAM_APPLICATION_ID    := FND_GLOBAL.PROG_APPL_ID;
4237                         l_merged_rows( l_mrow_ix ).PROGRAM_ID                := FND_GLOBAL.CONC_PROGRAM_ID;
4238                         l_merged_rows( l_mrow_ix ).PROGRAM_UPDATE_DATE       := SYSDATE;
4239                     END LOOP; --FOR i IN 1..l_new_row_idx LOOP
4240                 END IF; --IF idx = l_old_rows.LAST AND l_new_row_idx > 0 THEN
4241             END LOOP; -- loop over old rows
4242 
4243             IF l_merged_rows IS NOT NULL THEN
4244                 -- delete
4245                 Debug_Conc_Log( l_proc_log_prefix || 'Deleting ' || l_old_rowids.COUNT || ' old rows ...' );
4246                 FORALL rid_ix IN INDICES OF l_old_rowids
4247                     DELETE FROM MTL_ITEM_CATEGORIES_INTERFACE
4248                         WHERE ROWID = l_old_rowids( rid_ix );
4249                 -- insert
4250                 Debug_Conc_Log( l_proc_log_prefix || 'Inserting ' || l_merged_rows.COUNT || ' merged rows ...' );
4251                 FORALL row_index IN INDICES OF l_merged_rows
4252                     INSERT INTO MTL_ITEM_CATEGORIES_INTERFACE
4253                         VALUES l_merged_rows( row_index );
4254             END IF;
4255         END IF; -- ENDS IF l_old_rows.count <> 0
4256         Debug_Conc_Log( l_proc_log_prefix || 'Exiting' );
4257     EXCEPTION WHEN OTHERS THEN
4258         Debug_Conc_Log( l_proc_log_prefix || 'Error - ' || SQLERRM);
4259         IF c_target_categories%ISOPEN THEN
4260             CLOSE c_target_categories;
4261         END IF;
4262         RAISE;
4263     END Merge_Categories_For_Import;
4264 
4265     -- Merges Item Attributes
4266     PROCEDURE Merge_Item_Attrs_For_Import( p_batch_id       IN NUMBER
4267                                          , p_master_org_id  IN NUMBER
4268                                          )
4269     IS
4270         CURSOR c_target_item_attrs IS
4271             SELECT  sub.*
4272                 ,   attrs.DATA_TYPE_CODE
4273             FROM
4274                 ( SELECT
4275                         EIUAI.ROWID rid
4276                         , COUNT( * ) OVER ( PARTITION BY
4277                                                       ITEM_NUMBER
4278                                                     , ATTR_GROUP_INT_NAME
4279                                                     , ATTR_INT_NAME
4280                                                     , DATA_LEVEL_ID
4281                                                     , PK1_VALUE
4282                                                     , PK2_VALUE
4283                                                     , PK3_VALUE
4284                                                     , PK4_VALUE
4285                                                     , PK5_VALUE
4286                                                     , ORGANIZATION_ID
4287                                                     , NVL( ATTR_GROUP_TYPE, G_DEFAULT_ATTR_GROUP_TYPE )
4288                                           )
4289                         cnt
4290                         , RANK() OVER   ( ORDER BY
4291                                                       ITEM_NUMBER
4292                                                     , ATTR_GROUP_INT_NAME
4293                                                     , ATTR_INT_NAME
4294                                                     , DATA_LEVEL_ID
4295                                                     , PK1_VALUE
4296                                                     , PK2_VALUE
4297                                                     , PK3_VALUE
4298                                                     , PK4_VALUE
4299                                                     , PK5_VALUE
4300                                                     , ORGANIZATION_ID
4301                                                     , NVL( ATTR_GROUP_TYPE, G_DEFAULT_ATTR_GROUP_TYPE )
4302                                         )
4303                         rnk
4304                         , eiuai.*
4305                    FROM EGO_ITM_USR_ATTR_INTRFC eiuai, EGO_FND_DSC_FLX_CTX_EXT FL_CTX_EXT
4306                    WHERE DATA_SET_ID                              = p_batch_id
4307                      AND PROCESS_STATUS                           = 1
4308                      AND ITEM_NUMBER                              IS NOT NULL
4309                      AND ORGANIZATION_ID                          IS NOT NULL
4310                      AND FL_CTX_EXT.DESCRIPTIVE_FLEXFIELD_NAME    = NVL( EIUAI.ATTR_GROUP_TYPE, G_DEFAULT_ATTR_GROUP_TYPE )
4311                      AND FL_CTX_EXT.APPLICATION_ID                = 431
4312                      AND FL_CTX_EXT.DESCRIPTIVE_FLEX_CONTEXT_CODE = EIUAI.ATTR_GROUP_INT_NAME
4313                      AND FL_CTX_EXT.MULTI_ROW                     = 'N'
4314                      AND EXISTS( SELECT NULL
4315                                  FROM EGO_ATTR_GROUP_DL A, EGO_DATA_LEVEL_B DL
4316                                  WHERE DL.APPLICATION_ID  = 431
4317                                    AND DL.ATTR_GROUP_TYPE = FL_CTX_EXT.DESCRIPTIVE_FLEXFIELD_NAME
4318                                    AND DL.DATA_LEVEL_NAME IN ( 'ITEM_LEVEL' , 'ITEM_ORG', 'ITEM_SUP', 'ITEM_SUP_SITE', 'ITEM_SUP_SITE_ORG' )
4319                                    AND DL.DATA_LEVEL_ID   = DL.DATA_LEVEL_ID
4320                                    AND A.ATTR_GROUP_ID    = FL_CTX_EXT.ATTR_GROUP_ID
4321                                )
4322                 ) sub
4323                 , EGO_ATTRS_V attrs
4324             WHERE sub.CNT > 1
4325               AND attrs.APPLICATION_ID    = 431
4326               AND attrs.ATTR_GROUP_NAME   = sub.ATTR_GROUP_INT_NAME
4327               AND attrs.ATTR_NAME         = sub.ATTR_INT_NAME
4328               AND attrs.ATTR_GROUP_TYPE   = NVL( sub.ATTR_GROUP_TYPE, G_DEFAULT_ATTR_GROUP_TYPE )
4329             ORDER BY rnk, last_update_date DESC, interface_table_unique_id DESC;
4330 
4331         TYPE TARGET_ROWS    IS TABLE OF c_target_item_attrs%ROWTYPE;
4332 
4333         l_merged_rows   EIUAI_ROWS;
4334         l_new_rows      EIUAI_ROWS;
4335         l_merged_row    EIUAI_ROW;
4336         l_old_rows      TARGET_ROWS;
4337         l_old_rowids    UROWID_TABLE;
4338 
4339         l_candidate_trans EGO_ITM_USR_ATTR_INTRFC.TRANSACTION_TYPE%TYPE;
4340 
4341         l_cur_rank      PLS_INTEGER := 0; -- because rank() starts at 1
4342         l_mrow_ix       PLS_INTEGER := 0;
4343         l_new_row_idx   PLS_INTEGER := 0;
4344 
4345         l_data_type_code EGO_ATTRS_V.DATA_TYPE_CODE%TYPE;
4346 
4347         l_proc_log_prefix CONSTANT VARCHAR2(50) := 'Merge_Item_Attrs_For_Import - ';
4348     BEGIN
4349         Debug_Conc_Log( l_proc_log_prefix || 'Entering' );
4350         Debug_Conc_Log( l_proc_log_prefix || 'Batch ID: ' || p_batch_id );
4351 
4352         UPDATE EGO_ITM_USR_ATTR_INTRFC eiuai
4353         SET ITEM_NUMBER = (SELECT CONCATENATED_SEGMENTS
4354                            FROM MTL_SYSTEM_ITEMS_KFV
4355                            WHERE INVENTORY_ITEM_ID = eiuai.INVENTORY_ITEM_ID
4356                              AND ORGANIZATION_ID = eiuai.ORGANIZATION_ID)
4357         WHERE DATA_SET_ID = p_batch_id
4358           AND PROCESS_STATUS = 1
4359           AND INVENTORY_ITEM_ID IS NOT NULL
4360           AND ITEM_NUMBER IS NULL;
4361 
4362         OPEN c_target_item_attrs;
4363         FETCH c_target_item_attrs BULK COLLECT INTO l_old_rows;
4364         CLOSE c_target_item_attrs;
4365 
4366         Debug_Conc_Log( l_proc_log_prefix || 'Total rows requiring merging = ' || l_old_rows.COUNT );
4367         IF  0 <> l_old_rows.COUNT THEN
4368             l_old_rowids := UROWID_TABLE( );
4369             l_old_rowids.EXTEND( l_old_rows.COUNT );
4370 
4371             -- process the item-level attrs
4372             FOR idx IN l_old_rows.FIRST .. l_old_rows.LAST LOOP
4373                 l_old_rowids( idx ) := l_old_rows( idx ).RID;
4374 
4375                 IF( l_old_rows( idx ).RNK <> l_cur_rank ) THEN
4376                     IF l_new_row_idx > 0 THEN
4377                         FOR i IN 1..l_new_row_idx LOOP
4378                             Debug_Conc_Log( l_proc_log_prefix || '  Creating merged record for SSR, SS-ID = ' ||
4379                                                                  l_new_rows( i ).SOURCE_SYSTEM_REFERENCE || ', ' ||
4380                                                                  l_new_rows( i ).SOURCE_SYSTEM_ID);
4381                             l_mrow_ix := l_mrow_ix + 1;
4382                             l_merged_rows( l_mrow_ix )                           := l_merged_row;
4383                             l_merged_rows( l_mrow_ix ).DATA_SET_ID               := l_new_rows( i ).DATA_SET_ID;
4384                             l_merged_rows( l_mrow_ix ).PROCESS_STATUS            := l_new_rows( i ).PROCESS_STATUS;
4385                             l_merged_rows( l_mrow_ix ).SOURCE_SYSTEM_ID          := l_new_rows( i ).SOURCE_SYSTEM_ID;
4386                             l_merged_rows( l_mrow_ix ).SOURCE_SYSTEM_REFERENCE   := l_new_rows( i ).SOURCE_SYSTEM_REFERENCE;
4387                             l_merged_rows( l_mrow_ix ).ATTR_GROUP_INT_NAME       := l_new_rows( i ).ATTR_GROUP_INT_NAME;
4388                             l_merged_rows( l_mrow_ix ).ATTR_INT_NAME             := l_new_rows( i ).ATTR_INT_NAME;
4389                             l_merged_rows( l_mrow_ix ).DATA_LEVEL_ID           := l_new_rows( i ).DATA_LEVEL_ID;
4390                             l_merged_rows( l_mrow_ix ).DATA_LEVEL_NAME           := l_new_rows( i ).DATA_LEVEL_NAME;
4391                             l_merged_rows( l_mrow_ix ).PK1_VALUE           := l_new_rows( i ).PK1_VALUE;
4392                             l_merged_rows( l_mrow_ix ).PK2_VALUE           := l_new_rows( i ).PK2_VALUE;
4393                             l_merged_rows( l_mrow_ix ).PK3_VALUE           := l_new_rows( i ).PK3_VALUE;
4394                             l_merged_rows( l_mrow_ix ).PK4_VALUE           := l_new_rows( i ).PK4_VALUE;
4395                             l_merged_rows( l_mrow_ix ).PK5_VALUE           := l_new_rows( i ).PK5_VALUE;
4396                             l_merged_rows( l_mrow_ix ).ROW_IDENTIFIER            := l_new_rows( i ).ROW_IDENTIFIER;
4397                             l_merged_rows( l_mrow_ix ).CREATED_BY                := l_new_rows( i ).CREATED_BY;
4398                             l_merged_rows( l_mrow_ix ).LAST_UPDATED_BY           := l_new_rows( i ).LAST_UPDATED_BY;
4399                             l_merged_rows( l_mrow_ix ).REQUEST_ID                := FND_GLOBAL.CONC_REQUEST_ID;
4400                             l_merged_rows( l_mrow_ix ).PROGRAM_APPLICATION_ID    := FND_GLOBAL.PROG_APPL_ID;
4401                             l_merged_rows( l_mrow_ix ).PROGRAM_ID                := FND_GLOBAL.CONC_PROGRAM_ID;
4402                             l_merged_rows( l_mrow_ix ).PROGRAM_UPDATE_DATE       := SYSDATE;
4403                         END LOOP; --FOR i IN 1..l_new_row_idx LOOP
4404                     END IF; --IF l_new_row_idx > 0 THEN
4405                     l_cur_rank := l_old_rows( idx ).RNK;
4406                     l_data_type_code := l_old_rows( idx ).DATA_TYPE_CODE;
4407 
4408                     Debug_Conc_Log( l_proc_log_prefix || '  Starting new merged row; rank = '|| l_cur_rank );
4409                     Debug_Conc_Log( l_proc_log_prefix || '    Item, Org-ID, Item-ID, AG-Name, Attr-Name = ' ||
4410                                                          l_old_rows( idx ).ITEM_NUMBER || ', ' ||
4411                                                          l_old_rows( idx ).ORGANIZATION_ID || ', ' ||
4412                                                          l_old_rows( idx ).INVENTORY_ITEM_ID || ', ' ||
4413                                                          l_old_rows( idx ).ATTR_GROUP_INT_NAME || ', ' ||
4414                                                          l_old_rows( idx ).ATTR_INT_NAME);
4415                     l_new_rows.DELETE;
4416                     l_new_row_idx := 1;
4417                     l_new_rows( l_new_row_idx ).PROCESS_STATUS          := l_old_rows( idx ).PROCESS_STATUS;
4418                     -- initializing l_merged_row . This row will contain the current merged row for an item
4419                     l_merged_row := NULL;
4420                     l_merged_row.DATA_SET_ID            := p_batch_id;
4421                     l_merged_row.PROCESS_STATUS         := l_old_rows( idx ).PROCESS_STATUS;
4422                 ELSE
4423                     Debug_Conc_Log( l_proc_log_prefix || '  Merging another record into current merged row; rank = '|| l_cur_rank );
4424                     Debug_Conc_Log( l_proc_log_prefix || '    Item, Org-ID, Item-ID, AG-Name, Attr-Name = ' ||
4425                                                          l_old_rows( idx ).ITEM_NUMBER || ', ' ||
4426                                                          l_old_rows( idx ).ORGANIZATION_ID || ', ' ||
4427                                                          l_old_rows( idx ).INVENTORY_ITEM_ID || ', ' ||
4428                                                          l_old_rows( idx ).ATTR_GROUP_INT_NAME || ', ' ||
4429                                                          l_old_rows( idx ).ATTR_INT_NAME);
4430                     l_new_row_idx := l_new_row_idx + 1;
4431                     l_new_rows( l_new_row_idx ).PROCESS_STATUS              := 7;
4432                 END IF;
4433 
4434                 l_new_rows( l_new_row_idx ).DATA_SET_ID               := p_batch_id;
4435                 l_new_rows( l_new_row_idx ).SOURCE_SYSTEM_ID          := l_old_rows( idx ).SOURCE_SYSTEM_ID;
4436                 l_new_rows( l_new_row_idx ).SOURCE_SYSTEM_REFERENCE   := l_old_rows( idx ).SOURCE_SYSTEM_REFERENCE;
4437                 l_new_rows( l_new_row_idx ).ATTR_GROUP_INT_NAME       := l_old_rows( idx ).ATTR_GROUP_INT_NAME;
4438                 l_new_rows( l_new_row_idx ).ATTR_INT_NAME             := l_old_rows( idx ).ATTR_INT_NAME;
4439                 l_new_rows( l_new_row_idx ).DATA_LEVEL_NAME           := l_old_rows( idx ).DATA_LEVEL_NAME;
4440                 l_new_rows( l_new_row_idx ).DATA_LEVEL_ID           := l_old_rows( idx ).DATA_LEVEL_ID;
4441                 l_new_rows( l_new_row_idx ).PK1_VALUE           := l_old_rows( idx ).PK1_VALUE;
4442                 l_new_rows( l_new_row_idx ).PK2_VALUE           := l_old_rows( idx ).PK2_VALUE;
4443                 l_new_rows( l_new_row_idx ).PK3_VALUE           := l_old_rows( idx ).PK3_VALUE;
4444                 l_new_rows( l_new_row_idx ).PK4_VALUE           := l_old_rows( idx ).PK4_VALUE;
4445                 l_new_rows( l_new_row_idx ).PK5_VALUE           := l_old_rows( idx ).PK5_VALUE;
4446                 l_new_rows( l_new_row_idx ).ROW_IDENTIFIER            := l_old_rows( idx ).ROW_IDENTIFIER;
4447                 l_new_rows( l_new_row_idx ).CREATED_BY                := l_old_rows( idx ).CREATED_BY;
4448                 l_new_rows( l_new_row_idx ).LAST_UPDATED_BY           := l_old_rows( idx ).LAST_UPDATED_BY;
4449 
4450                 -- Special Cases:
4451                 -- Transaction type
4452                 l_candidate_trans := UPPER( l_old_rows( idx ).TRANSACTION_TYPE );
4453 
4454                 IF      l_merged_row.TRANSACTION_TYPE IS NULL
4455                     OR  l_merged_row.TRANSACTION_TYPE <> l_candidate_trans     -- <> filters out nulls
4456                 THEN
4457                     -- CREATE > SYNC > UPDATE : order of case expression matters
4458                     l_merged_row.TRANSACTION_TYPE :=
4459                         CASE
4460                             WHEN l_merged_row.TRANSACTION_TYPE = G_TRANS_TYPE_CREATE
4461                               OR l_candidate_trans = G_TRANS_TYPE_CREATE                            THEN G_TRANS_TYPE_CREATE
4462                             WHEN l_merged_row.TRANSACTION_TYPE = G_TRANS_TYPE_SYNC
4463                               OR l_candidate_trans = G_TRANS_TYPE_SYNC                              THEN G_TRANS_TYPE_SYNC
4464                             WHEN l_merged_row.TRANSACTION_TYPE = G_TRANS_TYPE_UPDATE
4465                               OR l_candidate_trans = G_TRANS_TYPE_UPDATE                            THEN G_TRANS_TYPE_UPDATE
4466                             ELSE NULL -- INVALID transaction types encountered so far ...
4467                         END;
4468                 END IF;
4469 
4470 
4471                 -- The following columns need to be treated as atomic groups
4472                 -- 1. Item Identifier
4473                 IF      l_merged_row.INVENTORY_ITEM_ID  IS NULL
4474                     AND l_merged_row.ITEM_NUMBER        IS NULL
4475                 THEN
4476                     l_merged_row.INVENTORY_ITEM_ID  := l_old_rows( idx ).INVENTORY_ITEM_ID;
4477                     l_merged_row.ITEM_NUMBER        := l_old_rows( idx ).ITEM_NUMBER;
4478                 END IF;
4479 
4480                 -- 2. Organization
4481                 IF      l_merged_row.ORGANIZATION_ID    IS NULL
4482                     AND l_merged_row.ORGANIZATION_CODE  IS NULL
4483                 THEN
4484                     l_merged_row.ORGANIZATION_ID        := l_old_rows( idx ).ORGANIZATION_ID ;
4485                     l_merged_row.ORGANIZATION_CODE      := l_old_rows( idx ).ORGANIZATION_CODE ;
4486                 END IF;
4487 
4488                 -- 3. The attribute value
4489                 IF      l_merged_row.ATTR_DISP_VALUE  IS NULL
4490                     AND l_merged_row.ATTR_VALUE_STR   IS NULL
4491                     AND l_merged_row.ATTR_VALUE_DATE  IS NULL
4492                     AND l_merged_row.ATTR_VALUE_NUM   IS NULL
4493                     AND l_merged_row.ATTR_VALUE_UOM       IS NULL
4494                     AND l_merged_row.ATTR_UOM_DISP_VALUE  IS NULL
4495                 THEN
4496                     CASE
4497                         WHEN l_data_type_code = 'C' OR l_data_type_code = 'A' THEN      -- String Attribute
4498                             IF      l_old_rows( idx ).ATTR_VALUE_STR    IS NOT NULL
4499                                 OR  l_old_rows( idx ).ATTR_DISP_VALUE   IS NOT NULL
4500                             THEN
4501                                 l_merged_row.ATTR_VALUE_STR       := l_old_rows( idx ).ATTR_VALUE_STR;
4502                                 l_merged_row.ATTR_DISP_VALUE      := l_old_rows( idx ).ATTR_DISP_VALUE;
4503                                 l_merged_row.ATTR_VALUE_UOM       := l_old_rows( idx ).ATTR_VALUE_UOM;
4504                                 l_merged_row.ATTR_UOM_DISP_VALUE  := l_old_rows( idx ).ATTR_UOM_DISP_VALUE;
4505                             END IF;
4506                         WHEN l_data_type_code = 'X' or l_data_type_code = 'Y' THEN      -- Date Attribute
4507                             IF      l_old_rows( idx ).ATTR_VALUE_DATE   IS NOT NULL
4508                                 OR  l_old_rows( idx ).ATTR_DISP_VALUE   IS NOT NULL
4509                             THEN
4510                                 l_merged_row.ATTR_VALUE_DATE      := l_old_rows( idx ).ATTR_VALUE_DATE;
4511                                 l_merged_row.ATTR_DISP_VALUE      := l_old_rows( idx ).ATTR_DISP_VALUE;
4512                                 l_merged_row.ATTR_VALUE_UOM       := l_old_rows( idx ).ATTR_VALUE_UOM;
4513                                 l_merged_row.ATTR_UOM_DISP_VALUE  := l_old_rows( idx ).ATTR_UOM_DISP_VALUE;
4514                             END IF;
4515                         WHEN l_data_type_code = 'N' THEN                                -- Num Attribute
4516                             IF      l_old_rows( idx ).ATTR_VALUE_NUM    IS NOT NULL
4517                                 OR  l_old_rows( idx ).ATTR_DISP_VALUE   IS NOT NULL
4518                             THEN
4519                                 l_merged_row.ATTR_VALUE_NUM       := l_old_rows( idx ).ATTR_VALUE_NUM;
4520                                 l_merged_row.ATTR_DISP_VALUE      := l_old_rows( idx ).ATTR_DISP_VALUE;
4521                                 l_merged_row.ATTR_VALUE_UOM       := l_old_rows( idx ).ATTR_VALUE_UOM;
4522                                 l_merged_row.ATTR_UOM_DISP_VALUE  := l_old_rows( idx ).ATTR_UOM_DISP_VALUE;
4523                             END IF;
4524                     END CASE;
4525                 END IF;
4526 
4527                 -- Non-special cased
4528                 if l_merged_row.ATTR_GROUP_TYPE is null then l_merged_row.ATTR_GROUP_TYPE := l_old_rows( idx ).ATTR_GROUP_TYPE; end if;
4529                 if l_merged_row.CHANGE_ID is null then l_merged_row.CHANGE_ID := l_old_rows( idx ).CHANGE_ID; end if;
4530                 if l_merged_row.CHANGE_LINE_ID is null then l_merged_row.CHANGE_LINE_ID := l_old_rows( idx ).CHANGE_LINE_ID; end if;
4531                 if l_merged_row.ITEM_CATALOG_GROUP_ID is null then l_merged_row.ITEM_CATALOG_GROUP_ID := l_old_rows( idx ).ITEM_CATALOG_GROUP_ID; end if;
4532                 if l_merged_row.TRANSACTION_ID is null then l_merged_row.TRANSACTION_ID := l_old_rows( idx ).TRANSACTION_ID; end if;
4533                 -- End Generated Code
4534 
4535                 IF idx = l_old_rows.LAST AND l_new_row_idx > 0 THEN
4536                     FOR i IN 1..l_new_row_idx LOOP
4537                         Debug_Conc_Log( l_proc_log_prefix || '  No More records found for processing.');
4538                         Debug_Conc_Log( l_proc_log_prefix || '  Creating merged record for SSR, SS-ID = ' ||
4539                                                              l_new_rows( i ).SOURCE_SYSTEM_REFERENCE || ', ' ||
4540                                                              l_new_rows( i ).SOURCE_SYSTEM_ID);
4541                         l_mrow_ix := l_mrow_ix + 1;
4542                         l_merged_rows( l_mrow_ix )                           := l_merged_row;
4543                         l_merged_rows( l_mrow_ix ).DATA_SET_ID               := l_new_rows( i ).DATA_SET_ID;
4544                         l_merged_rows( l_mrow_ix ).PROCESS_STATUS            := l_new_rows( i ).PROCESS_STATUS;
4545                         l_merged_rows( l_mrow_ix ).SOURCE_SYSTEM_ID          := l_new_rows( i ).SOURCE_SYSTEM_ID;
4546                         l_merged_rows( l_mrow_ix ).SOURCE_SYSTEM_REFERENCE   := l_new_rows( i ).SOURCE_SYSTEM_REFERENCE;
4547                         l_merged_rows( l_mrow_ix ).ATTR_GROUP_INT_NAME       := l_new_rows( i ).ATTR_GROUP_INT_NAME;
4548                         l_merged_rows( l_mrow_ix ).ATTR_INT_NAME             := l_new_rows( i ).ATTR_INT_NAME;
4549                         l_merged_rows( l_mrow_ix ).DATA_LEVEL_NAME           := l_new_rows( i ).DATA_LEVEL_NAME;
4550                         l_merged_rows( l_mrow_ix ).DATA_LEVEL_ID             := l_new_rows( i ).DATA_LEVEL_ID;
4551                         l_merged_rows( l_mrow_ix ).PK1_VALUE           := l_new_rows( i ).PK1_VALUE;
4552                         l_merged_rows( l_mrow_ix ).PK2_VALUE           := l_new_rows( i ).PK2_VALUE;
4553                         l_merged_rows( l_mrow_ix ).PK3_VALUE           := l_new_rows( i ).PK3_VALUE;
4554                         l_merged_rows( l_mrow_ix ).PK4_VALUE           := l_new_rows( i ).PK4_VALUE;
4555                         l_merged_rows( l_mrow_ix ).PK5_VALUE           := l_new_rows( i ).PK5_VALUE;
4556                         l_merged_rows( l_mrow_ix ).ROW_IDENTIFIER            := l_new_rows( i ).ROW_IDENTIFIER;
4557                         l_merged_rows( l_mrow_ix ).CREATED_BY                := l_new_rows( i ).CREATED_BY;
4558                         l_merged_rows( l_mrow_ix ).LAST_UPDATED_BY           := l_new_rows( i ).LAST_UPDATED_BY;
4559                         l_merged_rows( l_mrow_ix ).REQUEST_ID                := FND_GLOBAL.CONC_REQUEST_ID;
4560                         l_merged_rows( l_mrow_ix ).PROGRAM_APPLICATION_ID    := FND_GLOBAL.PROG_APPL_ID;
4561                         l_merged_rows( l_mrow_ix ).PROGRAM_ID                := FND_GLOBAL.CONC_PROGRAM_ID;
4562                         l_merged_rows( l_mrow_ix ).PROGRAM_UPDATE_DATE       := SYSDATE;
4563                     END LOOP; --FOR i IN 1..l_new_row_idx LOOP
4564                 END IF; --IF idx = l_old_rows.LAST AND l_new_row_idx > 0 THEN
4565             END LOOP; -- loop over old rows
4566 
4567             IF l_merged_rows IS NOT NULL THEN
4568                 -- delete
4569                 Debug_Conc_Log( l_proc_log_prefix || l_old_rowids.COUNT || ' old rows ...' );
4570                 FORALL rid_ix IN INDICES OF l_old_rowids
4571                     DELETE FROM EGO_ITM_USR_ATTR_INTRFC
4572                         WHERE ROWID = l_old_rowids( rid_ix );
4573                 -- insert
4574                 Debug_Conc_Log( l_proc_log_prefix || l_merged_rows.COUNT || ' merged rows ...' );
4575                 FORALL row_index IN INDICES OF l_merged_rows
4576                     INSERT INTO EGO_ITM_USR_ATTR_INTRFC
4577                         VALUES l_merged_rows( row_index );
4578             END IF;
4579         END IF; -- ENDS IF l_old_rows.count <> 0
4580 
4581         Debug_Conc_Log( l_proc_log_prefix || 'Exiting' );
4582     EXCEPTION WHEN OTHERS THEN
4583         Debug_Conc_Log( l_proc_log_prefix || 'Error - ' || SQLERRM);
4584         IF c_target_item_attrs%ISOPEN THEN
4585             CLOSE c_target_item_attrs;
4586         END IF;
4587         RAISE;
4588     END Merge_Item_Attrs_For_Import;
4589 
4590     -- Merges Item Revision Attributes
4591     PROCEDURE Merge_Rev_Attrs_For_Import( p_batch_id       IN NUMBER
4592                                         , p_master_org_id  IN NUMBER
4593                                         )
4594     IS
4595         CURSOR c_target_rev_attrs(cp_rev_dl_id NUMBER) IS
4596             SELECT  sub.*
4597                 ,   attrs.DATA_TYPE_CODE
4598             FROM
4599                 ( SELECT
4600                         eiuai.ROWID rid
4601                         , COUNT( * ) OVER ( PARTITION BY
4602                                                       ITEM_NUMBER
4603                                                     , ATTR_GROUP_INT_NAME
4604                                                     , ATTR_INT_NAME
4605                                                     , ORGANIZATION_ID
4606                                                     , REVISION
4607                                                     , NVL( ATTR_GROUP_TYPE, G_DEFAULT_ATTR_GROUP_TYPE )
4608                                           )
4609                         cnt
4610                         , RANK() OVER   ( ORDER BY
4611                                                       ITEM_NUMBER
4612                                                     , ATTR_GROUP_INT_NAME
4613                                                     , ATTR_INT_NAME
4614                                                     , ORGANIZATION_ID
4615                                                     , REVISION
4616                                                     , NVL( ATTR_GROUP_TYPE, G_DEFAULT_ATTR_GROUP_TYPE )
4617                                         )
4618                         rnk
4619                         , eiuai.*
4620                    FROM EGO_ITM_USR_ATTR_INTRFC eiuai, EGO_FND_DSC_FLX_CTX_EXT FL_CTX_EXT
4621                    WHERE DATA_SET_ID                              = p_batch_id
4622                      AND PROCESS_STATUS                           = 1
4623                      AND ITEM_NUMBER                              IS NOT NULL
4624                      AND ORGANIZATION_ID                          IS NOT NULL
4625                      AND FL_CTX_EXT.DESCRIPTIVE_FLEXFIELD_NAME    = NVL( EIUAI.ATTR_GROUP_TYPE, G_DEFAULT_ATTR_GROUP_TYPE )
4626                      AND FL_CTX_EXT.APPLICATION_ID                = 431
4627                      AND FL_CTX_EXT.DESCRIPTIVE_FLEX_CONTEXT_CODE = EIUAI.ATTR_GROUP_INT_NAME
4628                      AND FL_CTX_EXT.MULTI_ROW                     = 'N'
4629                      AND EXISTS( SELECT NULL
4630                                  FROM EGO_ATTR_GROUP_DL A
4631                                  WHERE A.DATA_LEVEL_ID = cp_rev_dl_id
4632                                    AND A.ATTR_GROUP_ID  = FL_CTX_EXT.ATTR_GROUP_ID
4633                                )
4634                 ) sub
4635                 , EGO_ATTRS_V attrs
4636             WHERE sub.CNT > 1
4637               AND attrs.APPLICATION_ID    = 431
4638               AND attrs.ATTR_GROUP_NAME   = sub.ATTR_GROUP_INT_NAME
4639               AND attrs.ATTR_NAME         = sub.ATTR_INT_NAME
4640               AND attrs.ATTR_GROUP_TYPE   = NVL( sub.ATTR_GROUP_TYPE, G_DEFAULT_ATTR_GROUP_TYPE )
4641             ORDER BY rnk, last_update_date DESC, interface_table_unique_id DESC;
4642 
4643         TYPE TARGET_ROWS    IS TABLE OF c_target_rev_attrs%ROWTYPE;
4644 
4645         l_merged_rows   EIUAI_ROWS;
4646         l_new_rows      EIUAI_ROWS;
4647         l_merged_row    EIUAI_ROW;
4648         l_old_rows      TARGET_ROWS;
4649         l_old_rowids    UROWID_TABLE;
4650 
4651         l_candidate_trans EGO_ITM_USR_ATTR_INTRFC.TRANSACTION_TYPE%TYPE;
4652 
4653         l_cur_rank      PLS_INTEGER := 0; -- because rank() starts at 1
4654         l_mrow_ix       PLS_INTEGER := 0;
4655         l_new_row_idx   PLS_INTEGER := 0;
4656         l_rev_dl_id     NUMBER;
4657 
4658         l_data_type_code EGO_ATTRS_V.DATA_TYPE_CODE%TYPE;
4659 
4660         l_proc_log_prefix CONSTANT VARCHAR2(50) := 'Merge_Rev_Attrs_For_Import - ';
4661     BEGIN
4662         Debug_Conc_Log( l_proc_log_prefix || 'Entering' );
4663         Debug_Conc_Log( l_proc_log_prefix || 'Batch ID: ' || p_batch_id );
4664         BEGIN
4665           SELECT DATA_LEVEL_ID INTO l_rev_dl_id
4666           FROM EGO_DATA_LEVEL_B
4667           WHERE ATTR_GROUP_TYPE = 'EGO_ITEMMGMT_GROUP'
4668             AND APPLICATION_ID = 431
4669             AND DATA_LEVEL_NAME = 'ITEM_REVISION_LEVEL';
4670         EXCEPTION WHEN NO_DATA_FOUND THEN
4671           RETURN;
4672         END;
4673         Debug_Conc_Log( l_proc_log_prefix || 'l_rev_dl_id: ' || l_rev_dl_id );
4674 
4675         UPDATE EGO_ITM_USR_ATTR_INTRFC eiuai
4676         SET ITEM_NUMBER = (SELECT CONCATENATED_SEGMENTS
4677                            FROM MTL_SYSTEM_ITEMS_KFV
4678                            WHERE INVENTORY_ITEM_ID = eiuai.INVENTORY_ITEM_ID
4679                              AND ORGANIZATION_ID = eiuai.ORGANIZATION_ID)
4680         WHERE DATA_SET_ID = p_batch_id
4681           AND PROCESS_STATUS = 1
4682           AND INVENTORY_ITEM_ID IS NOT NULL
4683           AND ITEM_NUMBER IS NULL;
4684 
4685         OPEN c_target_rev_attrs(l_rev_dl_id);
4686         FETCH c_target_rev_attrs BULK COLLECT INTO l_old_rows;
4687         CLOSE c_target_rev_attrs;
4688 
4689         Debug_Conc_Log( l_proc_log_prefix || 'Total rows requiring merging = ' || l_old_rows.COUNT );
4690         IF  0 <> l_old_rows.COUNT THEN
4691             l_old_rowids := UROWID_TABLE( );
4692             l_old_rowids.EXTEND( l_old_rows.COUNT );
4693 
4694             -- process the item-level attrs
4695             FOR idx IN l_old_rows.FIRST .. l_old_rows.LAST LOOP
4696                 l_old_rowids( idx ) := l_old_rows( idx ).RID;
4697 
4698                 IF( l_old_rows( idx ).RNK <> l_cur_rank ) THEN
4699                     IF l_new_row_idx > 0 THEN
4700                         FOR i IN 1..l_new_row_idx LOOP
4701                             Debug_Conc_Log( l_proc_log_prefix || '  Creating merged record for SSR, SS-ID = ' ||
4702                                                                  l_new_rows( i ).SOURCE_SYSTEM_REFERENCE || ', ' ||
4703                                                                  l_new_rows( i ).SOURCE_SYSTEM_ID);
4704                             l_mrow_ix := l_mrow_ix + 1;
4705                             l_merged_rows( l_mrow_ix )                           := l_merged_row;
4706                             l_merged_rows( l_mrow_ix ).DATA_SET_ID               := l_new_rows( i ).DATA_SET_ID;
4707                             l_merged_rows( l_mrow_ix ).PROCESS_STATUS            := l_new_rows( i ).PROCESS_STATUS;
4708                             l_merged_rows( l_mrow_ix ).SOURCE_SYSTEM_ID          := l_new_rows( i ).SOURCE_SYSTEM_ID;
4709                             l_merged_rows( l_mrow_ix ).SOURCE_SYSTEM_REFERENCE   := l_new_rows( i ).SOURCE_SYSTEM_REFERENCE;
4710                             l_merged_rows( l_mrow_ix ).ATTR_GROUP_INT_NAME       := l_new_rows( i ).ATTR_GROUP_INT_NAME;
4711                             l_merged_rows( l_mrow_ix ).ATTR_INT_NAME             := l_new_rows( i ).ATTR_INT_NAME;
4712                             l_merged_rows( l_mrow_ix ).DATA_LEVEL_NAME           := l_new_rows( i ).DATA_LEVEL_NAME;
4713                             l_merged_rows( l_mrow_ix ).DATA_LEVEL_ID           := l_new_rows( i ).DATA_LEVEL_ID;
4714                             l_merged_rows( l_mrow_ix ).ROW_IDENTIFIER            := l_new_rows( i ).ROW_IDENTIFIER;
4715                             l_merged_rows( l_mrow_ix ).CREATED_BY                := l_new_rows( i ).CREATED_BY;
4716                             l_merged_rows( l_mrow_ix ).LAST_UPDATED_BY           := l_new_rows( i ).LAST_UPDATED_BY;
4717                             l_merged_rows( l_mrow_ix ).REQUEST_ID                := FND_GLOBAL.CONC_REQUEST_ID;
4718                             l_merged_rows( l_mrow_ix ).PROGRAM_APPLICATION_ID    := FND_GLOBAL.PROG_APPL_ID;
4719                             l_merged_rows( l_mrow_ix ).PROGRAM_ID                := FND_GLOBAL.CONC_PROGRAM_ID;
4720                             l_merged_rows( l_mrow_ix ).PROGRAM_UPDATE_DATE       := SYSDATE;
4721                         END LOOP; --FOR i IN 1..l_new_row_idx LOOP
4722                     END IF; --IF l_new_row_idx > 0 THEN
4723                     l_cur_rank := l_old_rows( idx ).RNK;
4724                     l_data_type_code := l_old_rows( idx ).DATA_TYPE_CODE;
4725 
4726                     Debug_Conc_Log( l_proc_log_prefix || '  Starting new merged row; rank = '|| l_cur_rank );
4727                     Debug_Conc_Log( l_proc_log_prefix || '    Item, Org-ID, Item-ID, AG-Name, Attr-Name = ' ||
4728                                                          l_old_rows( idx ).ITEM_NUMBER || ', ' ||
4729                                                          l_old_rows( idx ).ORGANIZATION_ID || ', ' ||
4730                                                          l_old_rows( idx ).INVENTORY_ITEM_ID || ', ' ||
4731                                                          l_old_rows( idx ).ATTR_GROUP_INT_NAME || ', ' ||
4732                                                          l_old_rows( idx ).ATTR_INT_NAME);
4733                     l_new_rows.DELETE;
4734                     l_new_row_idx := 1;
4735                     l_new_rows( l_new_row_idx ).PROCESS_STATUS          := l_old_rows( idx ).PROCESS_STATUS;
4736                     -- initializing l_merged_row . This row will contain the current merged row for an item
4737                     l_merged_row := NULL;
4738                     l_merged_row.DATA_SET_ID            := p_batch_id;
4739                     l_merged_row.PROCESS_STATUS         := l_old_rows( idx ).PROCESS_STATUS;
4740                 ELSE
4741                     Debug_Conc_Log( l_proc_log_prefix || '  Merging another record into current merged row; rank = '|| l_cur_rank );
4742                     Debug_Conc_Log( l_proc_log_prefix || '    Item, Org-ID, Item-ID, AG-Name, Attr-Name = ' ||
4743                                                          l_old_rows( idx ).ITEM_NUMBER || ', ' ||
4744                                                          l_old_rows( idx ).ORGANIZATION_ID || ', ' ||
4745                                                          l_old_rows( idx ).INVENTORY_ITEM_ID || ', ' ||
4746                                                          l_old_rows( idx ).ATTR_GROUP_INT_NAME || ', ' ||
4747                                                          l_old_rows( idx ).ATTR_INT_NAME);
4748                     l_new_row_idx := l_new_row_idx + 1;
4749                     l_new_rows( l_new_row_idx ).PROCESS_STATUS              := 7;
4750                 END IF;
4751 
4752                 l_new_rows( l_new_row_idx ).DATA_SET_ID               := p_batch_id;
4753                 l_new_rows( l_new_row_idx ).SOURCE_SYSTEM_ID          := l_old_rows( idx ).SOURCE_SYSTEM_ID;
4754                 l_new_rows( l_new_row_idx ).SOURCE_SYSTEM_REFERENCE   := l_old_rows( idx ).SOURCE_SYSTEM_REFERENCE;
4755                 l_new_rows( l_new_row_idx ).ATTR_GROUP_INT_NAME       := l_old_rows( idx ).ATTR_GROUP_INT_NAME;
4756                 l_new_rows( l_new_row_idx ).ATTR_INT_NAME             := l_old_rows( idx ).ATTR_INT_NAME;
4757                 l_new_rows( l_new_row_idx ).DATA_LEVEL_NAME           := l_old_rows( idx ).DATA_LEVEL_NAME;
4758                 l_new_rows( l_new_row_idx ).DATA_LEVEL_ID             := l_old_rows( idx ).DATA_LEVEL_ID;
4759                 l_new_rows( l_new_row_idx ).ROW_IDENTIFIER            := l_old_rows( idx ).ROW_IDENTIFIER;
4760                 l_new_rows( l_new_row_idx ).CREATED_BY                := l_old_rows( idx ).CREATED_BY;
4761                 l_new_rows( l_new_row_idx ).LAST_UPDATED_BY           := l_old_rows( idx ).LAST_UPDATED_BY;
4762 
4763                 -- Special Cases:
4764                 -- Transaction type
4765                 l_candidate_trans := UPPER( l_old_rows( idx ).TRANSACTION_TYPE );
4766 
4767                 IF      l_merged_row.TRANSACTION_TYPE IS NULL
4768                     OR  l_merged_row.TRANSACTION_TYPE <> l_candidate_trans     -- <> filters out nulls
4769                 THEN
4770                     -- CREATE > SYNC > UPDATE : order of case expression matters
4771                     l_merged_row.TRANSACTION_TYPE :=
4772                         CASE
4773                             WHEN l_merged_row.TRANSACTION_TYPE = G_TRANS_TYPE_CREATE
4774                               OR l_candidate_trans = G_TRANS_TYPE_CREATE                            THEN G_TRANS_TYPE_CREATE
4775                             WHEN l_merged_row.TRANSACTION_TYPE = G_TRANS_TYPE_SYNC
4776                               OR l_candidate_trans = G_TRANS_TYPE_SYNC                              THEN G_TRANS_TYPE_SYNC
4777                             WHEN l_merged_row.TRANSACTION_TYPE = G_TRANS_TYPE_UPDATE
4778                               OR l_candidate_trans = G_TRANS_TYPE_UPDATE                            THEN G_TRANS_TYPE_UPDATE
4779                             ELSE NULL -- INVALID transaction types encountered so far ...
4780                         END;
4781                 END IF;
4782 
4783 
4784                 -- The following columns need to be treated as atomic groups
4785                 -- 1. Item Identifier
4786                 IF      l_merged_row.INVENTORY_ITEM_ID  IS NULL
4787                     AND l_merged_row.ITEM_NUMBER        IS NULL
4788                 THEN
4789                     l_merged_row.INVENTORY_ITEM_ID  := l_old_rows( idx ).INVENTORY_ITEM_ID;
4790                     l_merged_row.ITEM_NUMBER        := l_old_rows( idx ).ITEM_NUMBER;
4791                 END IF;
4792 
4793                 -- 2. Organization
4794                 IF      l_merged_row.ORGANIZATION_ID    IS NULL
4795                     AND l_merged_row.ORGANIZATION_CODE  IS NULL
4796                 THEN
4797                     l_merged_row.ORGANIZATION_ID        := l_old_rows( idx ).ORGANIZATION_ID ;
4798                     l_merged_row.ORGANIZATION_CODE      := l_old_rows( idx ).ORGANIZATION_CODE ;
4799                 END IF;
4800 
4801                 -- 3. The attribute value
4802                 IF      l_merged_row.ATTR_DISP_VALUE  IS NULL
4803                     AND l_merged_row.ATTR_VALUE_STR   IS NULL
4804                     AND l_merged_row.ATTR_VALUE_DATE  IS NULL
4805                     AND l_merged_row.ATTR_VALUE_NUM   IS NULL
4806                     AND l_merged_row.ATTR_VALUE_UOM       IS NULL
4807                     AND l_merged_row.ATTR_UOM_DISP_VALUE  IS NULL
4808                 THEN
4809                     CASE
4810                         WHEN l_data_type_code = 'C' OR l_data_type_code = 'A' THEN      -- String Attribute
4811                             IF      l_old_rows( idx ).ATTR_VALUE_STR    IS NOT NULL
4812                                 OR  l_old_rows( idx ).ATTR_DISP_VALUE   IS NOT NULL
4813                             THEN
4814                                 l_merged_row.ATTR_VALUE_STR       := l_old_rows( idx ).ATTR_VALUE_STR;
4815                                 l_merged_row.ATTR_DISP_VALUE      := l_old_rows( idx ).ATTR_DISP_VALUE;
4816                                 l_merged_row.ATTR_VALUE_UOM       := l_old_rows( idx ).ATTR_VALUE_UOM;
4817                                 l_merged_row.ATTR_UOM_DISP_VALUE  := l_old_rows( idx ).ATTR_UOM_DISP_VALUE;
4818                             END IF;
4819                         WHEN l_data_type_code = 'X' or l_data_type_code = 'Y' THEN      -- Date Attribute
4820                             IF      l_old_rows( idx ).ATTR_VALUE_DATE   IS NOT NULL
4821                                 OR  l_old_rows( idx ).ATTR_DISP_VALUE   IS NOT NULL
4822                             THEN
4823                                 l_merged_row.ATTR_VALUE_DATE      := l_old_rows( idx ).ATTR_VALUE_DATE;
4824                                 l_merged_row.ATTR_DISP_VALUE      := l_old_rows( idx ).ATTR_DISP_VALUE;
4825                                 l_merged_row.ATTR_VALUE_UOM       := l_old_rows( idx ).ATTR_VALUE_UOM;
4826                                 l_merged_row.ATTR_UOM_DISP_VALUE  := l_old_rows( idx ).ATTR_UOM_DISP_VALUE;
4827                             END IF;
4828                         WHEN l_data_type_code = 'N' THEN                                -- Num Attribute
4829                             IF      l_old_rows( idx ).ATTR_VALUE_NUM    IS NOT NULL
4830                                 OR  l_old_rows( idx ).ATTR_DISP_VALUE   IS NOT NULL
4831                             THEN
4832                                 l_merged_row.ATTR_VALUE_NUM       := l_old_rows( idx ).ATTR_VALUE_NUM;
4833                                 l_merged_row.ATTR_DISP_VALUE      := l_old_rows( idx ).ATTR_DISP_VALUE;
4834                                 l_merged_row.ATTR_VALUE_UOM       := l_old_rows( idx ).ATTR_VALUE_UOM;
4835                                 l_merged_row.ATTR_UOM_DISP_VALUE  := l_old_rows( idx ).ATTR_UOM_DISP_VALUE;
4836                             END IF;
4837                     END CASE;
4838                 END IF;
4839 
4840                 -- Non-special cased
4841                 if l_merged_row.ATTR_GROUP_TYPE is null then l_merged_row.ATTR_GROUP_TYPE := l_old_rows( idx ).ATTR_GROUP_TYPE; end if;
4842                 if l_merged_row.CHANGE_ID is null then l_merged_row.CHANGE_ID := l_old_rows( idx ).CHANGE_ID; end if;
4843                 if l_merged_row.CHANGE_LINE_ID is null then l_merged_row.CHANGE_LINE_ID := l_old_rows( idx ).CHANGE_LINE_ID; end if;
4844                 if l_merged_row.ITEM_CATALOG_GROUP_ID is null then l_merged_row.ITEM_CATALOG_GROUP_ID := l_old_rows( idx ).ITEM_CATALOG_GROUP_ID; end if;
4845                 if l_merged_row.REVISION is null then l_merged_row.REVISION := l_old_rows( idx ).REVISION; end if;
4846                 if l_merged_row.REVISION_ID is null then l_merged_row.REVISION_ID := l_old_rows( idx ).REVISION_ID; end if;
4847                 if l_merged_row.TRANSACTION_ID is null then l_merged_row.TRANSACTION_ID := l_old_rows( idx ).TRANSACTION_ID; end if;
4848                 -- End Generated Code
4849 
4850                 IF idx = l_old_rows.LAST AND l_new_row_idx > 0 THEN
4851                     FOR i IN 1..l_new_row_idx LOOP
4852                         Debug_Conc_Log( l_proc_log_prefix || '  No More records found for processing.');
4853                         Debug_Conc_Log( l_proc_log_prefix || '  Creating merged record for SSR, SS-ID = ' ||
4854                                                              l_new_rows( i ).SOURCE_SYSTEM_REFERENCE || ', ' ||
4855                                                              l_new_rows( i ).SOURCE_SYSTEM_ID);
4856                         l_mrow_ix := l_mrow_ix + 1;
4857                         l_merged_rows( l_mrow_ix )                           := l_merged_row;
4858                         l_merged_rows( l_mrow_ix ).DATA_SET_ID               := l_new_rows( i ).DATA_SET_ID;
4859                         l_merged_rows( l_mrow_ix ).PROCESS_STATUS            := l_new_rows( i ).PROCESS_STATUS;
4860                         l_merged_rows( l_mrow_ix ).SOURCE_SYSTEM_ID          := l_new_rows( i ).SOURCE_SYSTEM_ID;
4861                         l_merged_rows( l_mrow_ix ).SOURCE_SYSTEM_REFERENCE   := l_new_rows( i ).SOURCE_SYSTEM_REFERENCE;
4862                         l_merged_rows( l_mrow_ix ).ATTR_GROUP_INT_NAME       := l_new_rows( i ).ATTR_GROUP_INT_NAME;
4863                         l_merged_rows( l_mrow_ix ).ATTR_INT_NAME             := l_new_rows( i ).ATTR_INT_NAME;
4864                         l_merged_rows( l_mrow_ix ).DATA_LEVEL_NAME           := l_new_rows( i ).DATA_LEVEL_NAME;
4865                         l_merged_rows( l_mrow_ix ).DATA_LEVEL_ID           := l_new_rows( i ).DATA_LEVEL_ID;
4866                         l_merged_rows( l_mrow_ix ).ROW_IDENTIFIER            := l_new_rows( i ).ROW_IDENTIFIER;
4867                         l_merged_rows( l_mrow_ix ).CREATED_BY                := l_new_rows( i ).CREATED_BY;
4868                         l_merged_rows( l_mrow_ix ).LAST_UPDATED_BY           := l_new_rows( i ).LAST_UPDATED_BY;
4869                         l_merged_rows( l_mrow_ix ).REQUEST_ID                := FND_GLOBAL.CONC_REQUEST_ID;
4870                         l_merged_rows( l_mrow_ix ).PROGRAM_APPLICATION_ID    := FND_GLOBAL.PROG_APPL_ID;
4871                         l_merged_rows( l_mrow_ix ).PROGRAM_ID                := FND_GLOBAL.CONC_PROGRAM_ID;
4872                         l_merged_rows( l_mrow_ix ).PROGRAM_UPDATE_DATE       := SYSDATE;
4873                     END LOOP; --FOR i IN 1..l_new_row_idx LOOP
4874                 END IF; --IF idx = l_old_rows.LAST AND l_new_row_idx > 0 THEN
4875             END LOOP; -- loop over old rows
4876 
4877             IF l_merged_rows IS NOT NULL THEN
4878                 -- delete
4879                 Debug_Conc_Log( l_proc_log_prefix || l_old_rowids.COUNT || ' old rows ...' );
4880                 FORALL rid_ix IN INDICES OF l_old_rowids
4881                     DELETE FROM EGO_ITM_USR_ATTR_INTRFC
4882                         WHERE ROWID = l_old_rowids( rid_ix );
4883                 -- insert
4884                 Debug_Conc_Log( l_proc_log_prefix || l_merged_rows.COUNT || ' merged rows ...' );
4885                 FORALL row_index IN INDICES OF l_merged_rows
4886                     INSERT INTO EGO_ITM_USR_ATTR_INTRFC
4887                         VALUES l_merged_rows( row_index );
4888             END IF;
4889         END IF; -- ENDS IF l_old_rows.count <> 0
4890         Debug_Conc_Log( l_proc_log_prefix || 'Exiting' );
4891     EXCEPTION WHEN OTHERS THEN
4892         Debug_Conc_Log( l_proc_log_prefix || 'Error - ' || SQLERRM);
4893         IF c_target_rev_attrs%ISOPEN THEN
4894             CLOSE c_target_rev_attrs;
4895         END IF;
4896         RAISE;
4897     END Merge_Rev_Attrs_For_Import;
4898 
4899     -- Merges all entities in batch
4900     PROCEDURE Merge_Batch_For_Import( p_batch_id       IN NUMBER
4901                                     , p_master_org_id  IN NUMBER
4902                                     )
4903     IS
4904     BEGIN
4905         Merge_Items_For_Import(p_batch_id, p_master_org_id);
4906         Merge_Revs_For_Import(p_batch_id, p_master_org_id);
4907         Merge_Categories_For_Import(p_batch_id, p_master_org_id);
4908         Merge_Item_Attrs_For_Import(p_batch_id, p_master_org_id);
4909         Merge_Rev_Attrs_For_Import(p_batch_id, p_master_org_id);
4910     END Merge_Batch_For_Import;
4911 
4912     --=================================================================================================================--
4913     --------------------------------- End of Merging Section for Import -----------------------------------------------
4914     --=================================================================================================================--
4915 
4916     /*
4917      * This method is called after all the import is completed
4918      * this will update the process flag of rows with process flag = 111
4919      */
4920     PROCEDURE Demerge_Batch_After_Import(
4921                                            ERRBUF  OUT NOCOPY VARCHAR2
4922                                          , RETCODE OUT NOCOPY VARCHAR2
4923                                          , p_batch_id        IN NUMBER
4924                                         )
4925     IS
4926         l_proc_log_prefix   VARCHAR2(50) := 'Demerge_Batch_After_Import - ';
4927     BEGIN
4928         Debug_Conc_Log( l_proc_log_prefix || 'Starting ...' );
4929         -- processing items and org assignments
4930         UPDATE MTL_SYSTEM_ITEMS_INTERFACE msii
4931           SET (PROCESS_FLAG, INVENTORY_ITEM_ID) =
4932                              (SELECT PROCESS_FLAG, INVENTORY_ITEM_ID
4933                               FROM MTL_SYSTEM_ITEMS_INTERFACE msii_merged
4934                               WHERE msii_merged.ITEM_NUMBER = msii.ITEM_NUMBER
4935                                 AND msii_merged.ORGANIZATION_ID = msii.ORGANIZATION_ID
4936                                 AND msii_merged.REQUEST_ID = msii.REQUEST_ID
4937                                 AND msii_merged.SET_PROCESS_ID = msii.SET_PROCESS_ID
4938                                 AND msii_merged.PROCESS_FLAG <> 111)
4939         WHERE SET_PROCESS_ID = p_batch_id
4940           AND PROCESS_FLAG = 111;
4941 
4942         Debug_Conc_Log( l_proc_log_prefix || 'Processed ' || SQL%ROWCOUNT || ' Items.' );
4943         -- processing item revisions
4944         UPDATE MTL_ITEM_REVISIONS_INTERFACE miri
4945           SET (PROCESS_FLAG, INVENTORY_ITEM_ID) =
4946                              (SELECT PROCESS_FLAG, INVENTORY_ITEM_ID
4947                               FROM MTL_ITEM_REVISIONS_INTERFACE miri_merged
4948                               WHERE miri_merged.ITEM_NUMBER = miri.ITEM_NUMBER
4949                                 AND miri_merged.ORGANIZATION_ID = miri.ORGANIZATION_ID
4950                                 AND miri_merged.REVISION = miri.REVISION
4951                                 AND miri_merged.REQUEST_ID = miri.REQUEST_ID
4952                                 AND miri_merged.SET_PROCESS_ID = miri.SET_PROCESS_ID
4953                                 AND miri_merged.PROCESS_FLAG <> 111)
4954         WHERE SET_PROCESS_ID = p_batch_id
4955           AND PROCESS_FLAG = 111;
4956 
4957         Debug_Conc_Log( l_proc_log_prefix || 'Processed ' || SQL%ROWCOUNT || ' Revisions.' );
4958         -- processing category assignments
4959         UPDATE MTL_ITEM_CATEGORIES_INTERFACE mici
4960           SET (PROCESS_FLAG, INVENTORY_ITEM_ID) =
4961                              (SELECT PROCESS_FLAG, INVENTORY_ITEM_ID
4962                               FROM MTL_ITEM_CATEGORIES_INTERFACE mici_merged
4963                               WHERE mici_merged.ITEM_NUMBER = mici.ITEM_NUMBER
4964                                 AND mici_merged.ORGANIZATION_ID = mici.ORGANIZATION_ID
4965                                 AND mici_merged.CATEGORY_SET_NAME = mici.CATEGORY_SET_NAME
4966                                 AND mici_merged.CATEGORY_NAME = mici.CATEGORY_NAME
4967                                 AND mici_merged.REQUEST_ID = mici.REQUEST_ID
4968                                 AND mici_merged.SET_PROCESS_ID = mici.SET_PROCESS_ID
4969                                 AND mici_merged.PROCESS_FLAG <> 111)
4970         WHERE SET_PROCESS_ID = p_batch_id
4971           AND PROCESS_FLAG = 111;
4972 
4973         Debug_Conc_Log( l_proc_log_prefix || 'Processed ' || SQL%ROWCOUNT || ' Category Assignments.' );
4974         -- processing revision attributes
4975         UPDATE EGO_ITM_USR_ATTR_INTRFC eiuai
4976           SET (PROCESS_STATUS, INVENTORY_ITEM_ID) =
4977                                (SELECT PROCESS_STATUS, INVENTORY_ITEM_ID
4978                                 FROM EGO_ITM_USR_ATTR_INTRFC eiuai_merged
4979                                 WHERE eiuai_merged.ITEM_NUMBER = eiuai.ITEM_NUMBER
4980                                   AND eiuai_merged.ORGANIZATION_ID = eiuai.ORGANIZATION_ID
4981                                   AND eiuai_merged.ATTR_GROUP_INT_NAME = eiuai.ATTR_GROUP_INT_NAME
4982                                   AND eiuai_merged.ATTR_INT_NAME = eiuai.ATTR_INT_NAME
4983                                   AND NVL(eiuai_merged.ATTR_GROUP_TYPE, 'EGO_ITEMMGMT_GROUP') = NVL(eiuai.ATTR_GROUP_TYPE, 'EGO_ITEMMGMT_GROUP')
4984                                   AND eiuai_merged.REVISION = eiuai.REVISION
4985                                   AND eiuai_merged.REQUEST_ID = eiuai.REQUEST_ID
4986                                   AND eiuai_merged.DATA_SET_ID = eiuai.DATA_SET_ID
4987                                   AND eiuai_merged.PROCESS_STATUS <> 7)
4988         WHERE DATA_SET_ID = p_batch_id
4989           AND PROCESS_STATUS = 7
4990           AND REVISION IS NOT NULL;
4991 
4992         Debug_Conc_Log( l_proc_log_prefix || 'Processed ' || SQL%ROWCOUNT || ' Revision attributes.' );
4993         -- processing item attributes
4994         UPDATE EGO_ITM_USR_ATTR_INTRFC eiuai
4995           SET (PROCESS_STATUS, INVENTORY_ITEM_ID) =
4996                                (SELECT PROCESS_STATUS, INVENTORY_ITEM_ID
4997                                 FROM EGO_ITM_USR_ATTR_INTRFC eiuai_merged
4998                                 WHERE eiuai_merged.ITEM_NUMBER = eiuai.ITEM_NUMBER
4999                                   AND eiuai_merged.ORGANIZATION_ID = eiuai.ORGANIZATION_ID
5000                                   AND eiuai_merged.ATTR_GROUP_INT_NAME = eiuai.ATTR_GROUP_INT_NAME
5001                                   AND eiuai_merged.ATTR_INT_NAME = eiuai.ATTR_INT_NAME
5002                                   AND Nvl(eiuai_merged.ATTR_GROUP_TYPE, 'EGO_ITEMMGMT_GROUP') = Nvl(eiuai.ATTR_GROUP_TYPE, 'EGO_ITEMMGMT_GROUP')
5003                                   AND eiuai_merged.REVISION IS NULL
5004                                   AND eiuai_merged.REQUEST_ID = eiuai.REQUEST_ID
5005                                   AND eiuai_merged.DATA_SET_ID = eiuai.DATA_SET_ID
5006                                   AND eiuai_merged.PROCESS_STATUS <> 7)
5007         WHERE DATA_SET_ID = p_batch_id
5008           AND PROCESS_STATUS = 7
5009           AND REVISION IS NULL;
5010 
5011         Debug_Conc_Log( l_proc_log_prefix || 'Processed ' || SQL%ROWCOUNT || ' Item attributes.' );
5012 
5013         --COMMIT;
5014         Debug_Conc_Log( l_proc_log_prefix || 'Exiting' );
5015         RETCODE := '0';
5016         ERRBUF := NULL;
5017     EXCEPTION WHEN OTHERS THEN
5018         Debug_Conc_Log(l_proc_log_prefix || 'Error - ' || SQLERRM);
5019         RETCODE := '2';
5020         ERRBUF := 'Error in method EGO_IMPORT_PVT.Demerge_Batch_After_Import - '||SQLERRM;
5021     END Demerge_Batch_After_Import;
5022 
5023  /*
5024   * This method does a bulkload of GTINs
5025   */
5026  PROCEDURE Process_Gtin_Intf_Rows(ERRBUF  OUT NOCOPY VARCHAR2,
5027                                   RETCODE OUT NOCOPY VARCHAR2,
5028                                   p_data_set_id IN  NUMBER) IS
5029    CURSOR c_intf_rows IS
5030    SELECT
5031      intf.INVENTORY_ITEM_ID,
5032      intf.ORGANIZATION_ID,
5033      intf.ITEM_NUMBER,
5034      intf.ORGANIZATION_CODE,
5035      intf.PRIMARY_UOM_CODE,
5036      intf.GLOBAL_TRADE_ITEM_NUMBER,
5037      intf.GTIN_DESCRIPTION,
5038      intf.TRANSACTION_ID,
5039      c.CROSS_REFERENCE EXISTING_GTIN,
5040      c.DESCRIPTION     EXISTING_GTIN_DESC,
5041      c.CROSS_REFERENCE_ID
5042    FROM MTL_SYSTEM_ITEMS_INTERFACE intf, MTL_PARAMETERS p, MTL_CROSS_REFERENCES c
5043    WHERE intf.SET_PROCESS_ID = p_data_set_id
5044      AND intf.ORGANIZATION_ID = p.ORGANIZATION_ID
5045      AND p.ORGANIZATION_ID = p.MASTER_ORGANIZATION_ID
5046      AND intf.PROCESS_FLAG IN (5,7)
5047      AND intf.GLOBAL_TRADE_ITEM_NUMBER IS NOT NULL
5048      AND c.INVENTORY_ITEM_ID(+) = intf.INVENTORY_ITEM_ID
5049      AND c.UOM_CODE(+) = intf.PRIMARY_UOM_CODE
5050      AND intf.REQUEST_ID = FND_GLOBAL.CONC_REQUEST_ID
5051      AND c.CROSS_REFERENCE_TYPE(+) = 'GTIN';
5052 
5053    l_gtin              NUMBER;
5054    l_msg_text          VARCHAR2(4000);
5055    dumm_status         VARCHAR2(100);
5056    l_user_id           NUMBER := FND_GLOBAL.USER_ID;
5057    l_login_id          NUMBER := FND_GLOBAL.LOGIN_ID;
5058    l_prog_appid        NUMBER := FND_GLOBAL.PROG_APPL_ID;
5059    l_prog_id           NUMBER := FND_GLOBAL.CONC_PROGRAM_ID;
5060    l_request_id        NUMBER := FND_GLOBAL.CONC_REQUEST_ID;
5061    l_err_text          VARCHAR2(4000);
5062    l_error             BOOLEAN;
5063    l_rowid             ROWID;
5064    l_xref_id           NUMBER;
5065    l_existing_gtin     VARCHAR2(1000);
5066    l_raise_event       BOOLEAN;
5067    l_xref_event_name   CONSTANT VARCHAR2(100) := 'oracle.apps.ego.item.postXrefChange';
5068    l_msg_data          VARCHAR2(4000);
5069    l_return_status     VARCHAR2(10);
5070    l_org_id            NUMBER;
5071    l_transaction_id    NUMBER;
5072    l_priv              VARCHAR2(10);
5073    l_party_name        VARCHAR2(1000);  -- Bug: 5355759
5074  BEGIN
5075    Debug_Conc_Log('Starting Process_Gtin_Intf_Rows for batch_id='||TO_CHAR(p_data_set_id));
5076    l_raise_event := FALSE;
5077    l_party_name := Get_Current_Party_Name; -- Bug: 5355759
5078    FOR i IN c_intf_rows LOOP
5079      Debug_Conc_Log('Processing for Item, Org='||TO_CHAR(i.INVENTORY_ITEM_ID)||', '||TO_CHAR(i.ORGANIZATION_ID));
5080      -- checking the edit cross reference privilege for creating GTIN xref.
5081      --l_priv := EGO_ITEM_AML_PUB.Check_No_AML_Priv(1.0, i.INVENTORY_ITEM_ID, i.ORGANIZATION_ID, 'EGO_EDIT_ITEM_XREFS', NULL, NULL);
5082      l_priv := EGO_DATA_SECURITY.CHECK_FUNCTION(1.0, 'EGO_EDIT_ITEM_XREFS', 'EGO_ITEM', i.INVENTORY_ITEM_ID, i.ORGANIZATION_ID, NULL, NULL, NULL, l_party_name);
5083 
5084      IF NVL(l_priv, 'F') <> 'T' THEN
5085        Debug_Conc_Log('No Edit Cross Reference Privilege on item');
5086        FND_MESSAGE.SET_NAME('EGO', 'EGO_NO_EDIT_XREF_PRIV');
5087        FND_MESSAGE.SET_TOKEN('ITEM', i.ITEM_NUMBER);
5088        FND_MESSAGE.SET_TOKEN('ORG', i.ORGANIZATION_CODE);
5089        l_msg_text := FND_MESSAGE.GET;
5090 
5091          dumm_status  := INVPUOPI.mtl_log_interface_err(
5092                                 i.ORGANIZATION_ID
5093                                ,l_user_id
5094                                ,l_login_id
5095                                ,l_prog_appid
5096                                ,l_prog_id
5097                                ,l_request_id
5098                                ,i.TRANSACTION_ID
5099                                ,l_msg_text
5100                                ,'GLOBAL_TRADE_ITEM_NUMBER'
5101                                ,'MTL_SYSTEM_ITEMS_INTERFACE'
5102                                ,'INV_IOI_ERR'
5103                                ,l_err_text);
5104      ELSE
5105        Debug_Conc_Log('Edit Cross Reference Privilege is present on item');
5106        -- validating the GTIN
5107        IF i.EXISTING_GTIN IS NULL THEN
5108          Debug_Conc_Log('No Existing GTIN found');
5109          Debug_Conc_Log('Validating GTIN-'||i.GLOBAL_TRADE_ITEM_NUMBER);
5110          --1. validating GTIN is number or not
5111          l_error := FALSE;
5112          l_msg_text := NULL;
5113          BEGIN
5114            l_gtin := TO_NUMBER(i.GLOBAL_TRADE_ITEM_NUMBER);
5115          EXCEPTION WHEN VALUE_ERROR THEN
5116            Debug_Conc_Log('Validation Failed - GTIN is not a Number');
5117            l_msg_text := i.GLOBAL_TRADE_ITEM_NUMBER ||' - '||FND_MESSAGE.GET_STRING('EGO', 'EGO_GTIN_NOT_NUMBER');
5118            dumm_status  := INVPUOPI.mtl_log_interface_err(
5119                                   i.ORGANIZATION_ID
5120                                  ,l_user_id
5121                                  ,l_login_id
5122                                  ,l_prog_appid
5123                                  ,l_prog_id
5124                                  ,l_request_id
5125                                  ,i.TRANSACTION_ID
5126                                  ,l_msg_text
5127                                  ,'GLOBAL_TRADE_ITEM_NUMBER'
5128                                  ,'MTL_SYSTEM_ITEMS_INTERFACE'
5129                                  ,'INV_IOI_ERR'
5130                                  ,l_err_text);
5131            l_error := TRUE;
5132          END;
5133 
5134          --2. validating the length of GTIN to be 14
5135          IF LENGTH(i.GLOBAL_TRADE_ITEM_NUMBER) <> 14 THEN
5136            Debug_Conc_Log('Validation Failed - Length is not 14 chars');
5137            l_msg_text := i.GLOBAL_TRADE_ITEM_NUMBER ||' - '||FND_MESSAGE.GET_STRING('EGO', 'EGO_GTIN_LENGTH_NOT_CORRECT');
5138            dumm_status  := INVPUOPI.mtl_log_interface_err(
5139                                   i.ORGANIZATION_ID
5140                                  ,l_user_id
5141                                  ,l_login_id
5142                                  ,l_prog_appid
5143                                  ,l_prog_id
5144                                  ,l_request_id
5145                                  ,i.TRANSACTION_ID
5146                                  ,l_msg_text
5147                                  ,'GLOBAL_TRADE_ITEM_NUMBER'
5148                                  ,'MTL_SYSTEM_ITEMS_INTERFACE'
5149                                  ,'INV_IOI_ERR'
5150                                  ,l_err_text);
5151            l_error := TRUE;
5152          END IF; --end IF LENGTH(i.GLOBAL_TRADE_ITEM_NUMBER
5153 
5154          --3. validating the check digit of GTIN to be valid
5155          IF (NOT l_error) AND EGO_GTIN_ATTRS_PVT.Is_Check_Digit_Invalid(i.GLOBAL_TRADE_ITEM_NUMBER) THEN
5156            Debug_Conc_Log('Validation Failed - Check digit is not valid');
5157            l_msg_text := i.GLOBAL_TRADE_ITEM_NUMBER ||' - '||FND_MESSAGE.GET_STRING('EGO', 'EGO_GTIN_CHECKDIGIT_INVALID');
5158            dumm_status  := INVPUOPI.mtl_log_interface_err(
5159                                   i.ORGANIZATION_ID
5160                                  ,l_user_id
5161                                  ,l_login_id
5162                                  ,l_prog_appid
5163                                  ,l_prog_id
5164                                  ,l_request_id
5165                                  ,i.TRANSACTION_ID
5166                                  ,l_msg_text
5167                                  ,'GLOBAL_TRADE_ITEM_NUMBER'
5168                                  ,'MTL_SYSTEM_ITEMS_INTERFACE'
5169                                  ,'INV_IOI_ERR'
5170                                  ,l_err_text);
5171            l_error := TRUE;
5172          END IF; --end IF (NOT l_error) AND
5173 
5174          --4. gtin can not contain more than six leading zeros
5175          IF SUBSTR(i.GLOBAL_TRADE_ITEM_NUMBER, 1, 7) = '0000000' THEN
5176            Debug_Conc_Log('Validation Failed - gtin can not contain more than six leading zeros');
5177            l_msg_text := i.GLOBAL_TRADE_ITEM_NUMBER ||' - '||FND_MESSAGE.GET_STRING('EGO', 'EGO_GTIN_LEADING_ZERO_INVALID');
5178            dumm_status  := INVPUOPI.mtl_log_interface_err(
5179                                   i.ORGANIZATION_ID
5180                                  ,l_user_id
5181                                  ,l_login_id
5182                                  ,l_prog_appid
5183                                  ,l_prog_id
5184                                  ,l_request_id
5185                                  ,i.TRANSACTION_ID
5186                                  ,l_msg_text
5187                                  ,'GLOBAL_TRADE_ITEM_NUMBER'
5188                                  ,'MTL_SYSTEM_ITEMS_INTERFACE'
5189                                  ,'INV_IOI_ERR'
5190                                  ,l_err_text);
5191            l_error := TRUE;
5192          END IF;
5193 
5194          -- 5. The third digit from the left contained in a GTIN must be 0,1,3,6,7,8,9 when the second digit from the left is 0
5195          IF SUBSTR(i.GLOBAL_TRADE_ITEM_NUMBER, 2, 1) = '0' AND
5196             SUBSTR(i.GLOBAL_TRADE_ITEM_NUMBER, 3, 1) NOT IN ('0', '1', '3', '6', '7', '8', '9') THEN
5197            Debug_Conc_Log('Validation Failed - The third digit from the left contained in a GTIN must be 0,1,3,6,7,8,9 when the second digit from the left is 0 ');
5198            l_msg_text := i.GLOBAL_TRADE_ITEM_NUMBER ||' - '||FND_MESSAGE.GET_STRING('EGO', 'EGO_GTIN_THIRD_DIGIT_INVALID');
5199            dumm_status  := INVPUOPI.mtl_log_interface_err(
5200                                   i.ORGANIZATION_ID
5201                                  ,l_user_id
5202                                  ,l_login_id
5203                                  ,l_prog_appid
5204                                  ,l_prog_id
5205                                  ,l_request_id
5206                                  ,i.TRANSACTION_ID
5207                                  ,l_msg_text
5208                                  ,'GLOBAL_TRADE_ITEM_NUMBER'
5209                                  ,'MTL_SYSTEM_ITEMS_INTERFACE'
5210                                  ,'INV_IOI_ERR'
5211                                  ,l_err_text);
5212            l_error := TRUE;
5213          END IF;
5214 
5215          -- 6. If a GTIN in a RCI message has six leading zeros, digits 7-9 must be between 301-968
5216          IF (NOT l_error) AND SUBSTR(i.GLOBAL_TRADE_ITEM_NUMBER, 1, 6) = '000000' AND
5217             TO_NUMBER(SUBSTR(i.GLOBAL_TRADE_ITEM_NUMBER, 7, 3)) NOT BETWEEN 301 AND 968 THEN
5218            Debug_Conc_Log('Validation Failed - If a GTIN in a RCI message has six leading zeros, digits 7-9 must be between 301-968');
5219            l_msg_text := i.GLOBAL_TRADE_ITEM_NUMBER ||' - '||FND_MESSAGE.GET_STRING('EGO', 'EGO_GTIN_7TO9DIGIT_INVALID');
5220            dumm_status  := INVPUOPI.mtl_log_interface_err(
5221                                   i.ORGANIZATION_ID
5222                                  ,l_user_id
5223                                  ,l_login_id
5224                                  ,l_prog_appid
5225                                  ,l_prog_id
5226                                  ,l_request_id
5227                                  ,i.TRANSACTION_ID
5228                                  ,l_msg_text
5229                                  ,'GLOBAL_TRADE_ITEM_NUMBER'
5230                                  ,'MTL_SYSTEM_ITEMS_INTERFACE'
5231                                  ,'INV_IOI_ERR'
5232                                  ,l_err_text);
5233            l_error := TRUE;
5234          END IF;
5235 
5236          -- 7. GTINs submitted in RCI messages cannot contain values 0980-0989 or 099 in the first 4 digits
5237          IF SUBSTR(i.GLOBAL_TRADE_ITEM_NUMBER, 1, 3) IN ('098', '099') THEN
5238            Debug_Conc_Log('Validation Failed - GTINs submitted in RCI messages cannot contain values 0980-0989 or 099 in the first 4 digits');
5239            l_msg_text := i.GLOBAL_TRADE_ITEM_NUMBER ||' - '||FND_MESSAGE.GET_STRING('EGO', 'EGO_GTIN_0TO4_DIGIT_INVALID');
5240            dumm_status  := INVPUOPI.mtl_log_interface_err(
5241                                   i.ORGANIZATION_ID
5242                                  ,l_user_id
5243                                  ,l_login_id
5244                                  ,l_prog_appid
5245                                  ,l_prog_id
5246                                  ,l_request_id
5247                                  ,i.TRANSACTION_ID
5248                                  ,l_msg_text
5249                                  ,'GLOBAL_TRADE_ITEM_NUMBER'
5250                                  ,'MTL_SYSTEM_ITEMS_INTERFACE'
5251                                  ,'INV_IOI_ERR'
5252                                  ,l_err_text);
5253            l_error := TRUE;
5254          END IF;
5255 
5256          -- 8. GTINs submitted in RCI messages cannot contain values 02, 04, 05, and 10-29 in the second and third digits from the left
5257          IF (NOT l_error) AND (SUBSTR(i.GLOBAL_TRADE_ITEM_NUMBER, 2, 2) IN ('02', '04', '05') OR
5258              TO_NUMBER(SUBSTR(i.GLOBAL_TRADE_ITEM_NUMBER, 2, 2)) BETWEEN 10 AND 29) THEN
5259            Debug_Conc_Log('Validation Failed - GTINs submitted in RCI messages cannot contain values 02, 04, 05, and 10-29 in the second and third digits from the left');
5260            l_msg_text := i.GLOBAL_TRADE_ITEM_NUMBER ||' - '||FND_MESSAGE.GET_STRING('EGO', 'EGO_GTIN_2TO3_DIGIT_INVALID');
5261            dumm_status  := INVPUOPI.mtl_log_interface_err(
5262                                   i.ORGANIZATION_ID
5263                                  ,l_user_id
5264                                  ,l_login_id
5265                                  ,l_prog_appid
5266                                  ,l_prog_id
5267                                  ,l_request_id
5268                                  ,i.TRANSACTION_ID
5269                                  ,l_msg_text
5270                                  ,'GLOBAL_TRADE_ITEM_NUMBER'
5271                                  ,'MTL_SYSTEM_ITEMS_INTERFACE'
5272                                  ,'INV_IOI_ERR'
5273                                  ,l_err_text);
5274            l_error := TRUE;
5275          END IF;
5276 
5277          -- checking for duplicate GTIN
5278          IF NOT l_error THEN
5279            BEGIN
5280              SELECT CONCATENATED_SEGMENTS INTO l_existing_gtin
5281              FROM MTL_SYSTEM_ITEMS_KFV msik, MTL_CROSS_REFERENCES_B mcr, MTL_PARAMETERS mp
5282              WHERE msik.INVENTORY_ITEM_ID = mcr.INVENTORY_ITEM_ID
5283                AND msik.ORGANIZATION_ID = mp.ORGANIZATION_ID
5284                AND mp.ORGANIZATION_ID = mp.MASTER_ORGANIZATION_ID
5285                AND mcr.CROSS_REFERENCE_TYPE = 'GTIN'
5286                AND mcr.CROSS_REFERENCE = i.GLOBAL_TRADE_ITEM_NUMBER
5287                AND mcr.UOM_CODE = msik.PRIMARY_UOM_CODE
5288                AND ROWNUM = 1;
5289 
5290              Debug_Conc_Log('Validation Failed - duplicate GTIN');
5291              FND_MESSAGE.Set_Name('EGO', 'EGO_GTIN_EXISTS_WITH_PACKITEM');
5292              FND_MESSAGE.Set_Token('GTIN', i.GLOBAL_TRADE_ITEM_NUMBER);
5293              FND_MESSAGE.Set_Token('PACK_ITEM', l_existing_gtin);
5294              FND_MESSAGE.Set_Token('UOM', i.PRIMARY_UOM_CODE);
5295              l_msg_text := i.GLOBAL_TRADE_ITEM_NUMBER ||' - '||FND_MESSAGE.GET;
5296              dumm_status  := INVPUOPI.mtl_log_interface_err(
5297                                     i.ORGANIZATION_ID
5298                                    ,l_user_id
5299                                    ,l_login_id
5300                                    ,l_prog_appid
5301                                    ,l_prog_id
5302                                    ,l_request_id
5303                                    ,i.TRANSACTION_ID
5304                                    ,l_msg_text
5305                                    ,'GLOBAL_TRADE_ITEM_NUMBER'
5306                                    ,'MTL_SYSTEM_ITEMS_INTERFACE'
5307                                    ,'INV_IOI_ERR'
5308                                    ,l_err_text);
5309              l_error := TRUE;
5310            EXCEPTION WHEN NO_DATA_FOUND THEN
5311              NULL;
5312            END;
5313          END IF; -- checking for duplicate GTIN
5314          -- if no errors then creating a GTIN
5315          IF NOT l_error THEN
5316            Debug_Conc_Log('No Errors - Creating GTIN');
5317            MTL_CROSS_REFERENCES_PKG.INSERT_ROW(
5318              P_SOURCE_SYSTEM_ID       => NULL,
5319              P_START_DATE_ACTIVE      => NULL,
5320              P_END_DATE_ACTIVE        => NULL,
5321              P_OBJECT_VERSION_NUMBER  => NULL,
5322              P_UOM_CODE               => i.PRIMARY_UOM_CODE,
5323              P_REVISION_ID            => NULL,
5324              P_EPC_GTIN_SERIAL        => NULL,
5325              P_INVENTORY_ITEM_ID      => i.INVENTORY_ITEM_ID,
5326              P_ORGANIZATION_ID        => NULL,
5327              P_CROSS_REFERENCE_TYPE   => 'GTIN',
5328              P_CROSS_REFERENCE        => i.GLOBAL_TRADE_ITEM_NUMBER,
5329              P_ORG_INDEPENDENT_FLAG   => 'Y',
5330              P_REQUEST_ID             => l_request_id,
5331              P_ATTRIBUTE1             => NULL,
5332              P_ATTRIBUTE2             => NULL,
5333              P_ATTRIBUTE3             => NULL,
5334              P_ATTRIBUTE4             => NULL,
5335              P_ATTRIBUTE5             => NULL,
5336              P_ATTRIBUTE6             => NULL,
5337              P_ATTRIBUTE7             => NULL,
5338              P_ATTRIBUTE8             => NULL,
5339              P_ATTRIBUTE9             => NULL,
5340              P_ATTRIBUTE10            => NULL,
5341              P_ATTRIBUTE11            => NULL,
5342              P_ATTRIBUTE12            => NULL,
5343              P_ATTRIBUTE13            => NULL,
5344              P_ATTRIBUTE14            => NULL,
5345              P_ATTRIBUTE15            => NULL,
5346              P_ATTRIBUTE_CATEGORY     => NULL,
5347              P_DESCRIPTION            => i.GTIN_DESCRIPTION,
5348              P_CREATION_DATE          => SYSDATE,
5349              P_CREATED_BY             => l_user_id,
5350              P_LAST_UPDATE_DATE       => SYSDATE,
5351              P_LAST_UPDATED_BY        => l_user_id,
5352              P_LAST_UPDATE_LOGIN      => l_login_id,
5353              P_PROGRAM_APPLICATION_ID => l_prog_appid,
5354              P_PROGRAM_ID             => l_prog_id,
5355              P_PROGRAM_UPDATE_DATE    => SYSDATE,
5356              X_CROSS_REFERENCE_ID     => l_xref_id);
5357 
5358            Debug_Conc_Log('Done Creating GTIN');
5359            l_raise_event := TRUE;
5360            l_transaction_id := i.TRANSACTION_ID;
5361            l_org_id := i.ORGANIZATION_ID;
5362          END IF; -- end IF NOT l_error
5363        ELSIF i.EXISTING_GTIN IS NOT NULL THEN
5364          IF i.GTIN_DESCRIPTION IS NOT NULL
5365              AND (  ( i.EXISTING_GTIN_DESC <> i.GTIN_DESCRIPTION)
5366                  OR (i.EXISTING_GTIN_DESC IS NULL AND i.GTIN_DESCRIPTION IS NOT NULL)
5367                  )
5368          THEN
5369            Debug_Conc_Log('Existing GTIN found. Description needs to be updated.');
5370            UPDATE MTL_CROSS_REFERENCES_TL
5371            SET    DESCRIPTION            = i.GTIN_DESCRIPTION,
5372                   LAST_UPDATE_DATE       = SYSDATE,
5373                   LAST_UPDATED_BY        = l_user_id,
5374                   LAST_UPDATE_LOGIN      = l_login_id,
5375                   SOURCE_LANG            = USERENV('LANG')
5376            WHERE CROSS_REFERENCE_ID = i.CROSS_REFERENCE_ID
5377              AND USERENV('LANG') IN (LANGUAGE, SOURCE_LANG);
5378 
5379            Debug_Conc_Log('Description updated for GTIN='||i.EXISTING_GTIN);
5380            l_raise_event := TRUE;
5381            l_transaction_id := i.TRANSACTION_ID;
5382            l_org_id := i.ORGANIZATION_ID;
5383          END IF; -- IF i.GTIN_DESCRIPTION IS NOT NULL
5384 
5385          -- BUG 5549140 - Adding validation that existing GTIN can not be changed
5386          IF i.EXISTING_GTIN <> i.GLOBAL_TRADE_ITEM_NUMBER THEN
5387            Debug_Conc_Log('GTIN can not be updated');
5388            FND_MESSAGE.Set_Name('EGO', 'EGO_GTIN_NOT_UPDATEABLE');
5389            l_msg_text := FND_MESSAGE.GET;
5390            dumm_status  := INVPUOPI.mtl_log_interface_err(
5391                                   i.ORGANIZATION_ID
5392                                  ,l_user_id
5393                                  ,l_login_id
5394                                  ,l_prog_appid
5395                                  ,l_prog_id
5396                                  ,l_request_id
5397                                  ,i.TRANSACTION_ID
5398                                  ,l_msg_text
5399                                  ,'GLOBAL_TRADE_ITEM_NUMBER'
5400                                  ,'MTL_SYSTEM_ITEMS_INTERFACE'
5401                                  ,'INV_IOI_ERR'
5402                                  ,l_err_text);
5403          END IF; -- IF i.EXISTING_GTIN <> i.GLOBAL_TRADE_ITEM_NUMBER THEN
5404 
5405        END IF; -- IF i.EXISTING_GTIN IS NULL THEN
5406      END IF; -- IF NVL(l_priv, 'Y') = 'Y' THEN
5407    END LOOP;
5408 
5409    IF l_raise_event THEN
5410      Debug_Conc_Log('Raising business event');
5411      EGO_WF_WRAPPER_PVT.Raise_Item_Event(
5412        p_event_name    => l_xref_event_name,
5413        p_request_id    => l_request_id,
5414        x_msg_data      => l_msg_data,
5415        x_return_status => l_return_status);
5416 
5417      Debug_Conc_Log('Done Raising business event with status - '||l_return_status);
5418      Debug_Conc_Log('Done Raising business event with message - '||SUBSTR(l_msg_data, 3950));
5419      IF l_return_status <> 'S' THEN
5420        l_msg_text := SUBSTR('Error in raising business event for GTIN Cross References - '||l_msg_data, 4000);
5421        dumm_status  := INVPUOPI.mtl_log_interface_err(
5422                                   l_org_id
5423                                  ,l_user_id
5424                                  ,l_login_id
5425                                  ,l_prog_appid
5426                                  ,l_prog_id
5427                                  ,l_request_id
5428                                  ,l_transaction_id
5429                                  ,l_msg_text
5430                                  ,'GLOBAL_TRADE_ITEM_NUMBER'
5431                                  ,'MTL_SYSTEM_ITEMS_INTERFACE'
5432                                  ,'INV_IOI_ERR'
5433                                  ,l_err_text);
5434      END IF;
5435    END IF;
5436 
5437    COMMIT;
5438    RETCODE := '0';
5439    ERRBUF := NULL;
5440    Debug_Conc_Log('Done Process_Gtin_Intf_Rows with success');
5441  EXCEPTION WHEN OTHERS THEN
5442    Debug_Conc_Log('Done Process_Gtin_Intf_Rows with error - '||SQLERRM);
5443    RETCODE := '2';
5444    ERRBUF := 'Error in method EGO_IMPORT_PVT.Process_Gtin_Intf_Rows - '||SQLERRM;
5445  END Process_Gtin_Intf_Rows;
5446 
5447  /*
5448   * Private method to process Source System item cross reference
5449   */
5450  FUNCTION Process_SSXref_Pvt(p_source_system_id                 IN NUMBER,
5451                              p_source_system_reference        IN VARCHAR2,
5452                              p_source_system_reference_desc   IN VARCHAR2,
5453                              p_inventory_item_id                  IN NUMBER)
5454  RETURN BOOLEAN
5455  IS
5456    l_rowid             ROWID;
5457    l_xref_id           NUMBER;
5458    l_user_id           NUMBER := FND_GLOBAL.USER_ID;
5459    l_login_id          NUMBER := FND_GLOBAL.LOGIN_ID;
5460    l_prog_appid        NUMBER := FND_GLOBAL.PROG_APPL_ID;
5461    l_prog_id           NUMBER := FND_GLOBAL.CONC_PROGRAM_ID;
5462    l_request_id        NUMBER := FND_GLOBAL.CONC_REQUEST_ID;
5463    l_raise_event       BOOLEAN;
5464    l_msg_data          VARCHAR2(4000);
5465    l_return_status     VARCHAR2(10);
5466    l_msg_text          VARCHAR2(4000);
5467    l_err_text          VARCHAR2(4000);
5468    dumm_status         NUMBER;
5469    l_item_id           NUMBER;
5470  BEGIN
5471    Debug_Conc_Log('In Process_SSXref_Pvt begin');
5472    l_raise_event := FALSE;
5473    -- if a cross reference already exists for the source system item, then end dating it
5474    BEGIN
5475      SELECT ROWID, INVENTORY_ITEM_ID INTO l_rowid, l_item_id
5476      FROM MTL_CROSS_REFERENCES_B mcr
5477      WHERE mcr.SOURCE_SYSTEM_ID = p_source_system_id
5478        AND mcr.CROSS_REFERENCE_TYPE = 'SS_ITEM_XREF'
5479        AND mcr.CROSS_REFERENCE = p_source_system_reference
5480        AND (mcr.END_DATE_ACTIVE IS NULL OR mcr.END_DATE_ACTIVE > SYSDATE);
5481 
5482      Debug_Conc_Log('Existing Xref found l_item_id='||to_char(l_item_id));
5483      IF p_inventory_item_id <> NVL(l_item_id, -1) THEN
5484        Debug_Conc_Log('Updating the existing SS Xref, end dating');
5485        UPDATE MTL_CROSS_REFERENCES_B
5486        SET
5487          END_DATE_ACTIVE = SYSDATE,
5488          LAST_UPDATED_BY = l_user_id,
5489          LAST_UPDATE_DATE = SYSDATE,
5490          LAST_UPDATE_LOGIN = l_login_id,
5491          PROGRAM_APPLICATION_ID = l_prog_appid,
5492          PROGRAM_ID = l_prog_id,
5493          REQUEST_ID = l_request_id,
5494          PROGRAM_UPDATE_DATE = SYSDATE
5495        WHERE ROWID = l_rowid;
5496        Debug_Conc_Log('Done Updating the existing SS Xref, end dating');
5497        l_raise_event := TRUE;
5498      END IF; --IF p_inventory_item_id <> NVL(l_item_id, -1) THEN
5499    EXCEPTION WHEN NO_DATA_FOUND THEN
5500      Debug_Conc_Log('No Existing SS Xref Found');
5501      l_item_id := -1;
5502      NULL;
5503    END;
5504 
5505    IF p_inventory_item_id <> NVL(l_item_id, -1) THEN
5506      -- calling MTL_CROSS_REFERENCES_B table handler to insert rows
5507      Debug_Conc_Log('Creating SS Xref');
5508      MTL_CROSS_REFERENCES_PKG.INSERT_ROW(
5509          P_SOURCE_SYSTEM_ID       => p_source_system_id,
5510          P_START_DATE_ACTIVE      => SYSDATE,
5511          P_END_DATE_ACTIVE        => NULL,
5512          P_OBJECT_VERSION_NUMBER  => NULL,
5513          P_UOM_CODE               => NULL,
5514          P_REVISION_ID            => NULL,
5515          P_EPC_GTIN_SERIAL        => NULL,
5516          P_INVENTORY_ITEM_ID      => p_inventory_item_id,
5517          P_ORGANIZATION_ID        => NULL,
5518          P_CROSS_REFERENCE_TYPE   => 'SS_ITEM_XREF',
5519          P_CROSS_REFERENCE        => p_source_system_reference,
5520          P_ORG_INDEPENDENT_FLAG   => 'Y',
5521          P_REQUEST_ID             => l_request_id,
5522          P_ATTRIBUTE1             => NULL,
5523          P_ATTRIBUTE2             => NULL,
5524          P_ATTRIBUTE3             => NULL,
5525          P_ATTRIBUTE4             => NULL,
5526          P_ATTRIBUTE5             => NULL,
5527          P_ATTRIBUTE6             => NULL,
5528          P_ATTRIBUTE7             => NULL,
5529          P_ATTRIBUTE8             => NULL,
5530          P_ATTRIBUTE9             => NULL,
5531          P_ATTRIBUTE10            => NULL,
5532          P_ATTRIBUTE11            => NULL,
5533          P_ATTRIBUTE12            => NULL,
5534          P_ATTRIBUTE13            => NULL,
5535          P_ATTRIBUTE14            => NULL,
5536          P_ATTRIBUTE15            => NULL,
5537          P_ATTRIBUTE_CATEGORY     => NULL,
5538          P_DESCRIPTION            => p_source_system_reference_desc,
5539          P_CREATION_DATE          => SYSDATE,
5540          P_CREATED_BY             => l_user_id,
5541          P_LAST_UPDATE_DATE       => SYSDATE,
5542          P_LAST_UPDATED_BY        => l_user_id,
5543          P_LAST_UPDATE_LOGIN      => l_login_id,
5544          P_PROGRAM_APPLICATION_ID => l_prog_appid,
5545          P_PROGRAM_ID             => l_prog_id,
5546          P_PROGRAM_UPDATE_DATE    => SYSDATE,
5547          X_CROSS_REFERENCE_ID     => l_xref_id);
5548 
5549      l_raise_event := TRUE;
5550    END IF; --IF p_inventory_item_id <> NVL(l_item_id, -1) THEN
5551    Debug_Conc_Log('Done Process_SSXref_Pvt');
5552    RETURN l_raise_event;
5553  END Process_SSXref_Pvt;
5554 
5555  /*
5556   * This method Bulk Loads the Source system cross references
5557   */
5558  PROCEDURE Process_SSXref_Intf_Rows(ERRBUF  OUT NOCOPY VARCHAR2,
5559                                     RETCODE OUT NOCOPY VARCHAR2,
5560                                     p_data_set_id IN  NUMBER) IS
5561    CURSOR c_intf_rows IS
5562      SELECT
5563        SOURCE_SYSTEM_ID,
5564        SOURCE_SYSTEM_REFERENCE,
5565        SOURCE_SYSTEM_REFERENCE_DESC,
5566        INVENTORY_ITEM_ID,
5567        ORGANIZATION_ID,
5568        TRANSACTION_ID,
5569        TRANSACTION_TYPE
5570      FROM MTL_SYSTEM_ITEMS_INTERFACE msi
5571      WHERE msi.PROCESS_FLAG IN (5, 7)
5572        AND msi.SET_PROCESS_ID = p_data_set_id
5573        AND msi.SOURCE_SYSTEM_ID IS NOT NULL
5574        AND msi.SOURCE_SYSTEM_REFERENCE IS NOT NULL
5575        AND msi.REQUEST_ID = FND_GLOBAL.CONC_REQUEST_ID
5576        AND NOT EXISTS (SELECT NULL
5577                        FROM MTL_CROSS_REFERENCES_B mcr
5578                        WHERE mcr.SOURCE_SYSTEM_ID = msi.SOURCE_SYSTEM_ID
5579                          AND mcr.CROSS_REFERENCE_TYPE = 'SS_ITEM_XREF'
5580                          AND mcr.CROSS_REFERENCE = msi.SOURCE_SYSTEM_REFERENCE
5581                          AND mcr.INVENTORY_ITEM_ID = msi.INVENTORY_ITEM_ID
5582                          AND (mcr.END_DATE_ACTIVE IS NULL OR mcr.END_DATE_ACTIVE > SYSDATE));
5583 
5584    -- Bug: 4752861
5585    CURSOR c_intf_existing_rows IS
5586      SELECT
5587        msi.SOURCE_SYSTEM_ID,
5588        msi.SOURCE_SYSTEM_REFERENCE,
5589        msi.SOURCE_SYSTEM_REFERENCE_DESC,
5590        msi.INVENTORY_ITEM_ID,
5591        msi.ORGANIZATION_ID,
5592        msi.TRANSACTION_ID,
5593        msi.TRANSACTION_TYPE,
5594        mcr.CROSS_REFERENCE_ID
5595      FROM MTL_SYSTEM_ITEMS_INTERFACE msi, MTL_CROSS_REFERENCES mcr
5596      WHERE msi.PROCESS_FLAG IN (5, 7)
5597        AND msi.SET_PROCESS_ID = p_data_set_id
5598        AND msi.SOURCE_SYSTEM_ID IS NOT NULL
5599        AND msi.SOURCE_SYSTEM_REFERENCE IS NOT NULL
5600        AND msi.REQUEST_ID = FND_GLOBAL.CONC_REQUEST_ID
5601        AND mcr.SOURCE_SYSTEM_ID = msi.SOURCE_SYSTEM_ID
5602        AND mcr.CROSS_REFERENCE_TYPE = 'SS_ITEM_XREF'
5603        AND mcr.CROSS_REFERENCE = msi.SOURCE_SYSTEM_REFERENCE
5604        AND mcr.INVENTORY_ITEM_ID = msi.INVENTORY_ITEM_ID
5605        AND msi.SOURCE_SYSTEM_REFERENCE_DESC IS NOT NULL
5606        AND NVL(mcr.DESCRIPTION, msi.SOURCE_SYSTEM_REFERENCE_DESC||'##') <> msi.SOURCE_SYSTEM_REFERENCE_DESC
5607        AND UPPER(msi.TRANSACTION_TYPE) <> 'CREATE'
5608        AND (mcr.END_DATE_ACTIVE IS NULL OR mcr.END_DATE_ACTIVE > SYSDATE);
5609 
5610    -- Bug: 5262421 - Introducing 11 as new process_status. When user chooses to re-import and Import Only Cross References
5611    -- is true, then we move the status of MSII record to 11, so that it will not be picked up by any other IOI program
5612    -- running with option "Process All Batch". So while creating Xrefs, we will also pick up records with process_status = 11
5613    CURSOR c_unprcd_intf_rows IS
5614      SELECT
5615        SOURCE_SYSTEM_ID,
5616        SOURCE_SYSTEM_REFERENCE,
5617        SOURCE_SYSTEM_REFERENCE_DESC,
5618        INVENTORY_ITEM_ID,
5619        ITEM_NUMBER,
5620        ORGANIZATION_ID,
5621        TRANSACTION_ID,
5622        TRANSACTION_TYPE,
5623        ROWID AS ROW_ID
5624      FROM MTL_SYSTEM_ITEMS_INTERFACE msi
5625      WHERE msi.PROCESS_FLAG IN (0, 11)
5626        AND msi.SET_PROCESS_ID = p_data_set_id
5627        AND msi.SOURCE_SYSTEM_ID IS NOT NULL
5628        AND msi.SOURCE_SYSTEM_REFERENCE IS NOT NULL
5629        AND msi.CONFIRM_STATUS IN ('CM', 'CC')
5630        AND NOT EXISTS (SELECT NULL
5631                        FROM MTL_CROSS_REFERENCES_B mcr
5632                        WHERE mcr.SOURCE_SYSTEM_ID = msi.SOURCE_SYSTEM_ID
5633                          AND mcr.CROSS_REFERENCE_TYPE = 'SS_ITEM_XREF'
5634                          AND mcr.CROSS_REFERENCE = msi.SOURCE_SYSTEM_REFERENCE
5635                          AND mcr.INVENTORY_ITEM_ID = msi.INVENTORY_ITEM_ID
5636                          AND (mcr.END_DATE_ACTIVE IS NULL OR mcr.END_DATE_ACTIVE > SYSDATE));
5637 
5638    -- Bug: 4752861
5639    CURSOR c_unprcd_intf_existing_rows IS
5640      SELECT
5641        msi.SOURCE_SYSTEM_ID,
5642        msi.SOURCE_SYSTEM_REFERENCE,
5643        msi.SOURCE_SYSTEM_REFERENCE_DESC,
5644        msi.INVENTORY_ITEM_ID,
5645        msi.ITEM_NUMBER,
5646        msi.ORGANIZATION_ID,
5647        msi.TRANSACTION_ID,
5648        msi.TRANSACTION_TYPE,
5649        mcr.CROSS_REFERENCE_ID,
5650        msi.ROWID AS ROW_ID
5651      FROM MTL_SYSTEM_ITEMS_INTERFACE msi, MTL_CROSS_REFERENCES mcr
5652      WHERE msi.PROCESS_FLAG IN (0, 11)
5653        AND msi.SET_PROCESS_ID = p_data_set_id
5654        AND msi.SOURCE_SYSTEM_ID IS NOT NULL
5655        AND msi.SOURCE_SYSTEM_REFERENCE IS NOT NULL
5656        AND msi.CONFIRM_STATUS IN ('CM', 'CC')
5657        AND mcr.SOURCE_SYSTEM_ID = msi.SOURCE_SYSTEM_ID
5658        AND mcr.CROSS_REFERENCE_TYPE = 'SS_ITEM_XREF'
5659        AND mcr.CROSS_REFERENCE = msi.SOURCE_SYSTEM_REFERENCE
5660        AND mcr.INVENTORY_ITEM_ID = msi.INVENTORY_ITEM_ID
5661        AND msi.SOURCE_SYSTEM_REFERENCE_DESC IS NOT NULL
5662        AND NVL(mcr.DESCRIPTION, msi.SOURCE_SYSTEM_REFERENCE_DESC||'##') <> msi.SOURCE_SYSTEM_REFERENCE_DESC
5663        AND UPPER(msi.TRANSACTION_TYPE) <> 'CREATE'
5664        AND (mcr.END_DATE_ACTIVE IS NULL OR mcr.END_DATE_ACTIVE > SYSDATE);
5665 
5666    l_xref_event_name               CONSTANT VARCHAR2(100) := 'oracle.apps.ego.item.postXrefChange';
5667    l_ss_id                         NUMBER;
5668    l_raise_event                   BOOLEAN;
5669    l_raise_bus_event               BOOLEAN;
5670    l_user_id                       NUMBER := FND_GLOBAL.USER_ID;
5671    l_login_id                      NUMBER := FND_GLOBAL.LOGIN_ID;
5672    l_prog_appid                    NUMBER := FND_GLOBAL.PROG_APPL_ID;
5673    l_prog_id                       NUMBER := FND_GLOBAL.CONC_PROGRAM_ID;
5674    l_request_id                    NUMBER := FND_GLOBAL.CONC_REQUEST_ID;
5675    l_msg_data                      VARCHAR2(4000);
5676    l_err_text                      VARCHAR2(4000);
5677    l_return_status                 VARCHAR2(10);
5678    l_msg_text                      VARCHAR2(4000);
5679    dumm_status                     NUMBER;
5680    l_org_id                        NUMBER;
5681 
5682    l_import_xref_only              EGO_IMPORT_OPTION_SETS.IMPORT_XREF_ONLY%TYPE;
5683    l_inventory_item_id             MTL_SYSTEM_ITEMS_INTERFACE.INVENTORY_ITEM_ID%TYPE;
5684    l_transaction_id                MTL_SYSTEM_ITEMS_INTERFACE.TRANSACTION_ID%TYPE;
5685  BEGIN
5686    Debug_Conc_Log('Starting Process_SSXref_Intf_Rows for batch_id='||TO_CHAR(p_data_set_id));
5687    BEGIN
5688      SELECT b.SOURCE_SYSTEM_ID, NVL(opt.IMPORT_XREF_ONLY, 'N')
5689      INTO l_ss_id, l_import_xref_only
5690      FROM EGO_IMPORT_BATCHES_B b, EGO_IMPORT_OPTION_SETS opt
5691      WHERE b.BATCH_ID = p_data_set_id
5692        AND b.BATCH_ID = opt.BATCH_ID;
5693    EXCEPTION WHEN NO_DATA_FOUND THEN
5694      l_ss_id := get_pdh_source_system_id;
5695      l_import_xref_only := 'N';
5696    END;
5697 
5698    IF l_ss_id = get_pdh_source_system_id THEN
5699      Debug_Conc_Log('Batch is a PDH batch, so returning');
5700      RETCODE := '0';
5701      ERRBUF := NULL;
5702      RETURN;
5703    END IF;
5704 
5705    l_raise_bus_event := FALSE;
5706    IF l_import_xref_only = 'Y' THEN
5707      Debug_Conc_Log('Import Only Cross References is TRUE');
5708      Debug_Conc_Log('Updating the Source System Description');
5709      FOR i IN c_unprcd_intf_existing_rows LOOP
5710        Debug_Conc_Log('Processing for SS_ID, SS_REF='||TO_CHAR(i.SOURCE_SYSTEM_ID)||', '||i.SOURCE_SYSTEM_REFERENCE);
5711        l_inventory_item_id := i.INVENTORY_ITEM_ID;
5712 
5713        IF l_inventory_item_id IS NOT NULL THEN
5714          UPDATE MTL_CROSS_REFERENCES_TL
5715          SET    DESCRIPTION       = i.SOURCE_SYSTEM_REFERENCE_DESC,
5716                 LAST_UPDATE_DATE  = SYSDATE,
5717                 LAST_UPDATED_BY   = FND_GLOBAL.USER_ID,
5718                 LAST_UPDATE_LOGIN = FND_GLOBAL.LOGIN_ID,
5719                 SOURCE_LANG       = USERENV('LANG')
5720          WHERE CROSS_REFERENCE_ID = i.CROSS_REFERENCE_ID
5721            AND USERENV('LANG') IN (LANGUAGE, SOURCE_LANG);
5722 
5723          l_raise_bus_event := TRUE;
5724          l_transaction_id := i.TRANSACTION_ID;
5725          l_org_id := i.ORGANIZATION_ID;
5726 
5727          -- Bug: 5262421
5728          -- Updating item, user-defined attrs, gdsn attrs, AMLs to successful process status
5729          -- so that they appear correctly in the Imported tab
5730          UPDATE MTL_SYSTEM_ITEMS_INTERFACE
5731          SET PROCESS_FLAG = 7,
5732              TRANSACTION_TYPE = 'UPDATE',
5733              PROGRAM_APPLICATION_ID = l_prog_appid,
5734              PROGRAM_ID = l_prog_id,
5735              REQUEST_ID = l_request_id,
5736              PROGRAM_UPDATE_DATE = SYSDATE
5737          WHERE ROWID = i.ROW_ID;
5738 
5739          UPDATE EGO_ITM_USR_ATTR_INTRFC
5740          SET PROCESS_STATUS = 4,
5741              PROGRAM_APPLICATION_ID = l_prog_appid,
5742              PROGRAM_ID = l_prog_id,
5743              REQUEST_ID = l_request_id,
5744              PROGRAM_UPDATE_DATE = SYSDATE
5745          WHERE DATA_SET_ID = p_data_set_id
5746            AND PROCESS_STATUS = 0
5747            AND SOURCE_SYSTEM_ID = i.SOURCE_SYSTEM_ID
5748            AND SOURCE_SYSTEM_REFERENCE = i.SOURCE_SYSTEM_REFERENCE;
5749 
5750          UPDATE EGO_AML_INTF
5751          SET PROCESS_FLAG = 7,
5752              PROGRAM_APPLICATION_ID = l_prog_appid,
5753              PROGRAM_ID = l_prog_id,
5754              REQUEST_ID = l_request_id,
5755              PROGRAM_UPDATE_DATE = SYSDATE
5756          WHERE DATA_SET_ID = p_data_set_id
5757            AND PROCESS_FLAG = 0
5758            AND SOURCE_SYSTEM_ID = i.SOURCE_SYSTEM_ID
5759            AND SOURCE_SYSTEM_REFERENCE = i.SOURCE_SYSTEM_REFERENCE;
5760        ELSE
5761          Debug_Conc_Log('Inventory Item ID is NULL');
5762        END IF; --IF l_inventory_item_id IS NOT NULL THEN
5763      END LOOP; --FOR i IN c_unprcd_intf_existing_rows LOOP
5764      Debug_Conc_Log('Done Updating the Source System Description');
5765 
5766      Debug_Conc_Log('Processing Source System Cross references that does not exist in PDH');
5767      FOR i IN c_unprcd_intf_rows LOOP
5768        Debug_Conc_Log('Processing for SS_ID, SS_REF='||TO_CHAR(i.SOURCE_SYSTEM_ID)||', '||i.SOURCE_SYSTEM_REFERENCE);
5769        IF i.INVENTORY_ITEM_ID IS NULL THEN
5770          BEGIN
5771            SELECT INVENTORY_ITEM_ID INTO l_inventory_item_id
5772            FROM MTL_SYSTEM_ITEMS_B_KFV
5773            WHERE CONCATENATED_SEGMENTS = i.ITEM_NUMBER
5774              AND ORGANIZATION_ID = i.ORGANIZATION_ID;
5775          EXCEPTION WHEN NO_DATA_FOUND THEN
5776            Debug_Conc_Log('Inventory Item Id is NULL and no Matching Item found for Item Number-'||i.ITEM_NUMBER);
5777            l_inventory_item_id := NULL;
5778          END;
5779        ELSE
5780          l_inventory_item_id := i.INVENTORY_ITEM_ID;
5781        END IF; --IF i.INVENTORY_ITEM_ID IS NULL THEN
5782 
5783        IF l_inventory_item_id IS NOT NULL THEN
5784          l_raise_event := Process_SSXref_Pvt(
5785                                 p_source_system_id               => i.SOURCE_SYSTEM_ID,
5786                                 p_source_system_reference        => i.SOURCE_SYSTEM_REFERENCE,
5787                                 p_source_system_reference_desc   => i.SOURCE_SYSTEM_REFERENCE_DESC,
5788                                 p_inventory_item_id              => l_inventory_item_id);
5789          IF l_raise_event THEN
5790            l_raise_bus_event := TRUE;
5791            -- Bug: 5262421
5792            -- Updating item, user-defined attrs, gdsn attrs, AMLs to successful process status
5793            -- so that they appear correctly in the Imported tab
5794            UPDATE MTL_SYSTEM_ITEMS_INTERFACE
5795            SET PROCESS_FLAG = 7,
5796                TRANSACTION_TYPE = 'UPDATE',
5797                PROGRAM_APPLICATION_ID = l_prog_appid,
5798                PROGRAM_ID = l_prog_id,
5799                REQUEST_ID = l_request_id,
5800                PROGRAM_UPDATE_DATE = SYSDATE
5801            WHERE ROWID = i.ROW_ID;
5802 
5803            UPDATE EGO_ITM_USR_ATTR_INTRFC
5804            SET PROCESS_STATUS = 4,
5805                PROGRAM_APPLICATION_ID = l_prog_appid,
5806                PROGRAM_ID = l_prog_id,
5807                REQUEST_ID = l_request_id,
5808                PROGRAM_UPDATE_DATE = SYSDATE
5809            WHERE DATA_SET_ID = p_data_set_id
5810              AND PROCESS_STATUS = 0
5811              AND SOURCE_SYSTEM_ID = i.SOURCE_SYSTEM_ID
5812              AND SOURCE_SYSTEM_REFERENCE = i.SOURCE_SYSTEM_REFERENCE;
5813 
5814            UPDATE EGO_AML_INTF
5815            SET PROCESS_FLAG = 7,
5816                PROGRAM_APPLICATION_ID = l_prog_appid,
5817                PROGRAM_ID = l_prog_id,
5818                REQUEST_ID = l_request_id,
5819                PROGRAM_UPDATE_DATE = SYSDATE
5820            WHERE DATA_SET_ID = p_data_set_id
5821              AND PROCESS_FLAG = 0
5822              AND SOURCE_SYSTEM_ID = i.SOURCE_SYSTEM_ID
5823              AND SOURCE_SYSTEM_REFERENCE = i.SOURCE_SYSTEM_REFERENCE;
5824          END IF; --IF l_raise_event THEN
5825          l_transaction_id := i.TRANSACTION_ID;
5826          l_org_id := i.ORGANIZATION_ID;
5827        ELSE
5828          Debug_Conc_Log('Inventory Item ID is NULL, so not calling Process_SSXref_Pvt');
5829        END IF; --IF l_inventory_item_id IS NOT NULL THEN
5830      END LOOP;
5831    ELSE --IF l_import_xref_only = 'Y' THEN
5832      Debug_Conc_Log('Import Only Cross References is FALSE');
5833      Debug_Conc_Log('Updating the Source System Description');
5834      FOR i IN c_intf_existing_rows LOOP
5835        Debug_Conc_Log('Processing for SS_ID, SS_REF='||TO_CHAR(i.SOURCE_SYSTEM_ID)||', '||i.SOURCE_SYSTEM_REFERENCE);
5836        l_inventory_item_id := i.INVENTORY_ITEM_ID;
5837 
5838        IF l_inventory_item_id IS NOT NULL THEN
5839          UPDATE MTL_CROSS_REFERENCES_TL
5840          SET    DESCRIPTION       = i.SOURCE_SYSTEM_REFERENCE_DESC,
5841                 LAST_UPDATE_DATE  = SYSDATE,
5842                 LAST_UPDATED_BY   = FND_GLOBAL.USER_ID,
5843                 LAST_UPDATE_LOGIN = FND_GLOBAL.LOGIN_ID,
5844                 SOURCE_LANG       = USERENV('LANG')
5845          WHERE CROSS_REFERENCE_ID = i.CROSS_REFERENCE_ID
5846            AND USERENV('LANG') IN (LANGUAGE, SOURCE_LANG);
5847 
5848          l_raise_bus_event := TRUE;
5849          l_transaction_id := i.TRANSACTION_ID;
5850          l_org_id := i.ORGANIZATION_ID;
5851        ELSE
5852          Debug_Conc_Log('Inventory Item ID is NULL');
5853        END IF; --IF l_inventory_item_id IS NOT NULL THEN
5854      END LOOP; --FOR i IN c_intf_existing_rows LOOP
5855      Debug_Conc_Log('Done Updating the Source System Description');
5856 
5857      Debug_Conc_Log('Processing Source System Cross references that does not exist in PDH');
5858      FOR i IN c_intf_rows LOOP
5859        Debug_Conc_Log('Processing for SS_ID, SS_REF='||TO_CHAR(i.SOURCE_SYSTEM_ID)||', '||i.SOURCE_SYSTEM_REFERENCE);
5860        l_raise_event := Process_SSXref_Pvt(
5861                               p_source_system_id                 => i.SOURCE_SYSTEM_ID,
5862                               p_source_system_reference      => i.SOURCE_SYSTEM_REFERENCE,
5863                               p_source_system_reference_desc => i.SOURCE_SYSTEM_REFERENCE_DESC,
5864                               p_inventory_item_id                => i.INVENTORY_ITEM_ID);
5865        IF l_raise_event THEN
5866          l_raise_bus_event := TRUE;
5867        END IF; --IF l_raise_event THEN
5868        l_transaction_id := i.TRANSACTION_ID;
5869        l_org_id := i.ORGANIZATION_ID;
5870      END LOOP;
5871    END IF; --IF l_import_xref_only = 'Y' THEN
5872 
5873    IF l_raise_bus_event THEN
5874      Debug_Conc_Log('Raising business event');
5875      EGO_WF_WRAPPER_PVT.Raise_Item_Event(
5876        p_event_name    => l_xref_event_name,
5877        p_request_id    => l_request_id,
5878        x_msg_data      => l_msg_data,
5879        x_return_status => l_return_status);
5880 
5881      Debug_Conc_Log('Done Raising business event with status - '||l_return_status);
5882      Debug_Conc_Log('Done Raising business event with message - '||SUBSTR(l_msg_data, 3950));
5883      IF l_return_status <> 'S' THEN
5884        l_msg_text := SUBSTR('Error in raising business event for Source System Item Cross References - '||l_msg_data, 4000);
5885        dumm_status  := INVPUOPI.mtl_log_interface_err(
5886                                   l_org_id
5887                                  ,l_user_id
5888                                  ,l_login_id
5889                                  ,l_prog_appid
5890                                  ,l_prog_id
5891                                  ,l_request_id
5892                                  ,l_transaction_id
5893                                  ,l_msg_text
5894                                  ,'SOURCE_SYSTEM_REFERENCE'
5895                                  ,'MTL_SYSTEM_ITEMS_INTERFACE'
5896                                  ,'INV_IOI_ERR'
5897                                  ,l_err_text);
5898      END IF; --IF l_return_status <> 'S' THEN
5899    END IF; --IF l_raise_event THEN
5900 
5901    --COMMIT;
5902    RETCODE := '0';
5903    ERRBUF := NULL;
5904    Debug_Conc_Log('Done Process_SSXref_Intf_Rows with success');
5905  EXCEPTION WHEN OTHERS THEN
5906    RETCODE := '2';
5907    ERRBUF := 'Error in method EGO_IMPORT_PVT.Process_SSXref_Intf_Rows - '||SQLERRM;
5908    Debug_Conc_Log('Done Process_SSXref_Intf_Rows with error - '||SQLERRM);
5909  END Process_SSXref_Intf_Rows;
5910 
5911     /*
5912      * This method sets the confirm_status for an unprocessed row (process_flag = 0) in the master org
5913      * for a source system item identified by p_source_system_id and p_source_system_reference.
5914      * p_status can have the following values:
5915      * G_CONF_XREF  -- expecting p_inventory_item_id to be passed
5916      * G_CONF_MATCH -- expecting p_inventory_item_id to be passed
5917      * G_CONF_NEW   -- expecting no p_inventory_item_id to be passed
5918      * G_UNCONF_NONE_MATCH -- expecting no p_inventory_item_id to be passed
5919      * G_UNCONF_SIGL_MATCH -- expecting p_inventory_item_id to be passed
5920      * G_UNCONF_MULT_MATCH -- p_inventory_item_id is optional
5921      */
5922     PROCEDURE Set_Confirm_Status(p_data_set_id IN  NUMBER,
5923                                  p_source_system_id IN VARCHAR2,
5924                                  p_source_system_reference IN VARCHAR2,
5925                                  p_status IN VARCHAR2,
5926                                  p_inventory_item_id IN NUMBER DEFAULT NULL,
5927                                  p_organization_id IN NUMBER DEFAULT NULL)
5928     IS
5929       l_org_id    MTL_PARAMETERS.ORGANIZATION_ID%TYPE;
5930       l_org_code  MTL_PARAMETERS.ORGANIZATION_CODE%TYPE;
5931       unexpected_parameters EXCEPTION;
5932     BEGIN
5933         -- Check that the parameters satisfy the assumptions: if they don't, raise error
5934 
5935         -- Status should be one of the constants
5936         IF p_status NOT IN ( G_CONF_XREF, G_CONF_MATCH, G_CONF_NEW
5937                            , G_UNCONF_NONE_MATCH, G_UNCONF_SIGL_MATCH, G_UNCONF_MULT_MATCH )
5938         THEN
5939             RAISE unexpected_parameters;
5940         END IF;
5941 
5942         -- Item id must be passed for cross-referenced, confirmed matches, and unconfirmed single matches
5943         IF p_inventory_item_id IS NULL AND p_status IN ( G_CONF_XREF, G_CONF_MATCH, G_UNCONF_SIGL_MATCH )
5944         THEN
5945             RAISE unexpected_parameters;
5946         END IF;
5947 
5948         -- Item id cannot be passed for confirmed new items, and no-match items
5949         IF p_inventory_item_id IS NOT NULL AND p_status IN ( G_CONF_NEW, G_UNCONF_NONE_MATCH )
5950         THEN
5951             RAISE unexpected_parameters;
5952         END IF;
5953 
5954         SELECT
5955          MP.ORGANIZATION_ID,
5956          MP.ORGANIZATION_CODE
5957         INTO l_org_id, l_org_code
5958         FROM MTL_PARAMETERS MP,
5959          EGO_IMPORT_BATCHES_B BA
5960         WHERE BA.ORGANIZATION_ID = MP.ORGANIZATION_ID AND
5961          BA.BATCH_ID = p_data_set_id;
5962 
5963         -- Set the confirm status and item number based on the parameters
5964         -- Rows that already have a "fake" confirm_status are kept "fake"
5965         UPDATE MTL_SYSTEM_ITEMS_INTERFACE
5966         SET PROCESS_FLAG = 0,
5967          ORGANIZATION_ID = l_org_id,
5968          ORGANIZATION_CODE = l_org_code,
5969          INVENTORY_ITEM_ID = p_inventory_item_id,
5970          ITEM_NUMBER = ( SELECT CONCATENATED_SEGMENTS
5971                          FROM MTL_SYSTEM_ITEMS_KFV
5972                          WHERE INVENTORY_ITEM_ID = p_inventory_item_id AND ORGANIZATION_ID = p_organization_id
5973                        ),
5974          CONFIRM_STATUS =
5975             CASE
5976             WHEN CONFIRM_STATUS IN ( G_CONF_XREF_FAKE, G_CONF_MATCH_FAKE, G_FAKE_CONF_STATUS_FLAG
5977                                    , G_UNCONF_NO_MATCH_FAKE, G_UNCONF_MULTI_MATCH_FAKE, G_UNCONF_SINGLE_MATCH_FAKE )
5978             THEN (  CASE p_status
5979                     WHEN G_CONF_XREF            THEN G_CONF_XREF_FAKE
5980                     WHEN G_CONF_MATCH           THEN G_CONF_MATCH_FAKE
5981                     WHEN G_UNCONF_SIGL_MATCH    THEN G_UNCONF_SINGLE_MATCH_FAKE
5982                     WHEN G_UNCONF_MULT_MATCH    THEN G_UNCONF_MULTI_MATCH_FAKE
5983                     WHEN G_UNCONF_NONE_MATCH    THEN G_UNCONF_NO_MATCH_FAKE
5984                     ELSE p_status
5985                     END
5986                  )
5987             ELSE p_status
5988             END
5989         WHERE
5990          SET_PROCESS_ID = p_data_set_id AND
5991          SOURCE_SYSTEM_ID = p_source_system_id AND
5992          SOURCE_SYSTEM_REFERENCE = p_source_system_reference AND
5993          (PROCESS_FLAG = 0 OR PROCESS_FLAG IS NULL) AND
5994          (   (ORGANIZATION_ID IS NULL AND ORGANIZATION_CODE IS NULL) OR
5995               ORGANIZATION_ID = l_org_id OR
5996              (ORGANIZATION_ID IS NULL AND ORGANIZATION_CODE = l_org_code)
5997          );
5998     END Set_Confirm_Status;
5999 
6000     /*
6001      * this function checks if the user has to provide revision information
6002      * based on the data and revision import policy
6003      */
6004     FUNCTION IS_NEW_REVISION_INFO_NEEDED
6005     (
6006        p_batch_id                        IN  EGO_ITM_USR_ATTR_INTRFC.DATA_SET_ID%TYPE
6007      , p_source_system_id                IN  EGO_ITM_USR_ATTR_INTRFC.SOURCE_SYSTEM_ID%TYPE
6008      , p_source_system_reference         IN  EGO_ITM_USR_ATTR_INTRFC.SOURCE_SYSTEM_REFERENCE%TYPE
6009      , p_organization_id                 IN  EGO_ITM_USR_ATTR_INTRFC.ORGANIZATION_ID%TYPE
6010      , p_organization_code               IN  EGO_ITM_USR_ATTR_INTRFC.ORGANIZATION_CODE%TYPE
6011      , p_instance_rev_policy             IN  EGO_IMPORT_OPTION_SETS.REVISION_IMPORT_POLICY%TYPE
6012     )
6013     RETURN BOOLEAN IS
6014         l_temp VARCHAR2(1);
6015     BEGIN
6016         IF p_instance_rev_policy IN ('S', 'L')  THEN
6017           RETURN false;
6018         END IF;
6019 
6020         SELECT 'x' INTO l_temp
6021         FROM MTL_ITEM_REVISIONS_INTERFACE MIRI
6022         WHERE SET_PROCESS_ID = p_batch_id AND
6023               PROCESS_FLAG = 0 AND
6024               SOURCE_SYSTEM_ID = p_source_system_id AND
6025               SOURCE_SYSTEM_REFERENCE = p_source_system_reference AND
6026               (ORGANIZATION_ID = p_organization_id OR ORGANIZATION_CODE = p_organization_code) AND
6027               REVISION IS NOT NULL AND
6028               Upper(REVISION) NOT IN ( SELECT B.REVISION FROM MTL_ITEM_REVISIONS_B B, MTL_SYSTEM_ITEMS_INTERFACE MSII
6029                                   WHERE MSII.SOURCE_SYSTEM_REFERENCE = MIRI.SOURCE_SYSTEM_REFERENCE
6030                                     AND MSII.SOURCE_SYSTEM_ID = MIRI.SOURCE_SYSTEM_ID
6031                                     AND (MSII.ORGANIZATION_ID = MIRI.ORGANIZATION_ID
6032                                          OR MSII.ORGANIZATION_CODE = MIRI.ORGANIZATION_CODE)
6033                                     AND MSII.SET_PROCESS_ID = MIRI.SET_PROCESS_ID
6034                                     AND MSII.PROCESS_FLAG = 0
6035                                     AND B.INVENTORY_ITEM_ID = MSII.INVENTORY_ITEM_ID
6036                               ) AND
6037               EFFECTIVITY_DATE IS NOT NULL AND
6038               UPPER(TRANSACTION_TYPE) = 'CREATE' AND
6039               ROWNUM < 2;
6040         RETURN false;
6041     EXCEPTION
6042     WHEN NO_DATA_FOUND THEN
6043       RETURN true;
6044     END IS_NEW_REVISION_INFO_NEEDED;
6045 
6046 -----------------------------------------------------------------------------------------
6047 --R12C :  This Function returns varchar2 value to specify if the batch is
6048 --        ready for Import.
6049 FUNCTION Get_Import_Ready_Status ( p_data_set_id IN NUMBER,
6050                                    p_source_system_id IN VARCHAR2,
6051                                    p_source_system_reference IN VARCHAR2,
6052                                    p_bundle_id IN NUMBER
6053                                  )
6054 RETURN VARCHAR2 IS
6055   l_is_batch_GDSN_enabled     VARCHAR2(1);
6056   l_confirm_status            VARCHAR2(50);
6057 
6058   CURSOR item_group_cr IS
6059     SELECT MSII.SOURCE_SYSTEM_ID,
6060            MSII.SOURCE_SYSTEM_REFERENCE,
6061            MSII.SET_PROCESS_ID,
6062            MSII.BUNDLE_ID
6063     FROM MTL_SYSTEM_ITEMS_INTERFACE MSII
6064     WHERE MSII.PROCESS_FLAG = 0
6065       AND MSII.SET_PROCESS_ID = p_data_set_id
6066       AND MSII.BUNDLE_ID = p_bundle_id;
6067 
6068 BEGIN
6069   -- See if the batch is GDSN Enabled
6070   SELECT NVL(ENABLED_FOR_DATA_POOL, 'N') INTO l_is_batch_GDSN_enabled
6071   FROM EGO_IMPORT_OPTION_SETS
6072   WHERE BATCH_ID = p_data_set_id;
6073 
6074   IF l_is_batch_GDSN_enabled = 'Y' AND p_bundle_id IS NOT NULL THEN
6075     FOR rec in item_group_cr LOOP
6076       l_confirm_status := Get_Confirm_Status( rec.SET_PROCESS_ID ,
6077                                               rec.SOURCE_SYSTEM_ID ,
6078                                               rec.SOURCE_SYSTEM_REFERENCE,
6079                                               rec.bundle_id
6080                                             );
6081       IF l_confirm_status NOT IN ( 'CNR', 'CCR', 'CMR', 'CFCR', 'CFMR' ) THEN
6082         RETURN 'NotImportReady';
6083       END IF;
6084     END LOOP;
6085     RETURN 'ImportReady';
6086   ELSE
6087     l_confirm_status := Get_Confirm_Status( p_data_set_id ,
6088                                             p_source_system_id ,
6089                                             p_source_system_reference,
6090                                             p_bundle_id
6091                                           );
6092     IF l_confirm_status IN ( 'CNR', 'CCR', 'CMR', 'CFCR', 'CFMR' ) THEN
6093       RETURN 'ImportReady';
6094     ELSE
6095       RETURN 'NotImportReady';
6096     END IF;
6097   END IF;
6098 END Get_Import_Ready_Status;
6099 -----------------------------------------------------------------------------------------
6100 
6101  /*
6102   * This method gets the confirm status plus the extra letter to indicate
6103   * whether an item is ready to be passed on to IOI
6104   */
6105  FUNCTION Get_Confirm_Status( p_data_set_id IN NUMBER,
6106                               p_source_system_id IN VARCHAR2,
6107                               p_source_system_reference IN VARCHAR2,
6108                               p_bundle_id IN NUMBER
6109                             )
6110  RETURN VARCHAR2 IS
6111    l_pdh_item_number            MTL_SYSTEM_ITEMS_INTERFACE.ITEM_NUMBER%TYPE;
6112    l_pdh_description            MTL_SYSTEM_ITEMS_INTERFACE.DESCRIPTION%TYPE;
6113    l_pdh_item_catalog_group_id  MTL_SYSTEM_ITEMS_INTERFACE.ITEM_CATALOG_GROUP_ID%TYPE;
6114    l_confirm_status             MTL_SYSTEM_ITEMS_INTERFACE.CONFIRM_STATUS%TYPE;
6115    l_item_num_gen               MTL_ITEM_CATALOG_GROUPS_B.ITEM_NUM_GEN_METHOD%TYPE;
6116    l_item_desc_gen              MTL_ITEM_CATALOG_GROUPS_B.ITEM_DESC_GEN_METHOD%TYPE;
6117    l_organization_id            MTL_PARAMETERS.ORGANIZATION_ID%TYPE;
6118    l_organization_code          MTL_PARAMETERS.ORGANIZATION_CODE%TYPE;
6119    l_batch_rev_policy           EGO_IMPORT_OPTION_SETS.REVISION_IMPORT_POLICY%TYPE;
6120    l_instance_rev_policy        MTL_SYSTEM_ITEMS_INTERFACE.REVISION_IMPORT_POLICY%TYPE;
6121    l_style_item_flag            MTL_SYSTEM_ITEMS_INTERFACE.STYLE_ITEM_FLAG%TYPE;
6122  BEGIN
6123     SELECT
6124        MP.ORGANIZATION_ID,
6125        MP.ORGANIZATION_CODE,
6126        NVL(OPT.REVISION_IMPORT_POLICY, 'L')
6127     INTO l_organization_id, l_organization_code, l_batch_rev_policy
6128     FROM MTL_PARAMETERS MP,
6129        EGO_IMPORT_BATCHES_B ba,
6130        EGO_IMPORT_OPTION_SETS OPT
6131     WHERE BA.ORGANIZATION_ID = MP.ORGANIZATION_ID AND
6132        BA.BATCH_ID = OPT.BATCH_ID AND
6133        BA.BATCH_ID = p_data_set_id;
6134 
6135     SELECT ITEM_NUMBER,
6136            NVL(DESCRIPTION,
6137             ( SELECT  ATTRIBUTE_VALUE
6138               FROM MTL_ITEM_TEMPLATES_VL TEMP, MTL_ITEM_TEMPL_ATTRIBUTES ATTR
6139               WHERE (    (MSII.TEMPLATE_ID IS NOT NULL AND TEMP.TEMPLATE_ID = MSII.TEMPLATE_ID)
6140                       OR (MSII.TEMPLATE_ID IS NULL AND TEMP.TEMPLATE_NAME = MSII.TEMPLATE_NAME)
6141                     ) AND
6142                     (TEMP.CONTEXT_ORGANIZATION_ID = MSII.ORGANIZATION_ID OR TEMP.CONTEXT_ORGANIZATION_ID IS NULL) AND
6143                     TEMP.TEMPLATE_ID = ATTR.TEMPLATE_ID AND
6144                     ATTR.ENABLED_FLAG = 'Y' AND
6145                     ATTR.ATTRIBUTE_NAME LIKE 'MTL_SYSTEM_ITEMS.DESCRIPTION')),
6146            NVL(ITEM_CATALOG_GROUP_ID,
6147             ( SELECT MICG.ITEM_CATALOG_GROUP_ID
6148               FROM MTL_ITEM_CATALOG_GROUPS_B_KFV MICG
6149               WHERE MICG.CONCATENATED_SEGMENTS = MSII.ITEM_CATALOG_GROUP_NAME)),
6150            CONFIRM_STATUS,
6151            NVL(REVISION_IMPORT_POLICY, l_batch_rev_policy),
6152            MSII.STYLE_ITEM_FLAG
6153     INTO l_pdh_item_number, l_pdh_description, l_pdh_item_catalog_group_id, l_confirm_status, l_instance_rev_policy, l_style_item_flag
6154     FROM MTL_SYSTEM_ITEMS_INTERFACE MSII, EGO_IMPORT_BATCHES_B BATCH
6155     WHERE MSII.SET_PROCESS_ID = p_data_set_id AND
6156         MSII.SOURCE_SYSTEM_ID = p_source_system_id AND
6157         MSII.SOURCE_SYSTEM_REFERENCE = p_source_system_reference AND
6158         MSII.ORGANIZATION_ID = BATCH.ORGANIZATION_ID AND
6159         BATCH.BATCH_ID = p_data_set_id AND
6160         PROCESS_FLAG = 0 AND
6161         ( ( p_bundle_id IS NULL AND MSII.BUNDLE_ID IS NULL )                  --R12C:
6162           OR MSII.BUNDLE_ID = p_bundle_id
6163         ) AND
6164         ROWNUM = 1;
6165         -- eletuchy: note that this rownum = 1 introduced indeterminacy ...
6166 
6167     -- if confirm status is one of UN, US, UM (unconfirmed no match, unconfirmed single match, unconfirmed multiple matches) or null
6168     -- simply return it
6169     IF  l_confirm_status IN ( G_UNCONF_NONE_MATCH, G_UNCONF_SIGL_MATCH, G_UNCONF_MULT_MATCH
6170                             , G_UNCONF_NO_MATCH_FAKE, G_UNCONF_SINGLE_MATCH_FAKE, G_UNCONF_MULTI_MATCH_FAKE )
6171         OR l_confirm_status IS NULL
6172     THEN
6173         RETURN l_confirm_status;
6174 
6175     -- if confirm status is CN (confirmed new), we need to see if all required information for item creation is provided
6176     ELSIF l_confirm_status = G_CONF_NEW THEN
6177        -- if item catalog group id is specified, we look at the item number generation method, if any
6178        -- says U (user entered) and is not there, it is not ready
6179        Get_Item_Num_Desc_Gen_Method(l_pdh_item_catalog_group_id, l_item_num_gen, l_item_desc_gen);
6180        IF ( ( l_item_desc_gen <> 'F' AND l_pdh_description IS NULL ) OR
6181             ( l_item_desc_gen = 'F' AND l_pdh_description IS NULL AND NVL(l_style_item_flag, 'N') = 'Y' )
6182           ) THEN
6183          RETURN G_CONF_NEW_NOT_READY;
6184        END IF;
6185 
6186        -- if no item catalog group id is specified, these columns are required
6187        IF l_pdh_item_catalog_group_id IS NULL THEN
6188          IF l_pdh_item_number IS null THEN
6189            RETURN G_CONF_NEW_NOT_READY;
6190          ELSE
6191            RETURN G_CONF_NEW_READY;
6192          END IF;
6193        END IF;
6194 
6195        IF ( ( l_item_num_gen NOT IN ('S', 'F') AND l_pdh_item_number IS NULL ) OR
6196             ( l_item_num_gen IN ('S', 'F') AND l_pdh_item_number IS NULL AND NVL(l_style_item_flag, 'N') = 'Y' )
6197           ) THEN
6198          RETURN G_CONF_NEW_NOT_READY;
6199        ELSE
6200          RETURN G_CONF_NEW_READY;
6201        END IF;
6202     -- if confirm status is CM (confirmed match) or  CC (confirmed cross reference),
6203     -- we need to see if rev level attributes are loaded and check import policy
6204     ELSIF l_confirm_status in ( G_CONF_MATCH, G_CONF_XREF, G_CONF_MATCH_FAKE, G_CONF_XREF_FAKE )  THEN
6205        RETURN l_confirm_status
6206            || CASE WHEN IS_NEW_REVISION_INFO_NEEDED( p_data_set_id
6207                                                    , p_source_system_id
6208                                                    , p_source_system_reference
6209                                                    , l_organization_id
6210                                                    , l_organization_code
6211                                                    , l_instance_rev_policy ) THEN 'N'
6212                    ELSE 'R'
6213                    END;
6214     ELSE
6215        RETURN 'UNKNOWN';
6216     END IF;
6217 
6218  EXCEPTION
6219     WHEN NO_DATA_FOUND THEN -- no batch header info, or no matching msii rows
6220         RETURN 'UNKNOWN';
6221  END Get_Confirm_Status;
6222 
6223  PROCEDURE Get_Item_Num_Desc_Gen_Method(p_item_catalog_group_id IN NUMBER,
6224                                         x_item_num_gen_method OUT NOCOPY VARCHAR2,
6225                                         x_item_desc_gen_method OUT NOCOPY VARCHAR2) IS
6226     l_num_gen_resolved VARCHAR2(1) := 'N';
6227     l_desc_gen_resolved VARCHAR2(1) := 'N';
6228     l_item_num_gen_method MTL_ITEM_CATALOG_GROUPS_B.ITEM_NUM_GEN_METHOD%TYPE;
6229     l_item_desc_gen_method MTL_ITEM_CATALOG_GROUPS_B.ITEM_DESC_GEN_METHOD%TYPE;
6230 
6231     CURSOR c_gen_method IS
6232       SELECT
6233        DECODE(ICC.ITEM_NUM_GEN_METHOD,
6234               NULL, DECODE(ICC.PARENT_CATALOG_GROUP_ID, NULL, 'U', 'I'),
6235               ICC.ITEM_NUM_GEN_METHOD),
6236        DECODE(ICC.ITEM_DESC_GEN_METHOD,
6237               NULL, DECODE(ICC.PARENT_CATALOG_GROUP_ID, NULL, 'U', 'I'),
6238               ICC.ITEM_DESC_GEN_METHOD)
6239       FROM MTL_ITEM_CATALOG_GROUPS_B ICC
6240       CONNECT BY PRIOR ICC.PARENT_CATALOG_GROUP_ID = ICC.ITEM_CATALOG_GROUP_ID
6241          START WITH ICC.ITEM_CATALOG_GROUP_ID = p_item_catalog_group_id;
6242  BEGIN
6243     OPEN c_gen_method;
6244     LOOP
6245        FETCH c_gen_method INTO l_item_num_gen_method, l_item_desc_gen_method;
6246        -- exit loop if no more row exists or we have resolved both item number and description generation methods
6247        EXIT WHEN (l_num_gen_resolved = 'Y' AND l_desc_gen_resolved = 'Y') OR c_gen_method%NOTFOUND;
6248        -- if generation method hasn't been resolved yet
6249        IF l_num_gen_resolved = 'N' AND l_item_num_gen_method IN ('U', 'S', 'F') THEN
6250           l_num_gen_resolved := 'Y';
6251           x_item_num_gen_method := l_item_num_gen_method;
6252        END IF;
6253 
6254        IF l_desc_gen_resolved = 'N' AND l_item_desc_gen_method IN ('U', 'F') THEN
6255           l_desc_gen_resolved := 'Y';
6256           x_item_desc_gen_method := l_item_desc_gen_method;
6257        END IF;
6258 
6259 
6260     END LOOP;
6261 
6262     CLOSE c_gen_method;
6263  END Get_Item_Num_Desc_Gen_Method;
6264 
6265 
6266    /*
6267     * parse item segments into item number if item_number is null
6268     */
6269    PROCEDURE PARSE_ITEM_SEGMENTS   (  p_set_id            IN NUMBER
6270                                    ,  p_master_org_id     IN NUMBER
6271                                    ,  p_is_pdh_batch      IN FLAG DEFAULT FND_API.G_FALSE
6272                                    )
6273    IS
6274        CURSOR c_ss_items_table IS
6275          SELECT rowid rid
6276          FROM   mtl_system_items_interface
6277          WHERE  set_process_id  = p_set_id
6278            AND  process_flag    = 0
6279            AND  organization_id /*bug 6402904 parse for child items also*/
6280 	                          IN (SELECT organization_id
6281                                       FROM mtl_parameters mp
6282                                      WHERE mp.master_organization_id = p_master_org_id)
6283            AND  (  confirm_status IS NULL
6284                 OR confirm_status = G_FAKE_CONF_STATUS_FLAG
6285                 )
6286            AND  item_number IS null
6287          FOR UPDATE OF item_number;
6288 
6289        CURSOR c_pdh_items_table IS
6290          SELECT rowid rid
6291          FROM   mtl_system_items_interface
6292          WHERE  set_process_id  = p_set_id
6293            AND  process_flag    = 1
6294            AND  item_number IS null
6295          FOR UPDATE OF item_number;
6296 
6297        l_err_text       VARCHAR2(240) := NULL;
6298        l_item_number    MTL_SYSTEM_ITEMS_INTERFACE.ITEM_NUMBER%TYPE := NULL;
6299        l_item_id        MTL_SYSTEM_ITEMS_B.INVENTORY_ITEM_ID%TYPE := NULL;
6300        l_ret_code       INTEGER;
6301     BEGIN
6302         IF p_is_pdh_batch = FND_API.G_TRUE THEN
6303             FOR item_record IN c_pdh_items_table LOOP
6304                 l_ret_code := INVPUOPI.MTL_PR_PARSE_ITEM_SEGMENTS ( p_row_id     =>item_record.rid
6305                                                                   , item_number  =>l_item_number
6306                                                                   , item_id      =>l_item_id
6307                                                                   , ERR_TEXT     =>l_err_text
6308                                                                   );
6309             END LOOP;
6310         ELSE
6311             FOR item_record IN c_ss_items_table LOOP
6312                 l_ret_code := INVPUOPI.MTL_PR_PARSE_ITEM_SEGMENTS ( p_row_id     =>item_record.rid
6313                                                                   , item_number  =>l_item_number
6314                                                                   , item_id      =>l_item_id
6315                                                                   , ERR_TEXT     =>l_err_text
6316                                                                   );
6317             END LOOP;
6318         END IF;
6319     END PARSE_ITEM_SEGMENTS;
6320 
6321     /**
6322      * resolve the SYNC transaction_type into 'CREATE' or 'UPDATE'
6323      * using the same logic as INVPOPIB.pls for a PDH batch
6324      */
6325     PROCEDURE UPDATE_ITEM_SYNC_RECORDS_PDH
6326     (p_set_id  IN  NUMBER,
6327      p_org_id IN NUMBER
6328     ) IS
6329       CURSOR c_items_table IS
6330         SELECT  rowid
6331               , organization_id
6332               , inventory_item_id
6333               , item_number
6334               , transaction_id
6335               , transaction_type
6336         FROM   mtl_system_items_interface
6337         WHERE  set_process_id   = p_set_id
6338            AND organization_id = p_org_id
6339            AND process_flag     = 1
6340            AND UPPER(transaction_type) = 'SYNC'
6341            FOR UPDATE OF transaction_type;
6342 
6343       CURSOR c_item_exists(cp_item_id NUMBER) IS
6344         SELECT  1
6345         FROM   mtl_system_items_b
6346         WHERE  inventory_item_id = cp_item_id;
6347 
6348       l_item_exist NUMBER(10) := 0;
6349       l_err_text   VARCHAR2(200);
6350       l_status     NUMBER(10):= 0;
6351       l_item_id    mtl_system_items_b.inventory_item_id%TYPE;
6352 
6353    BEGIN
6354       FOR item_record IN c_items_table LOOP
6355          l_item_exist := 0;
6356          l_item_id    := NULL;
6357 
6358          IF item_record.inventory_item_id IS NULL THEN
6359             IF item_record.item_number IS NOT NULL THEN
6360                l_status  := INVPUOPI.MTL_PR_PARSE_ITEM_NUMBER
6361                   ( ITEM_NUMBER =>item_record.item_number
6362                   , ITEM_ID     =>item_record.inventory_item_id
6363                   , TRANS_ID    =>item_record.transaction_id
6364                   , ORG_ID      =>item_record.organization_id
6365                   , ERR_TEXT    =>l_err_text
6366                   , P_ROWID     =>item_record.rowid
6367                   );
6368             END IF;
6369             l_item_exist := INVUPD1B.EXISTS_IN_MSI
6370                 ( ROW_ID      => item_record.rowid
6371                 , ORG_ID      => item_record.organization_id
6372                 , INV_ITEM_ID => l_item_id
6373                 , TRANS_ID    => item_record.transaction_id
6374                 , ERR_TEXT    => l_err_text
6375                 , XSET_ID     => p_set_id
6376                 );
6377          ELSE
6378             l_item_id := item_record.inventory_item_id;
6379             OPEN  c_item_exists(item_record.inventory_item_id);
6380             FETCH c_item_exists INTO l_item_exist;
6381             CLOSE c_item_exists;
6382             l_item_exist := NVL(l_item_exist,0);
6383          END IF;
6384 
6385          IF l_item_exist = 1 THEN
6386             UPDATE mtl_system_items_interface
6387             SET    transaction_type  = 'UPDATE'
6388             WHERE  rowid = item_record.rowid;
6389          ELSE
6390             UPDATE mtl_system_items_interface
6391             SET    transaction_type = 'CREATE', inventory_item_id = NULL
6392             WHERE  rowid = item_record.rowid;
6393          END IF;
6394       END LOOP;
6395 
6396    END UPDATE_ITEM_SYNC_RECORDS_PDH;
6397 
6398  /*
6399   * This procedure resolves source system item cross references
6400   * immediately after MTL_SYSTEM_ITEMS_INTERFACE is populated and
6401   * tries to resolve discrepencies between user entered CONFIRM_STATUS
6402   * (if any), TRANSACTION_TYPE (if any)  and other data.
6403   * This procedure needs to be safe for re-execution if data is loaded into an
6404   * active batch repeatedly.
6405   */
6406  PROCEDURE Resolve_SSXref_on_Data_load( p_data_set_id  IN  NUMBER
6407                                        ,p_commit       IN  FLAG    DEFAULT FND_API.G_TRUE
6408                                       )
6409  IS
6410    l_org_id                 MTL_PARAMETERS.ORGANIZATION_ID%TYPE;
6411    l_org_code               MTL_PARAMETERS.ORGANIZATION_CODE%TYPE;
6412    l_ss_id                  EGO_IMPORT_BATCHES_B.SOURCE_SYSTEM_id%TYPE;
6413    l_import_xref_only       EGO_IMPORT_OPTION_SETS.IMPORT_XREF_ONLY%TYPE;
6414    l_party_name             VARCHAR2(1000);
6415    l_security_predicate     VARCHAR2(4000);
6416    l_return_status          VARCHAR2(100);
6417    l_sql                    VARCHAR2(32000);
6418 
6419    l_insert_date            DATE;
6420    l_org                    VARCHAR2(100);
6421    l_enabled_for_data_pool  EGO_IMPORT_OPTION_SETS.ENABLED_FOR_DATA_POOL%TYPE;
6422  BEGIN
6423     Debug_Conc_Log( 'Resolve_SSXref_on_Data_load - Entering' );
6424 
6425     Debug_Conc_Log( 'Resolve_SSXref_on_Data_load - Gather Statistics' );
6426     Gather_Stats_For_Intf_Tables(p_data_set_id);
6427     Debug_Conc_Log( 'Resolve_SSXref_on_Data_load - Done Call for Gather Statistics' );
6428     l_party_name := Get_Current_Party_Name;
6429 
6430     -- get the organization_id, organization_code for this batch
6431     BEGIN
6432       SELECT
6433           MP.ORGANIZATION_ID,
6434           MP.ORGANIZATION_CODE,
6435           BA.SOURCE_SYSTEM_ID,
6436           NVL(OPT.IMPORT_XREF_ONLY, 'N'),
6437           NVL(ENABLED_FOR_DATA_POOL, 'N')
6438       INTO l_org_id, l_org_code, l_ss_id, l_import_xref_only, l_enabled_for_data_pool
6439       FROM MTL_PARAMETERS MP,
6440           EGO_IMPORT_BATCHES_B BA,
6441           EGO_IMPORT_OPTION_SETS OPT
6442       WHERE BA.ORGANIZATION_ID = MP.ORGANIZATION_ID
6443         AND BA.BATCH_ID = p_data_set_id
6444         AND BA.BATCH_ID = OPT.BATCH_ID;
6445     EXCEPTION WHEN NO_DATA_FOUND THEN
6446       -- IF batch not found then getting the default org_id from
6447       -- profile option for the user
6448       l_org := fnd_profile.value('EGO_USER_ORGANIZATION_CONTEXT');
6449       BEGIN
6450         SELECT mp.MASTER_ORGANIZATION_ID, mp1.ORGANIZATION_CODE
6451         INTO l_org_id, l_org_code
6452         FROM MTL_PARAMETERS mp, MTL_PARAMETERS mp1
6453         WHERE mp.ORGANIZATION_ID = TO_NUMBER(l_org)
6454           AND mp.MASTER_ORGANIZATION_ID = mp1.ORGANIZATION_ID;
6455       EXCEPTION WHEN OTHERS THEN
6456         l_org_id := NULL;
6457         l_org_code := NULL;
6458       END;
6459       l_ss_id := get_pdh_source_system_id();
6460       l_import_xref_only := 'N';
6461       l_enabled_for_data_pool := 'N';
6462     END;
6463 
6464     -- populate organization_id if it's null
6465     -- if organization_code is not null, derive from it otherwise use
6466     -- organization id for batch
6467     UPDATE MTL_SYSTEM_ITEMS_INTERFACE MSII
6468     SET ORGANIZATION_ID =
6469         CASE
6470             WHEN ORGANIZATION_CODE IS NOT NULL
6471             THEN (SELECT ORGANIZATION_ID FROM MTL_PARAMETERS WHERE ORGANIZATION_CODE =  MSII.ORGANIZATION_CODE)
6472             ELSE l_org_id
6473         END
6474     WHERE SET_PROCESS_ID = p_data_set_id AND
6475         (PROCESS_FLAG IS NULL OR PROCESS_FLAG IN (0, 1)) AND
6476         ORGANIZATION_ID IS NULL;
6477 
6478 
6479     UPDATE MTL_ITEM_REVISIONS_INTERFACE MIRI
6480     SET ORGANIZATION_ID =
6481         CASE
6482             WHEN ORGANIZATION_CODE IS NOT NULL
6483             THEN (SELECT ORGANIZATION_ID FROM MTL_PARAMETERS WHERE ORGANIZATION_CODE =  MIRI.ORGANIZATION_CODE)
6484             ELSE l_org_id
6485         END
6486     WHERE SET_PROCESS_ID = p_data_set_id AND
6487         (PROCESS_FLAG IS NULL OR PROCESS_FLAG IN (0, 1)) AND
6488         ORGANIZATION_ID IS NULL;
6489 
6490 
6491     UPDATE MTL_ITEM_CATEGORIES_INTERFACE MICI
6492     SET ORGANIZATION_ID =
6493         CASE
6494             WHEN ORGANIZATION_CODE IS NOT NULL
6495             THEN (SELECT ORGANIZATION_ID FROM MTL_PARAMETERS WHERE ORGANIZATION_CODE =  MICI.ORGANIZATION_CODE)
6496             ELSE l_org_id
6497         END
6498     WHERE SET_PROCESS_ID = p_data_set_id AND
6499         (PROCESS_FLAG IS NULL OR PROCESS_FLAG IN (0, 1)) AND
6500         ORGANIZATION_ID IS NULL;
6501 
6502     UPDATE EGO_ITM_USR_ATTR_INTRFC EIUAI
6503     SET ORGANIZATION_ID =
6504         CASE
6505             WHEN ORGANIZATION_CODE IS NOT NULL
6506             THEN (SELECT ORGANIZATION_ID FROM MTL_PARAMETERS WHERE ORGANIZATION_CODE =  EIUAI.ORGANIZATION_CODE)
6507             ELSE l_org_id
6508         END
6509     WHERE DATA_SET_ID = p_data_set_id AND
6510         (PROCESS_STATUS IS NULL OR PROCESS_STATUS IN (0, 1)) AND
6511         ORGANIZATION_ID IS NULL;
6512 
6513     UPDATE EGO_ITEM_PEOPLE_INTF EIPI
6514     SET ORGANIZATION_ID =
6515         CASE
6516             WHEN ORGANIZATION_CODE IS NOT NULL
6517             THEN (SELECT ORGANIZATION_ID FROM MTL_PARAMETERS WHERE ORGANIZATION_CODE =  EIPI.ORGANIZATION_CODE)
6518             ELSE l_org_id
6519         END
6520     WHERE DATA_SET_ID = p_data_set_id AND
6521         (PROCESS_STATUS IS NULL OR PROCESS_STATUS IN (0, 1)) AND
6522         ORGANIZATION_ID IS NULL;
6523 
6524     UPDATE EGO_AML_INTF EAI
6525     SET ORGANIZATION_ID =
6526         CASE
6527             WHEN ORGANIZATION_CODE IS NOT NULL
6528             THEN (SELECT ORGANIZATION_ID FROM MTL_PARAMETERS WHERE ORGANIZATION_CODE =  EAI.ORGANIZATION_CODE)
6529             ELSE l_org_id
6530         END
6531     WHERE DATA_SET_ID = p_data_set_id AND
6532         (PROCESS_FLAG IS NULL OR PROCESS_FLAG IN (0, 1)) AND
6533         ORGANIZATION_ID IS NULL;
6534 
6535     UPDATE EGO_ITEM_ASSOCIATIONS_INTF EIAI
6536     SET ORGANIZATION_ID =
6537         CASE
6538             WHEN ORGANIZATION_CODE IS NOT NULL
6539             THEN (SELECT ORGANIZATION_ID FROM MTL_PARAMETERS WHERE ORGANIZATION_CODE =  EIAI.ORGANIZATION_CODE)
6540             ELSE l_org_id
6541         END
6542     WHERE BATCH_ID = p_data_set_id AND
6543         (PROCESS_FLAG IS NULL OR PROCESS_FLAG IN (0, 1)) AND
6544         ORGANIZATION_ID IS NULL;
6545 
6546     Debug_Conc_Log( 'Resolve_SSXref_on_Data_load - Done populating organization_id' );
6547 
6548     Debug_Conc_Log( 'Resolve_SSXref_on_Data_load - Resolving data_level_name' );
6549 
6550     UPDATE EGO_ITEM_ASSOCIATIONS_INTF EIAI
6551     SET DATA_LEVEL_ID = (SELECT DATA_LEVEL_ID
6552                          FROM EGO_DATA_LEVEL_B EDLB
6553                          WHERE EDLB.APPLICATION_ID = 431
6554                            AND EDLB.ATTR_GROUP_TYPE = 'EGO_ITEMMGMT_GROUP'
6555                            AND EDLB.DATA_LEVEL_NAME = EIAI.DATA_LEVEL_NAME
6556                         )
6557     WHERE BATCH_ID = p_data_set_id
6558       AND (PROCESS_FLAG IS NULL OR PROCESS_FLAG IN (0, 1))
6559       AND DATA_LEVEL_ID IS NULL
6560       AND DATA_LEVEL_NAME IS NOT NULL;
6561 
6562 
6563     UPDATE EGO_ITM_USR_ATTR_INTRFC uai
6564        SET uai.DATA_LEVEL_ID = (SELECT edlb.DATA_LEVEL_ID
6565                                 FROM EGO_DATA_LEVEL_B edlb
6566                                 WHERE edlb.DATA_LEVEL_NAME = uai.DATA_LEVEL_NAME
6567                                   AND edlb.APPLICATION_ID  = 431
6568                                   AND edlb.ATTR_GROUP_TYPE = NVL(uai.ATTR_GROUP_TYPE, 'EGO_ITEMMGMT_GROUP')
6569                                )
6570     WHERE uai.DATA_SET_ID     = p_data_set_id
6571       AND (uai.PROCESS_STATUS IS NULL OR uai.PROCESS_STATUS IN (0, 1))
6572       AND uai.DATA_LEVEL_NAME IS NOT NULL
6573       AND uai.DATA_LEVEL_ID   IS NULL;
6574 
6575     UPDATE EGO_ITM_USR_ATTR_INTRFC uai
6576        SET uai.DATA_LEVEL_ID = (SELECT edlv.DATA_LEVEL_ID
6577                                 FROM EGO_DATA_LEVEL_VL edlv
6578                                 WHERE edlv.USER_DATA_LEVEL_NAME = uai.USER_DATA_LEVEL_NAME
6579                                   AND edlv.APPLICATION_ID       = 431
6580                                   AND edlv.ATTR_GROUP_TYPE      = NVL(uai.ATTR_GROUP_TYPE, 'EGO_ITEMMGMT_GROUP')
6581                                )
6582     WHERE uai.DATA_SET_ID          = p_data_set_id
6583       AND (uai.PROCESS_STATUS  IS NULL OR uai.PROCESS_STATUS IN (0, 1) )
6584       AND uai.USER_DATA_LEVEL_NAME IS NOT NULL
6585       AND uai.DATA_LEVEL_NAME      IS NULL
6586       AND uai.DATA_LEVEL_ID        IS NULL;
6587 
6588     -----------------------------------------------------------
6589     -- If all data level columns are null, then check if the --
6590     -- attribute group is associated at only one level, then --
6591     -- put that data level id here.                          --
6592     -----------------------------------------------------------
6593     UPDATE EGO_ITM_USR_ATTR_INTRFC uai
6594        SET DATA_LEVEL_ID = (SELECT DATA_LEVEL_ID
6595                             FROM EGO_ATTR_GROUP_DL eagd, EGO_FND_DSC_FLX_CTX_EXT ag_ext
6596                             WHERE eagd.ATTR_GROUP_ID                   = ag_ext.ATTR_GROUP_ID
6597                               AND ag_ext.APPLICATION_ID                = 431
6598                               AND ag_ext.DESCRIPTIVE_FLEXFIELD_NAME    = NVL(uai.ATTR_GROUP_TYPE, 'EGO_ITEMMGMT_GROUP')
6599                               AND ag_ext.DESCRIPTIVE_FLEX_CONTEXT_CODE = uai.ATTR_GROUP_INT_NAME
6600                            )
6601     WHERE uai.DATA_SET_ID          = p_data_set_id
6602       AND (uai.PROCESS_STATUS  IS NULL OR uai.PROCESS_STATUS IN (0, 1) )
6603       AND uai.DATA_LEVEL_ID        IS NULL
6604       AND uai.DATA_LEVEL_NAME      IS NULL
6605       AND uai.USER_DATA_LEVEL_NAME IS NULL
6606       AND (SELECT COUNT(*)
6607            FROM EGO_ATTR_GROUP_DL eagd, EGO_FND_DSC_FLX_CTX_EXT ag_ext
6608            WHERE eagd.ATTR_GROUP_ID                   = ag_ext.ATTR_GROUP_ID
6609              AND ag_ext.APPLICATION_ID                = 431
6610              AND ag_ext.DESCRIPTIVE_FLEXFIELD_NAME    = NVL(uai.ATTR_GROUP_TYPE, 'EGO_ITEMMGMT_GROUP')
6611              AND ag_ext.DESCRIPTIVE_FLEX_CONTEXT_CODE = uai.ATTR_GROUP_INT_NAME
6612           ) = 1;
6613 
6614 
6615     Debug_Conc_Log( 'Resolve_SSXref_on_Data_load - Done Resolving data_level_name' );
6616 
6617     UPDATE EGO_ITEM_ASSOCIATIONS_INTF eiai
6618     SET PK1_VALUE = ( SELECT VENDOR_ID
6619                       FROM AP_SUPPLIERS aas
6620                       WHERE aas.SEGMENT1 = eiai.SUPPLIER_NUMBER
6621                     )
6622     WHERE eiai.BATCH_ID        = p_data_set_id
6623       AND (eiai.PROCESS_FLAG   IS NULL OR eiai.PROCESS_FLAG IN (0, 1) )
6624       AND eiai.PK1_VALUE       IS NULL
6625       AND eiai.SUPPLIER_NUMBER IS NOT NULL;
6626 
6627     UPDATE EGO_ITEM_ASSOCIATIONS_INTF eiai
6628     SET PK1_VALUE = ( SELECT VENDOR_ID
6629                       FROM AP_SUPPLIERS aas
6630                       WHERE aas.VENDOR_NAME = eiai.SUPPLIER_NAME
6631                     )
6632     WHERE eiai.BATCH_ID        = p_data_set_id
6633       AND (eiai.PROCESS_FLAG   IS NULL OR eiai.PROCESS_FLAG IN (0, 1) )
6634       AND eiai.PK1_VALUE       IS NULL
6635       AND eiai.SUPPLIER_NAME   IS NOT NULL
6636       AND eiai.SUPPLIER_NUMBER IS NULL;
6637 
6638     UPDATE EGO_ITEM_ASSOCIATIONS_INTF eiai
6639     SET PK2_VALUE = ( SELECT VENDOR_SITE_ID
6640                       FROM AP_SUPPLIER_SITES_ALL asa
6641                       WHERE asa.VENDOR_ID        = eiai.PK1_VALUE
6642                         AND asa.VENDOR_SITE_CODE = eiai.SUPPLIER_SITE_NAME
6643                         AND asa.ORG_ID           = FND_PROFILE.Value('ORG_ID')
6644                     )
6645     WHERE eiai.BATCH_ID           = p_data_set_id
6646       AND (eiai.PROCESS_FLAG      IS NULL OR eiai.PROCESS_FLAG IN (0, 1) )
6647       AND eiai.PK2_VALUE          IS NULL
6648       AND eiai.SUPPLIER_SITE_NAME IS NOT NULL;
6649 
6650     Debug_Conc_Log( 'Resolve_SSXref_on_Data_load - Done Resolving PK Values in Intersection Interface table' );
6651 
6652     UPDATE MTL_SYSTEM_ITEMS_INTERFACE MSII
6653     SET STYLE_ITEM_ID = (SELECT MSIK.INVENTORY_ITEM_ID
6654                          FROM MTL_SYSTEM_ITEMS_KFV MSIK
6655                          WHERE MSIK.CONCATENATED_SEGMENTS = MSII.STYLE_ITEM_NUMBER
6656                            AND MSIK.ORGANIZATION_ID = MSII.ORGANIZATION_ID
6657                         )
6658     WHERE SET_PROCESS_ID = p_data_set_id
6659       AND STYLE_ITEM_NUMBER IS NOT NULL
6660       AND STYLE_ITEM_ID IS NULL
6661       AND STYLE_ITEM_FLAG = 'N'
6662       AND (PROCESS_FLAG IS NULL OR PROCESS_FLAG IN (0, 1)) ;
6663 
6664     Debug_Conc_Log( 'Resolve_SSXref_on_Data_load - Done Resolving Style Item Id' );
6665 
6666     IF l_ss_id = get_pdh_source_system_id() THEN
6667         Debug_Conc_Log( 'Resolve_SSXref_on_Data_load - PDH batch, update item_number if inventory_item_id is populated' );
6668         -- if user does know the inventory_item_id, use it to overwrite
6669         -- item_number
6670         -- so in the imported tab, we can join to the child entities by item_number alone
6671         UPDATE MTL_SYSTEM_ITEMS_INTERFACE MSII
6672         SET item_number = (SELECT CONCATENATED_SEGMENTS
6673                            FROM MTL_SYSTEM_ITEMS_KFV
6674                            WHERE INVENTORY_ITEM_ID = MSII.INVENTORY_ITEM_ID
6675                                AND ORGANIZATION_ID = MSII.ORGANIZATION_ID)
6676         WHERE SET_PROCESS_ID = p_data_set_id
6677             AND PROCESS_FLAG = 1
6678             AND ITEM_NUMBER IS NULL
6679             AND INVENTORY_ITEM_ID IS NOT NULL;
6680 
6681         UPDATE MTL_ITEM_REVISIONS_INTERFACE MIRI
6682         SET item_number = (SELECT CONCATENATED_SEGMENTS
6683                            FROM MTL_SYSTEM_ITEMS_KFV
6684                            WHERE INVENTORY_ITEM_ID = MIRI.INVENTORY_ITEM_ID
6685                                AND ORGANIZATION_ID = MIRI.ORGANIZATION_ID)
6686         WHERE SET_PROCESS_ID = p_data_set_id
6687             AND PROCESS_FLAG = 1
6688             AND ITEM_NUMBER IS NULL
6689             AND INVENTORY_ITEM_ID IS NOT NULL;
6690 
6691         UPDATE MTL_ITEM_CATEGORIES_INTERFACE MICI
6692         SET item_number = (SELECT CONCATENATED_SEGMENTS
6693                            FROM MTL_SYSTEM_ITEMS_KFV
6694                            WHERE INVENTORY_ITEM_ID = MICI.INVENTORY_ITEM_ID
6695                                AND ORGANIZATION_ID = MICI.ORGANIZATION_ID)
6696         WHERE SET_PROCESS_ID = p_data_set_id
6697             AND PROCESS_FLAG = 1
6698             AND ITEM_NUMBER IS NULL
6699           AND INVENTORY_ITEM_ID IS NOT NULL;
6700 
6701         UPDATE EGO_ITM_USR_ATTR_INTRFC EIUAI
6702         SET item_number = (SELECT CONCATENATED_SEGMENTS
6703                            FROM MTL_SYSTEM_ITEMS_KFV
6704                            WHERE INVENTORY_ITEM_ID = EIUAI.INVENTORY_ITEM_ID
6705                                AND ORGANIZATION_ID = EIUAI.ORGANIZATION_ID)
6706         WHERE DATA_SET_ID = p_data_set_id
6707             AND PROCESS_STATUS = 1
6708             AND ITEM_NUMBER IS NULL
6709             AND INVENTORY_ITEM_ID IS NOT NULL;
6710 
6711         UPDATE EGO_AML_INTF EAI
6712         SET item_number = (SELECT CONCATENATED_SEGMENTS
6713                            FROM MTL_SYSTEM_ITEMS_KFV
6714                            WHERE INVENTORY_ITEM_ID = EAI.INVENTORY_ITEM_ID
6715                                AND ORGANIZATION_ID = EAI.ORGANIZATION_ID)
6716         WHERE DATA_SET_ID = p_data_set_id
6717             AND PROCESS_FLAG = 1
6718             AND ITEM_NUMBER IS NULL
6719             AND INVENTORY_ITEM_ID IS NOT NULL;
6720 
6721         UPDATE EGO_ITEM_PEOPLE_INTF MIPI
6722         SET item_number = (SELECT CONCATENATED_SEGMENTS
6723                            FROM MTL_SYSTEM_ITEMS_KFV
6724                            WHERE INVENTORY_ITEM_ID = MIPI.INVENTORY_ITEM_ID
6725                                AND ORGANIZATION_ID = MIPI.ORGANIZATION_ID)
6726         WHERE DATA_SET_ID = p_data_set_id
6727             AND PROCESS_STATUS = 1
6728             AND ITEM_NUMBER IS NULL
6729             AND INVENTORY_ITEM_ID IS NOT NULL;
6730 
6731         UPDATE EGO_ITEM_ASSOCIATIONS_INTF EIAI
6732         SET item_number = (SELECT CONCATENATED_SEGMENTS
6733                            FROM MTL_SYSTEM_ITEMS_KFV
6734                            WHERE INVENTORY_ITEM_ID = EIAI.INVENTORY_ITEM_ID
6735                                AND ORGANIZATION_ID = EIAI.ORGANIZATION_ID)
6736         WHERE BATCH_ID = p_data_set_id
6737             AND PROCESS_FLAG = 1
6738             AND ITEM_NUMBER IS NULL
6739             AND INVENTORY_ITEM_ID IS NOT NULL;
6740 
6741         Debug_Conc_Log( 'Resolve_SSXref_on_Data_load - PDH batch, done updating item_number if inventory_item_id is populated' );
6742 
6743         -- parse segments into item_number if item_number is null
6744         -- so that we can join to the child entities by item number alone
6745         PARSE_ITEM_SEGMENTS(p_data_set_id, l_org_id, FND_API.G_TRUE);
6746         Debug_Conc_Log( 'Resolve_SSXref_on_Data_load - PDH batch, done parsing item segments' );
6747 
6748         -- insert fake records ...
6749         l_insert_date := SYSDATE;
6750         -- ... 1. for attributes (no child orgs)
6751         INSERT INTO
6752             MTL_SYSTEM_ITEMS_INTERFACE MSII
6753             ( transaction_type, process_flag, set_process_id, organization_id, source_system_id
6754             , confirm_status, inventory_item_id, item_number
6755             , CREATION_DATE, LAST_UPDATE_DATE, CREATED_BY, LAST_UPDATED_BY, LAST_UPDATE_LOGIN
6756             , ITEM_CATALOG_GROUP_ID )
6757             SELECT G_TRANS_TYPE_SYNC, 1, p_data_set_id, EIUAI.organization_id, l_ss_id
6758                , G_FAKE_CONF_STATUS_FLAG
6759                , MAX( EIUAI.inventory_item_id ) KEEP ( DENSE_RANK FIRST ORDER BY INVENTORY_ITEM_ID NULLS LAST, LAST_UPDATE_DATE NULLS LAST )
6760                , EIUAI.item_number
6761                , l_insert_date -- CREATION_DATE
6762                , l_insert_date -- LAST_UPDATE_DATE
6763                , MAX( EIUAI.created_by ) KEEP ( DENSE_RANK FIRST ORDER BY INVENTORY_ITEM_ID NULLS LAST, LAST_UPDATE_DATE NULLS LAST ) CREATED_BY
6764                , MAX( EIUAI.last_updated_by ) KEEP ( DENSE_RANK FIRST ORDER BY INVENTORY_ITEM_ID NULLS LAST, LAST_UPDATE_DATE NULLS LAST ) UPDATED_BY
6765                , MAX( EIUAI.last_update_login ) KEEP ( DENSE_RANK FIRST ORDER BY INVENTORY_ITEM_ID NULLS LAST, LAST_UPDATE_DATE NULLS LAST ) LAST_UPDATE_LOGIN
6766                , MAX( EIUAI.item_catalog_group_id ) KEEP ( DENSE_RANK FIRST ORDER BY INVENTORY_ITEM_ID NULLS LAST, LAST_UPDATE_DATE NULLS LAST ) ITEM_CATALOG_GROUP_ID
6767             FROM EGO_ITM_USR_ATTR_INTRFC    EIUAI
6768 --             , MTL_PARAMETERS             MP
6769             WHERE
6770                 data_set_id = p_data_set_id
6771             AND process_status = 1
6772             AND EIUAI.organization_id = l_org_id
6773 --          AND EIUAI.organization_id = MP.organization_id
6774 --          AND MP.master_organization_id = l_org_id
6775             AND NOT EXISTS
6776                 (
6777                 select null from mtl_system_items_interface
6778                 where set_process_id     = EIUAI.data_set_id
6779                   and item_number        = EIUAI.item_number
6780                   and process_flag       = EIUAI.process_status
6781                   and organization_id    = l_org_id
6782                 )
6783             GROUP BY EIUAI.ITEM_NUMBER, EIUAI.organization_id;
6784             -- using GROUP BY rather than distinct for performance reasons (emulating merge code)
6785             Debug_Conc_Log( 'Resolve_SSXref_on_Data_load - PDH batch, parent rows inserted for UDAs: ' || SQL%ROWCOUNT );
6786         -- ... 2. for AMLs (no child orgs)
6787         INSERT INTO
6788             MTL_SYSTEM_ITEMS_INTERFACE MSII
6789             ( transaction_type, process_flag, set_process_id, organization_id, source_system_id
6790             , confirm_status, inventory_item_id, item_number
6791             , CREATION_DATE, LAST_UPDATE_DATE, CREATED_BY, LAST_UPDATED_BY, LAST_UPDATE_LOGIN )
6792             SELECT G_TRANS_TYPE_SYNC, 1, p_data_set_id, l_org_id, l_ss_id
6793                , G_FAKE_CONF_STATUS_FLAG
6794                , MAX( EAI.inventory_item_id ) KEEP ( DENSE_RANK FIRST ORDER BY INVENTORY_ITEM_ID NULLS LAST, LAST_UPDATE_DATE NULLS LAST )
6795                , EAI.item_number
6796                , l_insert_date -- CREATION_DATE
6797                , l_insert_date -- LAST_UPDATE_DATE
6798                , MAX( EAI.created_by ) KEEP ( DENSE_RANK FIRST ORDER BY INVENTORY_ITEM_ID NULLS LAST, LAST_UPDATE_DATE NULLS LAST ) CREATED_BY
6799                , MAX( EAI.last_updated_by ) KEEP ( DENSE_RANK FIRST ORDER BY INVENTORY_ITEM_ID NULLS LAST, LAST_UPDATE_DATE NULLS LAST ) UPDATED_BY
6800                , MAX( EAI.last_update_login ) KEEP ( DENSE_RANK FIRST ORDER BY INVENTORY_ITEM_ID NULLS LAST, LAST_UPDATE_DATE NULLS LAST ) LAST_UPDATE_LOGIN
6801             FROM EGO_AML_INTF    EAI
6802 --             , MTL_PARAMETERS             MP
6803             WHERE
6804                 EAI.data_set_id = p_data_set_id
6805             AND EAI.process_flag = 1
6806             AND EAI.organization_id = l_org_id
6807 --          AND EAI.organization_id = MP.organization_id
6808 --          AND MP.master_organization_id = l_org_id
6809             AND NOT EXISTS
6810                 (
6811                 select null from mtl_system_items_interface
6812                 where set_process_id     = EAI.data_set_id
6813                   and item_number        = EAI.item_number
6814                   and process_flag       = EAI.process_flag
6815                   and organization_id    = l_org_id
6816                 )
6817             GROUP BY EAI.ITEM_NUMBER;
6818             -- using GROUP BY rather than distinct for performance reasons (emulating merge code)
6819         Debug_Conc_Log( 'Resolve_SSXref_on_Data_load - PDH batch, parent rows inserted for AMLs: ' || SQL%ROWCOUNT );
6820 
6821          --R12C: Inseting Fake Row into MSII for orphan row in EGO_ITEM_ASSOCIATIONS_INTF.
6822         INSERT INTO
6823             MTL_SYSTEM_ITEMS_INTERFACE MSII
6824             ( transaction_type, process_flag, set_process_id, organization_id, source_system_id
6825             , confirm_status, inventory_item_id, item_number
6826             , CREATION_DATE, LAST_UPDATE_DATE, CREATED_BY, LAST_UPDATED_BY, LAST_UPDATE_LOGIN  )
6827             SELECT G_TRANS_TYPE_SYNC, 1, p_data_set_id, EIAI.organization_id, l_ss_id
6828                , G_FAKE_CONF_STATUS_FLAG
6829                , MAX( EIAI.inventory_item_id ) KEEP ( DENSE_RANK FIRST ORDER BY INVENTORY_ITEM_ID NULLS LAST, LAST_UPDATE_DATE NULLS LAST )
6830                , EIAI.item_number
6831                , l_insert_date -- CREATION_DATE
6832                , l_insert_date -- LAST_UPDATE_DATE
6833                , MAX( EIAI.created_by ) KEEP ( DENSE_RANK FIRST ORDER BY INVENTORY_ITEM_ID NULLS LAST, LAST_UPDATE_DATE NULLS LAST ) CREATED_BY
6834                , MAX( EIAI.last_updated_by ) KEEP ( DENSE_RANK FIRST ORDER BY INVENTORY_ITEM_ID NULLS LAST, LAST_UPDATE_DATE NULLS LAST ) UPDATED_BY
6835                , MAX( EIAI.last_update_login ) KEEP ( DENSE_RANK FIRST ORDER BY INVENTORY_ITEM_ID NULLS LAST, LAST_UPDATE_DATE NULLS LAST ) LAST_UPDATE_LOGIN
6836             FROM EGO_ITEM_ASSOCIATIONS_INTF    EIAI
6837             WHERE
6838                 batch_id = p_data_set_id
6839             AND process_flag = 1
6840             AND EIAI.organization_id = l_org_id
6841             AND NOT EXISTS
6842                 (
6843                 select null from mtl_system_items_interface
6844                 where set_process_id     = EIAI.batch_id
6845                   and item_number        = EIAI.item_number
6846                   and process_flag       = EIAI.process_flag
6847                   and organization_id    = l_org_id
6848                 )
6849             GROUP BY EIAI.ITEM_NUMBER, EIAI.organization_id;
6850         Debug_Conc_Log( 'Resolve_SSXref_on_Data_load - PDH batch, parent rows inserted for ASSOCIATIONS: ' || SQL%ROWCOUNT );
6851 
6852         --R12C: Insertion of Fake row into MSII for a orphan row in MTL_ITEM_CATEGORIES_INTERFACE
6853         INSERT INTO
6854             MTL_SYSTEM_ITEMS_INTERFACE MSII
6855             ( transaction_type, process_flag, set_process_id, organization_id, source_system_id
6856             , confirm_status, inventory_item_id, item_number
6857             , CREATION_DATE, LAST_UPDATE_DATE, CREATED_BY, LAST_UPDATED_BY, LAST_UPDATE_LOGIN  )
6858             SELECT G_TRANS_TYPE_SYNC, 1, p_data_set_id, MICI.organization_id, l_ss_id
6859                , G_FAKE_CONF_STATUS_FLAG
6860                , MAX( MICI.inventory_item_id ) KEEP ( DENSE_RANK FIRST ORDER BY INVENTORY_ITEM_ID NULLS LAST, LAST_UPDATE_DATE NULLS LAST )
6861                , MICI.item_number
6862                , l_insert_date -- CREATION_DATE
6863                , l_insert_date -- LAST_UPDATE_DATE
6864                , MAX( MICI.created_by ) KEEP ( DENSE_RANK FIRST ORDER BY INVENTORY_ITEM_ID NULLS LAST, LAST_UPDATE_DATE NULLS LAST ) CREATED_BY
6865                , MAX( MICI.last_updated_by ) KEEP ( DENSE_RANK FIRST ORDER BY INVENTORY_ITEM_ID NULLS LAST, LAST_UPDATE_DATE NULLS LAST ) UPDATED_BY
6866                , MAX( MICI.last_update_login ) KEEP ( DENSE_RANK FIRST ORDER BY INVENTORY_ITEM_ID NULLS LAST, LAST_UPDATE_DATE NULLS LAST ) LAST_UPDATE_LOGIN
6867             FROM MTL_ITEM_CATEGORIES_INTERFACE    MICI
6868             WHERE
6869                 set_process_id = p_data_set_id
6870             AND process_flag = 1
6871             AND MICI.organization_id = l_org_id
6872             AND NOT EXISTS
6873                 (
6874                 select null from mtl_system_items_interface
6875                 where set_process_id     = MICI.set_process_id
6876                   and item_number        = MICI.item_number
6877                   and process_flag       = MICI.process_flag
6878                   and organization_id    = l_org_id
6879                 )
6880             GROUP BY MICI.ITEM_NUMBER, MICI.organization_id;
6881         Debug_Conc_Log( 'Resolve_SSXref_on_Data_load - PDH batch, parent rows inserted for CATEGORY ASSIGNMENT rows: ' || SQL%ROWCOUNT );
6882         MERGE_BATCH(  p_batch_id        => p_data_set_id
6883                    ,  p_master_org_id   => l_org_id
6884                    ,  p_is_pdh_batch    => FND_API.G_TRUE
6885                    ,  p_commit          => FND_API.G_FALSE
6886                    );
6887         Debug_Conc_Log( 'Resolve_SSXref_on_Data_load - PDH batch, done merging batch' );
6888 
6889         -- resolve SYNC transaction_type into UPDATE or CREATE
6890         -- this is needed in the Confirmed Tab for a PDH batch to partition
6891         -- items into 'Matched' and 'New'
6892         UPDATE_ITEM_SYNC_RECORDS_PDH(p_data_set_id, l_org_id);
6893         Debug_Conc_Log( 'Resolve_SSXref_on_Data_load - PDH batch, done updating item sync records' );
6894 
6895         /* Bug 5283663: CREATE rows can have the FAKE confirm status,
6896            since those rows are moved to process flag 3 in resolve_child_entities;
6897            before IOI has a chance to process them
6898         UPDATE MTL_SYSTEM_ITEMS_INTERFACE MSII
6899             SET CONFIRM_STATUS  = NULL
6900             WHERE
6901                 set_process_id  = p_data_set_id
6902             AND process_flag    = 1
6903             AND organization_id = l_org_id
6904             AND UPPER( transaction_type ) = G_TRANS_TYPE_CREATE
6905             AND confirm_status = G_FAKE_CONF_STATUS_FLAG;
6906         */
6907 
6908         -- that's it
6909         IF FND_API.G_TRUE = p_commit THEN
6910            COMMIT;
6911            Debug_Conc_Log( 'Resolve_SSXref_on_Data_load - PDH batch, committed' );
6912         END IF;
6913 
6914         RETURN;
6915     END IF;
6916 
6917     Debug_Conc_Log( 'Resolve_SSXref_on_Data_load - Source System batch, setting process_flag if null' );
6918 
6919     -- we need to look at all these columns
6920     -- Filter Conditions: set_process_id (batch), process_flag (0 -- unprocessed), organization_id (master org), process_flag (null)
6921     -- Source System Item Primary Keys: source_system_id, source_system_reference
6922     -- PDH Item Primary Key Possibilities: inventory_item_id, item_number, segment1, segment2, ... segment20
6923     -- User Directive: transaction_type
6924 
6925     -- Normalize the PROCESS_FLAG if it is null
6926     UPDATE MTL_SYSTEM_ITEMS_INTERFACE
6927     SET PROCESS_FLAG = 0
6928     WHERE SET_PROCESS_ID = p_data_set_id AND
6929         PROCESS_FLAG IS NULL;
6930 
6931     UPDATE MTL_ITEM_REVISIONS_INTERFACE
6932     SET PROCESS_FLAG = 0
6933     WHERE SET_PROCESS_ID = p_data_set_id AND
6934         PROCESS_FLAG IS NULL;
6935 
6936     UPDATE MTL_ITEM_CATEGORIES_INTERFACE
6937     SET PROCESS_FLAG = 0
6938     WHERE SET_PROCESS_ID = p_data_set_id AND
6939         PROCESS_FLAG IS NULL;
6940 
6941     UPDATE EGO_ITM_USR_ATTR_INTRFC
6942     SET PROCESS_STATUS = 0
6943     WHERE DATA_SET_ID = p_data_set_id AND
6944         PROCESS_STATUS IS NULL;
6945 
6946     UPDATE EGO_ITEM_PEOPLE_INTF
6947     SET PROCESS_STATUS = 0
6948     WHERE DATA_SET_ID = p_data_set_id AND
6949         PROCESS_STATUS IS NULL;
6950 
6951     UPDATE EGO_AML_INTF
6952     SET PROCESS_FLAG = 0
6953     WHERE DATA_SET_ID = p_data_set_id AND
6954         PROCESS_FLAG IS NULL;
6955 
6956     UPDATE EGO_ITEM_ASSOCIATIONS_INTF
6957     SET PROCESS_FLAG = 0
6958     WHERE BATCH_ID = p_data_set_id AND
6959         PROCESS_FLAG IS NULL;
6960 
6961     Debug_Conc_Log( 'Resolve_SSXref_on_Data_load - Source System batch, done setting process_flag if null' );
6962 
6963 
6964     -- insert fake records ...
6965     l_insert_date := SYSDATE;
6966     -- ... 1. for attributes (no child orgs)
6967     INSERT INTO
6968         MTL_SYSTEM_ITEMS_INTERFACE MSII
6969         ( transaction_type, process_flag, set_process_id, organization_id, source_system_id, source_system_reference, bundle_id
6970         , confirm_status, inventory_item_id, item_number
6971         , CREATION_DATE, LAST_UPDATE_DATE, CREATED_BY, LAST_UPDATED_BY, LAST_UPDATE_LOGIN
6972         , ITEM_CATALOG_GROUP_ID )
6973         SELECT G_TRANS_TYPE_SYNC, 0, p_data_set_id, EIUAI.organization_id
6974            , EIUAI.source_system_id, EIUAI.source_system_reference, EIUAI.bundle_id
6975            , G_FAKE_CONF_STATUS_FLAG
6976            , MAX( EIUAI.inventory_item_id ) KEEP ( DENSE_RANK FIRST ORDER BY INVENTORY_ITEM_ID NULLS LAST, ITEM_NUMBER NULLS LAST, LAST_UPDATE_DATE NULLS LAST ) ITEM_ID
6977            , MAX( EIUAI.item_number ) KEEP ( DENSE_RANK FIRST ORDER BY INVENTORY_ITEM_ID NULLS LAST, ITEM_NUMBER NULLS LAST, LAST_UPDATE_DATE NULLS LAST ) ITEM_NUMBER
6978            , l_insert_date -- CREATION_DATE
6979            , l_insert_date -- LAST_UPDATE_DATE
6980            , MAX( EIUAI.created_by ) KEEP ( DENSE_RANK FIRST ORDER BY INVENTORY_ITEM_ID NULLS LAST, ITEM_NUMBER NULLS LAST, LAST_UPDATE_DATE NULLS LAST ) CREATED_BY
6981            , MAX( EIUAI.last_updated_by ) KEEP ( DENSE_RANK FIRST ORDER BY INVENTORY_ITEM_ID NULLS LAST, ITEM_NUMBER NULLS LAST, LAST_UPDATE_DATE NULLS LAST ) UPDATED_BY
6982            , MAX( EIUAI.last_update_login ) KEEP ( DENSE_RANK FIRST ORDER BY INVENTORY_ITEM_ID NULLS LAST, ITEM_NUMBER NULLS LAST, LAST_UPDATE_DATE NULLS LAST ) LAST_UPDATE_LOGIN
6983            , MAX( EIUAI.item_catalog_group_id ) KEEP ( DENSE_RANK FIRST ORDER BY INVENTORY_ITEM_ID NULLS LAST, ITEM_NUMBER NULLS LAST, LAST_UPDATE_DATE NULLS LAST ) ITEM_CATALOG_GROUP_ID
6984         FROM EGO_ITM_USR_ATTR_INTRFC    EIUAI
6985 --         , MTL_PARAMETERS             MP
6986         WHERE
6987             data_set_id = p_data_set_id
6988         AND process_status = 0
6989         AND EIUAI.organization_id = l_org_id
6990 --      AND EIUAI.organization_id = MP.organization_id
6991 --      AND MP.master_organization_id = l_org_id
6992         AND source_system_id = l_ss_id
6993         AND source_system_reference IS NOT NULL
6994         AND NOT EXISTS
6995             (
6996             select null from mtl_system_items_interface
6997             where set_process_id          = EIUAI.data_set_id
6998               and source_system_id        = EIUAI.source_system_id
6999               and source_system_reference = EIUAI.source_system_reference
7000               and process_flag            = EIUAI.process_status
7001               and organization_id         = l_org_id
7002             )
7003         GROUP BY EIUAI.source_system_id, EIUAI.source_system_reference, EIUAI.organization_id, EIUAI.BUNDLE_ID;
7004         -- using GROUP BY rather than distinct for performance reasons (no load on merge code)
7005     Debug_Conc_Log( 'Resolve_SSXref_on_Data_load - Source System batch, parent rows inserted for UDAs: ' || SQL%ROWCOUNT );
7006     -- ... 2. for AMLs (no child orgs)
7007     INSERT INTO
7008         MTL_SYSTEM_ITEMS_INTERFACE MSII
7009         ( transaction_type, process_flag, set_process_id, organization_id, source_system_id, source_system_reference
7010         , source_system_reference_desc, confirm_status, inventory_item_id, item_number
7011         , CREATION_DATE, LAST_UPDATE_DATE, CREATED_BY, LAST_UPDATED_BY, LAST_UPDATE_LOGIN )
7012         SELECT G_TRANS_TYPE_SYNC, 0, p_data_set_id, l_org_id
7013            , EAI.source_system_id, EAI.source_system_reference
7014            , MAX( EAI.source_system_reference_desc ) KEEP ( DENSE_RANK FIRST ORDER BY INVENTORY_ITEM_ID NULLS LAST, ITEM_NUMBER NULLS LAST, LAST_UPDATE_DATE NULLS LAST ) SOURCE_SYSTEM_REFERENCE_DESC
7015            , G_FAKE_CONF_STATUS_FLAG
7016            , MAX( EAI.inventory_item_id ) KEEP ( DENSE_RANK FIRST ORDER BY INVENTORY_ITEM_ID NULLS LAST, ITEM_NUMBER NULLS LAST, LAST_UPDATE_DATE NULLS LAST ) ITEM_ID
7017            , MAX( EAI.item_number ) KEEP ( DENSE_RANK FIRST ORDER BY INVENTORY_ITEM_ID NULLS LAST, ITEM_NUMBER NULLS LAST, LAST_UPDATE_DATE NULLS LAST ) ITEM_NUMBER
7018            , l_insert_date -- CREATION_DATE
7019            , l_insert_date -- LAST_UPDATE_DATE
7020            , MAX( EAI.created_by ) KEEP ( DENSE_RANK FIRST ORDER BY INVENTORY_ITEM_ID NULLS LAST, ITEM_NUMBER NULLS LAST, LAST_UPDATE_DATE NULLS LAST ) CREATED_BY
7021            , MAX( EAI.last_updated_by ) KEEP ( DENSE_RANK FIRST ORDER BY INVENTORY_ITEM_ID NULLS LAST, ITEM_NUMBER NULLS LAST, LAST_UPDATE_DATE NULLS LAST ) UPDATED_BY
7022            , MAX( EAI.last_update_login ) KEEP ( DENSE_RANK FIRST ORDER BY INVENTORY_ITEM_ID NULLS LAST, ITEM_NUMBER NULLS LAST, LAST_UPDATE_DATE NULLS LAST ) LAST_UPDATE_LOGIN
7023         FROM EGO_AML_INTF    EAI
7024 --         , MTL_PARAMETERS             MP
7025         WHERE
7026             EAI.data_set_id = p_data_set_id
7027         AND EAI.process_flag = 0
7028         AND EAI.organization_id = l_org_id
7029 --      AND EAI.organization_id = MP.organization_id
7030 --      AND MP.master_organization_id = l_org_id
7031         AND source_system_id = l_ss_id
7032         AND source_system_reference IS NOT NULL
7033         AND NOT EXISTS
7034             (
7035             select null from mtl_system_items_interface
7036             where set_process_id          = EAI.data_set_id
7037               and source_system_id        = EAI.source_system_id
7038               and source_system_reference = EAI.source_system_reference
7039               and process_flag            = EAI.process_flag
7040               and organization_id         = l_org_id
7041             )
7042         GROUP BY EAI.source_system_id, EAI.source_system_reference;
7043         -- using GROUP BY rather than distinct for performance reasons (no load on merge code)
7044     Debug_Conc_Log( 'Resolve_SSXref_on_Data_load - Source System batch, parent rows inserted for AMLs: ' || SQL%ROWCOUNT );
7045 
7046     --R12C: Inserting Fake Row (Parent Row in MSII) for Orphan row in EGO_ITEM_ASSOCIATIONS_INTF
7047     INSERT INTO
7048         MTL_SYSTEM_ITEMS_INTERFACE MSII
7049         ( transaction_type, process_flag, set_process_id, organization_id, source_system_id, source_system_reference, bundle_id
7050         ,  confirm_status, inventory_item_id, item_number
7051         , CREATION_DATE, LAST_UPDATE_DATE, CREATED_BY, LAST_UPDATED_BY, LAST_UPDATE_LOGIN )
7052         SELECT G_TRANS_TYPE_SYNC, 0, p_data_set_id, l_org_id
7053            , EIAI.source_system_id, EIAI.source_system_reference, EIAI.bundle_id
7054            , G_FAKE_CONF_STATUS_FLAG
7055            , MAX( EIAI.inventory_item_id ) KEEP ( DENSE_RANK FIRST ORDER BY INVENTORY_ITEM_ID NULLS LAST, ITEM_NUMBER NULLS LAST, LAST_UPDATE_DATE NULLS LAST ) ITEM_ID
7056            , MAX( EIAI.item_number ) KEEP ( DENSE_RANK FIRST ORDER BY INVENTORY_ITEM_ID NULLS LAST, ITEM_NUMBER NULLS LAST, LAST_UPDATE_DATE NULLS LAST ) ITEM_NUMBER
7057            , l_insert_date -- CREATION_DATE
7058            , l_insert_date -- LAST_UPDATE_DATE
7059            , MAX( EIAI.created_by ) KEEP ( DENSE_RANK FIRST ORDER BY INVENTORY_ITEM_ID NULLS LAST, ITEM_NUMBER NULLS LAST, LAST_UPDATE_DATE NULLS LAST ) CREATED_BY
7060            , MAX( EIAI.last_updated_by ) KEEP ( DENSE_RANK FIRST ORDER BY INVENTORY_ITEM_ID NULLS LAST, ITEM_NUMBER NULLS LAST, LAST_UPDATE_DATE NULLS LAST ) UPDATED_BY
7061            , MAX( EIAI.last_update_login ) KEEP ( DENSE_RANK FIRST ORDER BY INVENTORY_ITEM_ID NULLS LAST, ITEM_NUMBER NULLS LAST, LAST_UPDATE_DATE NULLS LAST ) LAST_UPDATE_LOGIN
7062         FROM EGO_ITEM_ASSOCIATIONS_INTF    EIAI
7063         WHERE
7064             EIAI.batch_id = p_data_set_id
7065         AND EIAI.process_flag = 0
7066         AND EIAI.organization_id = l_org_id
7067         AND source_system_id = l_ss_id
7068         AND source_system_reference IS NOT NULL
7069         AND NOT EXISTS
7070             (
7071             select null from mtl_system_items_interface
7072             where set_process_id          = EIAI.batch_id
7073               and source_system_id        = EIAI.source_system_id
7074               and source_system_reference = EIAI.source_system_reference
7075               and process_flag            = EIAI.process_flag
7076               and organization_id         = l_org_id
7077             )
7078         GROUP BY EIAI.source_system_id, EIAI.source_system_reference, EIAI.bundle_id;
7079     Debug_Conc_Log( 'Resolve_SSXref_on_Data_load - Source System batch, parent rows inserted for ASSOCIATIONS: ' || SQL%ROWCOUNT );
7080 
7081 
7082     --R12C: Inserting Fake Row (Parent Row in MSII) for Orphan row in EGO_ITEM_ASSOCIATIONS_INTF
7083     INSERT INTO
7084         MTL_SYSTEM_ITEMS_INTERFACE MSII
7085         ( transaction_type, process_flag, set_process_id, organization_id, source_system_id, source_system_reference, bundle_id
7086         ,  confirm_status, inventory_item_id, item_number
7087         , CREATION_DATE, LAST_UPDATE_DATE, CREATED_BY, LAST_UPDATED_BY, LAST_UPDATE_LOGIN )
7088         SELECT G_TRANS_TYPE_SYNC, 0, p_data_set_id, l_org_id
7089            , MICI.source_system_id, MICI.source_system_reference, MICI.bundle_id
7090            , G_FAKE_CONF_STATUS_FLAG
7091            , MAX( MICI.inventory_item_id ) KEEP ( DENSE_RANK FIRST ORDER BY INVENTORY_ITEM_ID NULLS LAST, ITEM_NUMBER NULLS LAST, LAST_UPDATE_DATE NULLS LAST ) ITEM_ID
7092            , MAX( MICI.item_number ) KEEP ( DENSE_RANK FIRST ORDER BY INVENTORY_ITEM_ID NULLS LAST, ITEM_NUMBER NULLS LAST, LAST_UPDATE_DATE NULLS LAST ) ITEM_NUMBER
7093            , l_insert_date -- CREATION_DATE
7094            , l_insert_date -- LAST_UPDATE_DATE
7095            , MAX( MICI.created_by ) KEEP ( DENSE_RANK FIRST ORDER BY INVENTORY_ITEM_ID NULLS LAST, ITEM_NUMBER NULLS LAST, LAST_UPDATE_DATE NULLS LAST ) CREATED_BY
7096            , MAX( MICI.last_updated_by ) KEEP ( DENSE_RANK FIRST ORDER BY INVENTORY_ITEM_ID NULLS LAST, ITEM_NUMBER NULLS LAST, LAST_UPDATE_DATE NULLS LAST ) UPDATED_BY
7097            , MAX( MICI.last_update_login ) KEEP ( DENSE_RANK FIRST ORDER BY INVENTORY_ITEM_ID NULLS LAST, ITEM_NUMBER NULLS LAST, LAST_UPDATE_DATE NULLS LAST ) LAST_UPDATE_LOGIN
7098         FROM MTL_ITEM_CATEGORIES_INTERFACE    MICI
7099         WHERE
7100             MICI.set_process_id = p_data_set_id
7101         AND MICI.process_flag = 0
7102         AND MICI.organization_id = l_org_id
7103         AND source_system_id = l_ss_id
7104         AND source_system_reference IS NOT NULL
7105         AND NOT EXISTS
7106             (
7107             select null from mtl_system_items_interface
7108             where set_process_id          = MICI.set_process_id
7109               and source_system_id        = MICI.source_system_id
7110               and source_system_reference = MICI.source_system_reference
7111               and process_flag            = MICI.process_flag
7112               and organization_id         = l_org_id
7113             )
7114         GROUP BY MICI.source_system_id, MICI.source_system_reference, MICI.bundle_id;
7115     Debug_Conc_Log( 'Resolve_SSXref_on_Data_load - Source System batch, parent rows inserted for CAT Assignments: ' || SQL%ROWCOUNT );
7116     -- R12C: End
7117     -- check for records that need to be marked excluded
7118     UPDATE
7119         MTL_SYSTEM_ITEMS_INTERFACE MSII
7120     SET CONFIRM_STATUS = CASE
7121                          WHEN CONFIRM_STATUS IS NULL THEN G_EXCLUDED
7122                          ELSE G_FAKE_EXCLUDED
7123                          END
7124     WHERE
7125             SET_PROCESS_ID = p_data_set_id
7126         AND (   CONFIRM_STATUS IS NULL
7127             OR  CONFIRM_STATUS = G_FAKE_CONF_STATUS_FLAG ) -- bug5303685: exclusion check for fake rows
7128         AND PROCESS_FLAG = 0
7129         AND ORGANIZATION_ID = l_org_id
7130         AND EXISTS
7131             ( SELECT NULL
7132               FROM  EGO_IMPORT_EXCLUDED_SS_ITEMS
7133               WHERE SOURCE_SYSTEM_ID        = MSII.SOURCE_SYSTEM_ID
7134                 AND SOURCE_SYSTEM_REFERENCE = MSII.SOURCE_SYSTEM_REFERENCE
7135            );
7136 
7137     Debug_Conc_Log( 'Resolve_SSXref_on_Data_load - Source System batch, excluded items: ' || SQL%ROWCOUNT );
7138 
7139     -- parse segments into item number
7140     PARSE_ITEM_SEGMENTS(p_data_set_id, l_org_id);
7141     Debug_Conc_Log( 'Resolve_SSXref_on_Data_load - Source System batch, done parsing item segments' );
7142 
7143     Debug_Conc_Log( 'Resolve_SSXref_on_Data_load - Calling Err_null_ssxref_ssid' );
7144     --Bug 5352143
7145     --This Procedure errors out rows in interface table which have source system reference
7146     --as null or have invalid source system id
7147 
7148     Err_null_ssxref_ssid( p_data_set_id );
7149 
7150     Debug_Conc_Log( 'Resolve_SSXref_on_Data_load - Returned from Err_null_ssxref_ssid' );
7151 
7152     /*
7153      * Note that merging does not need to be aware of fake records,
7154      * since they will either not be created (if there are already records in MSII)
7155      * or will be the oldest records (if the user loads item info for previously fake
7156      * records).
7157      * Either way, the confirm status after merging will be NULL.
7158      */
7159     IF l_enabled_for_data_pool = 'N' THEN
7160       MERGE_BATCH(  p_batch_id        => p_data_set_id
7161                  ,  p_master_org_id   => l_org_id
7162                  ,  p_is_pdh_batch    => FND_API.G_FALSE
7163                  ,  p_commit          => FND_API.G_FALSE
7164                  );
7165       Debug_Conc_Log( 'Resolve_SSXref_on_Data_load - Source System batch, done merging rows' );
7166     ELSE
7167       Debug_Conc_Log( 'Resolve_SSXref_on_Data_load - Not calling merging, because batch is enabled for data pool' );
7168     END IF;
7169 
7170     -- check for records that need to be marked excluded among the merged records
7171     -- (for freshly merged records, confirm_status is NULL)
7172     -- fix for bug 5329665
7173     UPDATE
7174         MTL_SYSTEM_ITEMS_INTERFACE MSII
7175     SET CONFIRM_STATUS = G_EXCLUDED
7176     WHERE
7177             SET_PROCESS_ID = p_data_set_id
7178         AND CONFIRM_STATUS IS NULL
7179         AND PROCESS_FLAG   = 0
7180         AND ORGANIZATION_ID = l_org_id
7181         AND EXISTS
7182             ( SELECT NULL
7183               FROM  EGO_IMPORT_EXCLUDED_SS_ITEMS
7184               WHERE SOURCE_SYSTEM_ID        = MSII.SOURCE_SYSTEM_ID
7185                 AND SOURCE_SYSTEM_REFERENCE = MSII.SOURCE_SYSTEM_REFERENCE
7186             );
7187 
7188 
7189     -- For every unprocessed master record in a batch which has transaction_type value of 'UPDATE' or 'SYNC'
7190     -- if it has no inventory_item_id
7191     --    if it has an item number, parse it into segments.
7192     --    determine if an item exists with these segments in MSI and if true, populate inventory_item_id
7193     -- else it has inventory_item_id
7194     --    determine if an item exists with this inventory_item_id in MSI
7195 
7196     -- if the current transaction_type is 'SYNC'
7197     --    change it to 'UPDATE' if there is a way to resolve it to an existing item.
7198     --    change it to 'CREATE' if there is no way to resolve it to an existing item
7199     UPDATE_ITEM_SYNC_RECORDS(p_data_set_id, l_org_id);
7200     Debug_Conc_Log( 'Resolve_SSXref_on_Data_load - Source System batch, done updating item sync records' );
7201     -- Now the records all have either 'UPDATE' or 'CREATE' as transaction_type
7202     -- UPDATE:
7203     --   1. Specified by user directly.
7204     --      a. with existent inventory_item_id -- GOOD.
7205     --      b. with nonexistent inventory_item_id -- BAD -- try getting it from xref
7206     --      c. with no inventory_item_id, some information on item number or segments
7207     --         c.1. is resolved to existent inventory_item_id -- GOOD
7208     --         c.2. can not resolve to existent inventory_item_id -- inventory_item_id is still null -- try getting it from xref
7209     --      d. with no PDH item key information at all -- inventory_item_id is null -- try getting it from xref
7210     --   2. Resolved from 'SYNC' -- may have inventory_item_id resolved. GOOD
7211     --                           -- may have a null inventory_item_id -- try getting it from xref
7212 
7213     -- CREATE:
7214     --   1. Specified by user directly.
7215     --   2. Resolved from 'SYNC'
7216     --      a. with nonexistent inventory_item_id
7217     --      b. with no inventory_item_id, some information on item number or segments which can not resolve to existent inventory_item_id
7218     --      c. with no PDH item key information at all.
7219     l_party_name := Get_Current_Party_Name;
7220 
7221     -- getting security predicate
7222     EGO_DATA_SECURITY.get_security_predicate(
7223       p_api_version      => 1.0
7224      ,p_function         => 'EGO_VIEW_SS_ITEM_XREFS'
7225      ,p_object_name      => 'EGO_ITEM'
7226      ,p_user_name        => l_party_name
7227      ,p_statement_type   => 'EXISTS'
7228      ,p_pk1_alias        => 'XREF.INVENTORY_ITEM_ID'
7229      ,p_pk2_alias        => l_org_id
7230      ,x_predicate        => l_security_predicate
7231      ,x_return_status    => l_return_status
7232     );
7233 
7234     l_security_predicate := NVL(l_security_predicate, '1=1');
7235 
7236     l_sql := q'#
7237     UPDATE
7238         MTL_SYSTEM_ITEMS_INTERFACE MSII
7239     SET TRANSACTION_TYPE = UPPER( TRANSACTION_TYPE )
7240       , INVENTORY_ITEM_ID =
7241                   (SELECT INVENTORY_ITEM_ID
7242                    FROM MTL_CROSS_REFERENCES_B XREF
7243                    WHERE XREF.CROSS_REFERENCE_TYPE = 'SS_ITEM_XREF' AND
7244                         XREF.CROSS_REFERENCE = MSII.SOURCE_SYSTEM_REFERENCE AND
7245                         XREF.SOURCE_SYSTEM_ID = MSII.SOURCE_SYSTEM_ID AND
7246                         SYSDATE BETWEEN NVL(XREF.START_DATE_ACTIVE, SYSDATE - 1) AND NVL(XREF.END_DATE_ACTIVE, SYSDATE + 1) AND #'
7247                         || l_security_predicate || q'# AND
7248                         ROWNUM < = 1)
7249     WHERE
7250         SET_PROCESS_ID = :p_data_set_id AND
7251         PROCESS_FLAG = 0 AND
7252         ORGANIZATION_ID = :l_org_id AND
7253         (  CONFIRM_STATUS IS NULL
7254         OR CONFIRM_STATUS = '#'||G_FAKE_CONF_STATUS_FLAG||q'#'
7255         )
7256         AND
7257         ( INVENTORY_ITEM_ID IS NULL OR NOT EXISTS
7258           (SELECT 1
7259             FROM MTL_SYSTEM_ITEMS_B
7260            WHERE INVENTORY_ITEM_ID = MSII.INVENTORY_ITEM_ID
7261           ) )
7262         AND UPPER( TRANSACTION_TYPE ) = 'UPDATE' #';
7263 
7264     execute immediate l_sql using p_data_set_id, l_org_id;
7265     Debug_Conc_Log( 'Resolve_SSXref_on_Data_load - Source System batch, resolved xrefs. Rows touched: ' || SQL%ROWCOUNT );
7266     -- determine if import policy applies to a source system item:
7267     -- the revision import policy should not apply if the user has given us a
7268     -- rev code or id in either EGO_ITM_USR_ATTR_INTRFC or MTL_ITEM_REVISIONS_INTERFACE: We set it to 'S' meaning specific.
7269     -- however, if the rev import policy is set to Specific already, we need to verify that
7270     -- the user has given us a rev code or id in either EGO_ITM_USR_ATTR_INTRFC or MTL_ITEM_REVISIONS_INTERFACE.
7271     UPDATE MTL_SYSTEM_ITEMS_INTERFACE MSII
7272     SET REVISION_IMPORT_POLICY =
7273         CASE
7274         WHEN EXISTS -- check the revision interface table
7275             (
7276             SELECT NULL
7277             FROM MTL_ITEM_REVISIONS_INTERFACE
7278             WHERE SET_PROCESS_ID = MSII.SET_PROCESS_ID
7279                 AND SOURCE_SYSTEM_ID = MSII.SOURCE_SYSTEM_ID
7280                 AND SOURCE_SYSTEM_REFERENCE = MSII.SOURCE_SYSTEM_REFERENCE
7281                 AND ORGANIZATION_ID = MSII.ORGANIZATION_ID
7282                 AND PROCESS_FLAG = MSII.PROCESS_FLAG
7283                 AND
7284                 (
7285                     REVISION_ID IS NOT NULL
7286                     OR REVISION IS NOT NULL
7287                 )
7288             )
7289             THEN 'S'
7290         WHEN EXISTS -- check the user attrs interface table
7291             (
7292             SELECT NULL
7293             FROM EGO_ITM_USR_ATTR_INTRFC USR_ATTR
7294             WHERE DATA_SET_ID = MSII.SET_PROCESS_ID
7295                 AND SOURCE_SYSTEM_ID = MSII.SOURCE_SYSTEM_ID
7296                 AND SOURCE_SYSTEM_REFERENCE = MSII.SOURCE_SYSTEM_REFERENCE
7297                 AND ORGANIZATION_ID = MSII.ORGANIZATION_ID
7298                 AND PROCESS_STATUS = MSII.PROCESS_FLAG
7299                 AND
7300                 (
7301                     REVISION_ID IS NOT NULL
7302                     OR REVISION IS NOT NULL
7303                 )
7304             )
7305             THEN 'S'
7306         ELSE NULL
7307         END
7308     WHERE SET_PROCESS_ID = p_data_set_id
7309        AND ORGANIZATION_ID = l_org_id
7310        AND PROCESS_FLAG = 0
7311        AND ( REVISION_IMPORT_POLICY = 'S' OR REVISION_IMPORT_POLICY IS NULL )
7312        --AND CONFIRM_STATUS IS NULL
7313        ;
7314     Debug_Conc_Log( 'Resolve_SSXref_on_Data_load - Source System batch, done resolving item import policy' );
7315 
7316     -- We will also try to harmonize CONFIRM_STATUS, TRANSACTION_TYPE with information the user provides on INVENTORY_ITEMID or
7317     -- ITEM_NUMBER, segments, et.al.
7318     -- CONFIRM_STATUS can have the following values: CN (confirmed new), CC (confirmed xref), CM (confirmed match),
7319     -- US (unconfirmed single match), UM (unconfirmed multiple match), UN (unconfirmed no match), EX (excluded), null.
7320     -- See spec (EGOVIMPS.pls) constants for list of confirm status values.
7321     -- Bug: 5458886 - If batch is cross references only batch, then New Item should not be allowed
7322     UPDATE -- for non-fake rows
7323         MTL_SYSTEM_ITEMS_INTERFACE MSII
7324       SET
7325         CONFIRM_STATUS =
7326         CASE
7327             WHEN UPPER( TRANSACTION_TYPE ) = G_TRANS_TYPE_CREATE AND l_import_xref_only = 'N' THEN G_CONF_NEW
7328             WHEN INVENTORY_ITEM_ID IS NOT NULL THEN G_CONF_XREF -- TRANSACTION_TYPE is 'UPDATE'
7329             ELSE G_UNCONF_NONE_MATCH
7330         END
7331       , TRANSACTION_TYPE = UPPER( TRANSACTION_TYPE )
7332     WHERE
7333         SET_PROCESS_ID = p_data_set_id AND
7334         PROCESS_FLAG = 0 AND
7335         ORGANIZATION_ID = l_org_id AND
7336         CONFIRM_STATUS IS NULL;
7337 
7338     UPDATE -- for fake rows
7339         MTL_SYSTEM_ITEMS_INTERFACE MSII
7340       SET
7341         CONFIRM_STATUS =
7342         CASE
7343             WHEN UPPER( TRANSACTION_TYPE ) = G_TRANS_TYPE_CREATE AND l_import_xref_only = 'N' THEN G_CONF_NEW
7344             WHEN INVENTORY_ITEM_ID IS NOT NULL THEN G_CONF_XREF_FAKE -- TRANSACTION_TYPE is 'UPDATE'
7345             ELSE G_UNCONF_NO_MATCH_FAKE
7346         END
7347       , TRANSACTION_TYPE = UPPER( TRANSACTION_TYPE )
7348     WHERE
7349         SET_PROCESS_ID = p_data_set_id AND
7350         PROCESS_FLAG = 0 AND
7351         ORGANIZATION_ID = l_org_id AND
7352         CONFIRM_STATUS = G_FAKE_CONF_STATUS_FLAG;
7353 
7354     -- update inventory_item_id to make sure their existence makes sense
7355     UPDATE
7356         MTL_SYSTEM_ITEMS_INTERFACE MSII
7357     SET
7358         INVENTORY_ITEM_ID =
7359         CASE
7360             WHEN CONFIRM_STATUS IN ( G_CONF_XREF, G_CONF_MATCH, G_UNCONF_SIGL_MATCH, G_UNCONF_MULT_MATCH
7361                                    , G_CONF_XREF_FAKE, G_CONF_MATCH_FAKE, G_UNCONF_SINGLE_MATCH_FAKE, G_UNCONF_MULTI_MATCH_FAKE )
7362                 THEN INVENTORY_ITEM_ID
7363             -- if it's 'CN', 'UN', 'EX' or NULL, erase
7364             ELSE NULL
7365         END
7366     WHERE
7367         SET_PROCESS_ID = p_data_set_id AND
7368         PROCESS_FLAG = 0 AND
7369         ORGANIZATION_ID = l_org_id;
7370 
7371     Debug_Conc_Log( 'Resolve_SSXref_on_Data_load - Source System batch, done resolving confirm status' );
7372     -- for all records where item_catalog_group_name is present and item_catalog_group_id is not present
7373     -- update the item_catalog_group_id
7374     UPDATE
7375       MTL_SYSTEM_ITEMS_INTERFACE MSII
7376       SET ITEM_CATALOG_GROUP_ID = (SELECT MICG.ITEM_CATALOG_GROUP_ID
7377                                    FROM MTL_ITEM_CATALOG_GROUPS_B_KFV MICG
7378                                    WHERE MICG.CONCATENATED_SEGMENTS = MSII.ITEM_CATALOG_GROUP_NAME)
7379     WHERE MSII.SET_PROCESS_ID = p_data_set_id
7380       AND MSII.PROCESS_FLAG = 0
7381       AND MSII.ORGANIZATION_ID = l_org_id
7382       AND MSII.CONFIRM_STATUS IN ( G_CONF_NEW, G_CONF_XREF, G_CONF_MATCH, G_CONF_XREF_FAKE, G_CONF_MATCH_FAKE  )
7383       AND MSII.ITEM_CATALOG_GROUP_ID IS NULL
7384       AND MSII.ITEM_CATALOG_GROUP_NAME IS NOT NULL;
7385 
7386     Debug_Conc_Log('Resolve_SSXref_on_Data_load - After Updating Item Catalog Group ID' );
7387 
7388 
7389     IF FND_API.G_TRUE = p_commit THEN
7390        COMMIT;
7391        Debug_Conc_Log( 'Resolve_SSXref_on_Data_load - Source System batch, committed' );
7392     END IF;
7393  EXCEPTION
7394     WHEN NO_DATA_FOUND THEN
7395       IF FND_API.G_TRUE = p_commit THEN
7396           COMMIT;
7397       END IF;
7398       RETURN;
7399 
7400  END Resolve_SSXref_on_Data_load;
7401 
7402 
7403   /*
7404    * This method cleans up the row identifiers before the actual import process starts
7405    * Here we group the rows based on item_number or source_system_reference
7406    */
7407   PROCEDURE CLEAN_UP_UDA_ROW_IDENTS_PRE( p_batch_id             IN NUMBER,
7408                                          p_process_status       IN NUMBER,
7409                                          p_commit               IN VARCHAR2 DEFAULT FND_API.G_TRUE
7410                                        )
7411   IS
7412     CURSOR c_unmerged_rows(cp_ss_id IN NUMBER) IS
7413       SELECT ROW_IDENTIFIER FROM
7414       (
7415         SELECT
7416           ROW_IDENTIFIER,
7417           COUNT( DISTINCT ROW_IDENTIFIER )
7418                      OVER ( PARTITION BY
7419                               NVL(SOURCE_SYSTEM_ID, cp_ss_id),
7420                               NVL(ITEM_NUMBER, SOURCE_SYSTEM_REFERENCE),
7421                               ATTR_GROUP_INT_NAME,
7422                               ATTR_INT_NAME,
7423                               DATA_LEVEL_ID,
7424                               PK1_VALUE,
7425                               PK2_VALUE,
7426                               PK3_VALUE,
7427                               PK4_VALUE,
7428                               PK5_VALUE,
7429                               ORGANIZATION_ID,
7430                               NVL( ATTR_GROUP_TYPE, G_DEFAULT_ATTR_GROUP_TYPE )
7431                           ) cnt
7432         FROM EGO_ITM_USR_ATTR_INTRFC eiuai
7433         WHERE DATA_SET_ID = p_batch_id
7434           AND PROCESS_STATUS = p_process_status
7435           AND (ITEM_NUMBER IS NOT NULL OR SOURCE_SYSTEM_REFERENCE IS NOT NULL)
7436           AND DATA_LEVEL_ID IS NOT NULL
7437           AND EXISTS( SELECT NULL
7438                       FROM EGO_FND_DSC_FLX_CTX_EXT FL_CTX_EXT
7439                       WHERE FL_CTX_EXT.DESCRIPTIVE_FLEXFIELD_NAME    = NVL( eiuai.ATTR_GROUP_TYPE, G_DEFAULT_ATTR_GROUP_TYPE )
7440                         AND FL_CTX_EXT.APPLICATION_ID                = 431
7441                         AND FL_CTX_EXT.DESCRIPTIVE_FLEX_CONTEXT_CODE = eiuai.ATTR_GROUP_INT_NAME
7442                         AND FL_CTX_EXT.MULTI_ROW                     = 'N'
7443                     )
7444       )
7445       WHERE CNT > 1;
7446 
7447 
7448     CURSOR c_intf_recs(cp_ss_id IN NUMBER) IS
7449       SELECT ROW_ID, MAX_ROW_IDENTIFIER FROM
7450       (
7451         SELECT
7452           ROWID ROW_ID,
7453           COUNT( DISTINCT ROW_IDENTIFIER ) OVER ( PARTITION BY
7454                               NVL(SOURCE_SYSTEM_ID, cp_ss_id),
7455                               NVL(ITEM_NUMBER, SOURCE_SYSTEM_REFERENCE),
7456                               ATTR_GROUP_INT_NAME,
7457                               DATA_LEVEL_ID,
7458                               PK1_VALUE,
7459                               PK2_VALUE,
7460                               PK3_VALUE,
7461                               PK4_VALUE,
7462                               PK5_VALUE,
7463                               ORGANIZATION_ID,
7464                               NVL( ATTR_GROUP_TYPE, G_DEFAULT_ATTR_GROUP_TYPE )
7465                           ) cnt,
7466           MAX( ROW_IDENTIFIER ) OVER ( PARTITION BY
7467                                           NVL(SOURCE_SYSTEM_ID, cp_ss_id),
7468                                           NVL(ITEM_NUMBER, SOURCE_SYSTEM_REFERENCE),
7469                                           ATTR_GROUP_INT_NAME,
7470                                           DATA_LEVEL_ID,
7471                                           PK1_VALUE,
7472                                           PK2_VALUE,
7473                                           PK3_VALUE,
7474                                           PK4_VALUE,
7475                                           PK5_VALUE,
7476                                           ORGANIZATION_ID,
7477                                           NVL( ATTR_GROUP_TYPE, G_DEFAULT_ATTR_GROUP_TYPE )
7478                                      ) MAX_ROW_IDENTIFIER
7479         FROM EGO_ITM_USR_ATTR_INTRFC eiuai
7480         WHERE DATA_SET_ID = p_batch_id
7481           AND PROCESS_STATUS = p_process_status
7482           AND (ITEM_NUMBER IS NOT NULL OR SOURCE_SYSTEM_REFERENCE IS NOT NULL)
7483           AND DATA_LEVEL_ID IS NOT NULL
7484           AND EXISTS( SELECT NULL
7485                       FROM EGO_FND_DSC_FLX_CTX_EXT FL_CTX_EXT
7486                       WHERE FL_CTX_EXT.DESCRIPTIVE_FLEXFIELD_NAME    = NVL( eiuai.ATTR_GROUP_TYPE, G_DEFAULT_ATTR_GROUP_TYPE )
7487                         AND FL_CTX_EXT.APPLICATION_ID                = 431
7488                         AND FL_CTX_EXT.DESCRIPTIVE_FLEX_CONTEXT_CODE = eiuai.ATTR_GROUP_INT_NAME
7489                         AND FL_CTX_EXT.MULTI_ROW                     = 'N'
7490                     )
7491       )
7492       WHERE CNT > 1;
7493 
7494     CURSOR c_error_case_cursor IS
7495       SELECT DISTINCT
7496         ORGANIZATION_ID,
7497         ITEM_NUMBER,
7498         SOURCE_SYSTEM_REFERENCE,
7499         INVENTORY_ITEM_ID,
7500         ATTR_GROUP_INT_NAME,
7501         TRANSACTION_ID
7502      FROM EGO_ITM_USR_ATTR_INTRFC
7503      WHERE DATA_SET_ID = p_batch_id
7504        AND PROCESS_STATUS = 3.475;
7505 
7506     l_msg_text               VARCHAR2(4000);
7507     dumm_status              VARCHAR2(100);
7508     l_user_id                NUMBER := FND_GLOBAL.USER_ID;
7509     l_login_id               NUMBER := FND_GLOBAL.LOGIN_ID;
7510     l_prog_appid             NUMBER := FND_GLOBAL.PROG_APPL_ID;
7511     l_prog_id                NUMBER := FND_GLOBAL.CONC_PROGRAM_ID;
7512     l_request_id             NUMBER := FND_GLOBAL.CONC_REQUEST_ID;
7513     l_err_text               VARCHAR2(4000);
7514 
7515     TYPE ROW_IDS IS TABLE OF ROWID INDEX BY BINARY_INTEGER;
7516     TYPE ROW_IDENTIFIERS IS TABLE OF NUMBER INDEX BY BINARY_INTEGER;
7517     l_unmerged_row_idents  ROW_IDENTIFIERS;
7518 
7519     l_row_ids              ROW_IDS;
7520     l_row_idents           ROW_IDENTIFIERS;
7521     l_ss_id                NUMBER;
7522   BEGIN
7523     Debug_Conc_Log('Clean_Up_UDA_Row_Idents_Pre - Starting');
7524     BEGIN
7525       SELECT SOURCE_SYSTEM_ID INTO l_ss_id
7526       FROM EGO_IMPORT_BATCHES_B
7527       WHERE BATCH_ID = p_batch_id;
7528     EXCEPTION WHEN NO_DATA_FOUND THEN
7529       l_ss_id := GET_PDH_SOURCE_SYSTEM_ID();
7530     END;
7531 
7532     Debug_Conc_Log('Clean_Up_UDA_Row_Idents_Pre - Updating item_number and revision, l_ss_id='||l_ss_id);
7533     UPDATE EGO_ITM_USR_ATTR_INTRFC eiuai
7534     SET ITEM_NUMBER = (SELECT CONCATENATED_SEGMENTS
7535                        FROM MTL_SYSTEM_ITEMS_KFV
7536                        WHERE INVENTORY_ITEM_ID = eiuai.INVENTORY_ITEM_ID
7537                          AND ORGANIZATION_ID = eiuai.ORGANIZATION_ID)
7538     WHERE DATA_SET_ID     = p_batch_id
7539       AND PROCESS_STATUS  = p_process_status
7540       AND INVENTORY_ITEM_ID IS NOT NULL
7541       AND ITEM_NUMBER       IS NULL;
7542 
7543     UPDATE EGO_ITM_USR_ATTR_INTRFC eiuai
7544     SET REVISION = ( SELECT R.REVISION
7545                      FROM MTL_ITEM_REVISIONS_B R
7546                      WHERE R.REVISION_ID = eiuai.REVISION_ID
7547                    )
7548     WHERE DATA_SET_ID     = p_batch_id
7549       AND PROCESS_STATUS  = p_process_status
7550       AND REVISION_ID     IS NOT NULL
7551       AND REVISION        IS NULL;
7552 
7553     Debug_Conc_Log('Clean_Up_UDA_Row_Idents_Pre - Erroring out Unmerged Rows' );
7554     OPEN c_unmerged_rows(l_ss_id);
7555     LOOP
7556       FETCH c_unmerged_rows BULK COLLECT INTO l_unmerged_row_idents LIMIT 1000;
7557       Debug_Conc_Log('Clean_Up_UDA_Row_Idents_Pre - fetched '||l_unmerged_row_idents.Count||' rows, ');
7558 
7559       FORALL idx IN l_unmerged_row_idents.FIRST..l_unmerged_row_idents.LAST
7560         UPDATE EGO_ITM_USR_ATTR_INTRFC
7561           SET process_status = 3.475
7562         WHERE DATA_SET_ID    = p_batch_id
7563           AND PROCESS_STATUS = p_process_status
7564           AND ROW_IDENTIFIER = l_unmerged_row_idents(idx);
7565       Debug_Conc_Log('Clean_Up_UDA_Row_Idents_Pre - Errored - '||SQL%ROWCOUNT||' rows');
7566       EXIT WHEN c_unmerged_rows%NOTFOUND;
7567     END LOOP;
7568     Debug_Conc_Log('Clean_Up_UDA_Row_Idents_Pre - Done Erroring unmerged rows');
7569     CLOSE c_unmerged_rows;
7570 
7571     Debug_Conc_Log('Clean_Up_UDA_Row_Idents_Pre - Logging errors for Errored out unmerged rows');
7572     FOR i IN c_error_case_cursor LOOP
7573       FND_MESSAGE.SET_NAME('EGO', 'EGO_EF_IDENTICAL_ROWS_ERR');
7574       FND_MESSAGE.SET_TOKEN('AG_NAME', i.ATTR_GROUP_INT_NAME);
7575       l_msg_text := FND_MESSAGE.GET;
7576       dumm_status  := INVPUOPI.mtl_log_interface_err(
7577                               i.ORGANIZATION_ID
7578                              ,l_user_id
7579                              ,l_login_id
7580                              ,l_prog_appid
7581                              ,l_prog_id
7582                              ,l_request_id
7583                              ,i.TRANSACTION_ID
7584                              ,l_msg_text
7585                              ,'ATTR_GROUP_INT_NAME'
7586                              ,'EGO_ITM_USR_ATTR_INTRFC'
7587                              ,'INV_IOI_ERR'
7588                              ,l_err_text);
7589     END LOOP;
7590     Debug_Conc_Log('Clean_Up_UDA_Row_Idents_Pre - Done Logging errors for Errored out unmerged rows');
7591 
7592     UPDATE EGO_ITM_USR_ATTR_INTRFC
7593     SET
7594       PROCESS_STATUS = 3,
7595       REQUEST_ID     = l_request_id
7596     WHERE DATA_SET_ID    = p_batch_id
7597       AND PROCESS_STATUS = 3.475;
7598 
7599     Debug_Conc_Log('Clean_Up_UDA_Row_Idents_Pre - Done updating rows to 3');
7600 
7601     -- work around the following case by setting the row identifier to the same value
7602     --   item ids  attr_grp attr row_ident value
7603     --     xyz     item_sr  one  1         x
7604     --     xyz     item_sr  two  2         y
7605     -- UDA loader code throws an error ...
7606     Debug_Conc_Log('Clean_Up_UDA_Row_Idents_Pre - Updating row_identifiers to unique value where' );
7607     OPEN c_intf_recs(l_ss_id);
7608     LOOP
7609       FETCH c_intf_recs BULK COLLECT INTO l_row_ids, l_row_idents LIMIT 1000;
7610       Debug_Conc_Log('Clean_Up_UDA_Row_Idents_Pre - fetched '||l_unmerged_row_idents.Count||' rows, ');
7611 
7612       FORALL idx IN l_row_ids.FIRST..l_row_ids.LAST
7613         UPDATE EGO_ITM_USR_ATTR_INTRFC
7614           SET ROW_IDENTIFIER = l_row_idents(idx)
7615         WHERE ROWID = l_row_ids(idx);
7616       Debug_Conc_Log('Clean_Up_UDA_Row_Idents_Pre - Updated - '||SQL%ROWCOUNT||' rows');
7617       EXIT WHEN c_intf_recs%NOTFOUND;
7618     END LOOP;
7619     Debug_Conc_Log('Clean_Up_UDA_Row_Idents_Pre - Done updating row_identifiers');
7620     CLOSE c_intf_recs;
7621 
7622     IF FND_API.G_TRUE = p_commit THEN
7623       Debug_Conc_Log('Clean_Up_UDA_Row_Idents_Pre COMMITING');
7624       COMMIT;
7625     END IF;
7626   EXCEPTION WHEN OTHERS THEN
7627     IF c_unmerged_rows%ISOPEN THEN
7628       CLOSE c_unmerged_rows;
7629     END IF;
7630     IF c_intf_recs%ISOPEN THEN
7631       CLOSE c_intf_recs;
7632     END IF;
7633     Debug_Conc_Log('Clean_Up_UDA_Row_Idents_Pre Error - '||SQLERRM);
7634     RAISE;
7635   END CLEAN_UP_UDA_ROW_IDENTS_PRE;
7636 
7637 
7638   PROCEDURE CLEAN_UP_UDA_ROW_IDENTS_POST( p_batch_id             IN NUMBER,
7639                                           p_process_status       IN NUMBER,
7640                                           p_commit               IN VARCHAR2 DEFAULT FND_API.G_TRUE
7641                                         )
7642   IS
7643     CURSOR c_unmerged_rows IS
7644       SELECT ROW_IDENTIFIER FROM
7645       (
7646         SELECT
7647           ROW_IDENTIFIER,
7648           COUNT( DISTINCT ROW_IDENTIFIER )
7649                      OVER ( PARTITION BY
7650                               INVENTORY_ITEM_ID,
7651                               ATTR_GROUP_INT_NAME,
7652                               ATTR_INT_NAME,
7653                               DATA_LEVEL_ID,
7654                               PK1_VALUE,
7655                               PK2_VALUE,
7656                               PK3_VALUE,
7657                               PK4_VALUE,
7658                               PK5_VALUE,
7659                               ORGANIZATION_ID,
7660                               NVL( ATTR_GROUP_TYPE, G_DEFAULT_ATTR_GROUP_TYPE )
7661                           ) cnt
7662         FROM EGO_ITM_USR_ATTR_INTRFC eiuai
7663         WHERE DATA_SET_ID = p_batch_id
7664           AND PROCESS_STATUS = p_process_status
7665           AND INVENTORY_ITEM_ID IS NOT NULL
7666           AND DATA_LEVEL_ID IS NOT NULL
7667           AND EXISTS( SELECT NULL
7668                       FROM EGO_FND_DSC_FLX_CTX_EXT FL_CTX_EXT
7669                       WHERE FL_CTX_EXT.DESCRIPTIVE_FLEXFIELD_NAME    = NVL( eiuai.ATTR_GROUP_TYPE, G_DEFAULT_ATTR_GROUP_TYPE )
7670                         AND FL_CTX_EXT.APPLICATION_ID                = 431
7671                         AND FL_CTX_EXT.DESCRIPTIVE_FLEX_CONTEXT_CODE = eiuai.ATTR_GROUP_INT_NAME
7672                         AND FL_CTX_EXT.MULTI_ROW                     = 'N'
7673                     )
7674       )
7675       WHERE CNT > 1;
7676 
7677 
7678     CURSOR c_intf_recs IS
7679       SELECT ROW_ID, MAX_ROW_IDENTIFIER FROM
7680       (
7681         SELECT
7682           ROWID ROW_ID,
7683           COUNT( DISTINCT ROW_IDENTIFIER ) OVER ( PARTITION BY
7684                               INVENTORY_ITEM_ID,
7685                               ATTR_GROUP_INT_NAME,
7686                               DATA_LEVEL_ID,
7687                               PK1_VALUE,
7688                               PK2_VALUE,
7689                               PK3_VALUE,
7690                               PK4_VALUE,
7691                               PK5_VALUE,
7692                               ORGANIZATION_ID,
7693                               NVL( ATTR_GROUP_TYPE, G_DEFAULT_ATTR_GROUP_TYPE )
7694                           ) cnt,
7695           MAX( ROW_IDENTIFIER ) OVER ( PARTITION BY
7696                                           INVENTORY_ITEM_ID,
7697                                           ATTR_GROUP_INT_NAME,
7698                                           DATA_LEVEL_ID,
7699                                           PK1_VALUE,
7700                                           PK2_VALUE,
7701                                           PK3_VALUE,
7702                                           PK4_VALUE,
7703                                           PK5_VALUE,
7704                                           ORGANIZATION_ID,
7705                                           NVL( ATTR_GROUP_TYPE, G_DEFAULT_ATTR_GROUP_TYPE )
7706                                      ) MAX_ROW_IDENTIFIER
7707         FROM EGO_ITM_USR_ATTR_INTRFC eiuai
7708         WHERE DATA_SET_ID = p_batch_id
7709           AND PROCESS_STATUS = p_process_status
7710           AND INVENTORY_ITEM_ID IS NOT NULL
7711           AND DATA_LEVEL_ID IS NOT NULL
7712           AND EXISTS( SELECT NULL
7713                       FROM EGO_FND_DSC_FLX_CTX_EXT FL_CTX_EXT
7714                       WHERE FL_CTX_EXT.DESCRIPTIVE_FLEXFIELD_NAME    = NVL( eiuai.ATTR_GROUP_TYPE, G_DEFAULT_ATTR_GROUP_TYPE )
7715                         AND FL_CTX_EXT.APPLICATION_ID                = 431
7716                         AND FL_CTX_EXT.DESCRIPTIVE_FLEX_CONTEXT_CODE = eiuai.ATTR_GROUP_INT_NAME
7717                         AND FL_CTX_EXT.MULTI_ROW                     = 'N'
7718                     )
7719       )
7720       WHERE CNT > 1;
7721 
7722     CURSOR c_error_case_cursor IS
7723       SELECT DISTINCT
7724         ORGANIZATION_ID,
7725         ITEM_NUMBER,
7726         SOURCE_SYSTEM_REFERENCE,
7727         INVENTORY_ITEM_ID,
7728         ATTR_GROUP_INT_NAME,
7729         TRANSACTION_ID
7730      FROM EGO_ITM_USR_ATTR_INTRFC
7731      WHERE DATA_SET_ID = p_batch_id
7732        AND PROCESS_STATUS = 3.475;
7733 
7734     l_msg_text               VARCHAR2(4000);
7735     dumm_status              VARCHAR2(100);
7736     l_user_id                NUMBER := FND_GLOBAL.USER_ID;
7737     l_login_id               NUMBER := FND_GLOBAL.LOGIN_ID;
7738     l_prog_appid             NUMBER := FND_GLOBAL.PROG_APPL_ID;
7739     l_prog_id                NUMBER := FND_GLOBAL.CONC_PROGRAM_ID;
7740     l_request_id             NUMBER := FND_GLOBAL.CONC_REQUEST_ID;
7741     l_err_text               VARCHAR2(4000);
7742 
7743     TYPE ROW_IDS IS TABLE OF ROWID INDEX BY BINARY_INTEGER;
7744     TYPE ROW_IDENTIFIERS IS TABLE OF NUMBER INDEX BY BINARY_INTEGER;
7745     l_unmerged_row_idents  ROW_IDENTIFIERS;
7746 
7747     l_row_ids              ROW_IDS;
7748     l_row_idents           ROW_IDENTIFIERS;
7749   BEGIN
7750     Debug_Conc_Log('Clean_Up_UDA_Row_Idents_Post - Starting');
7751     Debug_Conc_Log('Clean_Up_UDA_Row_Idents_Post - Erroring out Unmerged Rows' );
7752     OPEN c_unmerged_rows;
7753     LOOP
7754       FETCH c_unmerged_rows BULK COLLECT INTO l_unmerged_row_idents LIMIT 1000;
7755       Debug_Conc_Log('Clean_Up_UDA_Row_Idents_Post - fetched '||l_unmerged_row_idents.Count||' rows, ');
7756 
7757       FORALL idx IN l_unmerged_row_idents.FIRST..l_unmerged_row_idents.LAST
7758         UPDATE EGO_ITM_USR_ATTR_INTRFC
7759           SET process_status = 3.475
7760         WHERE DATA_SET_ID    = p_batch_id
7761           AND PROCESS_STATUS = p_process_status
7762           AND ROW_IDENTIFIER = l_unmerged_row_idents(idx);
7763       Debug_Conc_Log('Clean_Up_UDA_Row_Idents_Post - Errored - '||SQL%ROWCOUNT||' rows');
7764       EXIT WHEN c_unmerged_rows%NOTFOUND;
7765     END LOOP;
7766     Debug_Conc_Log('Clean_Up_UDA_Row_Idents_Post - Done Erroring unmerged rows');
7767     CLOSE c_unmerged_rows;
7768 
7769     Debug_Conc_Log('Clean_Up_UDA_Row_Idents_Post - Logging errors for Errored out unmerged rows');
7770     FOR i IN c_error_case_cursor LOOP
7771       FND_MESSAGE.SET_NAME('EGO', 'EGO_EF_IDENTICAL_ROWS_ERR');
7772       FND_MESSAGE.SET_TOKEN('AG_NAME', i.ATTR_GROUP_INT_NAME);
7773       l_msg_text := FND_MESSAGE.GET;
7774       dumm_status  := INVPUOPI.mtl_log_interface_err(
7775                               i.ORGANIZATION_ID
7776                              ,l_user_id
7777                              ,l_login_id
7778                              ,l_prog_appid
7779                              ,l_prog_id
7780                              ,l_request_id
7781                              ,i.TRANSACTION_ID
7782                              ,l_msg_text
7783                              ,'ATTR_GROUP_INT_NAME'
7784                              ,'EGO_ITM_USR_ATTR_INTRFC'
7785                              ,'INV_IOI_ERR'
7786                              ,l_err_text);
7787     END LOOP;
7788     Debug_Conc_Log('Clean_Up_UDA_Row_Idents_Post - Done Logging errors for Errored out unmerged rows');
7789 
7790     UPDATE EGO_ITM_USR_ATTR_INTRFC
7791     SET
7792       PROCESS_STATUS = 3,
7793       REQUEST_ID     = l_request_id
7794     WHERE DATA_SET_ID    = p_batch_id
7795       AND PROCESS_STATUS = 3.475;
7796 
7797     Debug_Conc_Log('Clean_Up_UDA_Row_Idents_Post - Done updating rows to 3');
7798 
7799     -- work around the following case by setting the row identifier to the same value
7800     --   item ids  attr_grp attr row_ident value
7801     --     xyz     item_sr  one  1         x
7802     --     xyz     item_sr  two  2         y
7803     -- UDA loader code throws an error ...
7804     Debug_Conc_Log('Clean_Up_UDA_Row_Idents_Post - Updating row_identifiers to unique value where' );
7805     OPEN c_intf_recs;
7806     LOOP
7807       FETCH c_intf_recs BULK COLLECT INTO l_row_ids, l_row_idents LIMIT 1000;
7808       Debug_Conc_Log('Clean_Up_UDA_Row_Idents_Post - fetched '||l_unmerged_row_idents.Count||' rows, ');
7809 
7810       FORALL idx IN l_row_ids.FIRST..l_row_ids.LAST
7811         UPDATE EGO_ITM_USR_ATTR_INTRFC
7812           SET ROW_IDENTIFIER = l_row_idents(idx)
7813         WHERE ROWID = l_row_ids(idx);
7814       Debug_Conc_Log('Clean_Up_UDA_Row_Idents_Post - Updated - '||SQL%ROWCOUNT||' rows');
7815       EXIT WHEN c_intf_recs%NOTFOUND;
7816     END LOOP;
7817     Debug_Conc_Log('Clean_Up_UDA_Row_Idents_Post - Done updating row_identifiers');
7818     CLOSE c_intf_recs;
7819 
7820     IF FND_API.G_TRUE = p_commit THEN
7821       Debug_Conc_Log('Clean_Up_UDA_Row_Idents_Post COMMITING');
7822       COMMIT;
7823     END IF;
7824   EXCEPTION WHEN OTHERS THEN
7825     IF c_unmerged_rows%ISOPEN THEN
7826       CLOSE c_unmerged_rows;
7827     END IF;
7828     IF c_intf_recs%ISOPEN THEN
7829       CLOSE c_intf_recs;
7830     END IF;
7831     Debug_Conc_Log('Clean_Up_UDA_Row_Idents_Post Error - '||SQLERRM);
7832     RAISE;
7833   END CLEAN_UP_UDA_ROW_IDENTS_POST;
7834 
7835   /*
7836    * This method cleans up UDA row identifiers, ensuring that all single attr groups
7837    * are represented by only one row identifier in EGO_ITM_USR_ATTR_INTRFC
7838    *
7839    * Helper procedure for resolve_child_entities
7840    */
7841   PROCEDURE CLEAN_UP_UDA_ROW_IDENTS( p_batch_id             IN NUMBER,
7842                                      p_process_status       IN NUMBER,
7843                                      p_ignore_item_num_upd  IN VARCHAR2, --FND_API.G_TRUE
7844                                      p_commit               IN VARCHAR2 DEFAULT FND_API.G_TRUE
7845                                    )
7846   IS
7847   BEGIN
7848     Debug_Conc_Log('Clean_Up_UDA_Row_Idents - Starting');
7849     IF p_ignore_item_num_upd = FND_API.G_FALSE THEN
7850       Debug_Conc_Log('Clean_Up_UDA_Row_Idents - Calling CLEAN_UP_UDA_ROW_IDENTS_PRE');
7851       CLEAN_UP_UDA_ROW_IDENTS_PRE(p_batch_id       => p_batch_id,
7852                                   p_process_status => p_process_status,
7853                                   p_commit         => p_commit);
7854       Debug_Conc_Log('Clean_Up_UDA_Row_Idents - Done CLEAN_UP_UDA_ROW_IDENTS_PRE');
7855     ELSE
7856       Debug_Conc_Log('Clean_Up_UDA_Row_Idents - Calling CLEAN_UP_UDA_ROW_IDENTS_POST');
7857       CLEAN_UP_UDA_ROW_IDENTS_POST(p_batch_id       => p_batch_id,
7858                                    p_process_status => p_process_status,
7859                                    p_commit         => p_commit);
7860       Debug_Conc_Log('Clean_Up_UDA_Row_Idents - Done CLEAN_UP_UDA_ROW_IDENTS_POST');
7861     END IF;
7862   END CLEAN_UP_UDA_ROW_IDENTS;
7863 
7864  /*
7865   * This method populates the child entities with PK values.
7866   * This method populates the other interface tables like MTL_ITEM_REVISION_INTERFACE,
7867   * EGO_ITEM_PEOPLE_INTF, MTL_ITEM_CATEGORIES_INTERFACE, EGO_ITM_USR_ATTR_INTRFC etc.
7868   * with the inventory item id/number and organization id/code.
7869   */
7870   PROCEDURE Resolve_Child_Entities( p_data_set_id  IN  NUMBER
7871                                   , p_commit       IN  FLAG    DEFAULT FND_API.G_TRUE
7872                                   )
7873   IS
7874     CURSOR c_no_privilege_rows IS
7875       SELECT
7876         ROWID,
7877         SOURCE_SYSTEM_ID,
7878         SOURCE_SYSTEM_REFERENCE,
7879         ITEM_NUMBER,
7880         ORGANIZATION_CODE,
7881         INVENTORY_ITEM_ID,
7882         ORGANIZATION_ID,
7883         TRANSACTION_TYPE,
7884         TRANSACTION_ID
7885       FROM MTL_SYSTEM_ITEMS_INTERFACE MSII
7886       WHERE SET_PROCESS_ID = p_data_set_id
7887         AND PROCESS_FLAG = 33390;
7888 
7889 
7890 
7891     CURSOR c_old_xref_no_priv_row IS
7892       SELECT  KFV.CONCATENATED_SEGMENTS ITEM_NUMBER,
7893               MSII.ORGANIZATION_CODE,
7894               MSII.ORGANIZATION_ID,
7895               MSII.TRANSACTION_ID
7896       FROM    MTL_SYSTEM_ITEMS_B_KFV KFV,
7897               MTL_SYSTEM_ITEMS_INTERFACE MSII,
7898               MTL_CROSS_REFERENCES MCR
7899       WHERE   MSII.SET_PROCESS_ID          = p_data_set_id
7900               AND MCR.CROSS_REFERENCE_TYPE = 'SS_ITEM_XREF'
7901               AND MSII.SOURCE_SYSTEM_ID    = MCR.SOURCE_SYSTEM_ID
7902               AND MSII.ORGANIZATION_ID     = KFV.ORGANIZATION_ID
7903               AND MCR.CROSS_REFERENCE      = MSII.SOURCE_SYSTEM_REFERENCE
7904               AND MCR.INVENTORY_ITEM_ID    = KFV.INVENTORY_ITEM_ID
7905               AND SYSDATE BETWEEN NVL(MCR.START_DATE_ACTIVE, SYSDATE-1) AND NVL(MCR.END_DATE_ACTIVE, SYSDATE + 1)
7906               AND MSII.PROCESS_FLAG = 33391;
7907 
7908 
7909 
7910     l_msg_text               VARCHAR2(4000);
7911     dumm_status              VARCHAR2(100);
7912     l_user_id                NUMBER := FND_GLOBAL.USER_ID;
7913     l_login_id               NUMBER := FND_GLOBAL.LOGIN_ID;
7914     l_prog_appid             NUMBER := FND_GLOBAL.PROG_APPL_ID;
7915     l_prog_id                NUMBER := FND_GLOBAL.CONC_PROGRAM_ID;
7916     l_request_id             NUMBER := FND_GLOBAL.CONC_REQUEST_ID;
7917     l_err_text               VARCHAR2(4000);
7918     l_ss_id                  EGO_IMPORT_BATCHES_B.SOURCE_SYSTEM_ID%TYPE;
7919     l_org_id                 EGO_IMPORT_BATCHES_B.ORGANIZATION_ID%TYPE;
7920     l_item_id                NUMBER;
7921     l_revision               MTL_ITEM_REVISIONS_B.REVISION%TYPE;
7922     l_error                  BOOLEAN;
7923     l_import_policy          EGO_IMPORT_OPTION_SETS.REVISION_IMPORT_POLICY%TYPE;
7924 
7925     l_import_xref_only       EGO_IMPORT_OPTION_SETS.IMPORT_XREF_ONLY%TYPE;
7926     l_party_name             VARCHAR2(1000);
7927     l_security_predicate     VARCHAR2(4000);
7928     l_return_status          VARCHAR2(100);
7929     l_sql                    VARCHAR2(32000);
7930     l_enabled_for_data_pool  EGO_IMPORT_OPTION_SETS.ENABLED_FOR_DATA_POOL%TYPE;
7931     l_org                    VARCHAR2(100);
7932   BEGIN
7933     -- get the source_system_id for this batch
7934     Debug_Conc_Log( 'Resolve_Child_Entities START' );
7935     BEGIN
7936       SELECT
7937         BA.SOURCE_SYSTEM_ID,
7938         BA.ORGANIZATION_ID,
7939         NVL(OPT.REVISION_IMPORT_POLICY, 'L'),
7940         NVL(opt.IMPORT_XREF_ONLY, 'N'),
7941         NVL(opt.ENABLED_FOR_DATA_POOL, 'N')
7942       INTO l_ss_id, l_org_id, l_import_policy, l_import_xref_only, l_enabled_for_data_pool
7943       FROM EGO_IMPORT_BATCHES_B BA, EGO_IMPORT_OPTION_SETS OPT
7944       WHERE BA.BATCH_ID = p_data_set_id AND BA.BATCH_ID = OPT.BATCH_ID;
7945     EXCEPTION WHEN NO_DATA_FOUND THEN
7946       l_org := fnd_profile.value('EGO_USER_ORGANIZATION_CONTEXT');
7947       BEGIN
7948         SELECT mp.MASTER_ORGANIZATION_ID
7949         INTO l_org_id
7950         FROM MTL_PARAMETERS mp
7951         WHERE mp.ORGANIZATION_ID = TO_NUMBER(l_org);
7952       EXCEPTION WHEN OTHERS THEN
7953         l_org_id := NULL;
7954       END;
7955       l_ss_id := get_pdh_source_system_id();
7956       l_import_xref_only := 'N';
7957       l_enabled_for_data_pool := 'N';
7958       l_import_policy := NULL;
7959     END;
7960 
7961     -- no need to resolve child entities for a PDH batch
7962     -- no need to resolve child entities for a Non-PDH batch, if Import Only Cross References is true
7963     IF l_ss_id = get_pdh_source_system_id() THEN
7964       -- move fake rows to have the success process flag value
7965       -- so that they are not processed by IOI
7966       UPDATE MTL_SYSTEM_ITEMS_INTERFACE
7967       SET
7968           REQUEST_ID              = l_request_id
7969         , PROGRAM_APPLICATION_ID  = l_prog_appid
7970         , PROGRAM_ID              = l_prog_id
7971         , PROGRAM_UPDATE_DATE     = SYSDATE
7972         , PROCESS_FLAG            = CASE  -- bug 5283663: never leave fake rows in status 1
7973                                     WHEN  UPPER( TRANSACTION_TYPE ) <> G_TRANS_TYPE_CREATE   THEN 7
7974                                     ELSE  3
7975                                     END
7976       WHERE
7977           set_process_id  = p_data_set_id
7978       AND organization_id = l_org_id
7979       AND confirm_status  = G_FAKE_CONF_STATUS_FLAG
7980 --      AND UPPER( TRANSACTION_TYPE ) <> G_TRANS_TYPE_CREATE  -- bug 5283663: never leave fake rows in status 1
7981       ;
7982 
7983       Debug_Conc_Log('Resolve_Child_Entities - Calling Clean_Up_UDA_Row_Idents');
7984       Clean_Up_UDA_Row_Idents( p_batch_id            => p_data_set_id,
7985                                p_process_status      => 1,
7986                                p_ignore_item_num_upd => FND_API.G_FALSE,
7987                                p_commit              => FND_API.G_FALSE );
7988       Debug_Conc_Log('Resolve_Child_Entities - Clean_Up_UDA_Row_Idents Done.');
7989 
7990       Debug_Conc_Log('Resolve_Child_Entities - Resolving Style_Item_Flag');
7991       UPDATE MTL_SYSTEM_ITEMS_INTERFACE msii
7992       SET (STYLE_ITEM_FLAG, STYLE_ITEM_ID, INVENTORY_ITEM_ID) = (SELECT
7993                                                 DECODE(MAX(NVL(msik.STYLE_ITEM_FLAG, '$NULL$')),
7994                                                        '$NULL$', msii.STYLE_ITEM_FLAG,
7995                                                        NULL, msii.STYLE_ITEM_FLAG,
7996                                                        'N', 'N',
7997                                                        'Y', 'Y'
7998                                                       ),
7999                                                 NVL(MAX(msik.STYLE_ITEM_ID), msii.STYLE_ITEM_ID),
8000 						NVL(msii.INVENTORY_ITEM_ID, MAX(msik.INVENTORY_ITEM_ID))
8001                                               FROM MTL_SYSTEM_ITEMS_KFV msik, MTL_PARAMETERS mp
8002                                               WHERE (msii.INVENTORY_ITEM_ID = msik.INVENTORY_ITEM_ID
8003                                                   OR msii.ITEM_NUMBER = msik.CONCATENATED_SEGMENTS)
8004                                                 AND msik.ORGANIZATION_ID = mp.MASTER_ORGANIZATION_ID
8005                                                 AND msii.ORGANIZATION_ID = mp.ORGANIZATION_ID
8006                                              )
8007       WHERE SET_PROCESS_ID = p_data_set_id
8008         AND PROCESS_FLAG   = 1;
8009 
8010       Debug_Conc_Log('Resolve_Child_Entities - Done Resolving Style_Item_Flag, rows processed='||SQL%ROWCOUNT);
8011 
8012       Debug_Conc_Log('Resolve_Child_Entities END');
8013       IF FND_API.G_TRUE = p_commit THEN
8014         Debug_Conc_Log('Resolve_Child_Entities COMMITING');
8015         COMMIT;
8016       END IF;
8017       RETURN;
8018     END IF;
8019 
8020     l_party_name := Get_Current_Party_Name;
8021 
8022     -- getting security predicate
8023     EGO_DATA_SECURITY.get_security_predicate(
8024       p_api_version      => 1.0
8025      ,p_function         => 'EGO_EDIT_SS_ITEM_XREFS'
8026      ,p_object_name      => 'EGO_ITEM'
8027      ,p_user_name        => l_party_name
8028      ,p_statement_type   => 'EXISTS'
8029      ,p_pk1_alias        => 'APPLYSEC.INVENTORY_ITEM_ID'
8030      ,p_pk2_alias        => l_org_id
8031      ,x_predicate        => l_security_predicate
8032      ,x_return_status    => l_return_status
8033     );
8034 
8035     Debug_Conc_Log('Resolve_Child_Entities - Security Predicate = '||l_security_predicate);
8036     IF NVL(l_import_xref_only, 'N') = 'Y' THEN
8037       Debug_Conc_Log('Resolve_Child_Entities - Import Cross References Only is true' );
8038       IF l_security_predicate IS NULL THEN
8039         RETURN;
8040       ELSE
8041         Debug_Conc_Log('Resolve_Child_Entities - Checking data security');
8042         --  For CN case, if one is importing cross-references only, the new item would not be
8043         --  created. Thus, there's no need to check security on the cross-references.
8044 
8045         --  CC/CM:
8046         --   old link and new link are the same:
8047         l_sql := q'#
8048           UPDATE MTL_SYSTEM_ITEMS_INTERFACE MSII
8049           SET PROCESS_FLAG = 33390
8050           WHERE SET_PROCESS_ID = :p_data_set_id
8051             AND PROCESS_FLAG = 0
8052             AND ORGANIZATION_ID = :org_id
8053             AND CONFIRM_STATUS IN ('CC', 'CM', 'CFC', 'CFM')
8054             AND EXISTS
8055                     (SELECT 1
8056                      FROM MTL_CROSS_REFERENCES_VL APPLYSEC
8057                      WHERE APPLYSEC.CROSS_REFERENCE = MSII.SOURCE_SYSTEM_REFERENCE
8058                        AND APPLYSEC.SOURCE_SYSTEM_ID = MSII.SOURCE_SYSTEM_ID
8059                        AND APPLYSEC.CROSS_REFERENCE_TYPE = 'SS_ITEM_XREF'
8060                        AND APPLYSEC.INVENTORY_ITEM_ID = MSII.INVENTORY_ITEM_ID
8061                        AND (APPLYSEC.DESCRIPTION <> MSII.SOURCE_SYSTEM_REFERENCE_DESC OR
8062                            (APPLYSEC.DESCRIPTION IS NULL AND MSII.SOURCE_SYSTEM_REFERENCE_DESC IS NOT NULL))
8063                        AND SYSDATE BETWEEN  NVL(APPLYSEC.START_DATE_ACTIVE, SYSDATE-1) AND NVL(APPLYSEC.END_DATE_ACTIVE, SYSDATE + 1)
8064                        AND NOT #' || l_security_predicate || ' )';
8065 
8066         EXECUTE IMMEDIATE l_sql USING p_data_set_id, l_org_id;
8067 
8068         Debug_Conc_Log( 'Resolve_Child_Entities - After checking security on the link where old link and new link are the same and
8069                          source system reference desc is being updated');
8070         --  old link and new link are not the same:
8071         --     check edit privilege on old item link (if any)
8072         l_sql := q'#
8073           UPDATE MTL_SYSTEM_ITEMS_INTERFACE MSII
8074           SET PROCESS_FLAG = 33391
8075           WHERE SET_PROCESS_ID = :p_data_set_id
8076             AND PROCESS_FLAG = 0
8077             AND ORGANIZATION_ID = :org_id
8078             AND CONFIRM_STATUS IN ('CC', 'CM', 'CFC', 'CFM')
8079             AND EXISTS ( SELECT 1
8080                          FROM MTL_CROSS_REFERENCES_B APPLYSEC
8081                          WHERE APPLYSEC.CROSS_REFERENCE = MSII.SOURCE_SYSTEM_REFERENCE
8082                            AND APPLYSEC.SOURCE_SYSTEM_ID = MSII.SOURCE_SYSTEM_ID
8083                            AND APPLYSEC.CROSS_REFERENCE_TYPE = 'SS_ITEM_XREF'
8084                            AND APPLYSEC.INVENTORY_ITEM_ID <> MSII.INVENTORY_ITEM_ID
8085                            AND SYSDATE BETWEEN  NVL(APPLYSEC.START_DATE_ACTIVE, SYSDATE-1) AND NVL(APPLYSEC.END_DATE_ACTIVE, SYSDATE + 1)
8086                            AND NOT #' || l_security_predicate || ' )';
8087 
8088         EXECUTE IMMEDIATE l_sql USING p_data_set_id, l_org_id;
8089 
8090         Debug_Conc_Log( 'Resolve_Child_Entities - After checking security on old item link (if any) where old link and new link are not the same' );
8091         --  old link and new link are not the same:
8092         --     check edit privilege on new item link
8093         l_sql := q'#
8094           UPDATE MTL_SYSTEM_ITEMS_INTERFACE APPLYSEC
8095           SET PROCESS_FLAG = 33390
8096           WHERE SET_PROCESS_ID = :p_data_set_id
8097             AND PROCESS_FLAG = 0
8098             AND ORGANIZATION_ID = :org_id
8099             AND CONFIRM_STATUS IN ('CC', 'CM', 'CFC', 'CFM')
8100             AND NOT #' || l_security_predicate  || q'#
8101             AND APPLYSEC.INVENTORY_ITEM_ID IS NOT NULL
8102             AND LNNVL (APPLYSEC.INVENTORY_ITEM_ID =
8103                             (SELECT XREF.INVENTORY_ITEM_ID
8104                              FROM MTL_CROSS_REFERENCES_B XREF
8105                              WHERE XREF.CROSS_REFERENCE = APPLYSEC.SOURCE_SYSTEM_REFERENCE
8106                                AND XREF.SOURCE_SYSTEM_ID = APPLYSEC.SOURCE_SYSTEM_ID
8107                                AND XREF.CROSS_REFERENCE_TYPE = 'SS_ITEM_XREF'
8108                                AND SYSDATE BETWEEN NVL(XREF.START_DATE_ACTIVE, SYSDATE-1) AND NVL(XREF.END_DATE_ACTIVE, SYSDATE + 1))) #';
8109 
8110         EXECUTE IMMEDIATE l_sql USING p_data_set_id, l_org_id;
8111 
8112         Debug_Conc_Log( 'Resolve_Child_Entities - After checking security on new item link where old link and new link are not the same' );
8113 
8114         FOR i IN c_no_privilege_rows LOOP
8115           FND_MESSAGE.SET_NAME('EGO', 'EGO_NO_EDIT_XREF_PRIV');
8116           FND_MESSAGE.SET_TOKEN('ITEM', i.ITEM_NUMBER);
8117           FND_MESSAGE.SET_TOKEN('ORG', i.ORGANIZATION_CODE);
8118           l_msg_text := FND_MESSAGE.GET;
8119 
8120           dumm_status  := INVPUOPI.mtl_log_interface_err(
8121                                 i.ORGANIZATION_ID
8122                                ,l_user_id
8123                                ,l_login_id
8124                                ,l_prog_appid
8125                                ,l_prog_id
8126                                ,l_request_id
8127                                ,i.TRANSACTION_ID
8128                                ,l_msg_text
8129                                ,'SOURCE_SYSTEM_REFERENCE'
8130                                ,'MTL_SYSTEM_ITEMS_INTERFACE'
8131                                ,'INV_IOI_ERR'
8132                                ,l_err_text);
8133 
8134         END LOOP;
8135 
8136         FOR i IN c_old_xref_no_priv_row LOOP
8137           FND_MESSAGE.SET_NAME('EGO', 'EGO_NO_EDIT_XREF_PRIV');
8138           FND_MESSAGE.SET_TOKEN('ITEM', i.ITEM_NUMBER);
8139           FND_MESSAGE.SET_TOKEN('ORG', i.ORGANIZATION_CODE);
8140           l_msg_text := FND_MESSAGE.GET;
8141 
8142           dumm_status  := INVPUOPI.mtl_log_interface_err(
8143                           i.ORGANIZATION_ID
8144                          ,l_user_id
8145                          ,l_login_id
8146                          ,l_prog_appid
8147                          ,l_prog_id
8148                          ,l_request_id
8149                          ,i.TRANSACTION_ID
8150                          ,l_msg_text
8151                          ,'SOURCE_SYSTEM_REFERENCE'
8152                          ,'MTL_SYSTEM_ITEMS_INTERFACE'
8153                          ,'INV_IOI_ERR'
8154                          ,l_err_text);
8155         END LOOP;
8156 
8157         Debug_Conc_Log( 'Resolve_Child_Entities - After logging errors for records without privilege' );
8158 
8159         UPDATE MTL_SYSTEM_ITEMS_INTERFACE
8160         SET PROCESS_FLAG = 3
8161         WHERE SET_PROCESS_ID = p_data_set_id
8162           AND PROCESS_FLAG IN (33390, 33391)
8163           AND CONFIRM_STATUS IN ( 'CM', 'CC', 'CN', G_CONF_XREF_FAKE, G_CONF_MATCH_FAKE )
8164           AND ORGANIZATION_ID = l_org_id;
8165 
8166         Debug_Conc_Log( 'Resolve_Child_Entities - After erroring out records without privilege' );
8167 
8168         IF FND_API.G_TRUE = p_commit THEN
8169           Debug_Conc_Log( 'Resolve_Child_Entities COMMITING' );
8170           COMMIT;
8171         END IF;
8172 
8173         RETURN;
8174       END IF; --IF l_security_predicate IS NULL THEN
8175     END IF; --IF NVL(l_import_xref_only, 'N') = 'Y' THEN
8176 
8177     -- resolving transaction type for revisions
8178     UPDATE MTL_ITEM_REVISIONS_INTERFACE MIRI
8179     SET TRANSACTION_TYPE = (
8180          SELECT
8181            (CASE
8182               WHEN MSII.CONFIRM_STATUS = 'CN'
8183               THEN 'CREATE'
8184               WHEN (MSII.CONFIRM_STATUS IN ( 'CM', 'CC', G_CONF_XREF_FAKE, G_CONF_MATCH_FAKE )
8185                     AND EXISTS (SELECT NULL
8186                                 FROM MTL_ITEM_REVISIONS_B MIR
8187                                 WHERE MIR.INVENTORY_ITEM_ID = MSII.INVENTORY_ITEM_ID
8188                                   AND MIR.ORGANIZATION_ID = MIRI.ORGANIZATION_ID
8189                                   AND MIR.REVISION = MIRI.REVISION) )
8190               THEN 'UPDATE'
8191               ELSE 'CREATE'
8192             END)
8193          FROM MTL_SYSTEM_ITEMS_INTERFACE MSII
8194          WHERE MSII.SET_PROCESS_ID = p_data_set_id
8195            AND MSII.PROCESS_FLAG = 0
8196            AND MSII.CONFIRM_STATUS IN ('CN', 'CM', 'CC', G_CONF_XREF_FAKE, G_CONF_MATCH_FAKE)
8197            AND MSII.SOURCE_SYSTEM_ID = MIRI.SOURCE_SYSTEM_ID
8198            AND MSII.SOURCE_SYSTEM_REFERENCE = MIRI.SOURCE_SYSTEM_REFERENCE
8199            AND MSII.ORGANIZATION_ID = l_org_id
8200            AND ROWNUM = 1
8201         )
8202     WHERE MIRI.PROCESS_FLAG = 0
8203       AND MIRI.SET_PROCESS_ID = p_data_set_id
8204       AND EXISTS (SELECT NULL
8205                   FROM MTL_SYSTEM_ITEMS_INTERFACE MSII
8206                   WHERE MSII.SET_PROCESS_ID = p_data_set_id
8207                     AND MSII.PROCESS_FLAG = 0
8208                     AND MSII.CONFIRM_STATUS IN ( 'CN', 'CM', 'CC', G_CONF_XREF_FAKE, G_CONF_MATCH_FAKE )
8209                     AND MSII.SOURCE_SYSTEM_ID = MIRI.SOURCE_SYSTEM_ID
8210                     AND MSII.SOURCE_SYSTEM_REFERENCE = MIRI.SOURCE_SYSTEM_REFERENCE
8211                     AND MSII.ORGANIZATION_ID = l_org_id);
8212 
8213     Debug_Conc_Log('Resolve_Child_Entities - After resolving transaction_type for revisions' );
8214 
8215     -- update the confirm status to ready for all READY CN records
8216     UPDATE
8217       MTL_SYSTEM_ITEMS_INTERFACE MSII
8218       SET CONFIRM_STATUS = (
8219       CASE
8220         WHEN (MSII.DESCRIPTION IS NULL
8221               AND NOT EXISTS
8222                   (SELECT NULL
8223                    FROM MTL_ITEM_TEMPLATES_VL TEMP,
8224                      MTL_ITEM_TEMPL_ATTRIBUTES ATTR
8225                    WHERE ((MSII.TEMPLATE_ID IS NOT NULL AND TEMP.TEMPLATE_ID = MSII.TEMPLATE_ID)
8226                           OR (MSII.TEMPLATE_ID IS NULL AND TEMP.TEMPLATE_NAME = MSII.TEMPLATE_NAME)
8227                          )
8228                      AND (TEMP.CONTEXT_ORGANIZATION_ID = MSII.ORGANIZATION_ID OR TEMP.CONTEXT_ORGANIZATION_ID IS NULL)
8229                      AND TEMP.TEMPLATE_ID = ATTR.TEMPLATE_ID
8230                      AND ATTR.ENABLED_FLAG = 'Y'
8231                      AND ATTR.ATTRIBUTE_NAME = 'MTL_SYSTEM_ITEMS.DESCRIPTION'
8232                   )
8233               AND 'F' <>
8234                   (SELECT DECODE(MSII.STYLE_ITEM_FLAG, 'Y', 'ZZZ', (MAX(ICC.ITEM_DESC_GEN_METHOD) KEEP (DENSE_RANK FIRST ORDER BY LEVEL) ) ) AS ITEM_DESC_GEN_METHOD
8235                    FROM MTL_ITEM_CATALOG_GROUPS_B ICC
8236                    WHERE ICC.ITEM_DESC_GEN_METHOD IS NOT NULL
8237                      AND ICC.ITEM_DESC_GEN_METHOD <> 'I'
8238                    CONNECT BY PRIOR ICC.PARENT_CATALOG_GROUP_ID = ICC.ITEM_CATALOG_GROUP_ID
8239                    START WITH ICC.ITEM_CATALOG_GROUP_ID = MSII.ITEM_CATALOG_GROUP_ID
8240                   )
8241              )
8242         THEN CONFIRM_STATUS
8243         WHEN
8244         (MSII.ITEM_NUMBER IS NULL AND MSII.ITEM_CATALOG_GROUP_ID IS NULL)
8245         THEN CONFIRM_STATUS
8246         WHEN
8247         (    MSII.ITEM_CATALOG_GROUP_ID IS NOT NULL
8248          AND MSII.ITEM_NUMBER IS NULL
8249          AND (SELECT DECODE(MSII.STYLE_ITEM_FLAG, 'Y', 'ZZZ', (MAX(ICC.ITEM_NUM_GEN_METHOD) KEEP (DENSE_RANK FIRST ORDER BY LEVEL) ) ) AS ITEM_NUM_GEN_METHOD
8250               FROM MTL_ITEM_CATALOG_GROUPS_B ICC
8251               WHERE ICC.ITEM_NUM_GEN_METHOD IS NOT NULL
8252                 AND ICC.ITEM_NUM_GEN_METHOD <> 'I'
8253               CONNECT BY PRIOR ICC.PARENT_CATALOG_GROUP_ID = ICC.ITEM_CATALOG_GROUP_ID
8254               START WITH ICC.ITEM_CATALOG_GROUP_ID = MSII.ITEM_CATALOG_GROUP_ID
8255              ) NOT IN ('S', 'F')
8256         )
8257         THEN CONFIRM_STATUS
8258         ELSE CONFIRM_STATUS||'R'
8259       END
8260       )
8261     WHERE MSII.SET_PROCESS_ID = p_data_set_id
8262       AND MSII.PROCESS_FLAG = 0
8263       AND MSII.ORGANIZATION_ID = l_org_id
8264       AND MSII.CONFIRM_STATUS = 'CN';
8265 
8266     Debug_Conc_Log('Resolve_Child_Entities - After updating confirm status to CNR' );
8267     -- for all records with confirm_status = CN and item_number is null and is sequence generated
8268     -- update the item_number column.
8269 
8270     -- eletuchy:
8271     -- The item number must be generated here because the IOI doesn't know anything about source system references.
8272     -- Therefore, the parent-child linkages must be reported to IOI via inventory_item_id and item_number columns.
8273     -- For CN items with sequence-generated item_numbers, neither inventory_item_id not item_number contain any info,
8274     -- so IOI wouldn't know about the parent-child linkages unless the item number generation occurs here.
8275 
8276     -- dsakalle: For R12C, bug 6113606
8277     -- We are not honoring user entered item number values from R12C
8278     -- so the overwriting of item number must happen only from IOI
8279     /*
8280     UPDATE
8281       MTL_SYSTEM_ITEMS_INTERFACE MSII
8282       SET ITEM_NUMBER = EGO_IMPORT_PVT.GET_NEXT_ITEM_NUMBER(MSII.ITEM_CATALOG_GROUP_ID)
8283     WHERE MSII.ITEM_CATALOG_GROUP_ID IS NOT NULL
8284       AND MSII.ITEM_NUMBER IS NULL
8285       AND MSII.SET_PROCESS_ID = p_data_set_id
8286       AND MSII.PROCESS_FLAG = 0
8287       AND MSII.CONFIRM_STATUS = 'CNR'
8288       AND MSII.ORGANIZATION_ID = l_org_id
8289       AND 'S' = ( SELECT MAX( ICC.ITEM_NUM_GEN_METHOD ) KEEP (DENSE_RANK FIRST ORDER BY LEVEL)
8290                   FROM MTL_ITEM_CATALOG_GROUPS_B ICC
8291                   WHERE ICC.ITEM_NUM_GEN_METHOD IS NOT NULL
8292                     AND ICC.ITEM_NUM_GEN_METHOD <> 'I'
8293                   CONNECT BY PRIOR ICC.PARENT_CATALOG_GROUP_ID = ICC.ITEM_CATALOG_GROUP_ID
8294                     START WITH ICC.ITEM_CATALOG_GROUP_ID = MSII.ITEM_CATALOG_GROUP_ID
8295                 );
8296 
8297     Debug_Conc_Log('Resolve_Child_Entities - After updating Sequence Generated Item Numbers' );
8298     */
8299     -- update all records with confirm_status='CC', 'CM' to ready, where conditions are satisfied
8300     UPDATE
8301       MTL_SYSTEM_ITEMS_INTERFACE MSII
8302       SET CONFIRM_STATUS = (
8303       CASE
8304         WHEN
8305           (NVL(MSII.REVISION_IMPORT_POLICY, l_import_policy) = 'N' AND
8306             1 <> (SELECT COUNT(*)
8307                   FROM MTL_ITEM_REVISIONS_INTERFACE MIRI
8308                   WHERE MIRI.SET_PROCESS_ID = MSII.SET_PROCESS_ID
8309                     AND MIRI.PROCESS_FLAG = 0
8310                     AND MIRI.SOURCE_SYSTEM_ID = MSII.SOURCE_SYSTEM_ID
8311                     AND MIRI.SOURCE_SYSTEM_REFERENCE = MSII.SOURCE_SYSTEM_REFERENCE
8312                     AND MIRI.ORGANIZATION_ID = MSII.ORGANIZATION_ID
8313                     AND MIRI.REVISION IS NOT NULL
8314                     AND MIRI.EFFECTIVITY_DATE IS NOT NULL
8315                     AND UPPER(MIRI.TRANSACTION_TYPE) = 'CREATE'))
8316         THEN CONFIRM_STATUS
8317         ELSE CONFIRM_STATUS||'R'
8318       END
8319       )
8320     WHERE MSII.SET_PROCESS_ID = p_data_set_id
8321       AND MSII.PROCESS_FLAG = 0
8322       AND MSII.ORGANIZATION_ID = l_org_id
8323       AND MSII.CONFIRM_STATUS IN ('CC', 'CM');
8324 
8325     UPDATE
8326       MTL_SYSTEM_ITEMS_INTERFACE MSII
8327       SET CONFIRM_STATUS = (
8328       CASE
8329         WHEN ( NVL(MSII.REVISION_IMPORT_POLICY, l_import_policy) = 'N' AND
8330                1 <> (SELECT COUNT(*)
8331                   FROM MTL_ITEM_REVISIONS_INTERFACE MIRI
8332                   WHERE MIRI.SET_PROCESS_ID = MSII.SET_PROCESS_ID
8333                     AND MIRI.PROCESS_FLAG = 0
8334                     AND MIRI.SOURCE_SYSTEM_ID = MSII.SOURCE_SYSTEM_ID
8335                     AND MIRI.SOURCE_SYSTEM_REFERENCE = MSII.SOURCE_SYSTEM_REFERENCE
8336                     AND MIRI.ORGANIZATION_ID = MSII.ORGANIZATION_ID
8337                     AND MIRI.REVISION IS NOT NULL
8338                     AND MIRI.EFFECTIVITY_DATE IS NOT NULL
8339                     AND UPPER(MIRI.TRANSACTION_TYPE) = G_TRANS_TYPE_CREATE )
8340              )
8341         THEN CONFIRM_STATUS
8342         ELSE G_FAKE_MATCH_READY
8343       END
8344       )
8345     WHERE MSII.SET_PROCESS_ID = p_data_set_id
8346       AND MSII.PROCESS_FLAG = 0
8347       AND MSII.ORGANIZATION_ID = l_org_id
8348       AND MSII.CONFIRM_STATUS IN ( G_CONF_MATCH_FAKE, G_CONF_XREF_FAKE );
8349 
8350     Debug_Conc_Log('Resolve_Child_Entities - After updating confirm status to CMR or CCR' );
8351 
8352     IF l_security_predicate IS NOT NULL THEN
8353       Debug_Conc_Log('Resolve_Child_Entities - Need to check privilege' );
8354       -- For the confirmed new case, if there exists an active cross reference which you cannot break
8355        -- update process_flag to 33391
8356       l_sql := q'#
8357         UPDATE MTL_SYSTEM_ITEMS_INTERFACE MSII
8358         SET PROCESS_FLAG = 33391
8359         WHERE SET_PROCESS_ID = :p_data_set_id
8360           AND PROCESS_FLAG = 0
8361           AND ORGANIZATION_ID = :org_id
8362           AND CONFIRM_status = 'CNR'
8363           AND EXISTS ( SELECT 1 FROM MTL_CROSS_REFERENCES_B APPLYSEC
8364                        WHERE APPLYSEC.CROSS_REFERENCE = MSII.SOURCE_SYSTEM_REFERENCE
8365                          AND APPLYSEC.SOURCE_SYSTEM_ID = MSII.SOURCE_SYSTEM_ID
8366                          AND APPLYSEC.CROSS_REFERENCE_TYPE = 'SS_ITEM_XREF'
8367                          AND SYSDATE BETWEEN NVL(APPLYSEC.START_DATE_ACTIVE, SYSDATE-1) AND NVL(APPLYSEC.END_DATE_ACTIVE, SYSDATE + 1)
8368                          AND NOT #' || l_security_predicate || ' )';
8369 
8370       EXECUTE IMMEDIATE l_sql USING p_data_set_id, l_org_id;
8371 
8372       Debug_Conc_Log('Resolve_Child_Entities - After checking for CNR' );
8373       --  CC/CM:
8374       --   old link and new link are the same:
8375       l_sql := q'#
8376           UPDATE MTL_SYSTEM_ITEMS_INTERFACE MSII
8377           SET PROCESS_FLAG = 33390
8378           WHERE SET_PROCESS_ID = :p_data_set_id
8379             AND PROCESS_FLAG = 0
8380             AND ORGANIZATION_ID = :org_id
8381             AND CONFIRM_STATUS IN ('CCR', 'CMR', 'FMR' )
8382             AND EXISTS
8383                     (SELECT 1
8384                      FROM MTL_CROSS_REFERENCES_VL APPLYSEC
8385                      WHERE APPLYSEC.CROSS_REFERENCE = MSII.SOURCE_SYSTEM_REFERENCE
8386                        AND APPLYSEC.SOURCE_SYSTEM_ID = MSII.SOURCE_SYSTEM_ID
8387                        AND APPLYSEC.CROSS_REFERENCE_TYPE = 'SS_ITEM_XREF'
8388                        AND APPLYSEC.INVENTORY_ITEM_ID = MSII.INVENTORY_ITEM_ID
8389                        AND (APPLYSEC.DESCRIPTION <> MSII.SOURCE_SYSTEM_REFERENCE_DESC OR
8390                            (APPLYSEC.DESCRIPTION IS NULL AND MSII.SOURCE_SYSTEM_REFERENCE_DESC IS NOT NULL))
8391                        AND SYSDATE BETWEEN  NVL(APPLYSEC.START_DATE_ACTIVE, SYSDATE-1) AND NVL(APPLYSEC.END_DATE_ACTIVE, SYSDATE + 1)
8392                        AND NOT #' || l_security_predicate || ' )';
8393 
8394         EXECUTE IMMEDIATE l_sql USING p_data_set_id, l_org_id;
8395 
8396         Debug_Conc_Log( 'Resolve_Child_Entities - After checking security on the link where old link and new link are the same and
8397                          source system reference desc is being updated' );
8398         --  old link and new link are not the same:
8399         --     check edit privilege on old item link (if any)
8400         l_sql := q'#
8401           UPDATE MTL_SYSTEM_ITEMS_INTERFACE MSII
8402           SET PROCESS_FLAG = 33391
8403           WHERE SET_PROCESS_ID = :p_data_set_id
8404             AND PROCESS_FLAG = 0
8405             AND ORGANIZATION_ID = :org_id
8406             AND CONFIRM_STATUS IN ( 'CCR', 'CMR', 'FMR' )
8407             AND EXISTS ( SELECT 1
8408                          FROM MTL_CROSS_REFERENCES_B APPLYSEC
8409                          WHERE APPLYSEC.CROSS_REFERENCE = MSII.SOURCE_SYSTEM_REFERENCE
8410                            AND APPLYSEC.SOURCE_SYSTEM_ID = MSII.SOURCE_SYSTEM_ID
8411                            AND APPLYSEC.CROSS_REFERENCE_TYPE = 'SS_ITEM_XREF'
8412                            AND APPLYSEC.INVENTORY_ITEM_ID <> MSII.INVENTORY_ITEM_ID
8413                            AND SYSDATE BETWEEN  NVL(APPLYSEC.START_DATE_ACTIVE, SYSDATE-1) AND NVL(APPLYSEC.END_DATE_ACTIVE, SYSDATE + 1)
8414                            AND NOT #' || l_security_predicate || ' )';
8415 
8416         EXECUTE IMMEDIATE l_sql USING p_data_set_id, l_org_id;
8417 
8418         Debug_Conc_Log( 'Resolve_Child_Entities - After checking security on old item link (if any) where old link and new link are not the same' );
8419 
8420         --  old link and new link are not the same:
8421         --     check edit privilege on new item link
8422         l_sql := q'#
8423           UPDATE MTL_SYSTEM_ITEMS_INTERFACE APPLYSEC
8424           SET PROCESS_FLAG = 33390
8425           WHERE SET_PROCESS_ID = :p_data_set_id
8426             AND PROCESS_FLAG = 0
8427             AND ORGANIZATION_ID = :org_id
8428             AND CONFIRM_STATUS IN ( 'CCR', 'CMR', 'FMR' )
8429             AND NOT #' || l_security_predicate  || q'#
8430             AND APPLYSEC.INVENTORY_ITEM_ID IS NOT NULL
8431             AND LNNVL (APPLYSEC.INVENTORY_ITEM_ID =
8432                             (SELECT XREF.INVENTORY_ITEM_ID
8433                              FROM MTL_CROSS_REFERENCES_B XREF
8434                              WHERE XREF.CROSS_REFERENCE = APPLYSEC.SOURCE_SYSTEM_REFERENCE
8435                                AND XREF.SOURCE_SYSTEM_ID = APPLYSEC.SOURCE_SYSTEM_ID
8436                                AND XREF.CROSS_REFERENCE_TYPE = 'SS_ITEM_XREF'
8437                                AND SYSDATE BETWEEN NVL(XREF.START_DATE_ACTIVE, SYSDATE-1) AND NVL(XREF.END_DATE_ACTIVE, SYSDATE + 1))) #';
8438 
8439         EXECUTE IMMEDIATE l_sql USING p_data_set_id, l_org_id;
8440 
8441         Debug_Conc_Log( 'Resolve_Child_Entities - After checking security on new item link where old link and new link are not the same' );
8442 
8443         Debug_Conc_Log( 'Resolve_Child_Entities - After updating records without privilege to status 33390' );
8444 
8445       FOR i IN c_no_privilege_rows LOOP
8446         FND_MESSAGE.SET_NAME('EGO', 'EGO_NO_EDIT_XREF_PRIV');
8447         FND_MESSAGE.SET_TOKEN('ITEM', i.ITEM_NUMBER);
8448         FND_MESSAGE.SET_TOKEN('ORG', i.ORGANIZATION_CODE);
8449         l_msg_text := FND_MESSAGE.GET;
8450 
8451 
8452 
8453         dumm_status  := INVPUOPI.mtl_log_interface_err(
8454                               i.ORGANIZATION_ID
8455                              ,l_user_id
8456                              ,l_login_id
8457                              ,l_prog_appid
8458                              ,l_prog_id
8459                              ,l_request_id
8460                              ,i.TRANSACTION_ID
8461                              ,l_msg_text
8462                              ,'SOURCE_SYSTEM_REFERENCE'
8463                              ,'MTL_SYSTEM_ITEMS_INTERFACE'
8464                              ,'INV_IOI_ERR'
8465                              ,l_err_text);
8466       END LOOP;
8467 
8468       FOR i IN c_old_xref_no_priv_row LOOP
8469         FND_MESSAGE.SET_NAME('EGO', 'EGO_NO_EDIT_XREF_PRIV');
8470         FND_MESSAGE.SET_TOKEN('ITEM', i.ITEM_NUMBER);
8471         FND_MESSAGE.SET_TOKEN('ORG', i.ORGANIZATION_CODE);
8472         l_msg_text := FND_MESSAGE.GET;
8473 
8474         dumm_status  := INVPUOPI.mtl_log_interface_err(
8475                         i.ORGANIZATION_ID
8476                        ,l_user_id
8477                        ,l_login_id
8478                        ,l_prog_appid
8479                        ,l_prog_id
8480                        ,l_request_id
8481                        ,i.TRANSACTION_ID
8482                        ,l_msg_text
8483                        ,'SOURCE_SYSTEM_REFERENCE'
8484                        ,'MTL_SYSTEM_ITEMS_INTERFACE'
8485                        ,'INV_IOI_ERR'
8486                        ,l_err_text);
8487       END LOOP;
8488 
8489       Debug_Conc_Log('Resolve_Child_Entities - After logging errors for no privilege' );
8490     END IF; --IF l_security_predicate IS NOT NULL THEN
8491 
8492     -- ELETUCHY XXX: seems wasteful to overwrite transaction type to sync rather than update, no?
8493     UPDATE MTL_SYSTEM_ITEMS_INTERFACE
8494     SET PROCESS_FLAG = 1
8495       , TRANSACTION_TYPE =  CASE
8496                             WHEN CONFIRM_STATUS = 'CNR' THEN G_TRANS_TYPE_CREATE
8497                             ELSE G_TRANS_TYPE_UPDATE
8498                             END
8499       -- ELETUCHY Bug 5316904: Should not attempt to change ICC from source system batch
8500       , ITEM_CATALOG_GROUP_ID = CASE
8501                                 WHEN CONFIRM_STATUS = 'CNR' THEN ITEM_CATALOG_GROUP_ID
8502                                 ELSE NULL
8503                                 END
8504       , ITEM_CATALOG_GROUP_NAME =   CASE
8505                                     WHEN CONFIRM_STATUS = 'CNR' THEN ITEM_CATALOG_GROUP_NAME
8506                                     ELSE NULL
8507                                     END
8508     WHERE SET_PROCESS_ID = p_data_set_id
8509         AND PROCESS_FLAG = 0
8510         AND CONFIRM_STATUS IN ( 'CNR', 'CMR', 'CCR' )
8511         AND ORGANIZATION_ID = l_org_id;
8512 
8513     -- ELETUCHY: these fake rows will never be processed by IOI, so putting trans_type to UPDATE is reasonable
8514     UPDATE MTL_SYSTEM_ITEMS_INTERFACE
8515     SET PROCESS_FLAG     = 1,
8516         TRANSACTION_TYPE = G_TRANS_TYPE_UPDATE,
8517         CONFIRM_STATUS   = G_FAKE_CONF_STATUS_FLAG
8518     WHERE SET_PROCESS_ID = p_data_set_id
8519         AND PROCESS_FLAG = 0
8520         AND CONFIRM_STATUS = G_FAKE_MATCH_READY
8521         AND ORGANIZATION_ID = l_org_id;
8522 
8523     Debug_Conc_Log('Resolve_Child_Entities - Done with master item rows' );
8524 
8525     -- updating item_number, item_id from MSII table
8526     -- for child items
8527     UPDATE MTL_SYSTEM_ITEMS_INTERFACE MSII
8528     SET (PROCESS_FLAG, TRANSACTION_TYPE, INVENTORY_ITEM_ID, ITEM_NUMBER, ITEM_CATALOG_GROUP_ID, ITEM_CATALOG_GROUP_NAME, STYLE_ITEM_FLAG, STYLE_ITEM_ID ) =
8529         (SELECT
8530            1,
8531            (CASE
8532               WHEN MSII2.CONFIRM_STATUS = 'CNR'
8533               THEN 'CREATE'
8534               ELSE 'SYNC'
8535             END),
8536            MSII2.INVENTORY_ITEM_ID,
8537            MSII2.ITEM_NUMBER,
8538            MSII2.ITEM_CATALOG_GROUP_ID,
8539            MSII2.ITEM_CATALOG_GROUP_NAME,
8540            NVL(MSII.STYLE_ITEM_FLAG, MSII2.STYLE_ITEM_FLAG),
8541            NVL(MSII.STYLE_ITEM_ID, MSII2.STYLE_ITEM_ID)
8542          FROM MTL_SYSTEM_ITEMS_INTERFACE MSII2
8543          WHERE MSII2.SET_PROCESS_ID = p_data_set_id
8544            AND MSII2.PROCESS_FLAG = 1
8545            AND MSII2.SOURCE_SYSTEM_ID = MSII.SOURCE_SYSTEM_ID
8546            AND MSII2.SOURCE_SYSTEM_REFERENCE = MSII.SOURCE_SYSTEM_REFERENCE
8547            AND MSII2.CONFIRM_STATUS IN ( 'CNR', 'CMR', 'CCR', G_FAKE_CONF_STATUS_FLAG )
8548            AND MSII2.ORGANIZATION_ID = l_org_id
8549            AND ROWNUM = 1
8550         )
8551     WHERE MSII.PROCESS_FLAG = 0
8552       AND MSII.CONFIRM_STATUS IS NULL
8553       AND MSII.SET_PROCESS_ID = p_data_set_id
8554       AND EXISTS (SELECT NULL FROM MTL_PARAMETERS mp
8555                   WHERE mp.ORGANIZATION_ID = MSII.ORGANIZATION_ID
8556                     AND mp.MASTER_ORGANIZATION_ID = l_org_id
8557                     AND mp.MASTER_ORGANIZATION_ID <> mp.ORGANIZATION_ID
8558                  )
8559       AND EXISTS (SELECT NULL
8560                   FROM MTL_SYSTEM_ITEMS_INTERFACE MSII2
8561                   WHERE MSII2.SET_PROCESS_ID = p_data_set_id
8562                     AND MSII2.PROCESS_FLAG = 1
8563                     AND MSII2.CONFIRM_STATUS IN ( 'CNR', 'CMR', 'CCR', G_FAKE_CONF_STATUS_FLAG )
8564                     AND MSII2.SOURCE_SYSTEM_ID = MSII.SOURCE_SYSTEM_ID
8565                     AND MSII2.SOURCE_SYSTEM_REFERENCE = MSII.SOURCE_SYSTEM_REFERENCE
8566                     AND MSII2.ORGANIZATION_ID = l_org_id);
8567 
8568     Debug_Conc_Log('Resolve_Child_Entities - After resolving child items' );
8569 
8570     -- updating item_number, item_id from MSII table
8571     UPDATE MTL_ITEM_REVISIONS_INTERFACE MIRI
8572     SET (PROCESS_FLAG, TRANSACTION_TYPE, INVENTORY_ITEM_ID, ITEM_NUMBER) =
8573         (SELECT
8574            1,
8575            (CASE
8576               WHEN MSII.CONFIRM_STATUS = 'CNR'
8577               THEN 'CREATE'
8578               WHEN MIRI.TRANSACTION_TYPE <> 'SYNC'
8579               THEN MIRI.TRANSACTION_TYPE
8580               WHEN EXISTS (SELECT 1
8581                             FROM MTL_ITEM_REVISIONS_B MIR
8582                             WHERE MIR.INVENTORY_ITEM_ID = MSII.INVENTORY_ITEM_ID
8583                             AND MIR.ORGANIZATION_ID = MIRI.ORGANIZATION_ID
8584                             AND MIR.REVISION = MIRI.REVISION)
8585               THEN 'UPDATE'
8586               ELSE 'CREATE'
8587             END),
8588            MSII.INVENTORY_ITEM_ID,
8589            MSII.ITEM_NUMBER
8590          FROM MTL_SYSTEM_ITEMS_INTERFACE MSII
8591          WHERE MSII.SET_PROCESS_ID = p_data_set_id
8592            AND MSII.PROCESS_FLAG = 1
8593            AND MSII.CONFIRM_STATUS IN ('CNR', 'CMR', 'CCR', G_FAKE_CONF_STATUS_FLAG )
8594            AND MSII.SOURCE_SYSTEM_ID = MIRI.SOURCE_SYSTEM_ID
8595            AND MSII.SOURCE_SYSTEM_REFERENCE = MIRI.SOURCE_SYSTEM_REFERENCE
8596            AND MSII.ORGANIZATION_ID = l_org_id
8597            AND ROWNUM = 1
8598         )
8599     WHERE MIRI.PROCESS_FLAG = 0
8600       AND MIRI.SET_PROCESS_ID = p_data_set_id
8601       AND EXISTS (SELECT NULL
8602                   FROM MTL_SYSTEM_ITEMS_INTERFACE MSII
8603                   WHERE MSII.SET_PROCESS_ID = p_data_set_id
8604                     AND MSII.PROCESS_FLAG = 1
8605                     AND MSII.CONFIRM_STATUS IN ('CNR', 'CMR', 'CCR', G_FAKE_CONF_STATUS_FLAG)
8606                     AND MSII.SOURCE_SYSTEM_ID = MIRI.SOURCE_SYSTEM_ID
8607                     AND MSII.SOURCE_SYSTEM_REFERENCE = MIRI.SOURCE_SYSTEM_REFERENCE
8608                     AND MSII.ORGANIZATION_ID = l_org_id);
8609 
8610     Debug_Conc_Log('Resolve_Child_Entities - After resolving revision rows' );
8611     -- updating item_number, item_id from MSII table
8612     UPDATE MTL_ITEM_CATEGORIES_INTERFACE MICI
8613     SET (PROCESS_FLAG, TRANSACTION_TYPE, INVENTORY_ITEM_ID, ITEM_NUMBER) =
8614         (SELECT
8615            1,
8616            (CASE
8617               WHEN MSII.CONFIRM_STATUS = 'CNR'
8618               THEN 'CREATE'
8619               ELSE MICI.TRANSACTION_TYPE
8620             END),
8621            MSII.INVENTORY_ITEM_ID,
8622            MSII.ITEM_NUMBER
8623          FROM MTL_SYSTEM_ITEMS_INTERFACE MSII
8624          WHERE MSII.SET_PROCESS_ID = p_data_set_id
8625            AND MSII.PROCESS_FLAG = 1
8626            AND MSII.CONFIRM_STATUS IN ('CNR', 'CMR', 'CCR', G_FAKE_CONF_STATUS_FLAG)
8627            AND MSII.SOURCE_SYSTEM_ID = MICI.SOURCE_SYSTEM_ID
8628            AND MSII.SOURCE_SYSTEM_REFERENCE = MICI.SOURCE_SYSTEM_REFERENCE
8629            AND MSII.ORGANIZATION_ID = l_org_id
8630            AND ROWNUM = 1
8631         )
8632     WHERE MICI.PROCESS_FLAG = 0
8633       AND MICI.SET_PROCESS_ID = p_data_set_id
8634       AND EXISTS (SELECT NULL
8635                   FROM MTL_SYSTEM_ITEMS_INTERFACE MSII
8636                   WHERE MSII.SET_PROCESS_ID = p_data_set_id
8637                     AND MSII.PROCESS_FLAG = 1
8638                     AND MSII.CONFIRM_STATUS IN ('CNR', 'CMR', 'CCR', G_FAKE_CONF_STATUS_FLAG)
8639                     AND MSII.SOURCE_SYSTEM_ID = MICI.SOURCE_SYSTEM_ID
8640                     AND MSII.SOURCE_SYSTEM_REFERENCE = MICI.SOURCE_SYSTEM_REFERENCE
8641                     AND MSII.ORGANIZATION_ID = l_org_id);
8642 
8643     Debug_Conc_Log('Resolve_Child_Entities - After resolving categories rows' );
8644     -- updating item_number, item_id from MSII table
8645     UPDATE EGO_ITM_USR_ATTR_INTRFC ATTRS
8646     SET (PROCESS_STATUS, TRANSACTION_TYPE, INVENTORY_ITEM_ID, ITEM_NUMBER, ITEM_CATALOG_GROUP_ID) =
8647         (SELECT
8648            1,
8649            (CASE
8650               WHEN UPPER(ATTRS.TRANSACTION_TYPE) = G_TRANS_TYPE_DELETE THEN G_TRANS_TYPE_DELETE
8651               WHEN MSII.CONFIRM_STATUS = 'CNR' THEN G_TRANS_TYPE_CREATE
8652               ELSE G_TRANS_TYPE_SYNC
8653             END),
8654            MSII.INVENTORY_ITEM_ID,
8655            MSII.ITEM_NUMBER,
8656            NVL(ATTRS.ITEM_CATALOG_GROUP_ID, MSII.ITEM_CATALOG_GROUP_ID)
8657          FROM MTL_SYSTEM_ITEMS_INTERFACE MSII
8658          WHERE MSII.SET_PROCESS_ID = p_data_set_id
8659            AND MSII.PROCESS_FLAG = 1
8660            AND MSII.CONFIRM_STATUS IN ('CNR', 'CMR', 'CCR', G_FAKE_CONF_STATUS_FLAG)
8661            AND MSII.SOURCE_SYSTEM_ID = ATTRS.SOURCE_SYSTEM_ID
8662            AND MSII.SOURCE_SYSTEM_REFERENCE = ATTRS.SOURCE_SYSTEM_REFERENCE
8663            AND MSII.ORGANIZATION_ID = l_org_id
8664            AND ROWNUM = 1
8665         )
8666     WHERE ATTRS.PROCESS_STATUS = 0
8667       AND ATTRS.DATA_SET_ID = p_data_set_id
8668       AND EXISTS (SELECT NULL
8669                   FROM MTL_SYSTEM_ITEMS_INTERFACE MSII
8670                   WHERE MSII.SET_PROCESS_ID = p_data_set_id
8671                     AND MSII.PROCESS_FLAG = 1
8672                     AND MSII.CONFIRM_STATUS IN ('CNR', 'CMR', 'CCR', G_FAKE_CONF_STATUS_FLAG)
8673                     AND MSII.SOURCE_SYSTEM_ID = ATTRS.SOURCE_SYSTEM_ID
8674                     AND MSII.SOURCE_SYSTEM_REFERENCE = ATTRS.SOURCE_SYSTEM_REFERENCE
8675                     AND MSII.ORGANIZATION_ID = l_org_id);
8676 
8677     Debug_Conc_Log('Resolve_Child_Entities - After resolving user defined attrs rows' );
8678 
8679     UPDATE EGO_ITM_USR_ATTR_INTRFC ATTRS
8680       SET REVISION = (
8681       CASE (SELECT
8682               CASE
8683                 WHEN MSII.CONFIRM_STATUS IN ('CMR', 'CCR', G_FAKE_CONF_STATUS_FLAG )
8684                      AND (MSII.REVISION_IMPORT_POLICY = 'L' OR (MSII.REVISION_IMPORT_POLICY IS NULL AND l_import_policy = 'L'))
8685                 THEN '1'
8686                 WHEN MSII.CONFIRM_STATUS IN ('CMR', 'CCR', G_FAKE_CONF_STATUS_FLAG )
8687                      AND (MSII.REVISION_IMPORT_POLICY = 'N' OR (MSII.REVISION_IMPORT_POLICY IS NULL AND l_import_policy = 'N'))
8688                 THEN '2'
8689                 WHEN MSII.CONFIRM_STATUS = 'CNR'
8690                 THEN '3'
8691               END
8692             FROM MTL_SYSTEM_ITEMS_INTERFACE MSII
8693             WHERE MSII.SET_PROCESS_ID = p_data_set_id
8694               AND MSII.PROCESS_FLAG = 1
8695               AND MSII.CONFIRM_STATUS IN ( 'CNR', 'CMR', 'CCR', G_FAKE_CONF_STATUS_FLAG )
8696               AND MSII.SOURCE_SYSTEM_ID = ATTRS.SOURCE_SYSTEM_ID
8697               AND MSII.SOURCE_SYSTEM_REFERENCE = ATTRS.SOURCE_SYSTEM_REFERENCE
8698               AND MSII.ORGANIZATION_ID = l_org_id
8699            )
8700         WHEN '1'
8701         THEN (SELECT MAX(REVISION) KEEP (DENSE_RANK FIRST ORDER BY EFFECTIVITY_DATE DESC)
8702               FROM MTL_ITEM_REVISIONS_B
8703               WHERE INVENTORY_ITEM_ID = ATTRS.INVENTORY_ITEM_ID
8704                 AND ORGANIZATION_ID = ATTRS.ORGANIZATION_ID)
8705         WHEN '2'
8706         THEN (SELECT REVISION
8707               FROM MTL_ITEM_REVISIONS_INTERFACE MIRI
8708               WHERE MIRI.SET_PROCESS_ID = ATTRS.DATA_SET_ID
8709                 AND MIRI.SOURCE_SYSTEM_ID = ATTRS.SOURCE_SYSTEM_ID
8710                 AND MIRI.SOURCE_SYSTEM_REFERENCE = ATTRS.SOURCE_SYSTEM_REFERENCE
8711                 AND MIRI.ORGANIZATION_ID = ATTRS.ORGANIZATION_ID
8712                 AND MIRI.REVISION IS NOT NULL
8713                 AND MIRI.EFFECTIVITY_DATE IS NOT NULL
8714                 AND UPPER(MIRI.TRANSACTION_TYPE) = 'CREATE'
8715                 AND ROWNUM = 1
8716              )
8717         WHEN '3'
8718         THEN (SELECT STARTING_REVISION
8719               FROM MTL_PARAMETERS
8720               WHERE ORGANIZATION_ID = ATTRS.ORGANIZATION_ID
8721              )
8722       END)
8723     WHERE ATTRS.PROCESS_STATUS = 1
8724       AND ATTRS.DATA_SET_ID = p_data_set_id
8725       AND ATTRS.REVISION IS NULL
8726       AND EXISTS (SELECT NULL
8727                   FROM MTL_SYSTEM_ITEMS_INTERFACE MSII
8728                   WHERE MSII.SET_PROCESS_ID = p_data_set_id
8729                     AND MSII.PROCESS_FLAG = 1
8730                     AND MSII.CONFIRM_STATUS IN ( 'CNR', 'CMR', 'CCR', G_FAKE_CONF_STATUS_FLAG )
8731                     AND MSII.SOURCE_SYSTEM_ID = ATTRS.SOURCE_SYSTEM_ID
8732                     AND MSII.SOURCE_SYSTEM_REFERENCE = ATTRS.SOURCE_SYSTEM_REFERENCE
8733                     AND MSII.ORGANIZATION_ID = l_org_id)
8734       AND EXISTS (SELECT NULL
8735                   FROM EGO_OBJ_AG_ASSOCS_B A, EGO_FND_DSC_FLX_CTX_EXT EXT
8736                   WHERE A.ATTR_GROUP_ID = EXT.ATTR_GROUP_ID
8737                     AND A.OBJECT_ID = (SELECT OBJECT_ID FROM FND_OBJECTS WHERE OBJ_NAME = 'EGO_ITEM')
8738                     AND EXT.DESCRIPTIVE_FLEX_CONTEXT_CODE = ATTRS.ATTR_GROUP_INT_NAME
8739                     AND EXT.DESCRIPTIVE_FLEXFIELD_NAME = NVL(ATTRS.ATTR_GROUP_TYPE, 'EGO_ITEMMGMT_GROUP')
8740                     AND EXT.APPLICATION_ID = 431
8741                     AND A.DATA_LEVEL = 'ITEM_REVISION_LEVEL');
8742 
8743     Debug_Conc_Log('Resolve_Child_Entities - After resolving user attrs intf table for revision' );
8744     UPDATE MTL_ITEM_REVISIONS_INTERFACE MIRI
8745       SET (REVISION, TRANSACTION_TYPE) =
8746           (SELECT
8747               (CASE
8748                 WHEN (EXISTS (SELECT NULL
8749                               FROM MTL_SYSTEM_ITEMS_INTERFACE MSII
8750                               WHERE MSII.SET_PROCESS_ID = p_data_set_id
8751                                 AND MSII.PROCESS_FLAG = 1
8752                                 AND MSII.CONFIRM_STATUS IN ('CMR', 'CCR', G_FAKE_CONF_STATUS_FLAG )
8753                                 AND (MSII.REVISION_IMPORT_POLICY = 'L' OR (MSII.REVISION_IMPORT_POLICY IS NULL AND l_import_policy = 'L'))
8754                                 AND MSII.SOURCE_SYSTEM_ID = MIRI.SOURCE_SYSTEM_ID
8755                                 AND MSII.SOURCE_SYSTEM_REFERENCE = MIRI.SOURCE_SYSTEM_REFERENCE
8756                                 AND MSII.ORGANIZATION_ID = l_org_id)
8757                      )
8758                 THEN (SELECT MAX(REVISION) KEEP (DENSE_RANK FIRST ORDER BY EFFECTIVITY_DATE DESC)
8759                       FROM MTL_ITEM_REVISIONS_B
8760                       WHERE INVENTORY_ITEM_ID = MIRI.INVENTORY_ITEM_ID
8761                         AND ORGANIZATION_ID = MIRI.ORGANIZATION_ID)
8762                 WHEN (EXISTS (SELECT NULL
8763                               FROM MTL_SYSTEM_ITEMS_INTERFACE MSII
8764                               WHERE MSII.SET_PROCESS_ID = p_data_set_id
8765                                 AND MSII.PROCESS_FLAG = 1
8766                                 AND MSII.CONFIRM_STATUS = 'CNR'
8767                                 AND MSII.SOURCE_SYSTEM_ID = MIRI.SOURCE_SYSTEM_ID
8768                                 AND MSII.SOURCE_SYSTEM_REFERENCE = MIRI.SOURCE_SYSTEM_REFERENCE
8769                                 AND MSII.ORGANIZATION_ID = l_org_id)
8770                      )
8771                 THEN (SELECT STARTING_REVISION
8772                       FROM MTL_PARAMETERS
8773                       WHERE ORGANIZATION_ID = MIRI.ORGANIZATION_ID
8774                      )
8775               END)   AS REVISION,
8776               'SYNC' AS TRANSACTION_TYPE
8777           FROM DUAL)
8778     WHERE MIRI.PROCESS_FLAG = 1
8779       AND MIRI.SET_PROCESS_ID = p_data_set_id
8780       AND MIRI.REVISION IS NULL
8781       AND EXISTS (SELECT NULL
8782                   FROM MTL_SYSTEM_ITEMS_INTERFACE MSII
8783                   WHERE MSII.SET_PROCESS_ID = p_data_set_id
8784                     AND MSII.PROCESS_FLAG = 1
8785                     AND MSII.CONFIRM_STATUS IN ('CNR', 'CMR', 'CCR', G_FAKE_CONF_STATUS_FLAG )
8786                     AND MSII.SOURCE_SYSTEM_ID = MIRI.SOURCE_SYSTEM_ID
8787                     AND MSII.SOURCE_SYSTEM_REFERENCE = MIRI.SOURCE_SYSTEM_REFERENCE
8788                     AND MSII.ORGANIZATION_ID = l_org_id);
8789 
8790     Debug_Conc_Log('Resolve_Child_Entities - After resolving item revisions interface table for revision' );
8791     -- updating item_number, item_id from MSII table
8792     UPDATE EGO_ITEM_PEOPLE_INTF EIPI
8793     SET (PROCESS_STATUS, TRANSACTION_TYPE, INVENTORY_ITEM_ID, ITEM_NUMBER) =
8794         (SELECT
8795            1,
8796            (CASE
8797               WHEN MSII.CONFIRM_STATUS = 'CNR'
8798               THEN 'CREATE'
8799               ELSE 'SYNC'
8800             END),
8801            MSII.INVENTORY_ITEM_ID,
8802            MSII.ITEM_NUMBER
8803          FROM MTL_SYSTEM_ITEMS_INTERFACE MSII
8804          WHERE MSII.SET_PROCESS_ID = p_data_set_id
8805            AND MSII.PROCESS_FLAG = 1
8806            AND MSII.CONFIRM_STATUS IN ('CNR', 'CMR', 'CCR', G_FAKE_CONF_STATUS_FLAG )
8807            AND MSII.SOURCE_SYSTEM_ID = EIPI.SOURCE_SYSTEM_ID
8808            AND MSII.SOURCE_SYSTEM_REFERENCE = EIPI.SOURCE_SYSTEM_REFERENCE
8809            AND MSII.ORGANIZATION_ID = l_org_id
8810            AND ROWNUM = 1
8811         )
8812     WHERE EIPI.PROCESS_STATUS = 0
8813       AND EIPI.DATA_SET_ID = p_data_set_id
8814       AND EXISTS (SELECT NULL
8815                   FROM MTL_SYSTEM_ITEMS_INTERFACE MSII
8816                   WHERE MSII.SET_PROCESS_ID = p_data_set_id
8817                     AND MSII.PROCESS_FLAG = 1
8818                     AND MSII.CONFIRM_STATUS IN ('CNR', 'CMR', 'CCR', G_FAKE_CONF_STATUS_FLAG)
8819                     AND MSII.SOURCE_SYSTEM_ID = EIPI.SOURCE_SYSTEM_ID
8820                     AND MSII.SOURCE_SYSTEM_REFERENCE = EIPI.SOURCE_SYSTEM_REFERENCE
8821                     AND MSII.ORGANIZATION_ID = l_org_id);
8822 
8823     Debug_Conc_Log('Resolve_Child_Entities - After resolving item people rows' );
8824     -- updating item_number, item_id from MSII table
8825     UPDATE EGO_AML_INTF EAI
8826     SET (PROCESS_FLAG, TRANSACTION_TYPE, INVENTORY_ITEM_ID, ITEM_NUMBER) =
8827         (SELECT
8828            1,
8829            (CASE
8830               WHEN UPPER(EAI.TRANSACTION_TYPE) = G_TRANS_TYPE_DELETE THEN G_TRANS_TYPE_DELETE
8831               WHEN MSII.CONFIRM_STATUS = 'CNR' THEN G_TRANS_TYPE_CREATE
8832               ELSE G_TRANS_TYPE_SYNC
8833             END),
8834            MSII.INVENTORY_ITEM_ID,
8835            MSII.ITEM_NUMBER
8836          FROM MTL_SYSTEM_ITEMS_INTERFACE MSII
8837          WHERE MSII.SET_PROCESS_ID = p_data_set_id
8838            AND MSII.PROCESS_FLAG = 1
8839            AND MSII.CONFIRM_STATUS IN ( 'CNR', 'CMR', 'CCR', G_FAKE_CONF_STATUS_FLAG )
8840            AND MSII.SOURCE_SYSTEM_ID = EAI.SOURCE_SYSTEM_ID
8841            AND MSII.SOURCE_SYSTEM_REFERENCE = EAI.SOURCE_SYSTEM_REFERENCE
8842            AND MSII.ORGANIZATION_ID = l_org_id
8843            AND ROWNUM = 1
8844         )
8845     WHERE EAI.PROCESS_FLAG = 0
8846       AND EAI.DATA_SET_ID = p_data_set_id
8847       AND EXISTS (SELECT NULL
8848                   FROM MTL_SYSTEM_ITEMS_INTERFACE MSII
8849                   WHERE MSII.SET_PROCESS_ID = p_data_set_id
8850                     AND MSII.PROCESS_FLAG = 1
8851                     AND MSII.CONFIRM_STATUS IN ('CNR', 'CMR', 'CCR', G_FAKE_CONF_STATUS_FLAG)
8852                     AND MSII.SOURCE_SYSTEM_ID = EAI.SOURCE_SYSTEM_ID
8853                     AND MSII.SOURCE_SYSTEM_REFERENCE = EAI.SOURCE_SYSTEM_REFERENCE
8854                     AND MSII.ORGANIZATION_ID = l_org_id);
8855 
8856     Debug_Conc_Log( 'Resolve_Child_Entities - After resolving aml rows' );
8857 
8858     -- updating item_number, item_id from MSII table
8859     UPDATE EGO_ITEM_ASSOCIATIONS_INTF EIAI
8860     SET (PROCESS_FLAG, TRANSACTION_TYPE, INVENTORY_ITEM_ID, ITEM_NUMBER) =
8861         (SELECT
8862            1,
8863            (CASE
8864               WHEN MSII.CONFIRM_STATUS = 'CNR'
8865               THEN 'CREATE'
8866               ELSE EIAI.TRANSACTION_TYPE
8867             END),
8868            MSII.INVENTORY_ITEM_ID,
8869            MSII.ITEM_NUMBER
8870          FROM MTL_SYSTEM_ITEMS_INTERFACE MSII
8871          WHERE MSII.SET_PROCESS_ID = p_data_set_id
8872            AND MSII.PROCESS_FLAG = 1
8873            AND MSII.CONFIRM_STATUS IN ('CNR', 'CMR', 'CCR', G_FAKE_CONF_STATUS_FLAG)
8874            AND MSII.SOURCE_SYSTEM_ID = EIAI.SOURCE_SYSTEM_ID
8875            AND MSII.SOURCE_SYSTEM_REFERENCE = EIAI.SOURCE_SYSTEM_REFERENCE
8876            AND MSII.ORGANIZATION_ID = l_org_id
8877            AND ROWNUM = 1
8878         )
8879     WHERE EIAI.PROCESS_FLAG = 0
8880       AND EIAI.BATCH_ID = p_data_set_id
8881       AND EXISTS (SELECT NULL
8882                   FROM MTL_SYSTEM_ITEMS_INTERFACE MSII
8883                   WHERE MSII.SET_PROCESS_ID = p_data_set_id
8884                     AND MSII.PROCESS_FLAG = 1
8885                     AND MSII.CONFIRM_STATUS IN ('CNR', 'CMR', 'CCR', G_FAKE_CONF_STATUS_FLAG)
8886                     AND MSII.SOURCE_SYSTEM_ID = EIAI.SOURCE_SYSTEM_ID
8887                     AND MSII.SOURCE_SYSTEM_REFERENCE = EIAI.SOURCE_SYSTEM_REFERENCE
8888                     AND MSII.ORGANIZATION_ID = l_org_id);
8889 
8890     Debug_Conc_Log('Resolve_Child_Entities - After resolving intersection rows' );
8891     -- getting security predicate
8892     EGO_DATA_SECURITY.get_security_predicate(
8893       p_api_version      => 1.0
8894      ,p_function         => 'EGO_VIEW_SS_ITEM_XREFS'
8895      ,p_object_name      => 'EGO_ITEM'
8896      ,p_user_name        => l_party_name
8897      ,p_statement_type   => 'EXISTS'
8898      ,p_pk1_alias        => 'MCR.INVENTORY_ITEM_ID'
8899      ,p_pk2_alias        => l_org_id
8900      ,x_predicate        => l_security_predicate
8901      ,x_return_status    => l_return_status
8902     );
8903 
8904     IF l_security_predicate IS NULL THEN
8905       l_security_predicate := ' AND 1=1 ';
8906     ELSE
8907       l_security_predicate := ' AND '||l_security_predicate;
8908     END IF;
8909 
8910     Debug_Conc_Log('Resolve_Child_Entities - Security Predicate - '||l_security_predicate);
8911 
8912     -- updating all the child entities, which do not have parent in mtl_system_items_interface
8913     -- updating the items and org assignments
8914 
8915     -- Note that using q'# is a new feature of 10g. By using this syntax, we can put as many single quotes within
8916     -- the string. for example q'# This is Devendra's code #'
8917     l_sql := q'#
8918                UPDATE MTL_SYSTEM_ITEMS_INTERFACE MSII
8919                  SET (PROCESS_FLAG, TRANSACTION_TYPE, INVENTORY_ITEM_ID) =
8920                      (SELECT
8921                         1,
8922                         NVL(MSII.TRANSACTION_TYPE, 'SYNC'),
8923                         MCR.INVENTORY_ITEM_ID
8924                       FROM MTL_CROSS_REFERENCES_B MCR
8925                       WHERE MCR.CROSS_REFERENCE_TYPE = 'SS_ITEM_XREF'
8926                         AND MCR.CROSS_REFERENCE = MSII.SOURCE_SYSTEM_REFERENCE
8927                         AND MCR.SOURCE_SYSTEM_ID = MSII.SOURCE_SYSTEM_ID
8928                         AND SYSDATE BETWEEN NVL(MCR.START_DATE_ACTIVE, SYSDATE - 1) AND NVL(MCR.END_DATE_ACTIVE, SYSDATE + 1)
8929                         AND ROWNUM = 1
8930                      )
8931                WHERE MSII.SET_PROCESS_ID = :p_data_set_id
8932                  AND MSII.PROCESS_FLAG = 0
8933                  -- PICK ONLY CHILD ITEMS
8934                  AND EXISTS (SELECT NULL
8935                              FROM MTL_PARAMETERS MP
8936                              WHERE MP.MASTER_ORGANIZATION_ID = :l_org_id
8937                                AND MP.ORGANIZATION_ID <> MP.MASTER_ORGANIZATION_ID
8938                                AND MP.ORGANIZATION_ID = MSII.ORGANIZATION_ID)
8939                  -- CHILD MUST NOT HAVE A MASTER RECORD IN CURRENT BATCH
8940                  AND NOT EXISTS (SELECT NULL
8941                                  FROM MTL_SYSTEM_ITEMS_INTERFACE MSII2
8942                                  WHERE MSII2.PROCESS_FLAG in (0, 1, 33390,33391)
8943                                    AND MSII2.SET_PROCESS_ID = :p_data_set_id1
8944                                    AND MSII2.SOURCE_SYSTEM_ID = MSII.SOURCE_SYSTEM_ID
8945                                    AND MSII2.SOURCE_SYSTEM_REFERENCE = MSII.SOURCE_SYSTEM_REFERENCE
8946                                    AND MSII2.ORGANIZATION_ID = :l_org_id1
8947                                 )
8948                  -- HAS A CROSS REFERENCE
8949                  AND EXISTS (SELECT NULL
8950                              FROM MTL_CROSS_REFERENCES_B MCR
8951                              WHERE MCR.CROSS_REFERENCE_TYPE = 'SS_ITEM_XREF'
8952                                AND MCR.CROSS_REFERENCE = MSII.SOURCE_SYSTEM_REFERENCE
8953                                AND MCR.SOURCE_SYSTEM_ID = MSII.SOURCE_SYSTEM_ID
8954                                AND SYSDATE BETWEEN NVL(MCR.START_DATE_ACTIVE, SYSDATE - 1) AND NVL(MCR.END_DATE_ACTIVE, SYSDATE + 1)
8955                              #'||l_security_predicate||')';
8956 
8957     EXECUTE IMMEDIATE l_sql USING p_data_set_id, l_org_id, p_data_set_id, l_org_id;
8958 
8959     Debug_Conc_Log('Resolve_Child_Entities - After updating items intf table for child items that has XXref' );
8960 
8961     -- updating the item revisions
8962     l_sql := q'#
8963                UPDATE MTL_ITEM_REVISIONS_INTERFACE MIRI
8964                  SET (PROCESS_FLAG, TRANSACTION_TYPE, INVENTORY_ITEM_ID) =
8965                      (SELECT
8966                         1,
8967                         NVL(MIRI.TRANSACTION_TYPE, 'SYNC'),
8968                         MCR.INVENTORY_ITEM_ID
8969                       FROM MTL_CROSS_REFERENCES_B MCR
8970                       WHERE MCR.CROSS_REFERENCE_TYPE = 'SS_ITEM_XREF'
8971                         AND MCR.CROSS_REFERENCE = MIRI.SOURCE_SYSTEM_REFERENCE
8972                         AND MCR.SOURCE_SYSTEM_ID = MIRI.SOURCE_SYSTEM_ID
8973                         AND (MCR.START_DATE_ACTIVE < SYSDATE OR MCR.START_DATE_ACTIVE IS NULL)
8974                         AND (MCR.END_DATE_ACTIVE > SYSDATE OR MCR.END_DATE_ACTIVE IS NULL)
8975                         AND ROWNUM = 1
8976                      )
8977                WHERE MIRI.SET_PROCESS_ID = :p_data_set_id
8978                  AND MIRI.PROCESS_FLAG = 0
8979                  -- MUST NOT HAVE A MASTER ITEM RECORD IN CURRENT BATCH
8980                  AND NOT EXISTS (SELECT NULL
8981                                  FROM MTL_SYSTEM_ITEMS_INTERFACE MSII
8982                                  WHERE MSII.PROCESS_FLAG IN (0, 1, 33390,33391)
8983                                    AND MSII.SET_PROCESS_ID = :p_data_set_id1
8984                                    AND MSII.SOURCE_SYSTEM_ID =  MIRI.SOURCE_SYSTEM_ID
8985                                    AND MSII.SOURCE_SYSTEM_REFERENCE = MIRI.SOURCE_SYSTEM_REFERENCE
8986                                    AND MSII.ORGANIZATION_ID = :l_org_id
8987                                 )
8988                  -- HAS A CROSS REFERENCE
8989                  AND EXISTS (SELECT NULL
8990                              FROM MTL_CROSS_REFERENCES_B MCR
8991                              WHERE MCR.CROSS_REFERENCE_TYPE = 'SS_ITEM_XREF'
8992                                AND MCR.CROSS_REFERENCE = MIRI.SOURCE_SYSTEM_REFERENCE
8993                                AND MCR.SOURCE_SYSTEM_ID = MIRI.SOURCE_SYSTEM_ID
8994                                AND (MCR.START_DATE_ACTIVE < SYSDATE OR MCR.START_DATE_ACTIVE IS NULL)
8995                                AND (MCR.END_DATE_ACTIVE > SYSDATE OR MCR.END_DATE_ACTIVE IS NULL)
8996                              #'||l_security_predicate||')';
8997 
8998     EXECUTE IMMEDIATE l_sql USING p_data_set_id, p_data_set_id, l_org_id;
8999 
9000     Debug_Conc_Log('Resolve_Child_Entities - After updating revisions intf table for items that has XXref' );
9001 
9002     -- updating the item revisions where revision is null and revision_import_policy is Update Latest
9003     -- Bug: 5476972
9004     IF l_import_policy = 'L' THEN
9005       l_sql := q'#
9006                  UPDATE MTL_ITEM_REVISIONS_INTERFACE MIRI
9007                    SET (REVISION, TRANSACTION_TYPE) =
9008                        (SELECT MAX(REVISION) KEEP (DENSE_RANK FIRST ORDER BY EFFECTIVITY_DATE DESC), 'UPDATE'
9009                         FROM MTL_ITEM_REVISIONS_B
9010                         WHERE INVENTORY_ITEM_ID = MIRI.INVENTORY_ITEM_ID
9011                           AND ORGANIZATION_ID = MIRI.ORGANIZATION_ID)
9012                  WHERE MIRI.SET_PROCESS_ID = :p_data_set_id
9013                    AND MIRI.PROCESS_FLAG = 1
9014                    AND MIRI.REVISION IS NULL
9015                    -- MUST NOT HAVE A MASTER ITEM RECORD IN CURRENT BATCH
9016                    AND NOT EXISTS (SELECT NULL
9017                                    FROM MTL_SYSTEM_ITEMS_INTERFACE MSII
9018                                    WHERE MSII.PROCESS_FLAG IN (0, 1, 33390,33391)
9019                                      AND MSII.SET_PROCESS_ID = :p_data_set_id1
9020                                      AND MSII.SOURCE_SYSTEM_ID =  MIRI.SOURCE_SYSTEM_ID
9021                                      AND MSII.SOURCE_SYSTEM_REFERENCE = MIRI.SOURCE_SYSTEM_REFERENCE
9022                                      AND MSII.ORGANIZATION_ID = :l_org_id
9023                                   )
9024                    -- HAS A CROSS REFERENCE
9025                    AND EXISTS (SELECT NULL
9026                                FROM MTL_CROSS_REFERENCES_B MCR
9027                                WHERE MCR.CROSS_REFERENCE_TYPE = 'SS_ITEM_XREF'
9028                                  AND MCR.CROSS_REFERENCE = MIRI.SOURCE_SYSTEM_REFERENCE
9029                                  AND MCR.SOURCE_SYSTEM_ID = MIRI.SOURCE_SYSTEM_ID
9030                                  AND (MCR.START_DATE_ACTIVE < SYSDATE OR MCR.START_DATE_ACTIVE IS NULL)
9031                                  AND (MCR.END_DATE_ACTIVE > SYSDATE OR MCR.END_DATE_ACTIVE IS NULL)
9032                                #'||l_security_predicate||')';
9033 
9034       EXECUTE IMMEDIATE l_sql USING p_data_set_id, p_data_set_id, l_org_id;
9035 
9036       Debug_Conc_Log('Resolve_Child_Entities - After updating REVISION in revisions intf table for items that has XXref' );
9037     END IF;
9038 
9039     -- updating the item category assignments
9040     l_sql := q'#
9041                UPDATE MTL_ITEM_CATEGORIES_INTERFACE MICI
9042                  SET (PROCESS_FLAG, TRANSACTION_TYPE, INVENTORY_ITEM_ID) =
9043                      (SELECT
9044                         1,
9045                         MICI.TRANSACTION_TYPE,
9046                         MCR.INVENTORY_ITEM_ID
9047                       FROM MTL_CROSS_REFERENCES_B MCR
9048                       WHERE MCR.CROSS_REFERENCE_TYPE = 'SS_ITEM_XREF'
9049                         AND MCR.CROSS_REFERENCE = MICI.SOURCE_SYSTEM_REFERENCE
9050                         AND MCR.SOURCE_SYSTEM_ID = MICI.SOURCE_SYSTEM_ID
9051                         AND (MCR.START_DATE_ACTIVE < SYSDATE OR MCR.START_DATE_ACTIVE IS NULL)
9052                         AND (MCR.END_DATE_ACTIVE > SYSDATE OR MCR.END_DATE_ACTIVE IS NULL)
9053                         AND ROWNUM = 1
9054                      )
9055                WHERE MICI.SET_PROCESS_ID = :p_data_set_id
9056                  AND MICI.PROCESS_FLAG = 0
9057                  -- MUST NOT HAVE A MASTER ITEM RECORD IN CURRENT BATCH
9058                  AND NOT EXISTS (SELECT NULL
9059                                  FROM MTL_SYSTEM_ITEMS_INTERFACE MSII
9060                                  WHERE MSII.PROCESS_FLAG IN (0, 1, 33390,33391)
9061                                    AND MSII.SET_PROCESS_ID = :p_data_set_id1
9062                                    AND MSII.SOURCE_SYSTEM_ID =  MICI.SOURCE_SYSTEM_ID
9063                                    AND MSII.SOURCE_SYSTEM_REFERENCE = MICI.SOURCE_SYSTEM_REFERENCE
9064                                    AND MSII.ORGANIZATION_ID = :l_org_id
9065                                 )
9066                  -- HAS A CROSS REFERENCE
9067                  AND EXISTS (SELECT NULL
9068                              FROM MTL_CROSS_REFERENCES_B MCR
9069                              WHERE MCR.CROSS_REFERENCE_TYPE = 'SS_ITEM_XREF'
9070                                AND MCR.CROSS_REFERENCE = MICI.SOURCE_SYSTEM_REFERENCE
9071                                AND MCR.SOURCE_SYSTEM_ID = MICI.SOURCE_SYSTEM_ID
9072                                AND (MCR.START_DATE_ACTIVE < SYSDATE OR MCR.START_DATE_ACTIVE IS NULL)
9073                                AND (MCR.END_DATE_ACTIVE > SYSDATE OR MCR.END_DATE_ACTIVE IS NULL)
9074                             #'||l_security_predicate||')';
9075 
9076     EXECUTE IMMEDIATE l_sql USING p_data_set_id, p_data_set_id, l_org_id;
9077 
9078     Debug_Conc_Log('Resolve_Child_Entities - After updating categories intf table for items that has XXref');
9079 
9080     -- updating the item people
9081     l_sql := q'#
9082                UPDATE EGO_ITEM_PEOPLE_INTF EIPI
9083                  SET (PROCESS_STATUS, TRANSACTION_TYPE, INVENTORY_ITEM_ID) =
9084                      (SELECT
9085                         1,
9086                         NVL(EIPI.TRANSACTION_TYPE, 'SYNC'),
9087                         MCR.INVENTORY_ITEM_ID
9088                       FROM MTL_CROSS_REFERENCES_B MCR
9089                       WHERE MCR.CROSS_REFERENCE_TYPE = 'SS_ITEM_XREF'
9090                         AND MCR.CROSS_REFERENCE = EIPI.SOURCE_SYSTEM_REFERENCE
9091                         AND MCR.SOURCE_SYSTEM_ID = EIPI.SOURCE_SYSTEM_ID
9092                         AND (MCR.START_DATE_ACTIVE < SYSDATE OR MCR.START_DATE_ACTIVE IS NULL)
9093                         AND (MCR.END_DATE_ACTIVE > SYSDATE OR MCR.END_DATE_ACTIVE IS NULL)
9094                         AND ROWNUM = 1
9095                      )
9096                WHERE EIPI.DATA_SET_ID = :p_data_set_id
9097                  AND EIPI.PROCESS_STATUS = 0
9098                  -- MUST NOT HAVE A MASTER ITEM RECORD IN CURRENT BATCH
9099                  AND NOT EXISTS (SELECT NULL
9100                                  FROM MTL_SYSTEM_ITEMS_INTERFACE MSII
9101                                  WHERE MSII.PROCESS_FLAG IN (0, 1, 33390,33391)
9102                                    AND MSII.SET_PROCESS_ID = :p_data_set_id1
9103                                    AND MSII.SOURCE_SYSTEM_ID =  EIPI.SOURCE_SYSTEM_ID
9104                                    AND MSII.SOURCE_SYSTEM_REFERENCE = EIPI.SOURCE_SYSTEM_REFERENCE
9105                                    AND MSII.ORGANIZATION_ID = :l_org_id
9106                                 )
9107                  -- HAS A CROSS REFERENCE
9108                  AND EXISTS (SELECT NULL
9109                              FROM MTL_CROSS_REFERENCES_B MCR
9110                              WHERE MCR.CROSS_REFERENCE_TYPE = 'SS_ITEM_XREF'
9111                                AND MCR.CROSS_REFERENCE = EIPI.SOURCE_SYSTEM_REFERENCE
9112                                AND MCR.SOURCE_SYSTEM_ID = EIPI.SOURCE_SYSTEM_ID
9113                                AND (MCR.START_DATE_ACTIVE < SYSDATE OR MCR.START_DATE_ACTIVE IS NULL)
9114                                AND (MCR.END_DATE_ACTIVE > SYSDATE OR MCR.END_DATE_ACTIVE IS NULL)
9115                             #'||l_security_predicate||')';
9116 
9117     EXECUTE IMMEDIATE l_sql USING p_data_set_id, p_data_set_id, l_org_id;
9118 
9119     Debug_Conc_Log('Resolve_Child_Entities - After updating item people intf table for items that has XXref');
9120 
9121     -- updating the item user defined attributes interface
9122     l_sql := q'#
9123                UPDATE EGO_ITM_USR_ATTR_INTRFC EIUAI
9124                  SET (PROCESS_STATUS, TRANSACTION_TYPE, INVENTORY_ITEM_ID) =
9125                      (SELECT
9126                         1,
9127                         NVL(EIUAI.TRANSACTION_TYPE, 'SYNC'),
9128                         MCR.INVENTORY_ITEM_ID
9129                       FROM MTL_CROSS_REFERENCES_B MCR
9130                       WHERE MCR.CROSS_REFERENCE_TYPE = 'SS_ITEM_XREF'
9131                         AND MCR.CROSS_REFERENCE = EIUAI.SOURCE_SYSTEM_REFERENCE
9132                         AND MCR.SOURCE_SYSTEM_ID = EIUAI.SOURCE_SYSTEM_ID
9133                         AND (MCR.START_DATE_ACTIVE < SYSDATE OR MCR.START_DATE_ACTIVE IS NULL)
9134                         AND (MCR.END_DATE_ACTIVE > SYSDATE OR MCR.END_DATE_ACTIVE IS NULL)
9135                         AND ROWNUM = 1
9136                      )
9137                WHERE EIUAI.DATA_SET_ID = :p_data_set_id
9138                  AND EIUAI.PROCESS_STATUS = 0
9139                  -- MUST NOT HAVE A MASTER ITEM RECORD IN CURRENT BATCH
9140                  AND NOT EXISTS (SELECT NULL
9141                                  FROM MTL_SYSTEM_ITEMS_INTERFACE MSII
9142                                  WHERE MSII.PROCESS_FLAG IN (0, 1, 33390, 33391)
9143                                    AND MSII.SET_PROCESS_ID = :p_data_set_id1
9144                                    AND MSII.SOURCE_SYSTEM_ID =  EIUAI.SOURCE_SYSTEM_ID
9145                                    AND MSII.SOURCE_SYSTEM_REFERENCE = EIUAI.SOURCE_SYSTEM_REFERENCE
9146                                    AND MSII.ORGANIZATION_ID = :l_org_id
9147                                 )
9148                  -- HAS A CROSS REFERENCE
9149                  AND EXISTS (SELECT NULL
9150                              FROM MTL_CROSS_REFERENCES_B MCR
9151                              WHERE MCR.CROSS_REFERENCE_TYPE = 'SS_ITEM_XREF'
9152                                AND MCR.CROSS_REFERENCE = EIUAI.SOURCE_SYSTEM_REFERENCE
9153                                AND MCR.SOURCE_SYSTEM_ID = EIUAI.SOURCE_SYSTEM_ID
9154                                AND (MCR.START_DATE_ACTIVE < SYSDATE OR MCR.START_DATE_ACTIVE IS NULL)
9155                                AND (MCR.END_DATE_ACTIVE > SYSDATE OR MCR.END_DATE_ACTIVE IS NULL)
9156                             #'||l_security_predicate||')';
9157 
9158     EXECUTE IMMEDIATE l_sql USING p_data_set_id, p_data_set_id, l_org_id;
9159 
9160     Debug_Conc_Log('Resolve_Child_Entities - After updating user attrs intf table for items that has XXref');
9161 
9162     -- updating the item AML interface
9163     l_sql := q'#
9164                UPDATE EGO_AML_INTF EAI
9165                  SET (PROCESS_FLAG, TRANSACTION_TYPE, INVENTORY_ITEM_ID) =
9166                      (SELECT
9167                         1,
9168                         NVL(EAI.TRANSACTION_TYPE, 'SYNC'),
9169                         MCR.INVENTORY_ITEM_ID
9170                       FROM MTL_CROSS_REFERENCES_B MCR
9171                       WHERE MCR.CROSS_REFERENCE_TYPE = 'SS_ITEM_XREF'
9172                         AND MCR.CROSS_REFERENCE = EAI.SOURCE_SYSTEM_REFERENCE
9173                         AND MCR.SOURCE_SYSTEM_ID = EAI.SOURCE_SYSTEM_ID
9174                         AND (MCR.START_DATE_ACTIVE < SYSDATE OR MCR.START_DATE_ACTIVE IS NULL)
9175                         AND (MCR.END_DATE_ACTIVE > SYSDATE OR MCR.END_DATE_ACTIVE IS NULL)
9176                         AND ROWNUM = 1
9177                      )
9178                WHERE EAI.DATA_SET_ID = :p_data_set_id
9179                  AND EAI.PROCESS_FLAG = 0
9180                  -- MUST NOT HAVE A MASTER ITEM RECORD IN CURRENT BATCH
9181                  AND NOT EXISTS (SELECT NULL
9182                                  FROM MTL_SYSTEM_ITEMS_INTERFACE MSII
9183                                  WHERE MSII.PROCESS_FLAG IN (0, 1, 33390, 33391)
9184                                    AND MSII.SET_PROCESS_ID = :p_data_set_id1
9185                                    AND MSII.SOURCE_SYSTEM_ID =  EAI.SOURCE_SYSTEM_ID
9186                                    AND MSII.SOURCE_SYSTEM_REFERENCE = EAI.SOURCE_SYSTEM_REFERENCE
9187                                    AND MSII.ORGANIZATION_ID = :l_org_id
9188                                 )
9189                  -- HAS A CROSS REFERENCE
9190                  AND EXISTS (SELECT NULL
9191                              FROM MTL_CROSS_REFERENCES_B MCR
9192                              WHERE MCR.CROSS_REFERENCE_TYPE = 'SS_ITEM_XREF'
9193                                AND MCR.CROSS_REFERENCE = EAI.SOURCE_SYSTEM_REFERENCE
9194                                AND MCR.SOURCE_SYSTEM_ID = EAI.SOURCE_SYSTEM_ID
9195                                AND (MCR.START_DATE_ACTIVE < SYSDATE OR MCR.START_DATE_ACTIVE IS NULL)
9196                                AND (MCR.END_DATE_ACTIVE > SYSDATE OR MCR.END_DATE_ACTIVE IS NULL)
9197                             #'||l_security_predicate||')';
9198 
9199     EXECUTE IMMEDIATE l_sql USING p_data_set_id, p_data_set_id, l_org_id;
9200 
9201     Debug_Conc_Log('Resolve_Child_Entities - After updating aml intf table for items that has XXref');
9202 
9203     -- updating the item intersections
9204     l_sql := q'#
9205                UPDATE EGO_ITEM_ASSOCIATIONS_INTF EIAI
9206                  SET (PROCESS_FLAG, TRANSACTION_TYPE, INVENTORY_ITEM_ID) =
9207                      (SELECT
9208                         1,
9209                         EIAI.TRANSACTION_TYPE,
9210                         MCR.INVENTORY_ITEM_ID
9211                       FROM MTL_CROSS_REFERENCES_B MCR
9212                       WHERE MCR.CROSS_REFERENCE_TYPE = 'SS_ITEM_XREF'
9213                         AND MCR.CROSS_REFERENCE = EIAI.SOURCE_SYSTEM_REFERENCE
9214                         AND MCR.SOURCE_SYSTEM_ID = EIAI.SOURCE_SYSTEM_ID
9215                         AND (MCR.START_DATE_ACTIVE < SYSDATE OR MCR.START_DATE_ACTIVE IS NULL)
9216                         AND (MCR.END_DATE_ACTIVE > SYSDATE OR MCR.END_DATE_ACTIVE IS NULL)
9217                         AND ROWNUM = 1
9218                      )
9219                WHERE EIAI.BATCH_ID = :p_data_set_id
9220                  AND EIAI.PROCESS_FLAG = 0
9221                  -- MUST NOT HAVE A MASTER ITEM RECORD IN CURRENT BATCH
9222                  AND NOT EXISTS (SELECT NULL
9223                                  FROM MTL_SYSTEM_ITEMS_INTERFACE MSII
9224                                  WHERE MSII.PROCESS_FLAG IN (0, 1, 33390,33391)
9225                                    AND MSII.SET_PROCESS_ID = :p_data_set_id1
9226                                    AND MSII.SOURCE_SYSTEM_ID =  EIAI.SOURCE_SYSTEM_ID
9227                                    AND MSII.SOURCE_SYSTEM_REFERENCE = EIAI.SOURCE_SYSTEM_REFERENCE
9228                                    AND MSII.ORGANIZATION_ID = :l_org_id
9229                                 )
9230                  -- HAS A CROSS REFERENCE
9231                  AND EXISTS (SELECT NULL
9232                              FROM MTL_CROSS_REFERENCES_B MCR
9233                              WHERE MCR.CROSS_REFERENCE_TYPE = 'SS_ITEM_XREF'
9234                                AND MCR.CROSS_REFERENCE = EIAI.SOURCE_SYSTEM_REFERENCE
9235                                AND MCR.SOURCE_SYSTEM_ID = EIAI.SOURCE_SYSTEM_ID
9236                                AND (MCR.START_DATE_ACTIVE < SYSDATE OR MCR.START_DATE_ACTIVE IS NULL)
9237                                AND (MCR.END_DATE_ACTIVE > SYSDATE OR MCR.END_DATE_ACTIVE IS NULL)
9238                             #'||l_security_predicate||')';
9239 
9240     EXECUTE IMMEDIATE l_sql USING p_data_set_id, p_data_set_id, l_org_id;
9241 
9242     Debug_Conc_Log('Resolve_Child_Entities - After updating intersections intf table for items that has XXref');
9243 
9244     UPDATE MTL_SYSTEM_ITEMS_INTERFACE
9245     SET REQUEST_ID = CASE PROCESS_FLAG
9246                      WHEN 33390 THEN l_request_id
9247                      WHEN 33391 THEN l_request_id
9248                      ELSE REQUEST_ID
9249                      END,
9250         PROCESS_FLAG = CASE PROCESS_FLAG
9251                        WHEN 33390 THEN 3
9252                        WHEN 33391 THEN 3
9253                        ELSE PROCESS_FLAG
9254                        END,
9255         CONFIRM_STATUS = SUBSTR(CONFIRM_STATUS, 1, 2)
9256     WHERE SET_PROCESS_ID = p_data_set_id
9257       AND PROCESS_FLAG IN (1, 33390, 33391)
9258       AND CONFIRM_STATUS IN ('CNR', 'CMR', 'CCR')
9259       AND ORGANIZATION_ID = l_org_id;
9260     Debug_Conc_Log( 'Resolve_Child_Entities - Resolved pre-IOI process flag, request_id for ' || SQL%ROWCOUNT || ' rows' );
9261 
9262     /*
9263      * Note that setting the process flag to 7 does not interfere with the source system cross-reference
9264      * import because that bulk-loader looks for process flag 7 with the request id of the calling request.
9265      * Since both that code (Process_SSXref_Intf_Rows) and this chunk are executed within the auspices of
9266      * the same concurrent request, the cross-ref import will work correctly.
9267      */
9268     UPDATE MTL_SYSTEM_ITEMS_INTERFACE
9269     SET REQUEST_ID = l_request_id
9270       , PROCESS_FLAG = CASE PROCESS_FLAG
9271                        WHEN 33390 THEN 3
9272                        WHEN 33391 THEN 3
9273                        ELSE 7
9274                        END
9275     WHERE SET_PROCESS_ID = p_data_set_id
9276       AND PROCESS_FLAG IN (1, 33390, 33391)
9277       AND CONFIRM_STATUS IN ( G_FAKE_CONF_STATUS_FLAG, G_CONF_MATCH_FAKE, G_CONF_XREF_FAKE )
9278       AND ORGANIZATION_ID = l_org_id;
9279     Debug_Conc_Log( 'Resolve_Child_Entities - Stamped request_id and final process flag on ' || SQL%ROWCOUNT || ' inserted rows' );
9280 
9281     IF l_enabled_for_data_pool = 'N' THEN
9282       Debug_Conc_Log('Resolve_Child_Entities - Calling Merge_Batch_For_Import');
9283       Merge_Batch_For_Import(p_data_set_id, l_org_id);
9284       Debug_Conc_Log('Resolve_Child_Entities - Done Merge_Batch_For_Import');
9285 
9286       Debug_Conc_Log('Resolve_Child_Entities - Calling Clean_Up_UDA_Row_Idents');
9287       Clean_Up_UDA_Row_Idents( p_batch_id            => p_data_set_id,
9288                                p_process_status      => 1,
9289                                p_ignore_item_num_upd => FND_API.G_FALSE,
9290                                p_commit              => FND_API.G_FALSE );
9291 
9292       Debug_Conc_Log('Resolve_Child_Entities - Clean_Up_UDA_Row_Idents Done.');
9293     ELSE
9294       Debug_Conc_Log('Resolve_Child_Entities - Not calling Merge_Batch_For_Import, because this batch is enabled for data pool');
9295     END IF;
9296 
9297     Debug_Conc_Log('Resolve_Child_Entities - Resolving Style_Item_Flag');
9298     UPDATE MTL_SYSTEM_ITEMS_INTERFACE msii
9299     SET (STYLE_ITEM_FLAG, STYLE_ITEM_ID) = (SELECT
9300                                               DECODE(MAX(NVL(msik.STYLE_ITEM_FLAG, '$NULL$')),
9301                                                      '$NULL$', msii.STYLE_ITEM_FLAG,
9302                                                      NULL, msii.STYLE_ITEM_FLAG,
9303                                                      'N', 'N',
9304                                                      'Y', 'Y'
9305                                                     ),
9306                                               NVL(MAX(msik.STYLE_ITEM_ID), msii.STYLE_ITEM_ID)
9307                                             FROM MTL_SYSTEM_ITEMS_KFV msik, MTL_PARAMETERS mp
9308                                             WHERE (msii.INVENTORY_ITEM_ID = msik.INVENTORY_ITEM_ID
9309                                                 OR msii.ITEM_NUMBER = msik.CONCATENATED_SEGMENTS)
9310                                               AND msik.ORGANIZATION_ID = mp.MASTER_ORGANIZATION_ID
9311                                               AND msii.ORGANIZATION_ID = mp.ORGANIZATION_ID
9312                                            )
9313     WHERE SET_PROCESS_ID = p_data_set_id
9314       AND PROCESS_FLAG   = 1;
9315 
9316     Debug_Conc_Log('Resolve_Child_Entities - Done Resolving Style_Item_Flag, rows processed='||SQL%ROWCOUNT);
9317 
9318     Debug_Conc_Log('Resolve_Child_Entities END');
9319     IF FND_API.G_TRUE = p_commit THEN
9320       Debug_Conc_Log('Resolve_Child_Entities COMMITING');
9321       COMMIT;
9322     END IF;
9323 
9324   END Resolve_Child_Entities;
9325 
9326     PROCEDURE Stamp_Row_RequestId( p_request_id    IN  MTL_SYSTEM_ITEMS_INTERFACE.REQUEST_ID%TYPE
9327                                  , p_target_rowid  IN  UROWID
9328                                  )
9329     IS
9330     BEGIN
9331         IF p_request_id IS NULL THEN RETURN; END IF;
9332 
9333         SAVEPOINT do_stamp_row;
9334 
9335         UPDATE  MTL_SYSTEM_ITEMS_INTERFACE MSII
9336         SET     REQUEST_ID = p_request_id
9337         WHERE   MSII.ROWID              = p_target_rowid
9338            AND  PROCESS_FLAG            = 7
9339            AND  (   SOURCE_SYSTEM_ID    IS NOT NULL
9340                 OR  SOURCE_SYSTEM_REFERENCE IS NOT NULL
9341                 );
9342 
9343         IF 1 <> SQL%ROWCOUNT THEN
9344             ROLLBACK TO do_stamp_row;
9345 --      ELSE
9346 --          COMMIT;
9347         END IF;
9348 
9349         RETURN;
9350     END;
9351 
9352 
9353     PROCEDURE Stamp_RequestId_For_ReImport( p_request_id    IN  MTL_SYSTEM_ITEMS_INTERFACE.REQUEST_ID%TYPE )
9354     IS
9355         l_index     PLS_INTEGER;
9356     BEGIN
9357         IF G_MSII_REIMPORT_ROWS IS NOT NULL THEN
9358             l_index := G_MSII_REIMPORT_ROWS.FIRST;
9359             WHILE l_index IS NOT NULL LOOP
9360                 UPDATE MTL_SYSTEM_ITEMS_INTERFACE
9361                     SET REQUEST_ID = p_request_id
9362                 WHERE   ROWID = G_MSII_REIMPORT_ROWS( l_index );
9363                 l_index := G_MSII_REIMPORT_ROWS.next( l_index );
9364             END LOOP;
9365             G_MSII_REIMPORT_ROWS := NULL;
9366         END IF;
9367     END;
9368 
9369     PROCEDURE Log_Error_For_ReImport(p_request_id    IN  MTL_SYSTEM_ITEMS_INTERFACE.REQUEST_ID%TYPE
9370                                     , p_target_rowid  IN  UROWID
9371                                     , p_err_msg       IN  VARCHAR2
9372                                     )
9373     IS
9374       l_org_id            NUMBER;
9375       l_transaction_id    NUMBER;
9376       dumm_status         VARCHAR2(100);
9377       l_user_id           NUMBER := FND_GLOBAL.USER_ID;
9378       l_login_id          NUMBER := FND_GLOBAL.LOGIN_ID;
9379       l_prog_appid        NUMBER := FND_GLOBAL.PROG_APPL_ID;
9380       l_prog_id           NUMBER := FND_GLOBAL.CONC_PROGRAM_ID;
9381       l_err_text          VARCHAR2(4000);
9382     BEGIN
9383       UPDATE MTL_SYSTEM_ITEMS_INTERFACE
9384       SET REQUEST_ID = p_request_id
9385       WHERE ROWID = p_target_rowid
9386       RETURNING ORGANIZATION_ID, TRANSACTION_ID
9387       INTO l_org_id, l_transaction_id;
9388 
9389       dumm_status  := INVPUOPI.mtl_log_interface_err(
9390                             l_org_id
9391                            ,l_user_id
9392                            ,l_login_id
9393                            ,l_prog_appid
9394                            ,l_prog_id
9395                            ,p_request_id
9396                            ,l_transaction_id
9397                            ,p_err_msg
9398                            ,'GLOBAL_TRADE_ITEM_NUMBER'
9399                            ,'MTL_SYSTEM_ITEMS_INTERFACE'
9400                            ,'INV_IOI_ERR'
9401                            ,l_err_text);
9402     EXCEPTION WHEN OTHERS THEN
9403       NULL;
9404     END Log_Error_For_ReImport;
9405 
9406     PROCEDURE Prepare_Row_For_ReImport
9407         (   p_batch_id          IN          MTL_SYSTEM_ITEMS_INTERFACE.SET_PROCESS_ID%TYPE
9408         ,   p_organization_id   IN          MTL_SYSTEM_ITEMS_INTERFACE.ORGANIZATION_ID%TYPE
9409         ,   p_target_rowid      IN          UROWID
9410         ,   x_return_code       OUT NOCOPY  NUMBER
9411         ,   x_err_msg           OUT NOCOPY  VARCHAR2
9412         )
9413     IS
9414         l_process_flag      MTL_SYSTEM_ITEMS_INTERFACE.PROCESS_FLAG%TYPE;
9415         l_ssr               MTL_SYSTEM_ITEMS_INTERFACE.SOURCE_SYSTEM_REFERENCE%TYPE;
9416         l_ss_id             MTL_SYSTEM_ITEMS_INTERFACE.SOURCE_SYSTEM_ID%TYPE;
9417         l_ssr_desc          MTL_SYSTEM_ITEMS_INTERFACE.SOURCE_SYSTEM_REFERENCE_DESC%TYPE;
9418         l_batch_ss_id       EGO_IMPORT_BATCHES_B.SOURCE_SYSTEM_ID%TYPE;
9419         l_request_id        MTL_SYSTEM_ITEMS_INTERFACE.REQUEST_ID%TYPE;
9420         l_org_id            MTL_SYSTEM_ITEMS_INTERFACE.ORGANIZATION_ID%TYPE;
9421         l_item_number       MTL_SYSTEM_ITEMS_INTERFACE.ITEM_NUMBER%TYPE;
9422         l_item_id           MTL_SYSTEM_ITEMS_INTERFACE.INVENTORY_ITEM_ID%TYPE;
9423         l_ssxref_only       EGO_IMPORT_OPTION_SETS.IMPORT_XREF_ONLY%TYPE;
9424 
9425         l_is_pdh_batch      BOOLEAN;
9426         l_is_reimport       BOOLEAN;
9427         l_is_ssxref_only    BOOLEAN;
9428         l_reimport_process_status  MTL_SYSTEM_ITEMS_INTERFACE.PROCESS_FLAG%TYPE;
9429         l_priv_exists       VARCHAR2(1);
9430         l_msg_text          VARCHAR2(4000);
9431         l_xref_item_number  MTL_SYSTEM_ITEMS_INTERFACE.ITEM_NUMBER%TYPE;
9432         l_xref_item_id      MTL_SYSTEM_ITEMS_INTERFACE.INVENTORY_ITEM_ID%TYPE;
9433         l_xref_desc         MTL_CROSS_REFERENCES.DESCRIPTION%TYPE;
9434         l_org_code          MTL_SYSTEM_ITEMS_INTERFACE.ORGANIZATION_CODE%TYPE;
9435         l_party_name        VARCHAR2(1000); -- Bug: 5355759
9436     BEGIN
9437         x_return_code       := 0;
9438         BEGIN     -- CHECK THAT BATCH HAS A HEADER
9439             SELECT  BATCH.SOURCE_SYSTEM_ID
9440                 ,   BATCH.ORGANIZATION_ID
9441                 ,   NVL( OPT.IMPORT_XREF_ONLY, 'N' )
9442             INTO    l_batch_ss_id
9443                 ,   l_org_id
9444                 ,   l_ssxref_only
9445             FROM    EGO_IMPORT_BATCHES_B BATCH, EGO_IMPORT_OPTION_SETS OPT
9446             WHERE   BATCH.BATCH_ID          = p_batch_id
9447                 AND BATCH.ORGANIZATION_ID   = p_organization_id
9448                 AND BATCH.BATCH_ID          = OPT.BATCH_ID;
9449         EXCEPTION
9450             WHEN NO_DATA_FOUND THEN
9451                 x_return_code := 20; -- no batch header
9452                 RETURN;
9453         END;
9454 
9455         l_is_reimport       := FALSE;
9456         l_is_pdh_batch      := ( l_batch_ss_id = get_pdh_source_system_id );
9457         l_is_ssxref_only    := NOT l_is_pdh_batch AND ( 'Y' = l_ssxref_only );
9458         l_party_name        := Get_Current_Party_Name; -- Bug: 5355759
9459         IF l_is_pdh_batch THEN
9460             SAVEPOINT do_prepare_master_row; -- ENSURES THAT THE UPDATES ARE AN ATOMIC UNIT WITHIN THE TRANSACTION
9461             -- XXX: Should child updates be attempted first?
9462 
9463             -- update/select master item row
9464             UPDATE  MTL_SYSTEM_ITEMS_INTERFACE MSII
9465             SET     PROCESS_FLAG =  CASE PROCESS_FLAG
9466                                     WHEN 3 THEN 1
9467 --                                    WHEN 7 THEN G_IOI_STAMP_REQUEST_ID_FLAG
9468                                     ELSE PROCESS_FLAG END
9469             WHERE   SET_PROCESS_ID          = p_batch_id
9470                AND  ORGANIZATION_ID         = p_organization_id
9471                AND  MSII.ROWID              = p_target_rowid
9472                AND  PROCESS_FLAG            IN ( 3, 7 )
9473                AND  (   SOURCE_SYSTEM_ID    IS NULL
9474                     OR  SOURCE_SYSTEM_ID    = l_batch_ss_id
9475                     )
9476             RETURNING
9477                     MSII.PROCESS_FLAG
9478                 ,   MSII.REQUEST_ID
9479                 ,   MSII.INVENTORY_ITEM_ID
9480                 ,   MSII.ITEM_NUMBER
9481                 ,   MSII.ORGANIZATION_ID
9482             INTO
9483                     l_process_flag
9484                 ,   l_request_id
9485                 ,   l_item_id
9486                 ,   l_item_number
9487                 ,   l_org_id;
9488 
9489             IF 1 <> SQL%ROWCOUNT THEN
9490                 ROLLBACK TO do_prepare_master_row;
9491                 x_return_code := 10; -- update statement found too many matching master rows, or not enough
9492                 RETURN;
9493             END IF;
9494 
9495             IF 7 = l_process_flag THEN
9496 --              IF G_MSII_REIMPORT_ROWS IS NULL THEN
9497 --                  G_MSII_REIMPORT_ROWS := UROWID_TABLE( );
9498 --              END IF;
9499                 x_return_code := G_NEEDS_REQUEST_ID_STAMP;
9500 --              G_MSII_REIMPORT_ROWS.EXTEND( );
9501 --              G_MSII_REIMPORT_ROWS( G_MSII_REIMPORT_ROWS.LAST ) := p_target_rowid;
9502             ELSE
9503                 l_is_reimport := TRUE;
9504                 SAVEPOINT do_prepare_master_row; -- move savepoint up since parent row was in error
9505             END IF;
9506 
9507             IF l_item_id IS NOT NULL THEN
9508                 -- xxx: should the item number to use for comparison be fetched from the msii kfv?
9509 
9510                 -- updating the item's org assignments
9511                 UPDATE  MTL_SYSTEM_ITEMS_INTERFACE MSII
9512                 SET     PROCESS_FLAG = 1
9513                 WHERE   (   INVENTORY_ITEM_ID       = l_item_id
9514                         OR  (   ITEM_NUMBER         = l_item_number
9515                             AND INVENTORY_ITEM_ID   IS NULL
9516                             )
9517                         )
9518                     AND PROCESS_FLAG            = 3
9519                     AND SET_PROCESS_ID          = p_batch_id
9520                     AND REQUEST_ID              = l_request_id
9521                     AND ORGANIZATION_ID         IN  (   SELECT  MP.ORGANIZATION_ID
9522                                                         FROM    MTL_PARAMETERS MP
9523                                                         WHERE   MP.MASTER_ORGANIZATION_ID   =   l_org_id
9524                                                             AND MP.ORGANIZATION_ID          <>  l_org_id
9525                                                     );
9526                 l_is_reimport := l_is_reimport OR ( 0 <> SQL%ROWCOUNT );
9527 
9528                 -- updating item revisions
9529                 UPDATE  MTL_ITEM_REVISIONS_INTERFACE miri
9530                 SET     PROCESS_FLAG = 1
9531                 WHERE   (   INVENTORY_ITEM_ID       = l_item_id
9532                         OR  (   ITEM_NUMBER         = l_item_number
9533                             AND INVENTORY_ITEM_ID   IS NULL
9534                             )
9535                         )
9536                     AND PROCESS_FLAG            = 3
9537                     AND SET_PROCESS_ID          = p_batch_id
9538                     AND REQUEST_ID              = l_request_id
9539                     AND ORGANIZATION_ID         IN  (   SELECT  MP.ORGANIZATION_ID
9540                                                         FROM    MTL_PARAMETERS MP
9541                                                         WHERE   MP.MASTER_ORGANIZATION_ID   =  l_org_id
9542                                                     );
9543                 l_is_reimport := l_is_reimport OR ( 0 <> SQL%ROWCOUNT );
9544 
9545                 -- updating item category assignments
9546                 UPDATE MTL_ITEM_CATEGORIES_INTERFACE mici
9547                 SET     PROCESS_FLAG = 1
9548                 WHERE   (   INVENTORY_ITEM_ID       = l_item_id
9549                         OR  (   ITEM_NUMBER         = l_item_number
9550                             AND INVENTORY_ITEM_ID   IS NULL
9551                             )
9552                         )
9553                     AND PROCESS_FLAG            = 3
9554                     AND SET_PROCESS_ID          = p_batch_id
9555                     AND REQUEST_ID              = l_request_id
9556                     AND ORGANIZATION_ID         IN  (   SELECT  MP.ORGANIZATION_ID
9557                                                         FROM    MTL_PARAMETERS MP
9558                                                         WHERE   MP.MASTER_ORGANIZATION_ID   =  l_org_id
9559                                                     );
9560                 l_is_reimport := l_is_reimport OR ( 0 <> SQL%ROWCOUNT );
9561 
9562                 -- updating item user defined attributes
9563                 UPDATE EGO_ITM_USR_ATTR_INTRFC
9564                 SET     PROCESS_STATUS = 1
9565                 WHERE   (   INVENTORY_ITEM_ID       = l_item_id
9566                         OR  (   ITEM_NUMBER         = l_item_number
9567                             AND INVENTORY_ITEM_ID   IS NULL
9568                             )
9569                         )
9570                     AND PROCESS_STATUS          = 3
9571                     AND DATA_SET_ID             = p_batch_id
9572                     AND REQUEST_ID              = l_request_id
9573                     AND ORGANIZATION_ID         IN  (   SELECT  MP.ORGANIZATION_ID
9574                                                         FROM    MTL_PARAMETERS MP
9575                                                         WHERE   MP.MASTER_ORGANIZATION_ID   =  l_org_id
9576                                                     );
9577                 l_is_reimport := l_is_reimport OR ( 0 <> SQL%ROWCOUNT );
9578 
9579                 -- updating item people
9580                 UPDATE EGO_ITEM_PEOPLE_INTF eipi
9581                 SET     PROCESS_STATUS = 1
9582                 WHERE   (   INVENTORY_ITEM_ID       = l_item_id
9583                         OR  (   ITEM_NUMBER         = l_item_number
9584                             AND INVENTORY_ITEM_ID   IS NULL
9585                             )
9586                         )
9587                     AND PROCESS_STATUS          = 3
9588                     AND DATA_SET_ID             = p_batch_id
9589                     AND REQUEST_ID              = l_request_id
9590                     AND ORGANIZATION_ID         IN  (   SELECT  MP.ORGANIZATION_ID
9591                                                         FROM    MTL_PARAMETERS MP
9592                                                         WHERE   MP.MASTER_ORGANIZATION_ID   =  l_org_id
9593                                                     );
9594                 l_is_reimport := l_is_reimport OR ( 0 <> SQL%ROWCOUNT );
9595 
9596                 -- updating item AML
9597                 UPDATE EGO_AML_INTF
9598                 SET     PROCESS_FLAG = 1
9599                 WHERE   (   INVENTORY_ITEM_ID       = l_item_id
9600                         OR  (   ITEM_NUMBER         = l_item_number
9601                             AND INVENTORY_ITEM_ID   IS NULL
9602                             )
9603                         )
9604                     AND PROCESS_FLAG            = 3
9605                     AND DATA_SET_ID             = p_batch_id
9606                     AND REQUEST_ID              = l_request_id
9607                     AND ORGANIZATION_ID         IN  (   SELECT  MP.ORGANIZATION_ID
9608                                                         FROM    MTL_PARAMETERS MP
9609                                                         WHERE   MP.MASTER_ORGANIZATION_ID   =  l_org_id
9610                                                     );
9611                 l_is_reimport := l_is_reimport OR ( 0 <> SQL%ROWCOUNT );
9612 
9613                 UPDATE EGO_ITEM_ASSOCIATIONS_INTF
9614                 SET     PROCESS_FLAG = 1
9615                 WHERE   (   INVENTORY_ITEM_ID       = l_item_id
9616                         OR  (   ITEM_NUMBER         = l_item_number
9617                             AND INVENTORY_ITEM_ID   IS NULL
9618                             )
9619                         )
9620                     AND PROCESS_FLAG            = 3
9621                     AND BATCH_ID             = p_batch_id
9622                     AND REQUEST_ID              = l_request_id
9623                     AND ORGANIZATION_ID         IN  (   SELECT  MP.ORGANIZATION_ID
9624                                                         FROM    MTL_PARAMETERS MP
9625                                                         WHERE   MP.MASTER_ORGANIZATION_ID   =  l_org_id
9626                                                     );
9627                 l_is_reimport := l_is_reimport OR ( 0 <> SQL%ROWCOUNT );
9628             ELSE    -- item id is null
9629                 -- updating the item's org assignments
9630                 UPDATE  MTL_SYSTEM_ITEMS_INTERFACE MSII
9631                 SET     PROCESS_FLAG = 1
9632                 WHERE   ITEM_NUMBER             = l_item_number
9633                     AND PROCESS_FLAG            = 3
9634                     AND SET_PROCESS_ID          = p_batch_id
9635                     AND REQUEST_ID              = l_request_id
9636                     AND ORGANIZATION_ID         IN  (   SELECT  MP.ORGANIZATION_ID
9637                                                         FROM    MTL_PARAMETERS MP
9638                                                         WHERE   MP.MASTER_ORGANIZATION_ID   =   l_org_id
9639                                                             AND MP.ORGANIZATION_ID          <>  l_org_id
9640                                                     );
9641                 l_is_reimport := l_is_reimport OR ( 0 <> SQL%ROWCOUNT );
9642 
9643                 -- updating item revisions
9644                 UPDATE  MTL_ITEM_REVISIONS_INTERFACE miri
9645                 SET     PROCESS_FLAG = 1
9646                 WHERE   ITEM_NUMBER             = l_item_number
9647                     AND PROCESS_FLAG            = 3
9648                     AND SET_PROCESS_ID          = p_batch_id
9649                     AND REQUEST_ID              = l_request_id
9650                     AND ORGANIZATION_ID         IN  (   SELECT  MP.ORGANIZATION_ID
9651                                                         FROM    MTL_PARAMETERS MP
9652                                                         WHERE   MP.MASTER_ORGANIZATION_ID   =  l_org_id
9653                                                     );
9654                 l_is_reimport := l_is_reimport OR ( 0 <> SQL%ROWCOUNT );
9655 
9656                 -- updating item category assignments
9657                 UPDATE MTL_ITEM_CATEGORIES_INTERFACE mici
9658                 SET     PROCESS_FLAG = 1
9659                 WHERE   ITEM_NUMBER             = l_item_number
9660                     AND PROCESS_FLAG            = 3
9661                     AND SET_PROCESS_ID          = p_batch_id
9662                     AND REQUEST_ID              = l_request_id
9663                     AND ORGANIZATION_ID         IN  (   SELECT  MP.ORGANIZATION_ID
9664                                                         FROM    MTL_PARAMETERS MP
9665                                                         WHERE   MP.MASTER_ORGANIZATION_ID   =  l_org_id
9666                                                     );
9667                 l_is_reimport := l_is_reimport OR ( 0 <> SQL%ROWCOUNT );
9668 
9669                 -- updating item user defined attributes
9670                 UPDATE EGO_ITM_USR_ATTR_INTRFC
9671                 SET     PROCESS_STATUS = 1
9672                 WHERE   ITEM_NUMBER             = l_item_number
9673                     AND PROCESS_STATUS          = 3
9674                     AND DATA_SET_ID             = p_batch_id
9675                     AND REQUEST_ID              = l_request_id
9676                     AND ORGANIZATION_ID         IN  (   SELECT  MP.ORGANIZATION_ID
9677                                                         FROM    MTL_PARAMETERS MP
9678                                                         WHERE   MP.MASTER_ORGANIZATION_ID   =  l_org_id
9679                                                     );
9680                 l_is_reimport := l_is_reimport OR ( 0 <> SQL%ROWCOUNT );
9681 
9682                 -- updating item people
9683                 UPDATE EGO_ITEM_PEOPLE_INTF eipi
9684                 SET     PROCESS_STATUS = 1
9685                 WHERE   ITEM_NUMBER             = l_item_number
9686                     AND PROCESS_STATUS          = 3
9687                     AND DATA_SET_ID             = p_batch_id
9688                     AND REQUEST_ID              = l_request_id
9689                     AND ORGANIZATION_ID         IN  (   SELECT  MP.ORGANIZATION_ID
9690                                                         FROM    MTL_PARAMETERS MP
9691                                                         WHERE   MP.MASTER_ORGANIZATION_ID   =  l_org_id
9692                                                     );
9693                 l_is_reimport := l_is_reimport OR ( 0 <> SQL%ROWCOUNT );
9694 
9695                 -- updating item AML
9696                 UPDATE EGO_AML_INTF
9697                 SET     PROCESS_FLAG = 1
9698                 WHERE   ITEM_NUMBER             = l_item_number
9699                     AND PROCESS_FLAG            = 3
9700                     AND DATA_SET_ID             = p_batch_id
9701                     AND REQUEST_ID              = l_request_id
9702                     AND ORGANIZATION_ID         IN  (   SELECT  MP.ORGANIZATION_ID
9703                                                         FROM    MTL_PARAMETERS MP
9704                                                         WHERE   MP.MASTER_ORGANIZATION_ID   =  l_org_id
9705                                                     );
9706                 l_is_reimport := l_is_reimport OR ( 0 <> SQL%ROWCOUNT );
9707                 -- updating item ITEM ASSOCIATIONS
9708                 UPDATE EGO_ITEM_ASSOCIATIONS_INTF
9709                 SET     PROCESS_FLAG = 1
9710                 WHERE   ITEM_NUMBER             = l_item_number
9711                     AND PROCESS_FLAG            = 3
9712                     AND BATCH_ID             = p_batch_id
9713                     AND REQUEST_ID              = l_request_id
9714                     AND ORGANIZATION_ID         IN  (   SELECT  MP.ORGANIZATION_ID
9715                                                         FROM    MTL_PARAMETERS MP
9716                                                         WHERE   MP.MASTER_ORGANIZATION_ID   =  l_org_id
9717                                                     );
9718                 l_is_reimport := l_is_reimport OR ( 0 <> SQL%ROWCOUNT );
9719             END IF;
9720         ELSE    -- source system is not PIMDH
9721             SAVEPOINT do_prepare_master_row; -- ENSURES THAT THE UPDATES ARE AN ATOMIC UNIT WITHIN THE TRANSACTION
9722 
9723             -- TODO: need to check for cross-reference related security.
9724             -- however, we can't trust confirm status for the errored rows...
9725 
9726             -- XXX: Should child updates be attempted first?
9727 
9728             -- Bug: 5355759
9729             IF l_is_ssxref_only THEN
9730                 l_reimport_process_status := 11;
9731             ELSE
9732                 l_reimport_process_status := 1;
9733             END IF;
9734 
9735             -- update/select master item row
9736             UPDATE  MTL_SYSTEM_ITEMS_INTERFACE MSII
9737             SET     PROCESS_FLAG =  CASE PROCESS_FLAG
9738                                     WHEN 3 THEN l_reimport_process_status
9739 --                                    WHEN 7 THEN G_IOI_STAMP_REQUEST_ID_FLAG
9740                                     ELSE PROCESS_FLAG END
9741             WHERE   SET_PROCESS_ID          = p_batch_id
9742                AND  ORGANIZATION_ID         = p_organization_id
9743                AND  MSII.ROWID              = p_target_rowid
9744                AND  PROCESS_FLAG            IN ( 3, 7 )
9745                AND  SOURCE_SYSTEM_ID        IS NOT NULL
9746                AND  SOURCE_SYSTEM_REFERENCE IS NOT NULL
9747             RETURNING
9748                     MSII.PROCESS_FLAG
9749                 ,   MSII.REQUEST_ID
9750                 ,   MSII.SOURCE_SYSTEM_ID
9751                 ,   MSII.SOURCE_SYSTEM_REFERENCE
9752                 ,   MSII.SOURCE_SYSTEM_REFERENCE_DESC
9753                 ,   MSII.ORGANIZATION_ID
9754                 ,   MSII.INVENTORY_ITEM_ID
9755                 ,   MSII.ITEM_NUMBER
9756             INTO
9757                     l_process_flag
9758                 ,   l_request_id
9759                 ,   l_ss_id
9760                 ,   l_ssr
9761                 ,   l_ssr_desc
9762                 ,   l_org_id
9763                 ,   l_item_id
9764                 ,   l_item_number;
9765 
9766             IF 1 <> SQL%ROWCOUNT THEN
9767                 ROLLBACK TO do_prepare_master_row;
9768                 x_return_code := 10;
9769                 RETURN;
9770             END IF;
9771 
9772             IF 7 = l_process_flag THEN
9773 --              IF G_MSII_REIMPORT_ROWS IS NULL THEN
9774 --                  G_MSII_REIMPORT_ROWS := UROWID_TABLE( );
9775 --              END IF;
9776                 x_return_code := G_NEEDS_REQUEST_ID_STAMP;
9777 --              G_MSII_REIMPORT_ROWS.EXTEND( );
9778 --              G_MSII_REIMPORT_ROWS( G_MSII_REIMPORT_ROWS.LAST ) := p_target_rowid;
9779             ELSE
9780                 l_is_reimport := TRUE;
9781                 SAVEPOINT do_prepare_master_row; -- move savepoint up since parent row was in error
9782                 -- Bug: 5355759
9783                 -- check for cross-reference related security
9784 
9785                 BEGIN
9786                     SELECT ORGANIZATION_CODE
9787                     INTO l_org_code
9788                     FROM MTL_PARAMETERS
9789                     WHERE ORGANIZATION_ID = l_org_id;
9790                 EXCEPTION
9791                 WHEN NO_DATA_FOUND THEN
9792                     NULL;
9793                 END;
9794 
9795                 BEGIN
9796                     SELECT  MSIK.CONCATENATED_SEGMENTS
9797                          ,  MSIK.INVENTORY_ITEM_ID
9798                          ,  MCR.DESCRIPTION
9799                     INTO    l_xref_item_number
9800                          ,  l_xref_item_id
9801                          ,  l_xref_desc
9802                     FROM  MTL_CROSS_REFERENCES MCR,
9803                           MTL_SYSTEM_ITEMS_KFV MSIK
9804                     WHERE   MCR.INVENTORY_ITEM_ID    = MSIK.INVENTORY_ITEM_ID
9805                         AND MSIK.ORGANIZATION_ID     = l_org_id
9806                         AND MCR.CROSS_REFERENCE_TYPE = 'SS_ITEM_XREF'
9807                         AND MCR.SOURCE_SYSTEM_ID     = l_ss_id
9808                         AND MCR.CROSS_REFERENCE      = l_ssr
9809                         AND SYSDATE BETWEEN NVL(MCR.START_DATE_ACTIVE, SYSDATE-1) AND NVL(MCR.END_DATE_ACTIVE, SYSDATE+1);
9810 
9811                     IF l_xref_item_id <> l_item_id THEN
9812                         -- old xref and new xref are not same, so check privilege on old item
9813                         l_priv_exists := EGO_DATA_SECURITY.CHECK_FUNCTION(1.0, 'EGO_EDIT_SS_ITEM_XREFS', 'EGO_ITEM', l_xref_item_id, l_org_id, NULL, NULL, NULL, l_party_name);
9814                         IF 'T'        <> l_priv_exists THEN
9815                             -- no privileges, logging error
9816                             FND_MESSAGE.SET_NAME('EGO', 'EGO_NO_EDIT_XREF_PRIV');
9817                             FND_MESSAGE.SET_TOKEN('ITEM', l_xref_item_number);
9818                             FND_MESSAGE.SET_TOKEN('ORG', l_org_code);
9819                             l_msg_text := FND_MESSAGE.GET;
9820                             UPDATE MTL_SYSTEM_ITEMS_INTERFACE
9821                                 SET PROCESS_FLAG = 3
9822                             WHERE ROWID          = p_target_rowid;
9823                             x_return_code       := G_NEED_TO_LOG_ERROR;
9824                             x_err_msg           := l_msg_text;
9825                             RETURN;
9826                         ELSE
9827                             -- privilege exists on old item. Check privilege on new item
9828                             l_priv_exists := EGO_DATA_SECURITY.CHECK_FUNCTION(1.0, 'EGO_EDIT_SS_ITEM_XREFS', 'EGO_ITEM', l_item_id, l_org_id, NULL, NULL, NULL, l_party_name);
9829                             IF 'T'        <> l_priv_exists THEN
9830                                 -- no privileges, logging error
9831                                 FND_MESSAGE.SET_NAME('EGO', 'EGO_NO_EDIT_XREF_PRIV');
9832                                 FND_MESSAGE.SET_TOKEN('ITEM', l_item_number);
9833                                 FND_MESSAGE.SET_TOKEN('ORG', l_org_code);
9834                                 l_msg_text := FND_MESSAGE.GET;
9835 
9836                                 UPDATE MTL_SYSTEM_ITEMS_INTERFACE
9837                                     SET PROCESS_FLAG = 3
9838                                 WHERE ROWID          = p_target_rowid;
9839 
9840                                 x_return_code       := G_NEED_TO_LOG_ERROR;
9841                                 x_err_msg           := l_msg_text;
9842                                 RETURN;
9843                             END IF; -- IF 'T' <> l_priv_exists THEN
9844                         END IF;     -- IF 'T' <> l_priv_exists THEN
9845                     ELSIF l_xref_item_id = l_item_id AND NVL(l_ssr_desc, '!') <> NVL(l_xref_desc, '!') THEN
9846                         -- New and Old link are same, but description is different, so check privilege on item
9847                         l_priv_exists := EGO_DATA_SECURITY.CHECK_FUNCTION(1.0, 'EGO_EDIT_SS_ITEM_XREFS', 'EGO_ITEM', l_item_id, l_org_id, NULL, NULL, NULL, l_party_name);
9848                         IF 'T'        <> l_priv_exists THEN
9849                             -- no privileges, logging error
9850                             FND_MESSAGE.SET_NAME('EGO', 'EGO_NO_EDIT_XREF_PRIV');
9851                             FND_MESSAGE.SET_TOKEN('ITEM', l_item_number);
9852                             FND_MESSAGE.SET_TOKEN('ORG', l_org_code);
9853                             l_msg_text := FND_MESSAGE.GET;
9854 
9855                             UPDATE MTL_SYSTEM_ITEMS_INTERFACE
9856                                 SET PROCESS_FLAG = 3
9857                             WHERE ROWID          = p_target_rowid;
9858 
9859                             x_return_code       := G_NEED_TO_LOG_ERROR;
9860                             x_err_msg           := l_msg_text;
9861                             RETURN;
9862                         END IF; -- IF 'T' <> l_priv_exists THEN
9863                     END IF;     -- IF l_xref_item_id <> l_item_id THEN
9864                 EXCEPTION
9865                 WHEN NO_DATA_FOUND THEN
9866                     -- check privilege only for new item
9867                     l_priv_exists := EGO_DATA_SECURITY.CHECK_FUNCTION(1.0, 'EGO_EDIT_SS_ITEM_XREFS', 'EGO_ITEM', l_item_id, l_org_id, NULL, NULL, NULL, l_party_name);
9868                     IF 'T'        <> l_priv_exists THEN
9869                         -- no privileges, logging error
9870                         FND_MESSAGE.SET_NAME('EGO', 'EGO_NO_EDIT_XREF_PRIV');
9871                         FND_MESSAGE.SET_TOKEN('ITEM', l_item_number);
9872                         FND_MESSAGE.SET_TOKEN('ORG', l_org_code);
9873                         l_msg_text := FND_MESSAGE.GET;
9874 
9875                         UPDATE MTL_SYSTEM_ITEMS_INTERFACE
9876                             SET PROCESS_FLAG = 3
9877                         WHERE ROWID          = p_target_rowid;
9878 
9879                         x_return_code       := G_NEED_TO_LOG_ERROR;
9880                         x_err_msg           := l_msg_text;
9881                         RETURN;
9882                     END IF; -- IF 'T' <> l_priv_exists THEN
9883                 END;
9884             END IF;
9885 
9886             IF NOT l_is_ssxref_only THEN
9887                 -- updating item's org assignments
9888                 UPDATE  MTL_SYSTEM_ITEMS_INTERFACE MSII
9889                 SET     PROCESS_FLAG = 1
9890                 WHERE   SOURCE_SYSTEM_ID        = l_ss_id
9891                     AND SOURCE_SYSTEM_REFERENCE = l_ssr
9892                     AND PROCESS_FLAG            = 3
9893                     AND SET_PROCESS_ID          = p_batch_id
9894                     AND REQUEST_ID              = l_request_id
9895                     AND ORGANIZATION_ID     IN  (   SELECT  MP.ORGANIZATION_ID          -- org assignment
9896                                                     FROM    MTL_PARAMETERS MP
9897                                                     WHERE   MP.MASTER_ORGANIZATION_ID   =   l_org_id
9898                                                         AND MP.ORGANIZATION_ID          <>  l_org_id
9899                                                 );
9900                 l_is_reimport := l_is_reimport OR ( 0 <> SQL%ROWCOUNT );
9901 
9902                 -- updating item revisions
9903                 UPDATE  MTL_ITEM_REVISIONS_INTERFACE miri
9904                 SET     PROCESS_FLAG = 1
9905                 WHERE   SOURCE_SYSTEM_ID        = l_ss_id
9906                     AND SOURCE_SYSTEM_REFERENCE = l_ssr
9907                     AND PROCESS_FLAG            = 3
9908                     AND SET_PROCESS_ID          = p_batch_id
9909                     AND REQUEST_ID              = l_request_id
9910                     AND ORGANIZATION_ID         IN  (   SELECT  MP.ORGANIZATION_ID
9911                                                         FROM    MTL_PARAMETERS MP
9912                                                         WHERE   MP.MASTER_ORGANIZATION_ID   =  l_org_id
9913                                                     );
9914                 l_is_reimport := l_is_reimport OR ( 0 <> SQL%ROWCOUNT );
9915 
9916                 -- updating item category assignments
9917                 UPDATE MTL_ITEM_CATEGORIES_INTERFACE mici
9918                 SET     PROCESS_FLAG = 1
9919                 WHERE   SOURCE_SYSTEM_ID        = l_ss_id
9920                     AND SOURCE_SYSTEM_REFERENCE = l_ssr
9921                     AND PROCESS_FLAG            = 3
9922                     AND SET_PROCESS_ID          = p_batch_id
9923                     AND REQUEST_ID              = l_request_id
9924                     AND ORGANIZATION_ID         IN  (   SELECT  MP.ORGANIZATION_ID
9925                                                         FROM    MTL_PARAMETERS MP
9926                                                         WHERE   MP.MASTER_ORGANIZATION_ID   =  l_org_id
9927                                                     );
9928                 l_is_reimport := l_is_reimport OR ( 0 <> SQL%ROWCOUNT );
9929 
9930                 -- updating item user defined attributes
9931                 UPDATE EGO_ITM_USR_ATTR_INTRFC
9932                 SET     PROCESS_STATUS = 1
9933                 WHERE   SOURCE_SYSTEM_ID        = l_ss_id
9934                     AND SOURCE_SYSTEM_REFERENCE = l_ssr
9935                     AND PROCESS_STATUS          = 3
9936                     AND DATA_SET_ID             = p_batch_id
9937                     AND REQUEST_ID              = l_request_id
9938                     AND ORGANIZATION_ID         IN  (   SELECT  MP.ORGANIZATION_ID
9939                                                         FROM    MTL_PARAMETERS MP
9940                                                         WHERE   MP.MASTER_ORGANIZATION_ID   =  l_org_id
9941                                                     );
9942                 l_is_reimport := l_is_reimport OR ( 0 <> SQL%ROWCOUNT );
9943 
9944                 -- updating item people
9945                 UPDATE EGO_ITEM_PEOPLE_INTF eipi
9946                 SET     PROCESS_STATUS = 1
9947                 WHERE   SOURCE_SYSTEM_ID        = l_ss_id
9948                     AND SOURCE_SYSTEM_REFERENCE = l_ssr
9949                     AND PROCESS_STATUS          = 3
9950                     AND DATA_SET_ID             = p_batch_id
9951                     AND REQUEST_ID              = l_request_id
9952                     AND ORGANIZATION_ID         IN  (   SELECT  MP.ORGANIZATION_ID
9953                                                         FROM    MTL_PARAMETERS MP
9954                                                         WHERE   MP.MASTER_ORGANIZATION_ID   =  l_org_id
9955                                                     );
9956                 l_is_reimport := l_is_reimport OR ( 0 <> SQL%ROWCOUNT );
9957 
9958                 -- updating item AML
9959                 UPDATE EGO_AML_INTF
9960                 SET     PROCESS_FLAG = 1
9961                 WHERE   SOURCE_SYSTEM_ID        = l_ss_id
9962                     AND SOURCE_SYSTEM_REFERENCE = l_ssr
9963                     AND PROCESS_FLAG            = 3
9964                     AND DATA_SET_ID             = p_batch_id
9965                     AND REQUEST_ID              = l_request_id
9966                     AND ORGANIZATION_ID         IN  (   SELECT  MP.ORGANIZATION_ID
9967                                                         FROM    MTL_PARAMETERS MP
9968                                                         WHERE   MP.MASTER_ORGANIZATION_ID   =  l_org_id
9969                                                     );
9970                 l_is_reimport := l_is_reimport OR ( 0 <> SQL%ROWCOUNT );
9971                 UPDATE EGO_ITEM_ASSOCIATIONS_INTF
9972                 SET     PROCESS_FLAG = 1
9973                 WHERE   SOURCE_SYSTEM_ID        = l_ss_id
9974                     AND SOURCE_SYSTEM_REFERENCE = l_ssr
9975                     AND PROCESS_FLAG            = 3
9976                     AND BATCH_ID             = p_batch_id
9977                     AND REQUEST_ID              = l_request_id
9978                     AND ORGANIZATION_ID         IN  (   SELECT  MP.ORGANIZATION_ID
9979                                                         FROM    MTL_PARAMETERS MP
9980                                                         WHERE   MP.MASTER_ORGANIZATION_ID   =  l_org_id
9981                                                     );
9982                 l_is_reimport := l_is_reimport OR ( 0 <> SQL%ROWCOUNT );
9983             END IF; -- IF l_is_ssxref_only
9984         END IF;
9985 
9986         IF NOT l_is_reimport THEN
9987             ROLLBACK TO do_prepare_master_row;
9988             x_return_code := 50;
9989         END IF;
9990         SAVEPOINT do_prepare_master_row;
9991     EXCEPTION
9992         WHEN NO_DATA_FOUND THEN
9993             ROLLBACK TO do_prepare_master_row;
9994             x_return_code := 30;
9995         WHEN TOO_MANY_ROWS THEN
9996             ROLLBACK TO do_prepare_master_row;
9997             x_return_code := 40;
9998         WHEN OTHERS THEN -- unanticipated error ( probably during update )
9999             ROLLBACK TO do_prepare_master_row;
10000             x_return_code := SQLCODE;
10001     END Prepare_Row_For_ReImport;
10002 
10003  ------------------------------------------------------------------------------------------
10004  -- This function returns the batch status of a batch                                    --
10005  ------------------------------------------------------------------------------------------
10006  FUNCTION GET_BATCH_STATUS(p_batch_id NUMBER) RETURN VARCHAR2 AS
10007    l_batch_status VARCHAR2(2);
10008  BEGIN
10009    SELECT
10010      (CASE  WHEN ( (crimp.PHASE_CODE IN ('P', 'I', 'R') AND (crimp.REQUESTED_START_DATE <= SYSDATE) )
10011                   OR crmatch.PHASE_CODE IN ('P', 'I', 'R')
10012                  )
10013             THEN 'P'
10014             ELSE impbat.BATCH_STATUS
10015       END
10016      ) BATCH_STATUS
10017      INTO l_batch_status
10018    FROM
10019      EGO_IMPORT_BATCHES_B impbat,
10020      FND_CONCURRENT_REQUESTS crimp,
10021      FND_CONCURRENT_REQUESTS crmatch
10022    WHERE impbat.BATCH_ID               = p_batch_id
10023      AND impbat.LAST_MATCH_REQUEST_ID  = crmatch.REQUEST_ID (+)
10024      AND impbat.LAST_IMPORT_REQUEST_ID = crimp.REQUEST_ID (+);
10025 
10026    RETURN l_batch_status;
10027  EXCEPTION
10028    WHEN NO_DATA_FOUND THEN
10029      RETURN NULL;
10030  END GET_BATCH_STATUS;
10031 
10032     ------------------------------------------------------------------------------------------------
10033     --  Functions GET_LATEST_EIUAI_REV_[SS/PDH]                                                   --
10034     --  Returns the the code of the latest LOGICAL revision row loaded for the item into the      --
10035     --  user defined attribute interface table                                                    --
10036     --  Note the lack of attribute-specific parameters - this is to ensure that contexts in       --
10037     --      which this proc gets called will only attempt to go after a single logical revision   --
10038     --      row, regardless of the possible absence of the required attributes in that row and    --
10039     --      their possible presence in other logical rows of the interface table                  --
10040     ------------------------------------------------------------------------------------------------
10041     FUNCTION GET_LATEST_EIUAI_REV_SS
10042         (
10043             p_batch_id                      IN      EGO_ITM_USR_ATTR_INTRFC.DATA_SET_ID%TYPE
10044         ,   p_source_system_id              IN      EGO_ITM_USR_ATTR_INTRFC.SOURCE_SYSTEM_ID%TYPE
10045         ,   p_source_system_reference       IN      EGO_ITM_USR_ATTR_INTRFC.SOURCE_SYSTEM_REFERENCE%TYPE
10046         ,   p_organization_id               IN      EGO_ITM_USR_ATTR_INTRFC.ORGANIZATION_ID%TYPE
10047         ,   p_do_processed_rows_flag        IN      FLAG                    DEFAULT FND_API.G_FALSE
10048         ,   p_request_id                    IN      EGO_ITM_USR_ATTR_INTRFC.REQUEST_ID%TYPE DEFAULT NULL
10049         )
10050     RETURN EGO_ITM_USR_ATTR_INTRFC.REVISION%TYPE
10051     IS
10052         l_rev_code EGO_ITM_USR_ATTR_INTRFC.REVISION%TYPE;
10053     BEGIN
10054         IF  p_do_processed_rows_flag = FND_API.G_TRUE THEN
10055            SELECT MAX( EIUAI.REVISION ) INTO  l_rev_code
10056            FROM EGO_ITM_USR_ATTR_INTRFC EIUAI
10057            WHERE   EIUAI.SOURCE_SYSTEM_REFERENCE   = p_source_system_reference
10058                AND EIUAI.SOURCE_SYSTEM_ID          = p_source_system_id
10059                AND EIUAI.ORGANIZATION_ID           = p_organization_id
10060                AND EIUAI.DATA_SET_ID               = p_batch_id
10061                AND EIUAI.REVISION                  IS NOT NULL
10062                AND EIUAI.PROCESS_STATUS            IN ( 3,4 )
10063                AND EIUAI.REQUEST_ID                = p_request_id
10064                AND EXISTS( SELECT NULL -- SEE DEFINITION OF EGO_OBJ_ATTR_GRP_ASSOCS_V
10065                        FROM EGO_FND_DSC_FLX_CTX_EXT FL_CTX_EXT
10066                           , EGO_OBJ_AG_ASSOCS_B A
10067                        WHERE
10068                            -- CHECK FOR REVISION LEVEL GROUPS ONLY
10069                            A.DATA_LEVEL                             = 'ITEM_REVISION_LEVEL'
10070                            AND FL_CTX_EXT.DESCRIPTIVE_FLEXFIELD_NAME    = NVL( EIUAI.ATTR_GROUP_TYPE, G_DEFAULT_ATTR_GROUP_TYPE )
10071                            AND FL_CTX_EXT.APPLICATION_ID                = 431
10072                            AND FL_CTX_EXT.DESCRIPTIVE_FLEX_CONTEXT_CODE = EIUAI.ATTR_GROUP_INT_NAME
10073                            AND A.ATTR_GROUP_ID                      = FL_CTX_EXT.ATTR_GROUP_ID
10074                            -- TO ENSURE A(OBJECT_ID, CLASS_CODE, ATTR_GROUP) IDX USED:
10075                            AND A.CLASSIFICATION_CODE                IS NOT NULL
10076                            AND A.OBJECT_ID                          IS NOT NULL
10077                            AND ROWNUM = 1
10078                        );
10079                -- the aggregate function MAX always returns one (possibly null) row, so
10080                -- no need to check for the NO_DATA_FOUND exception, or initialize l_rev_code
10081         ELSE
10082            SELECT MAX( EIUAI.REVISION ) INTO  l_rev_code
10083            FROM EGO_ITM_USR_ATTR_INTRFC EIUAI
10084            WHERE   EIUAI.SOURCE_SYSTEM_REFERENCE   = p_source_system_reference
10085                AND EIUAI.SOURCE_SYSTEM_ID          = p_source_system_id
10086                AND EIUAI.ORGANIZATION_ID           = p_organization_id
10087                AND EIUAI.DATA_SET_ID               = p_batch_id
10088                AND EIUAI.REVISION                  IS NOT NULL
10089                AND EIUAI.PROCESS_STATUS            = 0
10090                AND EXISTS( SELECT NULL -- SEE DEFINITION OF EGO_OBJ_ATTR_GRP_ASSOCS_V
10091                        FROM EGO_FND_DSC_FLX_CTX_EXT FL_CTX_EXT
10092                           , EGO_OBJ_AG_ASSOCS_B A
10093                        WHERE
10094                            -- CHECK FOR REVISION LEVEL GROUPS ONLY
10095                            A.DATA_LEVEL                             = 'ITEM_REVISION_LEVEL'
10096                            AND FL_CTX_EXT.DESCRIPTIVE_FLEXFIELD_NAME    = NVL( EIUAI.ATTR_GROUP_TYPE, G_DEFAULT_ATTR_GROUP_TYPE )
10097                            AND FL_CTX_EXT.APPLICATION_ID                = 431
10098                            AND FL_CTX_EXT.DESCRIPTIVE_FLEX_CONTEXT_CODE = EIUAI.ATTR_GROUP_INT_NAME
10099                            AND A.ATTR_GROUP_ID                      = FL_CTX_EXT.ATTR_GROUP_ID
10100                            -- TO ENSURE A(OBJECT_ID, CLASS_CODE, ATTR_GROUP) IDX USED:
10101                            AND A.CLASSIFICATION_CODE                IS NOT NULL
10102                            AND A.OBJECT_ID                          IS NOT NULL
10103                            AND ROWNUM = 1
10104                        );
10105                -- the aggregate function MAX always returns one (possibly null) row, so
10106                -- no need to check for the NO_DATA_FOUND exception, or initialize l_rev_code
10107         END IF;
10108         RETURN l_rev_code;
10109     END GET_LATEST_EIUAI_REV_SS;
10110 
10111    FUNCTION GET_LATEST_EIUAI_REV_PDH
10112        (
10113            p_batch_id                      IN      EGO_ITM_USR_ATTR_INTRFC.DATA_SET_ID%TYPE
10114        ,   p_inventory_item_id             IN      EGO_ITM_USR_ATTR_INTRFC.INVENTORY_ITEM_ID%TYPE
10115        ,   p_item_number                   IN      EGO_ITM_USR_ATTR_INTRFC.ITEM_NUMBER%TYPE
10116        ,   p_organization_id               IN      EGO_ITM_USR_ATTR_INTRFC.ORGANIZATION_ID%TYPE
10117        ,   p_do_processed_rows_flag        IN      FLAG                    DEFAULT FND_API.G_FALSE
10118        ,   p_request_id                    IN      EGO_ITM_USR_ATTR_INTRFC.REQUEST_ID%TYPE DEFAULT NULL
10119        )
10120    RETURN EGO_ITM_USR_ATTR_INTRFC.REVISION%TYPE
10121    IS
10122        l_rev_code          EGO_ITM_USR_ATTR_INTRFC.REVISION%TYPE;
10123        l_sql_stmt          VARCHAR2( 32000 );
10124    BEGIN
10125        -- the aggregate function MAX always returns one (possibly null) row, so
10126        -- no need to check for the NO_DATA_FOUND exception, or initialize l_rev_code
10127 
10128        IF   p_inventory_item_id IS NULL
10129        THEN
10130            IF p_do_processed_rows_flag = FND_API.G_TRUE THEN
10131                SELECT MAX( EIUAI.REVISION )
10132                INTO l_rev_code
10133                FROM EGO_ITM_USR_ATTR_INTRFC EIUAI
10134                WHERE   EIUAI.ITEM_NUMBER               = p_item_number
10135                    AND EIUAI.ORGANIZATION_ID           = p_organization_id
10136                    AND EIUAI.DATA_SET_ID               = p_batch_id
10137                    AND EIUAI.REVISION                  IS NOT NULL
10138                    AND EIUAI.PROCESS_STATUS            IN ( 3, 4 )
10139                    AND EIUAI.REQUEST_ID                = p_request_id
10140                    AND EXISTS( SELECT NULL -- SEE DEFINITION OF EGO_OBJ_ATTR_GRP_ASSOCS_V
10141                            FROM EGO_FND_DSC_FLX_CTX_EXT FL_CTX_EXT
10142                               , EGO_OBJ_AG_ASSOCS_B A
10143                            WHERE
10144                                -- CHECK FOR REVISION LEVEL GROUPS ONLY
10145                                A.DATA_LEVEL                             = 'ITEM_REVISION_LEVEL'
10146                                AND FL_CTX_EXT.DESCRIPTIVE_FLEXFIELD_NAME    = NVL( EIUAI.ATTR_GROUP_TYPE, G_DEFAULT_ATTR_GROUP_TYPE )
10147                                AND FL_CTX_EXT.APPLICATION_ID                = 431
10148                                AND FL_CTX_EXT.DESCRIPTIVE_FLEX_CONTEXT_CODE = EIUAI.ATTR_GROUP_INT_NAME
10149                                AND A.ATTR_GROUP_ID                      = FL_CTX_EXT.ATTR_GROUP_ID
10150                                -- TO ENSURE A(OBJECT_ID, CLASS_CODE, ATTR_GROUP) IDX USED:
10151                                AND A.CLASSIFICATION_CODE                IS NOT NULL
10152                                AND A.OBJECT_ID                          IS NOT NULL
10153                                AND ROWNUM = 1
10154                            );
10155                    -- the aggregate function MAX always returns one (possibly null) row, so
10156                    -- no need to check for the NO_DATA_FOUND exception, or initialize l_rev_code
10157            ELSE
10158                SELECT MAX( EIUAI.REVISION )
10159                INTO l_rev_code
10160                FROM EGO_ITM_USR_ATTR_INTRFC EIUAI
10161                WHERE   EIUAI.ITEM_NUMBER               = p_item_number
10162                    AND EIUAI.ORGANIZATION_ID           = p_organization_id
10163                    AND EIUAI.DATA_SET_ID               = p_batch_id
10164                    AND EIUAI.REVISION                  IS NOT NULL
10165                    AND EIUAI.PROCESS_STATUS            = 1
10166                    AND EXISTS( SELECT NULL -- SEE DEFINITION OF EGO_OBJ_ATTR_GRP_ASSOCS_V
10167                            FROM EGO_FND_DSC_FLX_CTX_EXT FL_CTX_EXT
10168                               , EGO_OBJ_AG_ASSOCS_B A
10169                            WHERE
10170                                -- CHECK FOR REVISION LEVEL GROUPS ONLY
10171                                A.DATA_LEVEL                             = 'ITEM_REVISION_LEVEL'
10172                                AND FL_CTX_EXT.DESCRIPTIVE_FLEXFIELD_NAME    = NVL( EIUAI.ATTR_GROUP_TYPE, G_DEFAULT_ATTR_GROUP_TYPE )
10173                                AND FL_CTX_EXT.APPLICATION_ID                = 431
10174                                AND FL_CTX_EXT.DESCRIPTIVE_FLEX_CONTEXT_CODE = EIUAI.ATTR_GROUP_INT_NAME
10175                                AND A.ATTR_GROUP_ID                      = FL_CTX_EXT.ATTR_GROUP_ID
10176                                -- TO ENSURE A(OBJECT_ID, CLASS_CODE, ATTR_GROUP) IDX USED:
10177                                AND A.CLASSIFICATION_CODE                IS NOT NULL
10178                                AND A.OBJECT_ID                          IS NOT NULL
10179                                AND ROWNUM = 1
10180                            );
10181                    -- the aggregate function MAX always returns one (possibly null) row, so
10182                    -- no need to check for the NO_DATA_FOUND exception, or initialize l_rev_code
10183            END IF;
10184        ELSE
10185            IF p_do_processed_rows_flag = FND_API.G_TRUE THEN
10186                SELECT MAX( EIUAI.REVISION )
10187                INTO l_rev_code
10188                FROM EGO_ITM_USR_ATTR_INTRFC EIUAI
10189                WHERE
10190                    (   (   EIUAI.INVENTORY_ITEM_ID     IS NULL
10191                        AND EIUAI.ITEM_NUMBER           = p_item_number
10192                        )
10193                    OR  EIUAI.INVENTORY_ITEM_ID         = p_inventory_item_id
10194                    )
10195                    AND EIUAI.ORGANIZATION_ID           = p_organization_id
10196                    AND EIUAI.DATA_SET_ID               = p_batch_id
10197                    AND EIUAI.REVISION                  IS NOT NULL
10198                    AND EIUAI.PROCESS_STATUS            IN ( 3, 4 )
10199                    AND EIUAI.REQUEST_ID                = p_request_id
10200                    AND EXISTS( SELECT NULL -- SEE DEFINITION OF EGO_OBJ_ATTR_GRP_ASSOCS_V
10201                            FROM EGO_FND_DSC_FLX_CTX_EXT FL_CTX_EXT
10202                               , EGO_OBJ_AG_ASSOCS_B A
10203                            WHERE
10204                                -- CHECK FOR REVISION LEVEL GROUPS ONLY
10205                                A.DATA_LEVEL                             = 'ITEM_REVISION_LEVEL'
10206                                AND FL_CTX_EXT.DESCRIPTIVE_FLEXFIELD_NAME    = NVL( EIUAI.ATTR_GROUP_TYPE, G_DEFAULT_ATTR_GROUP_TYPE )
10207                                AND FL_CTX_EXT.APPLICATION_ID                = 431
10208                                AND FL_CTX_EXT.DESCRIPTIVE_FLEX_CONTEXT_CODE = EIUAI.ATTR_GROUP_INT_NAME
10209                                AND A.ATTR_GROUP_ID                      = FL_CTX_EXT.ATTR_GROUP_ID
10210                                -- TO ENSURE A(OBJECT_ID, CLASS_CODE, ATTR_GROUP) IDX USED:
10211                                AND A.CLASSIFICATION_CODE                IS NOT NULL
10212                                AND A.OBJECT_ID                          IS NOT NULL
10213                                AND ROWNUM = 1
10214                            );
10215                    -- the aggregate function MAX always returns one (possibly null) row, so
10216                    -- no need to check for the NO_DATA_FOUND exception, or initialize l_rev_code
10217            ELSE
10218                SELECT MAX( EIUAI.REVISION )
10219                INTO l_rev_code
10220                FROM EGO_ITM_USR_ATTR_INTRFC EIUAI
10221                WHERE
10222                    (   (   EIUAI.INVENTORY_ITEM_ID     IS NULL
10223                        AND EIUAI.ITEM_NUMBER           = p_item_number
10224                        )
10225                    OR  EIUAI.INVENTORY_ITEM_ID         = p_inventory_item_id
10226                    )
10227                    AND EIUAI.ORGANIZATION_ID           = p_organization_id
10228                    AND EIUAI.DATA_SET_ID               = p_batch_id
10229                    AND EIUAI.REVISION                  IS NOT NULL
10230                    AND EIUAI.PROCESS_STATUS            = 1
10231                    AND EXISTS( SELECT NULL -- SEE DEFINITION OF EGO_OBJ_ATTR_GRP_ASSOCS_V
10232                            FROM EGO_FND_DSC_FLX_CTX_EXT FL_CTX_EXT
10233                               , EGO_OBJ_AG_ASSOCS_B A
10234                            WHERE
10235                                -- CHECK FOR REVISION LEVEL GROUPS ONLY
10236                                A.DATA_LEVEL                             = 'ITEM_REVISION_LEVEL'
10237                                AND FL_CTX_EXT.DESCRIPTIVE_FLEXFIELD_NAME    = NVL( EIUAI.ATTR_GROUP_TYPE, G_DEFAULT_ATTR_GROUP_TYPE )
10238                                AND FL_CTX_EXT.APPLICATION_ID                = 431
10239                                AND FL_CTX_EXT.DESCRIPTIVE_FLEX_CONTEXT_CODE = EIUAI.ATTR_GROUP_INT_NAME
10240                                AND A.ATTR_GROUP_ID                      = FL_CTX_EXT.ATTR_GROUP_ID
10241                                -- TO ENSURE A(OBJECT_ID, CLASS_CODE, ATTR_GROUP) IDX USED:
10242                                AND A.CLASSIFICATION_CODE                IS NOT NULL
10243                                AND A.OBJECT_ID                          IS NOT NULL
10244                                AND ROWNUM = 1
10245                            );
10246                    -- the aggregate function MAX always returns one (possibly null) row, so
10247                    -- no need to check for the NO_DATA_FOUND exception, or initialize l_rev_code
10248            END IF;
10249        END IF;
10250        RETURN l_rev_code;
10251    END GET_LATEST_EIUAI_REV_PDH;
10252 
10253     FUNCTION GET_LATEST_MIRI_REV_SS
10254     (
10255         p_batch_id                      IN  MTL_ITEM_REVISIONS_INTERFACE.SET_PROCESS_ID%TYPE
10256     ,   p_source_system_id              IN  MTL_ITEM_REVISIONS_INTERFACE.SOURCE_SYSTEM_ID%TYPE
10257     ,   p_source_system_reference       IN  MTL_ITEM_REVISIONS_INTERFACE.SOURCE_SYSTEM_REFERENCE%TYPE
10258     ,   p_organization_id               IN  MTL_ITEM_REVISIONS_INTERFACE.ORGANIZATION_ID%TYPE
10259     ,   p_do_processed_rows_flag        IN  FLAG                    DEFAULT FND_API.G_FALSE
10260     ,   p_request_id                    IN  MTL_ITEM_REVISIONS_INTERFACE.REQUEST_ID%TYPE DEFAULT NULL
10261     )
10262     RETURN MTL_ITEM_REVISIONS_INTERFACE.REVISION%TYPE IS
10263        l_revision MTL_ITEM_REVISIONS_INTERFACE.REVISION%TYPE;
10264    BEGIN
10265       IF p_do_processed_rows_flag = FND_API.G_FALSE THEN
10266             SELECT MAX( REVISION ) KEEP ( DENSE_RANK FIRST ORDER BY MIRI.EFFECTIVITY_DATE DESC NULLS LAST , MIRI.REVISION DESC NULLS LAST )
10267             INTO l_revision
10268             FROM
10269                MTL_ITEM_REVISIONS_INTERFACE MIRI
10270             WHERE   MIRI.SET_PROCESS_id             = p_batch_id
10271                 AND MIRI.SOURCE_SYSTEM_ID           = p_source_system_id
10272                 AND MIRI.SOURCE_SYSTEM_REFERENCE    = p_source_system_reference
10273                 AND MIRI.ORGANIZATION_ID            = p_organization_id
10274                 AND MIRI.PROCESS_FLAG               = 0;
10275       ELSE
10276             SELECT MAX( REVISION ) KEEP ( DENSE_RANK FIRST ORDER BY MIRI.EFFECTIVITY_DATE DESC NULLS LAST , MIRI.REVISION DESC NULLS LAST )
10277             INTO l_revision
10278             FROM
10279                MTL_ITEM_REVISIONS_INTERFACE MIRI
10280             WHERE
10281                MIRI.SET_PROCESS_id              = p_batch_id
10282                AND MIRI.SOURCE_SYSTEM_ID        = p_source_system_id
10283                AND MIRI.SOURCE_SYSTEM_REFERENCE = p_source_system_reference
10284                AND MIRI.ORGANIZATION_ID         = p_organization_id
10285                AND MIRI.REQUEST_ID              = p_request_id
10286                AND MIRI.PROCESS_FLAG            IN (3, 7);
10287       END IF;
10288       RETURN l_revision;
10289    EXCEPTION
10290        WHEN NO_DATA_FOUND THEN
10291            RETURN NULL;
10292    END GET_LATEST_MIRI_REV_SS;
10293 
10294     FUNCTION GET_LATEST_MIRI_REV_PDH
10295     (
10296         p_batch_id                      IN  MTL_ITEM_REVISIONS_INTERFACE.SET_PROCESS_ID%TYPE
10297     ,   p_inventory_item_id             IN  MTL_ITEM_REVISIONS_INTERFACE.INVENTORY_ITEM_ID%TYPE
10298     ,   p_item_number                   IN  MTL_ITEM_REVISIONS_INTERFACE.ITEM_NUMBER%TYPE
10299     ,   p_organization_id               IN  MTL_ITEM_REVISIONS_INTERFACE.ORGANIZATION_ID%TYPE
10300     ,   p_do_processed_rows_flag        IN  FLAG                    DEFAULT FND_API.G_FALSE
10301     ,   p_request_id                    IN  MTL_ITEM_REVISIONS_INTERFACE.REQUEST_ID%TYPE DEFAULT NULL
10302     )
10303    RETURN MTL_ITEM_REVISIONS_INTERFACE.REVISION%TYPE IS
10304        l_revision MTL_ITEM_REVISIONS_INTERFACE.REVISION%TYPE;
10305    BEGIN
10306       IF p_inventory_item_id IS NULL THEN
10307          IF p_do_processed_rows_flag = FND_API.G_FALSE THEN
10308             SELECT MAX( REVISION ) KEEP ( DENSE_RANK FIRST
10309                                         ORDER BY MIRI.EFFECTIVITY_DATE DESC NULLS LAST , MIRI.REVISION DESC NULLS LAST )
10310             INTO l_revision
10311             FROM MTL_ITEM_REVISIONS_INTERFACE MIRI
10312             WHERE  MIRI.SET_PROCESS_id      = p_batch_id
10313                AND MIRI.ITEM_NUMBER         = p_item_number
10314                AND MIRI.ORGANIZATION_ID     = p_organization_id
10315                AND MIRI.PROCESS_FLAG        = 1;
10316          ELSE
10317             SELECT MAX( REVISION ) KEEP ( DENSE_RANK FIRST
10318                                         ORDER BY MIRI.EFFECTIVITY_DATE DESC NULLS LAST , MIRI.REVISION DESC NULLS LAST )
10319             INTO l_revision
10320             FROM MTL_ITEM_REVISIONS_INTERFACE MIRI
10321             WHERE  MIRI.SET_PROCESS_id      = p_batch_id
10322                AND MIRI.ITEM_NUMBER         = p_item_number
10323                AND MIRI.ORGANIZATION_ID     = p_organization_id
10324                AND MIRI.REQUEST_ID          = p_request_id
10325                AND MIRI.PROCESS_FLAG        IN (3, 7);
10326          END IF;
10327       ELSE -- p_inventory_item_id is not null
10328          IF p_do_processed_rows_flag = FND_API.G_FALSE THEN
10329             SELECT MAX( REVISION ) KEEP ( DENSE_RANK FIRST
10330                                         ORDER BY MIRI.EFFECTIVITY_DATE DESC NULLS LAST , MIRI.REVISION DESC NULLS LAST )
10331             INTO l_revision
10332             FROM MTL_ITEM_REVISIONS_INTERFACE MIRI
10333             WHERE   MIRI.SET_PROCESS_id = p_batch_id
10334                 AND (   ( MIRI.INVENTORY_ITEM_ID IS NULL AND MIRI.ITEM_NUMBER = p_item_number )
10335                     OR  MIRI.INVENTORY_ITEM_ID  = p_inventory_item_id
10336                     )
10337                 AND MIRI.ORGANIZATION_ID        = p_organization_id
10338                 AND MIRI.PROCESS_FLAG           = 1;
10339          ELSE
10340             SELECT MAX( REVISION ) KEEP ( DENSE_RANK FIRST
10341                                         ORDER BY MIRI.EFFECTIVITY_DATE DESC NULLS LAST , MIRI.REVISION DESC NULLS LAST )
10342             INTO l_revision
10343             FROM MTL_ITEM_REVISIONS_INTERFACE MIRI
10344             WHERE   MIRI.SET_PROCESS_id = p_batch_id
10345                 AND (   ( MIRI.INVENTORY_ITEM_ID IS NULL AND MIRI.ITEM_NUMBER = p_item_number )
10346                     OR  MIRI.INVENTORY_ITEM_ID  = p_inventory_item_id
10347                     )
10348                 AND MIRI.ORGANIZATION_ID        = p_organization_id
10349                 AND PROCESS_FLAG                IN ( 3, 7 );
10350          END IF;
10351       END IF;
10352       RETURN l_revision;
10353    EXCEPTION
10354        WHEN NO_DATA_FOUND THEN
10355            RETURN NULL;
10356    END GET_LATEST_MIRI_REV_PDH;
10357 
10358    --------------------------------------------------------------------------------------------
10359    --  Function WRAPPED_TO_NUMBER                                                            --
10360    --      Wraps the to_number built-in to return null in case of conversion failure         --
10361    --------------------------------------------------------------------------------------------
10362    FUNCTION WRAPPED_TO_NUMBER( p_val VARCHAR2 )
10363    RETURN NUMBER
10364    DETERMINISTIC
10365    IS
10366        l_return_value  NUMBER;
10367    BEGIN
10368        l_return_value := to_number( p_val );
10369        RETURN l_return_value;
10370    EXCEPTION
10371        WHEN OTHERS THEN
10372            RETURN NULL;
10373    END WRAPPED_TO_NUMBER;
10374 
10375    --------------------------------------------------------------------------------------------
10376    --  Function WRAPPED_TO_DATE                                                              --
10377    --      Wraps the to_date built-in to return null in case of conversion failure           --
10378    --------------------------------------------------------------------------------------------
10379    FUNCTION WRAPPED_TO_DATE( p_val VARCHAR2 )
10380    RETURN DATE
10381    DETERMINISTIC
10382    IS
10383        l_return_value  DATE;
10384    BEGIN
10385        l_return_value := to_date( p_val, EGO_USER_ATTRS_COMMON_PVT.G_DATE_FORMAT );
10386 
10387        -- bug 5366882: substitute internal "null-out" value with excel "null-out" value
10388        RETURN CASE WHEN l_return_value = to_date( '1', 'J' ) THEN G_EXCEL_MISS_DATE_VAL -- to_date( '9999-12-31', 'YYYY-MM-DD' )
10389                    ELSE l_return_value
10390                    END;
10391    EXCEPTION
10392        WHEN OTHERS THEN
10393            RETURN NULL;
10394    END WRAPPED_TO_DATE;
10395 
10396    --------------------------------------------------------------------------------------------
10397    --  Function GET_REV_USR_ATTR                                                             --
10398    --  Returns the display value of the specified revision attribute; if there is no         --
10399    --      display value, it returns the appropriate value column, based on the              --
10400    --      p_attr_value_type parameter                                                       --
10401    --------------------------------------------------------------------------------------------
10402    FUNCTION GET_REV_USR_ATTR
10403    (   p_batch_id                          IN  EGO_ITM_USR_ATTR_INTRFC.DATA_SET_ID%TYPE
10404        , p_source_system_id                IN  EGO_ITM_USR_ATTR_INTRFC.SOURCE_SYSTEM_ID%TYPE
10405        , p_source_system_reference         IN  EGO_ITM_USR_ATTR_INTRFC.SOURCE_SYSTEM_REFERENCE%TYPE
10406        , p_organization_id                 IN  EGO_ITM_USR_ATTR_INTRFC.ORGANIZATION_ID%TYPE
10407        , p_revision_code                   IN  EGO_ITM_USR_ATTR_INTRFC.REVISION%TYPE
10408        , p_attr_group_type                 IN  EGO_ITM_USR_ATTR_INTRFC.ATTR_GROUP_TYPE%TYPE
10409        , p_attr_group_name                 IN  EGO_ITM_USR_ATTR_INTRFC.ATTR_GROUP_INT_NAME%TYPE
10410        , p_attr_name                       IN  EGO_ITM_USR_ATTR_INTRFC.ATTR_INT_NAME%TYPE
10411        , p_attr_value_type                 IN  FLAG
10412        )
10413    RETURN EGO_ITM_USR_ATTR_INTRFC.ATTR_DISP_VALUE%TYPE
10414    IS
10415        l_return_value      EGO_ITM_USR_ATTR_INTRFC.ATTR_DISP_VALUE%TYPE;
10416        l_revision_code     EGO_ITM_USR_ATTR_INTRFC.REVISION%TYPE;
10417    BEGIN
10418        l_return_value  := null;
10419        l_revision_code := p_revision_code;
10420 
10421        -- Check to see whether the revision code has been provided:
10422        -- If not, default it to be the code of the latest LOGICAL revision row
10423        IF l_revision_code IS NULL
10424        THEN
10425            l_revision_code := GET_LATEST_EIUAI_REV_SS( p_batch_id                  => p_batch_id
10426                                                      , p_source_system_id          => p_source_system_id
10427                                                      , p_source_system_reference   => p_source_system_reference
10428                                                      , p_organization_id           => p_organization_id
10429                                                      , p_do_processed_rows_flag    => FND_API.G_FALSE
10430                                                      );
10431        END IF;
10432 
10433        IF  l_revision_code IS NOT NULL
10434        THEN
10435            BEGIN -- start sub-query block
10436                CASE p_attr_value_type
10437                    -- text attr-type case
10438                    WHEN G_TEXT_DATA_TYPE THEN
10439                        SELECT NVL( EIUAI.ATTR_DISP_VALUE, EIUAI.ATTR_VALUE_STR ) INTO l_return_value
10440                        FROM EGO_ITM_USR_ATTR_INTRFC EIUAI
10441                        WHERE
10442                            NVL( EIUAI.ATTR_GROUP_TYPE, G_DEFAULT_ATTR_GROUP_TYPE ) = p_attr_group_type
10443                            AND EIUAI.ATTR_GROUP_INT_NAME       = p_attr_group_name
10444                            AND EIUAI.ATTR_INT_NAME             = p_attr_name
10445                            AND EIUAI.SOURCE_SYSTEM_REFERENCE   = p_source_system_reference
10446                            AND EIUAI.SOURCE_SYSTEM_ID          = p_source_system_id
10447                            AND EIUAI.ORGANIZATION_ID           = p_organization_id
10448                            AND EIUAI.DATA_SET_ID               = p_batch_id
10449                            AND EIUAI.REVISION                  = l_revision_code
10450                            AND rownum < 2
10451                            ;
10452                    -- end text attr-type case
10453                    -- number attr-type case
10454                    WHEN G_NUMBER_DATA_TYPE THEN
10455                        SELECT NVL( EIUAI.ATTR_DISP_VALUE, TO_CHAR( EIUAI.ATTR_VALUE_NUM ) ) INTO l_return_value
10456                        FROM EGO_ITM_USR_ATTR_INTRFC EIUAI
10457                        WHERE
10458                            NVL( EIUAI.ATTR_GROUP_TYPE, G_DEFAULT_ATTR_GROUP_TYPE ) = p_attr_group_type
10459                            AND EIUAI.ATTR_GROUP_INT_NAME       = p_attr_group_name
10460                            AND EIUAI.ATTR_INT_NAME             = p_attr_name
10461                            AND EIUAI.SOURCE_SYSTEM_REFERENCE   = p_source_system_reference
10462                            AND EIUAI.SOURCE_SYSTEM_ID          = p_source_system_id
10463                            AND EIUAI.ORGANIZATION_ID           = p_organization_id
10464                            AND EIUAI.DATA_SET_ID               = p_batch_id
10465                            AND EIUAI.REVISION                  = l_revision_code
10466                            AND rownum < 2
10467                            ;
10468                    -- end number attr-type case
10469                    -- date attr-type case
10470                    WHEN G_DATE_DATA_TYPE THEN
10471                        -- XXX: which date format to use? what about date-time type vs date-type?
10472                        SELECT NVL( EIUAI.ATTR_DISP_VALUE, TO_CHAR( EIUAI.ATTR_VALUE_DATE ) ) INTO l_return_value
10473                        FROM EGO_ITM_USR_ATTR_INTRFC EIUAI
10474                        WHERE
10475                            NVL( EIUAI.ATTR_GROUP_TYPE, G_DEFAULT_ATTR_GROUP_TYPE ) = p_attr_group_type
10476                            AND EIUAI.ATTR_GROUP_INT_NAME       = p_attr_group_name
10477                            AND EIUAI.ATTR_INT_NAME             = p_attr_name
10478                            AND EIUAI.SOURCE_SYSTEM_REFERENCE   = p_source_system_reference
10479                            AND EIUAI.SOURCE_SYSTEM_ID          = p_source_system_id
10480                            AND EIUAI.ORGANIZATION_ID           = p_organization_id
10481                            AND EIUAI.DATA_SET_ID               = p_batch_id
10482                            AND EIUAI.REVISION                  = l_revision_code
10483                            AND rownum < 2
10484                            ;
10485                    -- end date attr-type case
10486                END CASE;
10487            EXCEPTION
10488                WHEN NO_DATA_FOUND THEN -- this attribute is not present in the interface table!
10489                    l_return_value := null; -- 'no data found';
10490                WHEN OTHERS THEN
10491                    l_return_value := null; -- 'other error';
10492            END; -- query sub-block
10493        ELSE -- revision code is null
10494            BEGIN -- start sub-query block
10495                CASE p_attr_value_type
10496                    -- text attr-type case
10497                    WHEN G_TEXT_DATA_TYPE THEN
10498                        SELECT NVL( EIUAI.ATTR_DISP_VALUE, EIUAI.ATTR_VALUE_STR ) INTO l_return_value
10499                        FROM EGO_ITM_USR_ATTR_INTRFC EIUAI
10500                        WHERE
10501                            NVL( EIUAI.ATTR_GROUP_TYPE, G_DEFAULT_ATTR_GROUP_TYPE ) = p_attr_group_type
10502                            AND EIUAI.ATTR_GROUP_INT_NAME       = p_attr_group_name
10503                            AND EIUAI.ATTR_INT_NAME             = p_attr_name
10504                            AND EIUAI.SOURCE_SYSTEM_REFERENCE   = p_source_system_reference
10505                            AND EIUAI.SOURCE_SYSTEM_ID          = p_source_system_id
10506                            AND EIUAI.ORGANIZATION_ID           = p_organization_id
10507                            AND EIUAI.DATA_SET_ID               = p_batch_id
10508                            AND EIUAI.REVISION                  IS NULL
10509                            AND rownum < 2
10510                            ;
10511                    -- end text attr-type case
10512                    -- number attr-type case
10513                    WHEN G_NUMBER_DATA_TYPE THEN
10514                        SELECT NVL( EIUAI.ATTR_DISP_VALUE, TO_CHAR( EIUAI.ATTR_VALUE_NUM ) ) INTO l_return_value
10515                        FROM EGO_ITM_USR_ATTR_INTRFC EIUAI
10516                        WHERE
10517                            NVL( EIUAI.ATTR_GROUP_TYPE, G_DEFAULT_ATTR_GROUP_TYPE ) = p_attr_group_type
10518                            AND EIUAI.ATTR_GROUP_INT_NAME       = p_attr_group_name
10519                            AND EIUAI.ATTR_INT_NAME             = p_attr_name
10520                            AND EIUAI.SOURCE_SYSTEM_REFERENCE   = p_source_system_reference
10521                            AND EIUAI.SOURCE_SYSTEM_ID          = p_source_system_id
10522                            AND EIUAI.ORGANIZATION_ID           = p_organization_id
10523                            AND EIUAI.DATA_SET_ID               = p_batch_id
10524                            AND EIUAI.REVISION                  IS NULL
10525                            AND rownum < 2
10526                            ;
10527                    -- end number attr-type case
10528                    -- date attr-type case
10529                    WHEN G_DATE_DATA_TYPE THEN
10530                        -- XXX: which date format to use? what about date-time type vs date-type?
10531                        SELECT NVL( EIUAI.ATTR_DISP_VALUE, TO_CHAR( EIUAI.ATTR_VALUE_DATE ) ) INTO l_return_value
10532                        FROM EGO_ITM_USR_ATTR_INTRFC EIUAI
10533                        WHERE
10534                            NVL( EIUAI.ATTR_GROUP_TYPE, G_DEFAULT_ATTR_GROUP_TYPE ) = p_attr_group_type
10535                            AND EIUAI.ATTR_GROUP_INT_NAME       = p_attr_group_name
10536                            AND EIUAI.ATTR_INT_NAME             = p_attr_name
10537                            AND EIUAI.SOURCE_SYSTEM_REFERENCE   = p_source_system_reference
10538                            AND EIUAI.SOURCE_SYSTEM_ID          = p_source_system_id
10539                            AND EIUAI.ORGANIZATION_ID           = p_organization_id
10540                            AND EIUAI.DATA_SET_ID               = p_batch_id
10541                            AND EIUAI.REVISION                  IS NULL
10542                            AND rownum < 2
10543                            ;
10544                    -- end date attr-type case
10545                END CASE;
10546            EXCEPTION
10547                WHEN NO_DATA_FOUND THEN -- this attribute is not present in the interface table!
10548                    l_return_value := null; -- 'no data found';
10549                WHEN OTHERS THEN
10550                    l_return_value := null; -- 'other error';
10551            END; -- query sub-block
10552        END IF;
10553 
10554        RETURN l_return_value;
10555    END GET_REV_USR_ATTR;
10556 
10557     ----------------------------------------------------------------------------------------------
10558     --  Function GET_REV_USR_ATTR_TO_CHAR
10559     --  Returns the display value of the specified revision attribute, if the attribute is present
10560     --  in the interface table, or the internal value, interpreted as a display value.
10561     --  The assumption is that this will be called from a value set context ...
10562     ----------------------------------------------------------------------------------------------
10563     FUNCTION GET_REV_USR_ATTR_TO_CHAR
10564         (
10565           p_batch_id                        IN  EGO_ITM_USR_ATTR_INTRFC.DATA_SET_ID%TYPE
10566         , p_source_system_id                IN  EGO_ITM_USR_ATTR_INTRFC.SOURCE_SYSTEM_ID%TYPE           DEFAULT NULL
10567         , p_source_system_reference         IN  EGO_ITM_USR_ATTR_INTRFC.SOURCE_SYSTEM_REFERENCE%TYPE    DEFAULT NULL
10568         , p_organization_id                 IN  EGO_ITM_USR_ATTR_INTRFC.ORGANIZATION_ID%TYPE
10569         , p_revision_code                   IN  EGO_ITM_USR_ATTR_INTRFC.REVISION%TYPE
10570         , p_attr_group_type                 IN  EGO_ITM_USR_ATTR_INTRFC.ATTR_GROUP_TYPE%TYPE
10571         , p_attr_group_name                 IN  EGO_ITM_USR_ATTR_INTRFC.ATTR_GROUP_INT_NAME%TYPE
10572         , p_attr_name                       IN  EGO_ITM_USR_ATTR_INTRFC.ATTR_INT_NAME%TYPE
10573         , p_do_processed_rows_flag          IN  FLAG DEFAULT FND_API.G_FALSE
10574         , p_request_id                      IN  EGO_ITM_USR_ATTR_INTRFC.REQUEST_ID%TYPE                 DEFAULT NULL
10575         , p_inventory_item_id               IN  EGO_ITM_USR_ATTR_INTRFC.INVENTORY_ITEM_ID%TYPE          DEFAULT NULL
10576         , p_item_number                     IN  EGO_ITM_USR_ATTR_INTRFC.ITEM_NUMBER%TYPE                DEFAULT NULL
10577         , p_use_pdh_keys_to_join            IN  BOOLEAN
10578         , p_get_value_col                   IN  BOOLEAN
10579         , p_attr_type                       IN  FLAG
10580         , p_attr_miss_value                 IN  BOOLEAN DEFAULT TRUE
10581         )
10582     RETURN EGO_ITM_USR_ATTR_INTRFC.ATTR_DISP_VALUE%TYPE
10583     IS
10584         l_return_value      EGO_ITM_USR_ATTR_INTRFC.ATTR_DISP_VALUE%TYPE;
10585         l_revision_code     EGO_ITM_USR_ATTR_INTRFC.REVISION%TYPE;
10586         l_sql_stmt          VARCHAR2( 32000 );
10587         l_do_procd_rows_sql VARCHAR2( 200 );
10588         l_join_sql          VARCHAR2( 200 );
10589         l_select_sql        VARCHAR2( 200 );
10590         l_do_processed_rows BOOLEAN;
10591         l_miss_str          VARCHAR2( 30 );
10592         l_date_format       VARCHAR2( 30 ) := NULL;
10593     BEGIN
10594         l_return_value  := null; -- 'default';
10595 
10596         CASE -- order of WHEN clauses matters!
10597             WHEN p_USE_PDH_KEYS_TO_JOIN AND
10598                  p_inventory_item_id IS NULL AND
10599                  p_item_number IS NULL
10600                 THEN RETURN l_return_value;
10601             WHEN p_USE_PDH_KEYS_TO_JOIN THEN
10602                 l_join_sql :=
10603                     ' AND ( ( '
10604                 ||  CASE
10605                     WHEN p_inventory_item_id IS NOT NULL THEN
10606                             ' EIUAI.INVENTORY_ITEM_ID     IS NULL AND'
10607                     ELSE    ''
10608                     END
10609                 ||          ' EIUAI.ITEM_NUMBER           = :item_number '
10610                 ||          ' ) '
10611                 ||      ' OR  EIUAI.INVENTORY_ITEM_ID     = :item_id '
10612                 ||      ' ) '
10613                 ;
10614             WHEN p_source_system_reference IS NULL AND
10615                  p_source_system_id IS NULL
10616                  THEN RETURN l_return_value;
10617             ELSE
10618                 l_join_sql := ' AND EIUAI.SOURCE_SYSTEM_REFERENCE   = :ss_ref '
10619                            || ' AND EIUAI.SOURCE_SYSTEM_ID          = :ss_id ';
10620         END CASE;
10621 
10622         l_do_processed_rows := ( p_do_processed_rows_flag = FND_API.G_TRUE );
10623         l_do_procd_rows_sql :=  ' AND EIUAI.PROCESS_STATUS'
10624                             ||  CASE
10625                                 WHEN l_do_processed_rows                                    THEN ' IN ( 3, 4 ) AND EIUAI.REQUEST_ID = :req_id '
10626                                 WHEN NOT l_do_processed_rows AND NOT p_use_pdh_keys_to_join THEN ' = 0 '
10627                                 WHEN NOT l_do_processed_rows AND p_use_pdh_keys_to_join     THEN ' = 1 '
10628                                 ELSE ''   -- XXX: hmmm, raise exception here?
10629                                 END;
10630 
10631         l_date_format :=    CASE p_attr_type
10632                             WHEN G_DATE_TIME_DATA_TYPE THEN FND_PROFILE.VALUE( 'ICX_DATE_FORMAT_MASK' ) || ' HH24:MI:SS'
10633                             WHEN G_DATE_DATA_TYPE THEN FND_PROFILE.VALUE( 'ICX_DATE_FORMAT_MASK' )
10634                             ELSE NULL
10635                             END;
10636 
10637         l_miss_str  := CASE WHEN NOT p_attr_miss_value      THEN G_EXCEL_MISS_VS_VAL
10638                             WHEN p_attr_type = G_DATE_DATA_TYPE       THEN 'TO_CHAR('||G_EXCEL_MISS_DATE_STR||','''||l_date_format||''')'
10639                             WHEN p_attr_type = G_DATE_TIME_DATA_TYPE  THEN 'TO_CHAR('||G_EXCEL_MISS_DATE_STR||','''||l_date_format||''')'
10640                             WHEN p_attr_type = G_NUMBER_DATA_TYPE     THEN 'TO_CHAR('||G_EXCEL_MISS_NUM_STR||')'
10641                             WHEN p_attr_type = G_TEXT_DATA_TYPE       THEN ''''||G_EXCEL_MISS_CHAR_VAL||''''
10642                             END;
10643 
10644         IF p_get_value_col
10645         THEN
10646             l_select_sql := CASE
10647                             WHEN p_attr_type = G_DATE_DATA_TYPE OR p_attr_type = G_DATE_TIME_DATA_TYPE THEN
10648                                 'DECODE( EIUAI.ATTR_VALUE_DATE'
10649                                     ||', NULL, ' || l_miss_str
10650                                     ||', '|| EGO_USER_ATTRS_BULK_PVT.G_NULL_DATE_VAL ||', '|| l_miss_str
10651                                     ||', TO_CHAR( EIUAI.ATTR_VALUE_DATE, '''|| l_date_format || ''')'
10652                                     ||')'
10653                             WHEN p_attr_type = G_NUMBER_DATA_TYPE THEN
10654                                 -- ignore UOM column completely ... the assumption is that this
10655                                 -- code is called for junk values only
10656                                 'DECODE( EIUAI.ATTR_VALUE_NUM'
10657                                     ||', NULL, ' || l_miss_str
10658                                     ||', TO_CHAR( EIUAI.ATTR_VALUE_NUM )'
10659                                     ||')'
10660                             WHEN p_attr_type = G_TEXT_DATA_TYPE THEN
10661                                 'NVL( EIUAI.ATTR_VALUE_STR, '|| l_miss_str || ')'
10662                             END;
10663         ELSE
10664             l_select_sql := ' EIUAI.ATTR_DISP_VALUE ';
10665         END IF;
10666 
10667         -- Check to see whether the revision code has been provided:
10668         -- If not, default it to be the code of the latest LOGICAL revision row
10669         l_revision_code :=
10670             CASE -- order of WHEN clauses matters!
10671             WHEN p_revision_code IS NOT NULL THEN p_revision_code
10672             WHEN p_use_pdh_keys_to_join THEN
10673                 GET_LATEST_EIUAI_REV_PDH(   p_batch_id                  => p_batch_id
10674                                         ,   p_inventory_item_id         => p_inventory_item_id
10675                                         ,   p_item_number               => p_item_number
10676                                         ,   p_organization_id           => p_organization_id
10677                                         ,   p_do_processed_rows_flag    => p_do_processed_rows_flag
10678                                         ,   p_request_id                => p_request_id
10679                                         )
10680             ELSE
10681                 GET_LATEST_EIUAI_REV_SS (   p_batch_id                  => p_batch_id
10682                                         ,   p_source_system_id          => p_source_system_id
10683                                         ,   p_source_system_reference   => p_source_system_reference
10684                                         ,   p_organization_id           => p_organization_id
10685                                         ,   p_do_processed_rows_flag    => p_do_processed_rows_flag
10686                                         ,   p_request_id                => p_request_id
10687                                         )
10688             END;
10689 
10690         l_sql_stmt := '
10691             SELECT ' || l_select_sql
10692         ||' FROM EGO_ITM_USR_ATTR_INTRFC EIUAI '
10693         ||' WHERE '
10694             ||' NVL( EIUAI.ATTR_GROUP_TYPE, :default_attr_grp ) = :attr_grp_type'
10695             ||' AND EIUAI.ATTR_GROUP_INT_NAME       = :attr_grp'
10696             ||' AND EIUAI.ATTR_INT_NAME             = :attr '
10697                 || l_join_sql
10698             ||' AND EIUAI.ORGANIZATION_ID           = :org_id '
10699             ||' AND EIUAI.DATA_SET_ID               = :batch_id '
10700                 || l_do_procd_rows_sql
10701             ||' AND DECODE( EIUAI.REVISION, :rev_code, 1, 0 ) = 1 '
10702             ||' AND rownum = 1 '
10703             ;
10704             -- note that decode does a null-safe comparision (i.e. ( NULL = NULL ) = TRUE ||||'')
10705 
10706         IF l_do_processed_rows THEN
10707             CASE
10708                 WHEN p_USE_PDH_KEYS_TO_JOIN THEN
10709                     EXECUTE IMMEDIATE l_sql_stmt
10710                         INTO l_return_value
10711                         USING G_DEFAULT_ATTR_GROUP_TYPE
10712                             , p_attr_group_type, p_attr_group_name, p_attr_name
10713                             , p_item_number, p_inventory_item_id, p_organization_id, p_batch_id
10714                             , p_request_id
10715                             , l_revision_code
10716                         ;
10717                 WHEN NOT p_USE_PDH_KEYS_TO_JOIN THEN
10718                     EXECUTE IMMEDIATE l_sql_stmt
10719                         INTO l_return_value
10720                         USING G_DEFAULT_ATTR_GROUP_TYPE
10721                             , p_attr_group_type, p_attr_group_name, p_attr_name
10722                             , p_source_system_reference, p_source_system_id, p_organization_id, p_batch_id
10723                             , p_request_id
10724                             , l_revision_code
10725                         ;
10726             END CASE;
10727         ELSE -- unprocessed rows
10728             CASE
10729                 WHEN p_USE_PDH_KEYS_TO_JOIN THEN
10730                     EXECUTE IMMEDIATE l_sql_stmt
10731                         INTO l_return_value
10732                         USING G_DEFAULT_ATTR_GROUP_TYPE
10733                             , p_attr_group_type, p_attr_group_name, p_attr_name
10734                             , p_item_number, p_inventory_item_id, p_organization_id, p_batch_id
10735                             , l_revision_code
10736                         ;
10737                 WHEN NOT p_USE_PDH_KEYS_TO_JOIN THEN
10738                     EXECUTE IMMEDIATE l_sql_stmt
10739                         INTO l_return_value
10740                         USING G_DEFAULT_ATTR_GROUP_TYPE
10741                             , p_attr_group_type, p_attr_group_name, p_attr_name
10742                             , p_source_system_reference, p_source_system_id, p_organization_id, p_batch_id
10743                             , l_revision_code
10744                         ;
10745             END CASE;
10746         END IF;
10747 
10748         RETURN l_return_value;
10749 
10750     EXCEPTION
10751         WHEN NO_DATA_FOUND THEN -- this attribute is not present in the interface table !
10752             RETURN l_return_value;
10753         WHEN OTHERS THEN
10754             -- XXX: Log the error here?
10755             RETURN l_return_value;
10756     END GET_REV_USR_ATTR_TO_CHAR;
10757 
10758     FUNCTION GET_REV_USR_ATTR_SS_DISP
10759         (
10760           p_batch_id                        IN  EGO_ITM_USR_ATTR_INTRFC.DATA_SET_ID%TYPE
10761         , p_source_system_id                IN  EGO_ITM_USR_ATTR_INTRFC.SOURCE_SYSTEM_ID%TYPE
10762         , p_source_system_reference         IN  EGO_ITM_USR_ATTR_INTRFC.SOURCE_SYSTEM_REFERENCE%TYPE
10763         , p_organization_id                 IN  EGO_ITM_USR_ATTR_INTRFC.ORGANIZATION_ID%TYPE
10764         , p_revision_code                   IN  EGO_ITM_USR_ATTR_INTRFC.REVISION%TYPE
10765         , p_attr_group_type                 IN  EGO_ITM_USR_ATTR_INTRFC.ATTR_GROUP_TYPE%TYPE
10766         , p_attr_group_name                 IN  EGO_ITM_USR_ATTR_INTRFC.ATTR_GROUP_INT_NAME%TYPE
10767         , p_attr_name                       IN  EGO_ITM_USR_ATTR_INTRFC.ATTR_INT_NAME%TYPE
10768         , p_attr_type                       IN  FLAG
10769         , p_from_internal_column            IN  FLAG
10770         , p_do_processed_rows_flag          IN  FLAG                                    DEFAULT FND_API.G_FALSE
10771         , p_request_id                      IN  EGO_ITM_USR_ATTR_INTRFC.REQUEST_ID%TYPE DEFAULT NULL
10772         )
10773     RETURN EGO_ITM_USR_ATTR_INTRFC.ATTR_DISP_VALUE%TYPE
10774     IS
10775         l_get_value_col BOOLEAN := ( FND_API.G_TRUE = p_from_internal_column );
10776     BEGIN
10777         RETURN GET_REV_USR_ATTR_TO_CHAR
10778         (
10779           p_batch_id                        => p_batch_id
10780         , p_source_system_id                => p_source_system_id
10781         , p_source_system_reference         => p_source_system_reference
10782         , p_organization_id                 => p_organization_id
10783         , p_revision_code                   => p_revision_code
10784         , p_attr_group_type                 => p_attr_group_type
10785         , p_attr_group_name                 => p_attr_group_name
10786         , p_attr_name                       => p_attr_name
10787         , p_attr_type                       => p_attr_type
10788         , p_do_processed_rows_flag          => p_do_processed_rows_flag
10789         , p_request_id                      => p_request_id
10790         , p_use_pdh_keys_to_join            => FALSE
10791         , p_get_value_col                   => l_get_value_col
10792         , p_attr_miss_value                 => FALSE -- returns value set miss value if get_value_column TRUE
10793         );
10794     END;
10795 
10796     FUNCTION GET_REV_USR_ATTR_PDH_DISP
10797         (
10798           p_batch_id                        IN  EGO_ITM_USR_ATTR_INTRFC.DATA_SET_ID%TYPE
10799         , p_inventory_item_id               IN  EGO_ITM_USR_ATTR_INTRFC.INVENTORY_ITEM_ID%TYPE
10800         , p_item_number                     IN  EGO_ITM_USR_ATTR_INTRFC.ITEM_NUMBER%TYPE
10801         , p_organization_id                 IN  EGO_ITM_USR_ATTR_INTRFC.ORGANIZATION_ID%TYPE
10802         , p_revision_code                   IN  EGO_ITM_USR_ATTR_INTRFC.REVISION%TYPE
10803         , p_attr_group_type                 IN  EGO_ITM_USR_ATTR_INTRFC.ATTR_GROUP_TYPE%TYPE
10804         , p_attr_group_name                 IN  EGO_ITM_USR_ATTR_INTRFC.ATTR_GROUP_INT_NAME%TYPE
10805         , p_attr_name                       IN  EGO_ITM_USR_ATTR_INTRFC.ATTR_INT_NAME%TYPE
10806         , p_attr_type                       IN  FLAG
10807         , p_from_internal_column            IN  FLAG
10808         , p_do_processed_rows_flag          IN  FLAG                                    DEFAULT FND_API.G_FALSE
10809         , p_request_id                      IN  EGO_ITM_USR_ATTR_INTRFC.REQUEST_ID%TYPE DEFAULT NULL
10810         )
10811     RETURN EGO_ITM_USR_ATTR_INTRFC.ATTR_DISP_VALUE%TYPE
10812     IS
10813         l_get_value_col BOOLEAN := ( FND_API.G_TRUE = p_from_internal_column );
10814     BEGIN
10815         RETURN GET_REV_USR_ATTR_TO_CHAR
10816         (
10817           p_batch_id                        => p_batch_id
10818         , p_inventory_item_id               => p_inventory_item_id
10819         , p_item_number                     => p_item_number
10820         , p_organization_id                 => p_organization_id
10821         , p_revision_code                   => p_revision_code
10822         , p_attr_group_type                 => p_attr_group_type
10823         , p_attr_group_name                 => p_attr_group_name
10824         , p_attr_name                       => p_attr_name
10825         , p_attr_type                       => p_attr_type
10826         , p_do_processed_rows_flag          => p_do_processed_rows_flag
10827         , p_request_id                      => p_request_id
10828         , p_use_pdh_keys_to_join            => TRUE
10829         , p_get_value_col                   => l_get_value_col
10830         , p_attr_miss_value                 => FALSE -- returns value set miss value if get_value_column TRUE
10831         );
10832     END;
10833 
10834 
10835     ----------------------------------------------------------------------------------------------
10836     --  Function GET_REV_USR_ATTR_DISP_DATE
10837     --  Returns the date value of the specified revision attribute, if the attribute is present
10838     --  in the interface table, merging in an attempted conversion of the display column content.
10839     ----------------------------------------------------------------------------------------------
10840     FUNCTION GET_REV_USR_ATTR_DATE
10841         (
10842           p_batch_id                        IN  EGO_ITM_USR_ATTR_INTRFC.DATA_SET_ID%TYPE
10843         , p_source_system_id                IN  EGO_ITM_USR_ATTR_INTRFC.SOURCE_SYSTEM_ID%TYPE           DEFAULT NULL
10844         , p_source_system_reference         IN  EGO_ITM_USR_ATTR_INTRFC.SOURCE_SYSTEM_REFERENCE%TYPE    DEFAULT NULL
10845         , p_organization_id                 IN  EGO_ITM_USR_ATTR_INTRFC.ORGANIZATION_ID%TYPE
10846         , p_revision_code                   IN  EGO_ITM_USR_ATTR_INTRFC.REVISION%TYPE
10847         , p_attr_group_type                 IN  EGO_ITM_USR_ATTR_INTRFC.ATTR_GROUP_TYPE%TYPE
10848         , p_attr_group_name                 IN  EGO_ITM_USR_ATTR_INTRFC.ATTR_GROUP_INT_NAME%TYPE
10849         , p_attr_name                       IN  EGO_ITM_USR_ATTR_INTRFC.ATTR_INT_NAME%TYPE
10850         , p_do_processed_rows_flag          IN  FLAG DEFAULT FND_API.G_FALSE
10851         , p_request_id                      IN  EGO_ITM_USR_ATTR_INTRFC.REQUEST_ID%TYPE                 DEFAULT NULL
10852         , p_inventory_item_id               IN  EGO_ITM_USR_ATTR_INTRFC.INVENTORY_ITEM_ID%TYPE          DEFAULT NULL
10853         , p_item_number                     IN  EGO_ITM_USR_ATTR_INTRFC.ITEM_NUMBER%TYPE                DEFAULT NULL
10854         , p_use_pdh_keys_to_join            IN  BOOLEAN
10855         , p_get_value_column                IN  BOOLEAN
10856         )
10857     RETURN EGO_ITM_USR_ATTR_INTRFC.ATTR_VALUE_DATE%TYPE
10858     IS
10859         l_return_value      EGO_ITM_USR_ATTR_INTRFC.ATTR_VALUE_DATE%TYPE;
10860         l_revision_code     EGO_ITM_USR_ATTR_INTRFC.REVISION%TYPE;
10861         l_sql_stmt          VARCHAR2( 32000 );
10862         l_do_procd_rows_sql VARCHAR2( 200 );
10863         l_join_sql          VARCHAR2( 200 );
10864         l_select_sql        VARCHAR2( 300 );
10865         l_do_processed_rows BOOLEAN;
10866     BEGIN
10867         l_return_value  := null; -- 'default';
10868 
10869         CASE -- order of WHEN clauses matters!
10870             WHEN p_USE_PDH_KEYS_TO_JOIN AND
10871                  p_inventory_item_id IS NULL AND
10872                  p_item_number IS NULL
10873                 THEN RETURN l_return_value;
10874             WHEN p_USE_PDH_KEYS_TO_JOIN THEN
10875                 l_join_sql :=
10876                     ' AND ( ( '
10877                 ||  CASE
10878                     WHEN p_inventory_item_id IS NOT NULL THEN
10879                             ' EIUAI.INVENTORY_ITEM_ID     IS NULL AND'
10880                     ELSE    ''
10881                     END
10882                 ||          ' EIUAI.ITEM_NUMBER           = :item_number '
10883                 ||          ' ) '
10884                 ||      ' OR  EIUAI.INVENTORY_ITEM_ID     = :item_id '
10885                 ||      ' ) '
10886                 ;
10887             WHEN p_source_system_reference IS NULL AND
10888                  p_source_system_id IS NULL
10889                  THEN RETURN l_return_value;
10890             ELSE
10891                 l_join_sql := ' AND EIUAI.SOURCE_SYSTEM_REFERENCE   = :ss_ref '
10892                            || ' AND EIUAI.SOURCE_SYSTEM_ID          = :ss_id ';
10893         END CASE;
10894 
10895         l_do_processed_rows := ( p_do_processed_rows_flag = FND_API.G_TRUE );
10896         l_do_procd_rows_sql :=  ' AND EIUAI.PROCESS_STATUS'
10897                             ||  CASE
10898                                 WHEN l_do_processed_rows                                    THEN ' IN ( 3, 4 ) AND EIUAI.REQUEST_ID = :req_id '
10899                                 WHEN NOT l_do_processed_rows AND NOT p_use_pdh_keys_to_join THEN ' = 0 '
10900                                 WHEN NOT l_do_processed_rows AND p_use_pdh_keys_to_join     THEN ' = 1 '
10901                                 ELSE ''   -- XXX: hmmm, raise exception here?
10902                                 END;
10903 
10904         IF p_get_value_column THEN
10905             l_select_sql    := ' EIUAI.ATTR_VALUE_DATE ';
10906         ELSE
10907             l_select_sql    :=  ' NVL2( EIUAI.ATTR_DISP_VALUE '
10908                                 ||  ' , EGO_IMPORT_PVT.wrapped_to_date( EIUAI.ATTR_DISP_VALUE ) '
10909                                 ||  ' , CASE WHEN EIUAI.ATTR_VALUE_DATE IS NULL '
10910                                            || 'OR EIUAI.ATTR_VALUE_DATE = TO_DATE(''1'',''J'') THEN ' || G_EXCEL_MISS_DATE_STR
10911                                         || ' ELSE EIUAI.ATTR_VALUE_DATE END'
10912                                 ||  ' ) '
10913                             ;
10914         END IF;
10915 
10916         -- Check to see whether the revision code has been provided:
10917         -- If not, default it to be the code of the latest LOGICAL revision row
10918         l_revision_code :=
10919             CASE -- order of WHEN clauses matters!
10920             WHEN p_revision_code IS NOT NULL THEN p_revision_code
10921             WHEN p_use_pdh_keys_to_join THEN
10922                 GET_LATEST_EIUAI_REV_PDH(   p_batch_id                  => p_batch_id
10923                                         ,   p_inventory_item_id         => p_inventory_item_id
10924                                         ,   p_item_number               => p_item_number
10925                                         ,   p_organization_id           => p_organization_id
10926                                         ,   p_do_processed_rows_flag    => p_do_processed_rows_flag
10927                                         ,   p_request_id                => p_request_id
10928                                         )
10929             ELSE
10930                 GET_LATEST_EIUAI_REV_SS (   p_batch_id                  => p_batch_id
10931                                         ,   p_source_system_id          => p_source_system_id
10932                                         ,   p_source_system_reference   => p_source_system_reference
10933                                         ,   p_organization_id           => p_organization_id
10934                                         ,   p_do_processed_rows_flag    => p_do_processed_rows_flag
10935                                         ,   p_request_id                => p_request_id
10936                                         )
10937             END;
10938 
10939         l_sql_stmt := '
10940             SELECT ' || l_select_sql
10941         ||' FROM EGO_ITM_USR_ATTR_INTRFC EIUAI '
10942         ||' WHERE '
10943             ||' NVL( EIUAI.ATTR_GROUP_TYPE, :default_attr_grp ) = :attr_grp_type'
10944             ||' AND EIUAI.ATTR_GROUP_INT_NAME       = :attr_grp'
10945             ||' AND EIUAI.ATTR_INT_NAME             = :attr '
10946                 || l_join_sql
10947             ||' AND EIUAI.ORGANIZATION_ID           = :org_id '
10948             ||' AND EIUAI.DATA_SET_ID               = :batch_id '
10949                 || l_do_procd_rows_sql
10950             ||' AND DECODE( EIUAI.REVISION, :rev_code, 1, 0 ) = 1 '
10951             ||' AND rownum = 1 '
10952             ;
10953             -- note that decode does a null-safe comparision (i.e. ( NULL = NULL ) = TRUE ||||'')
10954 
10955 --      my_put_line( 'sql:' || l_sql_stmt );
10956 
10957         IF l_do_processed_rows THEN
10958             CASE
10959                 WHEN p_USE_PDH_KEYS_TO_JOIN THEN
10960                     EXECUTE IMMEDIATE l_sql_stmt
10961                         INTO l_return_value
10962                         USING G_DEFAULT_ATTR_GROUP_TYPE
10963                             , p_attr_group_type, p_attr_group_name, p_attr_name
10964                             , p_item_number, p_inventory_item_id, p_organization_id, p_batch_id
10965                             , p_request_id
10966                             , l_revision_code
10967                         ;
10968                 WHEN NOT p_USE_PDH_KEYS_TO_JOIN THEN
10969                     EXECUTE IMMEDIATE l_sql_stmt
10970                         INTO l_return_value
10971                         USING G_DEFAULT_ATTR_GROUP_TYPE
10972                             , p_attr_group_type, p_attr_group_name, p_attr_name
10973                             , p_source_system_reference, p_source_system_id, p_organization_id, p_batch_id
10974                             , p_request_id
10975                             , l_revision_code
10976                         ;
10977             END CASE;
10978         ELSE -- unprocessed rows
10979             CASE
10980                 WHEN p_USE_PDH_KEYS_TO_JOIN THEN
10981                     EXECUTE IMMEDIATE l_sql_stmt
10982                         INTO l_return_value
10983                         USING G_DEFAULT_ATTR_GROUP_TYPE
10984                             , p_attr_group_type, p_attr_group_name, p_attr_name
10985                             , p_item_number, p_inventory_item_id, p_organization_id, p_batch_id
10986                             , l_revision_code
10987                         ;
10988                 WHEN NOT p_USE_PDH_KEYS_TO_JOIN THEN
10989                     EXECUTE IMMEDIATE l_sql_stmt
10990                         INTO l_return_value
10991                         USING G_DEFAULT_ATTR_GROUP_TYPE
10992                             , p_attr_group_type, p_attr_group_name, p_attr_name
10993                             , p_source_system_reference, p_source_system_id, p_organization_id, p_batch_id
10994                             , l_revision_code
10995                         ;
10996             END CASE;
10997         END IF;
10998 
10999         RETURN l_return_value;
11000 
11001     EXCEPTION
11002         WHEN NO_DATA_FOUND THEN -- this attribute is not present in the interface table !
11003             RETURN l_return_value;
11004         WHEN OTHERS THEN
11005 --          MY_PUT_LINE( 'GET_REV_USR_ATTR_DATE Error code ' || SQLCODE || ': ' || SQLERRM );
11006             RETURN l_return_value;
11007     END GET_REV_USR_ATTR_DATE;
11008 
11009     FUNCTION GET_REV_USR_ATTR_SS_DDATE
11010         (
11011         p_batch_id                          IN  EGO_ITM_USR_ATTR_INTRFC.DATA_SET_ID%TYPE
11012         , p_source_system_id                IN  EGO_ITM_USR_ATTR_INTRFC.SOURCE_SYSTEM_ID%TYPE
11013         , p_source_system_reference         IN  EGO_ITM_USR_ATTR_INTRFC.SOURCE_SYSTEM_REFERENCE%TYPE
11014         , p_organization_id                 IN  EGO_ITM_USR_ATTR_INTRFC.ORGANIZATION_ID%TYPE
11015         , p_revision_code                   IN  EGO_ITM_USR_ATTR_INTRFC.REVISION%TYPE
11016         , p_attr_group_type                 IN  EGO_ITM_USR_ATTR_INTRFC.ATTR_GROUP_TYPE%TYPE
11017         , p_attr_group_name                 IN  EGO_ITM_USR_ATTR_INTRFC.ATTR_GROUP_INT_NAME%TYPE
11018         , p_attr_name                       IN  EGO_ITM_USR_ATTR_INTRFC.ATTR_INT_NAME%TYPE
11019         , p_do_processed_rows_flag          IN  FLAG                                DEFAULT FND_API.G_FALSE
11020         ,   p_request_id                    IN  EGO_ITM_USR_ATTR_INTRFC.REQUEST_ID%TYPE                 DEFAULT NULL
11021         )
11022     RETURN EGO_ITM_USR_ATTR_INTRFC.ATTR_VALUE_DATE%TYPE IS
11023     BEGIN
11024         RETURN GET_REV_USR_ATTR_DATE
11025         (
11026           p_batch_id                        => p_batch_id
11027         , p_source_system_id                => p_source_system_id
11028         , p_source_system_reference         => p_source_system_reference
11029         , p_organization_id                 => p_organization_id
11030         , p_revision_code                   => p_revision_code
11031         , p_attr_group_type                 => p_attr_group_type
11032         , p_attr_group_name                 => p_attr_group_name
11033         , p_attr_name                       => p_attr_name
11034         , p_do_processed_rows_flag          => p_do_processed_rows_flag
11035         , p_request_id                      => p_request_id
11036         , p_use_pdh_keys_to_join            => false
11037         , p_get_value_column                => false
11038         );
11039     END GET_REV_USR_ATTR_SS_DDATE;
11040 
11041     FUNCTION GET_REV_USR_ATTR_PDH_DDATE
11042         (   p_batch_id                      IN  EGO_ITM_USR_ATTR_INTRFC.DATA_SET_ID%TYPE
11043         ,   p_inventory_item_id             IN  EGO_ITM_USR_ATTR_INTRFC.INVENTORY_ITEM_ID%TYPE
11044         ,   p_item_number                   IN  EGO_ITM_USR_ATTR_INTRFC.ITEM_NUMBER%TYPE
11045         ,   p_organization_id               IN  EGO_ITM_USR_ATTR_INTRFC.ORGANIZATION_ID%TYPE
11046         ,   p_revision_code                 IN  EGO_ITM_USR_ATTR_INTRFC.REVISION%TYPE
11047         ,   p_attr_group_type               IN  EGO_ITM_USR_ATTR_INTRFC.ATTR_GROUP_TYPE%TYPE
11048         ,   p_attr_group_name               IN  EGO_ITM_USR_ATTR_INTRFC.ATTR_GROUP_INT_NAME%TYPE
11049         ,   p_attr_name                     IN  EGO_ITM_USR_ATTR_INTRFC.ATTR_INT_NAME%TYPE
11050         ,   p_do_processed_rows_flag        IN  FLAG                                DEFAULT FND_API.G_FALSE
11051         ,   p_request_id                    IN  EGO_ITM_USR_ATTR_INTRFC.REQUEST_ID%TYPE                 DEFAULT NULL
11052         )
11053     RETURN EGO_ITM_USR_ATTR_INTRFC.ATTR_VALUE_DATE%TYPE IS
11054     BEGIN
11055         RETURN GET_REV_USR_ATTR_DATE
11056         (
11057           p_batch_id                        => p_batch_id
11058         , p_inventory_item_id               => p_inventory_item_id
11059         , p_item_number                     => p_item_number
11060         , p_organization_id                 => p_organization_id
11061         , p_revision_code                   => p_revision_code
11062         , p_attr_group_type                 => p_attr_group_type
11063         , p_attr_group_name                 => p_attr_group_name
11064         , p_attr_name                       => p_attr_name
11065         , p_do_processed_rows_flag          => p_do_processed_rows_flag
11066         , p_request_id                      => p_request_id
11067         , p_use_pdh_keys_to_join            => true
11068         , p_get_value_column                => false
11069         );
11070     END GET_REV_USR_ATTR_PDH_DDATE;
11071 
11072     ----------------------------------------------------------------------------------------------
11073     --  Function GET_REV_USR_ATTR_DISP_STR
11074     --  Returns the string value of the specified revision attribute, if the attribute is present
11075     --  in the interface table, merging in an attempted conversion of the display column content.
11076     ----------------------------------------------------------------------------------------------
11077     FUNCTION GET_REV_USR_ATTR_STR
11078         (   p_batch_id                      IN  EGO_ITM_USR_ATTR_INTRFC.DATA_SET_ID%TYPE
11079         ,   p_source_system_id              IN  EGO_ITM_USR_ATTR_INTRFC.SOURCE_SYSTEM_ID%TYPE           DEFAULT NULL
11080         ,   p_source_system_reference       IN  EGO_ITM_USR_ATTR_INTRFC.SOURCE_SYSTEM_REFERENCE%TYPE    DEFAULT NULL
11081         ,   p_organization_id               IN  EGO_ITM_USR_ATTR_INTRFC.ORGANIZATION_ID%TYPE
11082         ,   p_revision_code                 IN  EGO_ITM_USR_ATTR_INTRFC.REVISION%TYPE
11083         ,   p_attr_group_type               IN  EGO_ITM_USR_ATTR_INTRFC.ATTR_GROUP_TYPE%TYPE
11084         ,   p_attr_group_name               IN  EGO_ITM_USR_ATTR_INTRFC.ATTR_GROUP_INT_NAME%TYPE
11085         ,   p_attr_name                     IN  EGO_ITM_USR_ATTR_INTRFC.ATTR_INT_NAME%TYPE
11086         ,   p_do_processed_rows_flag        IN  FLAG                                                    DEFAULT FND_API.G_FALSE
11087         ,   p_request_id                    IN  EGO_ITM_USR_ATTR_INTRFC.REQUEST_ID%TYPE                 DEFAULT NULL
11088         ,   p_inventory_item_id             IN  EGO_ITM_USR_ATTR_INTRFC.INVENTORY_ITEM_ID%TYPE          DEFAULT NULL
11089         ,   p_item_number                   IN  EGO_ITM_USR_ATTR_INTRFC.ITEM_NUMBER%TYPE                DEFAULT NULL
11090         ,   p_use_pdh_keys_to_join          IN  BOOLEAN
11091         ,   p_get_value_column              IN  BOOLEAN
11092         )
11093     RETURN EGO_ITM_USR_ATTR_INTRFC.ATTR_VALUE_STR%TYPE
11094     IS
11095         l_return_value      EGO_ITM_USR_ATTR_INTRFC.ATTR_VALUE_STR%TYPE;
11096         l_revision_code     EGO_ITM_USR_ATTR_INTRFC.REVISION%TYPE;
11097         l_sql_stmt          VARCHAR2( 32000 );
11098         l_do_procd_rows_sql VARCHAR2( 200 );
11099         l_join_sql          VARCHAR2( 200 );
11100         l_select_sql        VARCHAR2( 200 );
11101         l_do_processed_rows BOOLEAN;
11102     BEGIN
11103         l_return_value  := null; -- 'default';
11104 
11105         CASE -- order of WHEN clauses matters!
11106             WHEN p_USE_PDH_KEYS_TO_JOIN AND
11107                  p_inventory_item_id IS NULL AND
11108                  p_item_number IS NULL
11109                 THEN RETURN l_return_value;
11110             WHEN p_USE_PDH_KEYS_TO_JOIN THEN
11111                 l_join_sql :=
11112                     ' AND ( ( '
11113                 ||  CASE
11114                     WHEN p_inventory_item_id IS NOT NULL THEN
11115                             ' EIUAI.INVENTORY_ITEM_ID     IS NULL AND'
11116                     ELSE    ''
11117                     END
11118                 ||          ' EIUAI.ITEM_NUMBER           = :item_number '
11119                 ||          ' ) '
11120                 ||      ' OR  EIUAI.INVENTORY_ITEM_ID     = :item_id '
11121                 ||      ' ) '
11122                 ;
11123             WHEN p_source_system_reference IS NULL AND
11124                  p_source_system_id IS NULL
11125                  THEN RETURN l_return_value;
11126             ELSE
11127                 l_join_sql := '
11128                     AND EIUAI.SOURCE_SYSTEM_REFERENCE   = :ss_ref
11129                     AND EIUAI.SOURCE_SYSTEM_ID          = :ss_id ';
11130         END CASE;
11131 
11132         l_do_processed_rows := ( p_do_processed_rows_flag = FND_API.G_TRUE );
11133         l_do_procd_rows_sql :=  ' AND EIUAI.PROCESS_STATUS'
11134                             ||  CASE
11135                                 WHEN l_do_processed_rows                                    THEN ' IN ( 3, 4 ) AND EIUAI.REQUEST_ID = :req_id '
11136                                 WHEN NOT l_do_processed_rows AND NOT p_use_pdh_keys_to_join THEN ' = 0 '
11137                                 WHEN NOT l_do_processed_rows AND p_use_pdh_keys_to_join     THEN ' = 1 '
11138                                 ELSE ''   -- XXX: hmmm, raise exception here?
11139                                 END;
11140 
11141         IF p_get_value_column THEN
11142             l_select_sql := ' EIUAI.ATTR_VALUE_STR ';
11143         ELSE
11144             l_select_sql := ' COALESCE( EIUAI.ATTR_DISP_VALUE, EIUAI.ATTR_VALUE_STR, '''|| G_EXCEL_MISS_CHAR_VAL ||''' ) ';
11145         END IF;
11146 
11147         -- Check to see whether the revision code has been provided:
11148         -- If not, default it to be the code of the latest LOGICAL revision row
11149         l_revision_code :=
11150             CASE -- order of WHEN clauses matters!
11151             WHEN p_revision_code IS NOT NULL THEN p_revision_code
11152             WHEN p_use_pdh_keys_to_join THEN
11153                 GET_LATEST_EIUAI_REV_PDH(   p_batch_id                  => p_batch_id
11154                                         ,   p_inventory_item_id         => p_inventory_item_id
11155                                         ,   p_item_number               => p_item_number
11156                                         ,   p_organization_id           => p_organization_id
11157                                         ,   p_do_processed_rows_flag    => p_do_processed_rows_flag
11158                                         ,   p_request_id                => p_request_id
11159                                         )
11160             ELSE
11161                 GET_LATEST_EIUAI_REV_SS (   p_batch_id                  => p_batch_id
11162                                         ,   p_source_system_id          => p_source_system_id
11163                                         ,   p_source_system_reference   => p_source_system_reference
11164                                         ,   p_organization_id           => p_organization_id
11165                                         ,   p_do_processed_rows_flag    => p_do_processed_rows_flag
11166                                         ,   p_request_id                => p_request_id
11167                                         )
11168             END;
11169 
11170         l_sql_stmt := '
11171             SELECT ' || l_select_sql
11172             || '
11173             FROM EGO_ITM_USR_ATTR_INTRFC EIUAI
11174             WHERE
11175                 NVL( EIUAI.ATTR_GROUP_TYPE, :default_attr_grp ) = :attr_grp_type
11176                 AND EIUAI.ATTR_GROUP_INT_NAME       = :attr_grp
11177                 AND EIUAI.ATTR_INT_NAME             = :attr '
11178                 || l_join_sql
11179                 || '
11180                 AND EIUAI.ORGANIZATION_ID           = :org_id
11181                 AND EIUAI.DATA_SET_ID               = :batch_id '
11182                 ||  l_do_procd_rows_sql
11183 /*                ||  '
11184                 AND EIUAI.REVISION '
11185                 ||  CASE l_revision_code
11186                     WHEN NULL THEN 'IS NULL '
11187                     ELSE '= :rev_code '
11188                     END */
11189                 || '
11190                 AND DECODE( EIUAI.REVISION, :rev_code, 1, 0 ) = 1
11191                 AND rownum = 1
11192             ';
11193 
11194 --        my_put_line( l_sql_stmt );
11195 
11196         CASE
11197             WHEN l_do_processed_rows AND p_USE_PDH_KEYS_TO_JOIN THEN
11198                 EXECUTE IMMEDIATE l_sql_stmt
11199                     INTO l_return_value
11200                     USING G_DEFAULT_ATTR_GROUP_TYPE
11201                         , p_attr_group_type, p_attr_group_name, p_attr_name
11202                         , p_item_number, p_inventory_item_id, p_organization_id, p_batch_id
11203                         , p_request_id
11204                         , l_revision_code
11205                     ;
11206             WHEN l_do_processed_rows AND NOT p_USE_PDH_KEYS_TO_JOIN THEN
11207                 EXECUTE IMMEDIATE l_sql_stmt
11208                     INTO l_return_value
11209                     USING G_DEFAULT_ATTR_GROUP_TYPE
11210                         , p_attr_group_type, p_attr_group_name, p_attr_name
11211                         , p_source_system_reference, p_source_system_id, p_organization_id, p_batch_id
11212                         , p_request_id
11213                         , l_revision_code
11214                     ;
11215             WHEN NOT l_do_processed_rows AND p_USE_PDH_KEYS_TO_JOIN THEN
11216                 EXECUTE IMMEDIATE l_sql_stmt
11217                     INTO l_return_value
11218                     USING G_DEFAULT_ATTR_GROUP_TYPE
11219                         , p_attr_group_type, p_attr_group_name, p_attr_name
11220                         , p_item_number, p_inventory_item_id, p_organization_id, p_batch_id
11221                         , l_revision_code
11222                     ;
11223             WHEN NOT l_do_processed_rows AND NOT p_USE_PDH_KEYS_TO_JOIN THEN
11224                 EXECUTE IMMEDIATE l_sql_stmt
11225                     INTO l_return_value
11226                     USING G_DEFAULT_ATTR_GROUP_TYPE
11227                         , p_attr_group_type, p_attr_group_name, p_attr_name
11228                         , p_source_system_reference, p_source_system_id, p_organization_id, p_batch_id
11229                         , l_revision_code
11230                     ;
11231         END CASE;
11232         RETURN l_return_value;
11233 
11234     EXCEPTION
11235         WHEN NO_DATA_FOUND THEN -- this attribute is not present in the interface table !
11236             RETURN l_return_value;
11237         WHEN OTHERS THEN
11238 --          MY_PUT_LINE( 'Error code ' || SQLCODE || ': ' || SQLERRM );
11239             RAISE;
11240     END GET_REV_USR_ATTR_STR;
11241 
11242     FUNCTION GET_REV_USR_ATTR_SS_DSTR
11243         (
11244         p_batch_id                          IN  EGO_ITM_USR_ATTR_INTRFC.DATA_SET_ID%TYPE
11245         , p_source_system_id                IN  EGO_ITM_USR_ATTR_INTRFC.SOURCE_SYSTEM_ID%TYPE
11246         , p_source_system_reference         IN  EGO_ITM_USR_ATTR_INTRFC.SOURCE_SYSTEM_REFERENCE%TYPE
11247         , p_organization_id                 IN  EGO_ITM_USR_ATTR_INTRFC.ORGANIZATION_ID%TYPE
11248         , p_revision_code                   IN  EGO_ITM_USR_ATTR_INTRFC.REVISION%TYPE
11249         , p_attr_group_type                 IN  EGO_ITM_USR_ATTR_INTRFC.ATTR_GROUP_TYPE%TYPE
11250         , p_attr_group_name                 IN  EGO_ITM_USR_ATTR_INTRFC.ATTR_GROUP_INT_NAME%TYPE
11251         , p_attr_name                       IN  EGO_ITM_USR_ATTR_INTRFC.ATTR_INT_NAME%TYPE
11252         , p_do_processed_rows_flag          IN  FLAG DEFAULT FND_API.G_FALSE
11253         ,   p_request_id                    IN  EGO_ITM_USR_ATTR_INTRFC.REQUEST_ID%TYPE                 DEFAULT NULL
11254         )
11255     RETURN EGO_ITM_USR_ATTR_INTRFC.ATTR_VALUE_STR%TYPE IS
11256     BEGIN
11257         RETURN GET_REV_USR_ATTR_STR
11258         (
11259           p_batch_id                        => p_batch_id
11260         , p_source_system_id                => p_source_system_id
11261         , p_source_system_reference         => p_source_system_reference
11262         , p_organization_id                 => p_organization_id
11263         , p_revision_code                   => p_revision_code
11264         , p_attr_group_type                 => p_attr_group_type
11265         , p_attr_group_name                 => p_attr_group_name
11266         , p_attr_name                       => p_attr_name
11267         , p_do_processed_rows_flag          => p_do_processed_rows_flag
11268         , p_request_id                      => p_request_id
11269         , p_use_pdh_keys_to_join            => false
11270         , p_get_value_column                => false
11271         );
11272     END GET_REV_USR_ATTR_SS_DSTR;
11273 
11274     FUNCTION GET_REV_USR_ATTR_PDH_DSTR
11275         (
11276         p_batch_id                          IN  EGO_ITM_USR_ATTR_INTRFC.DATA_SET_ID%TYPE
11277         , p_inventory_item_id               IN  EGO_ITM_USR_ATTR_INTRFC.INVENTORY_ITEM_ID%TYPE
11278         , p_item_number                     IN  EGO_ITM_USR_ATTR_INTRFC.ITEM_NUMBER%TYPE
11279         , p_organization_id                 IN  EGO_ITM_USR_ATTR_INTRFC.ORGANIZATION_ID%TYPE
11280         , p_revision_code                   IN  EGO_ITM_USR_ATTR_INTRFC.REVISION%TYPE
11281         , p_attr_group_type                 IN  EGO_ITM_USR_ATTR_INTRFC.ATTR_GROUP_TYPE%TYPE
11282         , p_attr_group_name                 IN  EGO_ITM_USR_ATTR_INTRFC.ATTR_GROUP_INT_NAME%TYPE
11283         , p_attr_name                       IN  EGO_ITM_USR_ATTR_INTRFC.ATTR_INT_NAME%TYPE
11284         , p_do_processed_rows_flag          IN  FLAG DEFAULT FND_API.G_FALSE
11285         ,   p_request_id                    IN  EGO_ITM_USR_ATTR_INTRFC.REQUEST_ID%TYPE                 DEFAULT NULL
11286         )
11287     RETURN EGO_ITM_USR_ATTR_INTRFC.ATTR_VALUE_STR%TYPE IS
11288     BEGIN
11289         RETURN GET_REV_USR_ATTR_STR
11290         (
11291           p_batch_id                        => p_batch_id
11292         , p_inventory_item_id               => p_inventory_item_id
11293         , p_item_number                     => p_item_number
11294         , p_organization_id                 => p_organization_id
11295         , p_revision_code                   => p_revision_code
11296         , p_attr_group_type                 => p_attr_group_type
11297         , p_attr_group_name                 => p_attr_group_name
11298         , p_attr_name                       => p_attr_name
11299         , p_do_processed_rows_flag          => p_do_processed_rows_flag
11300         , p_request_id                      => p_request_id
11301         , p_use_pdh_keys_to_join            => true
11302         , p_get_value_column                => false
11303         );
11304     END GET_REV_USR_ATTR_PDH_DSTR;
11305 
11306     ----------------------------------------------------------------------------------------------
11307     --  Function GET_REV_USR_ATTR_DISP_NUM
11308     --  Returns the number value of the specified revision attribute, if the attribute is present
11309     --  in the interface table, merging in an attempted conversion of the display column content.
11310     --------------------------------------------------------------------------------------------
11311     FUNCTION GET_REV_USR_ATTR_NUM
11312         (
11313         p_batch_id                          IN  EGO_ITM_USR_ATTR_INTRFC.DATA_SET_ID%TYPE
11314         , p_source_system_id                IN  EGO_ITM_USR_ATTR_INTRFC.SOURCE_SYSTEM_ID%TYPE           DEFAULT NULL
11315         , p_source_system_reference         IN  EGO_ITM_USR_ATTR_INTRFC.SOURCE_SYSTEM_REFERENCE%TYPE    DEFAULT NULL
11316         , p_organization_id                 IN  EGO_ITM_USR_ATTR_INTRFC.ORGANIZATION_ID%TYPE
11317         , p_revision_code                   IN  EGO_ITM_USR_ATTR_INTRFC.REVISION%TYPE
11318         , p_attr_group_type                 IN  EGO_ITM_USR_ATTR_INTRFC.ATTR_GROUP_TYPE%TYPE
11319         , p_attr_group_name                 IN  EGO_ITM_USR_ATTR_INTRFC.ATTR_GROUP_INT_NAME%TYPE
11320         , p_attr_name                       IN  EGO_ITM_USR_ATTR_INTRFC.ATTR_INT_NAME%TYPE
11321         , p_output_uom_code                 IN  EGO_ITM_USR_ATTR_INTRFC.ATTR_VALUE_UOM%TYPE             DEFAULT NULL
11322         , p_do_processed_rows_flag          IN  FLAG DEFAULT FND_API.G_FALSE
11323         , p_request_id                      IN  EGO_ITM_USR_ATTR_INTRFC.REQUEST_ID%TYPE                 DEFAULT NULL
11324         , p_inventory_item_id               IN  EGO_ITM_USR_ATTR_INTRFC.INVENTORY_ITEM_ID%TYPE          DEFAULT NULL
11325         , p_item_number                     IN  EGO_ITM_USR_ATTR_INTRFC.ITEM_NUMBER%TYPE                DEFAULT NULL
11326         , p_use_pdh_keys_to_join            IN  BOOLEAN
11327         , p_get_value_column                IN  BOOLEAN
11328         )
11329     RETURN EGO_ITM_USR_ATTR_INTRFC.ATTR_VALUE_NUM%TYPE
11330     IS
11331         l_return_value      EGO_ITM_USR_ATTR_INTRFC.ATTR_VALUE_NUM%TYPE;
11332         l_num_value         EGO_ITM_USR_ATTR_INTRFC.ATTR_VALUE_NUM%TYPE;
11333         l_revision_code     EGO_ITM_USR_ATTR_INTRFC.REVISION%TYPE;
11334         l_sql_stmt          VARCHAR2( 32000 );
11335         l_do_procd_rows_sql VARCHAR2( 200 );
11336         l_join_sql          VARCHAR2( 200 );
11337         l_select_sql        VARCHAR2( 200 );
11338         l_do_processed_rows BOOLEAN;
11339 
11340         l_uom_code          EGO_ITM_USR_ATTR_INTRFC.ATTR_VALUE_UOM%TYPE;
11341         l_uom_disp_value    EGO_ITM_USR_ATTR_INTRFC.ATTR_UOM_DISP_VALUE%TYPE;
11342         l_uom_rate          NUMBER := 1;
11343     BEGIN
11344         l_return_value  := null; -- 'default';
11345 
11346         CASE -- order of WHEN clauses matters!
11347             WHEN p_USE_PDH_KEYS_TO_JOIN AND
11348                  p_inventory_item_id IS NULL AND
11349                  p_item_number IS NULL
11350                 THEN RETURN l_return_value;
11351             WHEN p_USE_PDH_KEYS_TO_JOIN THEN
11352                 l_join_sql :=
11353                     ' AND ( ( '
11354                 ||  CASE
11355                     WHEN p_inventory_item_id IS NOT NULL THEN
11356                             ' EIUAI.INVENTORY_ITEM_ID     IS NULL AND'
11357                     ELSE    ''
11358                     END
11359                 ||          ' EIUAI.ITEM_NUMBER           = :item_number '
11360                 ||          ' ) '
11361                 ||      ' OR  EIUAI.INVENTORY_ITEM_ID     = :item_id '
11362                 ||      ' ) '
11363                 ;
11364             WHEN p_source_system_reference IS NULL AND
11365                  p_source_system_id IS NULL
11366                  THEN RETURN l_return_value;
11367             ELSE
11368                 l_join_sql := ' AND EIUAI.SOURCE_SYSTEM_REFERENCE   = :ss_ref '
11369                            || ' AND EIUAI.SOURCE_SYSTEM_ID          = :ss_id ';
11370         END CASE;
11371 
11372         l_do_processed_rows := ( p_do_processed_rows_flag = FND_API.G_TRUE );
11373         l_do_procd_rows_sql :=  ' AND EIUAI.PROCESS_STATUS'
11374                             ||  CASE
11375                                 WHEN l_do_processed_rows                                    THEN ' IN ( 3, 4 ) AND EIUAI.REQUEST_ID = :req_id '
11376                                 WHEN NOT l_do_processed_rows AND NOT p_use_pdh_keys_to_join THEN ' = 0 '
11377                                 WHEN NOT l_do_processed_rows AND p_use_pdh_keys_to_join     THEN ' = 1 '
11378                                 ELSE ''   -- XXX: hmmm, raise exception here?
11379                                 END;
11380 
11381         IF p_get_value_column THEN
11382             l_select_sql    := ' EIUAI.ATTR_VALUE_NUM ';
11383         ELSE
11384             l_select_sql    :=  ' NVL2( EIUAI.ATTR_DISP_VALUE '
11385                                 ||  ' , to_number( EIUAI.ATTR_DISP_VALUE ) '
11386                                 ||  ' , NVL( EIUAI.ATTR_VALUE_NUM, ' || G_EXCEL_MISS_NUM_STR
11387                                 ||  ' ) ) '
11388                             ;
11389         END IF;
11390 
11391         -- Check to see whether the revision code has been provided:
11392         -- If not, default it to be the code of the latest LOGICAL revision row
11393         l_revision_code :=
11394             CASE -- order of WHEN clauses matters!
11395             WHEN p_revision_code IS NOT NULL THEN p_revision_code
11396             WHEN p_use_pdh_keys_to_join THEN
11397                 GET_LATEST_EIUAI_REV_PDH(   p_batch_id                  => p_batch_id
11398                                         ,   p_inventory_item_id         => p_inventory_item_id
11399                                         ,   p_item_number               => p_item_number
11400                                         ,   p_organization_id           => p_organization_id
11401                                         ,   p_do_processed_rows_flag    => p_do_processed_rows_flag
11402                                         ,   p_request_id                => p_request_id
11403                                         )
11404             ELSE
11405                 GET_LATEST_EIUAI_REV_SS (   p_batch_id                  => p_batch_id
11406                                         ,   p_source_system_id          => p_source_system_id
11407                                         ,   p_source_system_reference   => p_source_system_reference
11408                                         ,   p_organization_id           => p_organization_id
11409                                         ,   p_do_processed_rows_flag    => p_do_processed_rows_flag
11410                                         ,   p_request_id                => p_request_id
11411                                         )
11412             END;
11413 
11414         l_sql_stmt := '
11415             SELECT ' || l_select_sql
11416             || ', ATTR_VALUE_UOM
11417                 , ATTR_UOM_DISP_VALUE
11418             FROM EGO_ITM_USR_ATTR_INTRFC EIUAI
11419             WHERE
11420                 NVL( EIUAI.ATTR_GROUP_TYPE, :default_attr_grp ) = :attr_grp_type
11421                 AND EIUAI.ATTR_GROUP_INT_NAME       = :attr_grp
11422                 AND EIUAI.ATTR_INT_NAME             = :attr '
11423                 || l_join_sql
11424                 || '
11425                 AND EIUAI.ORGANIZATION_ID           = :org_id
11426                 AND EIUAI.DATA_SET_ID               = :batch_id '
11427                 ||  l_do_procd_rows_sql
11428                 || '
11429                 AND DECODE( EIUAI.REVISION, :rev_code, 1, 0 ) = 1
11430                 AND rownum = 1
11431             ';
11432 
11433 --      my_put_line( l_sql_stmt );
11434 
11435         CASE
11436             WHEN l_do_processed_rows AND p_USE_PDH_KEYS_TO_JOIN THEN
11437                 EXECUTE IMMEDIATE l_sql_stmt
11438                     INTO l_num_value, l_uom_code, l_uom_disp_value
11439                     USING G_DEFAULT_ATTR_GROUP_TYPE
11440                         , p_attr_group_type, p_attr_group_name, p_attr_name
11441                         , p_item_number, p_inventory_item_id, p_organization_id, p_batch_id
11442                         , p_request_id
11443                         , l_revision_code
11444                     ;
11445             WHEN l_do_processed_rows AND NOT p_USE_PDH_KEYS_TO_JOIN THEN
11446                 EXECUTE IMMEDIATE l_sql_stmt
11447                     INTO l_num_value, l_uom_code, l_uom_disp_value
11448                     USING G_DEFAULT_ATTR_GROUP_TYPE
11449                         , p_attr_group_type, p_attr_group_name, p_attr_name
11450                         , p_source_system_reference, p_source_system_id, p_organization_id, p_batch_id
11451                         , p_request_id
11452                         , l_revision_code
11453                     ;
11454             WHEN NOT l_do_processed_rows AND p_USE_PDH_KEYS_TO_JOIN THEN
11455                 EXECUTE IMMEDIATE l_sql_stmt
11456                     INTO l_num_value, l_uom_code, l_uom_disp_value
11457                     USING G_DEFAULT_ATTR_GROUP_TYPE
11458                         , p_attr_group_type, p_attr_group_name, p_attr_name
11459                         , p_item_number, p_inventory_item_id, p_organization_id, p_batch_id
11460                         , l_revision_code
11461                     ;
11462             WHEN NOT l_do_processed_rows AND NOT p_USE_PDH_KEYS_TO_JOIN THEN
11463                 EXECUTE IMMEDIATE l_sql_stmt
11464                     INTO l_num_value, l_uom_code, l_uom_disp_value
11465                     USING G_DEFAULT_ATTR_GROUP_TYPE
11466                         , p_attr_group_type, p_attr_group_name, p_attr_name
11467                         , p_source_system_reference, p_source_system_id, p_organization_id, p_batch_id
11468                         , l_revision_code
11469                     ;
11470         END CASE;
11471 
11472         -- perform a uom conversion if one is necessary
11473         l_return_value := CASE WHEN p_output_uom_code IS NULL THEN l_num_value
11474                                ELSE WRAPPED_TO_UOM( p_val             => l_num_value
11475                                                   , p_to_uom_code     => p_output_uom_code
11476                                                   , p_from_uom_code   => l_uom_code
11477                                                   , p_from_uom_value  => l_uom_disp_value
11478                                                   )
11479                                END;
11480         RETURN l_return_value;
11481     EXCEPTION
11482         WHEN NO_DATA_FOUND THEN -- this attribute is not present in the interface table !
11483             RETURN l_return_value;
11484         WHEN OTHERS THEN
11485 --          MY_PUT_LINE( 'GET_REV_USR_ATTR_NUM Error code ' || SQLCODE || ': ' || SQLERRM );
11486             RETURN l_return_value;
11487     END GET_REV_USR_ATTR_NUM;
11488 
11489     --------------------------------------------------------------------------------------------
11490     --  Function WRAPPED_TO_UOM                                                               --
11491     --      Wraps inv_convert.uom_conversion to return null in case of conversion failure.    --
11492     --      If both of the from_uom params are null, no attempt to make the conversion is     --
11493     --        performed.                                                                      --
11494     --------------------------------------------------------------------------------------------
11495     FUNCTION WRAPPED_TO_UOM( p_val                  NUMBER
11496                            , p_to_uom_code          EGO_ITM_USR_ATTR_INTRFC.ATTR_VALUE_UOM%TYPE
11497                            , p_from_uom_code        EGO_ITM_USR_ATTR_INTRFC.ATTR_VALUE_UOM%TYPE
11498                            , p_from_uom_value       EGO_ITM_USR_ATTR_INTRFC.ATTR_UOM_DISP_VALUE%TYPE
11499                            , p_inventory_item_id    EGO_ITM_USR_ATTR_INTRFC.INVENTORY_ITEM_ID%TYPE      DEFAULT NULL
11500                            )
11501     RETURN NUMBER IS
11502         l_uom_code  EGO_ITM_USR_ATTR_INTRFC.ATTR_VALUE_UOM%TYPE := p_from_uom_code;
11503         l_uom_rate  NUMBER;
11504     BEGIN
11505         IF      p_val IS NULL
11506             OR  p_val = 0
11507             OR  p_val = 9.99e125 -- G_EXCEL_MISS_NUM we make sure that null out attempts are not UOM converted
11508             OR  (   p_from_uom_code     IS NULL
11509                 AND p_from_uom_value    IS NULL
11510                 )
11511         THEN
11512             RETURN p_val;
11513         END IF;
11514 
11515         IF l_uom_code IS NULL THEN
11516             SELECT  uom_code INTO l_uom_code
11517             FROM    mtl_units_of_measure_vl
11518             WHERE   unit_of_measure = p_from_uom_value;
11519         END IF;
11520 
11521         inv_convert.inv_um_conversion( from_unit => l_uom_code
11522                                      , to_unit   => p_to_uom_code
11523                                      , item_id   => p_inventory_item_id
11524                                      , uom_rate  => l_uom_rate
11525                                      );
11526         IF  l_uom_rate <> -99999 -- the error value in the inv_convert package
11527         THEN
11528             RETURN l_uom_rate * p_val;
11529         ELSE
11530             RETURN NULL;
11531         END IF;
11532 
11533     EXCEPTION
11534         WHEN OTHERS THEN
11535             RETURN NULL;
11536     END WRAPPED_TO_UOM;
11537 
11538     FUNCTION GET_REV_USR_ATTR_SS_DNUM
11539         (
11540           p_batch_id                        IN  EGO_ITM_USR_ATTR_INTRFC.DATA_SET_ID%TYPE
11541         , p_source_system_id                IN  EGO_ITM_USR_ATTR_INTRFC.SOURCE_SYSTEM_ID%TYPE
11542         , p_source_system_reference         IN  EGO_ITM_USR_ATTR_INTRFC.SOURCE_SYSTEM_REFERENCE%TYPE
11543         , p_organization_id                 IN  EGO_ITM_USR_ATTR_INTRFC.ORGANIZATION_ID%TYPE
11544         , p_revision_code                   IN  EGO_ITM_USR_ATTR_INTRFC.REVISION%TYPE
11545         , p_attr_group_type                 IN  EGO_ITM_USR_ATTR_INTRFC.ATTR_GROUP_TYPE%TYPE
11546         , p_attr_group_name                 IN  EGO_ITM_USR_ATTR_INTRFC.ATTR_GROUP_INT_NAME%TYPE
11547         , p_attr_name                       IN  EGO_ITM_USR_ATTR_INTRFC.ATTR_INT_NAME%TYPE
11548         , p_output_uom_code                 IN  EGO_ITM_USR_ATTR_INTRFC.ATTR_VALUE_UOM%TYPE
11549         , p_do_processed_rows_flag          IN  FLAG                                DEFAULT FND_API.G_FALSE
11550         , p_request_id                      IN  EGO_ITM_USR_ATTR_INTRFC.REQUEST_ID%TYPE DEFAULT NULL
11551         )
11552     RETURN EGO_ITM_USR_ATTR_INTRFC.ATTR_VALUE_NUM%TYPE IS
11553     BEGIN
11554         RETURN GET_REV_USR_ATTR_NUM
11555         (
11556           p_batch_id                        => p_batch_id
11557         , p_source_system_id                => p_source_system_id
11558         , p_source_system_reference         => p_source_system_reference
11559         , p_organization_id                 => p_organization_id
11560         , p_revision_code                   => p_revision_code
11561         , p_attr_group_type                 => p_attr_group_type
11562         , p_attr_group_name                 => p_attr_group_name
11563         , p_attr_name                       => p_attr_name
11564         , p_do_processed_rows_flag          => p_do_processed_rows_flag
11565         , p_request_id                      => p_request_id
11566         , p_use_pdh_keys_to_join            => FALSE
11567         , p_get_value_column                => FALSE
11568         , p_output_uom_code                 => p_output_uom_code
11569         );
11570     END GET_REV_USR_ATTR_SS_DNUM;
11571 
11572     FUNCTION GET_REV_USR_ATTR_PDH_DNUM
11573         (
11574           p_batch_id                        IN  EGO_ITM_USR_ATTR_INTRFC.DATA_SET_ID%TYPE
11575         , p_inventory_item_id               IN  EGO_ITM_USR_ATTR_INTRFC.INVENTORY_ITEM_ID%TYPE
11576         , p_item_number                     IN  EGO_ITM_USR_ATTR_INTRFC.ITEM_NUMBER%TYPE
11577         , p_organization_id                 IN  EGO_ITM_USR_ATTR_INTRFC.ORGANIZATION_ID%TYPE
11578         , p_revision_code                   IN  EGO_ITM_USR_ATTR_INTRFC.REVISION%TYPE
11579         , p_attr_group_type                 IN  EGO_ITM_USR_ATTR_INTRFC.ATTR_GROUP_TYPE%TYPE
11580         , p_attr_group_name                 IN  EGO_ITM_USR_ATTR_INTRFC.ATTR_GROUP_INT_NAME%TYPE
11581         , p_attr_name                       IN  EGO_ITM_USR_ATTR_INTRFC.ATTR_INT_NAME%TYPE
11582         , p_output_uom_code                 IN  EGO_ITM_USR_ATTR_INTRFC.ATTR_VALUE_UOM%TYPE
11583         , p_do_processed_rows_flag          IN  FLAG                                DEFAULT FND_API.G_FALSE
11584         , p_request_id                      IN  EGO_ITM_USR_ATTR_INTRFC.REQUEST_ID%TYPE DEFAULT NULL
11585         )
11586     RETURN EGO_ITM_USR_ATTR_INTRFC.ATTR_VALUE_NUM%TYPE IS
11587     BEGIN
11588         RETURN GET_REV_USR_ATTR_NUM
11589         (
11590           p_batch_id                        => p_batch_id
11591         , p_inventory_item_id               => p_inventory_item_id
11592         , p_item_number                     => p_item_number
11593         , p_organization_id                 => p_organization_id
11594         , p_revision_code                   => p_revision_code
11595         , p_attr_group_type                 => p_attr_group_type
11596         , p_attr_group_name                 => p_attr_group_name
11597         , p_attr_name                       => p_attr_name
11598         , p_do_processed_rows_flag          => p_do_processed_rows_flag
11599         , p_request_id                      => p_request_id
11600         , p_use_pdh_keys_to_join            => TRUE
11601         , p_get_value_column                => FALSE
11602         , p_output_uom_code                 => p_output_uom_code
11603         );
11604     END GET_REV_USR_ATTR_PDH_DNUM;
11605 
11606     --------------------------------------------------------------------------------------------
11607     --  Function GET_REV_USR_ATTR_STR                                                         --
11608     --  Returns the string value of the specified revision attribute, if the attribute is present
11609     --  in the interface table.
11610     --------------------------------------------------------------------------------------------
11611     FUNCTION GET_REV_USR_ATTR_SS_VSTR
11612         (
11613         p_batch_id                          IN  EGO_ITM_USR_ATTR_INTRFC.DATA_SET_ID%TYPE
11614         , p_source_system_id                IN  EGO_ITM_USR_ATTR_INTRFC.SOURCE_SYSTEM_ID%TYPE
11615         , p_source_system_reference         IN  EGO_ITM_USR_ATTR_INTRFC.SOURCE_SYSTEM_REFERENCE%TYPE
11616         , p_organization_id                 IN  EGO_ITM_USR_ATTR_INTRFC.ORGANIZATION_ID%TYPE
11617         , p_revision_code                   IN  EGO_ITM_USR_ATTR_INTRFC.REVISION%TYPE
11618         , p_attr_group_type                 IN  EGO_ITM_USR_ATTR_INTRFC.ATTR_GROUP_TYPE%TYPE
11619         , p_attr_group_name                 IN  EGO_ITM_USR_ATTR_INTRFC.ATTR_GROUP_INT_NAME%TYPE
11620         , p_attr_name                       IN  EGO_ITM_USR_ATTR_INTRFC.ATTR_INT_NAME%TYPE
11621         , p_do_processed_rows_flag          IN  FLAG DEFAULT FND_API.G_FALSE
11622         ,   p_request_id                    IN  EGO_ITM_USR_ATTR_INTRFC.REQUEST_ID%TYPE                 DEFAULT NULL
11623         )
11624     RETURN EGO_ITM_USR_ATTR_INTRFC.ATTR_VALUE_STR%TYPE IS
11625     BEGIN
11626         RETURN GET_REV_USR_ATTR_STR
11627         (
11628           p_batch_id                        => p_batch_id
11629         , p_source_system_id                => p_source_system_id
11630         , p_source_system_reference         => p_source_system_reference
11631         , p_organization_id                 => p_organization_id
11632         , p_revision_code                   => p_revision_code
11633         , p_attr_group_type                 => p_attr_group_type
11634         , p_attr_group_name                 => p_attr_group_name
11635         , p_attr_name                       => p_attr_name
11636         , p_do_processed_rows_flag          => p_do_processed_rows_flag
11637         , p_request_id                      => p_request_id
11638         , p_use_pdh_keys_to_join            => false
11639         , p_get_value_column                => true
11640         );
11641     END GET_REV_USR_ATTR_SS_VSTR;
11642 
11643     FUNCTION GET_REV_USR_ATTR_PDH_VSTR
11644         (
11645         p_batch_id                          IN  EGO_ITM_USR_ATTR_INTRFC.DATA_SET_ID%TYPE
11646         , p_inventory_item_id               IN  EGO_ITM_USR_ATTR_INTRFC.INVENTORY_ITEM_ID%TYPE
11647         , p_item_number                     IN  EGO_ITM_USR_ATTR_INTRFC.ITEM_NUMBER%TYPE
11648         , p_organization_id                 IN  EGO_ITM_USR_ATTR_INTRFC.ORGANIZATION_ID%TYPE
11649         , p_revision_code                   IN  EGO_ITM_USR_ATTR_INTRFC.REVISION%TYPE
11650         , p_attr_group_type                 IN  EGO_ITM_USR_ATTR_INTRFC.ATTR_GROUP_TYPE%TYPE
11651         , p_attr_group_name                 IN  EGO_ITM_USR_ATTR_INTRFC.ATTR_GROUP_INT_NAME%TYPE
11652         , p_attr_name                       IN  EGO_ITM_USR_ATTR_INTRFC.ATTR_INT_NAME%TYPE
11653         , p_do_processed_rows_flag          IN  FLAG DEFAULT FND_API.G_FALSE
11654         ,   p_request_id                    IN  EGO_ITM_USR_ATTR_INTRFC.REQUEST_ID%TYPE                 DEFAULT NULL
11655         )
11656     RETURN EGO_ITM_USR_ATTR_INTRFC.ATTR_VALUE_STR%TYPE IS
11657     BEGIN
11658         RETURN GET_REV_USR_ATTR_STR
11659         (
11660           p_batch_id                        => p_batch_id
11661         , p_inventory_item_id               => p_inventory_item_id
11662         , p_item_number                     => p_item_number
11663         , p_organization_id                 => p_organization_id
11664         , p_revision_code                   => p_revision_code
11665         , p_attr_group_type                 => p_attr_group_type
11666         , p_attr_group_name                 => p_attr_group_name
11667         , p_attr_name                       => p_attr_name
11668         , p_do_processed_rows_flag          => p_do_processed_rows_flag
11669         , p_request_id                      => p_request_id
11670         , p_use_pdh_keys_to_join            => true
11671         , p_get_value_column                => true
11672         );
11673     END GET_REV_USR_ATTR_PDH_VSTR;
11674 
11675     --------------------------------------------------------------------------------------------
11676     --  Function GET_REV_USR_ATTR_DATE
11677     --  Returns the date value of the specified revision attribute, if the attribute is present
11678     --  in the interface table.
11679     --------------------------------------------------------------------------------------------
11680     FUNCTION GET_REV_USR_ATTR_SS_VDATE
11681         (
11682         p_batch_id                          IN  EGO_ITM_USR_ATTR_INTRFC.DATA_SET_ID%TYPE
11683         , p_source_system_id                IN  EGO_ITM_USR_ATTR_INTRFC.SOURCE_SYSTEM_ID%TYPE
11684         , p_source_system_reference         IN  EGO_ITM_USR_ATTR_INTRFC.SOURCE_SYSTEM_REFERENCE%TYPE
11685         , p_organization_id                 IN  EGO_ITM_USR_ATTR_INTRFC.ORGANIZATION_ID%TYPE
11686         , p_revision_code                   IN  EGO_ITM_USR_ATTR_INTRFC.REVISION%TYPE
11687         , p_attr_group_type                 IN  EGO_ITM_USR_ATTR_INTRFC.ATTR_GROUP_TYPE%TYPE
11688         , p_attr_group_name                 IN  EGO_ITM_USR_ATTR_INTRFC.ATTR_GROUP_INT_NAME%TYPE
11689         , p_attr_name                       IN  EGO_ITM_USR_ATTR_INTRFC.ATTR_INT_NAME%TYPE
11690         , p_do_processed_rows_flag          IN  FLAG                                DEFAULT FND_API.G_FALSE
11691         ,   p_request_id                    IN  EGO_ITM_USR_ATTR_INTRFC.REQUEST_ID%TYPE                 DEFAULT NULL
11692         )
11693     RETURN EGO_ITM_USR_ATTR_INTRFC.ATTR_VALUE_DATE%TYPE IS
11694     BEGIN
11695         RETURN GET_REV_USR_ATTR_DATE
11696         (
11697           p_batch_id                        => p_batch_id
11698         , p_source_system_id                => p_source_system_id
11699         , p_source_system_reference         => p_source_system_reference
11700         , p_organization_id                 => p_organization_id
11701         , p_revision_code                   => p_revision_code
11702         , p_attr_group_type                 => p_attr_group_type
11703         , p_attr_group_name                 => p_attr_group_name
11704         , p_attr_name                       => p_attr_name
11705         , p_do_processed_rows_flag          => p_do_processed_rows_flag
11706         , p_request_id                      => p_request_id
11707         , p_use_pdh_keys_to_join            => false
11708         , p_get_value_column                => true
11709         );
11710     END GET_REV_USR_ATTR_SS_VDATE;
11711 
11712     FUNCTION GET_REV_USR_ATTR_PDH_VDATE
11713         (
11714         p_batch_id                          IN  EGO_ITM_USR_ATTR_INTRFC.DATA_SET_ID%TYPE
11715         , p_inventory_item_id               IN  EGO_ITM_USR_ATTR_INTRFC.INVENTORY_ITEM_ID%TYPE
11716         , p_item_number                     IN  EGO_ITM_USR_ATTR_INTRFC.ITEM_NUMBER%TYPE
11717         , p_organization_id                 IN  EGO_ITM_USR_ATTR_INTRFC.ORGANIZATION_ID%TYPE
11718         , p_revision_code                   IN  EGO_ITM_USR_ATTR_INTRFC.REVISION%TYPE
11719         , p_attr_group_type                 IN  EGO_ITM_USR_ATTR_INTRFC.ATTR_GROUP_TYPE%TYPE
11720         , p_attr_group_name                 IN  EGO_ITM_USR_ATTR_INTRFC.ATTR_GROUP_INT_NAME%TYPE
11721         , p_attr_name                       IN  EGO_ITM_USR_ATTR_INTRFC.ATTR_INT_NAME%TYPE
11722         , p_do_processed_rows_flag          IN  FLAG                                DEFAULT FND_API.G_FALSE
11723         ,   p_request_id                    IN  EGO_ITM_USR_ATTR_INTRFC.REQUEST_ID%TYPE                 DEFAULT NULL
11724         )
11725     RETURN EGO_ITM_USR_ATTR_INTRFC.ATTR_VALUE_DATE%TYPE IS
11726     BEGIN
11727         RETURN GET_REV_USR_ATTR_DATE
11728         (
11729           p_batch_id                        => p_batch_id
11730         , p_inventory_item_id               => p_inventory_item_id
11731         , p_item_number                     => p_item_number
11732         , p_organization_id                 => p_organization_id
11733         , p_revision_code                   => p_revision_code
11734         , p_attr_group_type                 => p_attr_group_type
11735         , p_attr_group_name                 => p_attr_group_name
11736         , p_attr_name                       => p_attr_name
11737         , p_do_processed_rows_flag          => p_do_processed_rows_flag
11738         , p_request_id                      => p_request_id
11739         , p_use_pdh_keys_to_join            => true
11740         , p_get_value_column                => true
11741         );
11742     END GET_REV_USR_ATTR_PDH_VDATE;
11743 
11744     --------------------------------------------------------------------------------------------
11745     --  Function GET_REV_USR_ATTR_NUM
11746     --  Returns the number value of the specified revision attribute, if the attribute is present
11747     --  in the interface table.
11748     --      p_output_uom_code parameter is ignored (no uom conversions performed)
11749     --------------------------------------------------------------------------------------------
11750     FUNCTION GET_REV_USR_ATTR_SS_VNUM
11751         (
11752           p_batch_id                        IN  EGO_ITM_USR_ATTR_INTRFC.DATA_SET_ID%TYPE
11753         , p_source_system_id                IN  EGO_ITM_USR_ATTR_INTRFC.SOURCE_SYSTEM_ID%TYPE
11754         , p_source_system_reference         IN  EGO_ITM_USR_ATTR_INTRFC.SOURCE_SYSTEM_REFERENCE%TYPE
11755         , p_organization_id                 IN  EGO_ITM_USR_ATTR_INTRFC.ORGANIZATION_ID%TYPE
11756         , p_revision_code                   IN  EGO_ITM_USR_ATTR_INTRFC.REVISION%TYPE
11757         , p_attr_group_type                 IN  EGO_ITM_USR_ATTR_INTRFC.ATTR_GROUP_TYPE%TYPE
11758         , p_attr_group_name                 IN  EGO_ITM_USR_ATTR_INTRFC.ATTR_GROUP_INT_NAME%TYPE
11759         , p_attr_name                       IN  EGO_ITM_USR_ATTR_INTRFC.ATTR_INT_NAME%TYPE
11760         , p_output_uom_code                 IN  EGO_ITM_USR_ATTR_INTRFC.ATTR_VALUE_UOM%TYPE
11761         , p_do_processed_rows_flag          IN  FLAG                                DEFAULT FND_API.G_FALSE
11762         , p_request_id                      IN  EGO_ITM_USR_ATTR_INTRFC.REQUEST_ID%TYPE DEFAULT NULL
11763         )
11764     RETURN EGO_ITM_USR_ATTR_INTRFC.ATTR_VALUE_NUM%TYPE IS
11765     BEGIN
11766         RETURN GET_REV_USR_ATTR_NUM
11767         (
11768           p_batch_id                        => p_batch_id
11769         , p_source_system_id                => p_source_system_id
11770         , p_source_system_reference         => p_source_system_reference
11771         , p_organization_id                 => p_organization_id
11772         , p_revision_code                   => p_revision_code
11773         , p_attr_group_type                 => p_attr_group_type
11774         , p_attr_group_name                 => p_attr_group_name
11775         , p_attr_name                       => p_attr_name
11776         , p_do_processed_rows_flag          => p_do_processed_rows_flag
11777         , p_request_id                      => p_request_id
11778         , p_use_pdh_keys_to_join            => false
11779         , p_get_value_column                => true
11780         , p_output_uom_code                 => NULL
11781         );
11782     END GET_REV_USR_ATTR_SS_VNUM;
11783 
11784     FUNCTION GET_REV_USR_ATTR_PDH_VNUM
11785         (
11786           p_batch_id                        IN  EGO_ITM_USR_ATTR_INTRFC.DATA_SET_ID%TYPE
11787         , p_inventory_item_id               IN  EGO_ITM_USR_ATTR_INTRFC.INVENTORY_ITEM_ID%TYPE
11788         , p_item_number                     IN  EGO_ITM_USR_ATTR_INTRFC.ITEM_NUMBER%TYPE
11789         , p_organization_id                 IN  EGO_ITM_USR_ATTR_INTRFC.ORGANIZATION_ID%TYPE
11790         , p_revision_code                   IN  EGO_ITM_USR_ATTR_INTRFC.REVISION%TYPE
11791         , p_attr_group_type                 IN  EGO_ITM_USR_ATTR_INTRFC.ATTR_GROUP_TYPE%TYPE
11792         , p_attr_group_name                 IN  EGO_ITM_USR_ATTR_INTRFC.ATTR_GROUP_INT_NAME%TYPE
11793         , p_attr_name                       IN  EGO_ITM_USR_ATTR_INTRFC.ATTR_INT_NAME%TYPE
11794         , p_output_uom_code                 IN  EGO_ITM_USR_ATTR_INTRFC.ATTR_VALUE_UOM%TYPE
11795         , p_do_processed_rows_flag          IN  FLAG                                DEFAULT FND_API.G_FALSE
11796         , p_request_id                      IN  EGO_ITM_USR_ATTR_INTRFC.REQUEST_ID%TYPE DEFAULT NULL
11797         )
11798     RETURN EGO_ITM_USR_ATTR_INTRFC.ATTR_VALUE_NUM%TYPE IS
11799     BEGIN
11800         RETURN GET_REV_USR_ATTR_NUM
11801         (
11802           p_batch_id                        => p_batch_id
11803         , p_inventory_item_id               => p_inventory_item_id
11804         , p_item_number                     => p_item_number
11805         , p_organization_id                 => p_organization_id
11806         , p_revision_code                   => p_revision_code
11807         , p_attr_group_type                 => p_attr_group_type
11808         , p_attr_group_name                 => p_attr_group_name
11809         , p_attr_name                       => p_attr_name
11810         , p_do_processed_rows_flag          => p_do_processed_rows_flag
11811         , p_request_id                      => p_request_id
11812         , p_use_pdh_keys_to_join            => true
11813         , p_get_value_column                => true
11814         , p_output_uom_code                 => NULL
11815         );
11816     END GET_REV_USR_ATTR_PDH_VNUM;
11817 
11818  FUNCTION Get_PDH_Source_System_Id RETURN NUMBER AS
11819  BEGIN
11820    RETURN G_PDH_SOURCE_SYSTEM_ID;
11821  END;
11822 
11823  -----------------------------------------------------------------------------------------
11824  -- Get_Tokens                                                                          --
11825  -- Takes a string and breaks it into tokens, returning them in another space-delimited --
11826  -- string; the tokens are determined according to the attributes/preferences of the    --
11827  -- intermedia text index on items, using its stoplist, lexer, etc.                     --
11828  -----------------------------------------------------------------------------------------
11829  PROCEDURE GET_TOKENS
11830  (
11831    p_string_val         IN        VARCHAR2
11832   ,x_tokens             OUT       NOCOPY VARCHAR2
11833  ) IS
11834 
11835    l_schema_name        VARCHAR2(30);
11836    l_policy_name        CONSTANT  VARCHAR2(30)    :=  'EGO_ITEM_TEXT_TL_POL1';
11837 
11838    l_token_table        CTX_DOC.token_tab;
11839 
11840  BEGIN
11841 
11842    -- initialization
11843    x_tokens := '';
11844    l_schema_name := EGO_COMMON_PVT.Get_Prod_Schema('EGO');
11845 
11846    -- retrieve tokens in a table
11847    CTX_DOC.Policy_Tokens(l_schema_name || '.' || l_policy_name
11848                         ,p_string_val
11849                         ,l_token_table
11850                         ,userenv('lang')  -- look into how to process other languages
11851                         ,NULL
11852                         ,NULL
11853    );
11854 
11855    -- for each token, put operators and join with the specified conjunction
11856    FOR i IN 1..l_token_table.count LOOP
11857 
11858      -- reset the clause
11859      x_tokens := x_tokens || ' ' || l_token_table(i).token;
11860 
11861    END LOOP;
11862 
11863  END GET_TOKENS;
11864 
11865  ------------------------------------------------------------------------------------------
11866  -- Convert_Org_And_Cat_Grp                                                              --
11867  -- This procedure converts a specified interface table row's organization code to an ID --
11868  -- and converts the item catalog category name to its corresponding ID; these           --
11869  -- conversions only occur if the org code/category name exactly match an existing name  --
11870  -- in PDH.                                                                              --
11871  ------------------------------------------------------------------------------------------
11872  PROCEDURE CONVERT_ORG_AND_CAT_GRP
11873  (
11874    p_batch_id           IN        NUMBER
11875   ,p_src_system_id      IN        NUMBER
11876   ,p_src_system_ref     IN        VARCHAR2
11877   ,p_commit             IN        BOOLEAN
11878  ) IS
11879 
11880    l_org_id             NUMBER;
11881    l_org_code           VARCHAR2(3);
11882 
11883    l_catalog_grp_id     NUMBER;
11884    l_catalog_grp_name   VARCHAR2(820);
11885 
11886    l_update_flag        BOOLEAN;
11887 
11888  BEGIN
11889 
11890    IF (p_batch_id IS NOT NULL AND p_src_system_id IS NOT NULL AND p_src_system_ref IS NOT NULL) THEN
11891 
11892      --------------------------------
11893      -- MTL_SYSTEM_ITEMS_INTERFACE --
11894      --------------------------------
11895      UPDATE MTL_SYSTEM_ITEMS_INTERFACE MSII
11896         SET ORGANIZATION_ID =
11897              NVL(ORGANIZATION_ID,
11898                  (SELECT MP.ORGANIZATION_ID
11899                     FROM MTL_PARAMETERS MP
11900                    WHERE MP.ORGANIZATION_CODE = MSII.ORGANIZATION_CODE))
11901            ,ITEM_CATALOG_GROUP_ID =
11902              NVL(ITEM_CATALOG_GROUP_ID,
11903                  (SELECT MICG.ITEM_CATALOG_GROUP_ID
11904                     FROM MTL_ITEM_CATALOG_GROUPS_B_KFV MICG
11905                    WHERE MICG.CONCATENATED_SEGMENTS = MSII.ITEM_CATALOG_GROUP_NAME))
11906       WHERE SET_PROCESS_ID = p_batch_id
11907         AND SOURCE_SYSTEM_ID = p_src_system_id
11908         AND SOURCE_SYSTEM_REFERENCE = p_src_system_ref
11909         AND PROCESS_FLAG = 0;
11910 
11911      ------------------
11912      -- EGO_AML_INTF --
11913      ------------------
11914      UPDATE EGO_AML_INTF EAI
11915         SET ORGANIZATION_ID =
11916              NVL(ORGANIZATION_ID,
11917                  (SELECT MP.ORGANIZATION_ID
11918                     FROM MTL_PARAMETERS MP
11919                    WHERE MP.ORGANIZATION_CODE = EAI.ORGANIZATION_CODE))
11920       WHERE DATA_SET_ID = p_batch_id
11921         AND SOURCE_SYSTEM_ID = p_src_system_id
11922         AND SOURCE_SYSTEM_REFERENCE = p_src_system_ref
11923         AND PROCESS_FLAG = 0;
11924 
11925      -----------------------------
11926      -- EGO_ITM_USR_ATTR_INTRFC --
11927      -----------------------------
11928      UPDATE EGO_ITM_USR_ATTR_INTRFC EIUAI
11929         SET ORGANIZATION_ID =
11930              NVL(ORGANIZATION_ID,
11931                  (SELECT MP.ORGANIZATION_ID
11932                     FROM MTL_PARAMETERS MP
11933                    WHERE MP.ORGANIZATION_CODE = EIUAI.ORGANIZATION_CODE))
11934       WHERE DATA_SET_ID = p_batch_id
11935         AND SOURCE_SYSTEM_ID = p_src_system_id
11936         AND SOURCE_SYSTEM_REFERENCE = p_src_system_ref
11937         AND PROCESS_STATUS = 0;
11938 
11939      IF (p_commit) THEN
11940        COMMIT WORK;
11941      END IF;
11942 
11943    END IF; -- if all parameters are not null
11944 
11945  END CONVERT_ORG_AND_CAT_GRP;
11946 
11947 
11948  ------------------------------------------------------------------------------------------
11949  -- Convert_Org_Cat_Grp_For_Batch                                                        --
11950  -- This is a wrapper procedure for the previous conversion procedure; this one accepts  --
11951  -- a batch ID and converts all unprocessed rows belonging to that batch.                --
11952  ------------------------------------------------------------------------------------------
11953  PROCEDURE CONVERT_ORG_CAT_GRP_FOR_BATCH
11954  (
11955    p_batch_id           IN        NUMBER
11956   ,p_commit             IN        BOOLEAN
11957  ) IS
11958 
11959    CURSOR c_batch_pks IS
11960      SELECT MSII.SOURCE_SYSTEM_ID SOURCE_SYSTEM_ID
11961            ,MSII.SOURCE_SYSTEM_REFERENCE SOURCE_SYSTEM_REFERENCE
11962        FROM MTL_SYSTEM_ITEMS_INTERFACE MSII
11963       WHERE MSII.SET_PROCESS_ID = p_batch_id
11964         AND MSII.PROCESS_FLAG = 0
11965         AND MSII.CONFIRM_STATUS IN ('US', 'UM', 'UN');
11966 
11967  BEGIN
11968 
11969    FOR v_pks IN c_batch_pks
11970    LOOP
11971 
11972      CONVERT_ORG_AND_CAT_GRP(p_batch_id, v_pks.SOURCE_SYSTEM_ID, v_pks.SOURCE_SYSTEM_REFERENCE, p_commit);
11973 
11974    END LOOP;
11975 
11976  END CONVERT_ORG_CAT_GRP_FOR_BATCH;
11977 
11978 
11979  ------------------------------------------------------------------------------------------
11980  -- Confirm_Matches                                                                      --
11981  -- This procedure takes care of setting the confirm status for a particular match in    --
11982  -- the item match table, depending on how many matches were found for a row in the      --
11983  -- interface table.                                                                     --
11984  ------------------------------------------------------------------------------------------
11985  PROCEDURE CONFIRM_MATCHES
11986  (
11987    p_batch_id           IN        NUMBER
11988   ,p_src_system_id      IN        NUMBER
11989   ,p_src_system_ref     IN        VARCHAR2
11990   ,p_match_count        IN        NUMBER
11991   ,p_inventory_item_id  IN        NUMBER
11992   ,p_organization_id    IN        NUMBER
11993  ) IS
11994 
11995    l_confirm_single_match         VARCHAR2(1);
11996 
11997  BEGIN
11998 
11999    IF (p_match_count < 1) THEN
12000 
12001      EGO_IMPORT_PVT.Set_Confirm_Status(p_batch_id
12002                                       ,p_src_system_id
12003                                       ,p_src_system_ref
12004                                       ,EGO_IMPORT_PVT.G_UNCONF_NONE_MATCH);
12005 
12006    ELSIF (p_match_count > 1) THEN
12007 
12008      EGO_IMPORT_PVT.Set_Confirm_Status(p_batch_id
12009                                       ,p_src_system_id
12010                                       ,p_src_system_ref
12011                                       ,EGO_IMPORT_PVT.G_UNCONF_MULT_MATCH);
12012 
12013    ELSE
12014 
12015      SELECT CONFIRM_SINGLE_MATCH
12016        INTO l_confirm_single_match
12017        FROM EGO_IMPORT_BATCH_DETAILS_V
12018       WHERE BATCH_ID = p_batch_id;
12019 
12020      IF (l_confirm_single_match = 'Y') THEN
12021 
12022        EGO_IMPORT_PVT.Set_Confirm_Status(p_batch_id
12023                                         ,p_src_system_id
12024                                         ,p_src_system_ref
12025                                         ,EGO_IMPORT_PVT.G_CONF_MATCH
12026                                         ,p_inventory_item_id
12027                                         ,p_organization_id);
12028 
12029      ELSE
12030 
12031        EGO_IMPORT_PVT.Set_Confirm_Status(p_batch_id
12032                                         ,p_src_system_id
12033                                         ,p_src_system_ref
12034                                         ,EGO_IMPORT_PVT.G_UNCONF_SIGL_MATCH
12035                                         ,p_inventory_item_id
12036                                         ,p_organization_id);
12037 
12038      END IF;
12039 
12040    END IF;
12041 
12042  END CONFIRM_MATCHES;
12043 
12044  ------------------------------------------------------------------------------------------
12045  -- Get_Latest_Revision_Func                                                             --
12046  -- This function returns the latest revision available for a particular spoke item.     --
12047  -- The function first checks for a revision in the item revision interface table, then  --
12048  -- MSI interface, and finally, the user-defined attributes interface table.             --
12049  ------------------------------------------------------------------------------------------
12050  FUNCTION GET_LATEST_REVISION_FUNC
12051  (
12052    p_batch_id                        IN          EGO_ITM_USR_ATTR_INTRFC.DATA_SET_ID%TYPE
12053  , p_source_system_id                IN          EGO_ITM_USR_ATTR_INTRFC.SOURCE_SYSTEM_ID%TYPE
12054  , p_source_system_reference         IN          EGO_ITM_USR_ATTR_INTRFC.SOURCE_SYSTEM_REFERENCE%TYPE
12055  , p_organization_id                 IN          EGO_ITM_USR_ATTR_INTRFC.ORGANIZATION_ID%TYPE
12056  )
12057  RETURN VARCHAR2
12058  IS
12059 
12060     l_revision_code                   VARCHAR2(3);
12061 
12062 
12063  BEGIN
12064 
12065    -- attempt to get the latest revision from the revision interface table
12066    -- according to latest effectivity date; in the case of equal effectivity
12067    -- dates, return that with the "greatest" revision code (ASCII sort order)
12068    l_revision_code := GET_LATEST_MIRI_REV_SS( p_batch_id, p_source_system_id, p_source_system_reference, p_organization_id, FND_API.G_FALSE );
12069 
12070    -- if the revision still could not be obtained, then obtain it from the
12071    -- user attrs interface table (ASCII sort order)
12072    IF (l_revision_code IS NULL) THEN
12073      l_revision_code := GET_LATEST_EIUAI_REV_SS( p_batch_id, p_source_system_id, p_source_system_reference, p_organization_id, FND_API.G_FALSE );
12074    END IF;
12075 
12076    RETURN l_revision_code;
12077  END GET_LATEST_REVISION_FUNC;
12078 
12079     /**
12080      * For every unprocessed master record in a batch which has transaction_type value of 'UPDATE' or 'SYNC'
12081      * if it has no inventory_item_id
12082      *    if it has an item number, parse it into segments.
12083      *    determine if an item exists with these segments in MSI and if true, populate inventory_item_id
12084      * else it has inventory_item_id
12085      *    determine if an item exists with this inventory_item_id in MSI
12086      *
12087      * if the current transaction_type is 'SYNC'
12088      *    change it to 'UPDATE' if there is a way to resolve it to an existing item.
12089      *    change it to 'CREATE' if there is no way to resolve it to an existing item
12090      */
12091     PROCEDURE UPDATE_ITEM_SYNC_RECORDS
12092     (p_set_id  IN  NUMBER
12093      ,p_org_id IN NUMBER
12094     ) IS
12095       CURSOR c_items_table IS
12096         SELECT rowid
12097               ,organization_id
12098               ,inventory_item_id
12099               ,item_number
12100               ,transaction_id
12101               ,transaction_type
12102         FROM   mtl_system_items_interface
12103         WHERE  set_process_id   = p_set_id
12104           AND    process_flag     = 0
12105           AND organization_id = p_org_id
12106           AND (     confirm_status IS NULL
12107               OR    confirm_status = G_FAKE_CONF_STATUS_FLAG ) -- for bug 5136989
12108           AND UPPER(transaction_type) in ('SYNC', 'UPDATE')
12109           FOR UPDATE OF transaction_type;
12110 
12111       CURSOR c_item_exists(cp_item_id NUMBER) IS
12112         SELECT  1
12113         FROM   mtl_system_items_b
12114         WHERE  inventory_item_id = cp_item_id;
12115 
12116       l_item_exist NUMBER(10) := 0;
12117       l_err_text   VARCHAR2(200);
12118       l_status      NUMBER(10):= 0;
12119       l_item_id    mtl_system_items_b.inventory_item_id%TYPE;
12120 
12121    BEGIN
12122 
12123       FOR item_record IN c_items_table LOOP
12124          l_item_exist :=0;
12125          l_item_id    := NULL;
12126 
12127          IF item_record.inventory_item_id IS NULL THEN
12128             IF item_record.item_number IS NOT NULL THEN
12129                l_status  := INVPUOPI.MTL_PR_PARSE_ITEM_NUMBER(
12130                                ITEM_NUMBER =>item_record.item_number
12131                   ,ITEM_ID     =>item_record.inventory_item_id
12132                   ,TRANS_ID    =>item_record.transaction_id
12133                   ,ORG_ID      =>item_record.organization_id
12134                   ,ERR_TEXT    =>l_err_text
12135                   ,P_ROWID     =>item_record.rowid);
12136             END IF;
12137             l_item_exist := INVUPD1B.EXISTS_IN_MSI(
12138                     ROW_ID      => item_record.rowid
12139                    ,ORG_ID      => item_record.organization_id
12140                    ,INV_ITEM_ID => l_item_id
12141                    ,TRANS_ID    => item_record.transaction_id
12142                    ,ERR_TEXT    => l_err_text
12143                    ,XSET_ID     => p_set_id);
12144          ELSE
12145             l_item_id := item_record.inventory_item_id;
12146             OPEN  c_item_exists(item_record.inventory_item_id);
12147             FETCH c_item_exists INTO l_item_exist;
12148             CLOSE c_item_exists;
12149             l_item_exist := NVL(l_item_exist,0);
12150          END IF;
12151 
12152          IF upper(item_record.transaction_type) = 'SYNC' THEN
12153             IF l_item_exist = 1 THEN
12154                UPDATE mtl_system_items_interface
12155                SET    transaction_type  = 'UPDATE'
12156                WHERE  rowid = item_record.rowid;
12157             ELSE
12158                IF item_record.item_number IS NOT NULL THEN
12159                   UPDATE mtl_system_items_interface
12160                   SET    transaction_type = 'CREATE', inventory_item_id = NULL
12161                   WHERE  rowid = item_record.rowid;
12162                ELSE
12163                   UPDATE mtl_system_items_interface
12164                   SET    transaction_type = 'UPDATE', inventory_item_id = NULL
12165                   WHERE  rowid = item_record.rowid;
12166                END IF;
12167             END IF;
12168          END IF;
12169       END LOOP;
12170    END UPDATE_ITEM_SYNC_RECORDS;
12171 
12172 
12173    PROCEDURE SET_CONFIRM_STATUS
12174     (p_batch_id                IN  MTL_SYSTEM_ITEMS_INTERFACE.SET_PROCESS_ID%TYPE
12175     ,p_source_system_id        IN  MTL_SYSTEM_ITEMS_INTERFACE.SOURCE_SYSTEM_ID%TYPE
12176     ,p_source_system_reference IN  MTL_SYSTEM_ITEMS_INTERFACE.SOURCE_SYSTEM_REFERENCE%TYPE
12177     ,p_new_status              IN  MTL_SYSTEM_ITEMS_INTERFACE.CONFIRM_STATUS%TYPE
12178     ,p_inventory_item_id       IN  MTL_SYSTEM_ITEMS_INTERFACE.INVENTORY_ITEM_ID%TYPE DEFAULT NULL
12179     ,p_organization_id         IN  MTL_SYSTEM_ITEMS_INTERFACE.ORGANIZATION_ID%TYPE DEFAULT NULL
12180     ,p_check_matching_table    IN  FLAG  DEFAULT FND_API.G_FALSE
12181     ,errmsg                    OUT NOCOPY VARCHAR2
12182     ,retcode                   OUT NOCOPY VARCHAR2
12183     ) IS
12184     CURSOR cur_old_status IS
12185      SELECT CONFIRM_STATUS
12186      FROM MTL_SYSTEM_ITEMS_INTERFACE MSII, EGO_IMPORT_BATCHES_B BA
12187      WHERE MSII.SET_PROCESS_ID = p_batch_id
12188         AND MSII.SOURCE_SYSTEM_ID = p_source_system_id
12189         AND MSII.SOURCE_SYSTEM_REFERENCE = p_source_system_reference
12190         AND MSII.ORGANIZATION_ID = BA.ORGANIZATION_ID
12191         AND BA.BATCH_ID = p_batch_id
12192         AND NVL(MSII.PROCESS_FLAG, 0) < 1
12193         AND ROWNUM < 2;
12194 
12195     l_old_status  MTL_SYSTEM_ITEMS_INTERFACE.CONFIRM_STATUS%TYPE;
12196     l_need_resolve_unconf_status FLAG := p_check_matching_table;
12197     l_resolved_status  MTL_SYSTEM_ITEMS_INTERFACE.CONFIRM_STATUS%TYPE := p_new_status;
12198     l_item_in_matching_table NUMBER;
12199     BEGIN
12200        OPEN cur_old_status;
12201        FETCH cur_old_status INTO l_old_status;
12202        CLOSE cur_old_status;
12203 
12204        IF l_old_status IS NOT NULL AND l_old_status NOT IN (G_CONF_MATCH,G_CONF_XREF,G_CONF_NEW, G_UNCONF_NONE_MATCH,
12205                                                             G_UNCONF_SIGL_MATCH,G_UNCONF_MULT_MATCH,G_EXCLUDED) THEN
12206           errmsg := 'Invalid old status';
12207           retcode := 'F';
12208           RETURN;
12209        END IF;
12210 
12211        IF p_new_status NOT IN (G_CONF_MATCH,G_CONF_NEW, G_UNCONF_NONE_MATCH,
12212                                G_UNCONF_SIGL_MATCH,G_UNCONF_MULT_MATCH,G_EXCLUDED,
12213                                G_UNCONF_ACTION, G_UNEXCLUDE_ACTION) THEN
12214           errmsg := 'Invalid new status or action';
12215           retcode := 'F';
12216           RETURN;
12217        END IF;
12218 
12219        IF (l_old_status = G_UNCONF_NONE_MATCH AND p_new_status = G_CONF_MATCH) OR
12220           (l_old_status = G_CONF_XREF AND p_new_status = G_UNCONF_SIGL_MATCH) OR
12221           (l_old_status = G_CONF_XREF AND p_new_status = G_UNCONF_MULT_MATCH) OR
12222           (l_old_status = G_CONF_XREF AND p_new_status = G_CONF_MATCH) OR
12223           (l_old_status = G_CONF_MATCH AND p_new_status = G_UNCONF_NONE_MATCH) OR
12224           (l_old_status = G_CONF_MATCH AND p_new_status = G_CONF_MATCH) OR
12225           (l_old_status = G_CONF_NEW AND p_new_status = G_CONF_MATCH) OR
12226           (l_old_status = G_CONF_NEW AND p_new_status = G_CONF_NEW) OR
12227           (l_old_status = G_EXCLUDED AND p_new_status = G_CONF_MATCH) OR
12228           (l_old_status = G_EXCLUDED AND p_new_status = G_CONF_NEW) OR
12229           (l_old_status = G_EXCLUDED AND p_new_status = G_EXCLUDED) THEN
12230           errmsg := 'Invalid status transition from ' || l_old_status || ' to ' || p_new_status || '.';
12231           retcode := 'F';
12232           RETURN;
12233        END IF;
12234 
12235        IF l_old_status NOT IN (G_CONF_MATCH,G_CONF_XREF,G_CONF_NEW) AND p_new_status = G_UNCONF_ACTION THEN
12236           errmsg := 'Invalid action: cannot unconfirm an item that is not confirmed.';
12237           retcode := 'F';
12238           RETURN;
12239        END IF;
12240 
12241        IF l_old_status <> G_EXCLUDED AND p_new_status = G_UNEXCLUDE_ACTION THEN
12242           errmsg := 'Invalid action: cannot unexclude an item that is not excluded';
12243           retcode := 'F';
12244           RETURN;
12245        END IF;
12246 
12247        IF p_new_status = G_CONF_MATCH AND (p_inventory_item_id IS NULL OR p_organization_id IS NULL) THEN
12248           errmsg := 'Insufficient parameters: need PDH item id and org id';
12249           retcode := 'F';
12250           RETURN;
12251        END IF;
12252 
12253        IF p_new_status <> G_CONF_MATCH AND p_inventory_item_id IS NOT NULL THEN
12254           errmsg := 'Invalid parameters: p_inventory_item_id must be null if item is not confirmed as matched';
12255           retcode := 'F';
12256           RETURN;
12257        END IF;
12258 
12259        IF p_new_status = G_CONF_MATCH THEN
12260           BEGIN
12261              SELECT 1 INTO l_item_in_matching_table
12262              FROM EGO_ITEM_MATCHES
12263              WHERE BATCH_ID = p_batch_id
12264                 AND SOURCE_SYSTEM_ID = p_source_system_id
12265                 AND SOURCE_SYSTEM_REFERENCE = p_source_system_reference
12266                 AND INVENTORY_ITEM_ID = p_inventory_item_id
12267                 AND ORGANIZATION_ID = p_organization_id;
12268           EXCEPTION WHEN NO_DATA_FOUND THEN
12269             errmsg := 'Invalid parameters: need to pick a PDH item that is matched';
12270             retcode := 'F';
12271             RETURN;
12272           END;
12273        END IF;
12274 
12275        IF p_new_status IN (G_CONF_MATCH, G_CONF_NEW, G_EXCLUDED) AND
12276           p_check_matching_table = FND_API.G_TRUE THEN
12277           errmsg := 'Invalid parameters: cannot check matching table when setting confirm_status to ' || p_new_status;
12278           retcode := 'F';
12279           RETURN;
12280        END IF;
12281 
12282        IF p_new_status IN (G_UNCONF_ACTION, G_UNEXCLUDE_ACTION) THEN
12283           l_need_resolve_unconf_status := FND_API.G_TRUE;
12284        END IF;
12285 
12286        IF l_need_resolve_unconf_status = FND_API.G_TRUE THEN
12287           SELECT decode(count(1), 0, G_UNCONF_NONE_MATCH, 1, G_UNCONF_SIGL_MATCH, G_UNCONF_MULT_match)
12288             INTO l_resolved_status
12289           FROM EGO_ITEM_MATCHES
12290           WHERE BATCH_ID = p_batch_id
12291              AND SOURCE_SYSTEM_ID = p_source_system_id
12292              AND SOURCE_SYSTEM_REFERENCE = p_source_system_reference;
12293        END IF;
12294 
12295        UPDATE MTL_SYSTEM_ITEMS_INTERFACE
12296        SET CONFIRM_STATUS = l_resolved_status, INVENTORY_ITEM_ID = p_inventory_item_id
12297        WHERE SET_PROCESS_ID = p_batch_id
12298           AND SOURCE_SYSTEM_ID = p_source_system_id
12299           AND SOURCE_SYSTEM_REFERENCE = p_source_system_reference
12300           AND ORGANIZATION_ID = (SELECT ORGANIZATION_id FROM EGO_IMPORT_BATCHES_B WHERE BATCH_ID = p_batch_id)
12301           AND NVL(PROCESS_FLAG, 0) < 1;
12302 
12303        IF l_old_status = G_EXCLUDED THEN
12304           DELETE FROM EGO_IMPORT_EXCLUDED_SS_ITEMS
12305           WHERE SOURCE_SYSTEM_ID = p_source_system_id
12306              AND SOURCE_SYSTEM_REFERENCE = p_source_system_reference;
12307        END IF;
12308 
12309        IF p_new_status = G_EXCLUDED THEN
12310           MERGE INTO EGO_IMPORT_EXCLUDED_SS_ITEMS
12311           USING dual
12312           ON (SOURCE_SYSTEM_ID = p_source_system_id AND SOURCE_SYSTEM_REFERENCE = p_source_system_reference)
12313           WHEN matched THEN
12314             UPDATE SET LAST_UPDATED_BY = FND_GLOBAL.USER_ID, LAST_UPDATE_DATE = SYSDATE,
12315                        LAST_UPDATE_LOGIN = FND_GLOBAL.LOGIN_ID, OBJECT_VERSION_NUMBER = OBJECT_VERSION_NUMBER + 1
12316           WHEN NOT matched THEN
12317             INSERT VALUES (p_source_system_id, p_source_system_reference, 1, FND_GLOBAL.USER_ID, SYSDATE, FND_GLOBAL.USER_ID, SYSDATE, FND_GLOBAL.LOGIN_ID);
12318        END IF;
12319 
12320        errmsg := NULL;
12321        retcode := 'S';
12322     END SET_CONFIRM_STATUS;
12323 
12324   ------------------------------------------------------------------
12325   -- Function for returning the change order flag for the batch
12326   -- Bug#4631349 (RSOUNDAR)
12327   ------------------------------------------------------------------
12328   FUNCTION getAddAllToChangeFlag (p_batch_id  IN  NUMBER)
12329   RETURN VARCHAR2 IS
12330 
12331   l_add_all_change_flag VARCHAR2(1);
12332 
12333   BEGIN
12334     SELECT NVL(ADD_ALL_TO_CHANGE_FLAG,'N')
12335     INTO l_add_all_change_flag
12336     FROM EGO_IMPORT_OPTION_SETS
12337     WHERE BATCH_ID = p_batch_id;
12338     RETURN l_add_all_change_flag;
12339   EXCEPTION
12340     WHEN OTHERS THEN
12341       RETURN 'N';
12342 
12343   END  getAddAllToChangeFlag;
12344 
12345   FUNCTION Get_Lookup_Meaning(p_lookup_type IN VARCHAR2, p_lookup_code IN VARCHAR2)
12346   RETURN VARCHAR2 IS
12347     l_meaning VARCHAR2(1000);
12348   BEGIN
12349     SELECT MEANING INTO l_meaning
12350     FROM FND_LOOKUPS
12351     WHERE LOOKUP_TYPE = p_lookup_type
12352       AND LOOKUP_CODE = p_lookup_code;
12353 
12354     RETURN l_meaning;
12355   EXCEPTION WHEN OTHERS THEN
12356     RETURN NULL;
12357   END Get_Lookup_Meaning;
12358 
12359   ------------------------------------------------------------------
12360   --Function for returning batch details before import
12361   --Bug.:4933193
12362   ------------------------------------------------------------------
12363   FUNCTION GET_IMPORT_DETAILS_DATA
12364                             (     p_set_process_id                NUMBER,
12365                                   p_organization_id               NUMBER ,
12366                                   p_organization_code             VARCHAR2
12367                             )
12368                             RETURN  SYSTEM.EGO_IMPORT_CNT_TABLE
12369   IS
12370   CURSOR cr_item  ( p_set_process_id NUMBER, p_organization_id NUMBER , p_organization_code VARCHAR2) IS
12371     SELECT
12372       COUNT(1) CNT ,
12373       COUNT(
12374         CASE
12375         WHEN PROCESS_FLAG = 7
12376         AND UPPER(TRANSACTION_TYPE)= 'CREATE'
12377         THEN 1
12378         ELSE NULL
12379         END
12380         ) AS NEW_CNT ,
12381       COUNT(
12382         CASE
12383         WHEN PROCESS_FLAG = 7
12384         AND UPPER(TRANSACTION_TYPE)= 'UPDATE'
12385         THEN 1
12386         ELSE NULL
12387         END
12388         ) UPDATE_CNT
12389     FROM MTL_SYSTEM_ITEMS_INTERFACE
12390     WHERE SET_PROCESS_ID = p_set_process_id
12391     AND ( (ORGANIZATION_ID is not null and ORGANIZATION_ID = p_organization_id )
12392         OR
12393         (ORGANIZATION_ID is null and ORGANIZATION_CODE = p_organization_code )
12394         );
12395 
12396 
12397   CURSOR cr_org_assign (p_set_process_id NUMBER, p_organization_id NUMBER) IS
12398     SELECT
12399       COUNT(1) CNT ,
12400       COUNT(
12401         CASE
12402         WHEN PROCESS_FLAG = 7
12403         AND UPPER(TRANSACTION_TYPE)= 'CREATE'
12404         THEN 1
12405         ELSE NULL
12406         END
12407         ) AS NEW_CNT ,
12408       COUNT(
12409         CASE
12410         WHEN PROCESS_FLAG = 7
12411         AND UPPER(TRANSACTION_TYPE)= 'UPDATE'
12412         THEN 1
12413         ELSE NULL
12414         END
12415         ) UPDATE_CNT
12416     FROM MTL_SYSTEM_ITEMS_INTERFACE msii
12417     WHERE SET_PROCESS_ID = p_set_process_id
12418     AND EXISTS
12419       (
12420       SELECT NULL
12421       FROM MTL_PARAMETERS mp
12422       WHERE mp.MASTER_ORGANIZATION_ID = p_organization_id
12423         AND mp.ORGANIZATION_ID <> mp.MASTER_ORGANIZATION_ID
12424         AND (  (msii.ORGANIZATION_ID IS NOT NULL AND mp.ORGANIZATION_ID = msii.ORGANIZATION_ID)
12425             OR
12426             (msii.ORGANIZATION_ID IS NULL AND mp.ORGANIZATION_CODE = msii.ORGANIZATION_CODE)
12427             )
12428       );
12429 
12430 
12431   CURSOR cr_revision (p_set_process_id NUMBER, p_organization_id NUMBER) IS
12432     SELECT
12433       COUNT(1) AS CNT ,
12434       COUNT(
12435         CASE
12436         WHEN PROCESS_FLAG = 7
12437         AND UPPER(TRANSACTION_TYPE)= 'CREATE'
12438         THEN 1
12439         ELSE NULL
12440         END
12441         ) AS NEW_CNT ,
12442       COUNT(
12443         CASE
12444         WHEN PROCESS_FLAG = 7
12445         AND UPPER(TRANSACTION_TYPE)= 'UPDATE'
12446         THEN 1
12447         ELSE NULL
12448         END
12449         ) UPDATE_CNT
12450     FROM  MTL_ITEM_REVISIONS_INTERFACE miri
12451     WHERE SET_PROCESS_ID = p_set_process_id
12452       AND EXISTS
12453         (
12454           SELECT NULL
12455           FROM MTL_PARAMETERS mp
12456           WHERE mp.MASTER_ORGANIZATION_ID = p_organization_id
12457           AND (  (miri.ORGANIZATION_ID IS NOT NULL AND mp.ORGANIZATION_ID = miri.ORGANIZATION_ID)
12458               OR
12459               (miri.ORGANIZATION_ID IS NULL AND mp.ORGANIZATION_CODE = miri.ORGANIZATION_CODE)
12460               )
12461         );
12462 
12463 
12464   CURSOR cr_structure (p_set_process_id NUMBER, p_organization_id NUMBER) IS
12465     SELECT
12466       COUNT(
12467         CASE
12468         WHEN UPPER(TRANSACTION_TYPE) <> 'NO_OP'
12469         THEN 1
12470         ELSE NULL
12471         END
12472         ) AS CNT ,
12473       COUNT(
12474         CASE
12475         WHEN PROCESS_FLAG = 7
12476         AND UPPER(TRANSACTION_TYPE)= 'CREATE'
12477         THEN 1
12478         ELSE NULL
12479         END
12480         ) AS NEW_CNT ,
12481       COUNT(
12482         CASE
12483         WHEN PROCESS_FLAG = 7
12484         AND UPPER(TRANSACTION_TYPE) IN ( 'UPDATE', 'DELETE' )
12485         THEN 1
12486         ELSE NULL
12487         END
12488         ) UPDATE_CNT
12489     FROM BOM_INVENTORY_COMPS_INTERFACE bici
12490     WHERE bici.BATCH_ID = p_set_process_id
12491       AND EXISTS
12492           (
12493               SELECT NULL
12494               FROM MTL_PARAMETERS mp
12495               WHERE mp.MASTER_ORGANIZATION_ID = p_organization_id
12496               AND (  (bici.ORGANIZATION_ID IS NOT NULL AND mp.ORGANIZATION_ID = bici.ORGANIZATION_ID)
12497                      OR
12498                      (bici.ORGANIZATION_ID IS NULL AND mp.ORGANIZATION_CODE = bici.ORGANIZATION_CODE)
12499                   )
12500           );
12501 
12502 
12503   CURSOR cr_people (p_set_process_id NUMBER, p_organization_id NUMBER) IS
12504     SELECT
12505       COUNT(1) AS CNT ,
12506       COUNT(
12507         CASE
12508         WHEN PROCESS_STATUS = 4
12509         AND UPPER(TRANSACTION_TYPE)= 'CREATE'
12510         THEN 1
12511         ELSE NULL
12512         END
12513         ) AS NEW_CNT ,
12514       COUNT(
12515         CASE
12516         WHEN PROCESS_STATUS = 4
12517         AND ( UPPER(TRANSACTION_TYPE) IN ('UPDATE', 'DELETE') )
12518         THEN 1
12519         ELSE NULL
12520         END
12521         ) UPDATE_CNT
12522     FROM EGO_ITEM_PEOPLE_INTF eipi
12523     WHERE eipi.DATA_SET_ID = p_set_process_id
12524       AND EXISTS
12525       (
12526         SELECT NULL
12527         FROM MTL_PARAMETERS mp
12528         WHERE mp.MASTER_ORGANIZATION_ID = p_organization_id
12529           AND (  (eipi.ORGANIZATION_ID IS NOT NULL AND mp.ORGANIZATION_ID = eipi.ORGANIZATION_ID)
12530               OR
12531               (eipi.ORGANIZATION_ID IS NULL AND mp.ORGANIZATION_CODE = eipi.ORGANIZATION_CODE)
12532         )
12533       ) ;
12534 
12535 
12536   CURSOR cr_category_assignment (p_set_process_id NUMBER, p_organization_id NUMBER) IS
12537     SELECT
12538       COUNT(1) AS CNT ,
12539       COUNT(
12540         CASE
12541         WHEN PROCESS_FLAG = 7
12542         AND UPPER(TRANSACTION_TYPE)= 'CREATE'
12543         THEN 1
12544         ELSE NULL
12545         END
12546         ) AS NEW_CNT ,
12547       COUNT(
12548         CASE
12549         WHEN PROCESS_FLAG = 7
12550         AND ( UPPER(TRANSACTION_TYPE) IN ( 'UPDATE','DELETE') )
12551         THEN 1
12552         ELSE NULL
12553         END
12554         ) UPDATE_CNT
12555     FROM MTL_ITEM_CATEGORIES_INTERFACE mici
12556     WHERE mici.SET_PROCESS_ID = p_set_process_id
12557       AND EXISTS
12558         (
12559           SELECT NULL
12560           FROM MTL_PARAMETERS mp
12561           WHERE mp.MASTER_ORGANIZATION_ID = p_organization_id
12562             AND (  (mici.ORGANIZATION_ID IS NOT NULL AND mp.ORGANIZATION_ID = mici.ORGANIZATION_ID)
12563                     OR
12564                    (mici.ORGANIZATION_ID IS NULL AND mp.ORGANIZATION_CODE = mici.ORGANIZATION_CODE)
12565                 )
12566         );
12567 
12568 
12569   CURSOR cr_aml (p_set_process_id NUMBER, p_organization_id NUMBER) IS
12570     SELECT
12571       COUNT(1) AS CNT ,
12572       COUNT(
12573         CASE
12574         WHEN PROCESS_FLAG = 7
12575         AND UPPER(TRANSACTION_TYPE)= 'CREATE'
12576         THEN 1
12577         ELSE NULL
12578         END
12579         ) AS NEW_CNT ,
12580       COUNT(
12581         CASE
12582         WHEN PROCESS_FLAG = 7
12583         AND UPPER(TRANSACTION_TYPE)= 'UPDATE'
12584         THEN 1
12585         ELSE NULL
12586         END
12587         ) UPDATE_CNT
12588     FROM EGO_AML_INTF eai
12589     WHERE eai.DATA_SET_ID = p_set_process_id
12590       AND EXISTS
12591         (
12592           SELECT NULL
12593           FROM MTL_PARAMETERS mp
12594           WHERE mp.MASTER_ORGANIZATION_ID = p_organization_id
12595             AND (  (eai.ORGANIZATION_ID IS NOT NULL AND mp.ORGANIZATION_ID = eai.ORGANIZATION_ID)
12596                 OR
12597                 (eai.ORGANIZATION_ID IS NULL AND mp.ORGANIZATION_CODE = eai.ORGANIZATION_CODE)
12598                 )
12599         );
12600 
12601 
12602   CURSOR cr_component_ops (p_set_process_id NUMBER, p_organization_id NUMBER) IS
12603     SELECT
12604       COUNT(1) AS CNT ,
12605       COUNT(
12606         CASE
12607         WHEN PROCESS_FLAG = 7
12608         AND UPPER(TRANSACTION_TYPE)= 'CREATE'
12609         THEN 1
12610         ELSE NULL
12611         END
12612         ) AS NEW_CNT ,
12613       COUNT(
12614         CASE
12615         WHEN PROCESS_FLAG = 7
12616         AND UPPER(TRANSACTION_TYPE)= 'UPDATE'
12617         THEN 1
12618         ELSE NULL
12619         END
12620         ) UPDATE_CNT
12621     FROM BOM_COMPONENT_OPS_INTERFACE bcoi
12622     WHERE bcoi.BATCH_ID = p_set_process_id
12623       AND EXISTS
12624       (
12625         SELECT NULL
12626         FROM MTL_PARAMETERS mp
12627         WHERE mp.MASTER_ORGANIZATION_ID = p_organization_id
12628           AND (  (bcoi.ORGANIZATION_ID IS NOT NULL AND mp.ORGANIZATION_ID = bcoi.ORGANIZATION_ID)
12629                  OR
12630                  (bcoi.ORGANIZATION_ID IS NULL AND mp.ORGANIZATION_CODE = bcoi.ORGANIZATION_CODE)
12631               )
12632       );
12633 
12634 
12635   CURSOR cr_ref_desgs (p_set_process_id NUMBER, p_organization_id NUMBER) IS
12636     SELECT
12637       COUNT(1) AS CNT ,
12638       COUNT(
12639         CASE
12640         WHEN PROCESS_FLAG = 7
12641         AND UPPER(TRANSACTION_TYPE)= 'CREATE'
12642         THEN 1
12643         ELSE NULL
12644         END
12645         ) AS NEW_CNT ,
12646       COUNT(
12647         CASE
12648         WHEN PROCESS_FLAG = 7
12649         AND UPPER(TRANSACTION_TYPE)= 'UPDATE'
12650         THEN 1
12651         ELSE NULL
12652         END
12653         ) UPDATE_CNT
12654     FROM BOM_REF_DESGS_INTERFACE brdi
12655     WHERE brdi.BATCH_ID = p_set_process_id
12656       AND EXISTS
12657       (
12658         SELECT NULL
12659         FROM MTL_PARAMETERS mp
12660         WHERE mp.MASTER_ORGANIZATION_ID = p_organization_id
12661           AND (  (brdi.ORGANIZATION_ID IS NOT NULL AND mp.ORGANIZATION_ID = brdi.ORGANIZATION_ID)
12662                  OR
12663                  (brdi.ORGANIZATION_ID IS NULL AND mp.ORGANIZATION_CODE = brdi.ORGANIZATION_CODE)
12664               )
12665       );
12666 
12667 
12668   CURSOR cr_sub_comps (p_set_process_id NUMBER, p_organization_id NUMBER) IS
12669     SELECT
12670       COUNT(1) AS CNT ,
12671       COUNT(
12672         CASE
12673         WHEN PROCESS_FLAG = 7
12674         AND UPPER(TRANSACTION_TYPE)= 'CREATE'
12675         THEN 1
12676         ELSE NULL
12677         END
12678         ) AS NEW_CNT ,
12679       COUNT(
12680         CASE
12681         WHEN PROCESS_FLAG = 7
12682         AND UPPER(TRANSACTION_TYPE)= 'UPDATE'
12683         THEN 1
12684         ELSE NULL
12685         END
12686         ) UPDATE_CNT
12687     FROM BOM_SUB_COMPS_INTERFACE bsci
12688     WHERE bsci.BATCH_ID = p_set_process_id
12689       AND EXISTS
12690       (
12691         SELECT NULL
12692         FROM MTL_PARAMETERS mp
12693         WHERE mp.MASTER_ORGANIZATION_ID = p_organization_id
12694           AND (  (bsci.ORGANIZATION_ID IS NOT NULL AND mp.ORGANIZATION_ID = bsci.ORGANIZATION_ID)
12695                  OR
12696                  (bsci.ORGANIZATION_ID IS NULL AND mp.ORGANIZATION_CODE = bsci.ORGANIZATION_CODE)
12697               )
12698       );
12699 
12700 
12701   CURSOR cr_bill_of_mtls (p_set_process_id NUMBER, p_organization_id NUMBER) IS
12702     SELECT
12703         COUNT(
12704         CASE
12705         WHEN UPPER(TRANSACTION_TYPE) <> 'NO_OP'
12706         THEN 1
12707         ELSE NULL
12708         END
12709         ) AS CNT ,
12710       COUNT(
12711         CASE
12712         WHEN PROCESS_FLAG = 7
12713         AND UPPER(TRANSACTION_TYPE)= 'CREATE'
12714         THEN 1
12715         ELSE NULL
12716         END
12717         ) AS NEW_CNT ,
12718       COUNT(
12719         CASE
12720         WHEN PROCESS_FLAG = 7
12721         AND UPPER(TRANSACTION_TYPE)= 'UPDATE'
12722         THEN 1
12723         ELSE NULL
12724         END
12725         ) UPDATE_CNT
12726     FROM BOM_BILL_OF_MTLS_INTERFACE bomi
12727     WHERE bomi.BATCH_ID = p_set_process_id
12728       AND EXISTS
12729       (
12730         SELECT NULL
12731         FROM MTL_PARAMETERS mp
12732         WHERE mp.MASTER_ORGANIZATION_ID = p_organization_id
12733           AND (  (bomi.ORGANIZATION_ID IS NOT NULL AND mp.ORGANIZATION_ID = bomi.ORGANIZATION_ID)
12734                  OR
12735                  (bomi.ORGANIZATION_ID IS NULL AND mp.ORGANIZATION_CODE = bomi.ORGANIZATION_CODE)
12736               )
12737       );
12738 
12739   CURSOR cr_item_sup (p_set_process_id NUMBER, p_organization_id NUMBER) IS
12740     SELECT
12741       edlb.DATA_LEVEL_NAME AS DATA_LEVEL_NAME,
12742       COUNT(1) AS CNT ,
12743       COUNT(
12744         CASE
12745         WHEN PROCESS_FLAG = 7
12746         AND UPPER(TRANSACTION_TYPE)= 'CREATE'
12747         THEN 1
12748         ELSE NULL
12749         END
12750         ) AS NEW_CNT ,
12751       COUNT(
12752         CASE
12753         WHEN PROCESS_FLAG = 7
12754         AND UPPER(TRANSACTION_TYPE)= 'UPDATE'
12755         THEN 1
12756         ELSE NULL
12757         END
12758         ) UPDATE_CNT
12759     FROM EGO_ITEM_ASSOCIATIONS_INTF eiai, EGO_DATA_LEVEL_B edlb
12760     WHERE eiai.BATCH_ID = p_set_process_id
12761       AND eiai.DATA_LEVEL_ID = edlb.DATA_LEVEL_ID
12762       AND EXISTS
12763         (
12764           SELECT NULL
12765           FROM MTL_PARAMETERS mp
12766           WHERE mp.MASTER_ORGANIZATION_ID = p_organization_id
12767             AND (  (eiai.ORGANIZATION_ID IS NOT NULL AND mp.ORGANIZATION_ID = eiai.ORGANIZATION_ID)
12768                 OR
12769                 (eiai.ORGANIZATION_ID IS NULL AND mp.ORGANIZATION_CODE = eiai.ORGANIZATION_CODE)
12770                 )
12771         )
12772     GROUP BY edlb.DATA_LEVEL_NAME;
12773 
12774 
12775   CURSOR cr_lookup  IS
12776     SELECT LOOKUP_CODE,
12777       MEANING,
12778       TAG
12779     FROM FND_LOOKUP_VALUES_VL
12780     WHERE LOOKUP_TYPE='EGO_PDH_ENTITY_TYPES'
12781       AND VIEW_APPLICATION_ID = 0
12782       AND SECURITY_GROUP_ID = fnd_global.lookup_security_group(LOOKUP_TYPE, VIEW_APPLICATION_ID);
12783 
12784 
12785   TYPE   TABLE_TAG_TYPE         IS TABLE OF VARCHAR2(150) INDEX BY VARCHAR2(30);
12786   TYPE   TABLE_MEANING_TYPE     IS TABLE OF VARCHAR2(80) INDEX BY VARCHAR2(30);
12787 
12788 
12789   l_row_type          SYSTEM.EGO_IMPORT_CNT_REC;
12790   l_return_table      SYSTEM.EGO_IMPORT_CNT_TABLE;
12791   l_tag               TABLE_TAG_TYPE;
12792   l_meaning           TABLE_MEANING_TYPE;
12793   l_import_xref_only  VARCHAR2(1);
12794 
12795   BEGIN
12796     l_return_table := SYSTEM.EGO_IMPORT_CNT_TABLE();
12797     l_row_type     := SYSTEM.EGO_IMPORT_CNT_REC('',0,0,0,0,0);
12798 
12799     -- Bug: 5262421, if IMPORT_XREF_ONLY is 'Y', then we will show 0 as after import count for AML
12800     BEGIN
12801       SELECT NVL(opt.IMPORT_XREF_ONLY, 'N') INTO l_import_xref_only
12802       FROM EGO_IMPORT_BATCHES_B b, EGO_IMPORT_OPTION_SETS opt
12803       WHERE b.BATCH_ID = p_set_process_id
12804         AND b.BATCH_ID = opt.BATCH_ID;
12805     EXCEPTION WHEN NO_DATA_FOUND THEN
12806       l_import_xref_only := 'N';
12807     END;
12808 
12809     FOR i IN cr_lookup
12810     LOOP
12811       l_tag(i.LOOKUP_CODE) := i.TAG;
12812       l_meaning(i.LOOKUP_CODE) := i.MEANING;
12813     END LOOP;
12814 
12815     FOR i IN cr_item( p_set_process_id, p_organization_id, p_organization_code)
12816     LOOP
12817       IF i.CNT > 0 THEN
12818         l_return_table.EXTEND();
12819         l_row_type.MEANING := l_meaning('ITEM');
12820         l_row_type.CNT := i.CNT;
12821         l_row_type.NEW_CNT := i.NEW_CNT;
12822         l_row_type.TAG := l_tag('ITEM');
12823         l_row_type.UPDATE_CNT := i.UPDATE_CNT;
12824         l_row_type.AFTER_IMPORT_TOTAL := i.NEW_CNT + i.UPDATE_CNT;
12825         l_return_table(l_return_table.LAST) := l_row_type;
12826       END IF;
12827     END LOOP;
12828 
12829     FOR i IN cr_org_assign (p_set_process_id, p_organization_id)
12830     LOOP
12831       IF i.CNT > 0 THEN
12832         l_return_table.EXTEND();
12833         l_row_type.MEANING := l_meaning('ORG_ASSIGN');
12834         l_row_type.CNT := i.CNT;
12835         l_row_type.NEW_CNT := i.NEW_CNT;
12836         l_row_type.TAG := l_tag('ORG_ASSIGN');
12837         l_row_type.UPDATE_CNT := i.UPDATE_CNT;
12838         l_row_type.AFTER_IMPORT_TOTAL := i.NEW_CNT + i.UPDATE_CNT;
12839         l_return_table(l_return_table.LAST) := l_row_type;
12840       END IF;
12841     END LOOP;
12842 
12843     FOR i IN cr_revision (p_set_process_id, p_organization_id)
12844     LOOP
12845       IF i.CNT > 0 THEN
12846         l_return_table.EXTEND();
12847         l_row_type.MEANING := l_meaning('REVISION');
12848         l_row_type.CNT := i.CNT;
12849         l_row_type.NEW_CNT := i.NEW_CNT;
12850         l_row_type.TAG := l_tag('REVISION');
12851         l_row_type.UPDATE_CNT := i.UPDATE_CNT;
12852         l_row_type.AFTER_IMPORT_TOTAL := i.NEW_CNT + i.UPDATE_CNT;
12853         l_return_table(l_return_table.LAST) := l_row_type;
12854       END IF;
12855     END LOOP;
12856 
12857     FOR i IN cr_structure (p_set_process_id, p_organization_id)
12858     LOOP
12859       IF i.CNT > 0 THEN
12860         l_return_table.EXTEND();
12861         l_row_type.MEANING := l_meaning('STRUCTURE');
12862         l_row_type.CNT := i.CNT;
12863         l_row_type.NEW_CNT := i.NEW_CNT;
12864         l_row_type.TAG := l_tag('STRUCTURE');
12865         l_row_type.UPDATE_CNT := i.UPDATE_CNT;
12866         l_row_type.AFTER_IMPORT_TOTAL := i.NEW_CNT + i.UPDATE_CNT;
12867         l_return_table(l_return_table.LAST) := l_row_type;
12868       END IF;
12869     END LOOP;
12870 
12871     FOR i IN cr_people (p_set_process_id, p_organization_id)
12872     LOOP
12873       IF i.CNT > 0 THEN
12874         l_return_table.EXTEND();
12875         l_row_type.MEANING := l_meaning('PEOPLE');
12876         l_row_type.CNT := i.CNT;
12877         l_row_type.NEW_CNT := i.NEW_CNT;
12878         l_row_type.TAG := l_tag('PEOPLE');
12879         l_row_type.UPDATE_CNT := i.UPDATE_CNT;
12880         l_row_type.AFTER_IMPORT_TOTAL := i.NEW_CNT + i.UPDATE_CNT;
12881         l_return_table(l_return_table.LAST) := l_row_type;
12882       END IF;
12883     END LOOP;
12884 
12885     FOR i IN cr_category_assignment (p_set_process_id, p_organization_id)
12886     LOOP
12887       IF i.CNT > 0 THEN
12888         l_return_table.EXTEND();
12889         l_row_type.MEANING := l_meaning('CATEGORY_ASSIGN');
12890         l_row_type.CNT := i.CNT;
12891         l_row_type.NEW_CNT := i.NEW_CNT;
12892         l_row_type.TAG := l_tag('CATEGORY_ASSIGN');
12893         l_row_type.UPDATE_CNT := i.UPDATE_CNT;
12894         l_row_type.AFTER_IMPORT_TOTAL := i.NEW_CNT + i.UPDATE_CNT;
12895         l_return_table(l_return_table.LAST) := l_row_type;
12896       END IF;
12897     END LOOP;
12898 
12899     FOR i IN cr_aml (p_set_process_id, p_organization_id)
12900     LOOP
12901       IF i.CNT > 0 THEN
12902         l_return_table.EXTEND();
12903         l_row_type.MEANING := l_meaning( 'AML');
12904         l_row_type.CNT := i.CNT;
12905         -- Bug: 5262421, if l_import_xref_only is Y, then in after import total only show 0
12906         IF NVL(l_import_xref_only, 'N') = 'Y' THEN
12907           l_row_type.NEW_CNT := 0;
12908           l_row_type.UPDATE_CNT := 0;
12909           l_row_type.AFTER_IMPORT_TOTAL := 0;
12910         ELSE
12911           l_row_type.NEW_CNT := i.NEW_CNT;
12912           l_row_type.UPDATE_CNT := i.UPDATE_CNT;
12913           l_row_type.AFTER_IMPORT_TOTAL := i.NEW_CNT + i.UPDATE_CNT;
12914         END IF;
12915         l_row_type.TAG := l_tag( 'AML');
12916         l_return_table(l_return_table.LAST) := l_row_type;
12917       END IF;
12918     END LOOP;
12919 
12920     FOR i IN cr_component_ops (p_set_process_id, p_organization_id)
12921     LOOP
12922       IF i.CNT > 0 THEN
12923         l_return_table.EXTEND();
12924         l_row_type.MEANING := l_meaning('COMPONENT_OPS');
12925         l_row_type.CNT := i.CNT;
12926         l_row_type.NEW_CNT := i.NEW_CNT;
12927         l_row_type.TAG := l_tag('COMPONENT_OPS');
12928         l_row_type.UPDATE_CNT := i.UPDATE_CNT;
12929         l_row_type.AFTER_IMPORT_TOTAL := i.NEW_CNT + i.UPDATE_CNT;
12930         l_return_table(l_return_table.LAST) := l_row_type;
12931       END IF;
12932     END LOOP;
12933 
12934     FOR i IN cr_ref_desgs (p_set_process_id, p_organization_id)
12935     LOOP
12936       IF i.CNT > 0 THEN
12937         l_return_table.EXTEND();
12938         l_row_type.MEANING := l_meaning('REF_DESGS');
12939         l_row_type.CNT := i.CNT;
12940         l_row_type.NEW_CNT := i.NEW_CNT;
12941         l_row_type.TAG := l_tag('REF_DESGS');
12942         l_row_type.UPDATE_CNT := i.UPDATE_CNT;
12943         l_row_type.AFTER_IMPORT_TOTAL := i.NEW_CNT + i.UPDATE_CNT;
12944         l_return_table(l_return_table.LAST) := l_row_type;
12945       END IF;
12946     END LOOP;
12947 
12948     FOR i IN cr_sub_comps (p_set_process_id, p_organization_id)
12949     LOOP
12950       IF i.CNT > 0 THEN
12951         l_return_table.EXTEND();
12952         l_row_type.MEANING := l_meaning('SUB_COMPS');
12953         l_row_type.CNT := i.CNT;
12954         l_row_type.NEW_CNT := i.NEW_CNT;
12955         l_row_type.TAG := l_tag('SUB_COMPS');
12956         l_row_type.UPDATE_CNT := i.UPDATE_CNT;
12957         l_row_type.AFTER_IMPORT_TOTAL := i.NEW_CNT + i.UPDATE_CNT;
12958         l_return_table(l_return_table.LAST) := l_row_type;
12959       END IF;
12960     END LOOP;
12961 
12962     FOR i IN cr_bill_of_mtls (p_set_process_id, p_organization_id )
12963     LOOP
12964       IF i.CNT > 0 THEN
12965         l_return_table.EXTEND();
12966         l_row_type.MEANING := l_meaning('BILL_OF_MTLS');
12967         l_row_type.CNT := i.CNT;
12968         l_row_type.NEW_CNT := i.NEW_CNT;
12969         l_row_type.TAG := l_tag('BILL_OF_MTLS');
12970         l_row_type.UPDATE_CNT := i.UPDATE_CNT;
12971         l_row_type.AFTER_IMPORT_TOTAL := i.NEW_CNT + i.UPDATE_CNT;
12972         l_return_table(l_return_table.LAST) := l_row_type;
12973       END IF;
12974     END LOOP;
12975 
12976     FOR i IN cr_item_sup (p_set_process_id, p_organization_id )
12977     LOOP
12978       IF i.CNT > 0 THEN
12979         l_return_table.EXTEND();
12980         IF i.DATA_LEVEL_NAME = 'ITEM_SUP' THEN
12981           l_row_type.MEANING := l_meaning('ITEM_SUP');
12982           l_row_type.TAG := l_tag('ITEM_SUP');
12983         ELSIF i.DATA_LEVEL_NAME = 'ITEM_SUP_SITE' THEN
12984           l_row_type.MEANING := l_meaning('ITEM_SUP_SITE');
12985           l_row_type.TAG := l_tag('ITEM_SUP_SITE');
12986         ELSIF i.DATA_LEVEL_NAME = 'ITEM_SUP_SITE_ORG' THEN
12987           l_row_type.MEANING := l_meaning('ITEM_ORG_SUP_SITE');
12988           l_row_type.TAG := l_tag('ITEM_ORG_SUP_SITE');
12989         END IF;
12990         l_row_type.CNT := i.CNT;
12991         l_row_type.NEW_CNT := i.NEW_CNT;
12992         l_row_type.UPDATE_CNT := i.UPDATE_CNT;
12993         l_row_type.AFTER_IMPORT_TOTAL := i.NEW_CNT + i.UPDATE_CNT;
12994         l_return_table(l_return_table.LAST) := l_row_type;
12995       END IF;
12996     END LOOP;
12997 
12998     RETURN  l_return_table ;
12999   EXCEPTION
13000     WHEN OTHERS THEN
13001       l_row_type := SYSTEM.EGO_IMPORT_CNT_REC('',0,0,0,0,0);
13002       l_return_table := SYSTEM.EGO_IMPORT_CNT_TABLE();
13003       l_row_type.MEANING := SQLERRM;
13004       l_return_table.EXTEND();
13005       l_return_table(l_return_table.LAST) := l_row_type;
13006       RETURN l_return_table;
13007   END GET_IMPORT_DETAILS_DATA;
13008 
13009   /*
13010    * This method updates the request_ids to ego_import_batches_b table.
13011    */
13012   PROCEDURE Update_Request_Id_To_Batch (
13013             p_import_request_id  IN NUMBER,
13014             p_match_request_id   IN NUMBER,
13015             p_batch_id           IN NUMBER)
13016   IS
13017   BEGIN
13018     IF ( NVL(p_import_request_id, 0) > 0 ) OR ( NVL(p_match_request_id, 0) > 0 ) THEN
13019       UPDATE EGO_IMPORT_BATCHES_B
13020       SET LAST_MATCH_REQUEST_ID = DECODE(p_match_request_id, NULL, LAST_MATCH_REQUEST_ID, 0, LAST_MATCH_REQUEST_ID, p_match_request_id),
13021           LAST_IMPORT_REQUEST_ID = DECODE(p_import_request_id, NULL, LAST_IMPORT_REQUEST_ID, 0, LAST_IMPORT_REQUEST_ID, p_import_request_id)
13022       WHERE BATCH_ID = p_batch_id;
13023     END IF; -- IF ( NVL(p_import_request_id, 0) > 0 ) OR ( NVL(p_match_request_id, 0) > 0 ) THEN
13024   END Update_Request_Id_To_Batch;
13025 
13026 END EGO_IMPORT_PVT;