DBA Data[Home] [Help]

PACKAGE BODY: APPS.EGO_IMPORT_PVT

Source


1 PACKAGE BODY EGO_IMPORT_PVT AS
2 /* $Header: EGOVIMPB.pls 120.184.12020000.5 2013/02/26 18:02:20 gnookala 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_SSXREF_IS_NULL_01' --bug 11894684, replace 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_SSXID_INVALID_01'--bug 11894684, replace 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_SSXREF_IS_NULL_02'--bug 11894684, replace 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_SSXID_INVALID_02'--bug 11894684, replace 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_SSXREF_IS_NULL_03'--bug 11894684, replace 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_SSXID_INVALID_03'--bug 11894684, replace 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_SSXREF_IS_NULL_04'--bug 11894684, replace 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_SSXID_INVALID_04'--bug 11894684, replace 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_SSXREF_IS_NULL_05'--bug 11894684, replace 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_SSXID_INVALID_05'--bug 11894684, replace 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_SSXREF_IS_NULL_06'--bug 11894684, replace 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_SSXID_INVALID_06'--bug 11894684, replace 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_SSXREF_IS_NULL_07'--bug 11894684, replace 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_SSXID_INVALID_07'--bug 11894684, replace 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      l_inv_installed := FND_INSTALLATION.GET_APP_INFO('INV', l_status, l_industry, l_schema);
640 
641     /* Bug 12669090 : Commenting the Gather Stats.
642       As mentioned in the note 1208945.1 and suggested by performance team,
643       for any performance issues we need to gather stats manualy so no need to gather stats in the code.
644    */
645    /*
646 
647     -- checking whether stats needs to be collected on MTL_SYSTEM_ITEMS_INTERFACE
648     SELECT COUNT(1) INTO l_records
649     FROM MTL_SYSTEM_ITEMS_INTERFACE
650     WHERE SET_PROCESS_ID = p_data_set_id;
651 
652     l_inv_installed := FND_INSTALLATION.GET_APP_INFO('INV', l_status, l_industry, l_schema);
653     IF (l_records > l_stats_profile) AND l_inv_installed AND l_schema IS NOT NULL THEN
654       FND_STATS.GATHER_TABLE_STATS(l_schema, 'MTL_SYSTEM_ITEMS_INTERFACE');
655       Debug_Conc_Log('Collected Statistics on MTL_SYSTEM_ITEMS_INTERFACE');
656     END IF;
657 
658     -- checking whether stats needs to be collected on MTL_ITEM_REVISIONS_INTERFACE
659     SELECT COUNT(1) INTO l_records
660     FROM MTL_ITEM_REVISIONS_INTERFACE
661     WHERE SET_PROCESS_ID = p_data_set_id;
662 
663     IF (l_records > l_stats_profile) AND l_inv_installed AND l_schema IS NOT NULL THEN
664       FND_STATS.GATHER_TABLE_STATS(l_schema, 'MTL_ITEM_REVISIONS_INTERFACE');
665       Debug_Conc_Log('Collected Statistics on MTL_ITEM_REVISIONS_INTERFACE');
666     END IF;
667 		 */
668  	  -- Bug 12669090 : End
669 
670     -- checking whether stats needs to be collected on MTL_ITEM_CATEGORIES_INTERFACE
671     SELECT COUNT(1) INTO l_records
672     FROM MTL_ITEM_CATEGORIES_INTERFACE
673     WHERE SET_PROCESS_ID = p_data_set_id;
674 
675     IF (l_records > l_stats_profile) AND l_inv_installed AND l_schema IS NOT NULL THEN
676       FND_STATS.GATHER_TABLE_STATS(l_schema, 'MTL_ITEM_CATEGORIES_INTERFACE');
677       Debug_Conc_Log('Collected Statistics on MTL_ITEM_CATEGORIES_INTERFACE');
678     END IF;
679 
680     l_ego_installed := FND_INSTALLATION.GET_APP_INFO('EGO', l_status, l_industry, l_schema);
681     -- checking whether stats needs to be collected on EGO_ITEM_PEOPLE_INTF
682     SELECT COUNT(1) INTO l_records
683     FROM EGO_ITEM_PEOPLE_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_ITEM_PEOPLE_INTF');
688       Debug_Conc_Log('Collected Statistics on EGO_ITEM_PEOPLE_INTF');
689     END IF;
690 
691     -- checking whether stats needs to be collected on EGO_AML_INTF
692     SELECT COUNT(1) INTO l_records
693     FROM EGO_AML_INTF
694     WHERE DATA_SET_ID = p_data_set_id;
695 
696     IF (l_records > l_stats_profile) AND l_ego_installed AND l_schema IS NOT NULL THEN
697       FND_STATS.GATHER_TABLE_STATS(l_schema, 'EGO_AML_INTF');
698       Debug_Conc_Log('Collected Statistics on EGO_AML_INTF');
699     END IF;
700  /* Bug 12669090 : Commenting the Gather Stats.
701     As mentioned in the note 1208945.1 and suggested by performance team,
702     for any performance issues we need to gather stats manualy so no need to gather stats in the code.
703  */
704  	  /*
705     -- checking whether stats needs to be collected on EGO_ITM_USR_ATTR_INTRFC
706     SELECT COUNT(1) INTO l_records
707     FROM EGO_ITM_USR_ATTR_INTRFC
708     WHERE DATA_SET_ID = p_data_set_id;
709 
710     IF (l_records > (l_stats_profile*25)) AND l_ego_installed AND l_schema IS NOT NULL THEN
711       FND_STATS.GATHER_TABLE_STATS(l_schema, 'EGO_ITM_USR_ATTR_INTRFC');
712       Debug_Conc_Log('Collected Statistics on EGO_ITM_USR_ATTR_INTRFC');
713     END IF;
714 */
715 -- Bug 12669090 : End
716     -- R12C: BEGIN
717     -- checking whether stats needs to be collected on EGO_ITEM_ASSOCIATIONS_INTF
718 
719     SELECT COUNT(1) INTO l_records
720     FROM EGO_ITEM_ASSOCIATIONS_INTF
721     WHERE BATCH_ID = p_data_set_id;
722 
723     IF (l_records > l_stats_profile) AND l_ego_installed AND l_schema IS NOT NULL THEN
724       FND_STATS.GATHER_TABLE_STATS(l_schema, 'EGO_ITEM_ASSOCIATIONS_INTF');
725       Debug_Conc_Log('Collected Statistics on EGO_ITEM_ASSOCIATIONS_INTF');
726     END IF;
727 
728     --R12C: END
729     Debug_Conc_Log('Done Gather_Stats_For_Intf_Tables');
730   EXCEPTION WHEN OTHERS THEN
731     Debug_Conc_Log('Error in Gather_Stats_For_Intf_Tables-'||SQLERRM);
732   END Gather_Stats_For_Intf_Tables;
733 
734     --=================================================================================================================--
735     --------------------------------------- Start of Merging Section ----------------------------------------------------
736     --=================================================================================================================--
737     /*
738      * The procedures in this section, both public and private, relate to the task of identifying the rows in various
739      * item interface tables that have the same keys and need to be merged - i.e. collapsed into one row. The result of
740      * the merging operation on a subset of the table should be that there is at most one row for any set of keys.
741      *
742      *
743      * All the MERGE_* procedures take the following arguments:
744      *  p_batch_id       IN NUMBER                  =>
745      *      The batch identifier (MANDATORY).
746      *  p_is_pdh_batch   IN FLAG      DEFAULT NULL  =>
747      *      Used to determine the set of keys to use for merging.
748      *          - Pass FND_API.G_TRUE to indicate that the batch is a PIMDH batch
749      *          - Pass FND_API.G_FALSE to indicate that the batch is a non-PIMDH batch
750      *          - If not passed, the batch header will be used to determine whether or not
751      *              the batch is a PIMDH batch (absence of a header implies that it is).
752      *  p_master_org_id  IN NUMBER    DEFAULT NULL =>
753      *      The ID of the default batch organization, to be used for rows for which neither
754      *          ORGANIZATION_ID nor ORGANIZATION_CODE are provided.
755      *      If not passed, the ORGANIZATION_ID in the batch header will be used.
756      *
757      *  p_commit         IN FLAG      DEFAULT FND_API.G_FALSE =>
758      *      Pass FND_API.G_TRUE to have a COMMIT issued at the end of the procedure.
759      */
760 
761     PROCEDURE merge_params_from_batch_header( p_batch_id        IN           NUMBER
762                                             , x_is_pdh_batch    OUT NOCOPY   FLAG
763                                             , x_master_org_id   OUT NOCOPY   NUMBER
764                                             , x_ss_id           OUT NOCOPY   NUMBER
765                                             )
766     IS
767         l_org_id        NUMBER                                      := NULL;
768         l_ss_id         EGO_IMPORT_BATCHES_B.SOURCE_SYSTEM_ID%TYPE  := NULL;
769     BEGIN
770         Debug_Conc_Log( 'Attempting to resolve merge parameters from batch header for batch_id='
771                       || to_char( p_batch_id ) );
772         BEGIN
773             SELECT  MP.ORGANIZATION_ID,
774                     BA.SOURCE_SYSTEM_ID
775             INTO    l_org_id
776                   , l_ss_id
777             FROM    MTL_PARAMETERS MP
778                   , EGO_IMPORT_BATCHES_B ba
779             WHERE   BA.ORGANIZATION_ID = MP.ORGANIZATION_ID
780                 AND BA.BATCH_ID = p_batch_id;
781         EXCEPTION
782             WHEN NO_DATA_FOUND THEN
783                 Debug_Conc_Log( 'Batch header not found!' );
784                 NULL;
785         END;
786 
787         x_ss_id := l_ss_id;
788         Debug_Conc_Log( 'SS ID:' || x_ss_id );
789         x_is_pdh_batch :=   CASE l_ss_id
790                                 WHEN NULL                       THEN FND_API.G_TRUE
791                                 WHEN get_pdh_source_system_id   THEN FND_API.G_TRUE
792                                 ELSE FND_API.G_FALSE
793                             END;
794         Debug_Conc_Log( 'Is PDH Batch:' || x_is_pdh_batch );
795         x_master_org_id :=  l_org_id;
796         Debug_Conc_Log( 'Master Org ID:' || x_master_org_id );
797 
798         Debug_Conc_Log( 'Done resolving merge parameters from batch header' );
799     END merge_params_from_batch_header;
800 
801 
802     PROCEDURE merge_rev_attrs   ( p_batch_id       IN NUMBER
803                                 , p_is_pdh_batch   IN FLAG      DEFAULT NULL
804                                 , p_ss_id          IN NUMBER    DEFAULT NULL
805                                 , p_master_org_id  IN NUMBER    DEFAULT NULL
806                                 , p_commit         IN FLAG      DEFAULT FND_API.G_FALSE
807                                 )
808     IS
809         --6468564:Perf issue replacing EGO_ATTRS_V
810         CURSOR c_pdh_target_rev_attrs( cp_master_org_id EGO_ITM_USR_ATTR_INTRFC.ORGANIZATION_ID%TYPE, cp_rev_dl_id NUMBER ) IS
811             SELECT  sub.*
812                    ,EXT.DATA_TYPE DATA_TYPE_CODE
813             FROM
814                 ( SELECT
815                         EIUAI.ROWID rid
816                         , COUNT( * ) OVER ( PARTITION BY
817                                                     ITEM_NUMBER
818                                                     , ATTR_GROUP_INT_NAME
819                                                     , ATTR_INT_NAME
820                                                     , COALESCE( EIUAI.ORGANIZATION_ID,
821                                                                 (   SELECT  ORGANIZATION_ID
822                                                                     FROM    MTL_PARAMETERS P
823                                                                     WHERE   P.ORGANIZATION_CODE = EIUAI.ORGANIZATION_CODE
824                                                                 ),
825                                                                 (   SELECT  ORGANIZATION_ID
826                                                                     FROM    MTL_ITEM_REVISIONS_B R
827                                                                     WHERE   R.REVISION_ID = EIUAI.REVISION_ID
828                                                                 ),
829                                                                 NVL2( ORGANIZATION_CODE, cp_master_org_id, NULL )
830                                                               )
831                                                     , NVL( eiuai.REVISION,
832                                                            (    SELECT  r.REVISION
833                                                                 FROM    MTL_ITEM_REVISIONS_B r
834                                                                 WHERE   r.REVISION_ID = eiuai.REVISION_ID
835                                                            )
836                                                          )
837                                                     , NVL( eiuai.ATTR_GROUP_TYPE, G_DEFAULT_ATTR_GROUP_TYPE )
838                                           )
839                         cnt
840                         , RANK() OVER   ( ORDER BY
841                                                     ITEM_NUMBER
842                                                     , ATTR_GROUP_INT_NAME
843                                                     , ATTR_INT_NAME
844                                                     , COALESCE( EIUAI.ORGANIZATION_ID,
845                                                                 (   SELECT  ORGANIZATION_ID
846                                                                     FROM    MTL_PARAMETERS P
847                                                                     WHERE   P.ORGANIZATION_CODE = EIUAI.ORGANIZATION_CODE
848                                                                 ),
849                                                                 (   SELECT  ORGANIZATION_ID
850                                                                     FROM    MTL_ITEM_REVISIONS_B R
851                                                                     WHERE   R.REVISION_ID = EIUAI.REVISION_ID
852                                                                 ),
853                                                                 NVL2( ORGANIZATION_CODE, cp_master_org_id, NULL )
854                                                               )
855                                                     , NVL( eiuai.REVISION,
856                                                            (    SELECT  r.REVISION
857                                                                 FROM    MTL_ITEM_REVISIONS_B r
858                                                                 WHERE   r.REVISION_ID = eiuai.REVISION_ID
859                                                            )
860                                                          )
861                                                     , NVL( eiuai.ATTR_GROUP_TYPE, G_DEFAULT_ATTR_GROUP_TYPE )
862                                         )
863                         rnk
864                         , eiuai.*
865                    FROM EGO_ITM_USR_ATTR_INTRFC EIUAI, EGO_FND_DSC_FLX_CTX_EXT FL_CTX_EXT
866                    WHERE DATA_SET_ID = p_batch_id
867                      AND PROCESS_STATUS                           = 1
868                      AND ITEM_NUMBER                              IS NOT NULL
869                      AND FL_CTX_EXT.DESCRIPTIVE_FLEXFIELD_NAME    = NVL( EIUAI.ATTR_GROUP_TYPE, G_DEFAULT_ATTR_GROUP_TYPE )
870                      AND FL_CTX_EXT.APPLICATION_ID                = 431
871                      AND FL_CTX_EXT.DESCRIPTIVE_FLEX_CONTEXT_CODE = EIUAI.ATTR_GROUP_INT_NAME
872                      AND FL_CTX_EXT.MULTI_ROW                     = 'N'
873                      AND EXISTS( SELECT NULL
874                                  FROM EGO_ATTR_GROUP_DL A
875                                  WHERE A.DATA_LEVEL_ID = cp_rev_dl_id
876                                    AND A.ATTR_GROUP_ID = FL_CTX_EXT.ATTR_GROUP_ID
877                                )
878                 ) sub
879                  ,FND_DESCR_FLEX_COLUMN_USAGES FL_COL
880                  ,EGO_FND_DF_COL_USGS_EXT EXT
881             WHERE sub.CNT > 1
882               AND FL_COL.APPLICATION_ID                = 431
883               AND FL_COL.DESCRIPTIVE_FLEX_CONTEXT_CODE = sub.ATTR_GROUP_INT_NAME
884               AND FL_COL.END_USER_COLUMN_NAME          = sub.ATTR_INT_NAME
885               AND FL_COL.DESCRIPTIVE_FLEXFIELD_NAME    = SUB.ATTR_GROUP_TYPE
886               AND EXT.APPLICATION_ID                   = FL_COL.APPLICATION_ID
887               AND EXT.DESCRIPTIVE_FLEXFIELD_NAME       = FL_COL.DESCRIPTIVE_FLEXFIELD_NAME
888               AND EXT.DESCRIPTIVE_FLEX_CONTEXT_CODE    = FL_COL.DESCRIPTIVE_FLEX_CONTEXT_CODE
889               AND EXT.APPLICATION_COLUMN_NAME          = FL_COL.APPLICATION_COLUMN_NAME
890             ORDER BY rnk, sub.last_update_date DESC, interface_table_unique_id DESC ;
891 
892         --6468564:Perf issue replacing EGO_ATTRS_V
893         CURSOR c_ss_target_rev_attrs( cp_master_org_id EGO_ITM_USR_ATTR_INTRFC.ORGANIZATION_ID%TYPE, cp_rev_dl_id NUMBER ) IS
894             SELECT  sub.*
895                    ,EXT.DATA_TYPE DATA_TYPE_CODE
896             FROM
897                 ( SELECT
898                         EIUAI.ROWID rid
899                         , COUNT( * ) OVER ( PARTITION BY
900                                                     SOURCE_SYSTEM_ID
901                                                     , SOURCE_SYSTEM_REFERENCE
902                                                     , ATTR_GROUP_INT_NAME
903                                                     , ATTR_INT_NAME
904                                                     , COALESCE( EIUAI.ORGANIZATION_ID,
905                                                                 (   SELECT  ORGANIZATION_ID
906                                                                     FROM    MTL_PARAMETERS P
907                                                                     WHERE   P.ORGANIZATION_CODE = EIUAI.ORGANIZATION_CODE
908                                                                 ),
909                                                                 (   SELECT  ORGANIZATION_ID
910                                                                     FROM    MTL_ITEM_REVISIONS_B R
911                                                                     WHERE   R.REVISION_ID = EIUAI.REVISION_ID
912                                                                 ),
913                                                                 NVL2( ORGANIZATION_CODE, cp_master_org_id, NULL )
914                                                               )
915                                                     , NVL( eiuai.REVISION,
916                                                            (    SELECT  r.REVISION
917                                                                 FROM    MTL_ITEM_REVISIONS_B r
918                                                                 WHERE   r.REVISION_ID = eiuai.REVISION_ID
919                                                            )
920                                                          )
921                                                     , NVL( eiuai.ATTR_GROUP_TYPE, G_DEFAULT_ATTR_GROUP_TYPE )
922                                           )
923                         cnt
924                         , RANK() OVER   ( ORDER BY
925                                                     SOURCE_SYSTEM_ID
926                                                     , SOURCE_SYSTEM_REFERENCE
927                                                     , ATTR_GROUP_INT_NAME
928                                                     , ATTR_INT_NAME
929                                                     , COALESCE( EIUAI.ORGANIZATION_ID,
930                                                                 (   SELECT  ORGANIZATION_ID
931                                                                     FROM    MTL_PARAMETERS P
932                                                                     WHERE   P.ORGANIZATION_CODE = EIUAI.ORGANIZATION_CODE
933                                                                 ),
934                                                                 (   SELECT  ORGANIZATION_ID
935                                                                     FROM    MTL_ITEM_REVISIONS_B R
936                                                                     WHERE   R.REVISION_ID = EIUAI.REVISION_ID
937                                                                 ),
938                                                                 NVL2( ORGANIZATION_CODE, cp_master_org_id, NULL )
939                                                               )
940                                                     , NVL( eiuai.REVISION,
941                                                            (    SELECT  r.REVISION
942                                                                 FROM    MTL_ITEM_REVISIONS_B r
943                                                                 WHERE   r.REVISION_ID = eiuai.REVISION_ID
944                                                            )
945                                                          )
946                                                     , NVL( eiuai.ATTR_GROUP_TYPE, G_DEFAULT_ATTR_GROUP_TYPE )
947                                         )
948                         rnk
949                         , eiuai.*
950                    FROM EGO_ITM_USR_ATTR_INTRFC EIUAI, EGO_FND_DSC_FLX_CTX_EXT FL_CTX_EXT
951                    WHERE DATA_SET_ID                              = p_batch_id
952                      AND PROCESS_STATUS                           = 0
953                      AND FL_CTX_EXT.DESCRIPTIVE_FLEXFIELD_NAME    = NVL( EIUAI.ATTR_GROUP_TYPE, G_DEFAULT_ATTR_GROUP_TYPE )
954                      AND FL_CTX_EXT.APPLICATION_ID                = 431
955                      AND FL_CTX_EXT.DESCRIPTIVE_FLEX_CONTEXT_CODE = EIUAI.ATTR_GROUP_INT_NAME
956                      AND FL_CTX_EXT.MULTI_ROW                     = 'N'
957                      AND EXISTS( SELECT NULL
958                                  FROM EGO_ATTR_GROUP_DL A
959                                  WHERE A.DATA_LEVEL_ID = cp_rev_dl_id
960                                    AND A.ATTR_GROUP_ID = FL_CTX_EXT.ATTR_GROUP_ID
961                                )
962                 ) sub
963                  ,FND_DESCR_FLEX_COLUMN_USAGES FL_COL
964                  ,EGO_FND_DF_COL_USGS_EXT EXT
965             WHERE sub.CNT > 1
966               AND FL_COL.APPLICATION_ID                = 431
967               AND FL_COL.DESCRIPTIVE_FLEX_CONTEXT_CODE = sub.ATTR_GROUP_INT_NAME
968               AND FL_COL.END_USER_COLUMN_NAME          = sub.ATTR_INT_NAME
969               AND FL_COL.DESCRIPTIVE_FLEXFIELD_NAME    = SUB.ATTR_GROUP_TYPE
970               AND EXT.APPLICATION_ID                   = FL_COL.APPLICATION_ID
971               AND EXT.DESCRIPTIVE_FLEXFIELD_NAME       = FL_COL.DESCRIPTIVE_FLEXFIELD_NAME
972               AND EXT.DESCRIPTIVE_FLEX_CONTEXT_CODE    = FL_COL.DESCRIPTIVE_FLEX_CONTEXT_CODE
973               AND EXT.APPLICATION_COLUMN_NAME          = FL_COL.APPLICATION_COLUMN_NAME
974             ORDER BY rnk, sub.last_update_date DESC, interface_table_unique_id DESC ;
975 
976         TYPE TARGET_ROWS    IS TABLE OF c_pdh_target_rev_attrs%ROWTYPE;
977 
978         l_merged_rows   EIUAI_ROWS;
979         l_merge_base    EIUAI_ROW;
980         l_old_rows      TARGET_ROWS;
981         l_old_rowids    UROWID_TABLE;
982 
983         l_ss_id         EGO_ITM_USR_ATTR_INTRFC.SOURCE_SYSTEM_ID%TYPE := p_ss_id;
984         l_ssr           EGO_ITM_USR_ATTR_INTRFC.SOURCE_SYSTEM_REFERENCE%TYPE;
985         l_candidate_trans EGO_ITM_USR_ATTR_INTRFC.TRANSACTION_TYPE%TYPE;
986 
987         l_cur_rank      PLS_INTEGER := 0; -- because rank() starts at 1
988         l_mrow_ix       PLS_INTEGER := 0;
989         l_is_pdh_batch  BOOLEAN;
990 
991         l_data_type_code EGO_ATTRS_V.DATA_TYPE_CODE%TYPE;
992 
993         l_org_id        EGO_ITM_USR_ATTR_INTRFC.ORGANIZATION_ID%TYPE := p_master_org_id;
994         l_pdh_batch_flag FLAG := p_is_pdh_batch;
995         l_rev_dl_id     NUMBER;
996 
997         l_proc_log_prefix CONSTANT VARCHAR2(30) := '  merge_rev_attrs - ';
998     BEGIN
999         Debug_Conc_Log( l_proc_log_prefix || 'Entering' );
1000         Debug_Conc_Log( l_proc_log_prefix || 'Batch ID: ' || p_batch_id );
1001         BEGIN
1002           SELECT DATA_LEVEL_ID INTO l_rev_dl_id
1003           FROM EGO_DATA_LEVEL_B
1004           WHERE ATTR_GROUP_TYPE = 'EGO_ITEMMGMT_GROUP'
1005             AND APPLICATION_ID = 431
1006             AND DATA_LEVEL_NAME = 'ITEM_REVISION_LEVEL';
1007         EXCEPTION WHEN NO_DATA_FOUND THEN
1008           RETURN;
1009         END;
1010         Debug_Conc_Log( l_proc_log_prefix || 'l_rev_dl_id: ' || l_rev_dl_id );
1011         IF  l_pdh_batch_flag IS NULL OR l_org_id IS NULL OR l_ss_id IS NULL THEN
1012             merge_params_from_batch_header( p_batch_id      => p_batch_id
1013                                           , x_is_pdh_batch  => l_pdh_batch_flag
1014                                           , x_ss_id         => l_ss_id
1015                                           , x_master_org_id => l_org_id
1016                                           );
1017         END IF;
1018         Debug_Conc_Log( l_proc_log_prefix || 'Master Org ID: '|| l_org_id );
1019         Debug_Conc_Log( l_proc_log_prefix || 'SS ID: ' || l_ss_id );
1020         Debug_Conc_Log( l_proc_log_prefix || 'Is PDH Batch?: '|| l_pdh_batch_flag );
1021 
1022         l_is_pdh_batch  := ( l_pdh_batch_flag = FND_API.G_TRUE );
1023         IF  l_is_pdh_batch THEN
1024             -- DBMS_OUTPUT.PUT_LINE( 'PDH Batch' );
1025             OPEN c_pdh_target_rev_attrs( l_org_id, l_rev_dl_id );
1026             FETCH c_pdh_target_rev_attrs BULK COLLECT INTO l_old_rows;
1027             CLOSE c_pdh_target_rev_attrs;
1028         ELSE
1029             -- DBMS_OUTPUT.PUT_LINE( 'SS Batch' );
1030             OPEN c_ss_target_rev_attrs( l_org_id, l_rev_dl_id );
1031             FETCH c_ss_target_rev_attrs BULK COLLECT INTO l_old_rows;
1032             CLOSE c_ss_target_rev_attrs;
1033         END IF;
1034 
1035         Debug_Conc_Log( l_proc_log_prefix || 'Rows requiring merging: ' || l_old_rows.COUNT );
1036         IF  0 <> l_old_rows.COUNT THEN
1037             -- attributes common to every merged row
1038             l_merge_base.DATA_SET_ID    := p_batch_id;
1039             l_merge_base.PROCESS_STATUS := CASE WHEN l_is_pdh_batch THEN 1 ELSE 0 END;
1040 
1041             l_old_rowids := UROWID_TABLE( );
1042             l_old_rowids.EXTEND( l_old_rows.COUNT );
1043 
1044             -- process the item-level attrs
1045             FOR orow_ix IN l_old_rows.FIRST .. l_old_rows.LAST LOOP
1046                 l_old_rowids( orow_ix ) := l_old_rows( orow_ix ).RID;
1047 
1048                 IF( l_old_rows( orow_ix ).RNK <> l_cur_rank ) THEN
1049                     l_cur_rank := l_old_rows( orow_ix ).RNK;
1050                     Debug_Conc_Log( l_proc_log_prefix || '  Starting new merged row; rank = '|| l_cur_rank );
1051                     l_mrow_ix := l_mrow_ix + 1;
1052                     l_merged_rows( l_mrow_ix ) := l_merge_base;
1053                     IF NOT l_is_pdh_batch THEN
1054                         l_merged_rows( l_mrow_ix ).SOURCE_SYSTEM_ID          := l_old_rows( orow_ix ).SOURCE_SYSTEM_ID;
1055                         l_merged_rows( l_mrow_ix ).SOURCE_SYSTEM_REFERENCE   := l_old_rows( orow_ix ).SOURCE_SYSTEM_REFERENCE;
1056                         Debug_Conc_Log( l_proc_log_prefix || '   Source System Reference = ' || l_merged_rows( l_mrow_ix ).SOURCE_SYSTEM_REFERENCE );
1057                     END IF;
1058 
1059                     l_merged_rows( l_mrow_ix ).ATTR_GROUP_INT_NAME  := l_old_rows( orow_ix ).ATTR_GROUP_INT_NAME;
1060                     l_merged_rows( l_mrow_ix ).ATTR_INT_NAME        := l_old_rows( orow_ix ).ATTR_INT_NAME;
1061                     l_merged_rows( l_mrow_ix ).DATA_LEVEL_ID        := l_old_rows( orow_ix ).DATA_LEVEL_ID;
1062                     l_data_type_code := l_old_rows( orow_ix ).DATA_TYPE_CODE;
1063                     Debug_Conc_Log( l_proc_log_prefix || '   AttrGroup = ' || l_merged_rows( l_mrow_ix ).ATTR_GROUP_INT_NAME
1064                                                       || ', Attr = '    || l_merged_rows( l_mrow_ix ).ATTR_INT_NAME
1065                                                       || ', AttrDataTypeCode = ' || l_data_type_code
1066                                   );
1067                 ELSE
1068                     Debug_Conc_Log( l_proc_log_prefix || '  Merging another record into current merged row; rank = '|| l_cur_rank );
1069                 END IF;
1070 
1071                 -- Special Cases:
1072                 -- Transaction type
1073                 l_candidate_trans := UPPER( l_old_rows( orow_ix ).TRANSACTION_TYPE );
1074 
1075                 IF      l_merged_rows( l_mrow_ix ).TRANSACTION_TYPE IS NULL
1076                     OR  l_merged_rows( l_mrow_ix ).TRANSACTION_TYPE <> l_candidate_trans     -- <> filters out nulls
1077                 THEN
1078                     -- CREATE > SYNC > UPDATE : order of case expression matters
1079                     l_merged_rows( l_mrow_ix ).TRANSACTION_TYPE :=
1080                         CASE
1081                             WHEN l_merged_rows( l_mrow_ix ).TRANSACTION_TYPE = G_TRANS_TYPE_CREATE
1082                               OR l_candidate_trans = G_TRANS_TYPE_CREATE                            THEN G_TRANS_TYPE_CREATE
1083                             WHEN l_merged_rows( l_mrow_ix ).TRANSACTION_TYPE = G_TRANS_TYPE_SYNC
1084                               OR l_candidate_trans = G_TRANS_TYPE_SYNC                              THEN G_TRANS_TYPE_SYNC
1085                             WHEN l_merged_rows( l_mrow_ix ).TRANSACTION_TYPE = G_TRANS_TYPE_UPDATE
1086                               OR l_candidate_trans = G_TRANS_TYPE_UPDATE                            THEN G_TRANS_TYPE_UPDATE
1087                             ELSE NULL -- INVALID transaction types encountered so far ...
1088                         END;
1089                 END IF;
1090 
1091 
1092                 -- The following columns need to be treated as atomic groups
1093                 -- 1. Item Identifier
1094                 IF      l_merged_rows( l_mrow_ix ).INVENTORY_ITEM_ID  IS NULL
1095                     AND l_merged_rows( l_mrow_ix ).ITEM_NUMBER        IS NULL
1096                 THEN
1097                     l_merged_rows( l_mrow_ix ).INVENTORY_ITEM_ID  := l_old_rows( orow_ix ).INVENTORY_ITEM_ID;
1098                     l_merged_rows( l_mrow_ix ).ITEM_NUMBER        := l_old_rows( orow_ix ).ITEM_NUMBER;
1099                 END IF;
1100 
1101                 -- 2. Organization
1102                 IF      l_merged_rows( l_mrow_ix ).ORGANIZATION_ID    IS NULL
1103                     AND l_merged_rows( l_mrow_ix ).ORGANIZATION_CODE  IS NULL
1104                 THEN
1105                     l_merged_rows( l_mrow_ix ).ORGANIZATION_ID        := l_old_rows( orow_ix ).ORGANIZATION_ID ;
1106                     l_merged_rows( l_mrow_ix ).ORGANIZATION_CODE      := l_old_rows( orow_ix ).ORGANIZATION_CODE ;
1107                 END IF;
1108 
1109                 -- 3. Revision
1110 
1111                 -- 4. The attribute value
1112                 IF      l_merged_rows( l_mrow_ix ).ATTR_DISP_VALUE  IS NULL
1113                     AND l_merged_rows( l_mrow_ix ).ATTR_VALUE_STR   IS NULL
1114                     AND l_merged_rows( l_mrow_ix ).ATTR_VALUE_DATE  IS NULL
1115                     AND l_merged_rows( l_mrow_ix ).ATTR_VALUE_NUM   IS NULL
1116                     AND l_merged_rows( l_mrow_ix ).ATTR_VALUE_UOM       IS NULL
1117                     AND l_merged_rows( l_mrow_ix ).ATTR_UOM_DISP_VALUE  IS NULL
1118                 THEN
1119                     CASE
1120                         WHEN l_data_type_code = 'C' OR l_data_type_code = 'A' THEN      -- String Attribute
1121                             IF      l_old_rows( orow_ix ).ATTR_VALUE_STR    IS NOT NULL
1122                                 OR  l_old_rows( orow_ix ).ATTR_DISP_VALUE   IS NOT NULL
1123                             THEN
1124                                 l_merged_rows( l_mrow_ix ).ATTR_VALUE_STR       := l_old_rows( orow_ix ).ATTR_VALUE_STR;
1125                                 l_merged_rows( l_mrow_ix ).ATTR_DISP_VALUE      := l_old_rows( orow_ix ).ATTR_DISP_VALUE;
1126                                 l_merged_rows( l_mrow_ix ).ATTR_VALUE_UOM       := l_old_rows( orow_ix ).ATTR_VALUE_UOM;
1127                                 l_merged_rows( l_mrow_ix ).ATTR_UOM_DISP_VALUE  := l_old_rows( orow_ix ).ATTR_UOM_DISP_VALUE;
1128                             END IF;
1129                         WHEN l_data_type_code = 'X' or l_data_type_code = 'Y' THEN      -- Date Attribute
1130                             IF      l_old_rows( orow_ix ).ATTR_VALUE_DATE   IS NOT NULL
1131                                 OR  l_old_rows( orow_ix ).ATTR_DISP_VALUE   IS NOT NULL
1132                             THEN
1133                                 l_merged_rows( l_mrow_ix ).ATTR_VALUE_DATE      := l_old_rows( orow_ix ).ATTR_VALUE_DATE;
1134                                 l_merged_rows( l_mrow_ix ).ATTR_DISP_VALUE      := l_old_rows( orow_ix ).ATTR_DISP_VALUE;
1135                                 l_merged_rows( l_mrow_ix ).ATTR_VALUE_UOM       := l_old_rows( orow_ix ).ATTR_VALUE_UOM;
1136                                 l_merged_rows( l_mrow_ix ).ATTR_UOM_DISP_VALUE  := l_old_rows( orow_ix ).ATTR_UOM_DISP_VALUE;
1137                             END IF;
1138                         WHEN l_data_type_code = 'N' THEN                                -- Num Attribute
1139                             IF      l_old_rows( orow_ix ).ATTR_VALUE_NUM    IS NOT NULL
1140                                 OR  l_old_rows( orow_ix ).ATTR_DISP_VALUE   IS NOT NULL
1141                             THEN
1142                                 l_merged_rows( l_mrow_ix ).ATTR_VALUE_NUM       := l_old_rows( orow_ix ).ATTR_VALUE_NUM;
1143                                 l_merged_rows( l_mrow_ix ).ATTR_DISP_VALUE      := l_old_rows( orow_ix ).ATTR_DISP_VALUE;
1144                                 l_merged_rows( l_mrow_ix ).ATTR_VALUE_UOM       := l_old_rows( orow_ix ).ATTR_VALUE_UOM;
1145                                 l_merged_rows( l_mrow_ix ).ATTR_UOM_DISP_VALUE  := l_old_rows( orow_ix ).ATTR_UOM_DISP_VALUE;
1146                             END IF;
1147                     END CASE;
1148                 END IF;
1149 
1150                 -- Non-special cased
1151                 -- Start Generated Code
1152                 /* Generated using:
1153                     SET LINESIZE 200
1154                     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; '
1155                     FROM    ALL_TAB_COLUMNS
1156                     WHERE   TABLE_NAME = 'EGO_ITM_USR_ATTR_INTRFC'
1157                     AND COLUMN_NAME NOT IN
1158                         ( -- special cases (for merge)
1159                           'INVENTORY_ITEM_ID'
1160                         , 'ITEM_NUMBER'
1161                         , 'ORGANIZATION_ID'
1162                         , 'ORGANIZATION_CODE'
1163                         , 'TRANSACTION_TYPE'
1164                         , 'ATTR_INT_NAME'
1165                         , 'ATTR_GROUP_INT_NAME'
1166                         , 'ATTR_DISP_VALUE'
1167                         , 'ATTR_VALUE_STR'
1168                         , 'ATTR_VALUE_DATE'
1169                         , 'ATTR_VALUE_NUM'
1170                         , 'ATTR_VALUE_UOM'
1171                         , 'ATTR_UOM_DISP_VALUE'
1172                         , 'ATTR_GROUP_ID' -- ignore; assume will be filled during processing
1173                           -- special columns
1174                         , 'DATA_SET_ID'
1175                         , 'PROCESS_STATUS'
1176                         , 'SOURCE_SYSTEM_ID'
1177                         , 'SOURCE_SYSTEM_REFERENCE'
1178                         , 'INTERFACE_TABLE_UNIQUE_ID' -- should be handled by INSERT trigger
1179                           -- who columns
1180                         , 'LAST_UPDATE_DATE'
1181                         , 'CREATION_DATE'
1182                         , 'CREATED_BY'
1183                         , 'LAST_UPDATED_BY'
1184                         , 'LAST_UPDATE_LOGIN'
1185                           -- XXX: exclude concurrent processing columns?
1186                         )
1187                     ORDER BY COLUMN_NAME ASC
1188                 */
1189                 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;
1190                 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;
1191                 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;
1192                 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;
1193                 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;
1194                 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;
1195                 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;
1196                 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;
1197                 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;
1198                 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;
1199                 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;
1200                 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;
1201                 -- End Generated Code
1202             END LOOP; -- loop over old rows
1203 
1204             /*
1205             -- XXX: In case only null/invalid transaction types encountered, set transaction type to SYNC ?.
1206             IF l_merged_rows( l_mrow_ix ).TRANSACTION_TYPE IS NULL THEN
1207                 l_merged_rows( l_mrow_ix ).TRANSACTION_TYPE := G_TRANS_TYPE_SYNC;
1208             END IF;
1209             */
1210             IF l_merged_rows IS NOT NULL THEN
1211                 -- delete
1212                 Debug_Conc_Log( l_proc_log_prefix || 'Deleting ' || l_old_rowids.COUNT || ' old rows ...' );
1213                 FORALL rid_ix IN INDICES OF l_old_rowids
1214                     DELETE FROM EGO_ITM_USR_ATTR_INTRFC
1215                         WHERE ROWID = l_old_rowids( rid_ix );
1216                 -- insert
1217                 Debug_Conc_Log( l_proc_log_prefix || 'Inserting ' || l_merged_rows.COUNT || ' merged rows ...' );
1218                 FORALL row_index IN INDICES OF l_merged_rows
1219                     INSERT INTO EGO_ITM_USR_ATTR_INTRFC
1220                         VALUES l_merged_rows( row_index );
1221             END IF;
1222         END IF; -- ENDS IF l_old_rows.count <> 0
1223 
1224         IF p_commit = FND_API.G_TRUE THEN
1225             Debug_Conc_Log( l_proc_log_prefix || 'Committing' );
1226             COMMIT;
1227         END IF;
1228         Debug_Conc_Log( l_proc_log_prefix || 'Exiting' );
1229     END merge_rev_attrs;
1230 
1231     PROCEDURE merge_item_attrs  ( p_batch_id       IN NUMBER
1232                                 , p_is_pdh_batch   IN FLAG      DEFAULT NULL
1233                                 , p_ss_id          IN NUMBER    DEFAULT NULL
1234                                 , p_master_org_id  IN NUMBER    DEFAULT NULL
1235                                 , p_commit         IN FLAG      DEFAULT FND_API.G_FALSE
1236                                 )
1237     IS
1238 
1239         --6468564:Perf issue replacing EGO_ATTRS_V
1240         CURSOR c_pdh_target_item_attrs( cp_master_org_id EGO_ITM_USR_ATTR_INTRFC.ORGANIZATION_ID%TYPE ) IS
1241             SELECT  sub.*
1242                 ,EXT.DATA_TYPE DATA_TYPE_CODE
1243             FROM
1244                 ( SELECT
1245                         eiuai.ROWID rid
1246                         , COUNT( * ) OVER ( PARTITION BY
1247                                                     ITEM_NUMBER
1248                                                     , ATTR_GROUP_INT_NAME
1249                                                     , ATTR_INT_NAME
1250                                                     , DATA_LEVEL_ID
1251                                                     , PK1_VALUE
1252                                                     , PK2_VALUE
1253                                                     , PK3_VALUE
1254                                                     , PK4_VALUE
1255                                                     , PK5_VALUE
1256                                                     , COALESCE  ( eiuai.ORGANIZATION_ID
1257                                                                 , (  SELECT  ORGANIZATION_ID
1258                                                                      FROM    MTL_PARAMETERS p
1259                                                                      WHERE   p.ORGANIZATION_CODE = eiuai.ORGANIZATION_CODE
1260                                                                   )
1261                                                                 , NVL2( ORGANIZATION_CODE, cp_master_org_id, NULL )
1262                                                                 )
1263                                                     , NVL(  ATTR_GROUP_TYPE, G_DEFAULT_ATTR_GROUP_TYPE )
1264                                           )
1265                         cnt
1266                         , RANK() OVER   ( ORDER BY
1267                                                     ITEM_NUMBER
1268                                                     , ATTR_GROUP_INT_NAME
1269                                                     , ATTR_INT_NAME
1270                                                     , DATA_LEVEL_ID
1271                                                     , PK1_VALUE
1272                                                     , PK2_VALUE
1273                                                     , PK3_VALUE
1274                                                     , PK4_VALUE
1275                                                     , PK5_VALUE
1276                                                     , COALESCE  ( eiuai.ORGANIZATION_ID
1277                                                                 , (  SELECT  ORGANIZATION_ID
1278                                                                      FROM    MTL_PARAMETERS p
1279                                                                      WHERE   p.ORGANIZATION_CODE = eiuai.ORGANIZATION_CODE
1280                                                                   )
1281                                                                 , NVL2( ORGANIZATION_CODE, cp_master_org_id, NULL )
1282                                                                 )
1283                                                     , NVL(  ATTR_GROUP_TYPE, G_DEFAULT_ATTR_GROUP_TYPE )
1284                                         )
1285                         rnk
1286                         , eiuai.*
1287                    FROM EGO_ITM_USR_ATTR_INTRFC eiuai, EGO_FND_DSC_FLX_CTX_EXT FL_CTX_EXT
1288                    WHERE DATA_SET_ID                              = p_batch_id
1289                      AND PROCESS_STATUS                           = 1
1290                      AND FL_CTX_EXT.DESCRIPTIVE_FLEXFIELD_NAME    = NVL( EIUAI.ATTR_GROUP_TYPE, G_DEFAULT_ATTR_GROUP_TYPE )
1291                      AND FL_CTX_EXT.APPLICATION_ID                = 431
1292                      AND FL_CTX_EXT.DESCRIPTIVE_FLEX_CONTEXT_CODE = EIUAI.ATTR_GROUP_INT_NAME
1293                      AND FL_CTX_EXT.MULTI_ROW                     = 'N'
1294                      AND EXISTS( SELECT NULL
1295                                  FROM EGO_ATTR_GROUP_DL A, EGO_DATA_LEVEL_B DL
1296                                  WHERE DL.APPLICATION_ID  = 431
1297                                    AND DL.ATTR_GROUP_TYPE = FL_CTX_EXT.DESCRIPTIVE_FLEXFIELD_NAME
1298                                    AND DL.DATA_LEVEL_NAME IN ( 'ITEM_LEVEL' , 'ITEM_ORG', 'ITEM_SUP', 'ITEM_SUP_SITE', 'ITEM_SUP_SITE_ORG' )
1299                                    /* Bug:11887867
1300                                    AND DL.DATA_LEVEL_ID   = DL.DATA_LEVEL_ID
1301                                    */
1302                                    AND A.DATA_LEVEL_ID   = DL.DATA_LEVEL_ID
1303                                    AND A.ATTR_GROUP_ID    = FL_CTX_EXT.ATTR_GROUP_ID
1304                                )
1305                 ) sub
1306                  ,FND_DESCR_FLEX_COLUMN_USAGES FL_COL
1307                  ,EGO_FND_DF_COL_USGS_EXT EXT
1308             WHERE sub.CNT > 1
1309               AND FL_COL.APPLICATION_ID                = 431
1310               AND FL_COL.DESCRIPTIVE_FLEX_CONTEXT_CODE = sub.ATTR_GROUP_INT_NAME
1311               AND FL_COL.END_USER_COLUMN_NAME          = sub.ATTR_INT_NAME
1312               AND FL_COL.DESCRIPTIVE_FLEXFIELD_NAME    = SUB.ATTR_GROUP_TYPE
1313               AND EXT.APPLICATION_ID                   = FL_COL.APPLICATION_ID
1314               AND EXT.DESCRIPTIVE_FLEXFIELD_NAME       = FL_COL.DESCRIPTIVE_FLEXFIELD_NAME
1315               AND EXT.DESCRIPTIVE_FLEX_CONTEXT_CODE    = FL_COL.DESCRIPTIVE_FLEX_CONTEXT_CODE
1316               AND EXT.APPLICATION_COLUMN_NAME          = FL_COL.APPLICATION_COLUMN_NAME
1317             ORDER BY rnk, sub.last_update_date DESC, interface_table_unique_id DESC ;
1318 
1319         --6468564 : Perf issue replacing EGO_ATTRS_V
1320         CURSOR c_ss_target_item_attrs( cp_master_org_id EGO_ITM_USR_ATTR_INTRFC.ORGANIZATION_ID%TYPE ) IS
1321             SELECT  sub.*
1322                    ,EXT.DATA_TYPE DATA_TYPE_CODE
1323             FROM
1324                 ( SELECT
1325                         EIUAI.ROWID rid
1326                         , COUNT( * ) OVER ( PARTITION BY
1327                                                     SOURCE_SYSTEM_ID
1328                                                     , SOURCE_SYSTEM_REFERENCE
1329                                                     , ATTR_GROUP_INT_NAME
1330                                                     , ATTR_INT_NAME
1331                                                     , DATA_LEVEL_ID
1332                                                     , PK1_VALUE
1333                                                     , PK2_VALUE
1334                                                     , PK3_VALUE
1335                                                     , PK4_VALUE
1336                                                     , PK5_VALUE
1337                                                     , COALESCE  ( eiuai.ORGANIZATION_ID
1338                                                                 , (  SELECT  ORGANIZATION_ID
1339                                                                      FROM    MTL_PARAMETERS p
1340                                                                      WHERE   p.ORGANIZATION_CODE = eiuai.ORGANIZATION_CODE
1341                                                                   )
1342                                                                 , NVL2( ORGANIZATION_CODE, cp_master_org_id, NULL )
1343                                                                 )
1344                                                     , NVL( ATTR_GROUP_TYPE, G_DEFAULT_ATTR_GROUP_TYPE )
1345                                           )
1346                         cnt
1347                         , RANK() OVER   ( ORDER BY
1348                                                     SOURCE_SYSTEM_ID
1349                                                     , SOURCE_SYSTEM_REFERENCE
1350                                                     , ATTR_GROUP_INT_NAME
1351                                                     , ATTR_INT_NAME
1352                                                     , DATA_LEVEL_ID
1353                                                     , PK1_VALUE
1354                                                     , PK2_VALUE
1355                                                     , PK3_VALUE
1356                                                     , PK4_VALUE
1357                                                     , PK5_VALUE
1358                                                     , COALESCE  ( eiuai.ORGANIZATION_ID
1359                                                                 , (  SELECT  ORGANIZATION_ID
1360                                                                      FROM    MTL_PARAMETERS p
1361                                                                      WHERE   p.ORGANIZATION_CODE = eiuai.ORGANIZATION_CODE
1362                                                                   )
1363                                                                 , NVL2( ORGANIZATION_CODE, cp_master_org_id, NULL )
1364                                                                 )
1365                                                     , NVL( ATTR_GROUP_TYPE, G_DEFAULT_ATTR_GROUP_TYPE )
1366                                         )
1367                         rnk
1368                         , eiuai.*
1369                    FROM EGO_ITM_USR_ATTR_INTRFC eiuai, EGO_FND_DSC_FLX_CTX_EXT FL_CTX_EXT
1370                    WHERE DATA_SET_ID                              = p_batch_id
1371                      AND PROCESS_STATUS                           = 0
1372                      AND FL_CTX_EXT.DESCRIPTIVE_FLEXFIELD_NAME    = NVL( EIUAI.ATTR_GROUP_TYPE, G_DEFAULT_ATTR_GROUP_TYPE )
1373                      AND FL_CTX_EXT.APPLICATION_ID                = 431
1374                      AND FL_CTX_EXT.DESCRIPTIVE_FLEX_CONTEXT_CODE = EIUAI.ATTR_GROUP_INT_NAME
1375                      AND FL_CTX_EXT.MULTI_ROW                     = 'N'
1376                      AND EXISTS( SELECT NULL
1377                                  FROM EGO_ATTR_GROUP_DL A, EGO_DATA_LEVEL_B DL
1378                                  WHERE DL.APPLICATION_ID  = 431
1379                                    AND DL.ATTR_GROUP_TYPE = FL_CTX_EXT.DESCRIPTIVE_FLEXFIELD_NAME
1380                                    AND DL.DATA_LEVEL_NAME IN ( 'ITEM_LEVEL' , 'ITEM_ORG', 'ITEM_SUP', 'ITEM_SUP_SITE', 'ITEM_SUP_SITE_ORG' )
1381                                    /* Bug:11887867
1382                                    AND DL.DATA_LEVEL_ID   = DL.DATA_LEVEL_ID
1383                                    */
1384                                    AND A.DATA_LEVEL_ID   = DL.DATA_LEVEL_ID
1385                                    AND A.ATTR_GROUP_ID    = FL_CTX_EXT.ATTR_GROUP_ID
1386                                )
1387                 ) sub
1388                  ,FND_DESCR_FLEX_COLUMN_USAGES FL_COL
1389                  ,EGO_FND_DF_COL_USGS_EXT EXT
1390             WHERE sub.CNT > 1
1391               AND FL_COL.APPLICATION_ID                = 431
1392               AND FL_COL.DESCRIPTIVE_FLEX_CONTEXT_CODE = sub.ATTR_GROUP_INT_NAME
1393               AND FL_COL.END_USER_COLUMN_NAME          = sub.ATTR_INT_NAME
1394               AND FL_COL.DESCRIPTIVE_FLEXFIELD_NAME    = SUB.ATTR_GROUP_TYPE
1395               AND EXT.APPLICATION_ID                   = FL_COL.APPLICATION_ID
1396               AND EXT.DESCRIPTIVE_FLEXFIELD_NAME       = FL_COL.DESCRIPTIVE_FLEXFIELD_NAME
1397               AND EXT.DESCRIPTIVE_FLEX_CONTEXT_CODE    = FL_COL.DESCRIPTIVE_FLEX_CONTEXT_CODE
1398               AND EXT.APPLICATION_COLUMN_NAME          = FL_COL.APPLICATION_COLUMN_NAME
1399             ORDER BY rnk, sub.last_update_date DESC, interface_table_unique_id DESC ;
1400 
1401         TYPE TARGET_ROWS    IS TABLE OF c_ss_target_item_attrs%ROWTYPE;
1402 
1403         l_merged_rows   EIUAI_ROWS;
1404         l_merge_base    EIUAI_ROW;
1405         l_old_rows      TARGET_ROWS;
1406         l_old_rowids    UROWID_TABLE;
1407 
1408         l_ss_id         EGO_ITM_USR_ATTR_INTRFC.SOURCE_SYSTEM_ID%TYPE := p_ss_id;
1409         l_ssr           EGO_ITM_USR_ATTR_INTRFC.SOURCE_SYSTEM_REFERENCE%TYPE;
1410         l_candidate_trans EGO_ITM_USR_ATTR_INTRFC.TRANSACTION_TYPE%TYPE;
1411 
1412         l_cur_rank      PLS_INTEGER := 0; -- because rank() starts at 1
1413         l_mrow_ix       PLS_INTEGER := 0;
1414         l_is_pdh_batch  BOOLEAN;
1415 
1416         l_data_type_code EGO_ATTRS_V.DATA_TYPE_CODE%TYPE;
1417         l_org_id        EGO_ITM_USR_ATTR_INTRFC.ORGANIZATION_ID%TYPE := p_master_org_id;
1418         l_pdh_batch_flag FLAG := p_is_pdh_batch;
1419 
1420         l_proc_log_prefix CONSTANT VARCHAR2(30) := '  merge_item_attrs - ';
1421     BEGIN
1422         Debug_Conc_Log( l_proc_log_prefix || 'Entering' );
1423         Debug_Conc_Log( l_proc_log_prefix || 'Batch ID: ' || p_batch_id );
1424         IF  l_pdh_batch_flag IS NULL OR l_org_id IS NULL OR l_ss_id IS NULL THEN
1425             merge_params_from_batch_header( p_batch_id      => p_batch_id
1426                                           , x_is_pdh_batch  => l_pdh_batch_flag
1427                                           , x_master_org_id => l_org_id
1428                                           , x_ss_id         => l_ss_id
1429                                           );
1430         END IF;
1431         Debug_Conc_Log( l_proc_log_prefix || 'Master Org ID: ' || l_org_id );
1432         Debug_Conc_Log( l_proc_log_prefix || 'SS ID: ' || l_ss_id );
1433         Debug_Conc_Log( l_proc_log_prefix || 'Is PDH Batch?: ' || l_pdh_batch_flag );
1434 
1435         l_is_pdh_batch  := ( l_pdh_batch_flag = FND_API.G_TRUE );
1436         IF  l_is_pdh_batch THEN
1437             -- DBMS_OUTPUT.PUT_LINE( 'PDH Batch' );
1438             OPEN c_pdh_target_item_attrs( l_org_id );
1439             FETCH c_pdh_target_item_attrs BULK COLLECT INTO l_old_rows;
1440             CLOSE c_pdh_target_item_attrs;
1441         ELSE
1442             -- DBMS_OUTPUT.PUT_LINE( 'SS Batch' );
1443             OPEN c_ss_target_item_attrs( l_org_id );
1444             FETCH c_ss_target_item_attrs BULK COLLECT INTO l_old_rows;
1445             CLOSE c_ss_target_item_attrs;
1446         END IF;
1447 
1448         Debug_Conc_Log( l_proc_log_prefix || 'Rows requiring merging: ' || l_old_rows.COUNT );
1449         IF  0 <> l_old_rows.COUNT THEN
1450             -- attributes common to every merged row
1451             l_merge_base.DATA_SET_ID    := p_batch_id;
1452             l_merge_base.PROCESS_STATUS := CASE WHEN l_is_pdh_batch THEN 1 ELSE 0 END;
1453 
1454             l_old_rowids := UROWID_TABLE( );
1455             l_old_rowids.EXTEND( l_old_rows.COUNT );
1456 
1457             -- process the item-level attrs
1458             FOR orow_ix IN l_old_rows.FIRST .. l_old_rows.LAST LOOP
1459                 l_old_rowids( orow_ix ) := l_old_rows( orow_ix ).RID;
1460 
1461                 IF( l_old_rows( orow_ix ).RNK <> l_cur_rank ) THEN
1462                     l_cur_rank := l_old_rows( orow_ix ).RNK;
1463                     Debug_Conc_Log( l_proc_log_prefix || '  Starting new merged row; rank = '|| l_cur_rank );
1464                     l_mrow_ix := l_mrow_ix + 1;
1465                     l_merged_rows( l_mrow_ix ) := l_merge_base;
1466                     IF NOT l_is_pdh_batch THEN
1467                         l_merged_rows( l_mrow_ix ).SOURCE_SYSTEM_ID          := l_old_rows( orow_ix ).SOURCE_SYSTEM_ID;
1468                         l_merged_rows( l_mrow_ix ).SOURCE_SYSTEM_REFERENCE   := l_old_rows( orow_ix ).SOURCE_SYSTEM_REFERENCE;
1469                         Debug_Conc_Log( l_proc_log_prefix || '   Source System Reference = ' || l_merged_rows( l_mrow_ix ).SOURCE_SYSTEM_REFERENCE );
1470                     END IF;
1471 
1472                     l_merged_rows( l_mrow_ix ).ATTR_GROUP_INT_NAME  := l_old_rows( orow_ix ).ATTR_GROUP_INT_NAME;
1473                     l_merged_rows( l_mrow_ix ).ATTR_INT_NAME        := l_old_rows( orow_ix ).ATTR_INT_NAME;
1474                     l_merged_rows( l_mrow_ix ).DATA_LEVEL_ID        := l_old_rows( orow_ix ).DATA_LEVEL_ID;
1475                     l_merged_rows( l_mrow_ix ).DATA_LEVEL_NAME      := l_old_rows( orow_ix ).DATA_LEVEL_NAME;
1476                     l_merged_rows( l_mrow_ix ).PK1_VALUE      := l_old_rows( orow_ix ).PK1_VALUE;
1477                     l_merged_rows( l_mrow_ix ).PK2_VALUE      := l_old_rows( orow_ix ).PK2_VALUE;
1478                     l_merged_rows( l_mrow_ix ).PK3_VALUE      := l_old_rows( orow_ix ).PK3_VALUE;
1479                     l_merged_rows( l_mrow_ix ).PK4_VALUE      := l_old_rows( orow_ix ).PK4_VALUE;
1480                     l_merged_rows( l_mrow_ix ).PK5_VALUE      := l_old_rows( orow_ix ).PK5_VALUE;
1481                     l_data_type_code := l_old_rows( orow_ix ).DATA_TYPE_CODE;
1482                     Debug_Conc_Log( l_proc_log_prefix || '   AttrGroup = ' || l_merged_rows( l_mrow_ix ).ATTR_GROUP_INT_NAME
1483                                                       || ', Attr = '    || l_merged_rows( l_mrow_ix ).ATTR_INT_NAME
1484                                                       || ', AttrDataTypeCode = ' || l_data_type_code
1485                                   );
1486                 ELSE
1487                     Debug_Conc_Log( l_proc_log_prefix || '  Merging another record into current merged row; rank = '|| l_cur_rank );
1488                 END IF;
1489 
1490                 -- Special Cases:
1491                 -- Transaction type
1492                 l_candidate_trans := UPPER( l_old_rows( orow_ix ).TRANSACTION_TYPE );
1493 
1494                 IF      l_merged_rows( l_mrow_ix ).TRANSACTION_TYPE IS NULL
1495                     OR  l_merged_rows( l_mrow_ix ).TRANSACTION_TYPE <> l_candidate_trans     -- <> filters out nulls
1496                 THEN
1497                     -- CREATE > SYNC > UPDATE : order of case expression matters
1498                     l_merged_rows( l_mrow_ix ).TRANSACTION_TYPE :=
1499                         CASE
1500                             WHEN l_merged_rows( l_mrow_ix ).TRANSACTION_TYPE = G_TRANS_TYPE_CREATE
1501                               OR l_candidate_trans = G_TRANS_TYPE_CREATE                            THEN G_TRANS_TYPE_CREATE
1502                             WHEN l_merged_rows( l_mrow_ix ).TRANSACTION_TYPE = G_TRANS_TYPE_SYNC
1503                               OR l_candidate_trans = G_TRANS_TYPE_SYNC                              THEN G_TRANS_TYPE_SYNC
1504                             WHEN l_merged_rows( l_mrow_ix ).TRANSACTION_TYPE = G_TRANS_TYPE_UPDATE
1505                               OR l_candidate_trans = G_TRANS_TYPE_UPDATE                            THEN G_TRANS_TYPE_UPDATE
1506                             ELSE NULL -- INVALID transaction types encountered so far ...
1507                         END;
1508                 END IF;
1509 
1510 
1511                 -- The following columns need to be treated as atomic groups
1512                 -- 1. Item Identifier
1513                 IF      l_merged_rows( l_mrow_ix ).INVENTORY_ITEM_ID  IS NULL
1514                     AND l_merged_rows( l_mrow_ix ).ITEM_NUMBER        IS NULL
1515                 THEN
1516                     l_merged_rows( l_mrow_ix ).INVENTORY_ITEM_ID  := l_old_rows( orow_ix ).INVENTORY_ITEM_ID;
1517                     l_merged_rows( l_mrow_ix ).ITEM_NUMBER        := l_old_rows( orow_ix ).ITEM_NUMBER;
1518                 END IF;
1519 
1520                 -- 2. Organization
1521                 IF      l_merged_rows( l_mrow_ix ).ORGANIZATION_ID    IS NULL
1522                     AND l_merged_rows( l_mrow_ix ).ORGANIZATION_CODE  IS NULL
1523                 THEN
1524                     l_merged_rows( l_mrow_ix ).ORGANIZATION_ID        := l_old_rows( orow_ix ).ORGANIZATION_ID ;
1525                     l_merged_rows( l_mrow_ix ).ORGANIZATION_CODE      := l_old_rows( orow_ix ).ORGANIZATION_CODE ;
1526                 END IF;
1527 
1528                 -- 3. The attribute value
1529                 IF      l_merged_rows( l_mrow_ix ).ATTR_DISP_VALUE  IS NULL
1530                     AND l_merged_rows( l_mrow_ix ).ATTR_VALUE_STR   IS NULL
1531                     AND l_merged_rows( l_mrow_ix ).ATTR_VALUE_DATE  IS NULL
1532                     AND l_merged_rows( l_mrow_ix ).ATTR_VALUE_NUM   IS NULL
1533                     AND l_merged_rows( l_mrow_ix ).ATTR_VALUE_UOM       IS NULL
1534                     AND l_merged_rows( l_mrow_ix ).ATTR_UOM_DISP_VALUE  IS NULL
1535                 THEN
1536                     CASE
1537                         WHEN l_data_type_code = 'C' OR l_data_type_code = 'A' THEN      -- String Attribute
1538                             IF      l_old_rows( orow_ix ).ATTR_VALUE_STR    IS NOT NULL
1539                                 OR  l_old_rows( orow_ix ).ATTR_DISP_VALUE   IS NOT NULL
1540                             THEN
1541                                 l_merged_rows( l_mrow_ix ).ATTR_VALUE_STR       := l_old_rows( orow_ix ).ATTR_VALUE_STR;
1542                                 l_merged_rows( l_mrow_ix ).ATTR_DISP_VALUE      := l_old_rows( orow_ix ).ATTR_DISP_VALUE;
1543                                 l_merged_rows( l_mrow_ix ).ATTR_VALUE_UOM       := l_old_rows( orow_ix ).ATTR_VALUE_UOM;
1544                                 l_merged_rows( l_mrow_ix ).ATTR_UOM_DISP_VALUE  := l_old_rows( orow_ix ).ATTR_UOM_DISP_VALUE;
1545                             END IF;
1546                         WHEN l_data_type_code = 'X' or l_data_type_code = 'Y' THEN      -- Date Attribute
1547                             IF      l_old_rows( orow_ix ).ATTR_VALUE_DATE   IS NOT NULL
1548                                 OR  l_old_rows( orow_ix ).ATTR_DISP_VALUE   IS NOT NULL
1549                             THEN
1550                                 l_merged_rows( l_mrow_ix ).ATTR_VALUE_DATE      := l_old_rows( orow_ix ).ATTR_VALUE_DATE;
1551                                 l_merged_rows( l_mrow_ix ).ATTR_DISP_VALUE      := l_old_rows( orow_ix ).ATTR_DISP_VALUE;
1552                                 l_merged_rows( l_mrow_ix ).ATTR_VALUE_UOM       := l_old_rows( orow_ix ).ATTR_VALUE_UOM;
1553                                 l_merged_rows( l_mrow_ix ).ATTR_UOM_DISP_VALUE  := l_old_rows( orow_ix ).ATTR_UOM_DISP_VALUE;
1554                             END IF;
1555                         WHEN l_data_type_code = 'N' THEN                                -- Num Attribute
1556                             IF      l_old_rows( orow_ix ).ATTR_VALUE_NUM    IS NOT NULL
1557                                 OR  l_old_rows( orow_ix ).ATTR_DISP_VALUE   IS NOT NULL
1558                             THEN
1559                                 l_merged_rows( l_mrow_ix ).ATTR_VALUE_NUM       := l_old_rows( orow_ix ).ATTR_VALUE_NUM;
1560                                 l_merged_rows( l_mrow_ix ).ATTR_DISP_VALUE      := l_old_rows( orow_ix ).ATTR_DISP_VALUE;
1561                                 l_merged_rows( l_mrow_ix ).ATTR_VALUE_UOM       := l_old_rows( orow_ix ).ATTR_VALUE_UOM;
1562                                 l_merged_rows( l_mrow_ix ).ATTR_UOM_DISP_VALUE  := l_old_rows( orow_ix ).ATTR_UOM_DISP_VALUE;
1563                             END IF;
1564                     END CASE;
1565                 END IF;
1566 
1567                 -- Non-special cased
1568                 -- Start Generated Code
1569                 /* Generated using:
1570                     SET LINESIZE 200
1571                     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; '
1572                     FROM    ALL_TAB_COLUMNS
1573                     WHERE   TABLE_NAME = 'EGO_ITM_USR_ATTR_INTRFC'
1574                     AND COLUMN_NAME NOT IN
1575                         ( -- special cases (for merge)
1576                           'INVENTORY_ITEM_ID'
1577                         , 'ITEM_NUMBER'
1578                         , 'ORGANIZATION_ID'
1579                         , 'ORGANIZATION_CODE'
1580                         , 'TRANSACTION_TYPE'
1581                         , 'REVISION_ID' -- ignore for item-level attrs
1582                         , 'REVISION'    -- ignore for item-level attrs
1583                         , 'ATTR_INT_NAME'
1584                         , 'ATTR_GROUP_INT_NAME'
1585                         , 'ATTR_DISP_VALUE'
1586                         , 'ATTR_VALUE_STR'
1587                         , 'ATTR_VALUE_DATE'
1588                         , 'ATTR_VALUE_NUM'
1589                         , 'ATTR_VALUE_UOM'
1590                         , 'ATTR_UOM_DISP_VALUE'
1591                         , 'ATTR_GROUP_ID' -- ignore; assume will be filled during processing
1592                           -- special columns
1593                         , 'DATA_SET_ID'
1594                         , 'PROCESS_STATUS'
1595                         , 'SOURCE_SYSTEM_ID'
1596                         , 'SOURCE_SYSTEM_REFERENCE'
1597                         , 'INTERFACE_TABLE_UNIQUE_ID' -- should be handled by INSERT trigger
1598                           -- who columns
1599                         , 'LAST_UPDATE_DATE'
1600                         , 'CREATION_DATE'
1601                         , 'CREATED_BY'
1602                         , 'LAST_UPDATED_BY'
1603                         , 'LAST_UPDATE_LOGIN'
1604                           -- XXX: exclude concurrent processing columns?
1605                         )
1606                     ORDER BY COLUMN_NAME ASC
1607                 */
1608                 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;
1609                 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;
1610                 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;
1611                 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;
1612                 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;
1613                 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;
1614                 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;
1615                 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;
1616                 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;
1617                 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;
1618                 -- End Generated Code
1619             END LOOP; -- loop over old rows
1620 
1621             /*
1622             -- XXX: In case only null/invalid transaction types encountered, set transaction type to SYNC ?.
1623             IF l_merged_rows( l_mrow_ix ).TRANSACTION_TYPE IS NULL THEN
1624                 l_merged_rows( l_mrow_ix ).TRANSACTION_TYPE := G_TRANS_TYPE_SYNC;
1625             END IF;
1626             */
1627             IF l_merged_rows IS NOT NULL THEN
1628                 -- delete
1629                 Debug_Conc_Log( l_proc_log_prefix || l_old_rowids.COUNT || ' old rows ...' );
1630                 FORALL rid_ix IN INDICES OF l_old_rowids
1631                     DELETE FROM EGO_ITM_USR_ATTR_INTRFC
1632                         WHERE ROWID = l_old_rowids( rid_ix );
1633                 -- insert
1634                 Debug_Conc_Log( l_proc_log_prefix || l_merged_rows.COUNT || ' merged rows ...' );
1635                 FORALL row_index IN INDICES OF l_merged_rows
1636                     INSERT INTO EGO_ITM_USR_ATTR_INTRFC
1637                         VALUES l_merged_rows( row_index );
1638             END IF;
1639         END IF; -- ENDS IF l_old_rows.count <> 0
1640 
1641         IF p_commit = FND_API.G_TRUE THEN
1642             Debug_Conc_Log( l_proc_log_prefix || 'Committing' );
1643             COMMIT;
1644         END IF;
1645         Debug_Conc_Log( l_proc_log_prefix || 'Exiting' );
1646     END merge_item_attrs;
1647 
1648     PROCEDURE merge_items( p_batch_id       IN NUMBER
1649                          , p_is_pdh_batch   IN FLAG
1650                          , p_ss_id          IN NUMBER   DEFAULT NULL
1651                          , p_master_org_id  IN NUMBER   DEFAULT NULL
1652                          , p_commit         IN FLAG     DEFAULT FND_API.G_FALSE
1653                          )
1654     IS
1655         TYPE MSII_ROWS      IS TABLE OF MSII_ROW INDEX BY BINARY_INTEGER;
1656 
1657         /*
1658          * This cursor is never executed.
1659          * It's only used for type definition.
1660          */
1661         CURSOR c_target_rec_type IS
1662             SELECT ROWID rid
1663                  , 0     cnt
1664                  , 0     rnk
1665                  , 'N'   excluded_flag
1666                  , msii.*
1667             FROM MTL_SYSTEM_ITEMS_INTERFACE msii;
1668 
1669         /*
1670          * Types for fetching the rows to merged.
1671          */
1672         TYPE MSII_CURSOR    IS REF CURSOR;
1673         c_target_rows       MSII_CURSOR;
1674         old_row             c_target_rec_type%ROWTYPE;
1675 
1676         l_merged_rows   MSII_ROWS;
1677         l_merge_base    MSII_ROW;
1678         l_old_rowids    UROWID_TABLE;
1679 
1680         l_ss_id         MTL_SYSTEM_ITEMS_INTERFACE.SOURCE_SYSTEM_ID%TYPE := p_ss_id;
1681         l_ssr           MTL_SYSTEM_ITEMS_INTERFACE.SOURCE_SYSTEM_REFERENCE%TYPE;
1682         l_candidate_trans MTL_SYSTEM_ITEMS_INTERFACE.TRANSACTION_TYPE%TYPE;
1683 
1684         l_cur_rank      PLS_INTEGER := 0; -- because rank() starts at 1
1685         l_mrow_ix       PLS_INTEGER := 0;
1686         l_is_pdh_batch  BOOLEAN;
1687         l_excluded_flag VARCHAR2(1);
1688 
1689         l_org_id        MTL_SYSTEM_ITEMS_INTERFACE.ORGANIZATION_ID%TYPE := p_master_org_id;
1690         l_pdh_batch_flag FLAG := p_is_pdh_batch;
1691         l_proc_log_prefix     CONSTANT VARCHAR2( 30 ) := 'merge_items - ';
1692 
1693 		--bug 14347548 add for compilation error start
1694 		l_msg_text          VARCHAR2(4000);
1695         dumm_status         VARCHAR2(100);
1696         l_user_id           NUMBER := FND_GLOBAL.USER_ID;
1697         l_login_id          NUMBER := FND_GLOBAL.LOGIN_ID;
1698         l_prog_appid        NUMBER := FND_GLOBAL.PROG_APPL_ID;
1699         l_prog_id           NUMBER := FND_GLOBAL.CONC_PROGRAM_ID;
1700         l_request_id        NUMBER := FND_GLOBAL.CONC_REQUEST_ID;
1701         l_err_text          VARCHAR2(4000);
1702 		--bug 14347548 add for compilation error end
1703 
1704 
1705     BEGIN
1706         Debug_Conc_Log( l_proc_log_prefix || 'Entering' );
1707         Debug_Conc_Log( l_proc_log_prefix || 'Batch ID: ' || p_batch_id );
1708         IF  l_pdh_batch_flag IS NULL OR l_org_id IS NULL OR l_ss_id IS NULL THEN
1709             merge_params_from_batch_header( p_batch_id      => p_batch_id
1710                                           , x_is_pdh_batch  => l_pdh_batch_flag
1711                                           , x_master_org_id => l_org_id
1712                                           , x_ss_id         => l_ss_id
1713                                           );
1714         END IF;
1715         Debug_Conc_Log( l_proc_log_prefix || 'Master Org ID: ' || l_org_id );
1716         Debug_Conc_Log( l_proc_log_prefix || 'SS ID: '         || l_ss_id );
1717         Debug_Conc_Log( l_proc_log_prefix || 'Is PDH Batch?: ' || l_pdh_batch_flag );
1718 
1719         l_is_pdh_batch  := ( l_pdh_batch_flag = FND_API.G_TRUE );
1720         IF  l_is_pdh_batch THEN
1721             OPEN c_target_rows FOR
1722                 SELECT  *
1723                 FROM
1724                     ( SELECT
1725                         ROWID rid,
1726                         COUNT( * ) OVER ( PARTITION BY  ITEM_NUMBER
1727                                                     ,   ORGANIZATION_ID
1728                                         )
1729                         cnt
1730                         , RANK() OVER   ( ORDER BY      ITEM_NUMBER
1731                                                     ,   ORGANIZATION_ID
1732                                         )
1733                         rnk
1734                         , null EXCLUDED_FLAG
1735                         , msii.*
1736                     FROM MTL_SYSTEM_ITEMS_INTERFACE msii
1737                     WHERE   PROCESS_FLAG        = 1
1738                         AND SET_PROCESS_ID      = p_batch_id
1739                         AND (   SOURCE_SYSTEM_ID    IS NULL
1740                             OR  SOURCE_SYSTEM_ID    = G_PDH_SOURCE_SYSTEM_ID
1741                             )
1742                         AND ITEM_NUMBER         IS NOT NULL
1743                         AND ORGANIZATION_ID     IS NOT NULL
1744                         AND EXISTS ( SELECT NULL
1745                                      FROM   MTL_PARAMETERS mp
1746                                      WHERE  mp.ORGANIZATION_ID          = msii.ORGANIZATION_ID
1747                                        AND  mp.MASTER_ORGANIZATION_ID   = l_org_id
1748                                    )
1749                     )
1750                     sub
1751                 WHERE sub.cnt > 1
1752                 ORDER BY rnk, last_update_date DESC NULLS LAST, interface_table_unique_id DESC NULLS LAST;
1753         ELSE
1754             OPEN c_target_rows FOR
1755                 SELECT  *
1756                 FROM
1757                     ( SELECT
1758                         ROWID rid,
1759                         COUNT( * ) OVER ( PARTITION BY  SOURCE_SYSTEM_ID
1760                                                     ,   SOURCE_SYSTEM_REFERENCE
1761                                                     ,   ORGANIZATION_ID
1762                                         )
1763                         cnt
1764                         , RANK() OVER   ( ORDER BY      SOURCE_SYSTEM_ID
1765                                                     ,   SOURCE_SYSTEM_REFERENCE
1766                                                     ,   ORGANIZATION_ID
1767                                         )
1768                         rnk
1769                         , ( SELECT 'Y' FROM DUAL
1770                             WHERE EXISTS (
1771                                           SELECT NULL FROM EGO_IMPORT_EXCLUDED_SS_ITEMS
1772                                           WHERE SOURCE_SYSTEM_REFERENCE = MSII.SOURCE_SYSTEM_REFERENCE
1773                                             AND SOURCE_SYSTEM_ID = MSII.SOURCE_SYSTEM_ID
1774                                          )
1775                           )
1776                         EXCLUDED_FLAG
1777                         , msii.*
1778                     FROM MTL_SYSTEM_ITEMS_INTERFACE msii
1779                     WHERE   PROCESS_FLAG        = 0
1780                         AND SET_PROCESS_ID      = p_batch_id
1781                         AND SOURCE_SYSTEM_ID    = l_ss_id
1782                         AND SOURCE_SYSTEM_REFERENCE IS NOT NULL
1783                         AND ORGANIZATION_ID         IS NOT NULL
1784                         AND EXISTS ( SELECT NULL
1785                                      FROM   MTL_PARAMETERS mp
1786                                      WHERE  mp.ORGANIZATION_ID          = msii.ORGANIZATION_ID
1787                                        AND  mp.MASTER_ORGANIZATION_ID   = l_org_id
1788                                    )
1789                     )
1790                     sub
1791                 WHERE sub.cnt > 1
1792                 ORDER BY rnk, last_update_date DESC NULLS LAST, interface_table_unique_id DESC NULLS LAST;
1793         END IF;
1794 
1795         -- attributes common to every merged row
1796         l_merge_base.SET_PROCESS_ID := p_batch_id;
1797         l_merge_base.PROCESS_FLAG   := CASE WHEN l_is_pdh_batch THEN 1 ELSE 0 END;
1798 
1799         l_old_rowids := UROWID_TABLE( );
1800         LOOP
1801             FETCH c_target_rows INTO old_row;
1802             EXIT WHEN c_target_rows%NOTFOUND;
1803 
1804             l_old_rowids.EXTEND;
1805             l_old_rowids( l_old_rowids.LAST ) := old_row.RID;
1806 
1807             IF( old_row.RNK <> l_cur_rank ) THEN
1808                 IF( l_cur_rank <> 0 AND NOT l_is_pdh_batch) THEN
1809                     IF( l_merged_rows(l_mrow_ix).CONFIRM_STATUS NOT IN ( G_UNCONF_NONE_MATCH, G_UNCONF_SIGL_MATCH, G_UNCONF_MULT_MATCH  )
1810                         AND l_merged_rows(l_mrow_ix).TRANSACTION_TYPE = G_TRANS_TYPE_CREATE )
1811                     THEN
1812                         l_merged_rows(l_mrow_ix).CONFIRM_STATUS := G_CONF_NEW;
1813                     END IF;
1814                     IF( l_excluded_flag IS NOT NULL ) THEN
1815                         l_merged_rows( l_mrow_ix ).CONFIRM_STATUS := G_EXCLUDED;
1816                     END IF;
1817                 END IF; --IF( l_cur_rank <> 0 AND NOT l_is_pdh_batch)
1818 
1819                 l_cur_rank := old_row.RNK;
1820                 Debug_Conc_Log( l_proc_log_prefix || '  Starting new merged row; rank = '|| l_cur_rank );
1821                 l_mrow_ix := l_mrow_ix + 1;
1822                 l_merged_rows( l_mrow_ix ) := l_merge_base;
1823                 IF NOT l_is_pdh_batch THEN
1824                     l_merged_rows( l_mrow_ix ).SOURCE_SYSTEM_ID          := old_row.SOURCE_SYSTEM_ID;
1825                     l_merged_rows( l_mrow_ix ).SOURCE_SYSTEM_REFERENCE   := old_row.SOURCE_SYSTEM_REFERENCE;
1826                     Debug_Conc_Log( l_proc_log_prefix || '   Source System Reference: ' || l_merged_rows( l_mrow_ix ).SOURCE_SYSTEM_REFERENCE );
1827     ELSE
1828                    /* Bug 7662239. Updating SOURCE_SYSTEM_ID if the batch is a PDH batch */
1829                    l_merged_rows( l_mrow_ix ).SOURCE_SYSTEM_ID          := old_row.SOURCE_SYSTEM_ID;
1830                 END IF;
1831             ELSE
1832                 Debug_Conc_Log( l_proc_log_prefix || '  Merging another record into current merged row; rank = '|| l_cur_rank );
1833             END IF;
1834 
1835             -- Special Cases:
1836             -- Transaction type
1837             l_candidate_trans := UPPER( old_row.TRANSACTION_TYPE );
1838             l_excluded_flag := old_row.EXCLUDED_FLAG;
1839 
1840             IF      l_merged_rows( l_mrow_ix ).TRANSACTION_TYPE IS NULL
1841                 OR  l_merged_rows( l_mrow_ix ).TRANSACTION_TYPE <> l_candidate_trans     -- <> filters out nulls
1842             THEN
1843                 -- CREATE > SYNC > UPDATE : order of case expression matters
1844                 l_merged_rows( l_mrow_ix ).TRANSACTION_TYPE :=
1845                     CASE
1846                         WHEN l_merged_rows( l_mrow_ix ).TRANSACTION_TYPE = G_TRANS_TYPE_CREATE
1847                           OR l_candidate_trans = G_TRANS_TYPE_CREATE                            THEN G_TRANS_TYPE_CREATE
1848                         WHEN l_merged_rows( l_mrow_ix ).TRANSACTION_TYPE = G_TRANS_TYPE_SYNC
1849                           OR l_candidate_trans = G_TRANS_TYPE_SYNC                              THEN G_TRANS_TYPE_SYNC
1850                         WHEN l_merged_rows( l_mrow_ix ).TRANSACTION_TYPE = G_TRANS_TYPE_UPDATE
1851                           OR l_candidate_trans = G_TRANS_TYPE_UPDATE                            THEN G_TRANS_TYPE_UPDATE
1852                         ELSE NULL -- INVALID transaction types encountered so far ...
1853                     END;
1854             END IF;
1855             Debug_Conc_Log('The Old - item columns are - ' || old_row.INVENTORY_ITEM_ID || ' -- ' || old_row.CONFIRM_STATUS );
1856 
1857             -- The following columns need to be treated as atomic groups
1858             -- 1. Item Identifier
1859             IF      l_merged_rows( l_mrow_ix ).INVENTORY_ITEM_ID  IS NULL
1860                 AND l_merged_rows( l_mrow_ix ).ITEM_NUMBER        IS NULL
1861                 AND l_merged_rows( l_mrow_ix ).SEGMENT1           IS NULL
1862                 AND l_merged_rows( l_mrow_ix ).SEGMENT2           IS NULL
1863                 AND l_merged_rows( l_mrow_ix ).SEGMENT3           IS NULL
1864                 AND l_merged_rows( l_mrow_ix ).SEGMENT4           IS NULL
1865                 AND l_merged_rows( l_mrow_ix ).SEGMENT5           IS NULL
1866                 AND l_merged_rows( l_mrow_ix ).SEGMENT6           IS NULL
1867                 AND l_merged_rows( l_mrow_ix ).SEGMENT7           IS NULL
1868                 AND l_merged_rows( l_mrow_ix ).SEGMENT8           IS NULL
1869                 AND l_merged_rows( l_mrow_ix ).SEGMENT9           IS NULL
1870                 AND l_merged_rows( l_mrow_ix ).SEGMENT10          IS NULL
1871                 AND l_merged_rows( l_mrow_ix ).SEGMENT11          IS NULL
1872                 AND l_merged_rows( l_mrow_ix ).SEGMENT12          IS NULL
1873                 AND l_merged_rows( l_mrow_ix ).SEGMENT13          IS NULL
1874                 AND l_merged_rows( l_mrow_ix ).SEGMENT14          IS NULL
1875                 AND l_merged_rows( l_mrow_ix ).SEGMENT15          IS NULL
1876                 AND l_merged_rows( l_mrow_ix ).SEGMENT16          IS NULL
1877                 AND l_merged_rows( l_mrow_ix ).SEGMENT17          IS NULL
1878                 AND l_merged_rows( l_mrow_ix ).SEGMENT18          IS NULL
1879                 AND l_merged_rows( l_mrow_ix ).SEGMENT19          IS NULL
1880                 AND l_merged_rows( l_mrow_ix ).SEGMENT20          IS NULL
1881             THEN
1882                 l_merged_rows( l_mrow_ix ).INVENTORY_ITEM_ID  := old_row.INVENTORY_ITEM_ID;
1883                 l_merged_rows( l_mrow_ix ).ITEM_NUMBER        := old_row.ITEM_NUMBER;
1884                 l_merged_rows( l_mrow_ix ).SEGMENT1           := old_row.SEGMENT1;
1885                 l_merged_rows( l_mrow_ix ).SEGMENT2           := old_row.SEGMENT2;
1886                 l_merged_rows( l_mrow_ix ).SEGMENT3           := old_row.SEGMENT3;
1887                 l_merged_rows( l_mrow_ix ).SEGMENT4           := old_row.SEGMENT4;
1888                 l_merged_rows( l_mrow_ix ).SEGMENT5           := old_row.SEGMENT5;
1889                 l_merged_rows( l_mrow_ix ).SEGMENT6           := old_row.SEGMENT6;
1890                 l_merged_rows( l_mrow_ix ).SEGMENT7           := old_row.SEGMENT7;
1891                 l_merged_rows( l_mrow_ix ).SEGMENT8           := old_row.SEGMENT8;
1892                 l_merged_rows( l_mrow_ix ).SEGMENT9           := old_row.SEGMENT9;
1893                 l_merged_rows( l_mrow_ix ).SEGMENT10          := old_row.SEGMENT10;
1894                 l_merged_rows( l_mrow_ix ).SEGMENT11          := old_row.SEGMENT11;
1895                 l_merged_rows( l_mrow_ix ).SEGMENT12          := old_row.SEGMENT12;
1896                 l_merged_rows( l_mrow_ix ).SEGMENT13          := old_row.SEGMENT13;
1897                 l_merged_rows( l_mrow_ix ).SEGMENT14          := old_row.SEGMENT14;
1898                 l_merged_rows( l_mrow_ix ).SEGMENT15          := old_row.SEGMENT15;
1899                 l_merged_rows( l_mrow_ix ).SEGMENT16          := old_row.SEGMENT16;
1900                 l_merged_rows( l_mrow_ix ).SEGMENT17          := old_row.SEGMENT17;
1901                 l_merged_rows( l_mrow_ix ).SEGMENT18          := old_row.SEGMENT18;
1902                 l_merged_rows( l_mrow_ix ).SEGMENT19          := old_row.SEGMENT19;
1903                 l_merged_rows( l_mrow_ix ).SEGMENT20          := old_row.SEGMENT20;
1904                 -- Copying Confirm Status
1905                 -- If confirm_Status is fake make it real else copy the old confirm_status.
1906                 IF( old_row.CONFIRM_STATUS = G_CONF_XREF_FAKE ) THEN
1907                    l_merged_rows( l_mrow_ix ).CONFIRM_STATUS := G_CONF_XREF;
1908                 ELSIF ( old_row.CONFIRM_STATUS = G_CONF_MATCH_FAKE ) THEN
1909                    l_merged_rows( l_mrow_ix ).CONFIRM_STATUS := G_CONF_MATCH;
1910                 ELSIF ( old_row.CONFIRM_STATUS = G_FAKE_MATCH_READY ) THEN
1911                    l_merged_rows( l_mrow_ix ).CONFIRM_STATUS := G_CONF_MATCH_READY;
1912                 ELSIF ( old_row.CONFIRM_STATUS = G_UNCONF_SINGLE_MATCH_FAKE ) THEN
1913                    l_merged_rows( l_mrow_ix ).CONFIRM_STATUS := G_UNCONF_SIGL_MATCH;
1914                 ELSIF ( old_row.CONFIRM_STATUS = G_UNCONF_MULTI_MATCH_FAKE ) THEN
1915                    l_merged_rows( l_mrow_ix ).CONFIRM_STATUS := G_UNCONF_MULT_MATCH;
1916                 ELSIF ( old_row.CONFIRM_STATUS = G_FAKE_EXCLUDED ) THEN
1917                    l_merged_rows( l_mrow_ix ).CONFIRM_STATUS := G_EXCLUDED;
1918                 ELSIF ( old_row.CONFIRM_STATUS = G_FAKE_CONF_STATUS_FLAG ) THEN
1919                    l_merged_rows( l_mrow_ix ).CONFIRM_STATUS := NULL;
1920                 ELSE
1921                    l_merged_rows( l_mrow_ix ).CONFIRM_STATUS := old_row.CONFIRM_STATUS;
1922                 END IF;
1923             END IF;
1924 
1925             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 );
1926 
1927             -- 2. Template Identifier
1928             IF      l_merged_rows( l_mrow_ix ).TEMPLATE_ID        IS NULL
1929                 AND l_merged_rows( l_mrow_ix ).TEMPLATE_NAME      IS NULL
1930             THEN
1931                 l_merged_rows( l_mrow_ix ).TEMPLATE_ID    := old_row.TEMPLATE_ID ;
1932                 l_merged_rows( l_mrow_ix ).TEMPLATE_NAME  := old_row.TEMPLATE_NAME ;
1933             END IF;
1934 
1935             -- 3. Item Catalog Category
1936             IF      l_merged_rows( l_mrow_ix ).ITEM_CATALOG_GROUP_ID      IS NULL
1937                 AND l_merged_rows( l_mrow_ix ).ITEM_CATALOG_GROUP_NAME    IS NULL
1938             THEN
1939                 l_merged_rows( l_mrow_ix ).ITEM_CATALOG_GROUP_ID      := old_row.ITEM_CATALOG_GROUP_ID ;
1940                 l_merged_rows( l_mrow_ix ).ITEM_CATALOG_GROUP_NAME    := old_row.ITEM_CATALOG_GROUP_NAME ;
1941             END IF;
1942 
1943             -- 4. Primary UOM
1944             IF      l_merged_rows( l_mrow_ix ).PRIMARY_UOM_CODE           IS NULL
1945                 AND l_merged_rows( l_mrow_ix ).PRIMARY_UNIT_OF_MEASURE    IS NULL
1946             THEN
1947                 l_merged_rows( l_mrow_ix ).PRIMARY_UOM_CODE           := old_row.PRIMARY_UOM_CODE ;
1948                 l_merged_rows( l_mrow_ix ).PRIMARY_UNIT_OF_MEASURE    := old_row.PRIMARY_UNIT_OF_MEASURE ;
1949             END IF;
1950 
1951             -- 5. Organization
1952             IF      l_merged_rows( l_mrow_ix ).ORGANIZATION_ID    IS NULL
1953                 AND l_merged_rows( l_mrow_ix ).ORGANIZATION_CODE  IS NULL
1954             THEN
1955                 l_merged_rows( l_mrow_ix ).ORGANIZATION_ID        := old_row.ORGANIZATION_ID ;
1956                 l_merged_rows( l_mrow_ix ).ORGANIZATION_CODE      := old_row.ORGANIZATION_CODE ;
1957             END IF;
1958 
1959             -- 6. Copy Organization
1960             IF      l_merged_rows( l_mrow_ix ).COPY_ORGANIZATION_ID    IS NULL
1961                 AND l_merged_rows( l_mrow_ix ).COPY_ORGANIZATION_CODE  IS NULL
1962             THEN
1963                 l_merged_rows( l_mrow_ix ).COPY_ORGANIZATION_ID        := old_row.COPY_ORGANIZATION_ID ;
1964                 l_merged_rows( l_mrow_ix ).COPY_ORGANIZATION_CODE      := old_row.COPY_ORGANIZATION_CODE ;
1965             END IF;
1966 
1967             -- 7. Merging StyleItemNumber and SytleItemFlag
1968             IF      l_merged_rows( l_mrow_ix ).STYLE_ITEM_NUMBER IS NULL
1969                 AND l_merged_rows( l_mrow_ix ).STYLE_ITEM_FLAG   IS NULL
1970             THEN
1971                 l_merged_rows( l_mrow_ix ).STYLE_ITEM_NUMBER := old_row.STYLE_ITEM_NUMBER;
1972                 l_merged_rows( l_mrow_ix ).STYLE_ITEM_FLAG   := old_row.STYLE_ITEM_FLAG;
1973             END IF;
1974 
1975             /* ELETUCHY: commented out due to the regressions this code would introduce
1976             --Bug.5336962 Begin (Nisar) -> Copy Confirm Status
1977             -- If old row that is to be merged is fake, we don't copy the ConfirmStatus or we make confirm status null
1978             -- If old row already have non fake ConfirmStatus we copy it as it is.
1979             IF      l_merged_rows( l_mrow_ix ).CONFIRM_STATUS IS NULL
1980                 AND old_row.CONFIRM_STATUS NOT IN ('CFC', 'CFM', 'FMR', 'UFS', 'UFM', 'FK', 'FEX')
1981             THEN
1982                 l_merged_rows( l_mrow_ix ).CONFIRM_STATUS := old_row.CONFIRM_STATUS;
1983             END IF;
1984             --Bug.5336962 End
1985             */
1986 
1987             -- Non-special-cased
1988             -- Starting generated code
1989             /* generate using the following script:
1990                 SET LINESIZE 200
1991                 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; '
1992                 FROM    ALL_TAB_COLUMNS
1993                 WHERE   TABLE_NAME = 'MTL_SYSTEM_ITEMS_INTERFACE'
1994                 AND COLUMN_NAME NOT IN
1995                     ( -- special cases (for merge)
1996                       'INVENTORY_ITEM_ID'
1997                     , 'ITEM_NUMBER'
1998                     , 'SEGMENT1'
1999                     , 'SEGMENT2'
2000                     , 'SEGMENT3'
2001                     , 'SEGMENT4'
2002                     , 'SEGMENT5'
2003                     , 'SEGMENT6'
2004                     , 'SEGMENT7'
2005                     , 'SEGMENT8'
2006                     , 'SEGMENT9'
2007                     , 'SEGMENT10'
2008                     , 'SEGMENT11'
2009                     , 'SEGMENT12'
2010                     , 'SEGMENT13'
2011                     , 'SEGMENT14'
2012                     , 'SEGMENT15'
2013                     , 'SEGMENT16'
2014                     , 'SEGMENT17'
2015                     , 'SEGMENT18'
2016                     , 'SEGMENT19'
2017                     , 'SEGMENT20'
2018                     , 'TRANSACTION_TYPE'
2019                     , 'TEMPLATE_ID'
2020                     , 'TEMPLATE_NAME'
2021                     , 'ITEM_CATALOG_GROUP_ID'
2022                     , 'ITEM_CATALOG_GROUP_NAME'
2023                     , 'PRIMARY_UOM_CODE'
2024                     , 'PRIMARY_UNIT_OF_MEASURE'
2025                     , 'ORGANIZATION_ID'
2026                     , 'ORGANIZATION_CODE'
2027                     , 'COPY_ORGANIZATION_ID'
2028                     , 'COPY_ORGANIZATION_CODE'
2029                       -- special columns
2030                     , 'SET_PROCESS_ID'
2031                     , 'PROCESS_FLAG'
2032                     , 'SOURCE_SYSTEM_ID'
2033                     , 'SOURCE_SYSTEM_REFERENCE'
2034                     , 'INTERFACE_TABLE_UNIQUE_ID' -- handled by INSERT trigger
2035                     , 'CONFIRM_STATUS'            -- should always be left null after a MERGE is performed
2036                       -- who columns
2037                     , 'LAST_UPDATE_DATE'
2038                     , 'CREATION_DATE'
2039                     , 'CREATED_BY'
2040                     , 'LAST_UPDATED_BY'
2041                     , 'LAST_UPDATE_LOGIN'
2042                       -- XXX: exclude concurrent processing columns?
2043                     )
2044                 order by column_name asc;
2045             */
2046       /* Bug 7662239. Added TRADE_ITEM_DESCRIPTOR to consider it while merging the two rows */
2047             if l_merged_rows( l_mrow_ix ).TRADE_ITEM_DESCRIPTOR is null then l_merged_rows( l_mrow_ix ).TRADE_ITEM_DESCRIPTOR := old_row.TRADE_ITEM_DESCRIPTOR; end if;
2048       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;
2049             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;
2050             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;
2051             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;
2052             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;
2053             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;
2054             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;
2055             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;
2056             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;
2057             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;
2058             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;
2059             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;
2060             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;
2061             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;
2062             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;
2063             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;
2064             if l_merged_rows( l_mrow_ix ).ATTRIBUTE1 is null then l_merged_rows( l_mrow_ix ).ATTRIBUTE1 := old_row.ATTRIBUTE1; end if;
2065             if l_merged_rows( l_mrow_ix ).ATTRIBUTE10 is null then l_merged_rows( l_mrow_ix ).ATTRIBUTE10 := old_row.ATTRIBUTE10; end if;
2066             if l_merged_rows( l_mrow_ix ).ATTRIBUTE11 is null then l_merged_rows( l_mrow_ix ).ATTRIBUTE11 := old_row.ATTRIBUTE11; end if;
2067             if l_merged_rows( l_mrow_ix ).ATTRIBUTE12 is null then l_merged_rows( l_mrow_ix ).ATTRIBUTE12 := old_row.ATTRIBUTE12; end if;
2068             if l_merged_rows( l_mrow_ix ).ATTRIBUTE13 is null then l_merged_rows( l_mrow_ix ).ATTRIBUTE13 := old_row.ATTRIBUTE13; end if;
2069             if l_merged_rows( l_mrow_ix ).ATTRIBUTE14 is null then l_merged_rows( l_mrow_ix ).ATTRIBUTE14 := old_row.ATTRIBUTE14; end if;
2070             if l_merged_rows( l_mrow_ix ).ATTRIBUTE15 is null then l_merged_rows( l_mrow_ix ).ATTRIBUTE15 := old_row.ATTRIBUTE15; end if;
2071             if l_merged_rows( l_mrow_ix ).ATTRIBUTE16 is null then l_merged_rows( l_mrow_ix ).ATTRIBUTE16 := old_row.ATTRIBUTE16; end if;
2072             if l_merged_rows( l_mrow_ix ).ATTRIBUTE17 is null then l_merged_rows( l_mrow_ix ).ATTRIBUTE17 := old_row.ATTRIBUTE17; end if;
2073             if l_merged_rows( l_mrow_ix ).ATTRIBUTE18 is null then l_merged_rows( l_mrow_ix ).ATTRIBUTE18 := old_row.ATTRIBUTE18; end if;
2074             if l_merged_rows( l_mrow_ix ).ATTRIBUTE19 is null then l_merged_rows( l_mrow_ix ).ATTRIBUTE19 := old_row.ATTRIBUTE19; end if;
2075             if l_merged_rows( l_mrow_ix ).ATTRIBUTE2 is null then l_merged_rows( l_mrow_ix ).ATTRIBUTE2 := old_row.ATTRIBUTE2; end if;
2076             if l_merged_rows( l_mrow_ix ).ATTRIBUTE20 is null then l_merged_rows( l_mrow_ix ).ATTRIBUTE20 := old_row.ATTRIBUTE20; end if;
2077             if l_merged_rows( l_mrow_ix ).ATTRIBUTE21 is null then l_merged_rows( l_mrow_ix ).ATTRIBUTE21 := old_row.ATTRIBUTE21; end if;
2078             if l_merged_rows( l_mrow_ix ).ATTRIBUTE22 is null then l_merged_rows( l_mrow_ix ).ATTRIBUTE22 := old_row.ATTRIBUTE22; end if;
2079             if l_merged_rows( l_mrow_ix ).ATTRIBUTE23 is null then l_merged_rows( l_mrow_ix ).ATTRIBUTE23 := old_row.ATTRIBUTE23; end if;
2080             if l_merged_rows( l_mrow_ix ).ATTRIBUTE24 is null then l_merged_rows( l_mrow_ix ).ATTRIBUTE24 := old_row.ATTRIBUTE24; end if;
2081             if l_merged_rows( l_mrow_ix ).ATTRIBUTE25 is null then l_merged_rows( l_mrow_ix ).ATTRIBUTE25 := old_row.ATTRIBUTE25; end if;
2082             if l_merged_rows( l_mrow_ix ).ATTRIBUTE26 is null then l_merged_rows( l_mrow_ix ).ATTRIBUTE26 := old_row.ATTRIBUTE26; end if;
2083             if l_merged_rows( l_mrow_ix ).ATTRIBUTE27 is null then l_merged_rows( l_mrow_ix ).ATTRIBUTE27 := old_row.ATTRIBUTE27; end if;
2084             if l_merged_rows( l_mrow_ix ).ATTRIBUTE28 is null then l_merged_rows( l_mrow_ix ).ATTRIBUTE28 := old_row.ATTRIBUTE28; end if;
2085             if l_merged_rows( l_mrow_ix ).ATTRIBUTE29 is null then l_merged_rows( l_mrow_ix ).ATTRIBUTE29 := old_row.ATTRIBUTE29; end if;
2086             if l_merged_rows( l_mrow_ix ).ATTRIBUTE3 is null then l_merged_rows( l_mrow_ix ).ATTRIBUTE3 := old_row.ATTRIBUTE3; end if;
2087             if l_merged_rows( l_mrow_ix ).ATTRIBUTE30 is null then l_merged_rows( l_mrow_ix ).ATTRIBUTE30 := old_row.ATTRIBUTE30; end if;
2088             if l_merged_rows( l_mrow_ix ).ATTRIBUTE4 is null then l_merged_rows( l_mrow_ix ).ATTRIBUTE4 := old_row.ATTRIBUTE4; end if;
2089             if l_merged_rows( l_mrow_ix ).ATTRIBUTE5 is null then l_merged_rows( l_mrow_ix ).ATTRIBUTE5 := old_row.ATTRIBUTE5; end if;
2090             if l_merged_rows( l_mrow_ix ).ATTRIBUTE6 is null then l_merged_rows( l_mrow_ix ).ATTRIBUTE6 := old_row.ATTRIBUTE6; end if;
2091             if l_merged_rows( l_mrow_ix ).ATTRIBUTE7 is null then l_merged_rows( l_mrow_ix ).ATTRIBUTE7 := old_row.ATTRIBUTE7; end if;
2092             if l_merged_rows( l_mrow_ix ).ATTRIBUTE8 is null then l_merged_rows( l_mrow_ix ).ATTRIBUTE8 := old_row.ATTRIBUTE8; end if;
2093             if l_merged_rows( l_mrow_ix ).ATTRIBUTE9 is null then l_merged_rows( l_mrow_ix ).ATTRIBUTE9 := old_row.ATTRIBUTE9; end if;
2094             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;
2095             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;
2096             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;
2097             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;
2098             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;
2099             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;
2100             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;
2101             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;
2102             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;
2103             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;
2104             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;
2105             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;
2106             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;
2107             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;
2108             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;
2109             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;
2110             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;
2111             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;
2112             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;
2113             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;
2114             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;
2115             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;
2116             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;
2117             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;
2118             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;
2119             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;
2120             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;
2121             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;
2122             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;
2123             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;
2124             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;
2125             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;
2126             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;
2127             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;
2128             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;
2129             if l_merged_rows( l_mrow_ix ).CONVERGENCE is null then l_merged_rows( l_mrow_ix ).CONVERGENCE := old_row.CONVERGENCE; end if;
2130             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;
2131             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;
2132             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;
2133             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;
2134             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;
2135             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;
2136             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;
2137             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;
2138             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;
2139             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;
2140             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;
2141             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;
2142             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;
2143             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;
2144             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;
2145             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;
2146             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;
2147             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;
2148             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;
2149             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;
2150             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;
2151             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;
2152             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;
2153             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;
2154             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;
2155             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;
2156             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;
2157             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;
2158             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;
2159             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;
2160             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;
2161             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;
2162             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;
2163             if l_merged_rows( l_mrow_ix ).DESCRIPTION is null then l_merged_rows( l_mrow_ix ).DESCRIPTION := old_row.DESCRIPTION; end if;
2164             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;
2165             if l_merged_rows( l_mrow_ix ).DIVERGENCE is null then l_merged_rows( l_mrow_ix ).DIVERGENCE := old_row.DIVERGENCE; end if;
2166             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;
2167             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;
2168             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;
2169             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;
2170             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;
2171             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;
2172             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;
2173             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;
2174             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;
2175             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;
2176             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;
2177             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;
2178             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;
2179             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;
2180             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;
2181             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;
2182             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;
2183             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;
2184             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;
2185             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;
2186             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;
2187             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;
2188             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;
2189             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;
2190             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;
2191             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;
2192             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;
2193             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;
2194             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;
2195             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;
2196             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;
2197             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;
2198             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;
2199             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;
2200             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;
2201             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;
2202             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;
2203             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;
2204             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;
2205             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;
2206             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;
2207             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;
2208             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;
2209             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;
2210             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;
2211             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;
2212             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;
2213             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;
2214             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;
2215             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;
2216             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;
2217             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;
2218             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;
2219             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;
2220             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;
2221             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;
2222             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;
2223             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;
2224             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;
2225             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;
2226             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;
2227             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;
2228             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;
2229             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;
2230             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;
2231             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;
2232             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;
2233             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;
2234             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;
2235             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;
2236             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;
2237             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;
2238             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;
2239             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;
2240             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;
2241             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;
2242             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;
2243             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;
2244             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;
2245             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;
2246             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;
2247             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;
2248             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;
2249             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;
2250             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;
2251             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;
2252             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;
2253             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;
2254             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;
2255             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;
2256             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;
2257             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;
2258             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;
2259             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;
2260             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;
2261             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;
2262             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;
2263             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;
2264             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;
2265             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;
2266             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;
2267             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;
2268             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;
2269             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;
2270             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;
2271             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;
2272             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;
2273             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;
2274             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;
2275             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;
2276             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;
2277             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;
2278             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;
2279             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;
2280             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;
2281             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;
2282             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;
2283             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;
2284             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;
2285             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;
2286             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;
2287             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;
2288             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;
2289             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;
2290             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;
2291             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;
2292             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;
2293             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;
2294             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;
2295             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;
2296             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;
2297             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;
2298             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;
2299             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;
2300             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;
2301             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;
2302             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;
2303             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;
2304             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;
2305             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;
2306             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;
2307             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;
2308             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;
2309             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;
2310             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;
2311             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;
2312             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;
2313             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;
2314             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;
2315             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;
2316             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;
2317             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;
2318             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;
2319             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;
2320             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;
2321             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;
2322             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;
2323             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;
2324             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;
2325             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;
2326             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;
2327             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;
2328             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;
2329             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;
2330             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;
2331             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;
2332             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;
2333             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;
2334             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;
2335             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;
2336             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;
2337             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;
2338             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;
2339             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;
2340             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;
2341             if l_merged_rows( l_mrow_ix ).REVISION is null then l_merged_rows( l_mrow_ix ).REVISION := old_row.REVISION; end if;
2342             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;
2343             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;
2344             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;
2345             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;
2346             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;
2347             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;
2348             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;
2349             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;
2350             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;
2351             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;
2352             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;
2353             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;
2354             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;
2355             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;
2356             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;
2357             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;
2358             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;
2359             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;
2360             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;
2361             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;
2362             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;
2363             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;
2364             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;
2365             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;
2366             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;
2367             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;
2368             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;
2369             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;
2370             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;
2371             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;
2372             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;
2373             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;
2374             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;
2375             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;
2376             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;
2377             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;
2378             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;
2379             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;
2380             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;
2381             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;
2382             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;
2383             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;
2384             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;
2385             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;
2386             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;
2387             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;
2388             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;
2389             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;
2390             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;
2391             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;
2392             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;
2393             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;
2394             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;
2395             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;
2396             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;
2397             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;
2398             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;
2399             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;
2400             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;
2401             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;
2402             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;
2403             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;
2404             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;
2405             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;
2406             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;
2407             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;
2408             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;
2409             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;
2410             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;
2411             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;
2412             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;
2413             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;
2414             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;
2415             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;
2416             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;
2417             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;
2418             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;
2419             -- end generated code
2420         END LOOP; -- over old rows
2421         /*
2422         -- XXX: In case only null/invalid transaction types encountered, set transaction type to SYNC ?.
2423         IF l_merged_rows( l_mrow_ix ).TRANSACTION_TYPE IS NULL THEN
2424             l_merged_rows( l_mrow_ix ).TRANSACTION_TYPE := G_TRANS_TYPE_SYNC;
2425         END IF;
2426         */
2427         --Changing the confirm status for the last group of merged items.
2428         IF( l_cur_rank > 0 AND NOT l_is_pdh_batch) THEN
2429             IF( l_merged_rows(l_mrow_ix).CONFIRM_STATUS NOT IN ( G_UNCONF_NONE_MATCH, G_UNCONF_SIGL_MATCH, G_UNCONF_MULT_MATCH  )
2430                 AND l_merged_rows(l_mrow_ix).TRANSACTION_TYPE = G_TRANS_TYPE_CREATE )
2431             THEN
2432                 l_merged_rows(l_mrow_ix).CONFIRM_STATUS := G_CONF_NEW;
2433             END IF;
2434             IF( l_excluded_flag IS NOT NULL) THEN
2435                 l_merged_rows( l_mrow_ix ).CONFIRM_STATUS := G_EXCLUDED;
2436             END IF;
2437         END IF; --IF( l_cur_rank > 0 AND NOT l_is_pdh_batch)
2438 
2439         Debug_Conc_Log( l_proc_log_prefix || 'Rows requiring merging: ' || c_target_rows%ROWCOUNT );
2440         IF c_target_rows%ISOPEN THEN
2441             CLOSE c_target_rows;
2442         END IF;
2443 
2444         IF l_merged_rows IS NOT NULL THEN
2445             -- delete
2446             Debug_Conc_Log( l_proc_log_prefix || 'Deleting ' || l_old_rowids.COUNT || ' old rows ...' );
2447             FORALL rid_ix IN INDICES OF l_old_rowids
2448                 DELETE FROM MTL_SYSTEM_ITEMS_INTERFACE
2449                     WHERE ROWID = l_old_rowids( rid_ix );
2450             -- insert
2451             Debug_Conc_Log( l_proc_log_prefix || 'Inserting ' || l_merged_rows.COUNT || ' merged rows ...' );
2452             FORALL row_index IN INDICES OF l_merged_rows
2453                 INSERT INTO MTL_SYSTEM_ITEMS_INTERFACE
2454                     VALUES l_merged_rows( row_index );
2455 
2456             --Bug 13505630
2457            For i in 1..l_merged_rows.COUNT loop
2458            		FND_MESSAGE.Set_Name('EGO', 'EGO_IMPORT_DUPLICATE_ITEMS');
2459            		FND_MESSAGE.Set_Token('ITEM_NUMBER', l_merged_rows(i).ITEM_NUMBER);
2460            		FND_MESSAGE.Set_Token('ORG_ID', l_merged_rows(i).ORGANIZATION_ID);
2461            		l_msg_text := FND_MESSAGE.GET;
2462               dumm_status  := INVPUOPI.mtl_log_interface_err(
2463                                     l_merged_rows(i).ORGANIZATION_ID
2464                                    ,l_user_id
2465                                    ,l_login_id
2466                                    ,l_prog_appid
2467                                    ,l_prog_id
2468                                    ,l_request_id
2469                                    ,l_merged_rows(i).TRANSACTION_ID
2470                                    ,l_msg_text
2471                                    ,' '
2472                                    ,'MTL_SYSTEM_ITEMS_INTERFACE'
2473                                    ,'INV_IOI_ERR_IMPT_DPLC_ITMS'--bug 11894684, replace INV_IOI_ERR
2474                                    ,l_err_text);
2475            End loop;
2476         END IF;
2477 
2478         IF p_commit = FND_API.G_TRUE THEN
2479             Debug_Conc_Log( l_proc_log_prefix || 'Committing' );
2480             COMMIT;
2481         END IF;
2482         Debug_Conc_Log( l_proc_log_prefix || 'Exiting' );
2483     END merge_items;
2484 
2485     PROCEDURE merge_revs( p_batch_id       IN NUMBER
2486                         , p_is_pdh_batch   IN FLAG
2487                         , p_ss_id          IN NUMBER    DEFAULT NULL
2488                         , p_master_org_id  IN NUMBER    DEFAULT NULL
2489                         , p_commit         IN FLAG      DEFAULT FND_API.G_FALSE
2490                         )
2491     IS
2492         SUBTYPE MIRI_ROW   IS MTL_ITEM_REVISIONS_INTERFACE%ROWTYPE;
2493         TYPE MIRI_ROWS  IS TABLE OF MIRI_ROW INDEX BY BINARY_INTEGER;
2494 
2495         /*
2496          * Note that the organization_id column is filled in from the organization_code and batch organization_id
2497          *   as part of resolve_ssxref_on_data_load
2498          * revision column is filled in from the revision_id before this cursor is fetched.
2499          */
2500         CURSOR c_ss_target_revs( cp_ss_id         MTL_ITEM_REVISIONS_INTERFACE.SOURCE_SYSTEM_ID%TYPE
2501                                , cp_master_org_id MTL_ITEM_REVISIONS_INTERFACE.ORGANIZATION_ID%TYPE ) IS
2502             SELECT
2503                 rowid rid
2504                 , FIRST_VALUE( ROWID ) OVER ( PARTITION BY
2505                                               source_system_id
2506                                             , source_system_reference
2507                                             , organization_id
2508                                             , revision
2509                                               ORDER BY
2510                                               last_update_date desc nulls last
2511                                             , interface_table_unique_id desc nulls last
2512                                             ) master_rid
2513                 , RANK( ) OVER ( PARTITION BY
2514                                   source_system_id
2515                                 , source_system_reference
2516                                 , organization_id
2517                                 , revision
2518                                   ORDER BY
2519                                   last_update_date desc nulls last
2520                                 , interface_table_unique_id desc nulls last
2521                                 ) local_rank
2522                 , sub.*
2523             FROM
2524                 ( SELECT
2525                     COUNT( * ) OVER ( PARTITION BY
2526                                       source_system_id
2527                                     , source_system_reference
2528                                     , organization_id
2529                                     , revision
2530                                     )
2531                     cnt
2532                     , miri.*
2533                 FROM mtl_item_revisions_interface miri
2534                 WHERE   PROCESS_FLAG            = 0
2535                    and  SET_PROCESS_ID          = p_batch_id
2536                    and  SOURCE_SYSTEM_ID        = cp_ss_id
2537                    and  SOURCE_SYSTEM_REFERENCE IS NOT NULL
2538                    AND  ORGANIZATION_ID         IS NOT NULL
2539                    and  EXISTS ( SELECT null
2540                                  FROM   mtl_parameters mp
2541                                  WHERE  mp.ORGANIZATION_ID        = miri.ORGANIZATION_ID
2542                                    and  mp.MASTER_ORGANIZATION_ID = cp_master_org_id
2543                                )
2544                 )
2545                 sub
2546             WHERE sub.cnt > 1
2547             ORDER BY master_rid, local_rank;
2548 
2549         CURSOR c_pdh_target_revs( cp_master_org_id MTL_ITEM_REVISIONS_INTERFACE.ORGANIZATION_ID%TYPE ) IS
2550             SELECT
2551                 rowid rid
2552                 , first_value( rowid ) over ( PARTITION BY
2553                                               item_number
2554                                             , organization_id
2555                                             , revision
2556                                               ORDER BY
2557                                               last_update_date desc nulls last
2558                                             , interface_table_unique_id desc nulls last
2559                                             ) master_rid
2560                 , rank( ) over ( PARTITION BY
2561                                   item_number
2562                                 , organization_id
2563                                 , revision
2564                                   ORDER BY
2565                                   last_update_date desc nulls last
2566                                 , interface_table_unique_id desc nulls last
2567                                 ) local_rank
2568                 , sub.*
2569             FROM
2570                 ( select
2571                     count( * ) over ( PARTITION BY
2572                                       item_number
2573                                     , organization_id
2574                                     , revision
2575                                     )
2576                     cnt
2577                     , miri.*
2578                 FROM MTL_ITEM_REVISIONS_INTERFACE miri
2579                 WHERE   PROCESS_FLAG            = 1
2580                    AND  SET_PROCESS_ID          = p_batch_id
2581                    AND  ITEM_NUMBER             IS NOT NULL
2582                    AND  ORGANIZATION_ID         IS NOT NULL
2583                    AND  (   SOURCE_SYSTEM_ID    IS NULL
2584                         OR  SOURCE_SYSTEM_ID    = G_PDH_SOURCE_SYSTEM_ID
2585                         )
2586                    AND  EXISTS ( SELECT null
2587                                  FROM   mtl_parameters mp
2588                                  WHERE  mp.organization_id        = miri.organization_id
2589                                    AND  mp.master_organization_id = cp_master_org_id
2590                                )
2591                 )
2592                 sub
2593             WHERE sub.cnt > 1
2594             ORDER BY master_rid, local_rank;
2595 
2596         TYPE TARGET_ROWS    IS TABLE OF c_ss_target_revs%ROWTYPE;
2597 
2598         l_merged_rows   MIRI_ROWS;
2599         l_merge_base    MIRI_ROW;
2600         l_old_rows      TARGET_ROWS;
2601         l_old_rowids    UROWID_TABLE;
2602 
2603         l_ss_id         MTL_ITEM_REVISIONS_INTERFACE.SOURCE_SYSTEM_ID%TYPE := p_ss_id;
2604         l_ssr           MTL_ITEM_REVISIONS_INTERFACE.SOURCE_SYSTEM_REFERENCE%TYPE;
2605         l_candidate_trans MTL_ITEM_REVISIONS_INTERFACE.TRANSACTION_TYPE%TYPE;
2606 
2607         l_cur_master_rid    UROWID := NULL;
2608         l_mrow_ix           PLS_INTEGER := 0;
2609         l_is_pdh_batch      BOOLEAN;
2610 
2611         l_org_id        MTL_ITEM_REVISIONS_INTERFACE.ORGANIZATION_ID%TYPE := p_master_org_id;
2612         l_pdh_batch_flag FLAG := p_is_pdh_batch;
2613 
2614         l_proc_log_prefix CONSTANT VARCHAR2(30) := 'merge_revs - ';
2615     BEGIN
2616         Debug_Conc_Log( l_proc_log_prefix || 'Entering' );
2617         Debug_Conc_Log( l_proc_log_prefix || 'Batch ID: ' || p_batch_id );
2618         IF  l_pdh_batch_flag IS NULL OR l_org_id IS NULL OR l_ss_id IS NULL THEN
2619             merge_params_from_batch_header( p_batch_id      => p_batch_id
2620                                           , x_is_pdh_batch  => l_pdh_batch_flag
2621                                           , x_master_org_id => l_org_id
2622                                           , x_ss_id         => l_ss_id
2623                                           );
2624         END IF;
2625         Debug_Conc_Log( l_proc_log_prefix || 'Master Org ID: ' || l_org_id );
2626         Debug_Conc_Log( l_proc_log_prefix || 'SS ID: ' || l_ss_id );
2627         Debug_Conc_Log( l_proc_log_prefix || 'Is PDH Batch?: ' || l_pdh_batch_flag );
2628 
2629         UPDATE MTL_ITEM_REVISIONS_INTERFACE miri
2630             SET REVISION = NVL( (   SELECT  r.REVISION
2631                                     FROM    MTL_ITEM_REVISIONS_B r
2632                                     WHERE   r.REVISION_ID       = miri.REVISION_ID
2633                                         AND r.ORGANIZATION_ID   = miri.ORGANIZATION_ID
2634                                 )
2635                               , REVISION
2636                               )
2637              WHERE REVISION_ID IS NOT NULL
2638                AND SET_PROCESS_ID = p_batch_id
2639                AND REVISION IS NULL;
2640 
2641         l_is_pdh_batch  := ( l_pdh_batch_flag = FND_API.G_TRUE );
2642         IF  l_is_pdh_batch THEN
2643             OPEN c_pdh_target_revs( l_org_id );
2644             FETCH c_pdh_target_revs BULK COLLECT INTO l_old_rows;
2645             CLOSE c_pdh_target_revs;
2646         ELSE
2647             OPEN c_ss_target_revs( l_ss_id, l_org_id );
2648             FETCH c_ss_target_revs BULK COLLECT INTO l_old_rows;
2649             CLOSE c_ss_target_revs;
2650         END IF;
2651 
2652         Debug_Conc_Log( l_proc_log_prefix || 'Rows requiring merging: ' || l_old_rows.COUNT );
2653         IF 0 <>  l_old_rows.COUNT THEN
2654             -- attributes common to every merged row
2655             l_merge_base.SET_PROCESS_ID := p_batch_id;
2656             l_merge_base.PROCESS_FLAG   := CASE WHEN l_is_pdh_batch THEN 1 ELSE 0 END;
2657 
2658             l_old_rowids := UROWID_TABLE( );
2659             l_old_rowids.EXTEND( l_old_rows.COUNT );
2660 
2661             FOR orow_ix IN l_old_rows.FIRST .. l_old_rows.LAST LOOP
2662                 l_old_rowids( orow_ix ) := l_old_rows( orow_ix ).RID;
2663 
2664                 IF( l_cur_master_rid IS NULL
2665                   OR l_old_rows( orow_ix ).master_rid <> l_cur_master_rid )
2666                 THEN
2667                     l_cur_master_rid := l_old_rows( orow_ix ).master_rid;
2668                     Debug_Conc_Log( l_proc_log_prefix || '  Starting new merged row; ROWID = '|| l_cur_master_rid );
2669                     l_mrow_ix := l_mrow_ix + 1;
2670                     l_merged_rows( l_mrow_ix ) := l_merge_base;
2671                     IF NOT l_is_pdh_batch THEN
2672                         l_merged_rows( l_mrow_ix ).SOURCE_SYSTEM_ID          := l_old_rows( orow_ix ).SOURCE_SYSTEM_ID;
2673                         l_merged_rows( l_mrow_ix ).SOURCE_SYSTEM_REFERENCE   := l_old_rows( orow_ix ).SOURCE_SYSTEM_REFERENCE;
2674                         Debug_Conc_Log( l_proc_log_prefix || '   Source System Reference = ' || l_merged_rows( l_mrow_ix ).SOURCE_SYSTEM_REFERENCE );
2675                     END IF;
2676                 ELSE
2677                     Debug_Conc_Log( l_proc_log_prefix || '  Merging another record into current merged row; ROWID = '
2678                                   || l_old_rows( orow_ix ).rid || '; master ROWID = '|| l_cur_master_rid );
2679                 END IF;
2680 
2681                 -- Special Cases:
2682                 -- Transaction type
2683                 l_candidate_trans := UPPER( l_old_rows( orow_ix ).TRANSACTION_TYPE );
2684 
2685                 IF      l_merged_rows( l_mrow_ix ).TRANSACTION_TYPE IS NULL
2686                     OR  l_merged_rows( l_mrow_ix ).TRANSACTION_TYPE <> l_candidate_trans -- <> filters out nulls
2687                 THEN
2688                     -- CREATE > SYNC > UPDATE : order of case expression matters
2689                     l_merged_rows( l_mrow_ix ).TRANSACTION_TYPE :=
2690                         CASE
2691                             WHEN l_merged_rows( l_mrow_ix ).TRANSACTION_TYPE = G_TRANS_TYPE_CREATE
2692                               OR l_candidate_trans = G_TRANS_TYPE_CREATE                            THEN G_TRANS_TYPE_CREATE
2693                             WHEN l_merged_rows( l_mrow_ix ).TRANSACTION_TYPE = G_TRANS_TYPE_SYNC
2694                               OR l_candidate_trans = G_TRANS_TYPE_SYNC                              THEN G_TRANS_TYPE_SYNC
2695                             WHEN l_merged_rows( l_mrow_ix ).TRANSACTION_TYPE = G_TRANS_TYPE_UPDATE
2696                               OR l_candidate_trans = G_TRANS_TYPE_UPDATE                            THEN G_TRANS_TYPE_UPDATE
2697                             ELSE NULL -- INVALID transaction types encountered ...
2698                         END;
2699                 END IF;
2700 
2701                 -- The following columns need to be treated as atomic groups
2702                 -- 1. Item Identifier
2703                 IF      l_merged_rows( l_mrow_ix ).INVENTORY_ITEM_ID  IS NULL
2704                     AND l_merged_rows( l_mrow_ix ).ITEM_NUMBER        IS NULL
2705                 THEN
2706                     l_merged_rows( l_mrow_ix ).INVENTORY_ITEM_ID  := l_old_rows( orow_ix ).INVENTORY_ITEM_ID;
2707                     l_merged_rows( l_mrow_ix ).ITEM_NUMBER        := l_old_rows( orow_ix ).ITEM_NUMBER;
2708                 END IF;
2709 
2710                 -- 2. Organization
2711                 IF      l_merged_rows( l_mrow_ix ).ORGANIZATION_ID    IS NULL
2712                     AND l_merged_rows( l_mrow_ix ).ORGANIZATION_CODE  IS NULL
2713                 THEN
2714                     l_merged_rows( l_mrow_ix ).ORGANIZATION_ID        := l_old_rows( orow_ix ).ORGANIZATION_ID;
2715                     l_merged_rows( l_mrow_ix ).ORGANIZATION_CODE      := l_old_rows( orow_ix ).ORGANIZATION_CODE;
2716                 END IF;
2717 
2718                 -- Non-special cased
2719                 -- Start Generated Code
2720                 /* Generated using:
2721                     SET LINESIZE 200
2722                     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; '
2723                     FROM    ALL_TAB_COLUMNS
2724                     WHERE   TABLE_NAME = 'MTL_ITEM_REVISIONS_INTERFACE'
2725                     AND COLUMN_NAME NOT IN
2726                         ( -- special cases (for merge)
2727                           'INVENTORY_ITEM_ID'
2728                         , 'ITEM_NUMBER'
2729                         , 'ORGANIZATION_ID'
2730                         , 'ORGANIZATION_CODE'
2731                         , 'TRANSACTION_TYPE'
2732                           -- special columns
2733                         , 'SET_PROCESS_ID'
2734                         , 'PROCESS_FLAG'
2735                         , 'SOURCE_SYSTEM_ID'
2736                         , 'SOURCE_SYSTEM_REFERENCE'
2737                         , 'INTERFACE_TABLE_UNIQUE_ID'
2738                           -- who columns
2739                         , 'LAST_UPDATE_DATE'
2740                         , 'CREATION_DATE'
2741                         , 'CREATED_BY'
2742                         , 'LAST_UPDATED_BY'
2743                         , 'LAST_UPDATE_LOGIN'
2744                           -- XXX: exclude concurrent processing columns?
2745                         )
2746                     ORDER BY COLUMN_NAME ASC
2747                 */
2748                 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;
2749                 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;
2750                 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;
2751                 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;
2752                 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;
2753                 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;
2754                 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;
2755                 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;
2756                 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;
2757                 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;
2758                 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;
2759                 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;
2760                 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;
2761                 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;
2762                 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;
2763                 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;
2764                 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;
2765                 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;
2766                 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;
2767                 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;
2768                 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;
2769                 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;
2770                 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;
2771                 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;
2772                 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;
2773                 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;
2774                 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;
2775                 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;
2776                 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;
2777                 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;
2778                 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;
2779                 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;
2780                 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;
2781                 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;
2782                 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;
2783                 -- End Generated Code
2784 
2785             END LOOP; -- loop over old rows
2786 
2787             /*
2788             -- XXX: In case only null/invalid transaction types encountered, set transaction type to SYNC ?.
2789             IF l_merged_rows( l_mrow_ix ).TRANSACTION_TYPE IS NULL THEN
2790                 l_merged_rows( l_mrow_ix ).TRANSACTION_TYPE := G_TRANS_TYPE_SYNC;
2791             END IF;
2792             */
2793             IF l_merged_rows IS NOT NULL THEN
2794                 -- delete
2795                 Debug_Conc_Log( l_proc_log_prefix || 'Deleting ' || l_old_rowids.COUNT || ' old rows ...' );
2796                 FORALL rid_ix IN INDICES OF l_old_rowids
2797                     DELETE FROM MTL_ITEM_REVISIONS_INTERFACE
2798                         WHERE ROWID = l_old_rowids( rid_ix );
2799                 -- insert
2800                 Debug_Conc_Log( l_proc_log_prefix || 'Inserting ' || l_merged_rows.COUNT || ' merged rows ...' );
2801                 FORALL row_index IN INDICES OF l_merged_rows
2802                     INSERT INTO MTL_ITEM_REVISIONS_INTERFACE
2803                         VALUES l_merged_rows( row_index );
2804             END IF;
2805         END IF; -- ENDS IF l_old_rows.count <> 0
2806         IF p_commit = FND_API.G_TRUE THEN
2807             Debug_Conc_Log( l_proc_log_prefix || 'Committing' );
2808             COMMIT;
2809         END IF;
2810         Debug_Conc_Log( l_proc_log_prefix || 'Exiting' );
2811     END merge_revs;
2812 
2813     -- Merging Item Associations.
2814     PROCEDURE Merge_Associations  ( p_batch_id       IN NUMBER
2815                                   , p_is_pdh_batch   IN FLAG      DEFAULT NULL
2816                                   , p_commit         IN FLAG      DEFAULT FND_API.G_FALSE
2817                                   )
2818     IS
2819 
2820     CURSOR pdh_candidate_assocs_rows_cur IS
2821         SELECT *
2822         FROM
2823           (
2824             SELECT
2825               ROWID rid,
2826               Count(*) OVER ( PARTITION BY ITEM_NUMBER,
2827                                           PK1_VALUE,
2828                                           PK2_VALUE,
2829                                           PK3_VALUE,
2830                                           PK4_VALUE,
2831                                           PK5_VALUE,
2832                                           BUNDLE_ID,
2833                                           DATA_LEVEL_ID,
2834                                           ORGANIZATION_ID )
2835               CNT,
2836               Rank()  OVER ( ORDER BY ITEM_NUMBER,
2837                                       PK1_VALUE,
2838                                       PK2_VALUE,
2839                                       PK3_VALUE,
2840                                       PK4_VALUE,
2841                                       PK5_VALUE,
2842                                       BUNDLE_ID,
2843                                       DATA_LEVEL_ID,
2844                                       ORGANIZATION_ID )
2845               RNK,
2846               eiai.*
2847             FROM EGO_ITEM_ASSOCIATIONS_INTF eiai
2848             WHERE BATCH_ID = p_batch_id
2849             AND PROCESS_FLAG = 1
2850           )
2851         WHERE CNT > 1
2852         ORDER BY rnk, last_update_date DESC;
2853 
2854     CURSOR ss_candidate_assocs_rows_cur IS
2855         SELECT *
2856         FROM
2857           (
2858             SELECT
2859               ROWID rid,
2860               Count(*) OVER ( PARTITION BY SOURCE_SYSTEM_ID,
2861                                           SOURCE_SYSTEM_REFERENCE,
2862                                           PK1_VALUE,
2863                                           PK2_VALUE,
2864                                           PK3_VALUE,
2865                                           PK4_VALUE,
2866                                           PK5_VALUE,
2867                                           BUNDLE_ID,
2868                                           DATA_LEVEL_ID,
2869                                           ORGANIZATION_ID )
2870               CNT,
2871               Rank()  OVER ( ORDER BY SOURCE_SYSTEM_ID,
2872                                       SOURCE_SYSTEM_REFERENCE,
2873                                       PK1_VALUE,
2874                                       PK2_VALUE,
2875                                       PK3_VALUE,
2876                                       PK4_VALUE,
2877                                       PK5_VALUE,
2878                                       BUNDLE_ID,
2879                                       DATA_LEVEL_ID,
2880                                       ORGANIZATION_ID )
2881               RNK,
2882               eiai.*
2883             FROM EGO_ITEM_ASSOCIATIONS_INTF eiai
2884             WHERE BATCH_ID = p_batch_id
2885             AND PROCESS_FLAG = 0
2886           )
2887         WHERE CNT > 1
2888         ORDER BY rnk, last_update_date DESC;
2889 
2890     TYPE Assocs_Rows_With_RowId    IS TABLE OF ss_candidate_assocs_rows_cur%ROWTYPE;
2891 
2892     l_current_rank_handled          NUMBER;
2893     l_previous_rank_handled         NUMBER;
2894     l_new_row_index                 NUMBER := 0;
2895     l_old_row_ids                   UROWID_TABLE;
2896     l_current_merged_tran_type      VARCHAR2(10);
2897 
2898     l_new_row      IAssocs_Row;
2899     l_new_rows     IAssocs_Rows;
2900     l_old_rows     Assocs_Rows_With_RowId;
2901 
2902     BEGIN
2903       Debug_Conc_Log( 'Calling Merge_Associations ');
2904       l_current_rank_handled := 0;
2905       l_previous_rank_handled := 0;
2906 
2907       IF p_is_pdh_batch = FND_API.G_TRUE THEN
2908         -- 'PDH Batch'
2909         Debug_Conc_Log( 'Getting candidate rows for merging for PDH Batch ');
2910         OPEN pdh_candidate_assocs_rows_cur;
2911         FETCH pdh_candidate_assocs_rows_cur BULK COLLECT INTO l_old_rows;
2912         CLOSE pdh_candidate_assocs_rows_cur;
2913       ELSE
2914         -- 'SS Batch'
2915         Debug_Conc_Log( 'Getting candidate rows for merging for Source System Batch ');
2916         OPEN ss_candidate_assocs_rows_cur;
2917         FETCH ss_candidate_assocs_rows_cur BULK COLLECT INTO l_old_rows;
2918         CLOSE ss_candidate_assocs_rows_cur;
2919       END IF;
2920 
2921       Debug_Conc_Log( 'Merging '|| l_old_rows.COUNT || ' rows in associations table' );
2922 
2923       IF l_old_rows.COUNT < 1 THEN
2924         RETURN;
2925       END IF;
2926 
2927       l_old_row_ids := UROWID_TABLE( );
2928       l_old_row_ids.EXTEND( l_old_rows.COUNT );
2929 
2930       FOR l_index IN l_old_rows.FIRST .. l_old_rows.LAST
2931       LOOP
2932         l_old_row_ids( l_index ) := l_old_rows( l_index ).RID;
2933         l_current_rank_handled := l_old_rows( l_index ).RNK;
2934         IF l_current_rank_handled <> l_previous_rank_handled THEN
2935           l_new_row_index                := l_new_row_index + 1 ;
2936           l_new_rows( l_new_row_index )  := l_new_row;
2937           l_new_rows( l_new_row_index ).BATCH_ID                  := l_old_rows( l_index ).BATCH_ID;
2938           l_new_rows( l_new_row_index ).ORGANIZATION_ID           := l_old_rows( l_index ).ORGANIZATION_ID;
2939           l_new_rows( l_new_row_index ).PK1_VALUE                 := l_old_rows( l_index ).PK1_VALUE;
2940           l_new_rows( l_new_row_index ).PK2_VALUE                 := l_old_rows( l_index ).PK2_VALUE;
2941           l_new_rows( l_new_row_index ).PK3_VALUE                 := l_old_rows( l_index ).PK3_VALUE;
2942           l_new_rows( l_new_row_index ).PK4_VALUE                 := l_old_rows( l_index ).PK4_VALUE;
2943           l_new_rows( l_new_row_index ).PK5_VALUE                 := l_old_rows( l_index ).PK5_VALUE;
2944           l_new_rows( l_new_row_index ).DATA_LEVEL_ID             := l_old_rows( l_index ).DATA_LEVEL_ID;
2945           l_new_rows( l_new_row_index ).ORGANIZATION_CODE         := l_old_rows( l_index ).ORGANIZATION_CODE;
2946           l_new_rows( l_new_row_index ).PROCESS_FLAG              := l_old_rows( l_index ).PROCESS_FLAG;
2947           l_new_rows( l_new_row_index ).TRANSACTION_ID            := l_old_rows( l_index ).TRANSACTION_ID;
2948           l_new_rows( l_new_row_index ).ASSOCIATION_ID            := l_old_rows( l_index ).ASSOCIATION_ID;
2949           l_new_rows( l_new_row_index ).REQUEST_ID                := l_old_rows( l_index ).REQUEST_ID;
2950           l_new_rows( l_new_row_index ).PROGRAM_APPLICATION_ID    := l_old_rows( l_index ).PROGRAM_APPLICATION_ID;
2951           l_new_rows( l_new_row_index ).PROGRAM_ID                := l_old_rows( l_index ).PROGRAM_ID;
2952           l_new_rows( l_new_row_index ).PROGRAM_UPDATE_DATE       := l_old_rows( l_index ).PROGRAM_UPDATE_DATE;
2953           l_new_rows( l_new_row_index ).SUPPLIER_NAME             := l_old_rows( l_index ).SUPPLIER_NAME;
2954           l_new_rows( l_new_row_index ).SUPPLIER_NUMBER           := l_old_rows( l_index ).SUPPLIER_NUMBER;
2955           l_new_rows( l_new_row_index ).SUPPLIER_SITE_NAME        := l_old_rows( l_index ).SUPPLIER_SITE_NAME;
2956           l_new_rows( l_new_row_index ).DATA_LEVEL_NAME           := l_old_rows( l_index ).DATA_LEVEL_NAME;
2957           l_new_rows( l_new_row_index ).STYLE_ITEM_FLAG           := l_old_rows( l_index ).STYLE_ITEM_FLAG;
2958           l_new_rows( l_new_row_index ).STYLE_ITEM_ID             := l_old_rows( l_index ).STYLE_ITEM_ID;
2959           l_new_rows( l_new_row_index ).BUNDLE_ID                 := l_old_rows( l_index ).BUNDLE_ID;
2960           l_new_rows( l_new_row_index ).SOURCE_SYSTEM_ID          := l_old_rows( l_index ).SOURCE_SYSTEM_ID;
2961           l_new_rows( l_new_row_index ).SOURCE_SYSTEM_REFERENCE   := l_old_rows( l_index ).SOURCE_SYSTEM_REFERENCE;
2962           l_new_rows( l_new_row_index ).ITEM_NUMBER               := l_old_rows( l_index ).ITEM_NUMBER;
2963           l_new_rows( l_new_row_index ).CREATED_BY                := l_old_rows( l_index ).CREATED_BY;
2964           l_new_rows( l_new_row_index ).CREATION_DATE             := l_old_rows( l_index ).CREATION_DATE;
2965           l_new_rows( l_new_row_index ).LAST_UPDATED_BY           := l_old_rows( l_index ).LAST_UPDATED_BY;
2966           l_new_rows( l_new_row_index ).LAST_UPDATE_DATE          := l_old_rows( l_index ).LAST_UPDATE_DATE;
2967           l_new_rows( l_new_row_index ).LAST_UPDATE_LOGIN         := l_old_rows( l_index ).LAST_UPDATE_LOGIN;
2968           l_current_merged_tran_type                              := l_old_rows( l_index ).TRANSACTION_TYPE;
2969         END IF;
2970         IF l_new_rows( l_new_row_index ).INVENTORY_ITEM_ID IS NULL THEN
2971           l_new_rows( l_new_row_index ).INVENTORY_ITEM_ID := l_old_rows( l_index ).INVENTORY_ITEM_ID;
2972         END IF;
2973         IF l_new_rows( l_new_row_index ).PRIMARY_FLAG IS NULL
2974           AND l_new_rows( l_new_row_index ).STATUS_CODE <> 2
2975           AND l_old_rows( l_index ).PRIMARY_FLAG <> 'Y' THEN
2976           l_new_rows( l_new_row_index ).PRIMARY_FLAG := l_old_rows( l_index ).PRIMARY_FLAG;
2977         END IF;
2978         IF l_new_rows( l_new_row_index ).STATUS_CODE IS NULL
2979           AND l_new_rows( l_new_row_index ).PRIMARY_FLAG <> 'Y'
2980           AND l_old_rows( l_index ).STATUS_CODE <> '2' THEN
2981           l_new_rows( l_new_row_index ).STATUS_CODE := l_old_rows( l_index ).STATUS_CODE;
2982         END IF;
2983         IF l_new_rows( l_new_row_index ).TRANSACTION_TYPE IS NULL
2984           OR l_new_rows( l_new_row_index ).TRANSACTION_TYPE <> l_current_merged_tran_type THEN
2985           l_new_rows( l_new_row_index ).TRANSACTION_TYPE :=
2986                           CASE
2987                               WHEN l_new_rows( l_new_row_index ).TRANSACTION_TYPE = G_TRANS_TYPE_CREATE
2988                                   OR l_current_merged_tran_type = G_TRANS_TYPE_CREATE
2989                                 THEN G_TRANS_TYPE_CREATE
2990                               WHEN l_new_rows( l_new_row_index ).TRANSACTION_TYPE = G_TRANS_TYPE_SYNC
2991                                   OR l_current_merged_tran_type = G_TRANS_TYPE_SYNC
2992                                 THEN G_TRANS_TYPE_SYNC
2993                               WHEN l_new_rows( l_new_row_index ).TRANSACTION_TYPE = G_TRANS_TYPE_UPDATE
2994                                   OR l_current_merged_tran_type = G_TRANS_TYPE_UPDATE
2995                                 THEN G_TRANS_TYPE_UPDATE
2996                               ELSE NULL  -- Transaction type is not valid.
2997                             END;
2998           l_current_merged_tran_type := l_new_rows( l_new_row_index ).TRANSACTION_TYPE;
2999         END IF;
3000         l_previous_rank_handled := l_old_rows( l_index ).RNK;
3001       END LOOP;
3002 
3003       -- Updating default values for primary_flag and status_code
3004       -- primary_flag null is defaulted with  'N'
3005       -- status_code null is defaulted with 1
3006       UPDATE EGO_ITEM_ASSOCIATIONS_INTF
3007       SET PRIMARY_FLAG = 'N'
3008       WHERE PRIMARY_FLAG IS NULL
3009         AND BATCH_ID = p_batch_id
3010 	AND TRANSACTION_TYPE = 'CREATE'; --Modified for bug 11670735
3011 
3012       UPDATE EGO_ITEM_ASSOCIATIONS_INTF
3013       SET STATUS_CODE = 'N'
3014       WHERE STATUS_CODE IS NULL
3015         AND BATCH_ID = p_batch_id
3016 	AND TRANSACTION_TYPE = 'CREATE'; --Modified for bug 11670735
3017 
3018       IF l_new_rows IS NOT NULL THEN
3019         -- Delete
3020         FORALL rid_ix IN INDICES OF l_old_row_ids
3021             DELETE FROM EGO_ITEM_ASSOCIATIONS_INTF
3022                 WHERE ROWID = l_old_row_ids( rid_ix );
3023         -- Insert
3024         FORALL row_index IN INDICES OF l_new_rows
3025             INSERT INTO EGO_ITEM_ASSOCIATIONS_INTF
3026                 VALUES l_new_rows( row_index );
3027       END IF;
3028       Debug_Conc_Log( 'End of Call to Merge_Associations ');
3029 
3030     END merge_associations;
3031 
3032 
3033     PROCEDURE merge_batch   ( p_batch_id       IN NUMBER
3034                             , p_is_pdh_batch   IN FLAG      DEFAULT NULL
3035                             , p_ss_id          IN NUMBER    DEFAULT NULL
3036                             , p_master_org_id  IN NUMBER    DEFAULT NULL
3037                             , p_commit         IN FLAG      DEFAULT FND_API.G_FALSE
3038                             )
3039     IS
3040         l_org_id            NUMBER  := p_master_org_id;
3041         l_pdh_batch_flag    FLAG    := p_is_pdh_batch;
3042         l_ss_id             NUMBER  := p_ss_id;
3043     BEGIN
3044         Debug_Conc_Log( 'merge_batch: Starting for batch_id=' || TO_CHAR(p_batch_id) );
3045         IF  l_pdh_batch_flag IS NULL OR l_org_id IS NULL OR l_ss_id IS NULL THEN
3046             merge_params_from_batch_header( p_batch_id      => p_batch_id
3047                                           , x_is_pdh_batch  => l_pdh_batch_flag
3048                                           , x_ss_id         => l_ss_id
3049                                           , x_master_org_id => l_org_id
3050                                           );
3051         END IF;
3052 
3053         Debug_Conc_Log( 'merge_batch: Merging batch items' );
3054         MERGE_ITEMS(  p_batch_id        => p_batch_id
3055                    ,  p_master_org_id   => l_org_id
3056                    ,  p_is_pdh_batch    => l_pdh_batch_flag
3057                    ,  p_ss_id           => l_ss_id
3058                    ,  p_commit          => FND_API.G_FALSE
3059                    );
3060         Debug_Conc_Log( 'merge_batch: Merging batch revisions' );
3061         MERGE_REVS (  p_batch_id        => p_batch_id
3062                    ,  p_master_org_id   => l_org_id
3063                    ,  p_is_pdh_batch    => l_pdh_batch_flag
3064                    ,  p_ss_id           => l_ss_id
3065                    ,  p_commit          => FND_API.G_FALSE
3066                    );
3067         Debug_Conc_Log( 'merge_batch: Merging Associations' );
3068         merge_associations( p_batch_id       => p_batch_id
3069                           , p_is_pdh_batch   => l_pdh_batch_flag
3070                           , p_commit         => FND_API.G_FALSE
3071                           );
3072 
3073         Debug_Conc_Log( 'merge_batch: Merging batch extended attributes' );
3074         MERGE_ATTRS(  p_batch_id        => p_batch_id
3075                    ,  p_master_org_id   => l_org_id
3076                    ,  p_is_pdh_batch    => l_pdh_batch_flag
3077                    ,  p_ss_id           => l_ss_id
3078                    ,  p_commit          => FND_API.G_FALSE
3079                    );
3080         IF p_commit = FND_API.G_TRUE   THEN
3081             Debug_Conc_Log( 'merge_batch: Committing' );
3082             COMMIT;
3083         END IF;
3084         Debug_Conc_Log( 'merge_batch: Exiting' );
3085     END merge_batch;
3086 
3087     PROCEDURE merge_attrs   ( p_batch_id       IN NUMBER
3088                             , p_is_pdh_batch   IN FLAG      DEFAULT NULL
3089                             , p_ss_id          IN NUMBER    DEFAULT NULL
3090                             , p_master_org_id  IN NUMBER    DEFAULT NULL
3091                             , p_commit         IN FLAG      DEFAULT FND_API.G_FALSE
3092                             )
3093     IS
3094         l_org_id            NUMBER  := p_master_org_id;
3095         l_pdh_batch_flag    FLAG    := p_is_pdh_batch;
3096         l_ss_id             NUMBER  := p_ss_id;
3097     BEGIN
3098         Debug_Conc_Log( 'Starting merge_attrs for batch_id:' || to_char( p_batch_id ) );
3099         IF  l_pdh_batch_flag IS NULL OR l_org_id IS NULL OR l_ss_id IS NULL THEN
3100             merge_params_from_batch_header( p_batch_id      => p_batch_id
3101                                           , x_is_pdh_batch  => l_pdh_batch_flag
3102                                           , x_ss_id         => l_ss_id
3103                                           , x_master_org_id => l_org_id
3104                                           );
3105         END IF;
3106 
3107         Debug_Conc_Log( 'merge_attrs: merging item-level extended attributes' );
3108         MERGE_ITEM_ATTRS   (  p_batch_id        => p_batch_id
3109                            ,  p_master_org_id   => l_org_id
3110                            ,  p_is_pdh_batch    => l_pdh_batch_flag
3111                            ,  p_ss_id           => l_ss_id
3112                            ,  p_commit          => FND_API.G_FALSE
3113                            );
3114         Debug_Conc_Log( 'merge_attrs: merging revision-level extended attributes' );
3115         MERGE_REV_ATTRS(  p_batch_id        => p_batch_id
3116                        ,  p_master_org_id   => l_org_id
3117                        ,  p_is_pdh_batch    => l_pdh_batch_flag
3118                        ,  p_ss_id           => l_ss_id
3119                        ,  p_commit          => FND_API.G_FALSE
3120                        );
3121         IF p_commit = FND_API.G_TRUE   THEN
3122             Debug_Conc_Log( 'merge_attrs: Committing' );
3123             COMMIT;
3124         END IF;
3125         Debug_Conc_Log( 'merge_attrs: Exiting' );
3126     END merge_attrs;
3127 
3128     --=================================================================================================================--
3129     --------------------------------------- End of Merging Section ----------------------------------------------------
3130     --=================================================================================================================--
3131 
3132     --=================================================================================================================--
3133     --------------------------------- Start of Merging Section for Import -----------------------------------------------
3134     --=================================================================================================================--
3135     /*
3136      * All methods in this section does the following - For all the ready records in batch i.e. with process status = 1,
3137      *   if more than one record found for same primary keys (for example ITEM_NUMBER, ORGANIZATION_ID, REVISION for
3138      *   revisions interface table), then merge all the data to all the rows having same PKs. Then mark all other rows
3139      *   with process status = 111 and keep only one row with process status = 1. This way only one record will get
3140      *   processed and all the data from all the records will get processed. Later, after completion of all imports,
3141      *   the rows with process status = 111 will get converted to success or failure depending on the status of row
3142      *   that got processed.
3143      */
3144 
3145     -- Merges item and org assignments
3146     PROCEDURE Merge_Items_For_Import( p_batch_id       IN NUMBER
3147                                     , p_master_org_id  IN NUMBER
3148                                     )
3149     IS
3150         /*
3151          * This cursor is never executed.
3152          * It's only used for type definition.
3153          */
3154         CURSOR c_target_rec_type IS
3155             SELECT ROWID rid
3156                  , 0     cnt
3157                  , 0     rnk
3158                  , msii.*
3159             FROM MTL_SYSTEM_ITEMS_INTERFACE msii;
3160 
3161         TYPE MSII_ROWS      IS TABLE OF MSII_ROW INDEX BY BINARY_INTEGER;
3162         TYPE MSII_CURSOR    IS REF CURSOR;
3163         c_target_rows       MSII_CURSOR;
3164         old_row             c_target_rec_type%ROWTYPE;
3165 
3166         l_merged_rows   MSII_ROWS;
3167         l_new_rows      MSII_ROWS;
3168         l_merged_row    MSII_ROW;
3169         l_old_rowids    UROWID_TABLE;
3170 
3171         l_candidate_trans MTL_SYSTEM_ITEMS_INTERFACE.TRANSACTION_TYPE%TYPE;
3172 
3173         l_cur_rank      PLS_INTEGER := 0; -- because rank() starts at 1
3174         l_mrow_ix       PLS_INTEGER := 0;
3175         l_new_row_idx   PLS_INTEGER := 0;
3176 
3177         l_org_id        MTL_SYSTEM_ITEMS_INTERFACE.ORGANIZATION_ID%TYPE := p_master_org_id;
3178         l_proc_log_prefix     CONSTANT VARCHAR2( 30 ) := 'Merge_Items_For_Import - ';
3179     BEGIN
3180         Debug_Conc_Log( l_proc_log_prefix || 'Entering' );
3181         Debug_Conc_Log( l_proc_log_prefix || 'Batch ID: ' || p_batch_id );
3182         -- making sure that item_number always has a value for ready records
3183         UPDATE MTL_SYSTEM_ITEMS_INTERFACE MSII
3184         SET ITEM_NUMBER = (SELECT CONCATENATED_SEGMENTS
3185                            FROM MTL_SYSTEM_ITEMS_KFV
3186                            WHERE INVENTORY_ITEM_ID = MSII.INVENTORY_ITEM_ID
3187                              AND ORGANIZATION_ID = MSII.ORGANIZATION_ID)
3188         WHERE SET_PROCESS_ID = p_batch_id
3189           AND PROCESS_FLAG = 1
3190           AND INVENTORY_ITEM_ID IS NOT NULL
3191           AND ITEM_NUMBER IS NULL;
3192 
3193         OPEN c_target_rows FOR
3194           SELECT *
3195           FROM
3196             (SELECT
3197               ROWID rid,
3198               COUNT( * ) OVER ( PARTITION BY ITEM_NUMBER, ORGANIZATION_ID) cnt,
3199               RANK() OVER ( ORDER BY ITEM_NUMBER, ORGANIZATION_ID) rnk,
3200               msii.*
3201             FROM MTL_SYSTEM_ITEMS_INTERFACE msii
3202             WHERE PROCESS_FLAG   = 1
3203               AND SET_PROCESS_ID = p_batch_id
3204               AND ITEM_NUMBER IS NOT NULL
3205               AND ORGANIZATION_ID IS NOT NULL
3206               AND EXISTS
3207                   (SELECT NULL
3208                    FROM MTL_PARAMETERS mp
3209                    WHERE mp.ORGANIZATION_ID        = msii.ORGANIZATION_ID
3210                      AND mp.MASTER_ORGANIZATION_ID = l_org_id
3211                   )
3212             ) sub
3213           WHERE sub.cnt > 1
3214           ORDER BY rnk, last_update_date DESC NULLS LAST, interface_table_unique_id DESC NULLS LAST;
3215 
3216         l_old_rowids := UROWID_TABLE( );
3217         l_new_row_idx := 0;
3218         LOOP
3219             FETCH c_target_rows INTO old_row;
3220             IF c_target_rows%NOTFOUND AND l_new_row_idx > 0 THEN
3221                 FOR i IN 1..l_new_row_idx LOOP
3222                     Debug_Conc_Log( l_proc_log_prefix || '  No More records found for processing.');
3223                     Debug_Conc_Log( l_proc_log_prefix || '  Creating merged record for SSR, SS-ID = ' ||
3224                                                          l_new_rows( i ).SOURCE_SYSTEM_REFERENCE || ',' ||
3225                                                          l_new_rows( i ).SOURCE_SYSTEM_ID);
3226                     l_mrow_ix := l_mrow_ix + 1;
3227                     l_merged_rows( l_mrow_ix )                              := l_merged_row;
3228                     l_merged_rows( l_mrow_ix ).SET_PROCESS_ID               := l_new_rows( i ).SET_PROCESS_ID;
3229                     l_merged_rows( l_mrow_ix ).PROCESS_FLAG                 := l_new_rows( i ).PROCESS_FLAG;
3230                     l_merged_rows( l_mrow_ix ).SOURCE_SYSTEM_ID             := l_new_rows( i ).SOURCE_SYSTEM_ID;
3231                     l_merged_rows( l_mrow_ix ).SOURCE_SYSTEM_REFERENCE      := l_new_rows( i ).SOURCE_SYSTEM_REFERENCE;
3232                     l_merged_rows( l_mrow_ix ).SOURCE_SYSTEM_REFERENCE_DESC := l_new_rows( i ).SOURCE_SYSTEM_REFERENCE_DESC;
3233                     l_merged_rows( l_mrow_ix ).CONFIRM_STATUS               := l_new_rows( i ).CONFIRM_STATUS;
3234                     l_merged_rows( l_mrow_ix ).CREATED_BY                   := l_new_rows( i ).CREATED_BY;
3235                     l_merged_rows( l_mrow_ix ).LAST_UPDATED_BY              := l_new_rows( i ).LAST_UPDATED_BY;
3236                     l_merged_rows( l_mrow_ix ).REQUEST_ID                   := FND_GLOBAL.CONC_REQUEST_ID;
3237                     l_merged_rows( l_mrow_ix ).PROGRAM_APPLICATION_ID       := FND_GLOBAL.PROG_APPL_ID;
3238                     l_merged_rows( l_mrow_ix ).PROGRAM_ID                   := FND_GLOBAL.CONC_PROGRAM_ID;
3239                     l_merged_rows( l_mrow_ix ).PROGRAM_UPDATE_DATE          := SYSDATE;
3240                 END LOOP; --FOR i IN 1..l_new_row_idx LOOP
3241             END IF; --IF l_new_row_idx > 0 THEN
3242             EXIT WHEN c_target_rows%NOTFOUND;
3243 
3244             l_old_rowids.EXTEND;
3245             l_old_rowids( l_old_rowids.LAST ) := old_row.RID;
3246 
3247             IF( old_row.RNK <> l_cur_rank ) THEN
3248                 -- check if already merged rows exists, then insert them into l_merged_rows
3249                 -- when a final merged record is ready for one item-org then for each source system reference
3250                 -- we will insert a merged record i.e. ssr, msii.merged_record
3251                 IF l_new_row_idx > 0 THEN
3252                     FOR i IN 1..l_new_row_idx LOOP
3253                         Debug_Conc_Log( l_proc_log_prefix || '  Creating merged record for SSR, SS-ID = ' ||
3254                                                              l_new_rows( i ).SOURCE_SYSTEM_REFERENCE || ', ' ||
3255                                                              l_new_rows( i ).SOURCE_SYSTEM_ID);
3256                         l_mrow_ix := l_mrow_ix + 1;
3257                         l_merged_rows( l_mrow_ix )                              := l_merged_row;
3258                         l_merged_rows( l_mrow_ix ).SET_PROCESS_ID               := l_new_rows( i ).SET_PROCESS_ID;
3259                         l_merged_rows( l_mrow_ix ).PROCESS_FLAG                 := l_new_rows( i ).PROCESS_FLAG;
3260                         l_merged_rows( l_mrow_ix ).SOURCE_SYSTEM_ID             := l_new_rows( i ).SOURCE_SYSTEM_ID;
3261                         l_merged_rows( l_mrow_ix ).SOURCE_SYSTEM_REFERENCE      := l_new_rows( i ).SOURCE_SYSTEM_REFERENCE;
3262                         l_merged_rows( l_mrow_ix ).SOURCE_SYSTEM_REFERENCE_DESC := l_new_rows( i ).SOURCE_SYSTEM_REFERENCE_DESC;
3263                         l_merged_rows( l_mrow_ix ).CONFIRM_STATUS               := l_new_rows( i ).CONFIRM_STATUS;
3264                         l_merged_rows( l_mrow_ix ).CREATED_BY                   := l_new_rows( i ).CREATED_BY;
3265                         l_merged_rows( l_mrow_ix ).LAST_UPDATED_BY              := l_new_rows( i ).LAST_UPDATED_BY;
3266                         l_merged_rows( l_mrow_ix ).REQUEST_ID                   := FND_GLOBAL.CONC_REQUEST_ID;
3267                         l_merged_rows( l_mrow_ix ).PROGRAM_APPLICATION_ID       := FND_GLOBAL.PROG_APPL_ID;
3268                         l_merged_rows( l_mrow_ix ).PROGRAM_ID                   := FND_GLOBAL.CONC_PROGRAM_ID;
3269                         l_merged_rows( l_mrow_ix ).PROGRAM_UPDATE_DATE          := SYSDATE;
3270                     END LOOP; --FOR i IN 1..l_new_row_idx LOOP
3271                 END IF; --IF l_new_row_idx > 0 THEN
3272                 l_cur_rank := old_row.RNK;
3273                 Debug_Conc_Log( l_proc_log_prefix || '  Starting new merged row; rank = '|| l_cur_rank );
3274                 Debug_Conc_Log( l_proc_log_prefix || '    Item, Org-ID, Item-ID = ' ||
3275                                                      old_row.ITEM_NUMBER || ',' ||
3276                                                      old_row.ORGANIZATION_ID || ', ' ||
3277                                                      old_row.INVENTORY_ITEM_ID);
3278                 l_new_rows.DELETE;
3279                 l_new_row_idx := 1;
3280                 l_new_rows( l_new_row_idx ).PROCESS_FLAG              := old_row.PROCESS_FLAG;
3281                 -- initializing l_merged_row . This row will contain the current merged row for an item
3282                 l_merged_row := NULL;
3283                 l_merged_row.SET_PROCESS_ID            := p_batch_id;
3284                 l_merged_row.PROCESS_FLAG              := old_row.PROCESS_FLAG;
3285             ELSE
3286                 Debug_Conc_Log( l_proc_log_prefix || '  Merging another record into current merged row; rank = '|| l_cur_rank );
3287                 Debug_Conc_Log( l_proc_log_prefix || '    Item, Org-ID, Item-ID = ' ||
3288                                                      old_row.ITEM_NUMBER || ', ' ||
3289                                                      old_row.ORGANIZATION_ID || ', ' ||
3290                                                      old_row.INVENTORY_ITEM_ID);
3291                 l_new_row_idx := l_new_row_idx + 1;
3292                 l_new_rows( l_new_row_idx ).PROCESS_FLAG              := 111;
3293             END IF;
3294 
3295             l_new_rows( l_new_row_idx ).SET_PROCESS_ID               := p_batch_id;
3296             l_new_rows( l_new_row_idx ).SOURCE_SYSTEM_ID             := old_row.SOURCE_SYSTEM_ID;
3297             l_new_rows( l_new_row_idx ).SOURCE_SYSTEM_REFERENCE      := old_row.SOURCE_SYSTEM_REFERENCE;
3298             l_new_rows( l_new_row_idx ).SOURCE_SYSTEM_REFERENCE_DESC := old_row.SOURCE_SYSTEM_REFERENCE_DESC;
3299             l_new_rows( l_new_row_idx ).CONFIRM_STATUS               := old_row.CONFIRM_STATUS;
3300             l_new_rows( l_new_row_idx ).CREATED_BY                   := old_row.CREATED_BY;
3301             l_new_rows( l_new_row_idx ).LAST_UPDATED_BY              := old_row.LAST_UPDATED_BY;
3302 
3303             -- Special Cases:
3304             -- Transaction type
3305             l_candidate_trans := UPPER( old_row.TRANSACTION_TYPE );
3306 
3307             IF      l_merged_row.TRANSACTION_TYPE IS NULL
3308                 OR  l_merged_row.TRANSACTION_TYPE <> l_candidate_trans     -- <> filters out nulls
3309             THEN
3310                 -- CREATE > SYNC > UPDATE : order of case expression matters
3311                 l_merged_row.TRANSACTION_TYPE :=
3312                     CASE
3313                         WHEN l_merged_row.TRANSACTION_TYPE = G_TRANS_TYPE_CREATE
3314                           OR l_candidate_trans = G_TRANS_TYPE_CREATE                            THEN G_TRANS_TYPE_CREATE
3315                         WHEN l_merged_row.TRANSACTION_TYPE = G_TRANS_TYPE_SYNC
3316                           OR l_candidate_trans = G_TRANS_TYPE_SYNC                              THEN G_TRANS_TYPE_SYNC
3317                         WHEN l_merged_row.TRANSACTION_TYPE = G_TRANS_TYPE_UPDATE
3318                           OR l_candidate_trans = G_TRANS_TYPE_UPDATE                            THEN G_TRANS_TYPE_UPDATE
3319                         ELSE NULL -- INVALID transaction types encountered so far ...
3320                     END;
3321             END IF;
3322 
3323             -- The following columns need to be treated as atomic groups
3324             -- 1. Item Identifier
3325             IF      l_merged_row.INVENTORY_ITEM_ID  IS NULL
3326                 AND l_merged_row.ITEM_NUMBER        IS NULL
3327                 AND l_merged_row.SEGMENT1           IS NULL
3328                 AND l_merged_row.SEGMENT2           IS NULL
3329                 AND l_merged_row.SEGMENT3           IS NULL
3330                 AND l_merged_row.SEGMENT4           IS NULL
3331                 AND l_merged_row.SEGMENT5           IS NULL
3332                 AND l_merged_row.SEGMENT6           IS NULL
3333                 AND l_merged_row.SEGMENT7           IS NULL
3334                 AND l_merged_row.SEGMENT8           IS NULL
3335                 AND l_merged_row.SEGMENT9           IS NULL
3336                 AND l_merged_row.SEGMENT10          IS NULL
3337                 AND l_merged_row.SEGMENT11          IS NULL
3338                 AND l_merged_row.SEGMENT12          IS NULL
3339                 AND l_merged_row.SEGMENT13          IS NULL
3340                 AND l_merged_row.SEGMENT14          IS NULL
3341                 AND l_merged_row.SEGMENT15          IS NULL
3342                 AND l_merged_row.SEGMENT16          IS NULL
3343                 AND l_merged_row.SEGMENT17          IS NULL
3344                 AND l_merged_row.SEGMENT18          IS NULL
3345                 AND l_merged_row.SEGMENT19          IS NULL
3346                 AND l_merged_row.SEGMENT20          IS NULL
3347             THEN
3348                 l_merged_row.INVENTORY_ITEM_ID  := old_row.INVENTORY_ITEM_ID;
3349                 l_merged_row.ITEM_NUMBER        := old_row.ITEM_NUMBER;
3350                 l_merged_row.SEGMENT1           := old_row.SEGMENT1;
3351                 l_merged_row.SEGMENT2           := old_row.SEGMENT2;
3352                 l_merged_row.SEGMENT3           := old_row.SEGMENT3;
3353                 l_merged_row.SEGMENT4           := old_row.SEGMENT4;
3354                 l_merged_row.SEGMENT5           := old_row.SEGMENT5;
3355                 l_merged_row.SEGMENT6           := old_row.SEGMENT6;
3356                 l_merged_row.SEGMENT7           := old_row.SEGMENT7;
3357                 l_merged_row.SEGMENT8           := old_row.SEGMENT8;
3358                 l_merged_row.SEGMENT9           := old_row.SEGMENT9;
3359                 l_merged_row.SEGMENT10          := old_row.SEGMENT10;
3360                 l_merged_row.SEGMENT11          := old_row.SEGMENT11;
3361                 l_merged_row.SEGMENT12          := old_row.SEGMENT12;
3362                 l_merged_row.SEGMENT13          := old_row.SEGMENT13;
3363                 l_merged_row.SEGMENT14          := old_row.SEGMENT14;
3364                 l_merged_row.SEGMENT15          := old_row.SEGMENT15;
3365                 l_merged_row.SEGMENT16          := old_row.SEGMENT16;
3366                 l_merged_row.SEGMENT17          := old_row.SEGMENT17;
3367                 l_merged_row.SEGMENT18          := old_row.SEGMENT18;
3368                 l_merged_row.SEGMENT19          := old_row.SEGMENT19;
3369                 l_merged_row.SEGMENT20          := old_row.SEGMENT20;
3370             END IF;
3371 
3372             -- 2. Template Identifier
3373             IF      l_merged_row.TEMPLATE_ID        IS NULL
3374                 AND l_merged_row.TEMPLATE_NAME      IS NULL
3375             THEN
3376                 l_merged_row.TEMPLATE_ID    := old_row.TEMPLATE_ID ;
3377                 l_merged_row.TEMPLATE_NAME  := old_row.TEMPLATE_NAME ;
3378             END IF;
3379 
3380             -- 3. Item Catalog Category
3381             IF      l_merged_row.ITEM_CATALOG_GROUP_ID      IS NULL
3382                 AND l_merged_row.ITEM_CATALOG_GROUP_NAME    IS NULL
3383             THEN
3384                 l_merged_row.ITEM_CATALOG_GROUP_ID      := old_row.ITEM_CATALOG_GROUP_ID ;
3385                 l_merged_row.ITEM_CATALOG_GROUP_NAME    := old_row.ITEM_CATALOG_GROUP_NAME ;
3386             END IF;
3387 
3388             -- 4. Primary UOM
3389             IF      l_merged_row.PRIMARY_UOM_CODE           IS NULL
3390                 AND l_merged_row.PRIMARY_UNIT_OF_MEASURE    IS NULL
3391             THEN
3392                 l_merged_row.PRIMARY_UOM_CODE           := old_row.PRIMARY_UOM_CODE ;
3393                 l_merged_row.PRIMARY_UNIT_OF_MEASURE    := old_row.PRIMARY_UNIT_OF_MEASURE ;
3394             END IF;
3395 
3396             -- 5. Organization
3397             IF      l_merged_row.ORGANIZATION_ID    IS NULL
3398                 AND l_merged_row.ORGANIZATION_CODE  IS NULL
3399             THEN
3400                 l_merged_row.ORGANIZATION_ID        := old_row.ORGANIZATION_ID ;
3401                 l_merged_row.ORGANIZATION_CODE      := old_row.ORGANIZATION_CODE ;
3402             END IF;
3403 
3404             -- 6. Copy Organization
3405             IF      l_merged_row.COPY_ORGANIZATION_ID    IS NULL
3406                 AND l_merged_row.COPY_ORGANIZATION_CODE  IS NULL
3407             THEN
3408                 l_merged_row.COPY_ORGANIZATION_ID        := old_row.COPY_ORGANIZATION_ID ;
3409                 l_merged_row.COPY_ORGANIZATION_CODE      := old_row.COPY_ORGANIZATION_CODE ;
3410             END IF;
3411 
3412             if l_merged_row.ACCEPTABLE_EARLY_DAYS is null then l_merged_row.ACCEPTABLE_EARLY_DAYS := old_row.ACCEPTABLE_EARLY_DAYS; end if;
3413             if l_merged_row.ACCEPTABLE_RATE_DECREASE is null then l_merged_row.ACCEPTABLE_RATE_DECREASE := old_row.ACCEPTABLE_RATE_DECREASE; end if;
3414             if l_merged_row.ACCEPTABLE_RATE_INCREASE is null then l_merged_row.ACCEPTABLE_RATE_INCREASE := old_row.ACCEPTABLE_RATE_INCREASE; end if;
3415             if l_merged_row.ACCOUNTING_RULE_ID is null then l_merged_row.ACCOUNTING_RULE_ID := old_row.ACCOUNTING_RULE_ID; end if;
3416             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;
3417             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;
3418             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;
3419             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;
3420             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;
3421             if l_merged_row.ASN_AUTOEXPIRE_FLAG is null then l_merged_row.ASN_AUTOEXPIRE_FLAG := old_row.ASN_AUTOEXPIRE_FLAG; end if;
3422             if l_merged_row.ASSET_CATEGORY_ID is null then l_merged_row.ASSET_CATEGORY_ID := old_row.ASSET_CATEGORY_ID; end if;
3423             if l_merged_row.ASSET_CREATION_CODE is null then l_merged_row.ASSET_CREATION_CODE := old_row.ASSET_CREATION_CODE; end if;
3424             if l_merged_row.ATO_FORECAST_CONTROL is null then l_merged_row.ATO_FORECAST_CONTROL := old_row.ATO_FORECAST_CONTROL; end if;
3425             if l_merged_row.ATP_COMPONENTS_FLAG is null then l_merged_row.ATP_COMPONENTS_FLAG := old_row.ATP_COMPONENTS_FLAG; end if;
3426             if l_merged_row.ATP_FLAG is null then l_merged_row.ATP_FLAG := old_row.ATP_FLAG; end if;
3427             if l_merged_row.ATP_RULE_ID is null then l_merged_row.ATP_RULE_ID := old_row.ATP_RULE_ID; end if;
3428             if l_merged_row.ATTRIBUTE1 is null then l_merged_row.ATTRIBUTE1 := old_row.ATTRIBUTE1; end if;
3429             if l_merged_row.ATTRIBUTE10 is null then l_merged_row.ATTRIBUTE10 := old_row.ATTRIBUTE10; end if;
3430             if l_merged_row.ATTRIBUTE11 is null then l_merged_row.ATTRIBUTE11 := old_row.ATTRIBUTE11; end if;
3431             if l_merged_row.ATTRIBUTE12 is null then l_merged_row.ATTRIBUTE12 := old_row.ATTRIBUTE12; end if;
3432             if l_merged_row.ATTRIBUTE13 is null then l_merged_row.ATTRIBUTE13 := old_row.ATTRIBUTE13; end if;
3433             if l_merged_row.ATTRIBUTE14 is null then l_merged_row.ATTRIBUTE14 := old_row.ATTRIBUTE14; end if;
3434             if l_merged_row.ATTRIBUTE15 is null then l_merged_row.ATTRIBUTE15 := old_row.ATTRIBUTE15; end if;
3435             if l_merged_row.ATTRIBUTE16 is null then l_merged_row.ATTRIBUTE16 := old_row.ATTRIBUTE16; end if;
3436             if l_merged_row.ATTRIBUTE17 is null then l_merged_row.ATTRIBUTE17 := old_row.ATTRIBUTE17; end if;
3437             if l_merged_row.ATTRIBUTE18 is null then l_merged_row.ATTRIBUTE18 := old_row.ATTRIBUTE18; end if;
3438             if l_merged_row.ATTRIBUTE19 is null then l_merged_row.ATTRIBUTE19 := old_row.ATTRIBUTE19; end if;
3439             if l_merged_row.ATTRIBUTE2 is null then l_merged_row.ATTRIBUTE2 := old_row.ATTRIBUTE2; end if;
3440             if l_merged_row.ATTRIBUTE20 is null then l_merged_row.ATTRIBUTE20 := old_row.ATTRIBUTE20; end if;
3441             if l_merged_row.ATTRIBUTE21 is null then l_merged_row.ATTRIBUTE21 := old_row.ATTRIBUTE21; end if;
3442             if l_merged_row.ATTRIBUTE22 is null then l_merged_row.ATTRIBUTE22 := old_row.ATTRIBUTE22; end if;
3443             if l_merged_row.ATTRIBUTE23 is null then l_merged_row.ATTRIBUTE23 := old_row.ATTRIBUTE23; end if;
3444             if l_merged_row.ATTRIBUTE24 is null then l_merged_row.ATTRIBUTE24 := old_row.ATTRIBUTE24; end if;
3445             if l_merged_row.ATTRIBUTE25 is null then l_merged_row.ATTRIBUTE25 := old_row.ATTRIBUTE25; end if;
3446             if l_merged_row.ATTRIBUTE26 is null then l_merged_row.ATTRIBUTE26 := old_row.ATTRIBUTE26; end if;
3447             if l_merged_row.ATTRIBUTE27 is null then l_merged_row.ATTRIBUTE27 := old_row.ATTRIBUTE27; end if;
3448             if l_merged_row.ATTRIBUTE28 is null then l_merged_row.ATTRIBUTE28 := old_row.ATTRIBUTE28; end if;
3449             if l_merged_row.ATTRIBUTE29 is null then l_merged_row.ATTRIBUTE29 := old_row.ATTRIBUTE29; end if;
3450             if l_merged_row.ATTRIBUTE3 is null then l_merged_row.ATTRIBUTE3 := old_row.ATTRIBUTE3; end if;
3451             if l_merged_row.ATTRIBUTE30 is null then l_merged_row.ATTRIBUTE30 := old_row.ATTRIBUTE30; end if;
3452             if l_merged_row.ATTRIBUTE4 is null then l_merged_row.ATTRIBUTE4 := old_row.ATTRIBUTE4; end if;
3453             if l_merged_row.ATTRIBUTE5 is null then l_merged_row.ATTRIBUTE5 := old_row.ATTRIBUTE5; end if;
3454             if l_merged_row.ATTRIBUTE6 is null then l_merged_row.ATTRIBUTE6 := old_row.ATTRIBUTE6; end if;
3455             if l_merged_row.ATTRIBUTE7 is null then l_merged_row.ATTRIBUTE7 := old_row.ATTRIBUTE7; end if;
3456             if l_merged_row.ATTRIBUTE8 is null then l_merged_row.ATTRIBUTE8 := old_row.ATTRIBUTE8; end if;
3457             if l_merged_row.ATTRIBUTE9 is null then l_merged_row.ATTRIBUTE9 := old_row.ATTRIBUTE9; end if;
3458             if l_merged_row.ATTRIBUTE_CATEGORY is null then l_merged_row.ATTRIBUTE_CATEGORY := old_row.ATTRIBUTE_CATEGORY; end if;
3459             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;
3460             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;
3461             if l_merged_row.AUTO_REDUCE_MPS is null then l_merged_row.AUTO_REDUCE_MPS := old_row.AUTO_REDUCE_MPS; end if;
3462             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;
3463             if l_merged_row.BACK_ORDERABLE_FLAG is null then l_merged_row.BACK_ORDERABLE_FLAG := old_row.BACK_ORDERABLE_FLAG; end if;
3464             if l_merged_row.BASE_ITEM_ID is null then l_merged_row.BASE_ITEM_ID := old_row.BASE_ITEM_ID; end if;
3465             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;
3466             if l_merged_row.BOM_ENABLED_FLAG is null then l_merged_row.BOM_ENABLED_FLAG := old_row.BOM_ENABLED_FLAG; end if;
3467             if l_merged_row.BOM_ITEM_TYPE is null then l_merged_row.BOM_ITEM_TYPE := old_row.BOM_ITEM_TYPE; end if;
3468             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;
3469             if l_merged_row.BULK_PICKED_FLAG is null then l_merged_row.BULK_PICKED_FLAG := old_row.BULK_PICKED_FLAG; end if;
3470             if l_merged_row.BUYER_ID is null then l_merged_row.BUYER_ID := old_row.BUYER_ID; end if;
3471             if l_merged_row.CARRYING_COST is null then l_merged_row.CARRYING_COST := old_row.CARRYING_COST; end if;
3472             if l_merged_row.CAS_NUMBER is null then l_merged_row.CAS_NUMBER := old_row.CAS_NUMBER; end if;
3473             if l_merged_row.CATALOG_STATUS_FLAG is null then l_merged_row.CATALOG_STATUS_FLAG := old_row.CATALOG_STATUS_FLAG; end if;
3474             if l_merged_row.CHANGE_ID is null then l_merged_row.CHANGE_ID := old_row.CHANGE_ID; end if;
3475             if l_merged_row.CHANGE_LINE_ID is null then l_merged_row.CHANGE_LINE_ID := old_row.CHANGE_LINE_ID; end if;
3476             if l_merged_row.CHARGE_PERIODICITY_CODE is null then l_merged_row.CHARGE_PERIODICITY_CODE := old_row.CHARGE_PERIODICITY_CODE; end if;
3477             if l_merged_row.CHECK_SHORTAGES_FLAG is null then l_merged_row.CHECK_SHORTAGES_FLAG := old_row.CHECK_SHORTAGES_FLAG; end if;
3478             if l_merged_row.CHILD_LOT_FLAG is null then l_merged_row.CHILD_LOT_FLAG := old_row.CHILD_LOT_FLAG; end if;
3479             if l_merged_row.CHILD_LOT_PREFIX is null then l_merged_row.CHILD_LOT_PREFIX := old_row.CHILD_LOT_PREFIX; end if;
3480             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;
3481             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;
3482             if l_merged_row.COLLATERAL_FLAG is null then l_merged_row.COLLATERAL_FLAG := old_row.COLLATERAL_FLAG; end if;
3483             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;
3484             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;
3485             if l_merged_row.CONFIG_MATCH is null then l_merged_row.CONFIG_MATCH := old_row.CONFIG_MATCH; end if;
3486             if l_merged_row.CONFIG_MODEL_TYPE is null then l_merged_row.CONFIG_MODEL_TYPE := old_row.CONFIG_MODEL_TYPE; end if;
3487             if l_merged_row.CONFIG_ORGS is null then l_merged_row.CONFIG_ORGS := old_row.CONFIG_ORGS; end if;
3488             if l_merged_row.CONSIGNED_FLAG is null then l_merged_row.CONSIGNED_FLAG := old_row.CONSIGNED_FLAG; end if;
3489             if l_merged_row.CONTAINER_ITEM_FLAG is null then l_merged_row.CONTAINER_ITEM_FLAG := old_row.CONTAINER_ITEM_FLAG; end if;
3490             if l_merged_row.CONTAINER_TYPE_CODE is null then l_merged_row.CONTAINER_TYPE_CODE := old_row.CONTAINER_TYPE_CODE; end if;
3491             if l_merged_row.CONTINOUS_TRANSFER is null then l_merged_row.CONTINOUS_TRANSFER := old_row.CONTINOUS_TRANSFER; end if;
3492             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;
3493             if l_merged_row.CONVERGENCE is null then l_merged_row.CONVERGENCE := old_row.CONVERGENCE; end if;
3494             if l_merged_row.COPY_ITEM_ID is null then l_merged_row.COPY_ITEM_ID := old_row.COPY_ITEM_ID; end if;
3495             if l_merged_row.COPY_ITEM_NUMBER is null then l_merged_row.COPY_ITEM_NUMBER := old_row.COPY_ITEM_NUMBER; end if;
3496             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;
3497             if l_merged_row.COSTING_ENABLED_FLAG is null then l_merged_row.COSTING_ENABLED_FLAG := old_row.COSTING_ENABLED_FLAG; end if;
3498             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;
3499             if l_merged_row.COUPON_EXEMPT_FLAG is null then l_merged_row.COUPON_EXEMPT_FLAG := old_row.COUPON_EXEMPT_FLAG; end if;
3500             if l_merged_row.COVERAGE_SCHEDULE_ID is null then l_merged_row.COVERAGE_SCHEDULE_ID := old_row.COVERAGE_SCHEDULE_ID; end if;
3501             if l_merged_row.CREATE_SUPPLY_FLAG is null then l_merged_row.CREATE_SUPPLY_FLAG := old_row.CREATE_SUPPLY_FLAG; end if;
3502             if l_merged_row.CRITICAL_COMPONENT_FLAG is null then l_merged_row.CRITICAL_COMPONENT_FLAG := old_row.CRITICAL_COMPONENT_FLAG; end if;
3503             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;
3504             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;
3505             if l_merged_row.CURRENT_PHASE_ID is null then l_merged_row.CURRENT_PHASE_ID := old_row.CURRENT_PHASE_ID; end if;
3506             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;
3507             if l_merged_row.CUSTOMER_ORDER_FLAG is null then l_merged_row.CUSTOMER_ORDER_FLAG := old_row.CUSTOMER_ORDER_FLAG; end if;
3508             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;
3509             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;
3510             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;
3511             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;
3512             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;
3513             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;
3514             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;
3515             if l_merged_row.DEFAULT_GRADE is null then l_merged_row.DEFAULT_GRADE := old_row.DEFAULT_GRADE; end if;
3516             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;
3517             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;
3518             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;
3519             if l_merged_row.DEFAULT_SHIPPING_ORG is null then l_merged_row.DEFAULT_SHIPPING_ORG := old_row.DEFAULT_SHIPPING_ORG; end if;
3520             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;
3521             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;
3522             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;
3523             if l_merged_row.DEMAND_SOURCE_LINE is null then l_merged_row.DEMAND_SOURCE_LINE := old_row.DEMAND_SOURCE_LINE; end if;
3524             if l_merged_row.DEMAND_SOURCE_TYPE is null then l_merged_row.DEMAND_SOURCE_TYPE := old_row.DEMAND_SOURCE_TYPE; end if;
3525             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;
3526             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;
3527             if l_merged_row.DESCRIPTION is null then l_merged_row.DESCRIPTION := old_row.DESCRIPTION; end if;
3528             if l_merged_row.DIMENSION_UOM_CODE is null then l_merged_row.DIMENSION_UOM_CODE := old_row.DIMENSION_UOM_CODE; end if;
3529             if l_merged_row.DIVERGENCE is null then l_merged_row.DIVERGENCE := old_row.DIVERGENCE; end if;
3530             if l_merged_row.DOWNLOADABLE_FLAG is null then l_merged_row.DOWNLOADABLE_FLAG := old_row.DOWNLOADABLE_FLAG; end if;
3531             if l_merged_row.DRP_PLANNED_FLAG is null then l_merged_row.DRP_PLANNED_FLAG := old_row.DRP_PLANNED_FLAG; end if;
3532             if l_merged_row.DUAL_UOM_CONTROL is null then l_merged_row.DUAL_UOM_CONTROL := old_row.DUAL_UOM_CONTROL; end if;
3533             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;
3534             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;
3535             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;
3536             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;
3537             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;
3538             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;
3539             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;
3540             if l_merged_row.EAM_ITEM_TYPE is null then l_merged_row.EAM_ITEM_TYPE := old_row.EAM_ITEM_TYPE; end if;
3541             if l_merged_row.EFFECTIVITY_CONTROL is null then l_merged_row.EFFECTIVITY_CONTROL := old_row.EFFECTIVITY_CONTROL; end if;
3542             if l_merged_row.ELECTRONIC_FLAG is null then l_merged_row.ELECTRONIC_FLAG := old_row.ELECTRONIC_FLAG; end if;
3543             if l_merged_row.ENABLED_FLAG is null then l_merged_row.ENABLED_FLAG := old_row.ENABLED_FLAG; end if;
3544             if l_merged_row.ENCUMBRANCE_ACCOUNT is null then l_merged_row.ENCUMBRANCE_ACCOUNT := old_row.ENCUMBRANCE_ACCOUNT; end if;
3545             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;
3546             if l_merged_row.END_DATE_ACTIVE is null then l_merged_row.END_DATE_ACTIVE := old_row.END_DATE_ACTIVE; end if;
3547             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;
3548             if l_merged_row.ENGINEERING_DATE is null then l_merged_row.ENGINEERING_DATE := old_row.ENGINEERING_DATE; end if;
3549             if l_merged_row.ENGINEERING_ECN_CODE is null then l_merged_row.ENGINEERING_ECN_CODE := old_row.ENGINEERING_ECN_CODE; end if;
3550             if l_merged_row.ENGINEERING_ITEM_ID is null then l_merged_row.ENGINEERING_ITEM_ID := old_row.ENGINEERING_ITEM_ID; end if;
3551             if l_merged_row.ENG_ITEM_FLAG is null then l_merged_row.ENG_ITEM_FLAG := old_row.ENG_ITEM_FLAG; end if;
3552             if l_merged_row.EQUIPMENT_TYPE is null then l_merged_row.EQUIPMENT_TYPE := old_row.EQUIPMENT_TYPE; end if;
3553             if l_merged_row.EVENT_FLAG is null then l_merged_row.EVENT_FLAG := old_row.EVENT_FLAG; end if;
3554             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;
3555             if l_merged_row.EXPENSE_ACCOUNT is null then l_merged_row.EXPENSE_ACCOUNT := old_row.EXPENSE_ACCOUNT; end if;
3556             if l_merged_row.EXPENSE_BILLABLE_FLAG is null then l_merged_row.EXPENSE_BILLABLE_FLAG := old_row.EXPENSE_BILLABLE_FLAG; end if;
3557             if l_merged_row.EXPIRATION_ACTION_CODE is null then l_merged_row.EXPIRATION_ACTION_CODE := old_row.EXPIRATION_ACTION_CODE; end if;
3558             if l_merged_row.EXPIRATION_ACTION_INTERVAL is null then l_merged_row.EXPIRATION_ACTION_INTERVAL := old_row.EXPIRATION_ACTION_INTERVAL; end if;
3559             if l_merged_row.FINANCING_ALLOWED_FLAG is null then l_merged_row.FINANCING_ALLOWED_FLAG := old_row.FINANCING_ALLOWED_FLAG; end if;
3560             if l_merged_row.FIXED_DAYS_SUPPLY is null then l_merged_row.FIXED_DAYS_SUPPLY := old_row.FIXED_DAYS_SUPPLY; end if;
3561             if l_merged_row.FIXED_LEAD_TIME is null then l_merged_row.FIXED_LEAD_TIME := old_row.FIXED_LEAD_TIME; end if;
3562             if l_merged_row.FIXED_LOT_MULTIPLIER is null then l_merged_row.FIXED_LOT_MULTIPLIER := old_row.FIXED_LOT_MULTIPLIER; end if;
3563             if l_merged_row.FIXED_ORDER_QUANTITY is null then l_merged_row.FIXED_ORDER_QUANTITY := old_row.FIXED_ORDER_QUANTITY; end if;
3564             if l_merged_row.FORECAST_HORIZON is null then l_merged_row.FORECAST_HORIZON := old_row.FORECAST_HORIZON; end if;
3565             if l_merged_row.FULL_LEAD_TIME is null then l_merged_row.FULL_LEAD_TIME := old_row.FULL_LEAD_TIME; end if;
3566             if l_merged_row.GLOBAL_ATTRIBUTE1 is null then l_merged_row.GLOBAL_ATTRIBUTE1 := old_row.GLOBAL_ATTRIBUTE1; end if;
3567             if l_merged_row.GLOBAL_ATTRIBUTE10 is null then l_merged_row.GLOBAL_ATTRIBUTE10 := old_row.GLOBAL_ATTRIBUTE10; end if;
3568             if l_merged_row.GLOBAL_ATTRIBUTE2 is null then l_merged_row.GLOBAL_ATTRIBUTE2 := old_row.GLOBAL_ATTRIBUTE2; end if;
3569             if l_merged_row.GLOBAL_ATTRIBUTE3 is null then l_merged_row.GLOBAL_ATTRIBUTE3 := old_row.GLOBAL_ATTRIBUTE3; end if;
3570             if l_merged_row.GLOBAL_ATTRIBUTE4 is null then l_merged_row.GLOBAL_ATTRIBUTE4 := old_row.GLOBAL_ATTRIBUTE4; end if;
3571             if l_merged_row.GLOBAL_ATTRIBUTE5 is null then l_merged_row.GLOBAL_ATTRIBUTE5 := old_row.GLOBAL_ATTRIBUTE5; end if;
3572             if l_merged_row.GLOBAL_ATTRIBUTE6 is null then l_merged_row.GLOBAL_ATTRIBUTE6 := old_row.GLOBAL_ATTRIBUTE6; end if;
3573             if l_merged_row.GLOBAL_ATTRIBUTE7 is null then l_merged_row.GLOBAL_ATTRIBUTE7 := old_row.GLOBAL_ATTRIBUTE7; end if;
3574             if l_merged_row.GLOBAL_ATTRIBUTE8 is null then l_merged_row.GLOBAL_ATTRIBUTE8 := old_row.GLOBAL_ATTRIBUTE8; end if;
3575             if l_merged_row.GLOBAL_ATTRIBUTE9 is null then l_merged_row.GLOBAL_ATTRIBUTE9 := old_row.GLOBAL_ATTRIBUTE9; end if;
3576             if l_merged_row.GLOBAL_ATTRIBUTE_CATEGORY is null then l_merged_row.GLOBAL_ATTRIBUTE_CATEGORY := old_row.GLOBAL_ATTRIBUTE_CATEGORY; end if;
3577             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;
3578             if l_merged_row.GRADE_CONTROL_FLAG is null then l_merged_row.GRADE_CONTROL_FLAG := old_row.GRADE_CONTROL_FLAG; end if;
3579             if l_merged_row.GTIN_DESCRIPTION is null then l_merged_row.GTIN_DESCRIPTION := old_row.GTIN_DESCRIPTION; end if;
3580             if l_merged_row.HAZARDOUS_MATERIAL_FLAG is null then l_merged_row.HAZARDOUS_MATERIAL_FLAG := old_row.HAZARDOUS_MATERIAL_FLAG; end if;
3581             if l_merged_row.HAZARD_CLASS_ID is null then l_merged_row.HAZARD_CLASS_ID := old_row.HAZARD_CLASS_ID; end if;
3582             if l_merged_row.HOLD_DAYS is null then l_merged_row.HOLD_DAYS := old_row.HOLD_DAYS; end if;
3583             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;
3584             if l_merged_row.INDIVISIBLE_FLAG is null then l_merged_row.INDIVISIBLE_FLAG := old_row.INDIVISIBLE_FLAG; end if;
3585             if l_merged_row.INSPECTION_REQUIRED_FLAG is null then l_merged_row.INSPECTION_REQUIRED_FLAG := old_row.INSPECTION_REQUIRED_FLAG; end if;
3586             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;
3587             if l_merged_row.INTERNAL_ORDER_FLAG is null then l_merged_row.INTERNAL_ORDER_FLAG := old_row.INTERNAL_ORDER_FLAG; end if;
3588             if l_merged_row.INTERNAL_VOLUME is null then l_merged_row.INTERNAL_VOLUME := old_row.INTERNAL_VOLUME; end if;
3589             if l_merged_row.INVENTORY_ASSET_FLAG is null then l_merged_row.INVENTORY_ASSET_FLAG := old_row.INVENTORY_ASSET_FLAG; end if;
3590             if l_merged_row.INVENTORY_CARRY_PENALTY is null then l_merged_row.INVENTORY_CARRY_PENALTY := old_row.INVENTORY_CARRY_PENALTY; end if;
3591             if l_merged_row.INVENTORY_ITEM_FLAG is null then l_merged_row.INVENTORY_ITEM_FLAG := old_row.INVENTORY_ITEM_FLAG; end if;
3592             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;
3593             if l_merged_row.INVENTORY_PLANNING_CODE is null then l_merged_row.INVENTORY_PLANNING_CODE := old_row.INVENTORY_PLANNING_CODE; end if;
3594             if l_merged_row.INVOICEABLE_ITEM_FLAG is null then l_merged_row.INVOICEABLE_ITEM_FLAG := old_row.INVOICEABLE_ITEM_FLAG; end if;
3595             if l_merged_row.INVOICE_CLOSE_TOLERANCE is null then l_merged_row.INVOICE_CLOSE_TOLERANCE := old_row.INVOICE_CLOSE_TOLERANCE; end if;
3596             if l_merged_row.INVOICE_ENABLED_FLAG is null then l_merged_row.INVOICE_ENABLED_FLAG := old_row.INVOICE_ENABLED_FLAG; end if;
3597             if l_merged_row.INVOICING_RULE_ID is null then l_merged_row.INVOICING_RULE_ID := old_row.INVOICING_RULE_ID; end if;
3598             if l_merged_row.ITEM_TYPE is null then l_merged_row.ITEM_TYPE := old_row.ITEM_TYPE; end if;
3599             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;
3600             if l_merged_row.LIFECYCLE_ID is null then l_merged_row.LIFECYCLE_ID := old_row.LIFECYCLE_ID; end if;
3601             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;
3602             if l_merged_row.LOCATION_CONTROL_CODE is null then l_merged_row.LOCATION_CONTROL_CODE := old_row.LOCATION_CONTROL_CODE; end if;
3603             if l_merged_row.LONG_DESCRIPTION is null then l_merged_row.LONG_DESCRIPTION := old_row.LONG_DESCRIPTION; end if;
3604             if l_merged_row.LOT_CONTROL_CODE is null then l_merged_row.LOT_CONTROL_CODE := old_row.LOT_CONTROL_CODE; end if;
3605             if l_merged_row.LOT_DIVISIBLE_FLAG is null then l_merged_row.LOT_DIVISIBLE_FLAG := old_row.LOT_DIVISIBLE_FLAG; end if;
3606             if l_merged_row.LOT_MERGE_ENABLED is null then l_merged_row.LOT_MERGE_ENABLED := old_row.LOT_MERGE_ENABLED; end if;
3607             if l_merged_row.LOT_SPLIT_ENABLED is null then l_merged_row.LOT_SPLIT_ENABLED := old_row.LOT_SPLIT_ENABLED; end if;
3608             if l_merged_row.LOT_STATUS_ENABLED is null then l_merged_row.LOT_STATUS_ENABLED := old_row.LOT_STATUS_ENABLED; end if;
3609             if l_merged_row.LOT_SUBSTITUTION_ENABLED is null then l_merged_row.LOT_SUBSTITUTION_ENABLED := old_row.LOT_SUBSTITUTION_ENABLED; end if;
3610             if l_merged_row.LOT_TRANSLATE_ENABLED is null then l_merged_row.LOT_TRANSLATE_ENABLED := old_row.LOT_TRANSLATE_ENABLED; end if;
3611             if l_merged_row.MARKET_PRICE is null then l_merged_row.MARKET_PRICE := old_row.MARKET_PRICE; end if;
3612             if l_merged_row.MATERIAL_BILLABLE_FLAG is null then l_merged_row.MATERIAL_BILLABLE_FLAG := old_row.MATERIAL_BILLABLE_FLAG; end if;
3613             if l_merged_row.MATERIAL_COST is null then l_merged_row.MATERIAL_COST := old_row.MATERIAL_COST; end if;
3614             if l_merged_row.MATERIAL_OH_RATE is null then l_merged_row.MATERIAL_OH_RATE := old_row.MATERIAL_OH_RATE; end if;
3615             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;
3616             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;
3617             if l_merged_row.MATERIAL_SUB_ELEM is null then l_merged_row.MATERIAL_SUB_ELEM := old_row.MATERIAL_SUB_ELEM; end if;
3618             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;
3619             if l_merged_row.MATURITY_DAYS is null then l_merged_row.MATURITY_DAYS := old_row.MATURITY_DAYS; end if;
3620             if l_merged_row.MAXIMUM_LOAD_WEIGHT is null then l_merged_row.MAXIMUM_LOAD_WEIGHT := old_row.MAXIMUM_LOAD_WEIGHT; end if;
3621             if l_merged_row.MAXIMUM_ORDER_QUANTITY is null then l_merged_row.MAXIMUM_ORDER_QUANTITY := old_row.MAXIMUM_ORDER_QUANTITY; end if;
3622             if l_merged_row.MAX_MINMAX_QUANTITY is null then l_merged_row.MAX_MINMAX_QUANTITY := old_row.MAX_MINMAX_QUANTITY; end if;
3623             if l_merged_row.MAX_WARRANTY_AMOUNT is null then l_merged_row.MAX_WARRANTY_AMOUNT := old_row.MAX_WARRANTY_AMOUNT; end if;
3624             if l_merged_row.MINIMUM_FILL_PERCENT is null then l_merged_row.MINIMUM_FILL_PERCENT := old_row.MINIMUM_FILL_PERCENT; end if;
3625             if l_merged_row.MINIMUM_LICENSE_QUANTITY is null then l_merged_row.MINIMUM_LICENSE_QUANTITY := old_row.MINIMUM_LICENSE_QUANTITY; end if;
3626             if l_merged_row.MINIMUM_ORDER_QUANTITY is null then l_merged_row.MINIMUM_ORDER_QUANTITY := old_row.MINIMUM_ORDER_QUANTITY; end if;
3627             if l_merged_row.MIN_MINMAX_QUANTITY is null then l_merged_row.MIN_MINMAX_QUANTITY := old_row.MIN_MINMAX_QUANTITY; end if;
3628             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;
3629             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;
3630             if l_merged_row.MRP_PLANNING_CODE is null then l_merged_row.MRP_PLANNING_CODE := old_row.MRP_PLANNING_CODE; end if;
3631             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;
3632             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;
3633             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;
3634             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;
3635             if l_merged_row.NEGATIVE_MEASUREMENT_ERROR is null then l_merged_row.NEGATIVE_MEASUREMENT_ERROR := old_row.NEGATIVE_MEASUREMENT_ERROR; end if;
3636             if l_merged_row.NEW_REVISION_CODE is null then l_merged_row.NEW_REVISION_CODE := old_row.NEW_REVISION_CODE; end if;
3637             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;
3638             if l_merged_row.OPERATION_SLACK_PENALTY is null then l_merged_row.OPERATION_SLACK_PENALTY := old_row.OPERATION_SLACK_PENALTY; end if;
3639             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;
3640             if l_merged_row.ORDER_COST is null then l_merged_row.ORDER_COST := old_row.ORDER_COST; end if;
3641             if l_merged_row.OUTSIDE_OPERATION_FLAG is null then l_merged_row.OUTSIDE_OPERATION_FLAG := old_row.OUTSIDE_OPERATION_FLAG; end if;
3642             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;
3643             if l_merged_row.OUTSOURCED_ASSEMBLY is null then l_merged_row.OUTSOURCED_ASSEMBLY := old_row.OUTSOURCED_ASSEMBLY; end if;
3644             if l_merged_row.OVERCOMPLETION_TOLERANCE_TYPE is null then l_merged_row.OVERCOMPLETION_TOLERANCE_TYPE := old_row.OVERCOMPLETION_TOLERANCE_TYPE; end if;
3645             if l_merged_row.OVERCOMPLETION_TOLERANCE_VALUE is null then l_merged_row.OVERCOMPLETION_TOLERANCE_VALUE := old_row.OVERCOMPLETION_TOLERANCE_VALUE; end if;
3646             if l_merged_row.OVERRUN_PERCENTAGE is null then l_merged_row.OVERRUN_PERCENTAGE := old_row.OVERRUN_PERCENTAGE; end if;
3647             if l_merged_row.OVER_RETURN_TOLERANCE is null then l_merged_row.OVER_RETURN_TOLERANCE := old_row.OVER_RETURN_TOLERANCE; end if;
3648             if l_merged_row.OVER_SHIPMENT_TOLERANCE is null then l_merged_row.OVER_SHIPMENT_TOLERANCE := old_row.OVER_SHIPMENT_TOLERANCE; end if;
3649             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;
3650             if l_merged_row.PAYMENT_TERMS_ID is null then l_merged_row.PAYMENT_TERMS_ID := old_row.PAYMENT_TERMS_ID; end if;
3651             if l_merged_row.PICKING_RULE_ID is null then l_merged_row.PICKING_RULE_ID := old_row.PICKING_RULE_ID; end if;
3652             if l_merged_row.PICK_COMPONENTS_FLAG is null then l_merged_row.PICK_COMPONENTS_FLAG := old_row.PICK_COMPONENTS_FLAG; end if;
3653             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;
3654             if l_merged_row.PLANNER_CODE is null then l_merged_row.PLANNER_CODE := old_row.PLANNER_CODE; end if;
3655             if l_merged_row.PLANNING_EXCEPTION_SET is null then l_merged_row.PLANNING_EXCEPTION_SET := old_row.PLANNING_EXCEPTION_SET; end if;
3656             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;
3657             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;
3658             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;
3659             if l_merged_row.POSITIVE_MEASUREMENT_ERROR is null then l_merged_row.POSITIVE_MEASUREMENT_ERROR := old_row.POSITIVE_MEASUREMENT_ERROR; end if;
3660             if l_merged_row.POSTPROCESSING_LEAD_TIME is null then l_merged_row.POSTPROCESSING_LEAD_TIME := old_row.POSTPROCESSING_LEAD_TIME; end if;
3661             if l_merged_row.PREPOSITION_POINT is null then l_merged_row.PREPOSITION_POINT := old_row.PREPOSITION_POINT; end if;
3662             if l_merged_row.PREPROCESSING_LEAD_TIME is null then l_merged_row.PREPROCESSING_LEAD_TIME := old_row.PREPROCESSING_LEAD_TIME; end if;
3663             if l_merged_row.PREVENTIVE_MAINTENANCE_FLAG is null then l_merged_row.PREVENTIVE_MAINTENANCE_FLAG := old_row.PREVENTIVE_MAINTENANCE_FLAG; end if;
3664             if l_merged_row.PRICE_TOLERANCE_PERCENT is null then l_merged_row.PRICE_TOLERANCE_PERCENT := old_row.PRICE_TOLERANCE_PERCENT; end if;
3665             if l_merged_row.PRIMARY_SPECIALIST_ID is null then l_merged_row.PRIMARY_SPECIALIST_ID := old_row.PRIMARY_SPECIALIST_ID; end if;
3666             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;
3667             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;
3668             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;
3669             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;
3670             if l_merged_row.PROCESS_SUPPLY_SUBINVENTORY is null then l_merged_row.PROCESS_SUPPLY_SUBINVENTORY := old_row.PROCESS_SUPPLY_SUBINVENTORY; end if;
3671             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;
3672             if l_merged_row.PROCESS_YIELD_SUBINVENTORY is null then l_merged_row.PROCESS_YIELD_SUBINVENTORY := old_row.PROCESS_YIELD_SUBINVENTORY; end if;
3673             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;
3674             if l_merged_row.PRORATE_SERVICE_FLAG is null then l_merged_row.PRORATE_SERVICE_FLAG := old_row.PRORATE_SERVICE_FLAG; end if;
3675             if l_merged_row.PURCHASING_ENABLED_FLAG is null then l_merged_row.PURCHASING_ENABLED_FLAG := old_row.PURCHASING_ENABLED_FLAG; end if;
3676             if l_merged_row.PURCHASING_ITEM_FLAG is null then l_merged_row.PURCHASING_ITEM_FLAG := old_row.PURCHASING_ITEM_FLAG; end if;
3677             if l_merged_row.PURCHASING_TAX_CODE is null then l_merged_row.PURCHASING_TAX_CODE := old_row.PURCHASING_TAX_CODE; end if;
3678             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;
3679             if l_merged_row.QTY_RCV_TOLERANCE is null then l_merged_row.QTY_RCV_TOLERANCE := old_row.QTY_RCV_TOLERANCE; end if;
3680             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;
3681             if l_merged_row.RECEIPT_REQUIRED_FLAG is null then l_merged_row.RECEIPT_REQUIRED_FLAG := old_row.RECEIPT_REQUIRED_FLAG; end if;
3682             if l_merged_row.RECEIVE_CLOSE_TOLERANCE is null then l_merged_row.RECEIVE_CLOSE_TOLERANCE := old_row.RECEIVE_CLOSE_TOLERANCE; end if;
3683             if l_merged_row.RECEIVING_ROUTING_ID is null then l_merged_row.RECEIVING_ROUTING_ID := old_row.RECEIVING_ROUTING_ID; end if;
3684             if l_merged_row.RECIPE_ENABLED_FLAG is null then l_merged_row.RECIPE_ENABLED_FLAG := old_row.RECIPE_ENABLED_FLAG; end if;
3685             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;
3686             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;
3687             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;
3688             if l_merged_row.REPAIR_LEADTIME is null then l_merged_row.REPAIR_LEADTIME := old_row.REPAIR_LEADTIME; end if;
3689             if l_merged_row.REPAIR_PROGRAM is null then l_merged_row.REPAIR_PROGRAM := old_row.REPAIR_PROGRAM; end if;
3690             if l_merged_row.REPAIR_YIELD is null then l_merged_row.REPAIR_YIELD := old_row.REPAIR_YIELD; end if;
3691             if l_merged_row.REPETITIVE_PLANNING_FLAG is null then l_merged_row.REPETITIVE_PLANNING_FLAG := old_row.REPETITIVE_PLANNING_FLAG; end if;
3692             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;
3693             if l_merged_row.RESERVABLE_TYPE is null then l_merged_row.RESERVABLE_TYPE := old_row.RESERVABLE_TYPE; end if;
3694             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;
3695             if l_merged_row.RESPONSE_TIME_VALUE is null then l_merged_row.RESPONSE_TIME_VALUE := old_row.RESPONSE_TIME_VALUE; end if;
3696             if l_merged_row.RESTRICT_LOCATORS_CODE is null then l_merged_row.RESTRICT_LOCATORS_CODE := old_row.RESTRICT_LOCATORS_CODE; end if;
3697             if l_merged_row.RESTRICT_SUBINVENTORIES_CODE is null then l_merged_row.RESTRICT_SUBINVENTORIES_CODE := old_row.RESTRICT_SUBINVENTORIES_CODE; end if;
3698             if l_merged_row.RETEST_INTERVAL is null then l_merged_row.RETEST_INTERVAL := old_row.RETEST_INTERVAL; end if;
3699             if l_merged_row.RETURNABLE_FLAG is null then l_merged_row.RETURNABLE_FLAG := old_row.RETURNABLE_FLAG; end if;
3700             if l_merged_row.RETURN_INSPECTION_REQUIREMENT is null then l_merged_row.RETURN_INSPECTION_REQUIREMENT := old_row.RETURN_INSPECTION_REQUIREMENT; end if;
3701             if l_merged_row.REVISION is null then l_merged_row.REVISION := old_row.REVISION; end if;
3702             if l_merged_row.REVISION_IMPORT_POLICY is null then l_merged_row.REVISION_IMPORT_POLICY := old_row.REVISION_IMPORT_POLICY; end if;
3703             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;
3704             if l_merged_row.RFQ_REQUIRED_FLAG is null then l_merged_row.RFQ_REQUIRED_FLAG := old_row.RFQ_REQUIRED_FLAG; end if;
3705             if l_merged_row.ROUNDING_CONTROL_TYPE is null then l_merged_row.ROUNDING_CONTROL_TYPE := old_row.ROUNDING_CONTROL_TYPE; end if;
3706             if l_merged_row.ROUNDING_FACTOR is null then l_merged_row.ROUNDING_FACTOR := old_row.ROUNDING_FACTOR; end if;
3707             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;
3708             if l_merged_row.SALES_ACCOUNT is null then l_merged_row.SALES_ACCOUNT := old_row.SALES_ACCOUNT; end if;
3709             if l_merged_row.SECONDARY_DEFAULT_IND is null then l_merged_row.SECONDARY_DEFAULT_IND := old_row.SECONDARY_DEFAULT_IND; end if;
3710             if l_merged_row.SECONDARY_SPECIALIST_ID is null then l_merged_row.SECONDARY_SPECIALIST_ID := old_row.SECONDARY_SPECIALIST_ID; end if;
3711             if l_merged_row.SECONDARY_UOM_CODE is null then l_merged_row.SECONDARY_UOM_CODE := old_row.SECONDARY_UOM_CODE; end if;
3712             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;
3713             if l_merged_row.SERIAL_STATUS_ENABLED is null then l_merged_row.SERIAL_STATUS_ENABLED := old_row.SERIAL_STATUS_ENABLED; end if;
3714             if l_merged_row.SERVICEABLE_COMPONENT_FLAG is null then l_merged_row.SERVICEABLE_COMPONENT_FLAG := old_row.SERVICEABLE_COMPONENT_FLAG; end if;
3715             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;
3716             if l_merged_row.SERVICEABLE_PRODUCT_FLAG is null then l_merged_row.SERVICEABLE_PRODUCT_FLAG := old_row.SERVICEABLE_PRODUCT_FLAG; end if;
3717             if l_merged_row.SERVICE_DURATION is null then l_merged_row.SERVICE_DURATION := old_row.SERVICE_DURATION; end if;
3718             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;
3719             if l_merged_row.SERVICE_ITEM_FLAG is null then l_merged_row.SERVICE_ITEM_FLAG := old_row.SERVICE_ITEM_FLAG; end if;
3720             if l_merged_row.SERVICE_STARTING_DELAY is null then l_merged_row.SERVICE_STARTING_DELAY := old_row.SERVICE_STARTING_DELAY; end if;
3721             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;
3722             if l_merged_row.SERV_IMPORTANCE_LEVEL is null then l_merged_row.SERV_IMPORTANCE_LEVEL := old_row.SERV_IMPORTANCE_LEVEL; end if;
3723             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;
3724             if l_merged_row.SET_ID is null then l_merged_row.SET_ID := old_row.SET_ID; end if;
3725             if l_merged_row.SHELF_LIFE_CODE is null then l_merged_row.SHELF_LIFE_CODE := old_row.SHELF_LIFE_CODE; end if;
3726             if l_merged_row.SHELF_LIFE_DAYS is null then l_merged_row.SHELF_LIFE_DAYS := old_row.SHELF_LIFE_DAYS; end if;
3727             if l_merged_row.SHIPPABLE_ITEM_FLAG is null then l_merged_row.SHIPPABLE_ITEM_FLAG := old_row.SHIPPABLE_ITEM_FLAG; end if;
3728             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;
3729             if l_merged_row.SHRINKAGE_RATE is null then l_merged_row.SHRINKAGE_RATE := old_row.SHRINKAGE_RATE; end if;
3730             if l_merged_row.SOURCE_ORGANIZATION_ID is null then l_merged_row.SOURCE_ORGANIZATION_ID := old_row.SOURCE_ORGANIZATION_ID; end if;
3731             if l_merged_row.SOURCE_SUBINVENTORY is null then l_merged_row.SOURCE_SUBINVENTORY := old_row.SOURCE_SUBINVENTORY; end if;
3732             if l_merged_row.SOURCE_TYPE is null then l_merged_row.SOURCE_TYPE := old_row.SOURCE_TYPE; end if;
3733             if l_merged_row.SO_AUTHORIZATION_FLAG is null then l_merged_row.SO_AUTHORIZATION_FLAG := old_row.SO_AUTHORIZATION_FLAG; end if;
3734             if l_merged_row.SO_TRANSACTIONS_FLAG is null then l_merged_row.SO_TRANSACTIONS_FLAG := old_row.SO_TRANSACTIONS_FLAG; end if;
3735             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;
3736             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;
3737             if l_merged_row.START_DATE_ACTIVE is null then l_merged_row.START_DATE_ACTIVE := old_row.START_DATE_ACTIVE; end if;
3738             if l_merged_row.STD_LOT_SIZE is null then l_merged_row.STD_LOT_SIZE := old_row.STD_LOT_SIZE; end if;
3739             if l_merged_row.STOCK_ENABLED_FLAG is null then l_merged_row.STOCK_ENABLED_FLAG := old_row.STOCK_ENABLED_FLAG; end if;
3740             if l_merged_row.SUBCONTRACTING_COMPONENT is null then l_merged_row.SUBCONTRACTING_COMPONENT := old_row.SUBCONTRACTING_COMPONENT; end if;
3741             if l_merged_row.SUBSCRIPTION_DEPEND_FLAG is null then l_merged_row.SUBSCRIPTION_DEPEND_FLAG := old_row.SUBSCRIPTION_DEPEND_FLAG; end if;
3742             if l_merged_row.SUBSTITUTION_WINDOW_CODE is null then l_merged_row.SUBSTITUTION_WINDOW_CODE := old_row.SUBSTITUTION_WINDOW_CODE; end if;
3743             if l_merged_row.SUBSTITUTION_WINDOW_DAYS is null then l_merged_row.SUBSTITUTION_WINDOW_DAYS := old_row.SUBSTITUTION_WINDOW_DAYS; end if;
3744             if l_merged_row.SUMMARY_FLAG is null then l_merged_row.SUMMARY_FLAG := old_row.SUMMARY_FLAG; end if;
3745             if l_merged_row.TAXABLE_FLAG is null then l_merged_row.TAXABLE_FLAG := old_row.TAXABLE_FLAG; end if;
3746             if l_merged_row.TAX_CODE is null then l_merged_row.TAX_CODE := old_row.TAX_CODE; end if;
3747             if l_merged_row.TIME_BILLABLE_FLAG is null then l_merged_row.TIME_BILLABLE_FLAG := old_row.TIME_BILLABLE_FLAG; end if;
3748             if l_merged_row.TRACKING_QUANTITY_IND is null then l_merged_row.TRACKING_QUANTITY_IND := old_row.TRACKING_QUANTITY_IND; end if;
3749             if l_merged_row.TRANSACTION_ID is null then l_merged_row.TRANSACTION_ID := old_row.TRANSACTION_ID; end if;
3750             if l_merged_row.UNDER_RETURN_TOLERANCE is null then l_merged_row.UNDER_RETURN_TOLERANCE := old_row.UNDER_RETURN_TOLERANCE; end if;
3751             if l_merged_row.UNDER_SHIPMENT_TOLERANCE is null then l_merged_row.UNDER_SHIPMENT_TOLERANCE := old_row.UNDER_SHIPMENT_TOLERANCE; end if;
3752             if l_merged_row.UNIT_HEIGHT is null then l_merged_row.UNIT_HEIGHT := old_row.UNIT_HEIGHT; end if;
3753             if l_merged_row.UNIT_LENGTH is null then l_merged_row.UNIT_LENGTH := old_row.UNIT_LENGTH; end if;
3754             if l_merged_row.UNIT_OF_ISSUE is null then l_merged_row.UNIT_OF_ISSUE := old_row.UNIT_OF_ISSUE; end if;
3755             if l_merged_row.UNIT_VOLUME is null then l_merged_row.UNIT_VOLUME := old_row.UNIT_VOLUME; end if;
3756             if l_merged_row.UNIT_WEIGHT is null then l_merged_row.UNIT_WEIGHT := old_row.UNIT_WEIGHT; end if;
3757             if l_merged_row.UNIT_WIDTH is null then l_merged_row.UNIT_WIDTH := old_row.UNIT_WIDTH; end if;
3758             if l_merged_row.UN_NUMBER_ID is null then l_merged_row.UN_NUMBER_ID := old_row.UN_NUMBER_ID; end if;
3759             if l_merged_row.USAGE_ITEM_FLAG is null then l_merged_row.USAGE_ITEM_FLAG := old_row.USAGE_ITEM_FLAG; end if;
3760             if l_merged_row.VARIABLE_LEAD_TIME is null then l_merged_row.VARIABLE_LEAD_TIME := old_row.VARIABLE_LEAD_TIME; end if;
3761             if l_merged_row.VEHICLE_ITEM_FLAG is null then l_merged_row.VEHICLE_ITEM_FLAG := old_row.VEHICLE_ITEM_FLAG; end if;
3762             if l_merged_row.VENDOR_WARRANTY_FLAG is null then l_merged_row.VENDOR_WARRANTY_FLAG := old_row.VENDOR_WARRANTY_FLAG; end if;
3763             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;
3764             if l_merged_row.VMI_FORECAST_TYPE is null then l_merged_row.VMI_FORECAST_TYPE := old_row.VMI_FORECAST_TYPE; end if;
3765             if l_merged_row.VMI_MAXIMUM_DAYS is null then l_merged_row.VMI_MAXIMUM_DAYS := old_row.VMI_MAXIMUM_DAYS; end if;
3766             if l_merged_row.VMI_MAXIMUM_UNITS is null then l_merged_row.VMI_MAXIMUM_UNITS := old_row.VMI_MAXIMUM_UNITS; end if;
3767             if l_merged_row.VMI_MINIMUM_DAYS is null then l_merged_row.VMI_MINIMUM_DAYS := old_row.VMI_MINIMUM_DAYS; end if;
3768             if l_merged_row.VMI_MINIMUM_UNITS is null then l_merged_row.VMI_MINIMUM_UNITS := old_row.VMI_MINIMUM_UNITS; end if;
3769             if l_merged_row.VOLUME_UOM_CODE is null then l_merged_row.VOLUME_UOM_CODE := old_row.VOLUME_UOM_CODE; end if;
3770             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;
3771             if l_merged_row.WARRANTY_VENDOR_ID is null then l_merged_row.WARRANTY_VENDOR_ID := old_row.WARRANTY_VENDOR_ID; end if;
3772             if l_merged_row.WEB_STATUS is null then l_merged_row.WEB_STATUS := old_row.WEB_STATUS; end if;
3773             if l_merged_row.WEIGHT_UOM_CODE is null then l_merged_row.WEIGHT_UOM_CODE := old_row.WEIGHT_UOM_CODE; end if;
3774             if l_merged_row.WH_UPDATE_DATE is null then l_merged_row.WH_UPDATE_DATE := old_row.WH_UPDATE_DATE; end if;
3775             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;
3776             if l_merged_row.WIP_SUPPLY_SUBINVENTORY is null then l_merged_row.WIP_SUPPLY_SUBINVENTORY := old_row.WIP_SUPPLY_SUBINVENTORY; end if;
3777             if l_merged_row.WIP_SUPPLY_TYPE is null then l_merged_row.WIP_SUPPLY_TYPE := old_row.WIP_SUPPLY_TYPE; end if;
3778             -- end generated code
3779         END LOOP; -- over old rows
3780 
3781         Debug_Conc_Log( l_proc_log_prefix || 'Total rows requiring merging = ' || c_target_rows%ROWCOUNT );
3782         IF c_target_rows%ISOPEN THEN
3783             CLOSE c_target_rows;
3784         END IF;
3785 
3786         IF l_merged_rows IS NOT NULL THEN
3787             -- delete
3788             Debug_Conc_Log( l_proc_log_prefix || 'Deleting ' || l_old_rowids.COUNT || ' old rows ...' );
3789             FORALL rid_ix IN INDICES OF l_old_rowids
3790                 DELETE FROM MTL_SYSTEM_ITEMS_INTERFACE
3791                     WHERE ROWID = l_old_rowids( rid_ix );
3792             -- insert
3793             Debug_Conc_Log( l_proc_log_prefix || 'Inserting ' || l_merged_rows.COUNT || ' merged rows ...' );
3794             FORALL row_index IN INDICES OF l_merged_rows
3795                 INSERT INTO MTL_SYSTEM_ITEMS_INTERFACE
3796                     VALUES l_merged_rows( row_index );
3797         END IF;
3798         Debug_Conc_Log( l_proc_log_prefix || 'Exiting' );
3799     EXCEPTION WHEN OTHERS THEN
3800         Debug_Conc_Log( l_proc_log_prefix || 'Error - ' || SQLERRM);
3801         IF c_target_rows%ISOPEN THEN
3802             CLOSE c_target_rows;
3803         END IF;
3804         RAISE;
3805     END Merge_Items_For_Import;
3806 
3807     -- Merges Item Revision records
3808     PROCEDURE Merge_Revs_For_Import( p_batch_id       IN NUMBER
3809                                    , p_master_org_id  IN NUMBER
3810                                    )
3811     IS
3812         SUBTYPE MIRI_ROW   IS MTL_ITEM_REVISIONS_INTERFACE%ROWTYPE;
3813         TYPE MIRI_ROWS  IS TABLE OF MIRI_ROW INDEX BY BINARY_INTEGER;
3814 
3815         /*
3816          * Note that the organization_id column is filled in from the organization_code and batch organization_id
3817          *   as part of resolve_ssxref_on_data_load
3818          * revision column is filled in from the revision_id before this cursor is fetched.
3819          */
3820         CURSOR c_target_revs IS
3821           SELECT *
3822           FROM
3823             (SELECT
3824               ROWID rid,
3825               COUNT( * ) OVER ( PARTITION BY ITEM_NUMBER, ORGANIZATION_ID, REVISION ) cnt,
3826               RANK() OVER ( ORDER BY ITEM_NUMBER, ORGANIZATION_ID, REVISION ) rnk,
3827               miri.*
3828             FROM MTL_ITEM_REVISIONS_INTERFACE miri
3829             WHERE PROCESS_FLAG   = 1
3830               AND SET_PROCESS_ID = p_batch_id
3831               AND ITEM_NUMBER IS NOT NULL
3832               AND ORGANIZATION_ID IS NOT NULL
3833               AND REVISION IS NOT NULL
3834               AND EXISTS
3835                   (SELECT NULL
3836                    FROM MTL_PARAMETERS mp
3837                    WHERE mp.ORGANIZATION_ID        = miri.ORGANIZATION_ID
3838                      AND mp.MASTER_ORGANIZATION_ID = p_master_org_id
3839                   )
3840             ) sub
3841           WHERE sub.cnt > 1
3842           ORDER BY rnk, last_update_date DESC NULLS LAST, interface_table_unique_id DESC NULLS LAST;
3843 
3844         TYPE TARGET_ROWS    IS TABLE OF c_target_revs%ROWTYPE;
3845 
3846         l_merged_rows   MIRI_ROWS;
3847         l_new_rows      MIRI_ROWS;
3848         l_merged_row    MIRI_ROW;
3849         l_old_rows      TARGET_ROWS;
3850         l_old_rowids    UROWID_TABLE;
3851 
3852         l_candidate_trans MTL_ITEM_REVISIONS_INTERFACE.TRANSACTION_TYPE%TYPE;
3853 
3854         l_mrow_ix       PLS_INTEGER := 0;
3855         l_new_row_idx   PLS_INTEGER := 0;
3856         l_cur_rank      PLS_INTEGER := 0; -- because rank() starts at 1
3857 
3858         l_proc_log_prefix CONSTANT VARCHAR2(30) := 'Merge_Revs_For_Import - ';
3859     BEGIN
3860         Debug_Conc_Log( l_proc_log_prefix || 'Entering' );
3861         Debug_Conc_Log( l_proc_log_prefix || 'Batch ID: ' || p_batch_id );
3862 
3863         UPDATE MTL_ITEM_REVISIONS_INTERFACE miri
3864             SET REVISION = NVL( (   SELECT r.REVISION
3865                                     FROM MTL_ITEM_REVISIONS_B r
3866                                     WHERE r.REVISION_ID       = miri.REVISION_ID
3867                                       AND r.ORGANIZATION_ID   = miri.ORGANIZATION_ID
3868                                 )
3869                               , REVISION
3870                               )
3871         WHERE REVISION_ID IS NOT NULL
3872           AND SET_PROCESS_ID = p_batch_id
3873           AND PROCESS_FLAG = 1
3874           AND REVISION IS NULL;
3875 
3876         UPDATE MTL_ITEM_REVISIONS_INTERFACE miri
3877         SET ITEM_NUMBER = (SELECT CONCATENATED_SEGMENTS
3878                            FROM MTL_SYSTEM_ITEMS_KFV
3879                            WHERE INVENTORY_ITEM_ID = miri.INVENTORY_ITEM_ID
3880                              AND ORGANIZATION_ID = miri.ORGANIZATION_ID)
3881         WHERE SET_PROCESS_ID = p_batch_id
3882           AND PROCESS_FLAG = 1
3883           AND INVENTORY_ITEM_ID IS NOT NULL
3884           AND ITEM_NUMBER IS NULL;
3885 
3886         OPEN c_target_revs;
3887         FETCH c_target_revs BULK COLLECT INTO l_old_rows;
3888         CLOSE c_target_revs;
3889 
3890         Debug_Conc_Log( l_proc_log_prefix || 'Total rows requiring merging = ' || l_old_rows.COUNT );
3891         IF 0 <>  l_old_rows.COUNT THEN
3892             l_old_rowids := UROWID_TABLE( );
3893             l_old_rowids.EXTEND( l_old_rows.COUNT );
3894 
3895             FOR idx IN l_old_rows.FIRST .. l_old_rows.LAST LOOP
3896                 l_old_rowids( idx ) := l_old_rows( idx ).RID;
3897 
3898                 IF ( l_cur_rank <> l_old_rows( idx ).RNK )
3899                 THEN
3900                     IF l_new_row_idx > 0 THEN
3901                         FOR i IN 1..l_new_row_idx LOOP
3902                             Debug_Conc_Log( l_proc_log_prefix || '  Creating merged record for SSR, SS-ID = ' ||
3903                                                                  l_new_rows( i ).SOURCE_SYSTEM_REFERENCE || ', ' ||
3904                                                                  l_new_rows( i ).SOURCE_SYSTEM_ID);
3905                             l_mrow_ix := l_mrow_ix + 1;
3906                             l_merged_rows( l_mrow_ix )                           := l_merged_row;
3907                             l_merged_rows( l_mrow_ix ).SET_PROCESS_ID            := l_new_rows( i ).SET_PROCESS_ID;
3908                             l_merged_rows( l_mrow_ix ).PROCESS_FLAG              := l_new_rows( i ).PROCESS_FLAG;
3909                             l_merged_rows( l_mrow_ix ).SOURCE_SYSTEM_ID          := l_new_rows( i ).SOURCE_SYSTEM_ID;
3910                             l_merged_rows( l_mrow_ix ).SOURCE_SYSTEM_REFERENCE   := l_new_rows( i ).SOURCE_SYSTEM_REFERENCE;
3911                             l_merged_rows( l_mrow_ix ).CREATED_BY                := l_new_rows( i ).CREATED_BY;
3912                             l_merged_rows( l_mrow_ix ).LAST_UPDATED_BY           := l_new_rows( i ).LAST_UPDATED_BY;
3913                             l_merged_rows( l_mrow_ix ).REQUEST_ID                := FND_GLOBAL.CONC_REQUEST_ID;
3914                             l_merged_rows( l_mrow_ix ).PROGRAM_APPLICATION_ID    := FND_GLOBAL.PROG_APPL_ID;
3915                             l_merged_rows( l_mrow_ix ).PROGRAM_ID                := FND_GLOBAL.CONC_PROGRAM_ID;
3916                             l_merged_rows( l_mrow_ix ).PROGRAM_UPDATE_DATE       := SYSDATE;
3917                         END LOOP; --FOR i IN 1..l_new_row_idx LOOP
3918                     END IF; --IF l_new_row_idx > 0 THEN
3919                     l_cur_rank := l_old_rows( idx ).RNK;
3920                     Debug_Conc_Log( l_proc_log_prefix || '  Starting new merged row; rank = '|| l_cur_rank );
3921                     Debug_Conc_Log( l_proc_log_prefix || '    Item, Org-ID, Item-ID, Revision = ' ||
3922                                                          l_old_rows( idx ).ITEM_NUMBER || ', ' ||
3923                                                          l_old_rows( idx ).ORGANIZATION_ID || ', ' ||
3924                                                          l_old_rows( idx ).INVENTORY_ITEM_ID || ', ' ||
3925                                                          l_old_rows( idx ).REVISION);
3926                     l_new_rows.DELETE;
3927                     l_new_row_idx := 1;
3928                     l_new_rows( l_new_row_idx ).PROCESS_FLAG              := l_old_rows( idx ).PROCESS_FLAG;
3929                     -- initializing l_merged_row . This row will contain the current merged row for an item
3930                     l_merged_row := NULL;
3931                     l_merged_row.SET_PROCESS_ID            := p_batch_id;
3932                     l_merged_row.PROCESS_FLAG              := l_old_rows( idx ).PROCESS_FLAG;
3933                 ELSE
3934                     Debug_Conc_Log( l_proc_log_prefix || '  Merging another record into current merged row; rank = '|| l_cur_rank );
3935                     Debug_Conc_Log( l_proc_log_prefix || '    Item, Org-ID, Item-ID, Revision = ' ||
3936                                                          l_old_rows( idx ).ITEM_NUMBER || ', ' ||
3937                                                          l_old_rows( idx ).ORGANIZATION_ID || ', ' ||
3938                                                          l_old_rows( idx ).INVENTORY_ITEM_ID || ', ' ||
3939                                                          l_old_rows( idx ).REVISION);
3940                     l_new_row_idx := l_new_row_idx + 1;
3941                     l_new_rows( l_new_row_idx ).PROCESS_FLAG              := 111;
3942                 END IF;
3943 
3944                 l_new_rows( l_new_row_idx ).SET_PROCESS_ID            := p_batch_id;
3945                 l_new_rows( l_new_row_idx ).SOURCE_SYSTEM_ID          := l_old_rows( idx ).SOURCE_SYSTEM_ID;
3946                 l_new_rows( l_new_row_idx ).SOURCE_SYSTEM_REFERENCE   := l_old_rows( idx ).SOURCE_SYSTEM_REFERENCE;
3947                 l_new_rows( l_new_row_idx ).CREATED_BY                := l_old_rows( idx ).CREATED_BY;
3948                 l_new_rows( l_new_row_idx ).LAST_UPDATED_BY           := l_old_rows( idx ).LAST_UPDATED_BY;
3949 
3950                 -- Special Cases:
3951                 -- Transaction type
3952                 l_candidate_trans := UPPER( l_old_rows( idx ).TRANSACTION_TYPE );
3953 
3954                 IF      l_merged_row.TRANSACTION_TYPE IS NULL
3955                     OR  l_merged_row.TRANSACTION_TYPE <> l_candidate_trans -- <> filters out nulls
3956                 THEN
3957                     -- CREATE > SYNC > UPDATE : order of case expression matters
3958                     l_merged_row.TRANSACTION_TYPE :=
3959                         CASE
3960                             WHEN l_merged_row.TRANSACTION_TYPE = G_TRANS_TYPE_CREATE
3961                               OR l_candidate_trans = G_TRANS_TYPE_CREATE                            THEN G_TRANS_TYPE_CREATE
3962                             WHEN l_merged_row.TRANSACTION_TYPE = G_TRANS_TYPE_SYNC
3963                               OR l_candidate_trans = G_TRANS_TYPE_SYNC                              THEN G_TRANS_TYPE_SYNC
3964                             WHEN l_merged_row.TRANSACTION_TYPE = G_TRANS_TYPE_UPDATE
3965                               OR l_candidate_trans = G_TRANS_TYPE_UPDATE                            THEN G_TRANS_TYPE_UPDATE
3966                             ELSE NULL -- INVALID transaction types encountered ...
3967                         END;
3968                 END IF;
3969 
3970                 -- The following columns need to be treated as atomic groups
3971                 -- 1. Item Identifier
3972                 IF      l_merged_row.INVENTORY_ITEM_ID  IS NULL
3973                     AND l_merged_row.ITEM_NUMBER        IS NULL
3974                 THEN
3975                     l_merged_row.INVENTORY_ITEM_ID  := l_old_rows( idx ).INVENTORY_ITEM_ID;
3976                     l_merged_row.ITEM_NUMBER        := l_old_rows( idx ).ITEM_NUMBER;
3977                 END IF;
3978 
3979                 -- 2. Organization
3980                 IF      l_merged_row.ORGANIZATION_ID    IS NULL
3981                     AND l_merged_row.ORGANIZATION_CODE  IS NULL
3982                 THEN
3983                     l_merged_row.ORGANIZATION_ID        := l_old_rows( idx ).ORGANIZATION_ID;
3984                     l_merged_row.ORGANIZATION_CODE      := l_old_rows( idx ).ORGANIZATION_CODE;
3985                 END IF;
3986 
3987                 -- 3. Template Identifier
3988                 IF      l_merged_row.TEMPLATE_ID        IS NULL
3989                     AND l_merged_row.TEMPLATE_NAME      IS NULL
3990                 THEN
3991                     l_merged_row.TEMPLATE_ID    := l_old_rows( idx ).TEMPLATE_ID ;
3992                     l_merged_row.TEMPLATE_NAME  := l_old_rows( idx ).TEMPLATE_NAME ;
3993                 END IF;
3994 
3995                 -- Non-special cased
3996                 if l_merged_row.ATTRIBUTE1 is null then l_merged_row.ATTRIBUTE1 := l_old_rows( idx ).ATTRIBUTE1; end if;
3997                 if l_merged_row.ATTRIBUTE10 is null then l_merged_row.ATTRIBUTE10 := l_old_rows( idx ).ATTRIBUTE10; end if;
3998                 if l_merged_row.ATTRIBUTE11 is null then l_merged_row.ATTRIBUTE11 := l_old_rows( idx ).ATTRIBUTE11; end if;
3999                 if l_merged_row.ATTRIBUTE12 is null then l_merged_row.ATTRIBUTE12 := l_old_rows( idx ).ATTRIBUTE12; end if;
4000                 if l_merged_row.ATTRIBUTE13 is null then l_merged_row.ATTRIBUTE13 := l_old_rows( idx ).ATTRIBUTE13; end if;
4001                 if l_merged_row.ATTRIBUTE14 is null then l_merged_row.ATTRIBUTE14 := l_old_rows( idx ).ATTRIBUTE14; end if;
4002                 if l_merged_row.ATTRIBUTE15 is null then l_merged_row.ATTRIBUTE15 := l_old_rows( idx ).ATTRIBUTE15; end if;
4003                 if l_merged_row.ATTRIBUTE2 is null then l_merged_row.ATTRIBUTE2 := l_old_rows( idx ).ATTRIBUTE2; end if;
4004                 if l_merged_row.ATTRIBUTE3 is null then l_merged_row.ATTRIBUTE3 := l_old_rows( idx ).ATTRIBUTE3; end if;
4005                 if l_merged_row.ATTRIBUTE4 is null then l_merged_row.ATTRIBUTE4 := l_old_rows( idx ).ATTRIBUTE4; end if;
4006                 if l_merged_row.ATTRIBUTE5 is null then l_merged_row.ATTRIBUTE5 := l_old_rows( idx ).ATTRIBUTE5; end if;
4007                 if l_merged_row.ATTRIBUTE6 is null then l_merged_row.ATTRIBUTE6 := l_old_rows( idx ).ATTRIBUTE6; end if;
4008                 if l_merged_row.ATTRIBUTE7 is null then l_merged_row.ATTRIBUTE7 := l_old_rows( idx ).ATTRIBUTE7; end if;
4009                 if l_merged_row.ATTRIBUTE8 is null then l_merged_row.ATTRIBUTE8 := l_old_rows( idx ).ATTRIBUTE8; end if;
4010                 if l_merged_row.ATTRIBUTE9 is null then l_merged_row.ATTRIBUTE9 := l_old_rows( idx ).ATTRIBUTE9; end if;
4011                 if l_merged_row.ATTRIBUTE_CATEGORY is null then l_merged_row.ATTRIBUTE_CATEGORY := l_old_rows( idx ).ATTRIBUTE_CATEGORY; end if;
4012                 if l_merged_row.CHANGE_ID is null then l_merged_row.CHANGE_ID := l_old_rows( idx ).CHANGE_ID; end if;
4013                 if l_merged_row.CHANGE_NOTICE is null then l_merged_row.CHANGE_NOTICE := l_old_rows( idx ).CHANGE_NOTICE; end if;
4014                 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;
4015                 if l_merged_row.DESCRIPTION is null then l_merged_row.DESCRIPTION := l_old_rows( idx ).DESCRIPTION; end if;
4016                 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;
4017                 if l_merged_row.EFFECTIVITY_DATE is null then l_merged_row.EFFECTIVITY_DATE := l_old_rows( idx ).EFFECTIVITY_DATE; end if;
4018                 if l_merged_row.IMPLEMENTATION_DATE is null then l_merged_row.IMPLEMENTATION_DATE := l_old_rows( idx ).IMPLEMENTATION_DATE; end if;
4019                 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;
4020                 if l_merged_row.LIFECYCLE_ID is null then l_merged_row.LIFECYCLE_ID := l_old_rows( idx ).LIFECYCLE_ID; end if;
4021                 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;
4022                 if l_merged_row.REVISION is null then l_merged_row.REVISION := l_old_rows( idx ).REVISION; end if;
4023                 if l_merged_row.REVISION_ID is null then l_merged_row.REVISION_ID := l_old_rows( idx ).REVISION_ID; end if;
4024                 if l_merged_row.REVISION_LABEL is null then l_merged_row.REVISION_LABEL := l_old_rows( idx ).REVISION_LABEL; end if;
4025                 if l_merged_row.REVISION_REASON is null then l_merged_row.REVISION_REASON := l_old_rows( idx ).REVISION_REASON; end if;
4026                 if l_merged_row.TRANSACTION_ID is null then l_merged_row.TRANSACTION_ID := l_old_rows( idx ).TRANSACTION_ID; end if;
4027 
4028                 IF idx = l_old_rows.LAST AND l_new_row_idx > 0 THEN
4029                     FOR i IN 1..l_new_row_idx LOOP
4030                         Debug_Conc_Log( l_proc_log_prefix || '  No More records found for processing.');
4031                         Debug_Conc_Log( l_proc_log_prefix || '  Creating merged record for SSR, SS-ID = ' ||
4032                                                              l_new_rows( i ).SOURCE_SYSTEM_REFERENCE || ', ' ||
4033                                                              l_new_rows( i ).SOURCE_SYSTEM_ID);
4034                         l_mrow_ix := l_mrow_ix + 1;
4035                         l_merged_rows( l_mrow_ix )                           := l_merged_row;
4036                         l_merged_rows( l_mrow_ix ).SET_PROCESS_ID            := l_new_rows( i ).SET_PROCESS_ID;
4037                         l_merged_rows( l_mrow_ix ).PROCESS_FLAG              := l_new_rows( i ).PROCESS_FLAG;
4038                         l_merged_rows( l_mrow_ix ).SOURCE_SYSTEM_ID          := l_new_rows( i ).SOURCE_SYSTEM_ID;
4039                         l_merged_rows( l_mrow_ix ).SOURCE_SYSTEM_REFERENCE   := l_new_rows( i ).SOURCE_SYSTEM_REFERENCE;
4040                         l_merged_rows( l_mrow_ix ).CREATED_BY                := l_new_rows( i ).CREATED_BY;
4041                         l_merged_rows( l_mrow_ix ).LAST_UPDATED_BY           := l_new_rows( i ).LAST_UPDATED_BY;
4042                         l_merged_rows( l_mrow_ix ).REQUEST_ID                := FND_GLOBAL.CONC_REQUEST_ID;
4043                         l_merged_rows( l_mrow_ix ).PROGRAM_APPLICATION_ID    := FND_GLOBAL.PROG_APPL_ID;
4044                         l_merged_rows( l_mrow_ix ).PROGRAM_ID                := FND_GLOBAL.CONC_PROGRAM_ID;
4045                         l_merged_rows( l_mrow_ix ).PROGRAM_UPDATE_DATE       := SYSDATE;
4046                     END LOOP; --FOR i IN 1..l_new_row_idx LOOP
4047                 END IF; --IF idx = l_old_rows.LAST AND l_new_row_idx > 0 THEN
4048             END LOOP; -- loop over old rows
4049 
4050             IF l_merged_rows IS NOT NULL THEN
4051                 -- delete
4052                 Debug_Conc_Log( l_proc_log_prefix || 'Deleting ' || l_old_rowids.COUNT || ' old rows ...' );
4053                 FORALL rid_ix IN INDICES OF l_old_rowids
4054                     DELETE FROM MTL_ITEM_REVISIONS_INTERFACE
4055                         WHERE ROWID = l_old_rowids( rid_ix );
4056                 -- insert
4057                 Debug_Conc_Log( l_proc_log_prefix || 'Inserting ' || l_merged_rows.COUNT || ' merged rows ...' );
4058                 FORALL row_index IN INDICES OF l_merged_rows
4059                     INSERT INTO MTL_ITEM_REVISIONS_INTERFACE
4060                         VALUES l_merged_rows( row_index );
4061             END IF;
4062         END IF; -- ENDS IF l_old_rows.count <> 0
4063         Debug_Conc_Log( l_proc_log_prefix || 'Exiting' );
4064     EXCEPTION WHEN OTHERS THEN
4065         Debug_Conc_Log( l_proc_log_prefix || 'Error - ' || SQLERRM);
4066         IF c_target_revs%ISOPEN THEN
4067             CLOSE c_target_revs;
4068         END IF;
4069         RAISE;
4070     END Merge_Revs_For_Import;
4071 
4072     -- Merges Item Category assignments
4073     PROCEDURE Merge_Categories_For_Import( p_batch_id       IN NUMBER
4074                                          , p_master_org_id  IN NUMBER
4075                                          )
4076     IS
4077         SUBTYPE MICI_ROW   IS MTL_ITEM_CATEGORIES_INTERFACE%ROWTYPE;
4078         TYPE MICI_ROWS  IS TABLE OF MICI_ROW INDEX BY BINARY_INTEGER;
4079 
4080         /*
4081          * Note that the organization_id column is filled in from the organization_code and batch organization_id
4082          *   as part of resolve_ssxref_on_data_load
4083          */
4084         CURSOR c_target_categories IS
4085           SELECT *
4086           FROM
4087             (SELECT
4088               ROWID rid,
4089               COUNT( * ) OVER ( PARTITION BY ITEM_NUMBER, ORGANIZATION_ID, CATEGORY_SET_NAME, CATEGORY_NAME ) cnt,
4090               RANK() OVER ( ORDER BY ITEM_NUMBER, ORGANIZATION_ID, CATEGORY_SET_NAME, CATEGORY_NAME ) rnk,
4091               mici.*
4092             FROM MTL_ITEM_CATEGORIES_INTERFACE mici
4093             WHERE PROCESS_FLAG   = 1
4094               AND SET_PROCESS_ID = p_batch_id
4095               AND ITEM_NUMBER IS NOT NULL
4096               AND ORGANIZATION_ID IS NOT NULL
4097               AND CATEGORY_SET_NAME IS NOT NULL
4098               AND CATEGORY_NAME IS NOT NULL
4099               AND EXISTS
4100                   (SELECT NULL
4101                    FROM MTL_PARAMETERS mp
4102                    WHERE mp.ORGANIZATION_ID        = mici.ORGANIZATION_ID
4103                      AND mp.MASTER_ORGANIZATION_ID = p_master_org_id
4104                   )
4105             ) sub
4106           WHERE sub.cnt > 1
4107           ORDER BY rnk, last_update_date DESC NULLS LAST;
4108 
4109         TYPE TARGET_ROWS    IS TABLE OF c_target_categories%ROWTYPE;
4110 
4111         l_merged_rows   MICI_ROWS;
4112         l_new_rows      MICI_ROWS;
4113         l_merged_row    MICI_ROW;
4114         l_old_rows      TARGET_ROWS;
4115         l_old_rowids    UROWID_TABLE;
4116 
4117         l_candidate_trans MTL_ITEM_CATEGORIES_INTERFACE.TRANSACTION_TYPE%TYPE;
4118 
4119         l_mrow_ix       PLS_INTEGER := 0;
4120         l_new_row_idx   PLS_INTEGER := 0;
4121         l_cur_rank      PLS_INTEGER := 0; -- because rank() starts at 1
4122 
4123         l_proc_log_prefix CONSTANT VARCHAR2(50) := 'Merge_Categories_For_Import - ';
4124     BEGIN
4125         Debug_Conc_Log( l_proc_log_prefix || 'Entering' );
4126         Debug_Conc_Log( l_proc_log_prefix || 'Batch ID: ' || p_batch_id );
4127 
4128         UPDATE MTL_ITEM_CATEGORIES_INTERFACE mici
4129             SET CATEGORY_SET_NAME = NVL( mici.CATEGORY_SET_NAME,
4130                                          ( SELECT mcs.CATEGORY_SET_NAME
4131                                            FROM MTL_CATEGORY_SETS mcs
4132                                            WHERE mcs.CATEGORY_SET_ID     = mici.CATEGORY_SET_ID
4133                                          )
4134                                        ),
4135                 CATEGORY_NAME     = NVL( mici.CATEGORY_NAME,
4136                                          ( SELECT mc.CONCATENATED_SEGMENTS
4137                                            FROM MTL_CATEGORIES_KFV mc
4138                                            WHERE mc.CATEGORY_ID     = mici.CATEGORY_ID
4139                                          )
4140                                        )
4141         WHERE ( ( CATEGORY_NAME IS NULL AND CATEGORY_ID IS NOT NULL )
4142              OR ( CATEGORY_SET_NAME IS NULL AND CATEGORY_SET_ID IS NOT NULL )
4143               )
4144           AND SET_PROCESS_ID = p_batch_id
4145           AND PROCESS_FLAG = 1;
4146 
4147         UPDATE MTL_ITEM_CATEGORIES_INTERFACE mici
4148         SET ITEM_NUMBER = (SELECT CONCATENATED_SEGMENTS
4149                            FROM MTL_SYSTEM_ITEMS_KFV
4150                            WHERE INVENTORY_ITEM_ID = mici.INVENTORY_ITEM_ID
4151                              AND ORGANIZATION_ID = mici.ORGANIZATION_ID)
4152         WHERE SET_PROCESS_ID = p_batch_id
4153           AND PROCESS_FLAG = 1
4154           AND INVENTORY_ITEM_ID IS NOT NULL
4155           AND ITEM_NUMBER IS NULL;
4156 
4157         OPEN c_target_categories;
4158         FETCH c_target_categories BULK COLLECT INTO l_old_rows;
4159         CLOSE c_target_categories;
4160 
4161         Debug_Conc_Log( l_proc_log_prefix || 'Total rows requiring merging = ' || l_old_rows.COUNT );
4162         IF 0 <>  l_old_rows.COUNT THEN
4163             l_old_rowids := UROWID_TABLE( );
4164             l_old_rowids.EXTEND( l_old_rows.COUNT );
4165 
4166             FOR idx IN l_old_rows.FIRST .. l_old_rows.LAST LOOP
4167                 l_old_rowids( idx ) := l_old_rows( idx ).RID;
4168 
4169                 IF ( l_cur_rank <> l_old_rows( idx ).RNK )
4170                 THEN
4171                     IF l_new_row_idx > 0 THEN
4172                         FOR i IN 1..l_new_row_idx LOOP
4173                             Debug_Conc_Log( l_proc_log_prefix || '  Creating merged record for SSR, SS-ID = ' ||
4174                                                                  l_new_rows( i ).SOURCE_SYSTEM_REFERENCE || ', ' ||
4175                                                                  l_new_rows( i ).SOURCE_SYSTEM_ID);
4176                             l_mrow_ix := l_mrow_ix + 1;
4177                             l_merged_rows( l_mrow_ix )                           := l_merged_row;
4178                             l_merged_rows( l_mrow_ix ).SET_PROCESS_ID            := l_new_rows( i ).SET_PROCESS_ID;
4179                             l_merged_rows( l_mrow_ix ).PROCESS_FLAG              := l_new_rows( i ).PROCESS_FLAG;
4180                             l_merged_rows( l_mrow_ix ).SOURCE_SYSTEM_ID          := l_new_rows( i ).SOURCE_SYSTEM_ID;
4181                             l_merged_rows( l_mrow_ix ).SOURCE_SYSTEM_REFERENCE   := l_new_rows( i ).SOURCE_SYSTEM_REFERENCE;
4182                             l_merged_rows( l_mrow_ix ).CREATED_BY                := l_new_rows( i ).CREATED_BY;
4183                             l_merged_rows( l_mrow_ix ).LAST_UPDATED_BY           := l_new_rows( i ).LAST_UPDATED_BY;
4184                             l_merged_rows( l_mrow_ix ).REQUEST_ID                := FND_GLOBAL.CONC_REQUEST_ID;
4185                             l_merged_rows( l_mrow_ix ).PROGRAM_APPLICATION_ID    := FND_GLOBAL.PROG_APPL_ID;
4186                             l_merged_rows( l_mrow_ix ).PROGRAM_ID                := FND_GLOBAL.CONC_PROGRAM_ID;
4187                             l_merged_rows( l_mrow_ix ).PROGRAM_UPDATE_DATE       := SYSDATE;
4188                         END LOOP; --FOR i IN 1..l_new_row_idx LOOP
4189                     END IF; --IF l_new_row_idx > 0 THEN
4190                     l_cur_rank := l_old_rows( idx ).RNK;
4191                     Debug_Conc_Log( l_proc_log_prefix || '  Starting new merged row; rank = '|| l_cur_rank );
4192                     Debug_Conc_Log( l_proc_log_prefix || '    Item, Org-ID, Item-ID, Cat-Set, Cat = ' ||
4193                                                          l_old_rows( idx ).ITEM_NUMBER || ', ' ||
4194                                                          l_old_rows( idx ).ORGANIZATION_ID || ', ' ||
4195                                                          l_old_rows( idx ).INVENTORY_ITEM_ID || ', ' ||
4196                                                          l_old_rows( idx ).CATEGORY_SET_NAME || ', ' ||
4197                                                          l_old_rows( idx ).CATEGORY_NAME);
4198                     l_new_rows.DELETE;
4199                     l_new_row_idx := 1;
4200                     l_new_rows( l_new_row_idx ).PROCESS_FLAG              := l_old_rows( idx ).PROCESS_FLAG;
4201                     -- initializing l_merged_row . This row will contain the current merged row for an item
4202                     l_merged_row := NULL;
4203                     l_merged_row.SET_PROCESS_ID            := p_batch_id;
4204                     l_merged_row.PROCESS_FLAG              := l_old_rows( idx ).PROCESS_FLAG;
4205                 ELSE
4206                     Debug_Conc_Log( l_proc_log_prefix || '  Merging another record into current merged row; rank = '|| l_cur_rank );
4207                     Debug_Conc_Log( l_proc_log_prefix || '    Item, Org-ID, Item-ID, Cat-Set, Cat = ' ||
4208                                                          l_old_rows( idx ).ITEM_NUMBER || ', ' ||
4209                                                          l_old_rows( idx ).ORGANIZATION_ID || ', ' ||
4210                                                          l_old_rows( idx ).INVENTORY_ITEM_ID || ', ' ||
4211                                                          l_old_rows( idx ).CATEGORY_SET_NAME || ', ' ||
4212                                                          l_old_rows( idx ).CATEGORY_NAME);
4213                     l_new_row_idx := l_new_row_idx + 1;
4214                     l_new_rows( l_new_row_idx ).PROCESS_FLAG              := 111;
4215                 END IF;
4216 
4217                 l_new_rows( l_new_row_idx ).SET_PROCESS_ID            := p_batch_id;
4218                 l_new_rows( l_new_row_idx ).SOURCE_SYSTEM_ID          := l_old_rows( idx ).SOURCE_SYSTEM_ID;
4219                 l_new_rows( l_new_row_idx ).SOURCE_SYSTEM_REFERENCE   := l_old_rows( idx ).SOURCE_SYSTEM_REFERENCE;
4220                 l_new_rows( l_new_row_idx ).CREATED_BY                := l_old_rows( idx ).CREATED_BY;
4221                 l_new_rows( l_new_row_idx ).LAST_UPDATED_BY           := l_old_rows( idx ).LAST_UPDATED_BY;
4222 
4223                 -- Special Cases:
4224                 -- Transaction type
4225                 l_candidate_trans := UPPER( l_old_rows( idx ).TRANSACTION_TYPE );
4226 
4227                 IF      l_merged_row.TRANSACTION_TYPE IS NULL
4228                     OR  l_merged_row.TRANSACTION_TYPE <> l_candidate_trans -- <> filters out nulls
4229                 THEN
4230                     -- CREATE > SYNC > UPDATE : order of case expression matters
4231                     l_merged_row.TRANSACTION_TYPE :=
4232                         CASE
4233                             WHEN l_merged_row.TRANSACTION_TYPE = G_TRANS_TYPE_CREATE
4234                               OR l_candidate_trans = G_TRANS_TYPE_CREATE                            THEN G_TRANS_TYPE_CREATE
4235                             WHEN l_merged_row.TRANSACTION_TYPE = G_TRANS_TYPE_SYNC
4236                               OR l_candidate_trans = G_TRANS_TYPE_SYNC                              THEN G_TRANS_TYPE_SYNC
4237                             WHEN l_merged_row.TRANSACTION_TYPE = G_TRANS_TYPE_UPDATE
4238                               OR l_candidate_trans = G_TRANS_TYPE_UPDATE                            THEN G_TRANS_TYPE_UPDATE
4239                             ELSE NULL -- INVALID transaction types encountered ...
4240                         END;
4241                 END IF;
4242 
4243                 -- The following columns need to be treated as atomic groups
4244                 -- 1. Item Identifier
4245                 IF      l_merged_row.INVENTORY_ITEM_ID  IS NULL
4246                     AND l_merged_row.ITEM_NUMBER        IS NULL
4247                 THEN
4248                     l_merged_row.INVENTORY_ITEM_ID  := l_old_rows( idx ).INVENTORY_ITEM_ID;
4249                     l_merged_row.ITEM_NUMBER        := l_old_rows( idx ).ITEM_NUMBER;
4250                 END IF;
4251 
4252                 -- 2. Organization
4253                 IF      l_merged_row.ORGANIZATION_ID    IS NULL
4254                     AND l_merged_row.ORGANIZATION_CODE  IS NULL
4255                 THEN
4256                     l_merged_row.ORGANIZATION_ID        := l_old_rows( idx ).ORGANIZATION_ID;
4257                     l_merged_row.ORGANIZATION_CODE      := l_old_rows( idx ).ORGANIZATION_CODE;
4258                 END IF;
4259 
4260                 -- 3. Category Set
4261                 IF      l_merged_row.CATEGORY_SET_ID    IS NULL
4262                     AND l_merged_row.CATEGORY_SET_NAME  IS NULL
4263                 THEN
4264                     l_merged_row.CATEGORY_SET_ID        := l_old_rows( idx ).CATEGORY_SET_ID;
4265                     l_merged_row.CATEGORY_SET_NAME      := l_old_rows( idx ).CATEGORY_SET_NAME;
4266                 END IF;
4267 
4268                 -- 4. Category
4269                 IF      l_merged_row.CATEGORY_ID    IS NULL
4270                     AND l_merged_row.CATEGORY_NAME  IS NULL
4271                 THEN
4272                     l_merged_row.CATEGORY_ID        := l_old_rows( idx ).CATEGORY_ID;
4273                     l_merged_row.CATEGORY_NAME      := l_old_rows( idx ).CATEGORY_NAME;
4274                 END IF;
4275 
4276                 -- Non-special cased
4277                 if l_merged_row.CHANGE_ID is null then l_merged_row.CHANGE_ID := l_old_rows( idx ).CHANGE_ID; end if;
4278                 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;
4279                 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;
4280                 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;
4281                 if l_merged_row.TRANSACTION_ID is null then l_merged_row.TRANSACTION_ID := l_old_rows( idx ).TRANSACTION_ID; end if;
4282 
4283                 IF idx = l_old_rows.LAST AND l_new_row_idx > 0 THEN
4284                     FOR i IN 1..l_new_row_idx LOOP
4285                         Debug_Conc_Log( l_proc_log_prefix || '  No More records found for processing.');
4286                         Debug_Conc_Log( l_proc_log_prefix || '  Creating merged record for SSR, SS-ID = ' ||
4287                                                              l_new_rows( i ).SOURCE_SYSTEM_REFERENCE || ', ' ||
4288                                                              l_new_rows( i ).SOURCE_SYSTEM_ID);
4289                         l_mrow_ix := l_mrow_ix + 1;
4290                         l_merged_rows( l_mrow_ix )                           := l_merged_row;
4291                         l_merged_rows( l_mrow_ix ).SET_PROCESS_ID            := l_new_rows( i ).SET_PROCESS_ID;
4292                         l_merged_rows( l_mrow_ix ).PROCESS_FLAG              := l_new_rows( i ).PROCESS_FLAG;
4293                         l_merged_rows( l_mrow_ix ).SOURCE_SYSTEM_ID          := l_new_rows( i ).SOURCE_SYSTEM_ID;
4294                         l_merged_rows( l_mrow_ix ).SOURCE_SYSTEM_REFERENCE   := l_new_rows( i ).SOURCE_SYSTEM_REFERENCE;
4295                         l_merged_rows( l_mrow_ix ).CREATED_BY                := l_new_rows( i ).CREATED_BY;
4296                         l_merged_rows( l_mrow_ix ).LAST_UPDATED_BY           := l_new_rows( i ).LAST_UPDATED_BY;
4297                         l_merged_rows( l_mrow_ix ).REQUEST_ID                := FND_GLOBAL.CONC_REQUEST_ID;
4298                         l_merged_rows( l_mrow_ix ).PROGRAM_APPLICATION_ID    := FND_GLOBAL.PROG_APPL_ID;
4299                         l_merged_rows( l_mrow_ix ).PROGRAM_ID                := FND_GLOBAL.CONC_PROGRAM_ID;
4300                         l_merged_rows( l_mrow_ix ).PROGRAM_UPDATE_DATE       := SYSDATE;
4301                     END LOOP; --FOR i IN 1..l_new_row_idx LOOP
4302                 END IF; --IF idx = l_old_rows.LAST AND l_new_row_idx > 0 THEN
4303             END LOOP; -- loop over old rows
4304 
4305             IF l_merged_rows IS NOT NULL THEN
4306                 -- delete
4307                 Debug_Conc_Log( l_proc_log_prefix || 'Deleting ' || l_old_rowids.COUNT || ' old rows ...' );
4308                 FORALL rid_ix IN INDICES OF l_old_rowids
4309                     DELETE FROM MTL_ITEM_CATEGORIES_INTERFACE
4310                         WHERE ROWID = l_old_rowids( rid_ix );
4311                 -- insert
4312                 Debug_Conc_Log( l_proc_log_prefix || 'Inserting ' || l_merged_rows.COUNT || ' merged rows ...' );
4313                 FORALL row_index IN INDICES OF l_merged_rows
4314                     INSERT INTO MTL_ITEM_CATEGORIES_INTERFACE
4315                         VALUES l_merged_rows( row_index );
4316             END IF;
4317         END IF; -- ENDS IF l_old_rows.count <> 0
4318         Debug_Conc_Log( l_proc_log_prefix || 'Exiting' );
4319     EXCEPTION WHEN OTHERS THEN
4320         Debug_Conc_Log( l_proc_log_prefix || 'Error - ' || SQLERRM);
4321         IF c_target_categories%ISOPEN THEN
4322             CLOSE c_target_categories;
4323         END IF;
4324         RAISE;
4325     END Merge_Categories_For_Import;
4326 
4327     -- Merges Item Attributes
4328     PROCEDURE Merge_Item_Attrs_For_Import( p_batch_id       IN NUMBER
4329                                          , p_master_org_id  IN NUMBER
4330                                          )
4331     IS
4332         CURSOR c_target_item_attrs IS
4333             SELECT  sub.*
4334                 ,   attrs.DATA_TYPE_CODE
4335             FROM
4336                 ( SELECT
4337                         EIUAI.ROWID rid
4338                         , COUNT( * ) OVER ( PARTITION BY
4339                                                       ITEM_NUMBER
4340                                                     , ATTR_GROUP_INT_NAME
4341                                                     , ATTR_INT_NAME
4342                                                     , DATA_LEVEL_ID
4343                                                     , PK1_VALUE
4344                                                     , PK2_VALUE
4345                                                     , PK3_VALUE
4346                                                     , PK4_VALUE
4347                                                     , PK5_VALUE
4348                                                     , ORGANIZATION_ID
4349                                                     , NVL( ATTR_GROUP_TYPE, G_DEFAULT_ATTR_GROUP_TYPE )
4350                                           )
4351                         cnt
4352                         , RANK() OVER   ( ORDER BY
4353                                                       ITEM_NUMBER
4354                                                     , ATTR_GROUP_INT_NAME
4355                                                     , ATTR_INT_NAME
4356                                                     , DATA_LEVEL_ID
4357                                                     , PK1_VALUE
4358                                                     , PK2_VALUE
4359                                                     , PK3_VALUE
4360                                                     , PK4_VALUE
4361                                                     , PK5_VALUE
4362                                                     , ORGANIZATION_ID
4363                                                     , NVL( ATTR_GROUP_TYPE, G_DEFAULT_ATTR_GROUP_TYPE )
4364                                         )
4365                         rnk
4366                         , eiuai.*
4367                    FROM EGO_ITM_USR_ATTR_INTRFC eiuai, EGO_FND_DSC_FLX_CTX_EXT FL_CTX_EXT
4368                    WHERE DATA_SET_ID                              = p_batch_id
4369                      AND PROCESS_STATUS                           = 1
4370                      AND ITEM_NUMBER                              IS NOT NULL
4371                      AND ORGANIZATION_ID                          IS NOT NULL
4372                      AND FL_CTX_EXT.DESCRIPTIVE_FLEXFIELD_NAME    = NVL( EIUAI.ATTR_GROUP_TYPE, G_DEFAULT_ATTR_GROUP_TYPE )
4373                      AND FL_CTX_EXT.APPLICATION_ID                = 431
4374                      AND FL_CTX_EXT.DESCRIPTIVE_FLEX_CONTEXT_CODE = EIUAI.ATTR_GROUP_INT_NAME
4375                      AND FL_CTX_EXT.MULTI_ROW                     = 'N'
4376                      AND EXISTS( SELECT NULL
4377                                  FROM EGO_ATTR_GROUP_DL A, EGO_DATA_LEVEL_B DL
4378                                  WHERE DL.APPLICATION_ID  = 431
4379                                    AND DL.ATTR_GROUP_TYPE = FL_CTX_EXT.DESCRIPTIVE_FLEXFIELD_NAME
4380                                    AND DL.DATA_LEVEL_NAME IN ( 'ITEM_LEVEL' , 'ITEM_ORG', 'ITEM_SUP', 'ITEM_SUP_SITE', 'ITEM_SUP_SITE_ORG' )
4381                                    /* Bug:11887867
4382                                    AND DL.DATA_LEVEL_ID   = DL.DATA_LEVEL_ID
4383                                    */
4384                                    AND A.DATA_LEVEL_ID   = DL.DATA_LEVEL_ID
4385                                    AND A.ATTR_GROUP_ID    = FL_CTX_EXT.ATTR_GROUP_ID
4386                                )
4387                 ) sub
4388                 , EGO_ATTRS_V attrs
4389             WHERE sub.CNT > 1
4390               AND attrs.APPLICATION_ID    = 431
4391               AND attrs.ATTR_GROUP_NAME   = sub.ATTR_GROUP_INT_NAME
4392               AND attrs.ATTR_NAME         = sub.ATTR_INT_NAME
4393               AND attrs.ATTR_GROUP_TYPE   = NVL( sub.ATTR_GROUP_TYPE, G_DEFAULT_ATTR_GROUP_TYPE )
4394             ORDER BY rnk, last_update_date DESC, interface_table_unique_id DESC;
4395 
4396         TYPE TARGET_ROWS    IS TABLE OF c_target_item_attrs%ROWTYPE;
4397 
4398         l_merged_rows   EIUAI_ROWS;
4399         l_new_rows      EIUAI_ROWS;
4400         l_merged_row    EIUAI_ROW;
4401         l_old_rows      TARGET_ROWS;
4402         l_old_rowids    UROWID_TABLE;
4403 
4404         l_candidate_trans EGO_ITM_USR_ATTR_INTRFC.TRANSACTION_TYPE%TYPE;
4405 
4406         l_cur_rank      PLS_INTEGER := 0; -- because rank() starts at 1
4407         l_mrow_ix       PLS_INTEGER := 0;
4408         l_new_row_idx   PLS_INTEGER := 0;
4409 
4410         l_data_type_code EGO_ATTRS_V.DATA_TYPE_CODE%TYPE;
4411 
4412         l_proc_log_prefix CONSTANT VARCHAR2(50) := 'Merge_Item_Attrs_For_Import - ';
4413     BEGIN
4414         Debug_Conc_Log( l_proc_log_prefix || 'Entering' );
4415         Debug_Conc_Log( l_proc_log_prefix || 'Batch ID: ' || p_batch_id );
4416 
4417         UPDATE EGO_ITM_USR_ATTR_INTRFC eiuai
4418         SET ITEM_NUMBER = (SELECT CONCATENATED_SEGMENTS
4419                            FROM MTL_SYSTEM_ITEMS_KFV
4420                            WHERE INVENTORY_ITEM_ID = eiuai.INVENTORY_ITEM_ID
4421                              AND ORGANIZATION_ID = eiuai.ORGANIZATION_ID)
4422         WHERE DATA_SET_ID = p_batch_id
4423           AND PROCESS_STATUS = 1
4424           AND INVENTORY_ITEM_ID IS NOT NULL
4425           AND ITEM_NUMBER IS NULL;
4426 
4427         OPEN c_target_item_attrs;
4428         FETCH c_target_item_attrs BULK COLLECT INTO l_old_rows;
4429         CLOSE c_target_item_attrs;
4430 
4431         Debug_Conc_Log( l_proc_log_prefix || 'Total rows requiring merging = ' || l_old_rows.COUNT );
4432         IF  0 <> l_old_rows.COUNT THEN
4433             l_old_rowids := UROWID_TABLE( );
4434             l_old_rowids.EXTEND( l_old_rows.COUNT );
4435 
4436             -- process the item-level attrs
4437             FOR idx IN l_old_rows.FIRST .. l_old_rows.LAST LOOP
4438                 l_old_rowids( idx ) := l_old_rows( idx ).RID;
4439 
4440                 IF( l_old_rows( idx ).RNK <> l_cur_rank ) THEN
4441                     IF l_new_row_idx > 0 THEN
4442                         FOR i IN 1..l_new_row_idx LOOP
4443                             Debug_Conc_Log( l_proc_log_prefix || '  Creating merged record for SSR, SS-ID = ' ||
4444                                                                  l_new_rows( i ).SOURCE_SYSTEM_REFERENCE || ', ' ||
4445                                                                  l_new_rows( i ).SOURCE_SYSTEM_ID);
4446                             l_mrow_ix := l_mrow_ix + 1;
4447                             l_merged_rows( l_mrow_ix )                           := l_merged_row;
4448                             l_merged_rows( l_mrow_ix ).DATA_SET_ID               := l_new_rows( i ).DATA_SET_ID;
4449                             l_merged_rows( l_mrow_ix ).PROCESS_STATUS            := l_new_rows( i ).PROCESS_STATUS;
4450                             l_merged_rows( l_mrow_ix ).SOURCE_SYSTEM_ID          := l_new_rows( i ).SOURCE_SYSTEM_ID;
4451                             l_merged_rows( l_mrow_ix ).SOURCE_SYSTEM_REFERENCE   := l_new_rows( i ).SOURCE_SYSTEM_REFERENCE;
4452                             l_merged_rows( l_mrow_ix ).ATTR_GROUP_INT_NAME       := l_new_rows( i ).ATTR_GROUP_INT_NAME;
4453                             l_merged_rows( l_mrow_ix ).ATTR_INT_NAME             := l_new_rows( i ).ATTR_INT_NAME;
4454                             l_merged_rows( l_mrow_ix ).DATA_LEVEL_ID           := l_new_rows( i ).DATA_LEVEL_ID;
4455                             l_merged_rows( l_mrow_ix ).DATA_LEVEL_NAME           := l_new_rows( i ).DATA_LEVEL_NAME;
4456                             l_merged_rows( l_mrow_ix ).PK1_VALUE           := l_new_rows( i ).PK1_VALUE;
4457                             l_merged_rows( l_mrow_ix ).PK2_VALUE           := l_new_rows( i ).PK2_VALUE;
4458                             l_merged_rows( l_mrow_ix ).PK3_VALUE           := l_new_rows( i ).PK3_VALUE;
4459                             l_merged_rows( l_mrow_ix ).PK4_VALUE           := l_new_rows( i ).PK4_VALUE;
4460                             l_merged_rows( l_mrow_ix ).PK5_VALUE           := l_new_rows( i ).PK5_VALUE;
4461                             l_merged_rows( l_mrow_ix ).ROW_IDENTIFIER            := l_new_rows( i ).ROW_IDENTIFIER;
4462                             l_merged_rows( l_mrow_ix ).CREATED_BY                := l_new_rows( i ).CREATED_BY;
4463                             l_merged_rows( l_mrow_ix ).LAST_UPDATED_BY           := l_new_rows( i ).LAST_UPDATED_BY;
4464                             l_merged_rows( l_mrow_ix ).REQUEST_ID                := FND_GLOBAL.CONC_REQUEST_ID;
4465                             l_merged_rows( l_mrow_ix ).PROGRAM_APPLICATION_ID    := FND_GLOBAL.PROG_APPL_ID;
4466                             l_merged_rows( l_mrow_ix ).PROGRAM_ID                := FND_GLOBAL.CONC_PROGRAM_ID;
4467                             l_merged_rows( l_mrow_ix ).PROGRAM_UPDATE_DATE       := SYSDATE;
4468                         END LOOP; --FOR i IN 1..l_new_row_idx LOOP
4469                     END IF; --IF l_new_row_idx > 0 THEN
4470                     l_cur_rank := l_old_rows( idx ).RNK;
4471                     l_data_type_code := l_old_rows( idx ).DATA_TYPE_CODE;
4472 
4473                     Debug_Conc_Log( l_proc_log_prefix || '  Starting new merged row; rank = '|| l_cur_rank );
4474                     Debug_Conc_Log( l_proc_log_prefix || '    Item, Org-ID, Item-ID, AG-Name, Attr-Name = ' ||
4475                                                          l_old_rows( idx ).ITEM_NUMBER || ', ' ||
4476                                                          l_old_rows( idx ).ORGANIZATION_ID || ', ' ||
4477                                                          l_old_rows( idx ).INVENTORY_ITEM_ID || ', ' ||
4478                                                          l_old_rows( idx ).ATTR_GROUP_INT_NAME || ', ' ||
4479                                                          l_old_rows( idx ).ATTR_INT_NAME);
4480                     l_new_rows.DELETE;
4481                     l_new_row_idx := 1;
4482                     l_new_rows( l_new_row_idx ).PROCESS_STATUS          := l_old_rows( idx ).PROCESS_STATUS;
4483                     -- initializing l_merged_row . This row will contain the current merged row for an item
4484                     l_merged_row := NULL;
4485                     l_merged_row.DATA_SET_ID            := p_batch_id;
4486                     l_merged_row.PROCESS_STATUS         := l_old_rows( idx ).PROCESS_STATUS;
4487                 ELSE
4488                     Debug_Conc_Log( l_proc_log_prefix || '  Merging another record into current merged row; rank = '|| l_cur_rank );
4489                     Debug_Conc_Log( l_proc_log_prefix || '    Item, Org-ID, Item-ID, AG-Name, Attr-Name = ' ||
4490                                                          l_old_rows( idx ).ITEM_NUMBER || ', ' ||
4491                                                          l_old_rows( idx ).ORGANIZATION_ID || ', ' ||
4492                                                          l_old_rows( idx ).INVENTORY_ITEM_ID || ', ' ||
4493                                                          l_old_rows( idx ).ATTR_GROUP_INT_NAME || ', ' ||
4494                                                          l_old_rows( idx ).ATTR_INT_NAME);
4495                     l_new_row_idx := l_new_row_idx + 1;
4496                     l_new_rows( l_new_row_idx ).PROCESS_STATUS              := 7;
4497                 END IF;
4498 
4499                 l_new_rows( l_new_row_idx ).DATA_SET_ID               := p_batch_id;
4500                 l_new_rows( l_new_row_idx ).SOURCE_SYSTEM_ID          := l_old_rows( idx ).SOURCE_SYSTEM_ID;
4501                 l_new_rows( l_new_row_idx ).SOURCE_SYSTEM_REFERENCE   := l_old_rows( idx ).SOURCE_SYSTEM_REFERENCE;
4502                 l_new_rows( l_new_row_idx ).ATTR_GROUP_INT_NAME       := l_old_rows( idx ).ATTR_GROUP_INT_NAME;
4503                 l_new_rows( l_new_row_idx ).ATTR_INT_NAME             := l_old_rows( idx ).ATTR_INT_NAME;
4504                 l_new_rows( l_new_row_idx ).DATA_LEVEL_NAME           := l_old_rows( idx ).DATA_LEVEL_NAME;
4505                 l_new_rows( l_new_row_idx ).DATA_LEVEL_ID           := l_old_rows( idx ).DATA_LEVEL_ID;
4506                 l_new_rows( l_new_row_idx ).PK1_VALUE           := l_old_rows( idx ).PK1_VALUE;
4507                 l_new_rows( l_new_row_idx ).PK2_VALUE           := l_old_rows( idx ).PK2_VALUE;
4508                 l_new_rows( l_new_row_idx ).PK3_VALUE           := l_old_rows( idx ).PK3_VALUE;
4509                 l_new_rows( l_new_row_idx ).PK4_VALUE           := l_old_rows( idx ).PK4_VALUE;
4510                 l_new_rows( l_new_row_idx ).PK5_VALUE           := l_old_rows( idx ).PK5_VALUE;
4511                 l_new_rows( l_new_row_idx ).ROW_IDENTIFIER            := l_old_rows( idx ).ROW_IDENTIFIER;
4512                 l_new_rows( l_new_row_idx ).CREATED_BY                := l_old_rows( idx ).CREATED_BY;
4513                 l_new_rows( l_new_row_idx ).LAST_UPDATED_BY           := l_old_rows( idx ).LAST_UPDATED_BY;
4514 
4515                 -- Special Cases:
4516                 -- Transaction type
4517                 l_candidate_trans := UPPER( l_old_rows( idx ).TRANSACTION_TYPE );
4518 
4519                 IF      l_merged_row.TRANSACTION_TYPE IS NULL
4520                     OR  l_merged_row.TRANSACTION_TYPE <> l_candidate_trans     -- <> filters out nulls
4521                 THEN
4522                     -- CREATE > SYNC > UPDATE : order of case expression matters
4523                     l_merged_row.TRANSACTION_TYPE :=
4524                         CASE
4525                             WHEN l_merged_row.TRANSACTION_TYPE = G_TRANS_TYPE_CREATE
4526                               OR l_candidate_trans = G_TRANS_TYPE_CREATE                            THEN G_TRANS_TYPE_CREATE
4527                             WHEN l_merged_row.TRANSACTION_TYPE = G_TRANS_TYPE_SYNC
4528                               OR l_candidate_trans = G_TRANS_TYPE_SYNC                              THEN G_TRANS_TYPE_SYNC
4529                             WHEN l_merged_row.TRANSACTION_TYPE = G_TRANS_TYPE_UPDATE
4530                               OR l_candidate_trans = G_TRANS_TYPE_UPDATE                            THEN G_TRANS_TYPE_UPDATE
4531                             ELSE NULL -- INVALID transaction types encountered so far ...
4532                         END;
4533                 END IF;
4534 
4535 
4536                 -- The following columns need to be treated as atomic groups
4537                 -- 1. Item Identifier
4538                 IF      l_merged_row.INVENTORY_ITEM_ID  IS NULL
4539                     AND l_merged_row.ITEM_NUMBER        IS NULL
4540                 THEN
4541                     l_merged_row.INVENTORY_ITEM_ID  := l_old_rows( idx ).INVENTORY_ITEM_ID;
4542                     l_merged_row.ITEM_NUMBER        := l_old_rows( idx ).ITEM_NUMBER;
4543                 END IF;
4544 
4545                 -- 2. Organization
4546                 IF      l_merged_row.ORGANIZATION_ID    IS NULL
4547                     AND l_merged_row.ORGANIZATION_CODE  IS NULL
4548                 THEN
4549                     l_merged_row.ORGANIZATION_ID        := l_old_rows( idx ).ORGANIZATION_ID ;
4550                     l_merged_row.ORGANIZATION_CODE      := l_old_rows( idx ).ORGANIZATION_CODE ;
4551                 END IF;
4552 
4553                 -- 3. The attribute value
4554                 IF      l_merged_row.ATTR_DISP_VALUE  IS NULL
4555                     AND l_merged_row.ATTR_VALUE_STR   IS NULL
4556                     AND l_merged_row.ATTR_VALUE_DATE  IS NULL
4557                     AND l_merged_row.ATTR_VALUE_NUM   IS NULL
4558                     AND l_merged_row.ATTR_VALUE_UOM       IS NULL
4559                     AND l_merged_row.ATTR_UOM_DISP_VALUE  IS NULL
4560                 THEN
4561                     CASE
4562                         WHEN l_data_type_code = 'C' OR l_data_type_code = 'A' THEN      -- String Attribute
4563                             IF      l_old_rows( idx ).ATTR_VALUE_STR    IS NOT NULL
4564                                 OR  l_old_rows( idx ).ATTR_DISP_VALUE   IS NOT NULL
4565                             THEN
4566                                 l_merged_row.ATTR_VALUE_STR       := l_old_rows( idx ).ATTR_VALUE_STR;
4567                                 l_merged_row.ATTR_DISP_VALUE      := l_old_rows( idx ).ATTR_DISP_VALUE;
4568                                 l_merged_row.ATTR_VALUE_UOM       := l_old_rows( idx ).ATTR_VALUE_UOM;
4569                                 l_merged_row.ATTR_UOM_DISP_VALUE  := l_old_rows( idx ).ATTR_UOM_DISP_VALUE;
4570                             END IF;
4571                         WHEN l_data_type_code = 'X' or l_data_type_code = 'Y' THEN      -- Date Attribute
4572                             IF      l_old_rows( idx ).ATTR_VALUE_DATE   IS NOT NULL
4573                                 OR  l_old_rows( idx ).ATTR_DISP_VALUE   IS NOT NULL
4574                             THEN
4575                                 l_merged_row.ATTR_VALUE_DATE      := l_old_rows( idx ).ATTR_VALUE_DATE;
4576                                 l_merged_row.ATTR_DISP_VALUE      := l_old_rows( idx ).ATTR_DISP_VALUE;
4577                                 l_merged_row.ATTR_VALUE_UOM       := l_old_rows( idx ).ATTR_VALUE_UOM;
4578                                 l_merged_row.ATTR_UOM_DISP_VALUE  := l_old_rows( idx ).ATTR_UOM_DISP_VALUE;
4579                             END IF;
4580                         WHEN l_data_type_code = 'N' THEN                                -- Num Attribute
4581                             IF      l_old_rows( idx ).ATTR_VALUE_NUM    IS NOT NULL
4582                                 OR  l_old_rows( idx ).ATTR_DISP_VALUE   IS NOT NULL
4583                             THEN
4584                                 l_merged_row.ATTR_VALUE_NUM       := l_old_rows( idx ).ATTR_VALUE_NUM;
4585                                 l_merged_row.ATTR_DISP_VALUE      := l_old_rows( idx ).ATTR_DISP_VALUE;
4586                                 l_merged_row.ATTR_VALUE_UOM       := l_old_rows( idx ).ATTR_VALUE_UOM;
4587                                 l_merged_row.ATTR_UOM_DISP_VALUE  := l_old_rows( idx ).ATTR_UOM_DISP_VALUE;
4588                             END IF;
4589                     END CASE;
4590                 END IF;
4591 
4592                 -- Non-special cased
4593                 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;
4594                 if l_merged_row.CHANGE_ID is null then l_merged_row.CHANGE_ID := l_old_rows( idx ).CHANGE_ID; end if;
4595                 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;
4596                 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;
4597                 if l_merged_row.TRANSACTION_ID is null then l_merged_row.TRANSACTION_ID := l_old_rows( idx ).TRANSACTION_ID; end if;
4598                 -- End Generated Code
4599 
4600                 IF idx = l_old_rows.LAST AND l_new_row_idx > 0 THEN
4601                     FOR i IN 1..l_new_row_idx LOOP
4602                         Debug_Conc_Log( l_proc_log_prefix || '  No More records found for processing.');
4603                         Debug_Conc_Log( l_proc_log_prefix || '  Creating merged record for SSR, SS-ID = ' ||
4604                                                              l_new_rows( i ).SOURCE_SYSTEM_REFERENCE || ', ' ||
4605                                                              l_new_rows( i ).SOURCE_SYSTEM_ID);
4606                         l_mrow_ix := l_mrow_ix + 1;
4607                         l_merged_rows( l_mrow_ix )                           := l_merged_row;
4608                         l_merged_rows( l_mrow_ix ).DATA_SET_ID               := l_new_rows( i ).DATA_SET_ID;
4609                         l_merged_rows( l_mrow_ix ).PROCESS_STATUS            := l_new_rows( i ).PROCESS_STATUS;
4610                         l_merged_rows( l_mrow_ix ).SOURCE_SYSTEM_ID          := l_new_rows( i ).SOURCE_SYSTEM_ID;
4611                         l_merged_rows( l_mrow_ix ).SOURCE_SYSTEM_REFERENCE   := l_new_rows( i ).SOURCE_SYSTEM_REFERENCE;
4612                         l_merged_rows( l_mrow_ix ).ATTR_GROUP_INT_NAME       := l_new_rows( i ).ATTR_GROUP_INT_NAME;
4613                         l_merged_rows( l_mrow_ix ).ATTR_INT_NAME             := l_new_rows( i ).ATTR_INT_NAME;
4614                         l_merged_rows( l_mrow_ix ).DATA_LEVEL_NAME           := l_new_rows( i ).DATA_LEVEL_NAME;
4615                         l_merged_rows( l_mrow_ix ).DATA_LEVEL_ID             := l_new_rows( i ).DATA_LEVEL_ID;
4616                         l_merged_rows( l_mrow_ix ).PK1_VALUE           := l_new_rows( i ).PK1_VALUE;
4617                         l_merged_rows( l_mrow_ix ).PK2_VALUE           := l_new_rows( i ).PK2_VALUE;
4618                         l_merged_rows( l_mrow_ix ).PK3_VALUE           := l_new_rows( i ).PK3_VALUE;
4619                         l_merged_rows( l_mrow_ix ).PK4_VALUE           := l_new_rows( i ).PK4_VALUE;
4620                         l_merged_rows( l_mrow_ix ).PK5_VALUE           := l_new_rows( i ).PK5_VALUE;
4621                         l_merged_rows( l_mrow_ix ).ROW_IDENTIFIER            := l_new_rows( i ).ROW_IDENTIFIER;
4622                         l_merged_rows( l_mrow_ix ).CREATED_BY                := l_new_rows( i ).CREATED_BY;
4623                         l_merged_rows( l_mrow_ix ).LAST_UPDATED_BY           := l_new_rows( i ).LAST_UPDATED_BY;
4624                         l_merged_rows( l_mrow_ix ).REQUEST_ID                := FND_GLOBAL.CONC_REQUEST_ID;
4625                         l_merged_rows( l_mrow_ix ).PROGRAM_APPLICATION_ID    := FND_GLOBAL.PROG_APPL_ID;
4626                         l_merged_rows( l_mrow_ix ).PROGRAM_ID                := FND_GLOBAL.CONC_PROGRAM_ID;
4627                         l_merged_rows( l_mrow_ix ).PROGRAM_UPDATE_DATE       := SYSDATE;
4628                     END LOOP; --FOR i IN 1..l_new_row_idx LOOP
4629                 END IF; --IF idx = l_old_rows.LAST AND l_new_row_idx > 0 THEN
4630             END LOOP; -- loop over old rows
4631 
4632             IF l_merged_rows IS NOT NULL THEN
4633                 -- delete
4634                 Debug_Conc_Log( l_proc_log_prefix || l_old_rowids.COUNT || ' old rows ...' );
4635                 FORALL rid_ix IN INDICES OF l_old_rowids
4636                     DELETE FROM EGO_ITM_USR_ATTR_INTRFC
4637                         WHERE ROWID = l_old_rowids( rid_ix );
4638                 -- insert
4639                 Debug_Conc_Log( l_proc_log_prefix || l_merged_rows.COUNT || ' merged rows ...' );
4640                 FORALL row_index IN INDICES OF l_merged_rows
4641                     INSERT INTO EGO_ITM_USR_ATTR_INTRFC
4642                         VALUES l_merged_rows( row_index );
4643             END IF;
4644         END IF; -- ENDS IF l_old_rows.count <> 0
4645 
4646         Debug_Conc_Log( l_proc_log_prefix || 'Exiting' );
4647     EXCEPTION WHEN OTHERS THEN
4648         Debug_Conc_Log( l_proc_log_prefix || 'Error - ' || SQLERRM);
4649         IF c_target_item_attrs%ISOPEN THEN
4650             CLOSE c_target_item_attrs;
4651         END IF;
4652         RAISE;
4653     END Merge_Item_Attrs_For_Import;
4654 
4655     -- Merges Item Revision Attributes
4656     PROCEDURE Merge_Rev_Attrs_For_Import( p_batch_id       IN NUMBER
4657                                         , p_master_org_id  IN NUMBER
4658                                         )
4659     IS
4660         CURSOR c_target_rev_attrs(cp_rev_dl_id NUMBER) IS
4661             SELECT  sub.*
4662                 ,   attrs.DATA_TYPE_CODE
4663             FROM
4664                 ( SELECT
4665                         eiuai.ROWID rid
4666                         , COUNT( * ) OVER ( PARTITION BY
4667                                                       ITEM_NUMBER
4668                                                     , ATTR_GROUP_INT_NAME
4669                                                     , ATTR_INT_NAME
4670                                                     , ORGANIZATION_ID
4671                                                     , REVISION
4672                                                     , NVL( ATTR_GROUP_TYPE, G_DEFAULT_ATTR_GROUP_TYPE )
4673                                           )
4674                         cnt
4675                         , RANK() OVER   ( ORDER BY
4676                                                       ITEM_NUMBER
4677                                                     , ATTR_GROUP_INT_NAME
4678                                                     , ATTR_INT_NAME
4679                                                     , ORGANIZATION_ID
4680                                                     , REVISION
4681                                                     , NVL( ATTR_GROUP_TYPE, G_DEFAULT_ATTR_GROUP_TYPE )
4682                                         )
4683                         rnk
4684                         , eiuai.*
4685                    FROM EGO_ITM_USR_ATTR_INTRFC eiuai, EGO_FND_DSC_FLX_CTX_EXT FL_CTX_EXT
4686                    WHERE DATA_SET_ID                              = p_batch_id
4687                      AND PROCESS_STATUS                           = 1
4688                      AND ITEM_NUMBER                              IS NOT NULL
4689                      AND ORGANIZATION_ID                          IS NOT NULL
4690                      AND FL_CTX_EXT.DESCRIPTIVE_FLEXFIELD_NAME    = NVL( EIUAI.ATTR_GROUP_TYPE, G_DEFAULT_ATTR_GROUP_TYPE )
4691                      AND FL_CTX_EXT.APPLICATION_ID                = 431
4692                      AND FL_CTX_EXT.DESCRIPTIVE_FLEX_CONTEXT_CODE = EIUAI.ATTR_GROUP_INT_NAME
4693                      AND FL_CTX_EXT.MULTI_ROW                     = 'N'
4694                      AND EXISTS( SELECT NULL
4695                                  FROM EGO_ATTR_GROUP_DL A
4696                                  WHERE A.DATA_LEVEL_ID = cp_rev_dl_id
4697                                    AND A.ATTR_GROUP_ID  = FL_CTX_EXT.ATTR_GROUP_ID
4698                                )
4699                 ) sub
4700                 , EGO_ATTRS_V attrs
4701             WHERE sub.CNT > 1
4702               AND attrs.APPLICATION_ID    = 431
4703               AND attrs.ATTR_GROUP_NAME   = sub.ATTR_GROUP_INT_NAME
4704               AND attrs.ATTR_NAME         = sub.ATTR_INT_NAME
4705               AND attrs.ATTR_GROUP_TYPE   = NVL( sub.ATTR_GROUP_TYPE, G_DEFAULT_ATTR_GROUP_TYPE )
4706             ORDER BY rnk, last_update_date DESC, interface_table_unique_id DESC;
4707 
4708         TYPE TARGET_ROWS    IS TABLE OF c_target_rev_attrs%ROWTYPE;
4709 
4710         l_merged_rows   EIUAI_ROWS;
4711         l_new_rows      EIUAI_ROWS;
4712         l_merged_row    EIUAI_ROW;
4713         l_old_rows      TARGET_ROWS;
4714         l_old_rowids    UROWID_TABLE;
4715 
4716         l_candidate_trans EGO_ITM_USR_ATTR_INTRFC.TRANSACTION_TYPE%TYPE;
4717 
4718         l_cur_rank      PLS_INTEGER := 0; -- because rank() starts at 1
4719         l_mrow_ix       PLS_INTEGER := 0;
4720         l_new_row_idx   PLS_INTEGER := 0;
4721         l_rev_dl_id     NUMBER;
4722 
4723         l_data_type_code EGO_ATTRS_V.DATA_TYPE_CODE%TYPE;
4724 
4725         l_proc_log_prefix CONSTANT VARCHAR2(50) := 'Merge_Rev_Attrs_For_Import - ';
4726     BEGIN
4727         Debug_Conc_Log( l_proc_log_prefix || 'Entering' );
4728         Debug_Conc_Log( l_proc_log_prefix || 'Batch ID: ' || p_batch_id );
4729         BEGIN
4730           SELECT DATA_LEVEL_ID INTO l_rev_dl_id
4731           FROM EGO_DATA_LEVEL_B
4732           WHERE ATTR_GROUP_TYPE = 'EGO_ITEMMGMT_GROUP'
4733             AND APPLICATION_ID = 431
4734             AND DATA_LEVEL_NAME = 'ITEM_REVISION_LEVEL';
4735         EXCEPTION WHEN NO_DATA_FOUND THEN
4736           RETURN;
4737         END;
4738         Debug_Conc_Log( l_proc_log_prefix || 'l_rev_dl_id: ' || l_rev_dl_id );
4739 
4740         UPDATE EGO_ITM_USR_ATTR_INTRFC eiuai
4741         SET ITEM_NUMBER = (SELECT CONCATENATED_SEGMENTS
4742                            FROM MTL_SYSTEM_ITEMS_KFV
4743                            WHERE INVENTORY_ITEM_ID = eiuai.INVENTORY_ITEM_ID
4744                              AND ORGANIZATION_ID = eiuai.ORGANIZATION_ID)
4745         WHERE DATA_SET_ID = p_batch_id
4746           AND PROCESS_STATUS = 1
4747           AND INVENTORY_ITEM_ID IS NOT NULL
4748           AND ITEM_NUMBER IS NULL;
4749 
4750         OPEN c_target_rev_attrs(l_rev_dl_id);
4751         FETCH c_target_rev_attrs BULK COLLECT INTO l_old_rows;
4752         CLOSE c_target_rev_attrs;
4753 
4754         Debug_Conc_Log( l_proc_log_prefix || 'Total rows requiring merging = ' || l_old_rows.COUNT );
4755         IF  0 <> l_old_rows.COUNT THEN
4756             l_old_rowids := UROWID_TABLE( );
4757             l_old_rowids.EXTEND( l_old_rows.COUNT );
4758 
4759             -- process the item-level attrs
4760             FOR idx IN l_old_rows.FIRST .. l_old_rows.LAST LOOP
4761                 l_old_rowids( idx ) := l_old_rows( idx ).RID;
4762 
4763                 IF( l_old_rows( idx ).RNK <> l_cur_rank ) THEN
4764                     IF l_new_row_idx > 0 THEN
4765                         FOR i IN 1..l_new_row_idx LOOP
4766                             Debug_Conc_Log( l_proc_log_prefix || '  Creating merged record for SSR, SS-ID = ' ||
4767                                                                  l_new_rows( i ).SOURCE_SYSTEM_REFERENCE || ', ' ||
4768                                                                  l_new_rows( i ).SOURCE_SYSTEM_ID);
4769                             l_mrow_ix := l_mrow_ix + 1;
4770                             l_merged_rows( l_mrow_ix )                           := l_merged_row;
4771                             l_merged_rows( l_mrow_ix ).DATA_SET_ID               := l_new_rows( i ).DATA_SET_ID;
4772                             l_merged_rows( l_mrow_ix ).PROCESS_STATUS            := l_new_rows( i ).PROCESS_STATUS;
4773                             l_merged_rows( l_mrow_ix ).SOURCE_SYSTEM_ID          := l_new_rows( i ).SOURCE_SYSTEM_ID;
4774                             l_merged_rows( l_mrow_ix ).SOURCE_SYSTEM_REFERENCE   := l_new_rows( i ).SOURCE_SYSTEM_REFERENCE;
4775                             l_merged_rows( l_mrow_ix ).ATTR_GROUP_INT_NAME       := l_new_rows( i ).ATTR_GROUP_INT_NAME;
4776                             l_merged_rows( l_mrow_ix ).ATTR_INT_NAME             := l_new_rows( i ).ATTR_INT_NAME;
4777                             l_merged_rows( l_mrow_ix ).DATA_LEVEL_NAME           := l_new_rows( i ).DATA_LEVEL_NAME;
4778                             l_merged_rows( l_mrow_ix ).DATA_LEVEL_ID           := l_new_rows( i ).DATA_LEVEL_ID;
4779                             l_merged_rows( l_mrow_ix ).ROW_IDENTIFIER            := l_new_rows( i ).ROW_IDENTIFIER;
4780                             l_merged_rows( l_mrow_ix ).CREATED_BY                := l_new_rows( i ).CREATED_BY;
4781                             l_merged_rows( l_mrow_ix ).LAST_UPDATED_BY           := l_new_rows( i ).LAST_UPDATED_BY;
4782                             l_merged_rows( l_mrow_ix ).REQUEST_ID                := FND_GLOBAL.CONC_REQUEST_ID;
4783                             l_merged_rows( l_mrow_ix ).PROGRAM_APPLICATION_ID    := FND_GLOBAL.PROG_APPL_ID;
4784                             l_merged_rows( l_mrow_ix ).PROGRAM_ID                := FND_GLOBAL.CONC_PROGRAM_ID;
4785                             l_merged_rows( l_mrow_ix ).PROGRAM_UPDATE_DATE       := SYSDATE;
4786                         END LOOP; --FOR i IN 1..l_new_row_idx LOOP
4787                     END IF; --IF l_new_row_idx > 0 THEN
4788                     l_cur_rank := l_old_rows( idx ).RNK;
4789                     l_data_type_code := l_old_rows( idx ).DATA_TYPE_CODE;
4790 
4791                     Debug_Conc_Log( l_proc_log_prefix || '  Starting new merged row; rank = '|| l_cur_rank );
4792                     Debug_Conc_Log( l_proc_log_prefix || '    Item, Org-ID, Item-ID, AG-Name, Attr-Name = ' ||
4793                                                          l_old_rows( idx ).ITEM_NUMBER || ', ' ||
4794                                                          l_old_rows( idx ).ORGANIZATION_ID || ', ' ||
4795                                                          l_old_rows( idx ).INVENTORY_ITEM_ID || ', ' ||
4796                                                          l_old_rows( idx ).ATTR_GROUP_INT_NAME || ', ' ||
4797                                                          l_old_rows( idx ).ATTR_INT_NAME);
4798                     l_new_rows.DELETE;
4799                     l_new_row_idx := 1;
4800                     l_new_rows( l_new_row_idx ).PROCESS_STATUS          := l_old_rows( idx ).PROCESS_STATUS;
4801                     -- initializing l_merged_row . This row will contain the current merged row for an item
4802                     l_merged_row := NULL;
4803                     l_merged_row.DATA_SET_ID            := p_batch_id;
4804                     l_merged_row.PROCESS_STATUS         := l_old_rows( idx ).PROCESS_STATUS;
4805                 ELSE
4806                     Debug_Conc_Log( l_proc_log_prefix || '  Merging another record into current merged row; rank = '|| l_cur_rank );
4807                     Debug_Conc_Log( l_proc_log_prefix || '    Item, Org-ID, Item-ID, AG-Name, Attr-Name = ' ||
4808                                                          l_old_rows( idx ).ITEM_NUMBER || ', ' ||
4809                                                          l_old_rows( idx ).ORGANIZATION_ID || ', ' ||
4810                                                          l_old_rows( idx ).INVENTORY_ITEM_ID || ', ' ||
4811                                                          l_old_rows( idx ).ATTR_GROUP_INT_NAME || ', ' ||
4812                                                          l_old_rows( idx ).ATTR_INT_NAME);
4813                     l_new_row_idx := l_new_row_idx + 1;
4814                     l_new_rows( l_new_row_idx ).PROCESS_STATUS              := 7;
4815                 END IF;
4816 
4817                 l_new_rows( l_new_row_idx ).DATA_SET_ID               := p_batch_id;
4818                 l_new_rows( l_new_row_idx ).SOURCE_SYSTEM_ID          := l_old_rows( idx ).SOURCE_SYSTEM_ID;
4819                 l_new_rows( l_new_row_idx ).SOURCE_SYSTEM_REFERENCE   := l_old_rows( idx ).SOURCE_SYSTEM_REFERENCE;
4820                 l_new_rows( l_new_row_idx ).ATTR_GROUP_INT_NAME       := l_old_rows( idx ).ATTR_GROUP_INT_NAME;
4821                 l_new_rows( l_new_row_idx ).ATTR_INT_NAME             := l_old_rows( idx ).ATTR_INT_NAME;
4822                 l_new_rows( l_new_row_idx ).DATA_LEVEL_NAME           := l_old_rows( idx ).DATA_LEVEL_NAME;
4823                 l_new_rows( l_new_row_idx ).DATA_LEVEL_ID             := l_old_rows( idx ).DATA_LEVEL_ID;
4824                 l_new_rows( l_new_row_idx ).ROW_IDENTIFIER            := l_old_rows( idx ).ROW_IDENTIFIER;
4825                 l_new_rows( l_new_row_idx ).CREATED_BY                := l_old_rows( idx ).CREATED_BY;
4826                 l_new_rows( l_new_row_idx ).LAST_UPDATED_BY           := l_old_rows( idx ).LAST_UPDATED_BY;
4827 
4828                 -- Special Cases:
4829                 -- Transaction type
4830                 l_candidate_trans := UPPER( l_old_rows( idx ).TRANSACTION_TYPE );
4831 
4832                 IF      l_merged_row.TRANSACTION_TYPE IS NULL
4833                     OR  l_merged_row.TRANSACTION_TYPE <> l_candidate_trans     -- <> filters out nulls
4834                 THEN
4835                     -- CREATE > SYNC > UPDATE : order of case expression matters
4836                     l_merged_row.TRANSACTION_TYPE :=
4837                         CASE
4838                             WHEN l_merged_row.TRANSACTION_TYPE = G_TRANS_TYPE_CREATE
4839                               OR l_candidate_trans = G_TRANS_TYPE_CREATE                            THEN G_TRANS_TYPE_CREATE
4840                             WHEN l_merged_row.TRANSACTION_TYPE = G_TRANS_TYPE_SYNC
4841                               OR l_candidate_trans = G_TRANS_TYPE_SYNC                              THEN G_TRANS_TYPE_SYNC
4842                             WHEN l_merged_row.TRANSACTION_TYPE = G_TRANS_TYPE_UPDATE
4843                               OR l_candidate_trans = G_TRANS_TYPE_UPDATE                            THEN G_TRANS_TYPE_UPDATE
4844                             ELSE NULL -- INVALID transaction types encountered so far ...
4845                         END;
4846                 END IF;
4847 
4848 
4849                 -- The following columns need to be treated as atomic groups
4850                 -- 1. Item Identifier
4851                 IF      l_merged_row.INVENTORY_ITEM_ID  IS NULL
4852                     AND l_merged_row.ITEM_NUMBER        IS NULL
4853                 THEN
4854                     l_merged_row.INVENTORY_ITEM_ID  := l_old_rows( idx ).INVENTORY_ITEM_ID;
4855                     l_merged_row.ITEM_NUMBER        := l_old_rows( idx ).ITEM_NUMBER;
4856                 END IF;
4857 
4858                 -- 2. Organization
4859                 IF      l_merged_row.ORGANIZATION_ID    IS NULL
4860                     AND l_merged_row.ORGANIZATION_CODE  IS NULL
4861                 THEN
4862                     l_merged_row.ORGANIZATION_ID        := l_old_rows( idx ).ORGANIZATION_ID ;
4863                     l_merged_row.ORGANIZATION_CODE      := l_old_rows( idx ).ORGANIZATION_CODE ;
4864                 END IF;
4865 
4866                 -- 3. The attribute value
4867                 IF      l_merged_row.ATTR_DISP_VALUE  IS NULL
4868                     AND l_merged_row.ATTR_VALUE_STR   IS NULL
4869                     AND l_merged_row.ATTR_VALUE_DATE  IS NULL
4870                     AND l_merged_row.ATTR_VALUE_NUM   IS NULL
4871                     AND l_merged_row.ATTR_VALUE_UOM       IS NULL
4872                     AND l_merged_row.ATTR_UOM_DISP_VALUE  IS NULL
4873                 THEN
4874                     CASE
4875                         WHEN l_data_type_code = 'C' OR l_data_type_code = 'A' THEN      -- String Attribute
4876                             IF      l_old_rows( idx ).ATTR_VALUE_STR    IS NOT NULL
4877                                 OR  l_old_rows( idx ).ATTR_DISP_VALUE   IS NOT NULL
4878                             THEN
4879                                 l_merged_row.ATTR_VALUE_STR       := l_old_rows( idx ).ATTR_VALUE_STR;
4880                                 l_merged_row.ATTR_DISP_VALUE      := l_old_rows( idx ).ATTR_DISP_VALUE;
4881                                 l_merged_row.ATTR_VALUE_UOM       := l_old_rows( idx ).ATTR_VALUE_UOM;
4882                                 l_merged_row.ATTR_UOM_DISP_VALUE  := l_old_rows( idx ).ATTR_UOM_DISP_VALUE;
4883                             END IF;
4884                         WHEN l_data_type_code = 'X' or l_data_type_code = 'Y' THEN      -- Date Attribute
4885                             IF      l_old_rows( idx ).ATTR_VALUE_DATE   IS NOT NULL
4886                                 OR  l_old_rows( idx ).ATTR_DISP_VALUE   IS NOT NULL
4887                             THEN
4888                                 l_merged_row.ATTR_VALUE_DATE      := l_old_rows( idx ).ATTR_VALUE_DATE;
4889                                 l_merged_row.ATTR_DISP_VALUE      := l_old_rows( idx ).ATTR_DISP_VALUE;
4890                                 l_merged_row.ATTR_VALUE_UOM       := l_old_rows( idx ).ATTR_VALUE_UOM;
4891                                 l_merged_row.ATTR_UOM_DISP_VALUE  := l_old_rows( idx ).ATTR_UOM_DISP_VALUE;
4892                             END IF;
4893                         WHEN l_data_type_code = 'N' THEN                                -- Num Attribute
4894                             IF      l_old_rows( idx ).ATTR_VALUE_NUM    IS NOT NULL
4895                                 OR  l_old_rows( idx ).ATTR_DISP_VALUE   IS NOT NULL
4896                             THEN
4897                                 l_merged_row.ATTR_VALUE_NUM       := l_old_rows( idx ).ATTR_VALUE_NUM;
4898                                 l_merged_row.ATTR_DISP_VALUE      := l_old_rows( idx ).ATTR_DISP_VALUE;
4899                                 l_merged_row.ATTR_VALUE_UOM       := l_old_rows( idx ).ATTR_VALUE_UOM;
4900                                 l_merged_row.ATTR_UOM_DISP_VALUE  := l_old_rows( idx ).ATTR_UOM_DISP_VALUE;
4901                             END IF;
4902                     END CASE;
4903                 END IF;
4904 
4905                 -- Non-special cased
4906                 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;
4907                 if l_merged_row.CHANGE_ID is null then l_merged_row.CHANGE_ID := l_old_rows( idx ).CHANGE_ID; end if;
4908                 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;
4909                 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;
4910                 if l_merged_row.REVISION is null then l_merged_row.REVISION := l_old_rows( idx ).REVISION; end if;
4911                 if l_merged_row.REVISION_ID is null then l_merged_row.REVISION_ID := l_old_rows( idx ).REVISION_ID; end if;
4912                 if l_merged_row.TRANSACTION_ID is null then l_merged_row.TRANSACTION_ID := l_old_rows( idx ).TRANSACTION_ID; end if;
4913                 -- End Generated Code
4914 
4915                 IF idx = l_old_rows.LAST AND l_new_row_idx > 0 THEN
4916                     FOR i IN 1..l_new_row_idx LOOP
4917                         Debug_Conc_Log( l_proc_log_prefix || '  No More records found for processing.');
4918                         Debug_Conc_Log( l_proc_log_prefix || '  Creating merged record for SSR, SS-ID = ' ||
4919                                                              l_new_rows( i ).SOURCE_SYSTEM_REFERENCE || ', ' ||
4920                                                              l_new_rows( i ).SOURCE_SYSTEM_ID);
4921                         l_mrow_ix := l_mrow_ix + 1;
4922                         l_merged_rows( l_mrow_ix )                           := l_merged_row;
4923                         l_merged_rows( l_mrow_ix ).DATA_SET_ID               := l_new_rows( i ).DATA_SET_ID;
4924                         l_merged_rows( l_mrow_ix ).PROCESS_STATUS            := l_new_rows( i ).PROCESS_STATUS;
4925                         l_merged_rows( l_mrow_ix ).SOURCE_SYSTEM_ID          := l_new_rows( i ).SOURCE_SYSTEM_ID;
4926                         l_merged_rows( l_mrow_ix ).SOURCE_SYSTEM_REFERENCE   := l_new_rows( i ).SOURCE_SYSTEM_REFERENCE;
4927                         l_merged_rows( l_mrow_ix ).ATTR_GROUP_INT_NAME       := l_new_rows( i ).ATTR_GROUP_INT_NAME;
4928                         l_merged_rows( l_mrow_ix ).ATTR_INT_NAME             := l_new_rows( i ).ATTR_INT_NAME;
4929                         l_merged_rows( l_mrow_ix ).DATA_LEVEL_NAME           := l_new_rows( i ).DATA_LEVEL_NAME;
4930                         l_merged_rows( l_mrow_ix ).DATA_LEVEL_ID           := l_new_rows( i ).DATA_LEVEL_ID;
4931                         l_merged_rows( l_mrow_ix ).ROW_IDENTIFIER            := l_new_rows( i ).ROW_IDENTIFIER;
4932                         l_merged_rows( l_mrow_ix ).CREATED_BY                := l_new_rows( i ).CREATED_BY;
4933                         l_merged_rows( l_mrow_ix ).LAST_UPDATED_BY           := l_new_rows( i ).LAST_UPDATED_BY;
4934                         l_merged_rows( l_mrow_ix ).REQUEST_ID                := FND_GLOBAL.CONC_REQUEST_ID;
4935                         l_merged_rows( l_mrow_ix ).PROGRAM_APPLICATION_ID    := FND_GLOBAL.PROG_APPL_ID;
4936                         l_merged_rows( l_mrow_ix ).PROGRAM_ID                := FND_GLOBAL.CONC_PROGRAM_ID;
4937                         l_merged_rows( l_mrow_ix ).PROGRAM_UPDATE_DATE       := SYSDATE;
4938                     END LOOP; --FOR i IN 1..l_new_row_idx LOOP
4939                 END IF; --IF idx = l_old_rows.LAST AND l_new_row_idx > 0 THEN
4940             END LOOP; -- loop over old rows
4941 
4942             IF l_merged_rows IS NOT NULL THEN
4943                 -- delete
4944                 Debug_Conc_Log( l_proc_log_prefix || l_old_rowids.COUNT || ' old rows ...' );
4945                 FORALL rid_ix IN INDICES OF l_old_rowids
4946                     DELETE FROM EGO_ITM_USR_ATTR_INTRFC
4947                         WHERE ROWID = l_old_rowids( rid_ix );
4948                 -- insert
4949                 Debug_Conc_Log( l_proc_log_prefix || l_merged_rows.COUNT || ' merged rows ...' );
4950                 FORALL row_index IN INDICES OF l_merged_rows
4951                     INSERT INTO EGO_ITM_USR_ATTR_INTRFC
4952                         VALUES l_merged_rows( row_index );
4953             END IF;
4954         END IF; -- ENDS IF l_old_rows.count <> 0
4955         Debug_Conc_Log( l_proc_log_prefix || 'Exiting' );
4956     EXCEPTION WHEN OTHERS THEN
4957         Debug_Conc_Log( l_proc_log_prefix || 'Error - ' || SQLERRM);
4958         IF c_target_rev_attrs%ISOPEN THEN
4959             CLOSE c_target_rev_attrs;
4960         END IF;
4961         RAISE;
4962     END Merge_Rev_Attrs_For_Import;
4963 
4964     -- Merges all entities in batch
4965     PROCEDURE Merge_Batch_For_Import( p_batch_id       IN NUMBER
4966                                     , p_master_org_id  IN NUMBER
4967                                     )
4968     IS
4969     BEGIN
4970         Merge_Items_For_Import(p_batch_id, p_master_org_id);
4971         Merge_Revs_For_Import(p_batch_id, p_master_org_id);
4972         Merge_Categories_For_Import(p_batch_id, p_master_org_id);
4973         Merge_Item_Attrs_For_Import(p_batch_id, p_master_org_id);
4974         Merge_Rev_Attrs_For_Import(p_batch_id, p_master_org_id);
4975     END Merge_Batch_For_Import;
4976 
4977     --=================================================================================================================--
4978     --------------------------------- End of Merging Section for Import -----------------------------------------------
4979     --=================================================================================================================--
4980 
4981     /*
4982      * This method is called after all the import is completed
4983      * this will update the process flag of rows with process flag = 111
4984      */
4985     PROCEDURE Demerge_Batch_After_Import(
4986                                            ERRBUF  OUT NOCOPY VARCHAR2
4987                                          , RETCODE OUT NOCOPY VARCHAR2
4988                                          , p_batch_id        IN NUMBER
4989                                         )
4990     IS
4991         l_proc_log_prefix   VARCHAR2(50) := 'Demerge_Batch_After_Import - ';
4992     BEGIN
4993         Debug_Conc_Log( l_proc_log_prefix || 'Starting ...' );
4994         -- processing items and org assignments
4995         UPDATE MTL_SYSTEM_ITEMS_INTERFACE msii
4996           SET (PROCESS_FLAG, INVENTORY_ITEM_ID) =
4997                              (SELECT PROCESS_FLAG, INVENTORY_ITEM_ID
4998                               FROM MTL_SYSTEM_ITEMS_INTERFACE msii_merged
4999                               WHERE msii_merged.ITEM_NUMBER = msii.ITEM_NUMBER
5000                                 AND msii_merged.ORGANIZATION_ID = msii.ORGANIZATION_ID
5001                                 AND msii_merged.REQUEST_ID = msii.REQUEST_ID
5002                                 AND msii_merged.SET_PROCESS_ID = msii.SET_PROCESS_ID
5003                                 AND msii_merged.PROCESS_FLAG <> 111)
5004         WHERE SET_PROCESS_ID = p_batch_id
5005           AND PROCESS_FLAG = 111;
5006 
5007         Debug_Conc_Log( l_proc_log_prefix || 'Processed ' || SQL%ROWCOUNT || ' Items.' );
5008         -- processing item revisions
5009         UPDATE MTL_ITEM_REVISIONS_INTERFACE miri
5010           SET (PROCESS_FLAG, INVENTORY_ITEM_ID) =
5011                              (SELECT PROCESS_FLAG, INVENTORY_ITEM_ID
5012                               FROM MTL_ITEM_REVISIONS_INTERFACE miri_merged
5013                               WHERE miri_merged.ITEM_NUMBER = miri.ITEM_NUMBER
5014                                 AND miri_merged.ORGANIZATION_ID = miri.ORGANIZATION_ID
5015                                 AND miri_merged.REVISION = miri.REVISION
5016                                 AND miri_merged.REQUEST_ID = miri.REQUEST_ID
5017                                 AND miri_merged.SET_PROCESS_ID = miri.SET_PROCESS_ID
5018                                 AND miri_merged.PROCESS_FLAG <> 111)
5019         WHERE SET_PROCESS_ID = p_batch_id
5020           AND PROCESS_FLAG = 111;
5021 
5022         Debug_Conc_Log( l_proc_log_prefix || 'Processed ' || SQL%ROWCOUNT || ' Revisions.' );
5023         -- processing category assignments
5024         UPDATE MTL_ITEM_CATEGORIES_INTERFACE mici
5025           SET (PROCESS_FLAG, INVENTORY_ITEM_ID) =
5026                              (SELECT PROCESS_FLAG, INVENTORY_ITEM_ID
5027                               FROM MTL_ITEM_CATEGORIES_INTERFACE mici_merged
5028                               WHERE mici_merged.ITEM_NUMBER = mici.ITEM_NUMBER
5029                                 AND mici_merged.ORGANIZATION_ID = mici.ORGANIZATION_ID
5030                                 AND mici_merged.CATEGORY_SET_NAME = mici.CATEGORY_SET_NAME
5031                                 AND mici_merged.CATEGORY_NAME = mici.CATEGORY_NAME
5032                                 AND mici_merged.REQUEST_ID = mici.REQUEST_ID
5033                                 AND mici_merged.SET_PROCESS_ID = mici.SET_PROCESS_ID
5034                                 AND mici_merged.PROCESS_FLAG <> 111)
5035         WHERE SET_PROCESS_ID = p_batch_id
5036           AND PROCESS_FLAG = 111;
5037 
5038         Debug_Conc_Log( l_proc_log_prefix || 'Processed ' || SQL%ROWCOUNT || ' Category Assignments.' );
5039         -- processing revision attributes
5040         UPDATE EGO_ITM_USR_ATTR_INTRFC eiuai
5041           SET (PROCESS_STATUS, INVENTORY_ITEM_ID) =
5042                                (SELECT PROCESS_STATUS, INVENTORY_ITEM_ID
5043                                 FROM EGO_ITM_USR_ATTR_INTRFC eiuai_merged
5044                                 WHERE eiuai_merged.ITEM_NUMBER = eiuai.ITEM_NUMBER
5045                                   AND eiuai_merged.ORGANIZATION_ID = eiuai.ORGANIZATION_ID
5046                                   AND eiuai_merged.ATTR_GROUP_INT_NAME = eiuai.ATTR_GROUP_INT_NAME
5047                                   AND eiuai_merged.ATTR_INT_NAME = eiuai.ATTR_INT_NAME
5048                                   AND NVL(eiuai_merged.ATTR_GROUP_TYPE, 'EGO_ITEMMGMT_GROUP') = NVL(eiuai.ATTR_GROUP_TYPE, 'EGO_ITEMMGMT_GROUP')
5049                                   AND eiuai_merged.REVISION = eiuai.REVISION
5050                                   AND eiuai_merged.REQUEST_ID = eiuai.REQUEST_ID
5051                                   AND eiuai_merged.DATA_SET_ID = eiuai.DATA_SET_ID
5052                                   AND eiuai_merged.PROCESS_STATUS <> 7)
5053         WHERE DATA_SET_ID = p_batch_id
5054           AND PROCESS_STATUS = 7
5055           AND REVISION IS NOT NULL;
5056 
5057         Debug_Conc_Log( l_proc_log_prefix || 'Processed ' || SQL%ROWCOUNT || ' Revision attributes.' );
5058         -- processing item attributes
5059         UPDATE /*+ INDEX(eiuai,EGO_ITM_USR_ATTR_INTRFC_N3) */   /* Bug 9678667 */
5060           EGO_ITM_USR_ATTR_INTRFC eiuai
5061           SET (PROCESS_STATUS, INVENTORY_ITEM_ID) =
5062                                (SELECT PROCESS_STATUS, INVENTORY_ITEM_ID
5063                                 FROM EGO_ITM_USR_ATTR_INTRFC eiuai_merged
5064                                 WHERE eiuai_merged.ITEM_NUMBER = eiuai.ITEM_NUMBER
5065                                   AND eiuai_merged.ORGANIZATION_ID = eiuai.ORGANIZATION_ID
5066                                   AND eiuai_merged.ATTR_GROUP_INT_NAME = eiuai.ATTR_GROUP_INT_NAME
5067                                   AND eiuai_merged.ATTR_INT_NAME = eiuai.ATTR_INT_NAME
5068                                   AND Nvl(eiuai_merged.ATTR_GROUP_TYPE, 'EGO_ITEMMGMT_GROUP') = Nvl(eiuai.ATTR_GROUP_TYPE, 'EGO_ITEMMGMT_GROUP')
5069                                   AND eiuai_merged.REVISION IS NULL
5070                                   AND eiuai_merged.REQUEST_ID = eiuai.REQUEST_ID
5071                                   AND eiuai_merged.DATA_SET_ID = eiuai.DATA_SET_ID
5072                                   AND eiuai_merged.PROCESS_STATUS <> 7)
5073         WHERE DATA_SET_ID = p_batch_id
5074           AND PROCESS_STATUS = 7
5075           AND REVISION IS NULL;
5076 
5077         Debug_Conc_Log( l_proc_log_prefix || 'Processed ' || SQL%ROWCOUNT || ' Item attributes.' );
5078 
5079         --COMMIT;
5080         Debug_Conc_Log( l_proc_log_prefix || 'Exiting' );
5081         RETCODE := '0';
5082         ERRBUF := NULL;
5083     EXCEPTION WHEN OTHERS THEN
5084         Debug_Conc_Log(l_proc_log_prefix || 'Error - ' || SQLERRM);
5085         RETCODE := '2';
5086         ERRBUF := 'Error in method EGO_IMPORT_PVT.Demerge_Batch_After_Import - '||SQLERRM;
5087     END Demerge_Batch_After_Import;
5088 
5089  /*
5090   * This method does a bulkload of GTINs
5091   */
5092  PROCEDURE Process_Gtin_Intf_Rows(ERRBUF  OUT NOCOPY VARCHAR2,
5093                                   RETCODE OUT NOCOPY VARCHAR2,
5094                                   p_data_set_id IN  NUMBER) IS
5095    CURSOR c_intf_rows IS
5096    SELECT
5097      intf.INVENTORY_ITEM_ID,
5098      intf.ORGANIZATION_ID,
5099      intf.ITEM_NUMBER,
5100      intf.ORGANIZATION_CODE,
5101      intf.PRIMARY_UOM_CODE,
5102      intf.GLOBAL_TRADE_ITEM_NUMBER,
5103      intf.GTIN_DESCRIPTION,
5104      intf.TRANSACTION_ID,
5105      c.CROSS_REFERENCE EXISTING_GTIN,
5106      c.DESCRIPTION     EXISTING_GTIN_DESC,
5107      c.CROSS_REFERENCE_ID
5108    FROM MTL_SYSTEM_ITEMS_INTERFACE intf, MTL_PARAMETERS p, MTL_CROSS_REFERENCES c
5109    WHERE intf.SET_PROCESS_ID = p_data_set_id
5110      AND intf.ORGANIZATION_ID = p.ORGANIZATION_ID
5111      AND p.ORGANIZATION_ID = p.MASTER_ORGANIZATION_ID
5112      AND intf.PROCESS_FLAG IN (5,7)
5113      AND intf.GLOBAL_TRADE_ITEM_NUMBER IS NOT NULL
5114      AND c.INVENTORY_ITEM_ID(+) = intf.INVENTORY_ITEM_ID
5115      AND c.UOM_CODE(+) = intf.PRIMARY_UOM_CODE
5116      AND intf.REQUEST_ID = FND_GLOBAL.CONC_REQUEST_ID
5117      AND c.CROSS_REFERENCE_TYPE(+) = 'GTIN';
5118 
5119    l_gtin              NUMBER;
5120    l_msg_text          VARCHAR2(4000);
5121    dumm_status         VARCHAR2(100);
5122    l_user_id           NUMBER := FND_GLOBAL.USER_ID;
5123    l_login_id          NUMBER := FND_GLOBAL.LOGIN_ID;
5124    l_prog_appid        NUMBER := FND_GLOBAL.PROG_APPL_ID;
5125    l_prog_id           NUMBER := FND_GLOBAL.CONC_PROGRAM_ID;
5126    l_request_id        NUMBER := FND_GLOBAL.CONC_REQUEST_ID;
5127    l_err_text          VARCHAR2(4000);
5128    l_error             BOOLEAN;
5129    l_rowid             ROWID;
5130    l_xref_id           NUMBER;
5131    l_existing_gtin     VARCHAR2(1000);
5132    l_raise_event       BOOLEAN;
5133    l_xref_event_name   CONSTANT VARCHAR2(100) := 'oracle.apps.ego.item.postXrefChange';
5134    l_msg_data          VARCHAR2(4000);
5135    l_return_status     VARCHAR2(10);
5136    l_org_id            NUMBER;
5137    l_transaction_id    NUMBER;
5138    l_priv              VARCHAR2(10);
5139    l_party_name        VARCHAR2(1000);  -- Bug: 5355759
5140  BEGIN
5141    Debug_Conc_Log('Starting Process_Gtin_Intf_Rows for batch_id='||TO_CHAR(p_data_set_id));
5142    l_raise_event := FALSE;
5143    l_party_name := Get_Current_Party_Name; -- Bug: 5355759
5144    FOR i IN c_intf_rows LOOP
5145      Debug_Conc_Log('Processing for Item, Org='||TO_CHAR(i.INVENTORY_ITEM_ID)||', '||TO_CHAR(i.ORGANIZATION_ID));
5146      -- checking the edit cross reference privilege for creating GTIN xref.
5147      --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);
5148      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);
5149 
5150      IF NVL(l_priv, 'F') <> 'T' THEN
5151        Debug_Conc_Log('No Edit Cross Reference Privilege on item');
5152        FND_MESSAGE.SET_NAME('EGO', 'EGO_NO_EDIT_XREF_PRIV');
5153        FND_MESSAGE.SET_TOKEN('ITEM', i.ITEM_NUMBER);
5154        FND_MESSAGE.SET_TOKEN('ORG', i.ORGANIZATION_CODE);
5155        l_msg_text := FND_MESSAGE.GET;
5156 
5157          dumm_status  := INVPUOPI.mtl_log_interface_err(
5158                                 i.ORGANIZATION_ID
5159                                ,l_user_id
5160                                ,l_login_id
5161                                ,l_prog_appid
5162                                ,l_prog_id
5163                                ,l_request_id
5164                                ,i.TRANSACTION_ID
5165                                ,l_msg_text
5166                                ,'GLOBAL_TRADE_ITEM_NUMBER'
5167                                ,'MTL_SYSTEM_ITEMS_INTERFACE'
5168                                ,'INV_IOI_ERR_NO_ED_XREF_PRIV_01'--bug 11894684, replace INV_IOI_ERR
5169                                ,l_err_text);
5170      ELSE
5171        Debug_Conc_Log('Edit Cross Reference Privilege is present on item');
5172        -- validating the GTIN
5173        IF i.EXISTING_GTIN IS NULL THEN
5174          Debug_Conc_Log('No Existing GTIN found');
5175          Debug_Conc_Log('Validating GTIN-'||i.GLOBAL_TRADE_ITEM_NUMBER);
5176          --1. validating GTIN is number or not
5177          l_error := FALSE;
5178          l_msg_text := NULL;
5179          BEGIN
5180            l_gtin := TO_NUMBER(i.GLOBAL_TRADE_ITEM_NUMBER);
5181          EXCEPTION WHEN VALUE_ERROR THEN
5182            Debug_Conc_Log('Validation Failed - GTIN is not a Number');
5183            l_msg_text := i.GLOBAL_TRADE_ITEM_NUMBER ||' - '||FND_MESSAGE.GET_STRING('EGO', 'EGO_GTIN_NOT_NUMBER');
5184            dumm_status  := INVPUOPI.mtl_log_interface_err(
5185                                   i.ORGANIZATION_ID
5186                                  ,l_user_id
5187                                  ,l_login_id
5188                                  ,l_prog_appid
5189                                  ,l_prog_id
5190                                  ,l_request_id
5191                                  ,i.TRANSACTION_ID
5192                                  ,l_msg_text
5193                                  ,'GLOBAL_TRADE_ITEM_NUMBER'
5194                                  ,'MTL_SYSTEM_ITEMS_INTERFACE'
5195                                  ,'INV_IOI_ERR_GTIN_NOT_NUMBER' --bug 11894684, replace INV_IOI_ERR
5196                                  ,l_err_text);
5197            l_error := TRUE;
5198          END;
5199 
5200          --2. validating the length of GTIN to be 14
5201          IF LENGTH(i.GLOBAL_TRADE_ITEM_NUMBER) <> 14 THEN
5202            Debug_Conc_Log('Validation Failed - Length is not 14 chars');
5203            l_msg_text := i.GLOBAL_TRADE_ITEM_NUMBER ||' - '||FND_MESSAGE.GET_STRING('EGO', 'EGO_GTIN_LENGTH_NOT_CORRECT');
5204            dumm_status  := INVPUOPI.mtl_log_interface_err(
5205                                   i.ORGANIZATION_ID
5206                                  ,l_user_id
5207                                  ,l_login_id
5208                                  ,l_prog_appid
5209                                  ,l_prog_id
5210                                  ,l_request_id
5211                                  ,i.TRANSACTION_ID
5212                                  ,l_msg_text
5213                                  ,'GLOBAL_TRADE_ITEM_NUMBER'
5214                                  ,'MTL_SYSTEM_ITEMS_INTERFACE'
5215                                  ,'INV_IOI_ERR_GTIN_LTH_N_CRRCT'--bug 11894684, replace INV_IOI_ERR
5216                                  ,l_err_text);
5217            l_error := TRUE;
5218          END IF; --end IF LENGTH(i.GLOBAL_TRADE_ITEM_NUMBER
5219 
5220          --3. validating the check digit of GTIN to be valid
5221          IF (NOT l_error) AND EGO_GTIN_ATTRS_PVT.Is_Check_Digit_Invalid(i.GLOBAL_TRADE_ITEM_NUMBER) THEN
5222            Debug_Conc_Log('Validation Failed - Check digit is not valid');
5223            l_msg_text := i.GLOBAL_TRADE_ITEM_NUMBER ||' - '||FND_MESSAGE.GET_STRING('EGO', 'EGO_GTIN_CHECKDIGIT_INVALID');
5224            dumm_status  := INVPUOPI.mtl_log_interface_err(
5225                                   i.ORGANIZATION_ID
5226                                  ,l_user_id
5227                                  ,l_login_id
5228                                  ,l_prog_appid
5229                                  ,l_prog_id
5230                                  ,l_request_id
5231                                  ,i.TRANSACTION_ID
5232                                  ,l_msg_text
5233                                  ,'GLOBAL_TRADE_ITEM_NUMBER'
5234                                  ,'MTL_SYSTEM_ITEMS_INTERFACE'
5235                                  ,'INV_IOI_ERR_CKDIGIT_INVALID'--bug 11894684, replace INV_IOI_ERR
5236                                  ,l_err_text);
5237            l_error := TRUE;
5238          END IF; --end IF (NOT l_error) AND
5239 
5240          --4. gtin can not contain more than six leading zeros
5241          IF SUBSTR(i.GLOBAL_TRADE_ITEM_NUMBER, 1, 7) = '0000000' THEN
5242            Debug_Conc_Log('Validation Failed - gtin can not contain more than six leading zeros');
5243            l_msg_text := i.GLOBAL_TRADE_ITEM_NUMBER ||' - '||FND_MESSAGE.GET_STRING('EGO', 'EGO_GTIN_LEADING_ZERO_INVALID');
5244            dumm_status  := INVPUOPI.mtl_log_interface_err(
5245                                   i.ORGANIZATION_ID
5246                                  ,l_user_id
5247                                  ,l_login_id
5248                                  ,l_prog_appid
5249                                  ,l_prog_id
5250                                  ,l_request_id
5251                                  ,i.TRANSACTION_ID
5252                                  ,l_msg_text
5253                                  ,'GLOBAL_TRADE_ITEM_NUMBER'
5254                                  ,'MTL_SYSTEM_ITEMS_INTERFACE'
5255                                  ,'INV_IOI_ERR_GTIN_LDING_0_IVLD'--bug 11894684, replace INV_IOI_ERR
5256                                  ,l_err_text);
5257            l_error := TRUE;
5258          END IF;
5259 
5260          -- 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
5261          IF SUBSTR(i.GLOBAL_TRADE_ITEM_NUMBER, 2, 1) = '0' AND
5262             SUBSTR(i.GLOBAL_TRADE_ITEM_NUMBER, 3, 1) NOT IN ('0', '1', '3', '6', '7', '8', '9') THEN
5263            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 ');
5264            l_msg_text := i.GLOBAL_TRADE_ITEM_NUMBER ||' - '||FND_MESSAGE.GET_STRING('EGO', 'EGO_GTIN_THIRD_DIGIT_INVALID');
5265            dumm_status  := INVPUOPI.mtl_log_interface_err(
5266                                   i.ORGANIZATION_ID
5267                                  ,l_user_id
5268                                  ,l_login_id
5269                                  ,l_prog_appid
5270                                  ,l_prog_id
5271                                  ,l_request_id
5272                                  ,i.TRANSACTION_ID
5273                                  ,l_msg_text
5274                                  ,'GLOBAL_TRADE_ITEM_NUMBER'
5275                                  ,'MTL_SYSTEM_ITEMS_INTERFACE'
5276                                  ,'INV_IOI_ERR_GTIN_3RD_D_IVLD'--bug 11894684, replace INV_IOI_ERR
5277                                  ,l_err_text);
5278            l_error := TRUE;
5279          END IF;
5280 
5281          -- 6. If a GTIN in a RCI message has six leading zeros, digits 7-9 must be between 301-968
5282          IF (NOT l_error) AND SUBSTR(i.GLOBAL_TRADE_ITEM_NUMBER, 1, 6) = '000000' AND
5283             TO_NUMBER(SUBSTR(i.GLOBAL_TRADE_ITEM_NUMBER, 7, 3)) NOT BETWEEN 301 AND 968 THEN
5284            Debug_Conc_Log('Validation Failed - If a GTIN in a RCI message has six leading zeros, digits 7-9 must be between 301-968');
5285            l_msg_text := i.GLOBAL_TRADE_ITEM_NUMBER ||' - '||FND_MESSAGE.GET_STRING('EGO', 'EGO_GTIN_7TO9DIGIT_INVALID');
5286            dumm_status  := INVPUOPI.mtl_log_interface_err(
5287                                   i.ORGANIZATION_ID
5288                                  ,l_user_id
5289                                  ,l_login_id
5290                                  ,l_prog_appid
5291                                  ,l_prog_id
5292                                  ,l_request_id
5293                                  ,i.TRANSACTION_ID
5294                                  ,l_msg_text
5295                                  ,'GLOBAL_TRADE_ITEM_NUMBER'
5296                                  ,'MTL_SYSTEM_ITEMS_INTERFACE'
5297                                  ,'INV_IOI_ERR_GTIN_7TO9D_IVLD'--bug 11894684, replace INV_IOI_ERR
5298                                  ,l_err_text);
5299            l_error := TRUE;
5300          END IF;
5301 
5302          -- 7. GTINs submitted in RCI messages cannot contain values 0980-0989 or 099 in the first 4 digits
5303          IF SUBSTR(i.GLOBAL_TRADE_ITEM_NUMBER, 1, 3) IN ('098', '099') THEN
5304            Debug_Conc_Log('Validation Failed - GTINs submitted in RCI messages cannot contain values 0980-0989 or 099 in the first 4 digits');
5305            l_msg_text := i.GLOBAL_TRADE_ITEM_NUMBER ||' - '||FND_MESSAGE.GET_STRING('EGO', 'EGO_GTIN_0TO4_DIGIT_INVALID');
5306            dumm_status  := INVPUOPI.mtl_log_interface_err(
5307                                   i.ORGANIZATION_ID
5308                                  ,l_user_id
5309                                  ,l_login_id
5310                                  ,l_prog_appid
5311                                  ,l_prog_id
5312                                  ,l_request_id
5313                                  ,i.TRANSACTION_ID
5314                                  ,l_msg_text
5315                                  ,'GLOBAL_TRADE_ITEM_NUMBER'
5316                                  ,'MTL_SYSTEM_ITEMS_INTERFACE'
5317                                  ,'INV_IOI_ERR_GTIN_0TO4D_IVLD'--bug 11894684, replace INV_IOI_ERR
5318                                  ,l_err_text);
5319            l_error := TRUE;
5320          END IF;
5321 
5322          -- 8. GTINs submitted in RCI messages cannot contain values 02, 04, 05, and 10-29 in the second and third digits from the left
5323          IF (NOT l_error) AND (SUBSTR(i.GLOBAL_TRADE_ITEM_NUMBER, 2, 2) IN ('02', '04', '05') OR
5324              TO_NUMBER(SUBSTR(i.GLOBAL_TRADE_ITEM_NUMBER, 2, 2)) BETWEEN 10 AND 29) THEN
5325            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');
5326            l_msg_text := i.GLOBAL_TRADE_ITEM_NUMBER ||' - '||FND_MESSAGE.GET_STRING('EGO', 'EGO_GTIN_2TO3_DIGIT_INVALID');
5327            dumm_status  := INVPUOPI.mtl_log_interface_err(
5328                                   i.ORGANIZATION_ID
5329                                  ,l_user_id
5330                                  ,l_login_id
5331                                  ,l_prog_appid
5332                                  ,l_prog_id
5333                                  ,l_request_id
5334                                  ,i.TRANSACTION_ID
5335                                  ,l_msg_text
5336                                  ,'GLOBAL_TRADE_ITEM_NUMBER'
5337                                  ,'MTL_SYSTEM_ITEMS_INTERFACE'
5338                                  ,'INV_IOI_ERR_GTIN_2TO3_D_IVLD'--bug 11894684, replace INV_IOI_ERR
5339                                  ,l_err_text);
5340            l_error := TRUE;
5341          END IF;
5342 
5343          -- checking for duplicate GTIN
5344          IF NOT l_error THEN
5345            BEGIN
5346              SELECT CONCATENATED_SEGMENTS INTO l_existing_gtin
5347              FROM MTL_SYSTEM_ITEMS_KFV msik, MTL_CROSS_REFERENCES_B mcr, MTL_PARAMETERS mp
5348              WHERE msik.INVENTORY_ITEM_ID = mcr.INVENTORY_ITEM_ID
5349                AND msik.ORGANIZATION_ID = mp.ORGANIZATION_ID
5350                AND mp.ORGANIZATION_ID = mp.MASTER_ORGANIZATION_ID
5351                AND mcr.CROSS_REFERENCE_TYPE = 'GTIN'
5352                AND mcr.CROSS_REFERENCE = i.GLOBAL_TRADE_ITEM_NUMBER
5353                AND mcr.UOM_CODE = msik.PRIMARY_UOM_CODE
5354                AND ROWNUM = 1;
5355 
5356              Debug_Conc_Log('Validation Failed - duplicate GTIN');
5357              FND_MESSAGE.Set_Name('EGO', 'EGO_GTIN_EXISTS_WITH_PACKITEM');
5358              FND_MESSAGE.Set_Token('GTIN', i.GLOBAL_TRADE_ITEM_NUMBER);
5359              FND_MESSAGE.Set_Token('PACK_ITEM', l_existing_gtin);
5360              FND_MESSAGE.Set_Token('UOM', i.PRIMARY_UOM_CODE);
5361              l_msg_text := i.GLOBAL_TRADE_ITEM_NUMBER ||' - '||FND_MESSAGE.GET;
5362              dumm_status  := INVPUOPI.mtl_log_interface_err(
5363                                     i.ORGANIZATION_ID
5364                                    ,l_user_id
5365                                    ,l_login_id
5366                                    ,l_prog_appid
5367                                    ,l_prog_id
5368                                    ,l_request_id
5369                                    ,i.TRANSACTION_ID
5370                                    ,l_msg_text
5371                                    ,'GLOBAL_TRADE_ITEM_NUMBER'
5372                                    ,'MTL_SYSTEM_ITEMS_INTERFACE'
5373                                    ,'INV_IOI_ERR_GTIN_EXS_W_PKITM' --bug 11894684, replace INV_IOI_ERR
5374                                    ,l_err_text);
5375              l_error := TRUE;
5376            EXCEPTION WHEN NO_DATA_FOUND THEN
5377              NULL;
5378            END;
5379          END IF; -- checking for duplicate GTIN
5380          -- if no errors then creating a GTIN
5381          IF NOT l_error THEN
5382            Debug_Conc_Log('No Errors - Creating GTIN');
5383            MTL_CROSS_REFERENCES_PKG.INSERT_ROW(
5384              P_SOURCE_SYSTEM_ID       => NULL,
5385              P_START_DATE_ACTIVE      => NULL,
5386              P_END_DATE_ACTIVE        => NULL,
5387              P_OBJECT_VERSION_NUMBER  => NULL,
5388              P_UOM_CODE               => i.PRIMARY_UOM_CODE,
5389              P_REVISION_ID            => NULL,
5390              P_EPC_GTIN_SERIAL        => NULL,
5391              P_INVENTORY_ITEM_ID      => i.INVENTORY_ITEM_ID,
5392              P_ORGANIZATION_ID        => NULL,
5393              P_CROSS_REFERENCE_TYPE   => 'GTIN',
5394              P_CROSS_REFERENCE        => i.GLOBAL_TRADE_ITEM_NUMBER,
5395              P_ORG_INDEPENDENT_FLAG   => 'Y',
5396              P_REQUEST_ID             => l_request_id,
5397              P_ATTRIBUTE1             => NULL,
5398              P_ATTRIBUTE2             => NULL,
5399              P_ATTRIBUTE3             => NULL,
5400              P_ATTRIBUTE4             => NULL,
5401              P_ATTRIBUTE5             => NULL,
5402              P_ATTRIBUTE6             => NULL,
5403              P_ATTRIBUTE7             => NULL,
5404              P_ATTRIBUTE8             => NULL,
5405              P_ATTRIBUTE9             => NULL,
5406              P_ATTRIBUTE10            => NULL,
5407              P_ATTRIBUTE11            => NULL,
5408              P_ATTRIBUTE12            => NULL,
5409              P_ATTRIBUTE13            => NULL,
5410              P_ATTRIBUTE14            => NULL,
5411              P_ATTRIBUTE15            => NULL,
5412              P_ATTRIBUTE_CATEGORY     => NULL,
5413              P_DESCRIPTION            => i.GTIN_DESCRIPTION,
5414              P_CREATION_DATE          => SYSDATE,
5415              P_CREATED_BY             => l_user_id,
5416              P_LAST_UPDATE_DATE       => SYSDATE,
5417              P_LAST_UPDATED_BY        => l_user_id,
5418              P_LAST_UPDATE_LOGIN      => l_login_id,
5419              P_PROGRAM_APPLICATION_ID => l_prog_appid,
5420              P_PROGRAM_ID             => l_prog_id,
5421              P_PROGRAM_UPDATE_DATE    => SYSDATE,
5422              X_CROSS_REFERENCE_ID     => l_xref_id);
5423 
5424            Debug_Conc_Log('Done Creating GTIN');
5425            l_raise_event := TRUE;
5426            l_transaction_id := i.TRANSACTION_ID;
5427            l_org_id := i.ORGANIZATION_ID;
5428          END IF; -- end IF NOT l_error
5429        ELSIF i.EXISTING_GTIN IS NOT NULL THEN
5430          IF i.GTIN_DESCRIPTION IS NOT NULL
5431              AND (  ( i.EXISTING_GTIN_DESC <> i.GTIN_DESCRIPTION)
5432                  OR (i.EXISTING_GTIN_DESC IS NULL AND i.GTIN_DESCRIPTION IS NOT NULL)
5433                  )
5434          THEN
5435            Debug_Conc_Log('Existing GTIN found. Description needs to be updated.');
5436            UPDATE MTL_CROSS_REFERENCES_TL
5437            SET    DESCRIPTION            = i.GTIN_DESCRIPTION,
5438                   LAST_UPDATE_DATE       = SYSDATE,
5439                   LAST_UPDATED_BY        = l_user_id,
5440                   LAST_UPDATE_LOGIN      = l_login_id,
5441                   SOURCE_LANG            = USERENV('LANG')
5442            WHERE CROSS_REFERENCE_ID = i.CROSS_REFERENCE_ID
5443              AND USERENV('LANG') IN (LANGUAGE, SOURCE_LANG);
5444 
5445            Debug_Conc_Log('Description updated for GTIN='||i.EXISTING_GTIN);
5446            l_raise_event := TRUE;
5447            l_transaction_id := i.TRANSACTION_ID;
5448            l_org_id := i.ORGANIZATION_ID;
5449          END IF; -- IF i.GTIN_DESCRIPTION IS NOT NULL
5450 
5451          -- BUG 5549140 - Adding validation that existing GTIN can not be changed
5452          IF i.EXISTING_GTIN <> i.GLOBAL_TRADE_ITEM_NUMBER THEN
5453            Debug_Conc_Log('GTIN can not be updated');
5454            FND_MESSAGE.Set_Name('EGO', 'EGO_GTIN_NOT_UPDATEABLE');
5455            l_msg_text := FND_MESSAGE.GET;
5456            dumm_status  := INVPUOPI.mtl_log_interface_err(
5457                                   i.ORGANIZATION_ID
5458                                  ,l_user_id
5459                                  ,l_login_id
5460                                  ,l_prog_appid
5461                                  ,l_prog_id
5462                                  ,l_request_id
5463                                  ,i.TRANSACTION_ID
5464                                  ,l_msg_text
5465                                  ,'GLOBAL_TRADE_ITEM_NUMBER'
5466                                  ,'MTL_SYSTEM_ITEMS_INTERFACE'
5467                                  ,'INV_IOI_ERR_GTIN_NOT_UPDABLE'--bug 11894684, replace INV_IOI_ERR
5468                                  ,l_err_text);
5469          END IF; -- IF i.EXISTING_GTIN <> i.GLOBAL_TRADE_ITEM_NUMBER THEN
5470 
5471        END IF; -- IF i.EXISTING_GTIN IS NULL THEN
5472      END IF; -- IF NVL(l_priv, 'Y') = 'Y' THEN
5473    END LOOP;
5474 
5475    IF l_raise_event THEN
5476      Debug_Conc_Log('Raising business event');
5477      EGO_WF_WRAPPER_PVT.Raise_Item_Event(
5478        p_event_name    => l_xref_event_name,
5479        p_request_id    => l_request_id,
5480        x_msg_data      => l_msg_data,
5481        x_return_status => l_return_status);
5482 
5483      Debug_Conc_Log('Done Raising business event with status - '||l_return_status);
5484      Debug_Conc_Log('Done Raising business event with message - '||SUBSTR(l_msg_data, 3950));
5485      IF l_return_status <> 'S' THEN
5486        l_msg_text := SUBSTR('Error in raising business event for GTIN Cross References - '||l_msg_data, 4000);
5487        dumm_status  := INVPUOPI.mtl_log_interface_err(
5488                                   l_org_id
5489                                  ,l_user_id
5490                                  ,l_login_id
5491                                  ,l_prog_appid
5492                                  ,l_prog_id
5493                                  ,l_request_id
5494                                  ,l_transaction_id
5495                                  ,l_msg_text
5496                                  ,'GLOBAL_TRADE_ITEM_NUMBER'
5497                                  ,'MTL_SYSTEM_ITEMS_INTERFACE'
5498                                  ,'INV_IOI_ERR_RAISE_BE4_GTIN_CR'--bug 11894684, replace INV_IOI_ERR
5499                                  ,l_err_text);
5500      END IF;
5501    END IF;
5502 
5503    COMMIT;
5504    RETCODE := '0';
5505    ERRBUF := NULL;
5506    Debug_Conc_Log('Done Process_Gtin_Intf_Rows with success');
5507  EXCEPTION WHEN OTHERS THEN
5508    Debug_Conc_Log('Done Process_Gtin_Intf_Rows with error - '||SQLERRM);
5509    RETCODE := '2';
5510    ERRBUF := 'Error in method EGO_IMPORT_PVT.Process_Gtin_Intf_Rows - '||SQLERRM;
5511  END Process_Gtin_Intf_Rows;
5512 
5513  /*
5514   * Private method to process Source System item cross reference
5515   */
5516  FUNCTION Process_SSXref_Pvt(p_source_system_id                 IN NUMBER,
5517                              p_source_system_reference        IN VARCHAR2,
5518                              p_source_system_reference_desc   IN VARCHAR2,
5519                              p_inventory_item_id                  IN NUMBER)
5520  RETURN BOOLEAN
5521  IS
5522    l_rowid             ROWID;
5523    l_xref_id           NUMBER;
5524    l_user_id           NUMBER := FND_GLOBAL.USER_ID;
5525    l_login_id          NUMBER := FND_GLOBAL.LOGIN_ID;
5526    l_prog_appid        NUMBER := FND_GLOBAL.PROG_APPL_ID;
5527    l_prog_id           NUMBER := FND_GLOBAL.CONC_PROGRAM_ID;
5528    l_request_id        NUMBER := FND_GLOBAL.CONC_REQUEST_ID;
5529    l_raise_event       BOOLEAN;
5530    l_msg_data          VARCHAR2(4000);
5531    l_return_status     VARCHAR2(10);
5532    l_msg_text          VARCHAR2(4000);
5533    l_err_text          VARCHAR2(4000);
5534    dumm_status         NUMBER;
5535    l_item_id           NUMBER;
5536  BEGIN
5537    Debug_Conc_Log('In Process_SSXref_Pvt begin');
5538    l_raise_event := FALSE;
5539    -- if a cross reference already exists for the source system item, then end dating it
5540    BEGIN
5541      SELECT ROWID, INVENTORY_ITEM_ID INTO l_rowid, l_item_id
5542      FROM MTL_CROSS_REFERENCES_B mcr
5543      WHERE mcr.SOURCE_SYSTEM_ID = p_source_system_id
5544        AND mcr.CROSS_REFERENCE_TYPE = 'SS_ITEM_XREF'
5545        AND mcr.CROSS_REFERENCE = p_source_system_reference
5546        AND (mcr.END_DATE_ACTIVE IS NULL OR mcr.END_DATE_ACTIVE > SYSDATE);
5547 
5548      Debug_Conc_Log('Existing Xref found l_item_id='||to_char(l_item_id));
5549      IF p_inventory_item_id <> NVL(l_item_id, -1) THEN
5550        Debug_Conc_Log('Updating the existing SS Xref, end dating');
5551        UPDATE MTL_CROSS_REFERENCES_B
5552        SET
5553          END_DATE_ACTIVE = SYSDATE,
5554          LAST_UPDATED_BY = l_user_id,
5555          LAST_UPDATE_DATE = SYSDATE,
5556          LAST_UPDATE_LOGIN = l_login_id,
5557          PROGRAM_APPLICATION_ID = l_prog_appid,
5558          PROGRAM_ID = l_prog_id,
5559          REQUEST_ID = l_request_id,
5560          PROGRAM_UPDATE_DATE = SYSDATE
5561        WHERE ROWID = l_rowid;
5562        Debug_Conc_Log('Done Updating the existing SS Xref, end dating');
5563        l_raise_event := TRUE;
5564      END IF; --IF p_inventory_item_id <> NVL(l_item_id, -1) THEN
5565    EXCEPTION WHEN NO_DATA_FOUND THEN
5566      Debug_Conc_Log('No Existing SS Xref Found');
5567      l_item_id := -1;
5568      NULL;
5569    END;
5570 
5571    IF p_inventory_item_id <> NVL(l_item_id, -1) THEN
5572      -- calling MTL_CROSS_REFERENCES_B table handler to insert rows
5573      Debug_Conc_Log('Creating SS Xref');
5574      MTL_CROSS_REFERENCES_PKG.INSERT_ROW(
5575          P_SOURCE_SYSTEM_ID       => p_source_system_id,
5576          P_START_DATE_ACTIVE      => SYSDATE,
5577          P_END_DATE_ACTIVE        => NULL,
5578          P_OBJECT_VERSION_NUMBER  => NULL,
5579          P_UOM_CODE               => NULL,
5580          P_REVISION_ID            => NULL,
5581          P_EPC_GTIN_SERIAL        => NULL,
5582          P_INVENTORY_ITEM_ID      => p_inventory_item_id,
5583          P_ORGANIZATION_ID        => NULL,
5584          P_CROSS_REFERENCE_TYPE   => 'SS_ITEM_XREF',
5585          P_CROSS_REFERENCE        => p_source_system_reference,
5586          P_ORG_INDEPENDENT_FLAG   => 'Y',
5587          P_REQUEST_ID             => l_request_id,
5588          P_ATTRIBUTE1             => NULL,
5589          P_ATTRIBUTE2             => NULL,
5590          P_ATTRIBUTE3             => NULL,
5591          P_ATTRIBUTE4             => NULL,
5592          P_ATTRIBUTE5             => NULL,
5593          P_ATTRIBUTE6             => NULL,
5594          P_ATTRIBUTE7             => NULL,
5595          P_ATTRIBUTE8             => NULL,
5596          P_ATTRIBUTE9             => NULL,
5597          P_ATTRIBUTE10            => NULL,
5598          P_ATTRIBUTE11            => NULL,
5599          P_ATTRIBUTE12            => NULL,
5600          P_ATTRIBUTE13            => NULL,
5601          P_ATTRIBUTE14            => NULL,
5602          P_ATTRIBUTE15            => NULL,
5603          P_ATTRIBUTE_CATEGORY     => NULL,
5604          P_DESCRIPTION            => p_source_system_reference_desc,
5605          P_CREATION_DATE          => SYSDATE,
5606          P_CREATED_BY             => l_user_id,
5607          P_LAST_UPDATE_DATE       => SYSDATE,
5608          P_LAST_UPDATED_BY        => l_user_id,
5609          P_LAST_UPDATE_LOGIN      => l_login_id,
5610          P_PROGRAM_APPLICATION_ID => l_prog_appid,
5611          P_PROGRAM_ID             => l_prog_id,
5612          P_PROGRAM_UPDATE_DATE    => SYSDATE,
5613          X_CROSS_REFERENCE_ID     => l_xref_id);
5614 
5615      l_raise_event := TRUE;
5616    END IF; --IF p_inventory_item_id <> NVL(l_item_id, -1) THEN
5617    Debug_Conc_Log('Done Process_SSXref_Pvt');
5618    RETURN l_raise_event;
5619  END Process_SSXref_Pvt;
5620 
5621  /*
5622   * This method Bulk Loads the Source system cross references
5623   */
5624  PROCEDURE Process_SSXref_Intf_Rows(ERRBUF  OUT NOCOPY VARCHAR2,
5625                                     RETCODE OUT NOCOPY VARCHAR2,
5626                                     p_data_set_id IN  NUMBER) IS
5627    CURSOR c_intf_rows IS
5628      SELECT
5629        SOURCE_SYSTEM_ID,
5630        SOURCE_SYSTEM_REFERENCE,
5631        SOURCE_SYSTEM_REFERENCE_DESC,
5632        INVENTORY_ITEM_ID,
5633        ORGANIZATION_ID,
5634        TRANSACTION_ID,
5635        TRANSACTION_TYPE
5636      FROM MTL_SYSTEM_ITEMS_INTERFACE msi
5637      WHERE msi.PROCESS_FLAG IN (5, 7)
5638        AND msi.SET_PROCESS_ID = p_data_set_id
5639        AND msi.SOURCE_SYSTEM_ID IS NOT NULL
5640        AND msi.SOURCE_SYSTEM_REFERENCE IS NOT NULL
5641        AND msi.REQUEST_ID = FND_GLOBAL.CONC_REQUEST_ID
5642        AND NOT EXISTS (SELECT NULL
5643                        FROM MTL_CROSS_REFERENCES_B mcr
5644                        WHERE mcr.SOURCE_SYSTEM_ID = msi.SOURCE_SYSTEM_ID
5645                          AND mcr.CROSS_REFERENCE_TYPE = 'SS_ITEM_XREF'
5646                          AND mcr.CROSS_REFERENCE = msi.SOURCE_SYSTEM_REFERENCE
5647                          AND mcr.INVENTORY_ITEM_ID = msi.INVENTORY_ITEM_ID
5648                          AND (mcr.END_DATE_ACTIVE IS NULL OR mcr.END_DATE_ACTIVE > SYSDATE));
5649 
5650    -- Bug: 4752861
5651    CURSOR c_intf_existing_rows IS
5652      SELECT
5653        msi.SOURCE_SYSTEM_ID,
5654        msi.SOURCE_SYSTEM_REFERENCE,
5655        msi.SOURCE_SYSTEM_REFERENCE_DESC,
5656        msi.INVENTORY_ITEM_ID,
5657        msi.ORGANIZATION_ID,
5658        msi.TRANSACTION_ID,
5659        msi.TRANSACTION_TYPE,
5660        mcr.CROSS_REFERENCE_ID
5661      FROM MTL_SYSTEM_ITEMS_INTERFACE msi, MTL_CROSS_REFERENCES mcr
5662      WHERE msi.PROCESS_FLAG IN (5, 7)
5663        AND msi.SET_PROCESS_ID = p_data_set_id
5664        AND msi.SOURCE_SYSTEM_ID IS NOT NULL
5665        AND msi.SOURCE_SYSTEM_REFERENCE IS NOT NULL
5666        AND msi.REQUEST_ID = FND_GLOBAL.CONC_REQUEST_ID
5667        AND mcr.SOURCE_SYSTEM_ID = msi.SOURCE_SYSTEM_ID
5668        AND mcr.CROSS_REFERENCE_TYPE = 'SS_ITEM_XREF'
5669        AND mcr.CROSS_REFERENCE = msi.SOURCE_SYSTEM_REFERENCE
5670        AND mcr.INVENTORY_ITEM_ID = msi.INVENTORY_ITEM_ID
5671        AND msi.SOURCE_SYSTEM_REFERENCE_DESC IS NOT NULL
5672        AND NVL(mcr.DESCRIPTION, msi.SOURCE_SYSTEM_REFERENCE_DESC||'##') <> msi.SOURCE_SYSTEM_REFERENCE_DESC
5673        AND UPPER(msi.TRANSACTION_TYPE) <> 'CREATE'
5674        AND (mcr.END_DATE_ACTIVE IS NULL OR mcr.END_DATE_ACTIVE > SYSDATE);
5675 
5676    -- Bug: 5262421 - Introducing 11 as new process_status. When user chooses to re-import and Import Only Cross References
5677    -- 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
5678    -- running with option "Process All Batch". So while creating Xrefs, we will also pick up records with process_status = 11
5679    CURSOR c_unprcd_intf_rows IS
5680      SELECT
5681        SOURCE_SYSTEM_ID,
5682        SOURCE_SYSTEM_REFERENCE,
5683        SOURCE_SYSTEM_REFERENCE_DESC,
5684        INVENTORY_ITEM_ID,
5685        ITEM_NUMBER,
5686        ORGANIZATION_ID,
5687        TRANSACTION_ID,
5688        TRANSACTION_TYPE,
5689        ROWID AS ROW_ID
5690      FROM MTL_SYSTEM_ITEMS_INTERFACE msi
5691      WHERE msi.PROCESS_FLAG IN (0, 11)
5692        AND msi.SET_PROCESS_ID = p_data_set_id
5693        AND msi.SOURCE_SYSTEM_ID IS NOT NULL
5694        AND msi.SOURCE_SYSTEM_REFERENCE IS NOT NULL
5695        AND msi.CONFIRM_STATUS IN ('CM', 'CC')
5696        AND NOT EXISTS (SELECT NULL
5697                        FROM MTL_CROSS_REFERENCES_B mcr
5698                        WHERE mcr.SOURCE_SYSTEM_ID = msi.SOURCE_SYSTEM_ID
5699                          AND mcr.CROSS_REFERENCE_TYPE = 'SS_ITEM_XREF'
5700                          AND mcr.CROSS_REFERENCE = msi.SOURCE_SYSTEM_REFERENCE
5701                          AND mcr.INVENTORY_ITEM_ID = msi.INVENTORY_ITEM_ID
5702                          AND (mcr.END_DATE_ACTIVE IS NULL OR mcr.END_DATE_ACTIVE > SYSDATE));
5703 
5704    -- Bug: 4752861
5705    CURSOR c_unprcd_intf_existing_rows IS
5706      SELECT
5707        msi.SOURCE_SYSTEM_ID,
5708        msi.SOURCE_SYSTEM_REFERENCE,
5709        msi.SOURCE_SYSTEM_REFERENCE_DESC,
5710        msi.INVENTORY_ITEM_ID,
5711        msi.ITEM_NUMBER,
5712        msi.ORGANIZATION_ID,
5713        msi.TRANSACTION_ID,
5714        msi.TRANSACTION_TYPE,
5715        mcr.CROSS_REFERENCE_ID,
5716        msi.ROWID AS ROW_ID
5717      FROM MTL_SYSTEM_ITEMS_INTERFACE msi, MTL_CROSS_REFERENCES mcr
5718      WHERE msi.PROCESS_FLAG IN (0, 11)
5719        AND msi.SET_PROCESS_ID = p_data_set_id
5720        AND msi.SOURCE_SYSTEM_ID IS NOT NULL
5721        AND msi.SOURCE_SYSTEM_REFERENCE IS NOT NULL
5722        AND msi.CONFIRM_STATUS IN ('CM', 'CC')
5723        AND mcr.SOURCE_SYSTEM_ID = msi.SOURCE_SYSTEM_ID
5724        AND mcr.CROSS_REFERENCE_TYPE = 'SS_ITEM_XREF'
5725        AND mcr.CROSS_REFERENCE = msi.SOURCE_SYSTEM_REFERENCE
5726        AND mcr.INVENTORY_ITEM_ID = msi.INVENTORY_ITEM_ID
5727        AND msi.SOURCE_SYSTEM_REFERENCE_DESC IS NOT NULL
5728        AND NVL(mcr.DESCRIPTION, msi.SOURCE_SYSTEM_REFERENCE_DESC||'##') <> msi.SOURCE_SYSTEM_REFERENCE_DESC
5729        AND UPPER(msi.TRANSACTION_TYPE) <> 'CREATE'
5730        AND (mcr.END_DATE_ACTIVE IS NULL OR mcr.END_DATE_ACTIVE > SYSDATE);
5731 
5732    l_xref_event_name               CONSTANT VARCHAR2(100) := 'oracle.apps.ego.item.postXrefChange';
5733    l_ss_id                         NUMBER;
5734    l_raise_event                   BOOLEAN;
5735    l_raise_bus_event               BOOLEAN;
5736    l_user_id                       NUMBER := FND_GLOBAL.USER_ID;
5737    l_login_id                      NUMBER := FND_GLOBAL.LOGIN_ID;
5738    l_prog_appid                    NUMBER := FND_GLOBAL.PROG_APPL_ID;
5739    l_prog_id                       NUMBER := FND_GLOBAL.CONC_PROGRAM_ID;
5740    l_request_id                    NUMBER := FND_GLOBAL.CONC_REQUEST_ID;
5741    l_msg_data                      VARCHAR2(4000);
5742    l_err_text                      VARCHAR2(4000);
5743    l_return_status                 VARCHAR2(10);
5744    l_msg_text                      VARCHAR2(4000);
5745    dumm_status                     NUMBER;
5746    l_org_id                        NUMBER;
5747 
5748    l_import_xref_only              EGO_IMPORT_OPTION_SETS.IMPORT_XREF_ONLY%TYPE;
5749    l_inventory_item_id             MTL_SYSTEM_ITEMS_INTERFACE.INVENTORY_ITEM_ID%TYPE;
5750    l_transaction_id                MTL_SYSTEM_ITEMS_INTERFACE.TRANSACTION_ID%TYPE;
5751  BEGIN
5752    Debug_Conc_Log('Starting Process_SSXref_Intf_Rows for batch_id='||TO_CHAR(p_data_set_id));
5753    BEGIN
5754      SELECT b.SOURCE_SYSTEM_ID, NVL(opt.IMPORT_XREF_ONLY, 'N')
5755      INTO l_ss_id, l_import_xref_only
5756      FROM EGO_IMPORT_BATCHES_B b, EGO_IMPORT_OPTION_SETS opt
5757      WHERE b.BATCH_ID = p_data_set_id
5758        AND b.BATCH_ID = opt.BATCH_ID;
5759    EXCEPTION WHEN NO_DATA_FOUND THEN
5760      l_ss_id := get_pdh_source_system_id;
5761      l_import_xref_only := 'N';
5762    END;
5763 
5764    IF l_ss_id = get_pdh_source_system_id THEN
5765      Debug_Conc_Log('Batch is a PDH batch, so returning');
5766      RETCODE := '0';
5767      ERRBUF := NULL;
5768      RETURN;
5769    END IF;
5770 
5771    l_raise_bus_event := FALSE;
5772    IF l_import_xref_only = 'Y' THEN
5773      Debug_Conc_Log('Import Only Cross References is TRUE');
5774      Debug_Conc_Log('Updating the Source System Description');
5775      FOR i IN c_unprcd_intf_existing_rows LOOP
5776        Debug_Conc_Log('Processing for SS_ID, SS_REF='||TO_CHAR(i.SOURCE_SYSTEM_ID)||', '||i.SOURCE_SYSTEM_REFERENCE);
5777        l_inventory_item_id := i.INVENTORY_ITEM_ID;
5778 
5779        IF l_inventory_item_id IS NOT NULL THEN
5780          UPDATE MTL_CROSS_REFERENCES_TL
5781          SET    DESCRIPTION       = i.SOURCE_SYSTEM_REFERENCE_DESC,
5782                 LAST_UPDATE_DATE  = SYSDATE,
5783                 LAST_UPDATED_BY   = FND_GLOBAL.USER_ID,
5784                 LAST_UPDATE_LOGIN = FND_GLOBAL.LOGIN_ID,
5785                 SOURCE_LANG       = USERENV('LANG')
5786          WHERE CROSS_REFERENCE_ID = i.CROSS_REFERENCE_ID
5787            AND USERENV('LANG') IN (LANGUAGE, SOURCE_LANG);
5788 
5789          l_raise_bus_event := TRUE;
5790          l_transaction_id := i.TRANSACTION_ID;
5791          l_org_id := i.ORGANIZATION_ID;
5792 
5793          -- Bug: 5262421
5794          -- Updating item, user-defined attrs, gdsn attrs, AMLs to successful process status
5795          -- so that they appear correctly in the Imported tab
5796          UPDATE MTL_SYSTEM_ITEMS_INTERFACE
5797          SET PROCESS_FLAG = 7,
5798              TRANSACTION_TYPE = 'UPDATE',
5799              PROGRAM_APPLICATION_ID = l_prog_appid,
5800              PROGRAM_ID = l_prog_id,
5801              REQUEST_ID = l_request_id,
5802              PROGRAM_UPDATE_DATE = SYSDATE
5803          WHERE ROWID = i.ROW_ID;
5804 
5805          UPDATE EGO_ITM_USR_ATTR_INTRFC
5806          SET PROCESS_STATUS = 4,
5807              PROGRAM_APPLICATION_ID = l_prog_appid,
5808              PROGRAM_ID = l_prog_id,
5809              REQUEST_ID = l_request_id,
5810              PROGRAM_UPDATE_DATE = SYSDATE
5811          WHERE DATA_SET_ID = p_data_set_id
5812            AND PROCESS_STATUS = 0
5813            AND SOURCE_SYSTEM_ID = i.SOURCE_SYSTEM_ID
5814            AND SOURCE_SYSTEM_REFERENCE = i.SOURCE_SYSTEM_REFERENCE;
5815 
5816          UPDATE EGO_AML_INTF
5817          SET PROCESS_FLAG = 7,
5818              PROGRAM_APPLICATION_ID = l_prog_appid,
5819              PROGRAM_ID = l_prog_id,
5820              REQUEST_ID = l_request_id,
5821              PROGRAM_UPDATE_DATE = SYSDATE
5822          WHERE DATA_SET_ID = p_data_set_id
5823            AND PROCESS_FLAG = 0
5824            AND SOURCE_SYSTEM_ID = i.SOURCE_SYSTEM_ID
5825            AND SOURCE_SYSTEM_REFERENCE = i.SOURCE_SYSTEM_REFERENCE;
5826        ELSE
5827          Debug_Conc_Log('Inventory Item ID is NULL');
5828        END IF; --IF l_inventory_item_id IS NOT NULL THEN
5829      END LOOP; --FOR i IN c_unprcd_intf_existing_rows LOOP
5830      Debug_Conc_Log('Done Updating the Source System Description');
5831 
5832      Debug_Conc_Log('Processing Source System Cross references that does not exist in PDH');
5833      FOR i IN c_unprcd_intf_rows LOOP
5834        Debug_Conc_Log('Processing for SS_ID, SS_REF='||TO_CHAR(i.SOURCE_SYSTEM_ID)||', '||i.SOURCE_SYSTEM_REFERENCE);
5835        IF i.INVENTORY_ITEM_ID IS NULL THEN
5836          BEGIN
5837            SELECT INVENTORY_ITEM_ID INTO l_inventory_item_id
5838            FROM MTL_SYSTEM_ITEMS_B_KFV
5839            WHERE CONCATENATED_SEGMENTS = i.ITEM_NUMBER
5840              AND ORGANIZATION_ID = i.ORGANIZATION_ID;
5841          EXCEPTION WHEN NO_DATA_FOUND THEN
5842            Debug_Conc_Log('Inventory Item Id is NULL and no Matching Item found for Item Number-'||i.ITEM_NUMBER);
5843            l_inventory_item_id := NULL;
5844          END;
5845        ELSE
5846          l_inventory_item_id := i.INVENTORY_ITEM_ID;
5847        END IF; --IF i.INVENTORY_ITEM_ID IS NULL THEN
5848 
5849        IF l_inventory_item_id IS NOT NULL THEN
5850          l_raise_event := Process_SSXref_Pvt(
5851                                 p_source_system_id               => i.SOURCE_SYSTEM_ID,
5852                                 p_source_system_reference        => i.SOURCE_SYSTEM_REFERENCE,
5853                                 p_source_system_reference_desc   => i.SOURCE_SYSTEM_REFERENCE_DESC,
5854                                 p_inventory_item_id              => l_inventory_item_id);
5855          IF l_raise_event THEN
5856            l_raise_bus_event := TRUE;
5857            -- Bug: 5262421
5858            -- Updating item, user-defined attrs, gdsn attrs, AMLs to successful process status
5859            -- so that they appear correctly in the Imported tab
5860            UPDATE MTL_SYSTEM_ITEMS_INTERFACE
5861            SET PROCESS_FLAG = 7,
5862                TRANSACTION_TYPE = 'UPDATE',
5863                PROGRAM_APPLICATION_ID = l_prog_appid,
5864                PROGRAM_ID = l_prog_id,
5865                REQUEST_ID = l_request_id,
5866                PROGRAM_UPDATE_DATE = SYSDATE
5867            WHERE ROWID = i.ROW_ID;
5868 
5869            UPDATE EGO_ITM_USR_ATTR_INTRFC
5870            SET PROCESS_STATUS = 4,
5871                PROGRAM_APPLICATION_ID = l_prog_appid,
5872                PROGRAM_ID = l_prog_id,
5873                REQUEST_ID = l_request_id,
5874                PROGRAM_UPDATE_DATE = SYSDATE
5875            WHERE DATA_SET_ID = p_data_set_id
5876              AND PROCESS_STATUS = 0
5877              AND SOURCE_SYSTEM_ID = i.SOURCE_SYSTEM_ID
5878              AND SOURCE_SYSTEM_REFERENCE = i.SOURCE_SYSTEM_REFERENCE;
5879 
5880            UPDATE EGO_AML_INTF
5881            SET PROCESS_FLAG = 7,
5882                PROGRAM_APPLICATION_ID = l_prog_appid,
5883                PROGRAM_ID = l_prog_id,
5884                REQUEST_ID = l_request_id,
5885                PROGRAM_UPDATE_DATE = SYSDATE
5886            WHERE DATA_SET_ID = p_data_set_id
5887              AND PROCESS_FLAG = 0
5888              AND SOURCE_SYSTEM_ID = i.SOURCE_SYSTEM_ID
5889              AND SOURCE_SYSTEM_REFERENCE = i.SOURCE_SYSTEM_REFERENCE;
5890          END IF; --IF l_raise_event THEN
5891          l_transaction_id := i.TRANSACTION_ID;
5892          l_org_id := i.ORGANIZATION_ID;
5893        ELSE
5894          Debug_Conc_Log('Inventory Item ID is NULL, so not calling Process_SSXref_Pvt');
5895        END IF; --IF l_inventory_item_id IS NOT NULL THEN
5896      END LOOP;
5897    ELSE --IF l_import_xref_only = 'Y' THEN
5898      Debug_Conc_Log('Import Only Cross References is FALSE');
5899      Debug_Conc_Log('Updating the Source System Description');
5900      FOR i IN c_intf_existing_rows LOOP
5901        Debug_Conc_Log('Processing for SS_ID, SS_REF='||TO_CHAR(i.SOURCE_SYSTEM_ID)||', '||i.SOURCE_SYSTEM_REFERENCE);
5902        l_inventory_item_id := i.INVENTORY_ITEM_ID;
5903 
5904        IF l_inventory_item_id IS NOT NULL THEN
5905          UPDATE MTL_CROSS_REFERENCES_TL
5906          SET    DESCRIPTION       = i.SOURCE_SYSTEM_REFERENCE_DESC,
5907                 LAST_UPDATE_DATE  = SYSDATE,
5908                 LAST_UPDATED_BY   = FND_GLOBAL.USER_ID,
5909                 LAST_UPDATE_LOGIN = FND_GLOBAL.LOGIN_ID,
5910                 SOURCE_LANG       = USERENV('LANG')
5911          WHERE CROSS_REFERENCE_ID = i.CROSS_REFERENCE_ID
5912            AND USERENV('LANG') IN (LANGUAGE, SOURCE_LANG);
5913 
5914          l_raise_bus_event := TRUE;
5915          l_transaction_id := i.TRANSACTION_ID;
5916          l_org_id := i.ORGANIZATION_ID;
5917        ELSE
5918          Debug_Conc_Log('Inventory Item ID is NULL');
5919        END IF; --IF l_inventory_item_id IS NOT NULL THEN
5920      END LOOP; --FOR i IN c_intf_existing_rows LOOP
5921      Debug_Conc_Log('Done Updating the Source System Description');
5922 
5923      Debug_Conc_Log('Processing Source System Cross references that does not exist in PDH');
5924      FOR i IN c_intf_rows LOOP
5925        Debug_Conc_Log('Processing for SS_ID, SS_REF='||TO_CHAR(i.SOURCE_SYSTEM_ID)||', '||i.SOURCE_SYSTEM_REFERENCE);
5926        l_raise_event := Process_SSXref_Pvt(
5927                               p_source_system_id                 => i.SOURCE_SYSTEM_ID,
5928                               p_source_system_reference      => i.SOURCE_SYSTEM_REFERENCE,
5929                               p_source_system_reference_desc => i.SOURCE_SYSTEM_REFERENCE_DESC,
5930                               p_inventory_item_id                => i.INVENTORY_ITEM_ID);
5931        IF l_raise_event THEN
5932          l_raise_bus_event := TRUE;
5933        END IF; --IF l_raise_event THEN
5934        l_transaction_id := i.TRANSACTION_ID;
5935        l_org_id := i.ORGANIZATION_ID;
5936      END LOOP;
5937    END IF; --IF l_import_xref_only = 'Y' THEN
5938 
5939    IF l_raise_bus_event THEN
5940      Debug_Conc_Log('Raising business event');
5941      EGO_WF_WRAPPER_PVT.Raise_Item_Event(
5942        p_event_name    => l_xref_event_name,
5943        p_request_id    => l_request_id,
5944        x_msg_data      => l_msg_data,
5945        x_return_status => l_return_status);
5946 
5947      Debug_Conc_Log('Done Raising business event with status - '||l_return_status);
5948      Debug_Conc_Log('Done Raising business event with message - '||SUBSTR(l_msg_data, 3950));
5949      IF l_return_status <> 'S' THEN
5950        l_msg_text := SUBSTR('Error in raising business event for Source System Item Cross References - '||l_msg_data, 4000);
5951        dumm_status  := INVPUOPI.mtl_log_interface_err(
5952                                   l_org_id
5953                                  ,l_user_id
5954                                  ,l_login_id
5955                                  ,l_prog_appid
5956                                  ,l_prog_id
5957                                  ,l_request_id
5958                                  ,l_transaction_id
5959                                  ,l_msg_text
5960                                  ,'SOURCE_SYSTEM_REFERENCE'
5961                                  ,'MTL_SYSTEM_ITEMS_INTERFACE'
5962                                  ,'INV_IOI_ERR_RAISE_BE4_SSICR'--bug 11894684, replace INV_IOI_ERR
5963                                  ,l_err_text);
5964      END IF; --IF l_return_status <> 'S' THEN
5965    END IF; --IF l_raise_event THEN
5966 
5967    --COMMIT;
5968    RETCODE := '0';
5969    ERRBUF := NULL;
5970    Debug_Conc_Log('Done Process_SSXref_Intf_Rows with success');
5971  EXCEPTION WHEN OTHERS THEN
5972    RETCODE := '2';
5973    ERRBUF := 'Error in method EGO_IMPORT_PVT.Process_SSXref_Intf_Rows - '||SQLERRM;
5974    Debug_Conc_Log('Done Process_SSXref_Intf_Rows with error - '||SQLERRM);
5975  END Process_SSXref_Intf_Rows;
5976 
5977     /*
5978      * This method sets the confirm_status for an unprocessed row (process_flag = 0) in the master org
5979      * for a source system item identified by p_source_system_id and p_source_system_reference.
5980      * p_status can have the following values:
5981      * G_CONF_XREF  -- expecting p_inventory_item_id to be passed
5982      * G_CONF_MATCH -- expecting p_inventory_item_id to be passed
5983      * G_CONF_NEW   -- expecting no p_inventory_item_id to be passed
5984      * G_UNCONF_NONE_MATCH -- expecting no p_inventory_item_id to be passed
5985      * G_UNCONF_SIGL_MATCH -- expecting p_inventory_item_id to be passed
5986      * G_UNCONF_MULT_MATCH -- p_inventory_item_id is optional
5987      */
5988     PROCEDURE Set_Confirm_Status(p_data_set_id IN  NUMBER,
5989                                  p_source_system_id IN VARCHAR2,
5990                                  p_source_system_reference IN VARCHAR2,
5991                                  p_status IN VARCHAR2,
5992                                  p_inventory_item_id IN NUMBER DEFAULT NULL,
5993                                  p_organization_id IN NUMBER DEFAULT NULL)
5994     IS
5995       l_org_id    MTL_PARAMETERS.ORGANIZATION_ID%TYPE;
5996       l_org_code  MTL_PARAMETERS.ORGANIZATION_CODE%TYPE;
5997       unexpected_parameters EXCEPTION;
5998     BEGIN
5999         -- Check that the parameters satisfy the assumptions: if they don't, raise error
6000 
6001         -- Status should be one of the constants
6002         IF p_status NOT IN ( G_CONF_XREF, G_CONF_MATCH, G_CONF_NEW
6003                            , G_UNCONF_NONE_MATCH, G_UNCONF_SIGL_MATCH, G_UNCONF_MULT_MATCH )
6004         THEN
6005             RAISE unexpected_parameters;
6006         END IF;
6007 
6008         -- Item id must be passed for cross-referenced, confirmed matches, and unconfirmed single matches
6009         IF p_inventory_item_id IS NULL AND p_status IN ( G_CONF_XREF, G_CONF_MATCH, G_UNCONF_SIGL_MATCH )
6010         THEN
6011             RAISE unexpected_parameters;
6012         END IF;
6013 
6014         -- Item id cannot be passed for confirmed new items, and no-match items
6015         IF p_inventory_item_id IS NOT NULL AND p_status IN ( G_CONF_NEW, G_UNCONF_NONE_MATCH )
6016         THEN
6017             RAISE unexpected_parameters;
6018         END IF;
6019 
6020         SELECT
6021          MP.ORGANIZATION_ID,
6022          MP.ORGANIZATION_CODE
6023         INTO l_org_id, l_org_code
6024         FROM MTL_PARAMETERS MP,
6025          EGO_IMPORT_BATCHES_B BA
6026         WHERE BA.ORGANIZATION_ID = MP.ORGANIZATION_ID AND
6027          BA.BATCH_ID = p_data_set_id;
6028 
6029         -- Set the confirm status and item number based on the parameters
6030         -- Rows that already have a "fake" confirm_status are kept "fake"
6031   /* Bug 8621347. Do not modify ITEM_NUMBER if p_status is G_UNCONF_NONE_MATCH.
6032            If p_status is G_CONF_NEW, update ITEM_NUMBER with SOURCE_SYSTEM_REFERENCE, if ITEM_NUMBER is not provided, otherwise
6033            retain ITEM_NUMBER.
6034            If p_status is G_CONF_NEW, update DESCRIPTION with SOURCE_SYSTEM_REFERENCE_DES, if DESCRIPTION is not provided, otherwise
6035            retain DESCRIPTION.
6036         */
6037          /*  start bug 16309495
6038          In below query Item_number is fetched from MTL_SYSTEM_ITEMS_KFV based on p_inventory_item_id and p_organization_id
6039          and updates MTL_SYSTEM_ITEMS_INTERFACE.
6040          This will fire only for Single Match case.
6041          As we are populating INVENTORY_ITEM_ID,ORGANIZATION_ID
6042          There is no harm in removing ITEM_NUMBER.
6043          We can fetch this value later if need based on invId and OrgId.
6044          Hence commenting the inner query and replaced it with Null value.
6045          end bug 16309495*/
6046         UPDATE MTL_SYSTEM_ITEMS_INTERFACE
6047         SET PROCESS_FLAG = 0,
6048          ORGANIZATION_ID = l_org_id,
6049          ORGANIZATION_CODE = l_org_code,
6050          INVENTORY_ITEM_ID = p_inventory_item_id,
6051          ITEM_NUMBER = Decode(p_status,
6052                               G_CONF_NEW,Decode(ITEM_NUMBER,NULL,SOURCE_SYSTEM_REFERENCE,ITEM_NUMBER),
6053                               G_UNCONF_NONE_MATCH,ITEM_NUMBER,NULL
6054                              ),
6055          DESCRIPTION = Decode(p_status,G_CONF_NEW,Decode(DESCRIPTION,NULL,SOURCE_SYSTEM_REFERENCE_DESC,DESCRIPTION),DESCRIPTION),
6056          CONFIRM_STATUS =
6057             CASE
6058             WHEN CONFIRM_STATUS IN ( G_CONF_XREF_FAKE, G_CONF_MATCH_FAKE, G_FAKE_CONF_STATUS_FLAG
6059                                    , G_UNCONF_NO_MATCH_FAKE, G_UNCONF_MULTI_MATCH_FAKE, G_UNCONF_SINGLE_MATCH_FAKE )
6060             THEN (  CASE p_status
6061                     WHEN G_CONF_XREF            THEN G_CONF_XREF_FAKE
6062                     WHEN G_CONF_MATCH           THEN G_CONF_MATCH_FAKE
6063                     WHEN G_UNCONF_SIGL_MATCH    THEN G_UNCONF_SINGLE_MATCH_FAKE
6064                     WHEN G_UNCONF_MULT_MATCH    THEN G_UNCONF_MULTI_MATCH_FAKE
6065                     WHEN G_UNCONF_NONE_MATCH    THEN G_UNCONF_NO_MATCH_FAKE
6066                     ELSE p_status
6067                     END
6068                  )
6069             ELSE p_status
6070             END
6071         WHERE
6072          SET_PROCESS_ID = p_data_set_id AND
6073          SOURCE_SYSTEM_ID = p_source_system_id AND
6074          SOURCE_SYSTEM_REFERENCE = p_source_system_reference AND
6075          (PROCESS_FLAG = 0 OR PROCESS_FLAG IS NULL) AND
6076          (   (ORGANIZATION_ID IS NULL AND ORGANIZATION_CODE IS NULL) OR
6077               ORGANIZATION_ID = l_org_id OR
6078              (ORGANIZATION_ID IS NULL AND ORGANIZATION_CODE = l_org_code)
6079          );
6080     END Set_Confirm_Status;
6081 
6082     /*
6083      * this function checks if the user has to provide revision information
6084      * based on the data and revision import policy
6085      */
6086     FUNCTION IS_NEW_REVISION_INFO_NEEDED
6087     (
6088        p_batch_id                        IN  EGO_ITM_USR_ATTR_INTRFC.DATA_SET_ID%TYPE
6089      , p_source_system_id                IN  EGO_ITM_USR_ATTR_INTRFC.SOURCE_SYSTEM_ID%TYPE
6090      , p_source_system_reference         IN  EGO_ITM_USR_ATTR_INTRFC.SOURCE_SYSTEM_REFERENCE%TYPE
6091      , p_organization_id                 IN  EGO_ITM_USR_ATTR_INTRFC.ORGANIZATION_ID%TYPE
6092      , p_organization_code               IN  EGO_ITM_USR_ATTR_INTRFC.ORGANIZATION_CODE%TYPE
6093      , p_instance_rev_policy             IN  EGO_IMPORT_OPTION_SETS.REVISION_IMPORT_POLICY%TYPE
6094     )
6095     RETURN BOOLEAN IS
6096         l_temp VARCHAR2(1);
6097     BEGIN
6098         IF p_instance_rev_policy IN ('S', 'L')  THEN
6099           RETURN false;
6100         END IF;
6101 
6102         SELECT 'x' INTO l_temp
6103         FROM MTL_ITEM_REVISIONS_INTERFACE MIRI
6104         WHERE SET_PROCESS_ID = p_batch_id AND
6105               PROCESS_FLAG = 0 AND
6106               SOURCE_SYSTEM_ID = p_source_system_id AND
6107               SOURCE_SYSTEM_REFERENCE = p_source_system_reference AND
6108               (ORGANIZATION_ID = p_organization_id OR ORGANIZATION_CODE = p_organization_code) AND
6109               REVISION IS NOT NULL AND
6110               Upper(REVISION) NOT IN ( SELECT B.REVISION FROM MTL_ITEM_REVISIONS_B B, MTL_SYSTEM_ITEMS_INTERFACE MSII
6111                                   WHERE MSII.SOURCE_SYSTEM_REFERENCE = MIRI.SOURCE_SYSTEM_REFERENCE
6112                                     AND MSII.SOURCE_SYSTEM_ID = MIRI.SOURCE_SYSTEM_ID
6113                                     AND (MSII.ORGANIZATION_ID = MIRI.ORGANIZATION_ID
6114                                          OR MSII.ORGANIZATION_CODE = MIRI.ORGANIZATION_CODE)
6115                                     AND MSII.SET_PROCESS_ID = MIRI.SET_PROCESS_ID
6116                                     AND MSII.PROCESS_FLAG = 0
6117                                     AND B.INVENTORY_ITEM_ID = MSII.INVENTORY_ITEM_ID
6118                               ) AND
6119               EFFECTIVITY_DATE IS NOT NULL AND
6120               UPPER(TRANSACTION_TYPE) = 'CREATE' AND
6121               ROWNUM < 2;
6122         RETURN false;
6123     EXCEPTION
6124     WHEN NO_DATA_FOUND THEN
6125       RETURN true;
6126     END IS_NEW_REVISION_INFO_NEEDED;
6127 
6128 -----------------------------------------------------------------------------------------
6129 --R12C :  This Function returns varchar2 value to specify if the batch is
6130 --        ready for Import.
6131 FUNCTION Get_Import_Ready_Status ( p_data_set_id IN NUMBER,
6132                                    p_source_system_id IN VARCHAR2,
6133                                    p_source_system_reference IN VARCHAR2,
6134                                    p_bundle_id IN NUMBER
6135                                  )
6136 RETURN VARCHAR2 IS
6137   l_is_batch_GDSN_enabled     VARCHAR2(1);
6138   l_confirm_status            VARCHAR2(50);
6139 
6140   CURSOR item_group_cr IS
6141     SELECT MSII.SOURCE_SYSTEM_ID,
6142            MSII.SOURCE_SYSTEM_REFERENCE,
6143            MSII.SET_PROCESS_ID,
6144            MSII.BUNDLE_ID
6145     FROM MTL_SYSTEM_ITEMS_INTERFACE MSII
6146     WHERE MSII.PROCESS_FLAG = 0
6147       AND MSII.SET_PROCESS_ID = p_data_set_id
6148       AND MSII.BUNDLE_ID = p_bundle_id;
6149 
6150 BEGIN
6151   -- See if the batch is GDSN Enabled
6152   SELECT NVL(ENABLED_FOR_DATA_POOL, 'N') INTO l_is_batch_GDSN_enabled
6153   FROM EGO_IMPORT_OPTION_SETS
6154   WHERE BATCH_ID = p_data_set_id;
6155 
6156   IF l_is_batch_GDSN_enabled = 'Y' AND p_bundle_id IS NOT NULL THEN
6157     FOR rec in item_group_cr LOOP
6158       l_confirm_status := Get_Confirm_Status( rec.SET_PROCESS_ID ,
6159                                               rec.SOURCE_SYSTEM_ID ,
6160                                               rec.SOURCE_SYSTEM_REFERENCE,
6161                                               rec.bundle_id
6162                                             );
6163       IF l_confirm_status NOT IN ( 'CNR', 'CCR', 'CMR', 'CFCR', 'CFMR' ) THEN
6164         RETURN 'NotImportReady';
6165       END IF;
6166     END LOOP;
6167     RETURN 'ImportReady';
6168   ELSE
6169     l_confirm_status := Get_Confirm_Status( p_data_set_id ,
6170                                             p_source_system_id ,
6171                                             p_source_system_reference,
6172                                             p_bundle_id
6173                                           );
6174     IF l_confirm_status IN ( 'CNR', 'CCR', 'CMR', 'CFCR', 'CFMR' ) THEN
6175       RETURN 'ImportReady';
6176     ELSE
6177       RETURN 'NotImportReady';
6178     END IF;
6179   END IF;
6180 END Get_Import_Ready_Status;
6181 -----------------------------------------------------------------------------------------
6182 
6183  /*
6184   * This method gets the confirm status plus the extra letter to indicate
6185   * whether an item is ready to be passed on to IOI
6186   */
6187  FUNCTION Get_Confirm_Status( p_data_set_id IN NUMBER,
6188                               p_source_system_id IN VARCHAR2,
6189                               p_source_system_reference IN VARCHAR2,
6190                               p_bundle_id IN NUMBER
6191                             )
6192  RETURN VARCHAR2 IS
6193    l_pdh_item_number            MTL_SYSTEM_ITEMS_INTERFACE.ITEM_NUMBER%TYPE;
6194    l_pdh_description            MTL_SYSTEM_ITEMS_INTERFACE.DESCRIPTION%TYPE;
6195    l_pdh_item_catalog_group_id  MTL_SYSTEM_ITEMS_INTERFACE.ITEM_CATALOG_GROUP_ID%TYPE;
6196    l_confirm_status             MTL_SYSTEM_ITEMS_INTERFACE.CONFIRM_STATUS%TYPE;
6197    l_item_num_gen               MTL_ITEM_CATALOG_GROUPS_B.ITEM_NUM_GEN_METHOD%TYPE;
6198    l_item_desc_gen              MTL_ITEM_CATALOG_GROUPS_B.ITEM_DESC_GEN_METHOD%TYPE;
6199    l_organization_id            MTL_PARAMETERS.ORGANIZATION_ID%TYPE;
6200    l_organization_code          MTL_PARAMETERS.ORGANIZATION_CODE%TYPE;
6201    l_batch_rev_policy           EGO_IMPORT_OPTION_SETS.REVISION_IMPORT_POLICY%TYPE;
6202    l_instance_rev_policy        MTL_SYSTEM_ITEMS_INTERFACE.REVISION_IMPORT_POLICY%TYPE;
6203    l_style_item_flag            MTL_SYSTEM_ITEMS_INTERFACE.STYLE_ITEM_FLAG%TYPE;
6204  BEGIN
6205     SELECT
6206        MP.ORGANIZATION_ID,
6207        MP.ORGANIZATION_CODE,
6208        NVL(OPT.REVISION_IMPORT_POLICY, 'L')
6209     INTO l_organization_id, l_organization_code, l_batch_rev_policy
6210     FROM MTL_PARAMETERS MP,
6211        EGO_IMPORT_BATCHES_B ba,
6212        EGO_IMPORT_OPTION_SETS OPT
6213     WHERE BA.ORGANIZATION_ID = MP.ORGANIZATION_ID AND
6214        BA.BATCH_ID = OPT.BATCH_ID AND
6215        BA.BATCH_ID = p_data_set_id;
6216 
6217     SELECT ITEM_NUMBER,
6218            NVL(DESCRIPTION,
6219             ( SELECT  ATTRIBUTE_VALUE
6220               FROM MTL_ITEM_TEMPLATES_VL TEMP, MTL_ITEM_TEMPL_ATTRIBUTES ATTR
6221               WHERE (    (MSII.TEMPLATE_ID IS NOT NULL AND TEMP.TEMPLATE_ID = MSII.TEMPLATE_ID)
6222                       OR (MSII.TEMPLATE_ID IS NULL AND TEMP.TEMPLATE_NAME = MSII.TEMPLATE_NAME)
6223                     ) AND
6224                     (TEMP.CONTEXT_ORGANIZATION_ID = MSII.ORGANIZATION_ID OR TEMP.CONTEXT_ORGANIZATION_ID IS NULL) AND
6225                     TEMP.TEMPLATE_ID = ATTR.TEMPLATE_ID AND
6226                     ATTR.ENABLED_FLAG = 'Y' AND
6227                     ATTR.ATTRIBUTE_NAME LIKE 'MTL_SYSTEM_ITEMS.DESCRIPTION')),
6228            NVL(ITEM_CATALOG_GROUP_ID,
6229             ( SELECT MICG.ITEM_CATALOG_GROUP_ID
6230               FROM MTL_ITEM_CATALOG_GROUPS_B_KFV MICG
6231               WHERE MICG.CONCATENATED_SEGMENTS = MSII.ITEM_CATALOG_GROUP_NAME)),
6232            CONFIRM_STATUS,
6233            NVL(REVISION_IMPORT_POLICY, l_batch_rev_policy),
6234            MSII.STYLE_ITEM_FLAG
6235     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
6236     FROM MTL_SYSTEM_ITEMS_INTERFACE MSII, EGO_IMPORT_BATCHES_B BATCH
6237     WHERE MSII.SET_PROCESS_ID = p_data_set_id AND
6238         MSII.SOURCE_SYSTEM_ID = p_source_system_id AND
6239         MSII.SOURCE_SYSTEM_REFERENCE = p_source_system_reference AND
6240         MSII.ORGANIZATION_ID = BATCH.ORGANIZATION_ID AND
6241         BATCH.BATCH_ID = p_data_set_id AND
6242         PROCESS_FLAG = 0 AND
6243         ( ( p_bundle_id IS NULL AND MSII.BUNDLE_ID IS NULL )                  --R12C:
6244           OR MSII.BUNDLE_ID = p_bundle_id
6245         ) AND
6246         ROWNUM = 1;
6247         -- eletuchy: note that this rownum = 1 introduced indeterminacy ...
6248 
6249     -- if confirm status is one of UN, US, UM (unconfirmed no match, unconfirmed single match, unconfirmed multiple matches) or null
6250     -- simply return it
6251     IF  l_confirm_status IN ( G_UNCONF_NONE_MATCH, G_UNCONF_SIGL_MATCH, G_UNCONF_MULT_MATCH
6252                             , G_UNCONF_NO_MATCH_FAKE, G_UNCONF_SINGLE_MATCH_FAKE, G_UNCONF_MULTI_MATCH_FAKE )
6253         OR l_confirm_status IS NULL
6254     THEN
6255         RETURN l_confirm_status;
6256 
6257     -- if confirm status is CN (confirmed new), we need to see if all required information for item creation is provided
6258     ELSIF l_confirm_status = G_CONF_NEW THEN
6259        -- if item catalog group id is specified, we look at the item number generation method, if any
6260        -- says U (user entered) and is not there, it is not ready
6261        Get_Item_Num_Desc_Gen_Method(l_pdh_item_catalog_group_id, l_item_num_gen, l_item_desc_gen);
6262        IF ( ( l_item_desc_gen <> 'F' AND l_pdh_description IS NULL ) OR
6263             ( l_item_desc_gen = 'F' AND l_pdh_description IS NULL AND NVL(l_style_item_flag, 'N') = 'Y' )
6264           ) THEN
6265          RETURN G_CONF_NEW_NOT_READY;
6266        END IF;
6267 
6268        -- if no item catalog group id is specified, these columns are required
6269        IF l_pdh_item_catalog_group_id IS NULL THEN
6270          IF l_pdh_item_number IS null THEN
6271            RETURN G_CONF_NEW_NOT_READY;
6272          ELSE
6273            RETURN G_CONF_NEW_READY;
6274          END IF;
6275        END IF;
6276 
6277        IF ( ( l_item_num_gen NOT IN ('S', 'F') AND l_pdh_item_number IS NULL ) OR
6278             ( l_item_num_gen IN ('S', 'F') AND l_pdh_item_number IS NULL AND NVL(l_style_item_flag, 'N') = 'Y' )
6279           ) THEN
6280          RETURN G_CONF_NEW_NOT_READY;
6281        ELSE
6282          RETURN G_CONF_NEW_READY;
6283        END IF;
6284     -- if confirm status is CM (confirmed match) or  CC (confirmed cross reference),
6285     -- we need to see if rev level attributes are loaded and check import policy
6286     ELSIF l_confirm_status in ( G_CONF_MATCH, G_CONF_XREF, G_CONF_MATCH_FAKE, G_CONF_XREF_FAKE )  THEN
6287        RETURN l_confirm_status
6288            || CASE WHEN IS_NEW_REVISION_INFO_NEEDED( p_data_set_id
6289                                                    , p_source_system_id
6290                                                    , p_source_system_reference
6291                                                    , l_organization_id
6292                                                    , l_organization_code
6293                                                    , l_instance_rev_policy ) THEN 'N'
6294                    ELSE 'R'
6295                    END;
6296     ELSE
6297        RETURN 'UNKNOWN';
6298     END IF;
6299 
6300  EXCEPTION
6301     WHEN NO_DATA_FOUND THEN -- no batch header info, or no matching msii rows
6302         RETURN 'UNKNOWN';
6303  END Get_Confirm_Status;
6304 
6305  PROCEDURE Get_Item_Num_Desc_Gen_Method(p_item_catalog_group_id IN NUMBER,
6306                                         x_item_num_gen_method OUT NOCOPY VARCHAR2,
6307                                         x_item_desc_gen_method OUT NOCOPY VARCHAR2) IS
6308     l_num_gen_resolved VARCHAR2(1) := 'N';
6309     l_desc_gen_resolved VARCHAR2(1) := 'N';
6310     l_item_num_gen_method MTL_ITEM_CATALOG_GROUPS_B.ITEM_NUM_GEN_METHOD%TYPE;
6311     l_item_desc_gen_method MTL_ITEM_CATALOG_GROUPS_B.ITEM_DESC_GEN_METHOD%TYPE;
6312 
6313     CURSOR c_gen_method IS
6314       SELECT
6315        DECODE(ICC.ITEM_NUM_GEN_METHOD,
6316               NULL, DECODE(ICC.PARENT_CATALOG_GROUP_ID, NULL, 'U', 'I'),
6317               ICC.ITEM_NUM_GEN_METHOD),
6318        DECODE(ICC.ITEM_DESC_GEN_METHOD,
6319               NULL, DECODE(ICC.PARENT_CATALOG_GROUP_ID, NULL, 'U', 'I'),
6320               ICC.ITEM_DESC_GEN_METHOD)
6321       FROM MTL_ITEM_CATALOG_GROUPS_B ICC
6322       CONNECT BY PRIOR ICC.PARENT_CATALOG_GROUP_ID = ICC.ITEM_CATALOG_GROUP_ID
6323          START WITH ICC.ITEM_CATALOG_GROUP_ID = p_item_catalog_group_id;
6324  BEGIN
6325     OPEN c_gen_method;
6326     LOOP
6327        FETCH c_gen_method INTO l_item_num_gen_method, l_item_desc_gen_method;
6328        -- exit loop if no more row exists or we have resolved both item number and description generation methods
6329        EXIT WHEN (l_num_gen_resolved = 'Y' AND l_desc_gen_resolved = 'Y') OR c_gen_method%NOTFOUND;
6330        -- if generation method hasn't been resolved yet
6331        IF l_num_gen_resolved = 'N' AND l_item_num_gen_method IN ('U', 'S', 'F') THEN
6332           l_num_gen_resolved := 'Y';
6333           x_item_num_gen_method := l_item_num_gen_method;
6334        END IF;
6335 
6336        IF l_desc_gen_resolved = 'N' AND l_item_desc_gen_method IN ('U', 'F') THEN
6337           l_desc_gen_resolved := 'Y';
6338           x_item_desc_gen_method := l_item_desc_gen_method;
6339        END IF;
6340 
6341 
6342     END LOOP;
6343 
6344     CLOSE c_gen_method;
6345  END Get_Item_Num_Desc_Gen_Method;
6346 
6347 
6348    /*
6349     * parse item segments into item number if item_number is null
6350     */
6351    PROCEDURE PARSE_ITEM_SEGMENTS   (  p_set_id            IN NUMBER
6352                                    ,  p_master_org_id     IN NUMBER
6353                                    ,  p_is_pdh_batch      IN FLAG DEFAULT FND_API.G_FALSE
6354                                    )
6355    IS
6356        CURSOR c_ss_items_table IS
6357          SELECT rowid rid
6358          FROM   mtl_system_items_interface
6359          WHERE  set_process_id  = p_set_id
6360            AND  process_flag    = 0
6361            AND  organization_id /*bug 6402904 parse for child items also*/
6362                             IN (SELECT organization_id
6363                                       FROM mtl_parameters mp
6364                                      WHERE mp.master_organization_id = p_master_org_id)
6365            AND  (  confirm_status IS NULL
6366                 OR confirm_status = G_FAKE_CONF_STATUS_FLAG
6367                 )
6368            AND  item_number IS null
6369          FOR UPDATE OF item_number;
6370 
6371        CURSOR c_pdh_items_table IS
6372          SELECT rowid rid
6373          FROM   mtl_system_items_interface
6374          WHERE  set_process_id  = p_set_id
6375            AND  process_flag    = 1
6376            AND  item_number IS null
6377          FOR UPDATE OF item_number;
6378 
6379        l_err_text       VARCHAR2(240) := NULL;
6380        l_item_number    MTL_SYSTEM_ITEMS_INTERFACE.ITEM_NUMBER%TYPE := NULL;
6381        l_item_id        MTL_SYSTEM_ITEMS_B.INVENTORY_ITEM_ID%TYPE := NULL;
6382        l_ret_code       INTEGER;
6383     BEGIN
6384         IF p_is_pdh_batch = FND_API.G_TRUE THEN
6385             FOR item_record IN c_pdh_items_table LOOP
6386                 l_ret_code := INVPUOPI.MTL_PR_PARSE_ITEM_SEGMENTS ( p_row_id     =>item_record.rid
6387                                                                   , item_number  =>l_item_number
6388                                                                   , item_id      =>l_item_id
6389                                                                   , ERR_TEXT     =>l_err_text
6390                                                                   );
6391             END LOOP;
6392         ELSE
6393             FOR item_record IN c_ss_items_table LOOP
6394                 l_ret_code := INVPUOPI.MTL_PR_PARSE_ITEM_SEGMENTS ( p_row_id     =>item_record.rid
6395                                                                   , item_number  =>l_item_number
6396                                                                   , item_id      =>l_item_id
6397                                                                   , ERR_TEXT     =>l_err_text
6398                                                                   );
6399             END LOOP;
6400         END IF;
6401     END PARSE_ITEM_SEGMENTS;
6402 
6403     /**
6404      * resolve the SYNC transaction_type into 'CREATE' or 'UPDATE'
6405      * using the same logic as INVPOPIB.pls for a PDH batch
6406      */
6407     PROCEDURE UPDATE_ITEM_SYNC_RECORDS_PDH
6408     (p_set_id  IN  NUMBER,
6409      p_org_id IN NUMBER
6410     ) IS
6411       CURSOR c_items_table IS
6412         SELECT  rowid
6413               , organization_id
6414               , inventory_item_id
6415               , item_number
6416               , transaction_id
6417               , transaction_type
6418         FROM   mtl_system_items_interface
6419         WHERE  set_process_id   = p_set_id
6420            AND organization_id = p_org_id
6421            AND process_flag     = 1
6422            AND UPPER(transaction_type) = 'SYNC'
6423            FOR UPDATE OF transaction_type;
6424 
6425       CURSOR c_item_exists(cp_item_id NUMBER) IS
6426         SELECT  1
6427         FROM   mtl_system_items_b
6428         WHERE  inventory_item_id = cp_item_id;
6429 
6430       l_item_exist NUMBER(10) := 0;
6431       l_err_text   VARCHAR2(200);
6432       l_status     NUMBER(10):= 0;
6433       l_item_id    mtl_system_items_b.inventory_item_id%TYPE;
6434 
6435    BEGIN
6436       FOR item_record IN c_items_table LOOP
6437          l_item_exist := 0;
6438          l_item_id    := NULL;
6439 
6440          IF item_record.inventory_item_id IS NULL THEN
6441             IF item_record.item_number IS NOT NULL THEN
6442                l_status  := INVPUOPI.MTL_PR_PARSE_ITEM_NUMBER
6443                   ( ITEM_NUMBER =>item_record.item_number
6444                   , ITEM_ID     =>item_record.inventory_item_id
6445                   , TRANS_ID    =>item_record.transaction_id
6446                   , ORG_ID      =>item_record.organization_id
6447                   , ERR_TEXT    =>l_err_text
6448                   , P_ROWID     =>item_record.rowid
6449                   );
6450             END IF;
6451             l_item_exist := INVUPD1B.EXISTS_IN_MSI
6452                 ( ROW_ID      => item_record.rowid
6453                 , ORG_ID      => item_record.organization_id
6454                 , INV_ITEM_ID => l_item_id
6455                 , TRANS_ID    => item_record.transaction_id
6456                 , ERR_TEXT    => l_err_text
6457                 , XSET_ID     => p_set_id
6458                 );
6459          ELSE
6460             l_item_id := item_record.inventory_item_id;
6461             OPEN  c_item_exists(item_record.inventory_item_id);
6462             FETCH c_item_exists INTO l_item_exist;
6463             CLOSE c_item_exists;
6464             l_item_exist := NVL(l_item_exist,0);
6465          END IF;
6466 
6467          IF l_item_exist = 1 THEN
6468             UPDATE mtl_system_items_interface
6469             SET    transaction_type  = 'UPDATE'
6470             WHERE  rowid = item_record.rowid;
6471          ELSE
6472             UPDATE mtl_system_items_interface
6473             SET    transaction_type = 'CREATE', inventory_item_id = NULL
6474             WHERE  rowid = item_record.rowid;
6475          END IF;
6476       END LOOP;
6477 
6478    END UPDATE_ITEM_SYNC_RECORDS_PDH;
6479 
6480  /*
6481   * This procedure resolves source system item cross references
6482   * immediately after MTL_SYSTEM_ITEMS_INTERFACE is populated and
6483   * tries to resolve discrepencies between user entered CONFIRM_STATUS
6484   * (if any), TRANSACTION_TYPE (if any)  and other data.
6485   * This procedure needs to be safe for re-execution if data is loaded into an
6486   * active batch repeatedly.
6487   */
6488  PROCEDURE Resolve_SSXref_on_Data_load( p_data_set_id  IN  NUMBER
6489                                        ,p_commit       IN  FLAG    DEFAULT FND_API.G_TRUE
6490                                       )
6491  IS
6492    l_org_id                 MTL_PARAMETERS.ORGANIZATION_ID%TYPE;
6493    l_org_code               MTL_PARAMETERS.ORGANIZATION_CODE%TYPE;
6494    l_ss_id                  EGO_IMPORT_BATCHES_B.SOURCE_SYSTEM_id%TYPE;
6495    l_import_xref_only       EGO_IMPORT_OPTION_SETS.IMPORT_XREF_ONLY%TYPE;
6496    l_party_name             VARCHAR2(1000);
6497    l_security_predicate     VARCHAR2(4000);
6498    l_return_status          VARCHAR2(100);
6499    l_sql                    VARCHAR2(32000);
6500 
6501    l_insert_date            DATE;
6502    l_org                    VARCHAR2(100);
6503    l_enabled_for_data_pool  EGO_IMPORT_OPTION_SETS.ENABLED_FOR_DATA_POOL%TYPE;
6504  BEGIN
6505     Debug_Conc_Log( 'Resolve_SSXref_on_Data_load - Entering' );
6506 
6507     Debug_Conc_Log( 'Resolve_SSXref_on_Data_load - Gather Statistics' );
6508     Gather_Stats_For_Intf_Tables(p_data_set_id);
6509     Debug_Conc_Log( 'Resolve_SSXref_on_Data_load - Done Call for Gather Statistics' );
6510     l_party_name := Get_Current_Party_Name;
6511 
6512     -- get the organization_id, organization_code for this batch
6513     BEGIN
6514       SELECT
6515           MP.ORGANIZATION_ID,
6516           MP.ORGANIZATION_CODE,
6517           BA.SOURCE_SYSTEM_ID,
6518           NVL(OPT.IMPORT_XREF_ONLY, 'N'),
6519           NVL(ENABLED_FOR_DATA_POOL, 'N')
6520       INTO l_org_id, l_org_code, l_ss_id, l_import_xref_only, l_enabled_for_data_pool
6521       FROM MTL_PARAMETERS MP,
6522           EGO_IMPORT_BATCHES_B BA,
6523           EGO_IMPORT_OPTION_SETS OPT
6524       WHERE BA.ORGANIZATION_ID = MP.ORGANIZATION_ID
6525         AND BA.BATCH_ID = p_data_set_id
6526         AND BA.BATCH_ID = OPT.BATCH_ID;
6527     EXCEPTION WHEN NO_DATA_FOUND THEN
6528       -- IF batch not found then getting the default org_id from
6529       -- profile option for the user
6530       l_org := fnd_profile.value('EGO_USER_ORGANIZATION_CONTEXT');
6531       BEGIN
6532         SELECT mp.MASTER_ORGANIZATION_ID, mp1.ORGANIZATION_CODE
6533         INTO l_org_id, l_org_code
6534         FROM MTL_PARAMETERS mp, MTL_PARAMETERS mp1
6535         WHERE mp.ORGANIZATION_ID = TO_NUMBER(l_org)
6536           AND mp.MASTER_ORGANIZATION_ID = mp1.ORGANIZATION_ID;
6537       EXCEPTION WHEN OTHERS THEN
6538         l_org_id := NULL;
6539         l_org_code := NULL;
6540       END;
6541       l_ss_id := get_pdh_source_system_id();
6542       l_import_xref_only := 'N';
6543       l_enabled_for_data_pool := 'N';
6544     END;
6545 
6546     -- populate organization_id if it's null
6547     -- if organization_code is not null, derive from it otherwise use
6548     -- organization id for batch
6549     UPDATE MTL_SYSTEM_ITEMS_INTERFACE MSII
6550     SET ORGANIZATION_ID =
6551         CASE
6552             WHEN ORGANIZATION_CODE IS NOT NULL
6553             THEN (SELECT ORGANIZATION_ID FROM MTL_PARAMETERS WHERE ORGANIZATION_CODE =  MSII.ORGANIZATION_CODE)
6554             ELSE l_org_id
6555         END
6556     WHERE SET_PROCESS_ID = p_data_set_id AND
6557         (PROCESS_FLAG IS NULL OR PROCESS_FLAG IN (0, 1)) AND
6558         ORGANIZATION_ID IS NULL;
6559 
6560 
6561     UPDATE MTL_ITEM_REVISIONS_INTERFACE MIRI
6562     SET ORGANIZATION_ID =
6563         CASE
6564             WHEN ORGANIZATION_CODE IS NOT NULL
6565             THEN (SELECT ORGANIZATION_ID FROM MTL_PARAMETERS WHERE ORGANIZATION_CODE =  MIRI.ORGANIZATION_CODE)
6566             ELSE l_org_id
6567         END
6568     WHERE SET_PROCESS_ID = p_data_set_id AND
6569         (PROCESS_FLAG IS NULL OR PROCESS_FLAG IN (0, 1)) AND
6570         ORGANIZATION_ID IS NULL;
6571 
6572 
6573     UPDATE MTL_ITEM_CATEGORIES_INTERFACE MICI
6574     SET ORGANIZATION_ID =
6575         CASE
6576             WHEN ORGANIZATION_CODE IS NOT NULL
6577             THEN (SELECT ORGANIZATION_ID FROM MTL_PARAMETERS WHERE ORGANIZATION_CODE =  MICI.ORGANIZATION_CODE)
6578             ELSE l_org_id
6579         END
6580     WHERE SET_PROCESS_ID = p_data_set_id AND
6581         (PROCESS_FLAG IS NULL OR PROCESS_FLAG IN (0, 1)) AND
6582         ORGANIZATION_ID IS NULL;
6583 
6584     UPDATE EGO_ITM_USR_ATTR_INTRFC EIUAI
6585     SET ORGANIZATION_ID =
6586         CASE
6587             WHEN ORGANIZATION_CODE IS NOT NULL
6588             THEN (SELECT ORGANIZATION_ID FROM MTL_PARAMETERS WHERE ORGANIZATION_CODE =  EIUAI.ORGANIZATION_CODE)
6589             ELSE l_org_id
6590         END
6591     WHERE DATA_SET_ID = p_data_set_id AND
6592         (PROCESS_STATUS IS NULL OR PROCESS_STATUS IN (0, 1)) AND
6593         ORGANIZATION_ID IS NULL;
6594 
6595     UPDATE EGO_ITEM_PEOPLE_INTF EIPI
6596     SET ORGANIZATION_ID =
6597         CASE
6598             WHEN ORGANIZATION_CODE IS NOT NULL
6599             THEN (SELECT ORGANIZATION_ID FROM MTL_PARAMETERS WHERE ORGANIZATION_CODE =  EIPI.ORGANIZATION_CODE)
6600             ELSE l_org_id
6601         END
6602     WHERE DATA_SET_ID = p_data_set_id AND
6603         (PROCESS_STATUS IS NULL OR PROCESS_STATUS IN (0, 1)) AND
6604         ORGANIZATION_ID IS NULL;
6605 
6606     UPDATE EGO_AML_INTF EAI
6607     SET ORGANIZATION_ID =
6608         CASE
6609             WHEN ORGANIZATION_CODE IS NOT NULL
6610             THEN (SELECT ORGANIZATION_ID FROM MTL_PARAMETERS WHERE ORGANIZATION_CODE =  EAI.ORGANIZATION_CODE)
6611             ELSE l_org_id
6612         END
6613     WHERE DATA_SET_ID = p_data_set_id AND
6614         (PROCESS_FLAG IS NULL OR PROCESS_FLAG IN (0, 1)) AND
6615         ORGANIZATION_ID IS NULL;
6616 
6617     UPDATE EGO_ITEM_ASSOCIATIONS_INTF EIAI
6618     SET ORGANIZATION_ID =
6619         CASE
6620             WHEN ORGANIZATION_CODE IS NOT NULL
6621             THEN (SELECT ORGANIZATION_ID FROM MTL_PARAMETERS WHERE ORGANIZATION_CODE =  EIAI.ORGANIZATION_CODE)
6622             ELSE l_org_id
6623         END
6624     WHERE BATCH_ID = p_data_set_id AND
6625         (PROCESS_FLAG IS NULL OR PROCESS_FLAG IN (0, 1)) AND
6626         ORGANIZATION_ID IS NULL;
6627 
6628     Debug_Conc_Log( 'Resolve_SSXref_on_Data_load - Done populating organization_id' );
6629 
6630     Debug_Conc_Log( 'Resolve_SSXref_on_Data_load - Resolving data_level_name' );
6631 
6632     UPDATE EGO_ITEM_ASSOCIATIONS_INTF EIAI
6633     SET DATA_LEVEL_ID = (SELECT DATA_LEVEL_ID
6634                          FROM EGO_DATA_LEVEL_B EDLB
6635                          WHERE EDLB.APPLICATION_ID = 431
6636                            AND EDLB.ATTR_GROUP_TYPE = 'EGO_ITEMMGMT_GROUP'
6637                            AND EDLB.DATA_LEVEL_NAME = EIAI.DATA_LEVEL_NAME
6638                         )
6639     WHERE BATCH_ID = p_data_set_id
6640       AND (PROCESS_FLAG IS NULL OR PROCESS_FLAG IN (0, 1))
6641       AND DATA_LEVEL_ID IS NULL
6642       AND DATA_LEVEL_NAME IS NOT NULL;
6643 
6644 
6645     UPDATE EGO_ITM_USR_ATTR_INTRFC uai
6646        SET uai.DATA_LEVEL_ID = (SELECT edlb.DATA_LEVEL_ID
6647                                 FROM EGO_DATA_LEVEL_B edlb
6648                                 WHERE edlb.DATA_LEVEL_NAME = uai.DATA_LEVEL_NAME
6649                                   AND edlb.APPLICATION_ID  = 431
6650                                   AND edlb.ATTR_GROUP_TYPE = NVL(uai.ATTR_GROUP_TYPE, 'EGO_ITEMMGMT_GROUP')
6651                                )
6652     WHERE uai.DATA_SET_ID     = p_data_set_id
6653       AND (uai.PROCESS_STATUS IS NULL OR uai.PROCESS_STATUS IN (0, 1))
6654       AND uai.DATA_LEVEL_NAME IS NOT NULL
6655       AND uai.DATA_LEVEL_ID   IS NULL;
6656 
6657     UPDATE EGO_ITM_USR_ATTR_INTRFC uai
6658        SET uai.DATA_LEVEL_ID = (SELECT edlv.DATA_LEVEL_ID
6659                                 FROM EGO_DATA_LEVEL_VL edlv
6660                                 WHERE edlv.USER_DATA_LEVEL_NAME = uai.USER_DATA_LEVEL_NAME
6661                                   AND edlv.APPLICATION_ID       = 431
6662                                   AND edlv.ATTR_GROUP_TYPE      = NVL(uai.ATTR_GROUP_TYPE, 'EGO_ITEMMGMT_GROUP')
6663                                )
6664     WHERE uai.DATA_SET_ID          = p_data_set_id
6665       AND (uai.PROCESS_STATUS  IS NULL OR uai.PROCESS_STATUS IN (0, 1) )
6666       AND uai.USER_DATA_LEVEL_NAME IS NOT NULL
6667       AND uai.DATA_LEVEL_NAME      IS NULL
6668       AND uai.DATA_LEVEL_ID        IS NULL;
6669 
6670     -----------------------------------------------------------
6671     -- If all data level columns are null, then check if the --
6672     -- attribute group is associated at only one level, then --
6673     -- put that data level id here.                          --
6674     -----------------------------------------------------------
6675     UPDATE EGO_ITM_USR_ATTR_INTRFC uai
6676        SET DATA_LEVEL_ID = (SELECT DATA_LEVEL_ID
6677                             FROM EGO_ATTR_GROUP_DL eagd, EGO_FND_DSC_FLX_CTX_EXT ag_ext
6678                             WHERE eagd.ATTR_GROUP_ID                   = ag_ext.ATTR_GROUP_ID
6679                               AND ag_ext.APPLICATION_ID                = 431
6680                               AND ag_ext.DESCRIPTIVE_FLEXFIELD_NAME    = NVL(uai.ATTR_GROUP_TYPE, 'EGO_ITEMMGMT_GROUP')
6681                               AND ag_ext.DESCRIPTIVE_FLEX_CONTEXT_CODE = uai.ATTR_GROUP_INT_NAME
6682                            )
6683     WHERE uai.DATA_SET_ID          = p_data_set_id
6684       AND (uai.PROCESS_STATUS  IS NULL OR uai.PROCESS_STATUS IN (0, 1) )
6685       AND uai.DATA_LEVEL_ID        IS NULL
6686       AND uai.DATA_LEVEL_NAME      IS NULL
6687       AND uai.USER_DATA_LEVEL_NAME IS NULL
6688       AND (SELECT COUNT(*)
6689            FROM EGO_ATTR_GROUP_DL eagd, EGO_FND_DSC_FLX_CTX_EXT ag_ext
6690            WHERE eagd.ATTR_GROUP_ID                   = ag_ext.ATTR_GROUP_ID
6691              AND ag_ext.APPLICATION_ID                = 431
6692              AND ag_ext.DESCRIPTIVE_FLEXFIELD_NAME    = NVL(uai.ATTR_GROUP_TYPE, 'EGO_ITEMMGMT_GROUP')
6693              AND ag_ext.DESCRIPTIVE_FLEX_CONTEXT_CODE = uai.ATTR_GROUP_INT_NAME
6694           ) = 1;
6695 
6696 
6697     Debug_Conc_Log( 'Resolve_SSXref_on_Data_load - Done Resolving data_level_name' );
6698 
6699     UPDATE EGO_ITEM_ASSOCIATIONS_INTF eiai
6700     SET PK1_VALUE = ( SELECT VENDOR_ID
6701                       FROM AP_SUPPLIERS aas
6702                       WHERE aas.SEGMENT1 = eiai.SUPPLIER_NUMBER
6703                       AND NVL(aas.end_date_active,SYSDATE+1) > SYSDATE  --bug11072046
6704                     )
6705     WHERE eiai.BATCH_ID        = p_data_set_id
6706       AND (eiai.PROCESS_FLAG   IS NULL OR eiai.PROCESS_FLAG IN (0, 1) )
6707       AND eiai.PK1_VALUE       IS NULL
6708       AND eiai.SUPPLIER_NUMBER IS NOT NULL;
6709 
6710     UPDATE EGO_ITEM_ASSOCIATIONS_INTF eiai
6711     SET PK1_VALUE = ( SELECT VENDOR_ID
6712                       FROM AP_SUPPLIERS aas
6713                       WHERE aas.VENDOR_NAME = eiai.SUPPLIER_NAME
6714                       AND NVL(aas.end_date_active,SYSDATE+1) > SYSDATE  --bug11072046
6715                     )
6716     WHERE eiai.BATCH_ID        = p_data_set_id
6717       AND (eiai.PROCESS_FLAG   IS NULL OR eiai.PROCESS_FLAG IN (0, 1) )
6718       AND eiai.PK1_VALUE       IS NULL
6719       AND eiai.SUPPLIER_NAME   IS NOT NULL
6720       AND eiai.SUPPLIER_NUMBER IS NULL;
6721 
6722     UPDATE EGO_ITEM_ASSOCIATIONS_INTF eiai
6723     SET PK2_VALUE = ( SELECT VENDOR_SITE_ID
6724                       FROM AP_SUPPLIER_SITES_ALL asa
6725                       WHERE asa.VENDOR_ID        = eiai.PK1_VALUE
6726                         AND asa.VENDOR_SITE_CODE = eiai.SUPPLIER_SITE_NAME
6727                         AND asa.ORG_ID           = FND_PROFILE.Value('ORG_ID')
6728                         and nvl(asa.inactive_date,SYSDATE + 1) >SYSDATE    --bug11072046
6729                     )
6730     WHERE eiai.BATCH_ID           = p_data_set_id
6731       AND (eiai.PROCESS_FLAG      IS NULL OR eiai.PROCESS_FLAG IN (0, 1) )
6732       AND eiai.PK2_VALUE          IS NULL
6733       AND eiai.SUPPLIER_SITE_NAME IS NOT NULL;
6734 
6735     Debug_Conc_Log( 'Resolve_SSXref_on_Data_load - Done Resolving PK Values in Intersection Interface table' );
6736 
6737     UPDATE MTL_SYSTEM_ITEMS_INTERFACE MSII
6738     SET STYLE_ITEM_ID = (SELECT MSIK.INVENTORY_ITEM_ID
6739                          FROM MTL_SYSTEM_ITEMS_KFV MSIK
6740                          WHERE MSIK.CONCATENATED_SEGMENTS = MSII.STYLE_ITEM_NUMBER
6741                            AND MSIK.ORGANIZATION_ID = MSII.ORGANIZATION_ID
6742                         )
6743     WHERE SET_PROCESS_ID = p_data_set_id
6744       AND STYLE_ITEM_NUMBER IS NOT NULL
6745       AND STYLE_ITEM_ID IS NULL
6746       AND STYLE_ITEM_FLAG = 'N'
6747       AND (PROCESS_FLAG IS NULL OR PROCESS_FLAG IN (0, 1)) ;
6748 
6749     Debug_Conc_Log( 'Resolve_SSXref_on_Data_load - Done Resolving Style Item Id' );
6750 
6751     IF l_ss_id = get_pdh_source_system_id() THEN
6752         Debug_Conc_Log( 'Resolve_SSXref_on_Data_load - PDH batch, update item_number if inventory_item_id is populated' );
6753         -- if user does know the inventory_item_id, use it to overwrite
6754         -- item_number
6755         -- so in the imported tab, we can join to the child entities by item_number alone
6756         UPDATE MTL_SYSTEM_ITEMS_INTERFACE MSII
6757         SET item_number = (SELECT CONCATENATED_SEGMENTS
6758                            FROM MTL_SYSTEM_ITEMS_KFV
6759                            WHERE INVENTORY_ITEM_ID = MSII.INVENTORY_ITEM_ID
6760                                AND ORGANIZATION_ID = MSII.ORGANIZATION_ID)
6761         WHERE SET_PROCESS_ID = p_data_set_id
6762             AND PROCESS_FLAG = 1
6763             AND ITEM_NUMBER IS NULL
6764             AND INVENTORY_ITEM_ID IS NOT NULL;
6765 
6766         UPDATE MTL_ITEM_REVISIONS_INTERFACE MIRI
6767         SET item_number = (SELECT CONCATENATED_SEGMENTS
6768                            FROM MTL_SYSTEM_ITEMS_KFV
6769                            WHERE INVENTORY_ITEM_ID = MIRI.INVENTORY_ITEM_ID
6770                                AND ORGANIZATION_ID = MIRI.ORGANIZATION_ID)
6771         WHERE SET_PROCESS_ID = p_data_set_id
6772             AND PROCESS_FLAG = 1
6773             AND ITEM_NUMBER IS NULL
6774             AND INVENTORY_ITEM_ID IS NOT NULL;
6775 
6776         UPDATE MTL_ITEM_CATEGORIES_INTERFACE MICI
6777         SET item_number = (SELECT CONCATENATED_SEGMENTS
6778                            FROM MTL_SYSTEM_ITEMS_KFV
6779                            WHERE INVENTORY_ITEM_ID = MICI.INVENTORY_ITEM_ID
6780                                AND ORGANIZATION_ID = MICI.ORGANIZATION_ID)
6781         WHERE SET_PROCESS_ID = p_data_set_id
6782             AND PROCESS_FLAG = 1
6783             AND ITEM_NUMBER IS NULL
6784           AND INVENTORY_ITEM_ID IS NOT NULL;
6785 
6786         UPDATE EGO_ITM_USR_ATTR_INTRFC EIUAI
6787         SET item_number = (SELECT CONCATENATED_SEGMENTS
6788                            FROM MTL_SYSTEM_ITEMS_KFV
6789                            WHERE INVENTORY_ITEM_ID = EIUAI.INVENTORY_ITEM_ID
6790                                AND ORGANIZATION_ID = EIUAI.ORGANIZATION_ID)
6791         WHERE DATA_SET_ID = p_data_set_id
6792             AND PROCESS_STATUS = 1
6793             AND ITEM_NUMBER IS NULL
6794             AND INVENTORY_ITEM_ID IS NOT NULL;
6795 
6796         UPDATE EGO_AML_INTF EAI
6797         SET item_number = (SELECT CONCATENATED_SEGMENTS
6798                            FROM MTL_SYSTEM_ITEMS_KFV
6799                            WHERE INVENTORY_ITEM_ID = EAI.INVENTORY_ITEM_ID
6800                                AND ORGANIZATION_ID = EAI.ORGANIZATION_ID)
6801         WHERE DATA_SET_ID = p_data_set_id
6802             AND PROCESS_FLAG = 1
6803             AND ITEM_NUMBER IS NULL
6804             AND INVENTORY_ITEM_ID IS NOT NULL;
6805 
6806         UPDATE EGO_ITEM_PEOPLE_INTF MIPI
6807         SET item_number = (SELECT CONCATENATED_SEGMENTS
6808                            FROM MTL_SYSTEM_ITEMS_KFV
6809                            WHERE INVENTORY_ITEM_ID = MIPI.INVENTORY_ITEM_ID
6810                                AND ORGANIZATION_ID = MIPI.ORGANIZATION_ID)
6811         WHERE DATA_SET_ID = p_data_set_id
6812             AND PROCESS_STATUS = 1
6813             AND ITEM_NUMBER IS NULL
6814             AND INVENTORY_ITEM_ID IS NOT NULL;
6815 
6816         UPDATE EGO_ITEM_ASSOCIATIONS_INTF EIAI
6817         SET item_number = (SELECT CONCATENATED_SEGMENTS
6818                            FROM MTL_SYSTEM_ITEMS_KFV
6819                            WHERE INVENTORY_ITEM_ID = EIAI.INVENTORY_ITEM_ID
6820                                AND ORGANIZATION_ID = EIAI.ORGANIZATION_ID)
6821         WHERE BATCH_ID = p_data_set_id
6822             AND PROCESS_FLAG = 1
6823             AND ITEM_NUMBER IS NULL
6824             AND INVENTORY_ITEM_ID IS NOT NULL;
6825 
6826         Debug_Conc_Log( 'Resolve_SSXref_on_Data_load - PDH batch, done updating item_number if inventory_item_id is populated' );
6827 
6828         -- parse segments into item_number if item_number is null
6829         -- so that we can join to the child entities by item number alone
6830         PARSE_ITEM_SEGMENTS(p_data_set_id, l_org_id, FND_API.G_TRUE);
6831         Debug_Conc_Log( 'Resolve_SSXref_on_Data_load - PDH batch, done parsing item segments' );
6832 
6833         -- insert fake records ...
6834         l_insert_date := SYSDATE;
6835         -- ... 1. for attributes (no child orgs)
6836         INSERT INTO
6837             MTL_SYSTEM_ITEMS_INTERFACE MSII
6838             ( transaction_type, process_flag, set_process_id, organization_id, source_system_id
6839             , confirm_status, inventory_item_id, item_number
6840             , CREATION_DATE, LAST_UPDATE_DATE, CREATED_BY, LAST_UPDATED_BY, LAST_UPDATE_LOGIN
6841             , ITEM_CATALOG_GROUP_ID )
6842             SELECT G_TRANS_TYPE_SYNC, 1, p_data_set_id, EIUAI.organization_id, l_ss_id
6843                , G_FAKE_CONF_STATUS_FLAG
6844                , MAX( EIUAI.inventory_item_id ) KEEP ( DENSE_RANK FIRST ORDER BY INVENTORY_ITEM_ID NULLS LAST, LAST_UPDATE_DATE NULLS LAST )
6845                , EIUAI.item_number
6846                , l_insert_date -- CREATION_DATE
6847                , l_insert_date -- LAST_UPDATE_DATE
6848                , MAX( EIUAI.created_by ) KEEP ( DENSE_RANK FIRST ORDER BY INVENTORY_ITEM_ID NULLS LAST, LAST_UPDATE_DATE NULLS LAST ) CREATED_BY
6849                , MAX( EIUAI.last_updated_by ) KEEP ( DENSE_RANK FIRST ORDER BY INVENTORY_ITEM_ID NULLS LAST, LAST_UPDATE_DATE NULLS LAST ) UPDATED_BY
6850                , MAX( EIUAI.last_update_login ) KEEP ( DENSE_RANK FIRST ORDER BY INVENTORY_ITEM_ID NULLS LAST, LAST_UPDATE_DATE NULLS LAST ) LAST_UPDATE_LOGIN
6851                , 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
6852             FROM EGO_ITM_USR_ATTR_INTRFC    EIUAI
6853 --             , MTL_PARAMETERS             MP
6854             WHERE
6855                 data_set_id = p_data_set_id
6856             AND process_status = 1
6857             AND EIUAI.organization_id = l_org_id
6858 --          AND EIUAI.organization_id = MP.organization_id
6859 --          AND MP.master_organization_id = l_org_id
6860             AND NOT EXISTS
6861                 (
6862                 select null from mtl_system_items_interface
6863                 where set_process_id     = EIUAI.data_set_id
6864                   and item_number        = EIUAI.item_number
6865                   and process_flag       = EIUAI.process_status
6866                   and organization_id    = l_org_id
6867                 )
6868             GROUP BY EIUAI.ITEM_NUMBER, EIUAI.organization_id;
6869             -- using GROUP BY rather than distinct for performance reasons (emulating merge code)
6870             Debug_Conc_Log( 'Resolve_SSXref_on_Data_load - PDH batch, parent rows inserted for UDAs: ' || SQL%ROWCOUNT );
6871         -- ... 2. for AMLs (no child orgs)
6872         INSERT INTO
6873             MTL_SYSTEM_ITEMS_INTERFACE MSII
6874             ( transaction_type, process_flag, set_process_id, organization_id, source_system_id
6875             , confirm_status, inventory_item_id, item_number
6876             , CREATION_DATE, LAST_UPDATE_DATE, CREATED_BY, LAST_UPDATED_BY, LAST_UPDATE_LOGIN )
6877             SELECT G_TRANS_TYPE_SYNC, 1, p_data_set_id, l_org_id, l_ss_id
6878                , G_FAKE_CONF_STATUS_FLAG
6879                , MAX( EAI.inventory_item_id ) KEEP ( DENSE_RANK FIRST ORDER BY INVENTORY_ITEM_ID NULLS LAST, LAST_UPDATE_DATE NULLS LAST )
6880                , EAI.item_number
6881                , l_insert_date -- CREATION_DATE
6882                , l_insert_date -- LAST_UPDATE_DATE
6883                , MAX( EAI.created_by ) KEEP ( DENSE_RANK FIRST ORDER BY INVENTORY_ITEM_ID NULLS LAST, LAST_UPDATE_DATE NULLS LAST ) CREATED_BY
6884                , MAX( EAI.last_updated_by ) KEEP ( DENSE_RANK FIRST ORDER BY INVENTORY_ITEM_ID NULLS LAST, LAST_UPDATE_DATE NULLS LAST ) UPDATED_BY
6885                , MAX( EAI.last_update_login ) KEEP ( DENSE_RANK FIRST ORDER BY INVENTORY_ITEM_ID NULLS LAST, LAST_UPDATE_DATE NULLS LAST ) LAST_UPDATE_LOGIN
6886             FROM EGO_AML_INTF    EAI
6887 --             , MTL_PARAMETERS             MP
6888             WHERE
6889                 EAI.data_set_id = p_data_set_id
6890             AND EAI.process_flag = 1
6891             AND EAI.organization_id = l_org_id
6892 --          AND EAI.organization_id = MP.organization_id
6893 --          AND MP.master_organization_id = l_org_id
6894             AND NOT EXISTS
6895                 (
6896                 select null from mtl_system_items_interface
6897                 where set_process_id     = EAI.data_set_id
6898                   and item_number        = EAI.item_number
6899                   and process_flag       = EAI.process_flag
6900                   and organization_id    = l_org_id
6901                 )
6902             GROUP BY EAI.ITEM_NUMBER;
6903             -- using GROUP BY rather than distinct for performance reasons (emulating merge code)
6904         Debug_Conc_Log( 'Resolve_SSXref_on_Data_load - PDH batch, parent rows inserted for AMLs: ' || SQL%ROWCOUNT );
6905 
6906          --R12C: Inseting Fake Row into MSII for orphan row in EGO_ITEM_ASSOCIATIONS_INTF.
6907         INSERT INTO
6908             MTL_SYSTEM_ITEMS_INTERFACE MSII
6909             ( transaction_type, process_flag, set_process_id, organization_id, source_system_id
6910             , confirm_status, inventory_item_id, item_number
6911             , CREATION_DATE, LAST_UPDATE_DATE, CREATED_BY, LAST_UPDATED_BY, LAST_UPDATE_LOGIN  )
6912             SELECT G_TRANS_TYPE_SYNC, 1, p_data_set_id, EIAI.organization_id, l_ss_id
6913                , G_FAKE_CONF_STATUS_FLAG
6914                , MAX( EIAI.inventory_item_id ) KEEP ( DENSE_RANK FIRST ORDER BY INVENTORY_ITEM_ID NULLS LAST, LAST_UPDATE_DATE NULLS LAST )
6915                , EIAI.item_number
6916                , l_insert_date -- CREATION_DATE
6917                , l_insert_date -- LAST_UPDATE_DATE
6918                , MAX( EIAI.created_by ) KEEP ( DENSE_RANK FIRST ORDER BY INVENTORY_ITEM_ID NULLS LAST, LAST_UPDATE_DATE NULLS LAST ) CREATED_BY
6919                , MAX( EIAI.last_updated_by ) KEEP ( DENSE_RANK FIRST ORDER BY INVENTORY_ITEM_ID NULLS LAST, LAST_UPDATE_DATE NULLS LAST ) UPDATED_BY
6920                , MAX( EIAI.last_update_login ) KEEP ( DENSE_RANK FIRST ORDER BY INVENTORY_ITEM_ID NULLS LAST, LAST_UPDATE_DATE NULLS LAST ) LAST_UPDATE_LOGIN
6921             FROM EGO_ITEM_ASSOCIATIONS_INTF    EIAI
6922             WHERE
6923                 batch_id = p_data_set_id
6924             AND process_flag = 1
6925             AND EIAI.organization_id = l_org_id
6926             AND NOT EXISTS
6927                 (
6928                 select null from mtl_system_items_interface
6929                 where set_process_id     = EIAI.batch_id
6930                   and item_number        = EIAI.item_number
6931                   and process_flag       = EIAI.process_flag
6932                   and organization_id    = l_org_id
6933                 )
6934             GROUP BY EIAI.ITEM_NUMBER, EIAI.organization_id;
6935         Debug_Conc_Log( 'Resolve_SSXref_on_Data_load - PDH batch, parent rows inserted for ASSOCIATIONS: ' || SQL%ROWCOUNT );
6936 
6937         --R12C: Insertion of Fake row into MSII for a orphan row in MTL_ITEM_CATEGORIES_INTERFACE
6938         INSERT INTO
6939             MTL_SYSTEM_ITEMS_INTERFACE MSII
6940             ( transaction_type, process_flag, set_process_id, organization_id, source_system_id
6941             , confirm_status, inventory_item_id, item_number
6942             , CREATION_DATE, LAST_UPDATE_DATE, CREATED_BY, LAST_UPDATED_BY, LAST_UPDATE_LOGIN  )
6943             SELECT G_TRANS_TYPE_SYNC, 1, p_data_set_id, MICI.organization_id, l_ss_id
6944                , G_FAKE_CONF_STATUS_FLAG
6945                , MAX( MICI.inventory_item_id ) KEEP ( DENSE_RANK FIRST ORDER BY INVENTORY_ITEM_ID NULLS LAST, LAST_UPDATE_DATE NULLS LAST )
6946                , MICI.item_number
6947                , l_insert_date -- CREATION_DATE
6948                , l_insert_date -- LAST_UPDATE_DATE
6949                , MAX( MICI.created_by ) KEEP ( DENSE_RANK FIRST ORDER BY INVENTORY_ITEM_ID NULLS LAST, LAST_UPDATE_DATE NULLS LAST ) CREATED_BY
6950                , MAX( MICI.last_updated_by ) KEEP ( DENSE_RANK FIRST ORDER BY INVENTORY_ITEM_ID NULLS LAST, LAST_UPDATE_DATE NULLS LAST ) UPDATED_BY
6951                , MAX( MICI.last_update_login ) KEEP ( DENSE_RANK FIRST ORDER BY INVENTORY_ITEM_ID NULLS LAST, LAST_UPDATE_DATE NULLS LAST ) LAST_UPDATE_LOGIN
6952             FROM MTL_ITEM_CATEGORIES_INTERFACE    MICI
6953             WHERE
6954                 set_process_id = p_data_set_id
6955             AND process_flag = 1
6956             AND MICI.organization_id = l_org_id
6957             AND NOT EXISTS
6958                 (
6959                 select null from mtl_system_items_interface
6960                 where set_process_id     = MICI.set_process_id
6961                   and item_number        = MICI.item_number
6962                   and process_flag       = MICI.process_flag
6963                   and organization_id    = l_org_id
6964                 )
6965             GROUP BY MICI.ITEM_NUMBER, MICI.organization_id;
6966         Debug_Conc_Log( 'Resolve_SSXref_on_Data_load - PDH batch, parent rows inserted for CATEGORY ASSIGNMENT rows: ' || SQL%ROWCOUNT );
6967         MERGE_BATCH(  p_batch_id        => p_data_set_id
6968                    ,  p_master_org_id   => l_org_id
6969                    ,  p_is_pdh_batch    => FND_API.G_TRUE
6970                    ,  p_commit          => FND_API.G_FALSE
6971                    );
6972         Debug_Conc_Log( 'Resolve_SSXref_on_Data_load - PDH batch, done merging batch' );
6973 
6974         -- resolve SYNC transaction_type into UPDATE or CREATE
6975         -- this is needed in the Confirmed Tab for a PDH batch to partition
6976         -- items into 'Matched' and 'New'
6977         UPDATE_ITEM_SYNC_RECORDS_PDH(p_data_set_id, l_org_id);
6978         Debug_Conc_Log( 'Resolve_SSXref_on_Data_load - PDH batch, done updating item sync records' );
6979 
6980         /* Bug 5283663: CREATE rows can have the FAKE confirm status,
6981            since those rows are moved to process flag 3 in resolve_child_entities;
6982            before IOI has a chance to process them
6983         UPDATE MTL_SYSTEM_ITEMS_INTERFACE MSII
6984             SET CONFIRM_STATUS  = NULL
6985             WHERE
6986                 set_process_id  = p_data_set_id
6987             AND process_flag    = 1
6988             AND organization_id = l_org_id
6989             AND UPPER( transaction_type ) = G_TRANS_TYPE_CREATE
6990             AND confirm_status = G_FAKE_CONF_STATUS_FLAG;
6991         */
6992 
6993         -- that's it
6994         IF FND_API.G_TRUE = p_commit THEN
6995            COMMIT;
6996            Debug_Conc_Log( 'Resolve_SSXref_on_Data_load - PDH batch, committed' );
6997         END IF;
6998 
6999         RETURN;
7000     END IF;
7001 
7002     Debug_Conc_Log( 'Resolve_SSXref_on_Data_load - Source System batch, setting process_flag if null' );
7003 
7004     -- we need to look at all these columns
7005     -- Filter Conditions: set_process_id (batch), process_flag (0 -- unprocessed), organization_id (master org), process_flag (null)
7006     -- Source System Item Primary Keys: source_system_id, source_system_reference
7007     -- PDH Item Primary Key Possibilities: inventory_item_id, item_number, segment1, segment2, ... segment20
7008     -- User Directive: transaction_type
7009 
7010     -- Normalize the PROCESS_FLAG if it is null
7011     UPDATE MTL_SYSTEM_ITEMS_INTERFACE
7012     SET PROCESS_FLAG = 0
7013     WHERE SET_PROCESS_ID = p_data_set_id AND
7014         PROCESS_FLAG IS NULL;
7015 
7016     UPDATE MTL_ITEM_REVISIONS_INTERFACE
7017     SET PROCESS_FLAG = 0
7018     WHERE SET_PROCESS_ID = p_data_set_id AND
7019         PROCESS_FLAG IS NULL;
7020 
7021     UPDATE MTL_ITEM_CATEGORIES_INTERFACE
7022     SET PROCESS_FLAG = 0
7023     WHERE SET_PROCESS_ID = p_data_set_id AND
7024         PROCESS_FLAG IS NULL;
7025 
7026     UPDATE EGO_ITM_USR_ATTR_INTRFC
7027     SET PROCESS_STATUS = 0
7028     WHERE DATA_SET_ID = p_data_set_id AND
7029         PROCESS_STATUS IS NULL;
7030 
7031     UPDATE EGO_ITEM_PEOPLE_INTF
7032     SET PROCESS_STATUS = 0
7033     WHERE DATA_SET_ID = p_data_set_id AND
7034         PROCESS_STATUS IS NULL;
7035 
7036     UPDATE EGO_AML_INTF
7037     SET PROCESS_FLAG = 0
7038     WHERE DATA_SET_ID = p_data_set_id AND
7039         PROCESS_FLAG IS NULL;
7040 
7041     UPDATE EGO_ITEM_ASSOCIATIONS_INTF
7042     SET PROCESS_FLAG = 0
7043     WHERE BATCH_ID = p_data_set_id AND
7044         PROCESS_FLAG IS NULL;
7045 
7046     Debug_Conc_Log( 'Resolve_SSXref_on_Data_load - Source System batch, done setting process_flag if null' );
7047 
7048       IF l_enabled_for_data_pool = 'Y' THEN
7049 
7050      EGO_IMPORT_UTIL_PVT.check_for_duplicates(  p_batch_id        => p_data_set_id
7051                ,  p_commit          => FND_API.G_FALSE
7052                  );
7053       Debug_Conc_Log( 'Done checking duplicates for a data_pool batch ' );
7054     ELSE
7055          Debug_Conc_Log( 'Duplicates checked only for a data_pool entabled batch' );
7056     END IF;
7057 
7058     -- insert fake records ...
7059     l_insert_date := SYSDATE;
7060     -- ... 1. for attributes (no child orgs)
7061     INSERT INTO
7062         MTL_SYSTEM_ITEMS_INTERFACE MSII
7063         ( transaction_type, process_flag, set_process_id, organization_id, source_system_id, source_system_reference, bundle_id
7064         , confirm_status, inventory_item_id, item_number
7065         , CREATION_DATE, LAST_UPDATE_DATE, CREATED_BY, LAST_UPDATED_BY, LAST_UPDATE_LOGIN
7066         , ITEM_CATALOG_GROUP_ID )
7067         SELECT G_TRANS_TYPE_SYNC, 0, p_data_set_id, EIUAI.organization_id
7068            , EIUAI.source_system_id, EIUAI.source_system_reference, EIUAI.bundle_id
7069            , G_FAKE_CONF_STATUS_FLAG
7070            , 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
7071            , 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
7072            , l_insert_date -- CREATION_DATE
7073            , l_insert_date -- LAST_UPDATE_DATE
7074            , 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
7075            , 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
7076            , 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
7077            , 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
7078         FROM EGO_ITM_USR_ATTR_INTRFC    EIUAI
7079 --         , MTL_PARAMETERS             MP
7080         WHERE
7081             data_set_id = p_data_set_id
7082         AND process_status = 0
7083         AND EIUAI.organization_id = l_org_id
7084 --      AND EIUAI.organization_id = MP.organization_id
7085 --      AND MP.master_organization_id = l_org_id
7086         AND source_system_id = l_ss_id
7087         AND source_system_reference IS NOT NULL
7088         AND NOT EXISTS
7089             (
7090             select null from mtl_system_items_interface
7091             where set_process_id          = EIUAI.data_set_id
7092               and source_system_id        = EIUAI.source_system_id
7093               and source_system_reference = EIUAI.source_system_reference
7094               and process_flag            = EIUAI.process_status
7095               and organization_id         = l_org_id
7096             )
7097         GROUP BY EIUAI.source_system_id, EIUAI.source_system_reference, EIUAI.organization_id, EIUAI.BUNDLE_ID;
7098         -- using GROUP BY rather than distinct for performance reasons (no load on merge code)
7099     Debug_Conc_Log( 'Resolve_SSXref_on_Data_load - Source System batch, parent rows inserted for UDAs: ' || SQL%ROWCOUNT );
7100     -- ... 2. for AMLs (no child orgs)
7101     INSERT INTO
7102         MTL_SYSTEM_ITEMS_INTERFACE MSII
7103         ( transaction_type, process_flag, set_process_id, organization_id, source_system_id, source_system_reference
7104         , source_system_reference_desc, confirm_status, inventory_item_id, item_number
7105         , CREATION_DATE, LAST_UPDATE_DATE, CREATED_BY, LAST_UPDATED_BY, LAST_UPDATE_LOGIN )
7106         SELECT G_TRANS_TYPE_SYNC, 0, p_data_set_id, l_org_id
7107            , EAI.source_system_id, EAI.source_system_reference
7108            , 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
7109            , G_FAKE_CONF_STATUS_FLAG
7110            , 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
7111            , 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
7112            , l_insert_date -- CREATION_DATE
7113            , l_insert_date -- LAST_UPDATE_DATE
7114            , 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
7115            , 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
7116            , 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
7117         FROM EGO_AML_INTF    EAI
7118 --         , MTL_PARAMETERS             MP
7119         WHERE
7120             EAI.data_set_id = p_data_set_id
7121         AND EAI.process_flag = 0
7122         AND EAI.organization_id = l_org_id
7123 --      AND EAI.organization_id = MP.organization_id
7124 --      AND MP.master_organization_id = l_org_id
7125         AND source_system_id = l_ss_id
7126         AND source_system_reference IS NOT NULL
7127         AND NOT EXISTS
7128             (
7129             select null from mtl_system_items_interface
7130             where set_process_id          = EAI.data_set_id
7131               and source_system_id        = EAI.source_system_id
7132               and source_system_reference = EAI.source_system_reference
7133               and process_flag            = EAI.process_flag
7134               and organization_id         = l_org_id
7135             )
7136         GROUP BY EAI.source_system_id, EAI.source_system_reference;
7137         -- using GROUP BY rather than distinct for performance reasons (no load on merge code)
7138     Debug_Conc_Log( 'Resolve_SSXref_on_Data_load - Source System batch, parent rows inserted for AMLs: ' || SQL%ROWCOUNT );
7139 
7140     --R12C: Inserting Fake Row (Parent Row in MSII) for Orphan row in EGO_ITEM_ASSOCIATIONS_INTF
7141     INSERT INTO
7142         MTL_SYSTEM_ITEMS_INTERFACE MSII
7143         ( transaction_type, process_flag, set_process_id, organization_id, source_system_id, source_system_reference, bundle_id
7144         ,  confirm_status, inventory_item_id, item_number
7145         , CREATION_DATE, LAST_UPDATE_DATE, CREATED_BY, LAST_UPDATED_BY, LAST_UPDATE_LOGIN )
7146         SELECT G_TRANS_TYPE_SYNC, 0, p_data_set_id, l_org_id
7147            , EIAI.source_system_id, EIAI.source_system_reference, EIAI.bundle_id
7148            , G_FAKE_CONF_STATUS_FLAG
7149            , 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
7150            , 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
7151            , l_insert_date -- CREATION_DATE
7152            , l_insert_date -- LAST_UPDATE_DATE
7153            , 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
7154            , 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
7155            , 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
7156         FROM EGO_ITEM_ASSOCIATIONS_INTF    EIAI
7157         WHERE
7158             EIAI.batch_id = p_data_set_id
7159         AND EIAI.process_flag = 0
7160         AND EIAI.organization_id = l_org_id
7161         AND source_system_id = l_ss_id
7162         AND source_system_reference IS NOT NULL
7163         AND NOT EXISTS
7164             (
7165             select null from mtl_system_items_interface
7166             where set_process_id          = EIAI.batch_id
7167               and source_system_id        = EIAI.source_system_id
7168               and source_system_reference = EIAI.source_system_reference
7169               and process_flag            = EIAI.process_flag
7170               and organization_id         = l_org_id
7171             )
7172         GROUP BY EIAI.source_system_id, EIAI.source_system_reference, EIAI.bundle_id;
7173     Debug_Conc_Log( 'Resolve_SSXref_on_Data_load - Source System batch, parent rows inserted for ASSOCIATIONS: ' || SQL%ROWCOUNT );
7174 
7175 
7176     --R12C: Inserting Fake Row (Parent Row in MSII) for Orphan row in EGO_ITEM_ASSOCIATIONS_INTF
7177     INSERT INTO
7178         MTL_SYSTEM_ITEMS_INTERFACE MSII
7179         ( transaction_type, process_flag, set_process_id, organization_id, source_system_id, source_system_reference, bundle_id
7180         ,  confirm_status, inventory_item_id, item_number
7181         , CREATION_DATE, LAST_UPDATE_DATE, CREATED_BY, LAST_UPDATED_BY, LAST_UPDATE_LOGIN )
7182         SELECT G_TRANS_TYPE_SYNC, 0, p_data_set_id, l_org_id
7183            , MICI.source_system_id, MICI.source_system_reference, MICI.bundle_id
7184            , G_FAKE_CONF_STATUS_FLAG
7185            , 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
7186            , 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
7187            , l_insert_date -- CREATION_DATE
7188            , l_insert_date -- LAST_UPDATE_DATE
7189            , 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
7190            , 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
7191            , 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
7192         FROM MTL_ITEM_CATEGORIES_INTERFACE    MICI
7193         WHERE
7194             MICI.set_process_id = p_data_set_id
7195         AND MICI.process_flag = 0
7196         AND MICI.organization_id = l_org_id
7197         AND source_system_id = l_ss_id
7198         AND source_system_reference IS NOT NULL
7199         AND NOT EXISTS
7200             (
7201             select null from mtl_system_items_interface
7202             where set_process_id          = MICI.set_process_id
7203               and source_system_id        = MICI.source_system_id
7204               and source_system_reference = MICI.source_system_reference
7205               and process_flag            = MICI.process_flag
7206               and organization_id         = l_org_id
7207             )
7208         GROUP BY MICI.source_system_id, MICI.source_system_reference, MICI.bundle_id;
7209     Debug_Conc_Log( 'Resolve_SSXref_on_Data_load - Source System batch, parent rows inserted for CAT Assignments: ' || SQL%ROWCOUNT );
7210     -- R12C: End
7211     -- check for records that need to be marked excluded
7212     UPDATE
7213         MTL_SYSTEM_ITEMS_INTERFACE MSII
7214     SET CONFIRM_STATUS = CASE
7215                          WHEN CONFIRM_STATUS IS NULL THEN G_EXCLUDED
7216                          ELSE G_FAKE_EXCLUDED
7217                          END
7218     WHERE
7219             SET_PROCESS_ID = p_data_set_id
7220         AND (   CONFIRM_STATUS IS NULL
7221             OR  CONFIRM_STATUS = G_FAKE_CONF_STATUS_FLAG ) -- bug5303685: exclusion check for fake rows
7222         AND PROCESS_FLAG = 0
7223         AND ORGANIZATION_ID = l_org_id
7224         AND EXISTS
7225             ( SELECT NULL
7226               FROM  EGO_IMPORT_EXCLUDED_SS_ITEMS
7227               WHERE SOURCE_SYSTEM_ID        = MSII.SOURCE_SYSTEM_ID
7228                 AND SOURCE_SYSTEM_REFERENCE = MSII.SOURCE_SYSTEM_REFERENCE
7229            );
7230 
7231     Debug_Conc_Log( 'Resolve_SSXref_on_Data_load - Source System batch, excluded items: ' || SQL%ROWCOUNT );
7232 
7233     -- parse segments into item number
7234     PARSE_ITEM_SEGMENTS(p_data_set_id, l_org_id);
7235     Debug_Conc_Log( 'Resolve_SSXref_on_Data_load - Source System batch, done parsing item segments' );
7236 
7237     Debug_Conc_Log( 'Resolve_SSXref_on_Data_load - Calling Err_null_ssxref_ssid' );
7238     --Bug 5352143
7239     --This Procedure errors out rows in interface table which have source system reference
7240     --as null or have invalid source system id
7241 
7242     Err_null_ssxref_ssid( p_data_set_id );
7243 
7244     Debug_Conc_Log( 'Resolve_SSXref_on_Data_load - Returned from Err_null_ssxref_ssid' );
7245 
7246     /*
7247      * Note that merging does not need to be aware of fake records,
7248      * since they will either not be created (if there are already records in MSII)
7249      * or will be the oldest records (if the user loads item info for previously fake
7250      * records).
7251      * Either way, the confirm status after merging will be NULL.
7252      */
7253     IF l_enabled_for_data_pool = 'N' THEN
7254       MERGE_BATCH(  p_batch_id        => p_data_set_id
7255                  ,  p_master_org_id   => l_org_id
7256                  ,  p_is_pdh_batch    => FND_API.G_FALSE
7257                  ,  p_commit          => FND_API.G_FALSE
7258                  );
7259       Debug_Conc_Log( 'Resolve_SSXref_on_Data_load - Source System batch, done merging rows' );
7260     ELSE
7261       Debug_Conc_Log( 'Resolve_SSXref_on_Data_load - Not calling merging, because batch is enabled for data pool' );
7262     END IF;
7263 
7264     -- check for records that need to be marked excluded among the merged records
7265     -- (for freshly merged records, confirm_status is NULL)
7266     -- fix for bug 5329665
7267     UPDATE
7268         MTL_SYSTEM_ITEMS_INTERFACE MSII
7269     SET CONFIRM_STATUS = G_EXCLUDED
7270     WHERE
7271             SET_PROCESS_ID = p_data_set_id
7272         AND CONFIRM_STATUS IS NULL
7273         AND PROCESS_FLAG   = 0
7274         AND ORGANIZATION_ID = l_org_id
7275         AND EXISTS
7276             ( SELECT NULL
7277               FROM  EGO_IMPORT_EXCLUDED_SS_ITEMS
7278               WHERE SOURCE_SYSTEM_ID        = MSII.SOURCE_SYSTEM_ID
7279                 AND SOURCE_SYSTEM_REFERENCE = MSII.SOURCE_SYSTEM_REFERENCE
7280             );
7281 
7282 
7283     -- For every unprocessed master record in a batch which has transaction_type value of 'UPDATE' or 'SYNC'
7284     -- if it has no inventory_item_id
7285     --    if it has an item number, parse it into segments.
7286     --    determine if an item exists with these segments in MSI and if true, populate inventory_item_id
7287     -- else it has inventory_item_id
7288     --    determine if an item exists with this inventory_item_id in MSI
7289 
7290     -- if the current transaction_type is 'SYNC'
7291     --    change it to 'UPDATE' if there is a way to resolve it to an existing item.
7292     --    change it to 'CREATE' if there is no way to resolve it to an existing item
7293     UPDATE_ITEM_SYNC_RECORDS(p_data_set_id, l_org_id);
7294     Debug_Conc_Log( 'Resolve_SSXref_on_Data_load - Source System batch, done updating item sync records' );
7295     -- Now the records all have either 'UPDATE' or 'CREATE' as transaction_type
7296     -- UPDATE:
7297     --   1. Specified by user directly.
7298     --      a. with existent inventory_item_id -- GOOD.
7299     --      b. with nonexistent inventory_item_id -- BAD -- try getting it from xref
7300     --      c. with no inventory_item_id, some information on item number or segments
7301     --         c.1. is resolved to existent inventory_item_id -- GOOD
7302     --         c.2. can not resolve to existent inventory_item_id -- inventory_item_id is still null -- try getting it from xref
7303     --      d. with no PDH item key information at all -- inventory_item_id is null -- try getting it from xref
7304     --   2. Resolved from 'SYNC' -- may have inventory_item_id resolved. GOOD
7305     --                           -- may have a null inventory_item_id -- try getting it from xref
7306 
7307     -- CREATE:
7308     --   1. Specified by user directly.
7309     --   2. Resolved from 'SYNC'
7310     --      a. with nonexistent inventory_item_id
7311     --      b. with no inventory_item_id, some information on item number or segments which can not resolve to existent inventory_item_id
7312     --      c. with no PDH item key information at all.
7313     l_party_name := Get_Current_Party_Name;
7314 
7315     -- getting security predicate
7316     EGO_DATA_SECURITY.get_security_predicate(
7317       p_api_version      => 1.0
7318      ,p_function         => 'EGO_VIEW_SS_ITEM_XREFS'
7319      ,p_object_name      => 'EGO_ITEM'
7320      ,p_user_name        => l_party_name
7321      ,p_statement_type   => 'EXISTS'
7322      ,p_pk1_alias        => 'XREF.INVENTORY_ITEM_ID'
7323      ,p_pk2_alias        => l_org_id
7324      ,x_predicate        => l_security_predicate
7325      ,x_return_status    => l_return_status
7326     );
7327 
7328     l_security_predicate := NVL(l_security_predicate, '1=1');
7329 
7330     l_sql := q'#
7331     UPDATE
7332         MTL_SYSTEM_ITEMS_INTERFACE MSII
7333     SET TRANSACTION_TYPE = UPPER( TRANSACTION_TYPE )
7334       , INVENTORY_ITEM_ID =
7335                   (SELECT INVENTORY_ITEM_ID
7336                    FROM MTL_CROSS_REFERENCES_B XREF
7337                    WHERE XREF.CROSS_REFERENCE_TYPE = 'SS_ITEM_XREF' AND
7338                         XREF.CROSS_REFERENCE = MSII.SOURCE_SYSTEM_REFERENCE AND
7339                         XREF.SOURCE_SYSTEM_ID = MSII.SOURCE_SYSTEM_ID AND
7340                         SYSDATE BETWEEN NVL(XREF.START_DATE_ACTIVE, SYSDATE - 1) AND NVL(XREF.END_DATE_ACTIVE, SYSDATE + 1) AND #'
7341                         || l_security_predicate || q'# AND
7342                         ROWNUM < = 1)
7343     WHERE
7344         SET_PROCESS_ID = :p_data_set_id AND
7345         PROCESS_FLAG = 0 AND
7346         ORGANIZATION_ID = :l_org_id AND
7347         (  CONFIRM_STATUS IS NULL
7348         OR CONFIRM_STATUS = '#'||G_FAKE_CONF_STATUS_FLAG||q'#'
7349         )
7350         AND
7351         ( INVENTORY_ITEM_ID IS NULL OR NOT EXISTS
7352           (SELECT 1
7353             FROM MTL_SYSTEM_ITEMS_B
7354            WHERE INVENTORY_ITEM_ID = MSII.INVENTORY_ITEM_ID
7355           ) )
7356         AND UPPER( TRANSACTION_TYPE ) = 'UPDATE' #';
7357 
7358     execute immediate l_sql using p_data_set_id, l_org_id;
7359     Debug_Conc_Log( 'Resolve_SSXref_on_Data_load - Source System batch, resolved xrefs. Rows touched: ' || SQL%ROWCOUNT );
7360     -- determine if import policy applies to a source system item:
7361     -- the revision import policy should not apply if the user has given us a
7362     -- rev code or id in either EGO_ITM_USR_ATTR_INTRFC or MTL_ITEM_REVISIONS_INTERFACE: We set it to 'S' meaning specific.
7363     -- however, if the rev import policy is set to Specific already, we need to verify that
7364     -- the user has given us a rev code or id in either EGO_ITM_USR_ATTR_INTRFC or MTL_ITEM_REVISIONS_INTERFACE.
7365     UPDATE MTL_SYSTEM_ITEMS_INTERFACE MSII
7366     SET REVISION_IMPORT_POLICY =
7367         CASE
7368         WHEN EXISTS -- check the revision interface table
7369             (
7370             SELECT NULL
7371             FROM MTL_ITEM_REVISIONS_INTERFACE
7372             WHERE SET_PROCESS_ID = MSII.SET_PROCESS_ID
7373                 AND SOURCE_SYSTEM_ID = MSII.SOURCE_SYSTEM_ID
7374                 AND SOURCE_SYSTEM_REFERENCE = MSII.SOURCE_SYSTEM_REFERENCE
7375                 AND ORGANIZATION_ID = MSII.ORGANIZATION_ID
7376                 AND PROCESS_FLAG = MSII.PROCESS_FLAG
7377                 AND
7378                 (
7379                     REVISION_ID IS NOT NULL
7380                     OR REVISION IS NOT NULL
7381                 )
7382             )
7383             THEN 'S'
7384         WHEN EXISTS -- check the user attrs interface table
7385             (
7386             SELECT NULL
7387             FROM EGO_ITM_USR_ATTR_INTRFC USR_ATTR
7388             WHERE DATA_SET_ID = MSII.SET_PROCESS_ID
7389                 AND SOURCE_SYSTEM_ID = MSII.SOURCE_SYSTEM_ID
7390                 AND SOURCE_SYSTEM_REFERENCE = MSII.SOURCE_SYSTEM_REFERENCE
7391                 AND ORGANIZATION_ID = MSII.ORGANIZATION_ID
7392                 AND PROCESS_STATUS = MSII.PROCESS_FLAG
7393                 AND
7394                 (
7395                     REVISION_ID IS NOT NULL
7396                     OR REVISION IS NOT NULL
7397                 )
7398             )
7399             THEN 'S'
7400         ELSE NULL
7401         END
7402     WHERE SET_PROCESS_ID = p_data_set_id
7403        AND ORGANIZATION_ID = l_org_id
7404        AND PROCESS_FLAG = 0
7405        AND ( REVISION_IMPORT_POLICY = 'S' OR REVISION_IMPORT_POLICY IS NULL )
7406        --AND CONFIRM_STATUS IS NULL
7407        ;
7408     Debug_Conc_Log( 'Resolve_SSXref_on_Data_load - Source System batch, done resolving item import policy' );
7409 
7410     -- We will also try to harmonize CONFIRM_STATUS, TRANSACTION_TYPE with information the user provides on INVENTORY_ITEMID or
7411     -- ITEM_NUMBER, segments, et.al.
7412     -- CONFIRM_STATUS can have the following values: CN (confirmed new), CC (confirmed xref), CM (confirmed match),
7413     -- US (unconfirmed single match), UM (unconfirmed multiple match), UN (unconfirmed no match), EX (excluded), null.
7414     -- See spec (EGOVIMPS.pls) constants for list of confirm status values.
7415     -- Bug: 5458886 - If batch is cross references only batch, then New Item should not be allowed
7416     UPDATE -- for non-fake rows
7417         MTL_SYSTEM_ITEMS_INTERFACE MSII
7418       SET
7419         CONFIRM_STATUS =
7420         CASE
7421             WHEN UPPER( TRANSACTION_TYPE ) = G_TRANS_TYPE_CREATE AND l_import_xref_only = 'N' THEN G_CONF_NEW
7422             WHEN INVENTORY_ITEM_ID IS NOT NULL THEN G_CONF_XREF -- TRANSACTION_TYPE is 'UPDATE'
7423             ELSE G_UNCONF_NONE_MATCH
7424         END
7425       , TRANSACTION_TYPE = UPPER( TRANSACTION_TYPE )
7426     WHERE
7427         SET_PROCESS_ID = p_data_set_id AND
7428         PROCESS_FLAG = 0 AND
7429         ORGANIZATION_ID = l_org_id AND
7430         CONFIRM_STATUS IS NULL;
7431 
7432     UPDATE -- for fake rows
7433         MTL_SYSTEM_ITEMS_INTERFACE MSII
7434       SET
7435         CONFIRM_STATUS =
7436         CASE
7437             WHEN UPPER( TRANSACTION_TYPE ) = G_TRANS_TYPE_CREATE AND l_import_xref_only = 'N' THEN G_CONF_NEW
7438             WHEN INVENTORY_ITEM_ID IS NOT NULL THEN G_CONF_XREF_FAKE -- TRANSACTION_TYPE is 'UPDATE'
7439             ELSE G_UNCONF_NO_MATCH_FAKE
7440         END
7441       , TRANSACTION_TYPE = UPPER( TRANSACTION_TYPE )
7442     WHERE
7443         SET_PROCESS_ID = p_data_set_id AND
7444         PROCESS_FLAG = 0 AND
7445         ORGANIZATION_ID = l_org_id AND
7446         CONFIRM_STATUS = G_FAKE_CONF_STATUS_FLAG;
7447 
7448     -- update inventory_item_id to make sure their existence makes sense
7449     UPDATE
7450         MTL_SYSTEM_ITEMS_INTERFACE MSII
7451     SET
7452         INVENTORY_ITEM_ID =
7453         CASE
7454             WHEN CONFIRM_STATUS IN ( G_CONF_XREF, G_CONF_MATCH, G_UNCONF_SIGL_MATCH, G_UNCONF_MULT_MATCH
7455                                    , G_CONF_XREF_FAKE, G_CONF_MATCH_FAKE, G_UNCONF_SINGLE_MATCH_FAKE, G_UNCONF_MULTI_MATCH_FAKE )
7456                 THEN INVENTORY_ITEM_ID
7457             -- if it's 'CN', 'UN', 'EX' or NULL, erase
7458             ELSE NULL
7459         END
7460     WHERE
7461         SET_PROCESS_ID = p_data_set_id AND
7462         PROCESS_FLAG = 0 AND
7463         ORGANIZATION_ID = l_org_id;
7464 
7465     Debug_Conc_Log( 'Resolve_SSXref_on_Data_load - Source System batch, done resolving confirm status' );
7466     -- for all records where item_catalog_group_name is present and item_catalog_group_id is not present
7467     -- update the item_catalog_group_id
7468     UPDATE
7469       MTL_SYSTEM_ITEMS_INTERFACE MSII
7470       SET ITEM_CATALOG_GROUP_ID = (SELECT MICG.ITEM_CATALOG_GROUP_ID
7471                                    FROM MTL_ITEM_CATALOG_GROUPS_B_KFV MICG
7472                                    WHERE MICG.CONCATENATED_SEGMENTS = MSII.ITEM_CATALOG_GROUP_NAME)
7473     WHERE MSII.SET_PROCESS_ID = p_data_set_id
7474       AND MSII.PROCESS_FLAG = 0
7475       AND MSII.ORGANIZATION_ID = l_org_id
7476       AND MSII.CONFIRM_STATUS IN ( G_CONF_NEW, G_CONF_XREF, G_CONF_MATCH, G_CONF_XREF_FAKE, G_CONF_MATCH_FAKE  )
7477       AND MSII.ITEM_CATALOG_GROUP_ID IS NULL
7478       AND MSII.ITEM_CATALOG_GROUP_NAME IS NOT NULL;
7479 
7480     Debug_Conc_Log('Resolve_SSXref_on_Data_load - After Updating Item Catalog Group ID' );
7481 
7482 
7483     IF FND_API.G_TRUE = p_commit THEN
7484        COMMIT;
7485        Debug_Conc_Log( 'Resolve_SSXref_on_Data_load - Source System batch, committed' );
7486     END IF;
7487  EXCEPTION
7488     WHEN NO_DATA_FOUND THEN
7489       IF FND_API.G_TRUE = p_commit THEN
7490           COMMIT;
7491       END IF;
7492       RETURN;
7493 
7494  END Resolve_SSXref_on_Data_load;
7495 
7496 
7497   /*
7498    * This method cleans up the row identifiers before the actual import process starts
7499    * Here we group the rows based on item_number or source_system_reference
7500    */
7501   PROCEDURE CLEAN_UP_UDA_ROW_IDENTS_PRE( p_batch_id             IN NUMBER,
7502                                          p_process_status       IN NUMBER,
7503                                          p_commit               IN VARCHAR2 DEFAULT FND_API.G_TRUE
7504                                        )
7505   IS
7506     CURSOR c_unmerged_rows(cp_ss_id IN NUMBER) IS
7507       SELECT ROW_IDENTIFIER FROM
7508       (
7509         SELECT
7510           ROW_IDENTIFIER,
7511           COUNT( DISTINCT ROW_IDENTIFIER )
7512                      OVER ( PARTITION BY
7513                               NVL(SOURCE_SYSTEM_ID, cp_ss_id),
7514                               NVL(ITEM_NUMBER, SOURCE_SYSTEM_REFERENCE),
7515                               REVISION,/*Bug:11887867*/
7516                               ATTR_GROUP_INT_NAME,
7517                               ATTR_INT_NAME,
7518                               DATA_LEVEL_ID,
7519                               PK1_VALUE,
7520                               PK2_VALUE,
7521                               PK3_VALUE,
7522                               PK4_VALUE,
7523                               PK5_VALUE,
7524                               ORGANIZATION_ID,
7525                               NVL( ATTR_GROUP_TYPE, G_DEFAULT_ATTR_GROUP_TYPE )
7526                           ) cnt
7527         FROM EGO_ITM_USR_ATTR_INTRFC eiuai
7528         WHERE DATA_SET_ID = p_batch_id
7529           AND PROCESS_STATUS = p_process_status
7530           AND (ITEM_NUMBER IS NOT NULL OR SOURCE_SYSTEM_REFERENCE IS NOT NULL)
7531           AND DATA_LEVEL_ID IS NOT NULL
7532           AND EXISTS( SELECT NULL
7533                       FROM EGO_FND_DSC_FLX_CTX_EXT FL_CTX_EXT
7534                       WHERE FL_CTX_EXT.DESCRIPTIVE_FLEXFIELD_NAME    = NVL( eiuai.ATTR_GROUP_TYPE, G_DEFAULT_ATTR_GROUP_TYPE )
7535                         AND FL_CTX_EXT.APPLICATION_ID                = 431
7536                         AND FL_CTX_EXT.DESCRIPTIVE_FLEX_CONTEXT_CODE = eiuai.ATTR_GROUP_INT_NAME
7537                         AND FL_CTX_EXT.MULTI_ROW                     = 'N'
7538                     )
7539       )
7540       WHERE CNT > 1;
7541 
7542 
7543     CURSOR c_intf_recs(cp_ss_id IN NUMBER) IS
7544       SELECT ROW_ID, MAX_ROW_IDENTIFIER FROM
7545       (
7546         SELECT
7547           ROWID ROW_ID,
7548           COUNT( DISTINCT ROW_IDENTIFIER ) OVER ( PARTITION BY
7549                               NVL(SOURCE_SYSTEM_ID, cp_ss_id),
7550                               NVL(ITEM_NUMBER, SOURCE_SYSTEM_REFERENCE),
7551                               REVISION,/*Bug:11887867*/
7552                               ATTR_GROUP_INT_NAME,
7553                               DATA_LEVEL_ID,
7554                               PK1_VALUE,
7555                               PK2_VALUE,
7556                               PK3_VALUE,
7557                               PK4_VALUE,
7558                               PK5_VALUE,
7559                               ORGANIZATION_ID,
7560                               NVL( ATTR_GROUP_TYPE, G_DEFAULT_ATTR_GROUP_TYPE )
7561                           ) cnt,
7562           MAX( ROW_IDENTIFIER ) OVER ( PARTITION BY
7563                                           NVL(SOURCE_SYSTEM_ID, cp_ss_id),
7564                                           NVL(ITEM_NUMBER, SOURCE_SYSTEM_REFERENCE),
7565                                           ATTR_GROUP_INT_NAME,
7566                                           DATA_LEVEL_ID,
7567                                           PK1_VALUE,
7568                                           PK2_VALUE,
7569                                           PK3_VALUE,
7570                                           PK4_VALUE,
7571                                           PK5_VALUE,
7572                                           ORGANIZATION_ID,
7573                                           NVL( ATTR_GROUP_TYPE, G_DEFAULT_ATTR_GROUP_TYPE )
7574                                      ) MAX_ROW_IDENTIFIER
7575         FROM EGO_ITM_USR_ATTR_INTRFC eiuai
7576         WHERE DATA_SET_ID = p_batch_id
7577           AND PROCESS_STATUS = p_process_status
7578           AND (ITEM_NUMBER IS NOT NULL OR SOURCE_SYSTEM_REFERENCE IS NOT NULL)
7579           AND DATA_LEVEL_ID IS NOT NULL
7580           AND EXISTS( SELECT NULL
7581                       FROM EGO_FND_DSC_FLX_CTX_EXT FL_CTX_EXT
7582                       WHERE FL_CTX_EXT.DESCRIPTIVE_FLEXFIELD_NAME    = NVL( eiuai.ATTR_GROUP_TYPE, G_DEFAULT_ATTR_GROUP_TYPE )
7583                         AND FL_CTX_EXT.APPLICATION_ID                = 431
7584                         AND FL_CTX_EXT.DESCRIPTIVE_FLEX_CONTEXT_CODE = eiuai.ATTR_GROUP_INT_NAME
7585                         AND FL_CTX_EXT.MULTI_ROW                     = 'N'
7586                     )
7587       )
7588       WHERE CNT > 1;
7589 
7590     CURSOR c_error_case_cursor IS
7591       SELECT /*+ INDEX(EGO_ITM_USR_ATTR_INTRFC, EGO_ITM_USR_ATTR_INTRFC_N3) */    /* Bug 9678667 */
7592         DISTINCT
7593         ORGANIZATION_ID,
7594         ITEM_NUMBER,
7595         SOURCE_SYSTEM_REFERENCE,
7596         INVENTORY_ITEM_ID,
7597         ATTR_GROUP_INT_NAME,
7598         TRANSACTION_ID
7599      FROM EGO_ITM_USR_ATTR_INTRFC
7600      WHERE DATA_SET_ID = p_batch_id
7601        AND PROCESS_STATUS = 3.475;
7602 
7603     l_msg_text               VARCHAR2(4000);
7604     dumm_status              VARCHAR2(100);
7605     l_user_id                NUMBER := FND_GLOBAL.USER_ID;
7606     l_login_id               NUMBER := FND_GLOBAL.LOGIN_ID;
7607     l_prog_appid             NUMBER := FND_GLOBAL.PROG_APPL_ID;
7608     l_prog_id                NUMBER := FND_GLOBAL.CONC_PROGRAM_ID;
7609     l_request_id             NUMBER := FND_GLOBAL.CONC_REQUEST_ID;
7610     l_err_text               VARCHAR2(4000);
7611 
7612     TYPE ROW_IDS IS TABLE OF ROWID INDEX BY BINARY_INTEGER;
7613     TYPE ROW_IDENTIFIERS IS TABLE OF NUMBER INDEX BY BINARY_INTEGER;
7614     l_unmerged_row_idents  ROW_IDENTIFIERS;
7615 
7616     l_row_ids              ROW_IDS;
7617     l_row_idents           ROW_IDENTIFIERS;
7618     l_ss_id                NUMBER;
7619   BEGIN
7620     Debug_Conc_Log('Clean_Up_UDA_Row_Idents_Pre - Starting');
7621     BEGIN
7622       SELECT SOURCE_SYSTEM_ID INTO l_ss_id
7623       FROM EGO_IMPORT_BATCHES_B
7624       WHERE BATCH_ID = p_batch_id;
7625     EXCEPTION WHEN NO_DATA_FOUND THEN
7626       l_ss_id := GET_PDH_SOURCE_SYSTEM_ID();
7627     END;
7628 
7629     Debug_Conc_Log('Clean_Up_UDA_Row_Idents_Pre - Updating item_number and revision, l_ss_id='||l_ss_id);
7630     UPDATE EGO_ITM_USR_ATTR_INTRFC eiuai
7631     SET ITEM_NUMBER = (SELECT CONCATENATED_SEGMENTS
7632                        FROM MTL_SYSTEM_ITEMS_KFV
7633                        WHERE INVENTORY_ITEM_ID = eiuai.INVENTORY_ITEM_ID
7634                          AND ORGANIZATION_ID = eiuai.ORGANIZATION_ID)
7635     WHERE DATA_SET_ID     = p_batch_id
7636       AND PROCESS_STATUS  = p_process_status
7637       AND INVENTORY_ITEM_ID IS NOT NULL
7638       AND ITEM_NUMBER       IS NULL;
7639 
7640     UPDATE EGO_ITM_USR_ATTR_INTRFC eiuai
7641     SET REVISION = ( SELECT R.REVISION
7642                      FROM MTL_ITEM_REVISIONS_B R
7643                      WHERE R.REVISION_ID = eiuai.REVISION_ID
7644                    )
7645     WHERE DATA_SET_ID     = p_batch_id
7646       AND PROCESS_STATUS  = p_process_status
7647       AND REVISION_ID     IS NOT NULL
7648       AND REVISION        IS NULL;
7649 
7650     Debug_Conc_Log('Clean_Up_UDA_Row_Idents_Pre - Erroring out Unmerged Rows' );
7651     OPEN c_unmerged_rows(l_ss_id);
7652     LOOP
7653       FETCH c_unmerged_rows BULK COLLECT INTO l_unmerged_row_idents LIMIT 1000;
7654       Debug_Conc_Log('Clean_Up_UDA_Row_Idents_Pre - fetched '||l_unmerged_row_idents.Count||' rows, ');
7655 
7656       FORALL idx IN l_unmerged_row_idents.FIRST..l_unmerged_row_idents.LAST
7657         UPDATE EGO_ITM_USR_ATTR_INTRFC
7658           SET process_status = 3.475
7659         WHERE DATA_SET_ID    = p_batch_id
7660           AND PROCESS_STATUS = p_process_status
7661           AND ROW_IDENTIFIER = l_unmerged_row_idents(idx);
7662       Debug_Conc_Log('Clean_Up_UDA_Row_Idents_Pre - Errored - '||SQL%ROWCOUNT||' rows');
7663       EXIT WHEN c_unmerged_rows%NOTFOUND;
7664     END LOOP;
7665     Debug_Conc_Log('Clean_Up_UDA_Row_Idents_Pre - Done Erroring unmerged rows');
7666     CLOSE c_unmerged_rows;
7667 
7668     Debug_Conc_Log('Clean_Up_UDA_Row_Idents_Pre - Logging errors for Errored out unmerged rows');
7669     FOR i IN c_error_case_cursor LOOP
7670       FND_MESSAGE.SET_NAME('EGO', 'EGO_EF_IDENTICAL_ROWS_ERR');
7671       FND_MESSAGE.SET_TOKEN('AG_NAME', i.ATTR_GROUP_INT_NAME);
7672       l_msg_text := FND_MESSAGE.GET;
7673       dumm_status  := INVPUOPI.mtl_log_interface_err(
7674                               i.ORGANIZATION_ID
7675                              ,l_user_id
7676                              ,l_login_id
7677                              ,l_prog_appid
7678                              ,l_prog_id
7679                              ,l_request_id
7680                              ,i.TRANSACTION_ID
7681                              ,l_msg_text
7682                              ,'ATTR_GROUP_INT_NAME'
7683                              ,'EGO_ITM_USR_ATTR_INTRFC'
7684                              ,'INV_IOI_ERR_EF_IDENTICAL_RS01'--bug 11894684, replace INV_IOI_ERR
7685                              ,l_err_text);
7686     END LOOP;
7687     Debug_Conc_Log('Clean_Up_UDA_Row_Idents_Pre - Done Logging errors for Errored out unmerged rows');
7688 
7689     UPDATE /*+ INDEX(EGO_ITM_USR_ATTR_INTRFC, EGO_ITM_USR_ATTR_INTRFC_N3) */    /* Bug 9678667 */
7690       EGO_ITM_USR_ATTR_INTRFC
7691     SET
7692       PROCESS_STATUS = 3,
7693       REQUEST_ID     = l_request_id
7694     WHERE DATA_SET_ID    = p_batch_id
7695       AND PROCESS_STATUS = 3.475;
7696 
7697     Debug_Conc_Log('Clean_Up_UDA_Row_Idents_Pre - Done updating rows to 3');
7698 
7699     -- work around the following case by setting the row identifier to the same value
7700     --   item ids  attr_grp attr row_ident value
7701     --     xyz     item_sr  one  1         x
7702     --     xyz     item_sr  two  2         y
7703     -- UDA loader code throws an error ...
7704     Debug_Conc_Log('Clean_Up_UDA_Row_Idents_Pre - Updating row_identifiers to unique value where' );
7705     OPEN c_intf_recs(l_ss_id);
7706     LOOP
7707       FETCH c_intf_recs BULK COLLECT INTO l_row_ids, l_row_idents LIMIT 1000;
7708       Debug_Conc_Log('Clean_Up_UDA_Row_Idents_Pre - fetched '||l_unmerged_row_idents.Count||' rows, ');
7709 
7710       FORALL idx IN l_row_ids.FIRST..l_row_ids.LAST
7711         UPDATE EGO_ITM_USR_ATTR_INTRFC
7712           SET ROW_IDENTIFIER = l_row_idents(idx)
7713         WHERE ROWID = l_row_ids(idx);
7714       Debug_Conc_Log('Clean_Up_UDA_Row_Idents_Pre - Updated - '||SQL%ROWCOUNT||' rows');
7715       EXIT WHEN c_intf_recs%NOTFOUND;
7716     END LOOP;
7717     Debug_Conc_Log('Clean_Up_UDA_Row_Idents_Pre - Done updating row_identifiers');
7718     CLOSE c_intf_recs;
7719 
7720     IF FND_API.G_TRUE = p_commit THEN
7721       Debug_Conc_Log('Clean_Up_UDA_Row_Idents_Pre COMMITING');
7722       COMMIT;
7723     END IF;
7724   EXCEPTION WHEN OTHERS THEN
7725     IF c_unmerged_rows%ISOPEN THEN
7726       CLOSE c_unmerged_rows;
7727     END IF;
7728     IF c_intf_recs%ISOPEN THEN
7729       CLOSE c_intf_recs;
7730     END IF;
7731     Debug_Conc_Log('Clean_Up_UDA_Row_Idents_Pre Error - '||SQLERRM);
7732     RAISE;
7733   END CLEAN_UP_UDA_ROW_IDENTS_PRE;
7734 
7735 
7736   PROCEDURE CLEAN_UP_UDA_ROW_IDENTS_POST( p_batch_id             IN NUMBER,
7737                                           p_process_status       IN NUMBER,
7738                                           p_commit               IN VARCHAR2 DEFAULT FND_API.G_TRUE
7739                                         )
7740   IS
7741     CURSOR c_unmerged_rows IS
7742       SELECT ROW_IDENTIFIER FROM
7743       (
7744         SELECT
7745           ROW_IDENTIFIER,
7746           COUNT( DISTINCT ROW_IDENTIFIER )
7747                      OVER ( PARTITION BY
7748                               INVENTORY_ITEM_ID,
7749                               REVISION,/*Bug:11887867*/
7750                               ATTR_GROUP_INT_NAME,
7751                               ATTR_INT_NAME,
7752                               DATA_LEVEL_ID,
7753                               PK1_VALUE,
7754                               PK2_VALUE,
7755                               PK3_VALUE,
7756                               PK4_VALUE,
7757                               PK5_VALUE,
7758                               ORGANIZATION_ID,
7759                               NVL( ATTR_GROUP_TYPE, G_DEFAULT_ATTR_GROUP_TYPE )
7760                           ) cnt
7761         FROM EGO_ITM_USR_ATTR_INTRFC eiuai
7762         WHERE DATA_SET_ID = p_batch_id
7763           AND PROCESS_STATUS = p_process_status
7764           AND INVENTORY_ITEM_ID IS NOT NULL
7765           AND DATA_LEVEL_ID IS NOT NULL
7766           AND EXISTS( SELECT NULL
7767                       FROM EGO_FND_DSC_FLX_CTX_EXT FL_CTX_EXT
7768                       WHERE FL_CTX_EXT.DESCRIPTIVE_FLEXFIELD_NAME    = NVL( eiuai.ATTR_GROUP_TYPE, G_DEFAULT_ATTR_GROUP_TYPE )
7769                         AND FL_CTX_EXT.APPLICATION_ID                = 431
7770                         AND FL_CTX_EXT.DESCRIPTIVE_FLEX_CONTEXT_CODE = eiuai.ATTR_GROUP_INT_NAME
7771                         AND FL_CTX_EXT.MULTI_ROW                     = 'N'
7772                     )
7773       )
7774       WHERE CNT > 1;
7775 
7776 
7777     CURSOR c_intf_recs IS
7778       SELECT ROW_ID, MAX_ROW_IDENTIFIER FROM
7779       (
7780         SELECT
7781           ROWID ROW_ID,
7782           COUNT( DISTINCT ROW_IDENTIFIER ) OVER ( PARTITION BY
7783                               INVENTORY_ITEM_ID,
7784                               REVISION,/*Bug:11887867*/
7785                               ATTR_GROUP_INT_NAME,
7786                               DATA_LEVEL_ID,
7787                               PK1_VALUE,
7788                               PK2_VALUE,
7789                               PK3_VALUE,
7790                               PK4_VALUE,
7791                               PK5_VALUE,
7792                               ORGANIZATION_ID,
7793                               NVL( ATTR_GROUP_TYPE, G_DEFAULT_ATTR_GROUP_TYPE )
7794                           ) cnt,
7795           MAX( ROW_IDENTIFIER ) OVER ( PARTITION BY
7796                                           INVENTORY_ITEM_ID,
7797                                           ATTR_GROUP_INT_NAME,
7798                                           DATA_LEVEL_ID,
7799                                           PK1_VALUE,
7800                                           PK2_VALUE,
7801                                           PK3_VALUE,
7802                                           PK4_VALUE,
7803                                           PK5_VALUE,
7804                                           ORGANIZATION_ID,
7805                                           NVL( ATTR_GROUP_TYPE, G_DEFAULT_ATTR_GROUP_TYPE )
7806                                      ) MAX_ROW_IDENTIFIER
7807         FROM EGO_ITM_USR_ATTR_INTRFC eiuai
7808         WHERE DATA_SET_ID = p_batch_id
7809           AND PROCESS_STATUS = p_process_status
7810           AND INVENTORY_ITEM_ID IS NOT NULL
7811           AND DATA_LEVEL_ID IS NOT NULL
7812           AND EXISTS( SELECT NULL
7813                       FROM EGO_FND_DSC_FLX_CTX_EXT FL_CTX_EXT
7814                       WHERE FL_CTX_EXT.DESCRIPTIVE_FLEXFIELD_NAME    = NVL( eiuai.ATTR_GROUP_TYPE, G_DEFAULT_ATTR_GROUP_TYPE )
7815                         AND FL_CTX_EXT.APPLICATION_ID                = 431
7816                         AND FL_CTX_EXT.DESCRIPTIVE_FLEX_CONTEXT_CODE = eiuai.ATTR_GROUP_INT_NAME
7817                         AND FL_CTX_EXT.MULTI_ROW                     = 'N'
7818                     )
7819       )
7820       WHERE CNT > 1;
7821 
7822     CURSOR c_error_case_cursor IS
7823       SELECT /*+ INDEX(EGO_ITM_USR_ATTR_INTRFC, EGO_ITM_USR_ATTR_INTRFC_N3) */    /* Bug 9678667 */
7824       DISTINCT
7825         ORGANIZATION_ID,
7826         ITEM_NUMBER,
7827         SOURCE_SYSTEM_REFERENCE,
7828         INVENTORY_ITEM_ID,
7829         ATTR_GROUP_INT_NAME,
7830         TRANSACTION_ID
7831      FROM EGO_ITM_USR_ATTR_INTRFC
7832      WHERE DATA_SET_ID = p_batch_id
7833        AND PROCESS_STATUS = 3.475;
7834 
7835     l_msg_text               VARCHAR2(4000);
7836     dumm_status              VARCHAR2(100);
7837     l_user_id                NUMBER := FND_GLOBAL.USER_ID;
7838     l_login_id               NUMBER := FND_GLOBAL.LOGIN_ID;
7839     l_prog_appid             NUMBER := FND_GLOBAL.PROG_APPL_ID;
7840     l_prog_id                NUMBER := FND_GLOBAL.CONC_PROGRAM_ID;
7841     l_request_id             NUMBER := FND_GLOBAL.CONC_REQUEST_ID;
7842     l_err_text               VARCHAR2(4000);
7843 
7844     TYPE ROW_IDS IS TABLE OF ROWID INDEX BY BINARY_INTEGER;
7845     TYPE ROW_IDENTIFIERS IS TABLE OF NUMBER INDEX BY BINARY_INTEGER;
7846     l_unmerged_row_idents  ROW_IDENTIFIERS;
7847 
7848     l_row_ids              ROW_IDS;
7849     l_row_idents           ROW_IDENTIFIERS;
7850   BEGIN
7851     Debug_Conc_Log('Clean_Up_UDA_Row_Idents_Post - Starting');
7852     Debug_Conc_Log('Clean_Up_UDA_Row_Idents_Post - Erroring out Unmerged Rows' );
7853     OPEN c_unmerged_rows;
7854     LOOP
7855       FETCH c_unmerged_rows BULK COLLECT INTO l_unmerged_row_idents LIMIT 1000;
7856       Debug_Conc_Log('Clean_Up_UDA_Row_Idents_Post - fetched '||l_unmerged_row_idents.Count||' rows, ');
7857 
7858       FORALL idx IN l_unmerged_row_idents.FIRST..l_unmerged_row_idents.LAST
7859         UPDATE EGO_ITM_USR_ATTR_INTRFC
7860           SET process_status = 3.475
7861         WHERE DATA_SET_ID    = p_batch_id
7862           AND PROCESS_STATUS = p_process_status
7863           AND ROW_IDENTIFIER = l_unmerged_row_idents(idx);
7864       Debug_Conc_Log('Clean_Up_UDA_Row_Idents_Post - Errored - '||SQL%ROWCOUNT||' rows');
7865       EXIT WHEN c_unmerged_rows%NOTFOUND;
7866     END LOOP;
7867     Debug_Conc_Log('Clean_Up_UDA_Row_Idents_Post - Done Erroring unmerged rows');
7868     CLOSE c_unmerged_rows;
7869 
7870     Debug_Conc_Log('Clean_Up_UDA_Row_Idents_Post - Logging errors for Errored out unmerged rows');
7871     FOR i IN c_error_case_cursor LOOP
7872       FND_MESSAGE.SET_NAME('EGO', 'EGO_EF_IDENTICAL_ROWS_ERR');
7873       FND_MESSAGE.SET_TOKEN('AG_NAME', i.ATTR_GROUP_INT_NAME);
7874       l_msg_text := FND_MESSAGE.GET;
7875       dumm_status  := INVPUOPI.mtl_log_interface_err(
7876                               i.ORGANIZATION_ID
7877                              ,l_user_id
7878                              ,l_login_id
7879                              ,l_prog_appid
7880                              ,l_prog_id
7881                              ,l_request_id
7882                              ,i.TRANSACTION_ID
7883                              ,l_msg_text
7884                              ,'ATTR_GROUP_INT_NAME'
7885                              ,'EGO_ITM_USR_ATTR_INTRFC'
7886                              ,'INV_IOI_ERR_EF_IDENTICAL_RS02'--bug 11894684, replace INV_IOI_ERR
7887                              ,l_err_text);
7888     END LOOP;
7889     Debug_Conc_Log('Clean_Up_UDA_Row_Idents_Post - Done Logging errors for Errored out unmerged rows');
7890 
7891     UPDATE /*+ INDEX(EGO_ITM_USR_ATTR_INTRFC, EGO_ITM_USR_ATTR_INTRFC_N3) */    /* Bug 9678667 */
7892       EGO_ITM_USR_ATTR_INTRFC
7893     SET
7894       PROCESS_STATUS = 3,
7895       REQUEST_ID     = l_request_id
7896     WHERE DATA_SET_ID    = p_batch_id
7897       AND PROCESS_STATUS = 3.475;
7898 
7899     Debug_Conc_Log('Clean_Up_UDA_Row_Idents_Post - Done updating rows to 3');
7900 
7901     -- work around the following case by setting the row identifier to the same value
7902     --   item ids  attr_grp attr row_ident value
7903     --     xyz     item_sr  one  1         x
7904     --     xyz     item_sr  two  2         y
7905     -- UDA loader code throws an error ...
7906     Debug_Conc_Log('Clean_Up_UDA_Row_Idents_Post - Updating row_identifiers to unique value where' );
7907     OPEN c_intf_recs;
7908     LOOP
7909       FETCH c_intf_recs BULK COLLECT INTO l_row_ids, l_row_idents LIMIT 1000;
7910       Debug_Conc_Log('Clean_Up_UDA_Row_Idents_Post - fetched '||l_unmerged_row_idents.Count||' rows, ');
7911 
7912       FORALL idx IN l_row_ids.FIRST..l_row_ids.LAST
7913         UPDATE EGO_ITM_USR_ATTR_INTRFC
7914           SET ROW_IDENTIFIER = l_row_idents(idx)
7915         WHERE ROWID = l_row_ids(idx);
7916       Debug_Conc_Log('Clean_Up_UDA_Row_Idents_Post - Updated - '||SQL%ROWCOUNT||' rows');
7917       EXIT WHEN c_intf_recs%NOTFOUND;
7918     END LOOP;
7919     Debug_Conc_Log('Clean_Up_UDA_Row_Idents_Post - Done updating row_identifiers');
7920     CLOSE c_intf_recs;
7921 
7922     IF FND_API.G_TRUE = p_commit THEN
7923       Debug_Conc_Log('Clean_Up_UDA_Row_Idents_Post COMMITING');
7924       COMMIT;
7925     END IF;
7926   EXCEPTION WHEN OTHERS THEN
7927     IF c_unmerged_rows%ISOPEN THEN
7928       CLOSE c_unmerged_rows;
7929     END IF;
7930     IF c_intf_recs%ISOPEN THEN
7931       CLOSE c_intf_recs;
7932     END IF;
7933     Debug_Conc_Log('Clean_Up_UDA_Row_Idents_Post Error - '||SQLERRM);
7934     RAISE;
7935   END CLEAN_UP_UDA_ROW_IDENTS_POST;
7936 
7937   /*
7938    * This method cleans up UDA row identifiers, ensuring that all single attr groups
7939    * are represented by only one row identifier in EGO_ITM_USR_ATTR_INTRFC
7940    *
7941    * Helper procedure for resolve_child_entities
7942    */
7943   PROCEDURE CLEAN_UP_UDA_ROW_IDENTS( p_batch_id             IN NUMBER,
7944                                      p_process_status       IN NUMBER,
7945                                      p_ignore_item_num_upd  IN VARCHAR2, --FND_API.G_TRUE
7946                                      p_commit               IN VARCHAR2 DEFAULT FND_API.G_TRUE
7947                                    )
7948   IS
7949   BEGIN
7950     Debug_Conc_Log('Clean_Up_UDA_Row_Idents - Starting');
7951     IF p_ignore_item_num_upd = FND_API.G_FALSE THEN
7952       Debug_Conc_Log('Clean_Up_UDA_Row_Idents - Calling CLEAN_UP_UDA_ROW_IDENTS_PRE');
7953       CLEAN_UP_UDA_ROW_IDENTS_PRE(p_batch_id       => p_batch_id,
7954                                   p_process_status => p_process_status,
7955                                   p_commit         => p_commit);
7956       Debug_Conc_Log('Clean_Up_UDA_Row_Idents - Done CLEAN_UP_UDA_ROW_IDENTS_PRE');
7957     ELSE
7958       Debug_Conc_Log('Clean_Up_UDA_Row_Idents - Calling CLEAN_UP_UDA_ROW_IDENTS_POST');
7959       CLEAN_UP_UDA_ROW_IDENTS_POST(p_batch_id       => p_batch_id,
7960                                    p_process_status => p_process_status,
7961                                    p_commit         => p_commit);
7962       Debug_Conc_Log('Clean_Up_UDA_Row_Idents - Done CLEAN_UP_UDA_ROW_IDENTS_POST');
7963     END IF;
7964   END CLEAN_UP_UDA_ROW_IDENTS;
7965 
7966  /*
7967   * This method populates the child entities with PK values.
7968   * This method populates the other interface tables like MTL_ITEM_REVISION_INTERFACE,
7969   * EGO_ITEM_PEOPLE_INTF, MTL_ITEM_CATEGORIES_INTERFACE, EGO_ITM_USR_ATTR_INTRFC etc.
7970   * with the inventory item id/number and organization id/code.
7971   */
7972   PROCEDURE Resolve_Child_Entities( p_data_set_id  IN  NUMBER
7973                                   , p_commit       IN  FLAG    DEFAULT FND_API.G_TRUE
7974                                   )
7975   IS
7976     CURSOR c_no_privilege_rows IS
7977       SELECT
7978         ROWID,
7979         SOURCE_SYSTEM_ID,
7980         SOURCE_SYSTEM_REFERENCE,
7981         ITEM_NUMBER,
7982         ORGANIZATION_CODE,
7983         INVENTORY_ITEM_ID,
7984         ORGANIZATION_ID,
7985         TRANSACTION_TYPE,
7986         TRANSACTION_ID
7987       FROM MTL_SYSTEM_ITEMS_INTERFACE MSII
7988       WHERE SET_PROCESS_ID = p_data_set_id
7989         AND PROCESS_FLAG = 33390;
7990 
7991 
7992 
7993     CURSOR c_old_xref_no_priv_row IS
7994       SELECT  KFV.CONCATENATED_SEGMENTS ITEM_NUMBER,
7995               MSII.ORGANIZATION_CODE,
7996               MSII.ORGANIZATION_ID,
7997               MSII.TRANSACTION_ID
7998       FROM    MTL_SYSTEM_ITEMS_B_KFV KFV,
7999               MTL_SYSTEM_ITEMS_INTERFACE MSII,
8000               MTL_CROSS_REFERENCES MCR
8001       WHERE   MSII.SET_PROCESS_ID          = p_data_set_id
8002               AND MCR.CROSS_REFERENCE_TYPE = 'SS_ITEM_XREF'
8003               AND MSII.SOURCE_SYSTEM_ID    = MCR.SOURCE_SYSTEM_ID
8004               AND MSII.ORGANIZATION_ID     = KFV.ORGANIZATION_ID
8005               AND MCR.CROSS_REFERENCE      = MSII.SOURCE_SYSTEM_REFERENCE
8006               AND MCR.INVENTORY_ITEM_ID    = KFV.INVENTORY_ITEM_ID
8007               AND SYSDATE BETWEEN NVL(MCR.START_DATE_ACTIVE, SYSDATE-1) AND NVL(MCR.END_DATE_ACTIVE, SYSDATE + 1)
8008               AND MSII.PROCESS_FLAG = 33391;
8009 
8010 
8011 
8012     l_msg_text               VARCHAR2(4000);
8013     dumm_status              VARCHAR2(100);
8014     l_user_id                NUMBER := FND_GLOBAL.USER_ID;
8015     l_login_id               NUMBER := FND_GLOBAL.LOGIN_ID;
8016     l_prog_appid             NUMBER := FND_GLOBAL.PROG_APPL_ID;
8017     l_prog_id                NUMBER := FND_GLOBAL.CONC_PROGRAM_ID;
8018     l_request_id             NUMBER := FND_GLOBAL.CONC_REQUEST_ID;
8019     l_err_text               VARCHAR2(4000);
8020     l_ss_id                  EGO_IMPORT_BATCHES_B.SOURCE_SYSTEM_ID%TYPE;
8021     l_org_id                 EGO_IMPORT_BATCHES_B.ORGANIZATION_ID%TYPE;
8022     l_item_id                NUMBER;
8023     l_revision               MTL_ITEM_REVISIONS_B.REVISION%TYPE;
8024     l_error                  BOOLEAN;
8025     l_import_policy          EGO_IMPORT_OPTION_SETS.REVISION_IMPORT_POLICY%TYPE;
8026 
8027     l_import_xref_only       EGO_IMPORT_OPTION_SETS.IMPORT_XREF_ONLY%TYPE;
8028     l_party_name             VARCHAR2(1000);
8029     l_security_predicate     VARCHAR2(4000);
8030     l_return_status          VARCHAR2(100);
8031     l_sql                    VARCHAR2(32000);
8032     l_enabled_for_data_pool  EGO_IMPORT_OPTION_SETS.ENABLED_FOR_DATA_POOL%TYPE;
8033     l_org                    VARCHAR2(100);
8034   BEGIN
8035     -- get the source_system_id for this batch
8036     Debug_Conc_Log( 'Resolve_Child_Entities START' );
8037     BEGIN
8038       SELECT
8039         BA.SOURCE_SYSTEM_ID,
8040         BA.ORGANIZATION_ID,
8041         NVL(OPT.REVISION_IMPORT_POLICY, 'L'),
8042         NVL(opt.IMPORT_XREF_ONLY, 'N'),
8043         NVL(opt.ENABLED_FOR_DATA_POOL, 'N')
8044       INTO l_ss_id, l_org_id, l_import_policy, l_import_xref_only, l_enabled_for_data_pool
8045       FROM EGO_IMPORT_BATCHES_B BA, EGO_IMPORT_OPTION_SETS OPT
8046       WHERE BA.BATCH_ID = p_data_set_id AND BA.BATCH_ID = OPT.BATCH_ID;
8047     EXCEPTION WHEN NO_DATA_FOUND THEN
8048       l_org := fnd_profile.value('EGO_USER_ORGANIZATION_CONTEXT');
8049       BEGIN
8050         SELECT mp.MASTER_ORGANIZATION_ID
8051         INTO l_org_id
8052         FROM MTL_PARAMETERS mp
8053         WHERE mp.ORGANIZATION_ID = TO_NUMBER(l_org);
8054       EXCEPTION WHEN OTHERS THEN
8055         l_org_id := NULL;
8056       END;
8057       l_ss_id := get_pdh_source_system_id();
8058       l_import_xref_only := 'N';
8059       l_enabled_for_data_pool := 'N';
8060       l_import_policy := NULL;
8061     END;
8062 
8063     -- no need to resolve child entities for a PDH batch
8064     -- no need to resolve child entities for a Non-PDH batch, if Import Only Cross References is true
8065     IF l_ss_id = get_pdh_source_system_id() THEN
8066       -- move fake rows to have the success process flag value
8067       -- so that they are not processed by IOI
8068       UPDATE MTL_SYSTEM_ITEMS_INTERFACE
8069       SET
8070           REQUEST_ID              = l_request_id
8071         , PROGRAM_APPLICATION_ID  = l_prog_appid
8072         , PROGRAM_ID              = l_prog_id
8073         , PROGRAM_UPDATE_DATE     = SYSDATE
8074         , PROCESS_FLAG            = CASE  -- bug 5283663: never leave fake rows in status 1
8075                                     WHEN  UPPER( TRANSACTION_TYPE ) <> G_TRANS_TYPE_CREATE   THEN 7
8076                                     ELSE  3
8077                                     END
8078       WHERE
8079           set_process_id  = p_data_set_id
8080       AND organization_id = l_org_id
8081       AND confirm_status  = G_FAKE_CONF_STATUS_FLAG
8082       AND (REQUEST_ID IS NULL OR REQUEST_ID = l_request_id)  --added for bug 8860381
8083 --      AND UPPER( TRANSACTION_TYPE ) <> G_TRANS_TYPE_CREATE  -- bug 5283663: never leave fake rows in status 1
8084       ;
8085 
8086       Debug_Conc_Log('Resolve_Child_Entities - Calling Clean_Up_UDA_Row_Idents');
8087       Clean_Up_UDA_Row_Idents( p_batch_id            => p_data_set_id,
8088                                p_process_status      => 1,
8089                                p_ignore_item_num_upd => FND_API.G_FALSE,
8090                                p_commit              => FND_API.G_FALSE );
8091       Debug_Conc_Log('Resolve_Child_Entities - Clean_Up_UDA_Row_Idents Done.');
8092 
8093       Debug_Conc_Log('Resolve_Child_Entities - Resolving Style_Item_Flag');
8094       UPDATE MTL_SYSTEM_ITEMS_INTERFACE msii
8095       SET (STYLE_ITEM_FLAG, STYLE_ITEM_ID, INVENTORY_ITEM_ID) = (SELECT
8096                                                 DECODE(MAX(NVL(msik.STYLE_ITEM_FLAG, '$NULL$')),
8097                                                        '$NULL$', msii.STYLE_ITEM_FLAG,
8098                                                        NULL, msii.STYLE_ITEM_FLAG,
8099                                                        'N', 'N',
8100                                                        'Y', 'Y'
8101                                                       ),
8102                                                 NVL(MAX(msik.STYLE_ITEM_ID), msii.STYLE_ITEM_ID),
8103             NVL(msii.INVENTORY_ITEM_ID, MAX(msik.INVENTORY_ITEM_ID))
8104                                               FROM MTL_SYSTEM_ITEMS_KFV msik, MTL_PARAMETERS mp
8105                                               WHERE (msii.INVENTORY_ITEM_ID = msik.INVENTORY_ITEM_ID
8106                                                   OR msii.ITEM_NUMBER = msik.CONCATENATED_SEGMENTS)
8107                                                 AND msik.ORGANIZATION_ID = mp.MASTER_ORGANIZATION_ID
8108                                                 AND msii.ORGANIZATION_ID = mp.ORGANIZATION_ID
8109                                              )
8110       WHERE SET_PROCESS_ID = p_data_set_id
8111         AND PROCESS_FLAG   = 1;
8112 
8113       Debug_Conc_Log('Resolve_Child_Entities - Done Resolving Style_Item_Flag, rows processed='||SQL%ROWCOUNT);
8114 
8115       Debug_Conc_Log('Resolve_Child_Entities END');
8116       IF FND_API.G_TRUE = p_commit THEN
8117         Debug_Conc_Log('Resolve_Child_Entities COMMITING');
8118         COMMIT;
8119       END IF;
8120       RETURN;
8121     END IF;
8122 
8123     l_party_name := Get_Current_Party_Name;
8124 
8125     -- getting security predicate
8126     EGO_DATA_SECURITY.get_security_predicate(
8127       p_api_version      => 1.0
8128      ,p_function         => 'EGO_EDIT_SS_ITEM_XREFS'
8129      ,p_object_name      => 'EGO_ITEM'
8130      ,p_user_name        => l_party_name
8131      ,p_statement_type   => 'EXISTS'
8132      ,p_pk1_alias        => 'APPLYSEC.INVENTORY_ITEM_ID'
8133      ,p_pk2_alias        => l_org_id
8134      ,x_predicate        => l_security_predicate
8135      ,x_return_status    => l_return_status
8136     );
8137 
8138     Debug_Conc_Log('Resolve_Child_Entities - Security Predicate = '||l_security_predicate);
8139     IF NVL(l_import_xref_only, 'N') = 'Y' THEN
8140       Debug_Conc_Log('Resolve_Child_Entities - Import Cross References Only is true' );
8141       IF l_security_predicate IS NULL THEN
8142         RETURN;
8143       ELSE
8144         Debug_Conc_Log('Resolve_Child_Entities - Checking data security');
8145         --  For CN case, if one is importing cross-references only, the new item would not be
8146         --  created. Thus, there's no need to check security on the cross-references.
8147 
8148         --  CC/CM:
8149         --   old link and new link are the same:
8150         l_sql := q'#
8151           UPDATE MTL_SYSTEM_ITEMS_INTERFACE MSII
8152           SET PROCESS_FLAG = 33390
8153           WHERE SET_PROCESS_ID = :p_data_set_id
8154             AND PROCESS_FLAG = 0
8155             AND ORGANIZATION_ID = :org_id
8156             AND CONFIRM_STATUS IN ('CC', 'CM', 'CFC', 'CFM')
8157             AND EXISTS
8158                     (SELECT 1
8159                      FROM MTL_CROSS_REFERENCES_VL APPLYSEC
8160                      WHERE APPLYSEC.CROSS_REFERENCE = MSII.SOURCE_SYSTEM_REFERENCE
8161                        AND APPLYSEC.SOURCE_SYSTEM_ID = MSII.SOURCE_SYSTEM_ID
8162                        AND APPLYSEC.CROSS_REFERENCE_TYPE = 'SS_ITEM_XREF'
8163                        AND APPLYSEC.INVENTORY_ITEM_ID = MSII.INVENTORY_ITEM_ID
8164                        AND (APPLYSEC.DESCRIPTION <> MSII.SOURCE_SYSTEM_REFERENCE_DESC OR
8165                            (APPLYSEC.DESCRIPTION IS NULL AND MSII.SOURCE_SYSTEM_REFERENCE_DESC IS NOT NULL))
8166                        AND SYSDATE BETWEEN  NVL(APPLYSEC.START_DATE_ACTIVE, SYSDATE-1) AND NVL(APPLYSEC.END_DATE_ACTIVE, SYSDATE + 1)
8167                        AND NOT #' || l_security_predicate || ' )';
8168 
8169         EXECUTE IMMEDIATE l_sql USING p_data_set_id, l_org_id;
8170 
8171         Debug_Conc_Log( 'Resolve_Child_Entities - After checking security on the link where old link and new link are the same and
8172                          source system reference desc is being updated');
8173         --  old link and new link are not the same:
8174         --     check edit privilege on old item link (if any)
8175         l_sql := q'#
8176           UPDATE MTL_SYSTEM_ITEMS_INTERFACE MSII
8177           SET PROCESS_FLAG = 33391
8178           WHERE SET_PROCESS_ID = :p_data_set_id
8179             AND PROCESS_FLAG = 0
8180             AND ORGANIZATION_ID = :org_id
8181             AND CONFIRM_STATUS IN ('CC', 'CM', 'CFC', 'CFM')
8182             AND EXISTS ( SELECT 1
8183                          FROM MTL_CROSS_REFERENCES_B APPLYSEC
8184                          WHERE APPLYSEC.CROSS_REFERENCE = MSII.SOURCE_SYSTEM_REFERENCE
8185                            AND APPLYSEC.SOURCE_SYSTEM_ID = MSII.SOURCE_SYSTEM_ID
8186                            AND APPLYSEC.CROSS_REFERENCE_TYPE = 'SS_ITEM_XREF'
8187                            AND APPLYSEC.INVENTORY_ITEM_ID <> MSII.INVENTORY_ITEM_ID
8188                            AND SYSDATE BETWEEN  NVL(APPLYSEC.START_DATE_ACTIVE, SYSDATE-1) AND NVL(APPLYSEC.END_DATE_ACTIVE, SYSDATE + 1)
8189                            AND NOT #' || l_security_predicate || ' )';
8190 
8191         EXECUTE IMMEDIATE l_sql USING p_data_set_id, l_org_id;
8192 
8193         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' );
8194         --  old link and new link are not the same:
8195         --     check edit privilege on new item link
8196         l_sql := q'#
8197           UPDATE MTL_SYSTEM_ITEMS_INTERFACE APPLYSEC
8198           SET PROCESS_FLAG = 33390
8199           WHERE SET_PROCESS_ID = :p_data_set_id
8200             AND PROCESS_FLAG = 0
8201             AND ORGANIZATION_ID = :org_id
8202             AND CONFIRM_STATUS IN ('CC', 'CM', 'CFC', 'CFM')
8203             AND NOT #' || l_security_predicate  || q'#
8204             AND APPLYSEC.INVENTORY_ITEM_ID IS NOT NULL
8205             AND LNNVL (APPLYSEC.INVENTORY_ITEM_ID =
8206                             (SELECT XREF.INVENTORY_ITEM_ID
8207                              FROM MTL_CROSS_REFERENCES_B XREF
8208                              WHERE XREF.CROSS_REFERENCE = APPLYSEC.SOURCE_SYSTEM_REFERENCE
8209                                AND XREF.SOURCE_SYSTEM_ID = APPLYSEC.SOURCE_SYSTEM_ID
8210                                AND XREF.CROSS_REFERENCE_TYPE = 'SS_ITEM_XREF'
8211                                AND SYSDATE BETWEEN NVL(XREF.START_DATE_ACTIVE, SYSDATE-1) AND NVL(XREF.END_DATE_ACTIVE, SYSDATE + 1))) #';
8212 
8213         EXECUTE IMMEDIATE l_sql USING p_data_set_id, l_org_id;
8214 
8215         Debug_Conc_Log( 'Resolve_Child_Entities - After checking security on new item link where old link and new link are not the same' );
8216 
8217         FOR i IN c_no_privilege_rows LOOP
8218           FND_MESSAGE.SET_NAME('EGO', 'EGO_NO_EDIT_XREF_PRIV');
8219           FND_MESSAGE.SET_TOKEN('ITEM', i.ITEM_NUMBER);
8220           FND_MESSAGE.SET_TOKEN('ORG', i.ORGANIZATION_CODE);
8221           l_msg_text := FND_MESSAGE.GET;
8222 
8223           dumm_status  := INVPUOPI.mtl_log_interface_err(
8224                                 i.ORGANIZATION_ID
8225                                ,l_user_id
8226                                ,l_login_id
8227                                ,l_prog_appid
8228                                ,l_prog_id
8229                                ,l_request_id
8230                                ,i.TRANSACTION_ID
8231                                ,l_msg_text
8232                                ,'SOURCE_SYSTEM_REFERENCE'
8233                                ,'MTL_SYSTEM_ITEMS_INTERFACE'
8234                                ,'INV_IOI_ERR_NO_ED_XREF_PRIV_2'--bug 11894684, replace INV_IOI_ERR
8235                                ,l_err_text);
8236 
8237         END LOOP;
8238 
8239         FOR i IN c_old_xref_no_priv_row LOOP
8240           FND_MESSAGE.SET_NAME('EGO', 'EGO_NO_EDIT_XREF_PRIV');
8241           FND_MESSAGE.SET_TOKEN('ITEM', i.ITEM_NUMBER);
8242           FND_MESSAGE.SET_TOKEN('ORG', i.ORGANIZATION_CODE);
8243           l_msg_text := FND_MESSAGE.GET;
8244 
8245           dumm_status  := INVPUOPI.mtl_log_interface_err(
8246                           i.ORGANIZATION_ID
8247                          ,l_user_id
8248                          ,l_login_id
8249                          ,l_prog_appid
8250                          ,l_prog_id
8251                          ,l_request_id
8252                          ,i.TRANSACTION_ID
8253                          ,l_msg_text
8254                          ,'SOURCE_SYSTEM_REFERENCE'
8255                          ,'MTL_SYSTEM_ITEMS_INTERFACE'
8256                          ,'INV_IOI_ERR_NO_ED_XREF_PRIV_3'--bug 11894684, replace INV_IOI_ERR
8257                          ,l_err_text);
8258         END LOOP;
8259 
8260         Debug_Conc_Log( 'Resolve_Child_Entities - After logging errors for records without privilege' );
8261 
8262         UPDATE MTL_SYSTEM_ITEMS_INTERFACE
8263         SET PROCESS_FLAG = 3
8264         WHERE SET_PROCESS_ID = p_data_set_id
8265           AND PROCESS_FLAG IN (33390, 33391)
8266           AND CONFIRM_STATUS IN ( 'CM', 'CC', 'CN', G_CONF_XREF_FAKE, G_CONF_MATCH_FAKE )
8267           AND ORGANIZATION_ID = l_org_id;
8268 
8269         Debug_Conc_Log( 'Resolve_Child_Entities - After erroring out records without privilege' );
8270 
8271         IF FND_API.G_TRUE = p_commit THEN
8272           Debug_Conc_Log( 'Resolve_Child_Entities COMMITING' );
8273           COMMIT;
8274         END IF;
8275 
8276         RETURN;
8277       END IF; --IF l_security_predicate IS NULL THEN
8278     END IF; --IF NVL(l_import_xref_only, 'N') = 'Y' THEN
8279 
8280     -- resolving transaction type for revisions
8281     UPDATE MTL_ITEM_REVISIONS_INTERFACE MIRI
8282     SET TRANSACTION_TYPE = (
8283          SELECT
8284            (CASE
8285               WHEN MSII.CONFIRM_STATUS = 'CN'
8286               THEN 'CREATE'
8287               WHEN (MSII.CONFIRM_STATUS IN ( 'CM', 'CC', G_CONF_XREF_FAKE, G_CONF_MATCH_FAKE )
8288                     AND EXISTS (SELECT NULL
8289                                 FROM MTL_ITEM_REVISIONS_B MIR
8290                                 WHERE MIR.INVENTORY_ITEM_ID = MSII.INVENTORY_ITEM_ID
8291                                   AND MIR.ORGANIZATION_ID = MIRI.ORGANIZATION_ID
8292                                   AND MIR.REVISION = MIRI.REVISION) )
8293               THEN 'UPDATE'
8294               ELSE 'CREATE'
8295             END)
8296          FROM MTL_SYSTEM_ITEMS_INTERFACE MSII
8297          WHERE MSII.SET_PROCESS_ID = p_data_set_id
8298            AND MSII.PROCESS_FLAG = 0
8299            AND MSII.CONFIRM_STATUS IN ('CN', 'CM', 'CC', G_CONF_XREF_FAKE, G_CONF_MATCH_FAKE)
8300            AND MSII.SOURCE_SYSTEM_ID = MIRI.SOURCE_SYSTEM_ID
8301            AND MSII.SOURCE_SYSTEM_REFERENCE = MIRI.SOURCE_SYSTEM_REFERENCE
8302            AND MSII.ORGANIZATION_ID = l_org_id
8303            AND ROWNUM = 1
8304         )
8305     WHERE MIRI.PROCESS_FLAG = 0
8306       AND MIRI.SET_PROCESS_ID = p_data_set_id
8307       AND EXISTS (SELECT NULL
8308                   FROM MTL_SYSTEM_ITEMS_INTERFACE MSII
8309                   WHERE MSII.SET_PROCESS_ID = p_data_set_id
8310                     AND MSII.PROCESS_FLAG = 0
8311                     AND MSII.CONFIRM_STATUS IN ( 'CN', 'CM', 'CC', G_CONF_XREF_FAKE, G_CONF_MATCH_FAKE )
8312                     AND MSII.SOURCE_SYSTEM_ID = MIRI.SOURCE_SYSTEM_ID
8313                     AND MSII.SOURCE_SYSTEM_REFERENCE = MIRI.SOURCE_SYSTEM_REFERENCE
8314                     AND MSII.ORGANIZATION_ID = l_org_id);
8315 
8316     Debug_Conc_Log('Resolve_Child_Entities - After resolving transaction_type for revisions' );
8317 
8318     -- update the confirm status to ready for all READY CN records
8319     UPDATE
8320       MTL_SYSTEM_ITEMS_INTERFACE MSII
8321       SET CONFIRM_STATUS = (
8322       CASE
8323         WHEN (MSII.DESCRIPTION IS NULL
8324               AND NOT EXISTS
8325                   (SELECT NULL
8326                    FROM MTL_ITEM_TEMPLATES_VL TEMP,
8327                      MTL_ITEM_TEMPL_ATTRIBUTES ATTR
8328                    WHERE ((MSII.TEMPLATE_ID IS NOT NULL AND TEMP.TEMPLATE_ID = MSII.TEMPLATE_ID)
8329                           OR (MSII.TEMPLATE_ID IS NULL AND TEMP.TEMPLATE_NAME = MSII.TEMPLATE_NAME)
8330                          )
8331                      AND (TEMP.CONTEXT_ORGANIZATION_ID = MSII.ORGANIZATION_ID OR TEMP.CONTEXT_ORGANIZATION_ID IS NULL)
8332                      AND TEMP.TEMPLATE_ID = ATTR.TEMPLATE_ID
8333                      AND ATTR.ENABLED_FLAG = 'Y'
8334                      AND ATTR.ATTRIBUTE_NAME = 'MTL_SYSTEM_ITEMS.DESCRIPTION'
8335                   )
8336               AND 'F' <>
8337                   (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
8338                    FROM MTL_ITEM_CATALOG_GROUPS_B ICC
8339                    WHERE ICC.ITEM_DESC_GEN_METHOD IS NOT NULL
8340                      AND ICC.ITEM_DESC_GEN_METHOD <> 'I'
8341                    CONNECT BY PRIOR ICC.PARENT_CATALOG_GROUP_ID = ICC.ITEM_CATALOG_GROUP_ID
8342                    START WITH ICC.ITEM_CATALOG_GROUP_ID = MSII.ITEM_CATALOG_GROUP_ID
8343                   )
8344              )
8345         THEN CONFIRM_STATUS
8346         WHEN
8347         (MSII.ITEM_NUMBER IS NULL AND MSII.ITEM_CATALOG_GROUP_ID IS NULL)
8348         THEN CONFIRM_STATUS
8349         WHEN
8350         (    MSII.ITEM_CATALOG_GROUP_ID IS NOT NULL
8351          AND MSII.ITEM_NUMBER IS NULL
8352          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
8353               FROM MTL_ITEM_CATALOG_GROUPS_B ICC
8354               WHERE ICC.ITEM_NUM_GEN_METHOD IS NOT NULL
8355                 AND ICC.ITEM_NUM_GEN_METHOD <> 'I'
8356               CONNECT BY PRIOR ICC.PARENT_CATALOG_GROUP_ID = ICC.ITEM_CATALOG_GROUP_ID
8357               START WITH ICC.ITEM_CATALOG_GROUP_ID = MSII.ITEM_CATALOG_GROUP_ID
8358              ) NOT IN ('S', 'F')
8359         )
8360         THEN CONFIRM_STATUS
8361         ELSE CONFIRM_STATUS||'R'
8362       END
8363       )
8364     WHERE MSII.SET_PROCESS_ID = p_data_set_id
8365       AND MSII.PROCESS_FLAG = 0
8366       AND MSII.ORGANIZATION_ID = l_org_id
8367       AND MSII.CONFIRM_STATUS = 'CN';
8368 
8369     Debug_Conc_Log('Resolve_Child_Entities - After updating confirm status to CNR' );
8370     -- for all records with confirm_status = CN and item_number is null and is sequence generated
8371     -- update the item_number column.
8372 
8373     -- eletuchy:
8374     -- The item number must be generated here because the IOI doesn't know anything about source system references.
8375     -- Therefore, the parent-child linkages must be reported to IOI via inventory_item_id and item_number columns.
8376     -- For CN items with sequence-generated item_numbers, neither inventory_item_id not item_number contain any info,
8377     -- so IOI wouldn't know about the parent-child linkages unless the item number generation occurs here.
8378 
8379     -- dsakalle: For R12C, bug 6113606
8380     -- We are not honoring user entered item number values from R12C
8381     -- so the overwriting of item number must happen only from IOI
8382     /*
8383     UPDATE
8384       MTL_SYSTEM_ITEMS_INTERFACE MSII
8385       SET ITEM_NUMBER = EGO_IMPORT_PVT.GET_NEXT_ITEM_NUMBER(MSII.ITEM_CATALOG_GROUP_ID)
8386     WHERE MSII.ITEM_CATALOG_GROUP_ID IS NOT NULL
8387       AND MSII.ITEM_NUMBER IS NULL
8388       AND MSII.SET_PROCESS_ID = p_data_set_id
8389       AND MSII.PROCESS_FLAG = 0
8390       AND MSII.CONFIRM_STATUS = 'CNR'
8391       AND MSII.ORGANIZATION_ID = l_org_id
8392       AND 'S' = ( SELECT MAX( ICC.ITEM_NUM_GEN_METHOD ) KEEP (DENSE_RANK FIRST ORDER BY LEVEL)
8393                   FROM MTL_ITEM_CATALOG_GROUPS_B ICC
8394                   WHERE ICC.ITEM_NUM_GEN_METHOD IS NOT NULL
8395                     AND ICC.ITEM_NUM_GEN_METHOD <> 'I'
8396                   CONNECT BY PRIOR ICC.PARENT_CATALOG_GROUP_ID = ICC.ITEM_CATALOG_GROUP_ID
8397                     START WITH ICC.ITEM_CATALOG_GROUP_ID = MSII.ITEM_CATALOG_GROUP_ID
8398                 );
8399 
8400     Debug_Conc_Log('Resolve_Child_Entities - After updating Sequence Generated Item Numbers' );
8401     */
8402     -- update all records with confirm_status='CC', 'CM' to ready, where conditions are satisfied
8403     UPDATE
8404       MTL_SYSTEM_ITEMS_INTERFACE MSII
8405       SET CONFIRM_STATUS = (
8406       CASE
8407         WHEN
8408           (NVL(MSII.REVISION_IMPORT_POLICY, l_import_policy) = 'N' AND
8409             1 <> (SELECT COUNT(*)
8410                   FROM MTL_ITEM_REVISIONS_INTERFACE MIRI
8411                   WHERE MIRI.SET_PROCESS_ID = MSII.SET_PROCESS_ID
8412                     AND MIRI.PROCESS_FLAG = 0
8413                     AND MIRI.SOURCE_SYSTEM_ID = MSII.SOURCE_SYSTEM_ID
8414                     AND MIRI.SOURCE_SYSTEM_REFERENCE = MSII.SOURCE_SYSTEM_REFERENCE
8415                     AND MIRI.ORGANIZATION_ID = MSII.ORGANIZATION_ID
8416                     AND MIRI.REVISION IS NOT NULL
8417                     AND MIRI.EFFECTIVITY_DATE IS NOT NULL
8418                     AND UPPER(MIRI.TRANSACTION_TYPE) = 'CREATE'))
8419         THEN CONFIRM_STATUS
8420         ELSE CONFIRM_STATUS||'R'
8421       END
8422       )
8423     WHERE MSII.SET_PROCESS_ID = p_data_set_id
8424       AND MSII.PROCESS_FLAG = 0
8425       AND MSII.ORGANIZATION_ID = l_org_id
8426       AND MSII.CONFIRM_STATUS IN ('CC', 'CM');
8427 
8428     UPDATE
8429       MTL_SYSTEM_ITEMS_INTERFACE MSII
8430       SET CONFIRM_STATUS = (
8431       CASE
8432         WHEN ( NVL(MSII.REVISION_IMPORT_POLICY, l_import_policy) = 'N' AND
8433                1 <> (SELECT COUNT(*)
8434                   FROM MTL_ITEM_REVISIONS_INTERFACE MIRI
8435                   WHERE MIRI.SET_PROCESS_ID = MSII.SET_PROCESS_ID
8436                     AND MIRI.PROCESS_FLAG = 0
8437                     AND MIRI.SOURCE_SYSTEM_ID = MSII.SOURCE_SYSTEM_ID
8438                     AND MIRI.SOURCE_SYSTEM_REFERENCE = MSII.SOURCE_SYSTEM_REFERENCE
8439                     AND MIRI.ORGANIZATION_ID = MSII.ORGANIZATION_ID
8440                     AND MIRI.REVISION IS NOT NULL
8441                     AND MIRI.EFFECTIVITY_DATE IS NOT NULL
8442                     AND UPPER(MIRI.TRANSACTION_TYPE) = G_TRANS_TYPE_CREATE )
8443              )
8444         THEN CONFIRM_STATUS
8445         ELSE G_FAKE_MATCH_READY
8446       END
8447       )
8448     WHERE MSII.SET_PROCESS_ID = p_data_set_id
8449       AND MSII.PROCESS_FLAG = 0
8450       AND MSII.ORGANIZATION_ID = l_org_id
8451       AND MSII.CONFIRM_STATUS IN ( G_CONF_MATCH_FAKE, G_CONF_XREF_FAKE );
8452 
8453     Debug_Conc_Log('Resolve_Child_Entities - After updating confirm status to CMR or CCR' );
8454 
8455     IF l_security_predicate IS NOT NULL THEN
8456       Debug_Conc_Log('Resolve_Child_Entities - Need to check privilege' );
8457       -- For the confirmed new case, if there exists an active cross reference which you cannot break
8458        -- update process_flag to 33391
8459       l_sql := q'#
8460         UPDATE MTL_SYSTEM_ITEMS_INTERFACE MSII
8461         SET PROCESS_FLAG = 33391
8462         WHERE SET_PROCESS_ID = :p_data_set_id
8463           AND PROCESS_FLAG = 0
8464           AND ORGANIZATION_ID = :org_id
8465           AND CONFIRM_status = 'CNR'
8466           AND EXISTS ( SELECT 1 FROM MTL_CROSS_REFERENCES_B APPLYSEC
8467                        WHERE APPLYSEC.CROSS_REFERENCE = MSII.SOURCE_SYSTEM_REFERENCE
8468                          AND APPLYSEC.SOURCE_SYSTEM_ID = MSII.SOURCE_SYSTEM_ID
8469                          AND APPLYSEC.CROSS_REFERENCE_TYPE = 'SS_ITEM_XREF'
8470                          AND SYSDATE BETWEEN NVL(APPLYSEC.START_DATE_ACTIVE, SYSDATE-1) AND NVL(APPLYSEC.END_DATE_ACTIVE, SYSDATE + 1)
8471                          AND NOT #' || l_security_predicate || ' )';
8472 
8473       EXECUTE IMMEDIATE l_sql USING p_data_set_id, l_org_id;
8474 
8475       Debug_Conc_Log('Resolve_Child_Entities - After checking for CNR' );
8476       --  CC/CM:
8477       --   old link and new link are the same:
8478       l_sql := q'#
8479           UPDATE MTL_SYSTEM_ITEMS_INTERFACE MSII
8480           SET PROCESS_FLAG = 33390
8481           WHERE SET_PROCESS_ID = :p_data_set_id
8482             AND PROCESS_FLAG = 0
8483             AND ORGANIZATION_ID = :org_id
8484             AND CONFIRM_STATUS IN ('CCR', 'CMR', 'FMR' )
8485             AND EXISTS
8486                     (SELECT 1
8487                      FROM MTL_CROSS_REFERENCES_VL APPLYSEC
8488                      WHERE APPLYSEC.CROSS_REFERENCE = MSII.SOURCE_SYSTEM_REFERENCE
8489                        AND APPLYSEC.SOURCE_SYSTEM_ID = MSII.SOURCE_SYSTEM_ID
8490                        AND APPLYSEC.CROSS_REFERENCE_TYPE = 'SS_ITEM_XREF'
8491                        AND APPLYSEC.INVENTORY_ITEM_ID = MSII.INVENTORY_ITEM_ID
8492                        AND (APPLYSEC.DESCRIPTION <> MSII.SOURCE_SYSTEM_REFERENCE_DESC OR
8493                            (APPLYSEC.DESCRIPTION IS NULL AND MSII.SOURCE_SYSTEM_REFERENCE_DESC IS NOT NULL))
8494                        AND SYSDATE BETWEEN  NVL(APPLYSEC.START_DATE_ACTIVE, SYSDATE-1) AND NVL(APPLYSEC.END_DATE_ACTIVE, SYSDATE + 1)
8495                        AND NOT #' || l_security_predicate || ' )';
8496 
8497         EXECUTE IMMEDIATE l_sql USING p_data_set_id, l_org_id;
8498 
8499         Debug_Conc_Log( 'Resolve_Child_Entities - After checking security on the link where old link and new link are the same and
8500                          source system reference desc is being updated' );
8501         --  old link and new link are not the same:
8502         --     check edit privilege on old item link (if any)
8503         l_sql := q'#
8504           UPDATE MTL_SYSTEM_ITEMS_INTERFACE MSII
8505           SET PROCESS_FLAG = 33391
8506           WHERE SET_PROCESS_ID = :p_data_set_id
8507             AND PROCESS_FLAG = 0
8508             AND ORGANIZATION_ID = :org_id
8509             AND CONFIRM_STATUS IN ( 'CCR', 'CMR', 'FMR' )
8510             AND EXISTS ( SELECT 1
8511                          FROM MTL_CROSS_REFERENCES_B APPLYSEC
8512                          WHERE APPLYSEC.CROSS_REFERENCE = MSII.SOURCE_SYSTEM_REFERENCE
8513                            AND APPLYSEC.SOURCE_SYSTEM_ID = MSII.SOURCE_SYSTEM_ID
8514                            AND APPLYSEC.CROSS_REFERENCE_TYPE = 'SS_ITEM_XREF'
8515                            AND APPLYSEC.INVENTORY_ITEM_ID <> MSII.INVENTORY_ITEM_ID
8516                            AND SYSDATE BETWEEN  NVL(APPLYSEC.START_DATE_ACTIVE, SYSDATE-1) AND NVL(APPLYSEC.END_DATE_ACTIVE, SYSDATE + 1)
8517                            AND NOT #' || l_security_predicate || ' )';
8518 
8519         EXECUTE IMMEDIATE l_sql USING p_data_set_id, l_org_id;
8520 
8521         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' );
8522 
8523         --  old link and new link are not the same:
8524         --     check edit privilege on new item link
8525         l_sql := q'#
8526           UPDATE MTL_SYSTEM_ITEMS_INTERFACE APPLYSEC
8527           SET PROCESS_FLAG = 33390
8528           WHERE SET_PROCESS_ID = :p_data_set_id
8529             AND PROCESS_FLAG = 0
8530             AND ORGANIZATION_ID = :org_id
8531             AND CONFIRM_STATUS IN ( 'CCR', 'CMR', 'FMR' )
8532             AND NOT #' || l_security_predicate  || q'#
8533             AND APPLYSEC.INVENTORY_ITEM_ID IS NOT NULL
8534             AND LNNVL (APPLYSEC.INVENTORY_ITEM_ID =
8535                             (SELECT XREF.INVENTORY_ITEM_ID
8536                              FROM MTL_CROSS_REFERENCES_B XREF
8537                              WHERE XREF.CROSS_REFERENCE = APPLYSEC.SOURCE_SYSTEM_REFERENCE
8538                                AND XREF.SOURCE_SYSTEM_ID = APPLYSEC.SOURCE_SYSTEM_ID
8539                                AND XREF.CROSS_REFERENCE_TYPE = 'SS_ITEM_XREF'
8540                                AND SYSDATE BETWEEN NVL(XREF.START_DATE_ACTIVE, SYSDATE-1) AND NVL(XREF.END_DATE_ACTIVE, SYSDATE + 1))) #';
8541 
8542         EXECUTE IMMEDIATE l_sql USING p_data_set_id, l_org_id;
8543 
8544         Debug_Conc_Log( 'Resolve_Child_Entities - After checking security on new item link where old link and new link are not the same' );
8545 
8546         Debug_Conc_Log( 'Resolve_Child_Entities - After updating records without privilege to status 33390' );
8547 
8548       FOR i IN c_no_privilege_rows LOOP
8549         FND_MESSAGE.SET_NAME('EGO', 'EGO_NO_EDIT_XREF_PRIV');
8550         FND_MESSAGE.SET_TOKEN('ITEM', i.ITEM_NUMBER);
8551         FND_MESSAGE.SET_TOKEN('ORG', i.ORGANIZATION_CODE);
8552         l_msg_text := FND_MESSAGE.GET;
8553 
8554 
8555 
8556         dumm_status  := INVPUOPI.mtl_log_interface_err(
8557                               i.ORGANIZATION_ID
8558                              ,l_user_id
8559                              ,l_login_id
8560                              ,l_prog_appid
8561                              ,l_prog_id
8562                              ,l_request_id
8563                              ,i.TRANSACTION_ID
8564                              ,l_msg_text
8565                              ,'SOURCE_SYSTEM_REFERENCE'
8566                              ,'MTL_SYSTEM_ITEMS_INTERFACE'
8567                              ,'INV_IOI_ERR_NO_ED_XREF_PRIV_4'--bug 11894684, replace INV_IOI_ERR
8568                              ,l_err_text);
8569       END LOOP;
8570 
8571       FOR i IN c_old_xref_no_priv_row LOOP
8572         FND_MESSAGE.SET_NAME('EGO', 'EGO_NO_EDIT_XREF_PRIV');
8573         FND_MESSAGE.SET_TOKEN('ITEM', i.ITEM_NUMBER);
8574         FND_MESSAGE.SET_TOKEN('ORG', i.ORGANIZATION_CODE);
8575         l_msg_text := FND_MESSAGE.GET;
8576 
8577         dumm_status  := INVPUOPI.mtl_log_interface_err(
8578                         i.ORGANIZATION_ID
8579                        ,l_user_id
8580                        ,l_login_id
8581                        ,l_prog_appid
8582                        ,l_prog_id
8583                        ,l_request_id
8584                        ,i.TRANSACTION_ID
8585                        ,l_msg_text
8586                        ,'SOURCE_SYSTEM_REFERENCE'
8587                        ,'MTL_SYSTEM_ITEMS_INTERFACE'
8588                        ,'INV_IOI_ERR_NO_ED_XREF_PRIV_5'--bug 11894684, replace INV_IOI_ERR
8589                        ,l_err_text);
8590       END LOOP;
8591 
8592       Debug_Conc_Log('Resolve_Child_Entities - After logging errors for no privilege' );
8593     END IF; --IF l_security_predicate IS NOT NULL THEN
8594 
8595     -- ELETUCHY XXX: seems wasteful to overwrite transaction type to sync rather than update, no?
8596     UPDATE MTL_SYSTEM_ITEMS_INTERFACE
8597     SET PROCESS_FLAG = 1
8598       , TRANSACTION_TYPE =  CASE
8599                             WHEN CONFIRM_STATUS = 'CNR' THEN G_TRANS_TYPE_CREATE
8600                             ELSE G_TRANS_TYPE_UPDATE
8601                             END
8602       -- ELETUCHY Bug 5316904: Should not attempt to change ICC from source system batch
8603       , ITEM_CATALOG_GROUP_ID = CASE
8604                                 WHEN CONFIRM_STATUS = 'CNR' THEN ITEM_CATALOG_GROUP_ID
8605                                 ELSE NULL
8606                                 END
8607       , ITEM_CATALOG_GROUP_NAME =   CASE
8608                                     WHEN CONFIRM_STATUS = 'CNR' THEN ITEM_CATALOG_GROUP_NAME
8609                                     ELSE NULL
8610                                     END
8611     WHERE SET_PROCESS_ID = p_data_set_id
8612         AND PROCESS_FLAG = 0
8613         AND CONFIRM_STATUS IN ( 'CNR', 'CMR', 'CCR' )
8614         AND ORGANIZATION_ID = l_org_id;
8615 
8616     -- ELETUCHY: these fake rows will never be processed by IOI, so putting trans_type to UPDATE is reasonable
8617     UPDATE MTL_SYSTEM_ITEMS_INTERFACE
8618     SET PROCESS_FLAG     = 1,
8619         TRANSACTION_TYPE = G_TRANS_TYPE_UPDATE,
8620         CONFIRM_STATUS   = G_FAKE_CONF_STATUS_FLAG
8621     WHERE SET_PROCESS_ID = p_data_set_id
8622         AND PROCESS_FLAG = 0
8623         AND CONFIRM_STATUS = G_FAKE_MATCH_READY
8624         AND ORGANIZATION_ID = l_org_id;
8625 
8626     Debug_Conc_Log('Resolve_Child_Entities - Done with master item rows' );
8627 
8628     -- updating item_number, item_id from MSII table
8629     -- for child items
8630     UPDATE MTL_SYSTEM_ITEMS_INTERFACE MSII
8631     SET (PROCESS_FLAG, TRANSACTION_TYPE, INVENTORY_ITEM_ID, ITEM_NUMBER, ITEM_CATALOG_GROUP_ID, ITEM_CATALOG_GROUP_NAME, STYLE_ITEM_FLAG, STYLE_ITEM_ID ) =
8632         (SELECT
8633            1,
8634            (CASE
8635               WHEN MSII2.CONFIRM_STATUS = 'CNR'
8636               THEN 'CREATE'
8637               ELSE 'SYNC'
8638             END),
8639            MSII2.INVENTORY_ITEM_ID,
8640            MSII2.ITEM_NUMBER,
8641            MSII2.ITEM_CATALOG_GROUP_ID,
8642            MSII2.ITEM_CATALOG_GROUP_NAME,
8643            NVL(MSII.STYLE_ITEM_FLAG, MSII2.STYLE_ITEM_FLAG),
8644            NVL(MSII.STYLE_ITEM_ID, MSII2.STYLE_ITEM_ID)
8645          FROM MTL_SYSTEM_ITEMS_INTERFACE MSII2
8646          WHERE MSII2.SET_PROCESS_ID = p_data_set_id
8647            AND MSII2.PROCESS_FLAG = 1
8648            AND MSII2.SOURCE_SYSTEM_ID = MSII.SOURCE_SYSTEM_ID
8649            AND MSII2.SOURCE_SYSTEM_REFERENCE = MSII.SOURCE_SYSTEM_REFERENCE
8650            AND MSII2.CONFIRM_STATUS IN ( 'CNR', 'CMR', 'CCR', G_FAKE_CONF_STATUS_FLAG )
8651            AND MSII2.ORGANIZATION_ID = l_org_id
8652            AND ROWNUM = 1
8653         )
8654     WHERE MSII.PROCESS_FLAG = 0
8655       AND MSII.CONFIRM_STATUS IS NULL
8656       AND MSII.SET_PROCESS_ID = p_data_set_id
8657       AND EXISTS (SELECT NULL FROM MTL_PARAMETERS mp
8658                   WHERE mp.ORGANIZATION_ID = MSII.ORGANIZATION_ID
8659                     AND mp.MASTER_ORGANIZATION_ID = l_org_id
8660                     AND mp.MASTER_ORGANIZATION_ID <> mp.ORGANIZATION_ID
8661                  )
8662       AND EXISTS (SELECT NULL
8663                   FROM MTL_SYSTEM_ITEMS_INTERFACE MSII2
8664                   WHERE MSII2.SET_PROCESS_ID = p_data_set_id
8665                     AND MSII2.PROCESS_FLAG = 1
8666                     AND MSII2.CONFIRM_STATUS IN ( 'CNR', 'CMR', 'CCR', G_FAKE_CONF_STATUS_FLAG )
8667                     AND MSII2.SOURCE_SYSTEM_ID = MSII.SOURCE_SYSTEM_ID
8668                     AND MSII2.SOURCE_SYSTEM_REFERENCE = MSII.SOURCE_SYSTEM_REFERENCE
8669                     AND MSII2.ORGANIZATION_ID = l_org_id);
8670 
8671     Debug_Conc_Log('Resolve_Child_Entities - After resolving child items' );
8672 
8673     -- updating item_number, item_id from MSII table
8674     UPDATE MTL_ITEM_REVISIONS_INTERFACE MIRI
8675     SET (PROCESS_FLAG, TRANSACTION_TYPE, INVENTORY_ITEM_ID, ITEM_NUMBER) =
8676         (SELECT
8677            1,
8678            (CASE
8679               WHEN MSII.CONFIRM_STATUS = 'CNR'
8680               THEN 'CREATE'
8681               WHEN MIRI.TRANSACTION_TYPE <> 'SYNC'
8682               THEN MIRI.TRANSACTION_TYPE
8683               WHEN EXISTS (SELECT 1
8684                             FROM MTL_ITEM_REVISIONS_B MIR
8685                             WHERE MIR.INVENTORY_ITEM_ID = MSII.INVENTORY_ITEM_ID
8686                             AND MIR.ORGANIZATION_ID = MIRI.ORGANIZATION_ID
8687                             AND MIR.REVISION = MIRI.REVISION)
8688               THEN 'UPDATE'
8689               ELSE 'CREATE'
8690             END),
8691            MSII.INVENTORY_ITEM_ID,
8692            MSII.ITEM_NUMBER
8693          FROM MTL_SYSTEM_ITEMS_INTERFACE MSII
8694          WHERE MSII.SET_PROCESS_ID = p_data_set_id
8695            AND MSII.PROCESS_FLAG = 1
8696            AND MSII.CONFIRM_STATUS IN ('CNR', 'CMR', 'CCR', G_FAKE_CONF_STATUS_FLAG )
8697            AND MSII.SOURCE_SYSTEM_ID = MIRI.SOURCE_SYSTEM_ID
8698            AND MSII.SOURCE_SYSTEM_REFERENCE = MIRI.SOURCE_SYSTEM_REFERENCE
8699            AND MSII.ORGANIZATION_ID = l_org_id
8700            AND ROWNUM = 1
8701         )
8702     WHERE MIRI.PROCESS_FLAG = 0
8703       AND MIRI.SET_PROCESS_ID = p_data_set_id
8704       AND EXISTS (SELECT NULL
8705                   FROM MTL_SYSTEM_ITEMS_INTERFACE MSII
8706                   WHERE MSII.SET_PROCESS_ID = p_data_set_id
8707                     AND MSII.PROCESS_FLAG = 1
8708                     AND MSII.CONFIRM_STATUS IN ('CNR', 'CMR', 'CCR', G_FAKE_CONF_STATUS_FLAG)
8709                     AND MSII.SOURCE_SYSTEM_ID = MIRI.SOURCE_SYSTEM_ID
8710                     AND MSII.SOURCE_SYSTEM_REFERENCE = MIRI.SOURCE_SYSTEM_REFERENCE
8711                     AND MSII.ORGANIZATION_ID = l_org_id);
8712 
8713     Debug_Conc_Log('Resolve_Child_Entities - After resolving revision rows' );
8714     -- updating item_number, item_id from MSII table
8715     UPDATE MTL_ITEM_CATEGORIES_INTERFACE MICI
8716     SET (PROCESS_FLAG, TRANSACTION_TYPE, INVENTORY_ITEM_ID, ITEM_NUMBER) =
8717         (SELECT
8718            1,
8719            (CASE
8720               WHEN MSII.CONFIRM_STATUS = 'CNR'
8721               THEN 'CREATE'
8722               ELSE MICI.TRANSACTION_TYPE
8723             END),
8724            MSII.INVENTORY_ITEM_ID,
8725            MSII.ITEM_NUMBER
8726          FROM MTL_SYSTEM_ITEMS_INTERFACE MSII
8727          WHERE MSII.SET_PROCESS_ID = p_data_set_id
8728            AND MSII.PROCESS_FLAG = 1
8729            AND MSII.CONFIRM_STATUS IN ('CNR', 'CMR', 'CCR', G_FAKE_CONF_STATUS_FLAG)
8730            AND MSII.SOURCE_SYSTEM_ID = MICI.SOURCE_SYSTEM_ID
8731            AND MSII.SOURCE_SYSTEM_REFERENCE = MICI.SOURCE_SYSTEM_REFERENCE
8732            AND MSII.ORGANIZATION_ID = l_org_id
8733            AND ROWNUM = 1
8734         )
8735     WHERE MICI.PROCESS_FLAG = 0
8736       AND MICI.SET_PROCESS_ID = p_data_set_id
8737       AND EXISTS (SELECT NULL
8738                   FROM MTL_SYSTEM_ITEMS_INTERFACE MSII
8739                   WHERE MSII.SET_PROCESS_ID = p_data_set_id
8740                     AND MSII.PROCESS_FLAG = 1
8741                     AND MSII.CONFIRM_STATUS IN ('CNR', 'CMR', 'CCR', G_FAKE_CONF_STATUS_FLAG)
8742                     AND MSII.SOURCE_SYSTEM_ID = MICI.SOURCE_SYSTEM_ID
8743                     AND MSII.SOURCE_SYSTEM_REFERENCE = MICI.SOURCE_SYSTEM_REFERENCE
8744                     AND MSII.ORGANIZATION_ID = l_org_id);
8745 
8746     Debug_Conc_Log('Resolve_Child_Entities - After resolving categories rows' );
8747     -- updating item_number, item_id from MSII table
8748     UPDATE EGO_ITM_USR_ATTR_INTRFC ATTRS
8749     SET (PROCESS_STATUS, TRANSACTION_TYPE, INVENTORY_ITEM_ID, ITEM_NUMBER, ITEM_CATALOG_GROUP_ID) =
8750         (SELECT
8751            1,
8752            (CASE
8753               WHEN UPPER(ATTRS.TRANSACTION_TYPE) = G_TRANS_TYPE_DELETE THEN G_TRANS_TYPE_DELETE
8754               WHEN MSII.CONFIRM_STATUS = 'CNR' THEN G_TRANS_TYPE_CREATE
8755               ELSE G_TRANS_TYPE_SYNC
8756             END),
8757            MSII.INVENTORY_ITEM_ID,
8758            MSII.ITEM_NUMBER,
8759            NVL(ATTRS.ITEM_CATALOG_GROUP_ID, MSII.ITEM_CATALOG_GROUP_ID)
8760          FROM MTL_SYSTEM_ITEMS_INTERFACE MSII
8761          WHERE MSII.SET_PROCESS_ID = p_data_set_id
8762            AND MSII.PROCESS_FLAG = 1
8763            AND MSII.CONFIRM_STATUS IN ('CNR', 'CMR', 'CCR', G_FAKE_CONF_STATUS_FLAG)
8764            AND MSII.SOURCE_SYSTEM_ID = ATTRS.SOURCE_SYSTEM_ID
8765            AND MSII.SOURCE_SYSTEM_REFERENCE = ATTRS.SOURCE_SYSTEM_REFERENCE
8766            AND MSII.ORGANIZATION_ID = l_org_id
8767            AND ROWNUM = 1
8768         )
8769     WHERE ATTRS.PROCESS_STATUS = 0
8770       AND ATTRS.DATA_SET_ID = p_data_set_id
8771       AND EXISTS (SELECT NULL
8772                   FROM MTL_SYSTEM_ITEMS_INTERFACE MSII
8773                   WHERE MSII.SET_PROCESS_ID = p_data_set_id
8774                     AND MSII.PROCESS_FLAG = 1
8775                     AND MSII.CONFIRM_STATUS IN ('CNR', 'CMR', 'CCR', G_FAKE_CONF_STATUS_FLAG)
8776                     AND MSII.SOURCE_SYSTEM_ID = ATTRS.SOURCE_SYSTEM_ID
8777                     AND MSII.SOURCE_SYSTEM_REFERENCE = ATTRS.SOURCE_SYSTEM_REFERENCE
8778                     AND MSII.ORGANIZATION_ID = l_org_id);
8779 
8780     Debug_Conc_Log('Resolve_Child_Entities - After resolving user defined attrs rows' );
8781 
8782     UPDATE EGO_ITM_USR_ATTR_INTRFC ATTRS
8783       SET REVISION = (
8784       CASE (SELECT
8785               CASE
8786                 WHEN MSII.CONFIRM_STATUS IN ('CMR', 'CCR', G_FAKE_CONF_STATUS_FLAG )
8787                      AND (MSII.REVISION_IMPORT_POLICY = 'L' OR (MSII.REVISION_IMPORT_POLICY IS NULL AND l_import_policy = 'L'))
8788                 THEN '1'
8789                 WHEN MSII.CONFIRM_STATUS IN ('CMR', 'CCR', G_FAKE_CONF_STATUS_FLAG )
8790                      AND (MSII.REVISION_IMPORT_POLICY = 'N' OR (MSII.REVISION_IMPORT_POLICY IS NULL AND l_import_policy = 'N'))
8791                 THEN '2'
8792                 WHEN MSII.CONFIRM_STATUS = 'CNR'
8793                 THEN '3'
8794               END
8795             FROM MTL_SYSTEM_ITEMS_INTERFACE MSII
8796             WHERE MSII.SET_PROCESS_ID = p_data_set_id
8797               AND MSII.PROCESS_FLAG = 1
8798               AND MSII.CONFIRM_STATUS IN ( 'CNR', 'CMR', 'CCR', G_FAKE_CONF_STATUS_FLAG )
8799               AND MSII.SOURCE_SYSTEM_ID = ATTRS.SOURCE_SYSTEM_ID
8800               AND MSII.SOURCE_SYSTEM_REFERENCE = ATTRS.SOURCE_SYSTEM_REFERENCE
8801               AND MSII.ORGANIZATION_ID = l_org_id
8802            )
8803         WHEN '1'
8804         THEN (SELECT MAX(REVISION) KEEP (DENSE_RANK FIRST ORDER BY EFFECTIVITY_DATE DESC)
8805               FROM MTL_ITEM_REVISIONS_B
8806               WHERE INVENTORY_ITEM_ID = ATTRS.INVENTORY_ITEM_ID
8807                 AND ORGANIZATION_ID = ATTRS.ORGANIZATION_ID)
8808         WHEN '2'
8809         THEN (SELECT REVISION
8810               FROM MTL_ITEM_REVISIONS_INTERFACE MIRI
8811               WHERE MIRI.SET_PROCESS_ID = ATTRS.DATA_SET_ID
8812                 AND MIRI.SOURCE_SYSTEM_ID = ATTRS.SOURCE_SYSTEM_ID
8813                 AND MIRI.SOURCE_SYSTEM_REFERENCE = ATTRS.SOURCE_SYSTEM_REFERENCE
8814                 AND MIRI.ORGANIZATION_ID = ATTRS.ORGANIZATION_ID
8815                 AND MIRI.REVISION IS NOT NULL
8816                 AND MIRI.EFFECTIVITY_DATE IS NOT NULL
8817                 AND UPPER(MIRI.TRANSACTION_TYPE) = 'CREATE'
8818                 AND ROWNUM = 1
8819              )
8820         WHEN '3'
8821         THEN (SELECT STARTING_REVISION
8822               FROM MTL_PARAMETERS
8823               WHERE ORGANIZATION_ID = ATTRS.ORGANIZATION_ID
8824              )
8825       END)
8826     WHERE ATTRS.PROCESS_STATUS = 1
8827       AND ATTRS.DATA_SET_ID = p_data_set_id
8828       AND ATTRS.REVISION IS NULL
8829       AND EXISTS (SELECT NULL
8830                   FROM MTL_SYSTEM_ITEMS_INTERFACE MSII
8831                   WHERE MSII.SET_PROCESS_ID = p_data_set_id
8832                     AND MSII.PROCESS_FLAG = 1
8833                     AND MSII.CONFIRM_STATUS IN ( 'CNR', 'CMR', 'CCR', G_FAKE_CONF_STATUS_FLAG )
8834                     AND MSII.SOURCE_SYSTEM_ID = ATTRS.SOURCE_SYSTEM_ID
8835                     AND MSII.SOURCE_SYSTEM_REFERENCE = ATTRS.SOURCE_SYSTEM_REFERENCE
8836                     AND MSII.ORGANIZATION_ID = l_org_id)
8837       AND EXISTS (SELECT NULL
8838                   FROM EGO_OBJ_AG_ASSOCS_B A, EGO_FND_DSC_FLX_CTX_EXT EXT
8839                   WHERE A.ATTR_GROUP_ID = EXT.ATTR_GROUP_ID
8840                     AND A.OBJECT_ID = (SELECT OBJECT_ID FROM FND_OBJECTS WHERE OBJ_NAME = 'EGO_ITEM')
8841                     AND EXT.DESCRIPTIVE_FLEX_CONTEXT_CODE = ATTRS.ATTR_GROUP_INT_NAME
8842                     AND EXT.DESCRIPTIVE_FLEXFIELD_NAME = NVL(ATTRS.ATTR_GROUP_TYPE, 'EGO_ITEMMGMT_GROUP')
8843                     AND EXT.APPLICATION_ID = 431
8844                     AND A.DATA_LEVEL = 'ITEM_REVISION_LEVEL');
8845 
8846     Debug_Conc_Log('Resolve_Child_Entities - After resolving user attrs intf table for revision' );
8847     UPDATE MTL_ITEM_REVISIONS_INTERFACE MIRI
8848       SET (REVISION, TRANSACTION_TYPE) =
8849           (SELECT
8850               (CASE
8851                 WHEN (EXISTS (SELECT NULL
8852                               FROM MTL_SYSTEM_ITEMS_INTERFACE MSII
8853                               WHERE MSII.SET_PROCESS_ID = p_data_set_id
8854                                 AND MSII.PROCESS_FLAG = 1
8855                                 AND MSII.CONFIRM_STATUS IN ('CMR', 'CCR', G_FAKE_CONF_STATUS_FLAG )
8856                                 AND (MSII.REVISION_IMPORT_POLICY = 'L' OR (MSII.REVISION_IMPORT_POLICY IS NULL AND l_import_policy = 'L'))
8857                                 AND MSII.SOURCE_SYSTEM_ID = MIRI.SOURCE_SYSTEM_ID
8858                                 AND MSII.SOURCE_SYSTEM_REFERENCE = MIRI.SOURCE_SYSTEM_REFERENCE
8859                                 AND MSII.ORGANIZATION_ID = l_org_id)
8860                      )
8861                 THEN (SELECT MAX(REVISION) KEEP (DENSE_RANK FIRST ORDER BY EFFECTIVITY_DATE DESC)
8862                       FROM MTL_ITEM_REVISIONS_B
8863                       WHERE INVENTORY_ITEM_ID = MIRI.INVENTORY_ITEM_ID
8864                         AND ORGANIZATION_ID = MIRI.ORGANIZATION_ID)
8865                 WHEN (EXISTS (SELECT NULL
8866                               FROM MTL_SYSTEM_ITEMS_INTERFACE MSII
8867                               WHERE MSII.SET_PROCESS_ID = p_data_set_id
8868                                 AND MSII.PROCESS_FLAG = 1
8869                                 AND MSII.CONFIRM_STATUS = 'CNR'
8870                                 AND MSII.SOURCE_SYSTEM_ID = MIRI.SOURCE_SYSTEM_ID
8871                                 AND MSII.SOURCE_SYSTEM_REFERENCE = MIRI.SOURCE_SYSTEM_REFERENCE
8872                                 AND MSII.ORGANIZATION_ID = l_org_id)
8873                      )
8874                 THEN (SELECT STARTING_REVISION
8875                       FROM MTL_PARAMETERS
8876                       WHERE ORGANIZATION_ID = MIRI.ORGANIZATION_ID
8877                      )
8878               END)   AS REVISION,
8879               'SYNC' AS TRANSACTION_TYPE
8880           FROM DUAL)
8881     WHERE MIRI.PROCESS_FLAG = 1
8882       AND MIRI.SET_PROCESS_ID = p_data_set_id
8883       AND MIRI.REVISION IS NULL
8884       AND EXISTS (SELECT NULL
8885                   FROM MTL_SYSTEM_ITEMS_INTERFACE MSII
8886                   WHERE MSII.SET_PROCESS_ID = p_data_set_id
8887                     AND MSII.PROCESS_FLAG = 1
8888                     AND MSII.CONFIRM_STATUS IN ('CNR', 'CMR', 'CCR', G_FAKE_CONF_STATUS_FLAG )
8889                     AND MSII.SOURCE_SYSTEM_ID = MIRI.SOURCE_SYSTEM_ID
8890                     AND MSII.SOURCE_SYSTEM_REFERENCE = MIRI.SOURCE_SYSTEM_REFERENCE
8891                     AND MSII.ORGANIZATION_ID = l_org_id);
8892 
8893     Debug_Conc_Log('Resolve_Child_Entities - After resolving item revisions interface table for revision' );
8894     -- updating item_number, item_id from MSII table
8895     UPDATE EGO_ITEM_PEOPLE_INTF EIPI
8896     SET (PROCESS_STATUS, TRANSACTION_TYPE, INVENTORY_ITEM_ID, ITEM_NUMBER) =
8897         (SELECT
8898            1,
8899            (CASE
8900               WHEN MSII.CONFIRM_STATUS = 'CNR'
8901               THEN 'CREATE'
8902               ELSE 'SYNC'
8903             END),
8904            MSII.INVENTORY_ITEM_ID,
8905            MSII.ITEM_NUMBER
8906          FROM MTL_SYSTEM_ITEMS_INTERFACE MSII
8907          WHERE MSII.SET_PROCESS_ID = p_data_set_id
8908            AND MSII.PROCESS_FLAG = 1
8909            AND MSII.CONFIRM_STATUS IN ('CNR', 'CMR', 'CCR', G_FAKE_CONF_STATUS_FLAG )
8910            AND MSII.SOURCE_SYSTEM_ID = EIPI.SOURCE_SYSTEM_ID
8911            AND MSII.SOURCE_SYSTEM_REFERENCE = EIPI.SOURCE_SYSTEM_REFERENCE
8912            AND MSII.ORGANIZATION_ID = l_org_id
8913            AND ROWNUM = 1
8914         )
8915     WHERE EIPI.PROCESS_STATUS = 0
8916       AND EIPI.DATA_SET_ID = p_data_set_id
8917       AND EXISTS (SELECT NULL
8918                   FROM MTL_SYSTEM_ITEMS_INTERFACE MSII
8919                   WHERE MSII.SET_PROCESS_ID = p_data_set_id
8920                     AND MSII.PROCESS_FLAG = 1
8921                     AND MSII.CONFIRM_STATUS IN ('CNR', 'CMR', 'CCR', G_FAKE_CONF_STATUS_FLAG)
8922                     AND MSII.SOURCE_SYSTEM_ID = EIPI.SOURCE_SYSTEM_ID
8923                     AND MSII.SOURCE_SYSTEM_REFERENCE = EIPI.SOURCE_SYSTEM_REFERENCE
8924                     AND MSII.ORGANIZATION_ID = l_org_id);
8925 
8926     Debug_Conc_Log('Resolve_Child_Entities - After resolving item people rows' );
8927     -- updating item_number, item_id from MSII table
8928     UPDATE EGO_AML_INTF EAI
8929     SET (PROCESS_FLAG, TRANSACTION_TYPE, INVENTORY_ITEM_ID, ITEM_NUMBER) =
8930         (SELECT
8931            1,
8932            (CASE
8933               WHEN UPPER(EAI.TRANSACTION_TYPE) = G_TRANS_TYPE_DELETE THEN G_TRANS_TYPE_DELETE
8934               WHEN MSII.CONFIRM_STATUS = 'CNR' THEN G_TRANS_TYPE_CREATE
8935               ELSE G_TRANS_TYPE_SYNC
8936             END),
8937            MSII.INVENTORY_ITEM_ID,
8938            MSII.ITEM_NUMBER
8939          FROM MTL_SYSTEM_ITEMS_INTERFACE MSII
8940          WHERE MSII.SET_PROCESS_ID = p_data_set_id
8941            AND MSII.PROCESS_FLAG = 1
8942            AND MSII.CONFIRM_STATUS IN ( 'CNR', 'CMR', 'CCR', G_FAKE_CONF_STATUS_FLAG )
8943            AND MSII.SOURCE_SYSTEM_ID = EAI.SOURCE_SYSTEM_ID
8944            AND MSII.SOURCE_SYSTEM_REFERENCE = EAI.SOURCE_SYSTEM_REFERENCE
8945            AND MSII.ORGANIZATION_ID = l_org_id
8946            AND ROWNUM = 1
8947         )
8948     WHERE EAI.PROCESS_FLAG = 0
8949       AND EAI.DATA_SET_ID = p_data_set_id
8950       AND EXISTS (SELECT NULL
8951                   FROM MTL_SYSTEM_ITEMS_INTERFACE MSII
8952                   WHERE MSII.SET_PROCESS_ID = p_data_set_id
8953                     AND MSII.PROCESS_FLAG = 1
8954                     AND MSII.CONFIRM_STATUS IN ('CNR', 'CMR', 'CCR', G_FAKE_CONF_STATUS_FLAG)
8955                     AND MSII.SOURCE_SYSTEM_ID = EAI.SOURCE_SYSTEM_ID
8956                     AND MSII.SOURCE_SYSTEM_REFERENCE = EAI.SOURCE_SYSTEM_REFERENCE
8957                     AND MSII.ORGANIZATION_ID = l_org_id);
8958 
8959     Debug_Conc_Log( 'Resolve_Child_Entities - After resolving aml rows' );
8960 
8961     -- updating item_number, item_id from MSII table
8962     UPDATE EGO_ITEM_ASSOCIATIONS_INTF EIAI
8963     SET (PROCESS_FLAG, TRANSACTION_TYPE, INVENTORY_ITEM_ID, ITEM_NUMBER) =
8964         (SELECT
8965            1,
8966            (CASE
8967               WHEN MSII.CONFIRM_STATUS = 'CNR'
8968               THEN 'CREATE'
8969               ELSE EIAI.TRANSACTION_TYPE
8970             END),
8971            MSII.INVENTORY_ITEM_ID,
8972            MSII.ITEM_NUMBER
8973          FROM MTL_SYSTEM_ITEMS_INTERFACE MSII
8974          WHERE MSII.SET_PROCESS_ID = p_data_set_id
8975            AND MSII.PROCESS_FLAG = 1
8976            AND MSII.CONFIRM_STATUS IN ('CNR', 'CMR', 'CCR', G_FAKE_CONF_STATUS_FLAG)
8977            AND MSII.SOURCE_SYSTEM_ID = EIAI.SOURCE_SYSTEM_ID
8978            AND MSII.SOURCE_SYSTEM_REFERENCE = EIAI.SOURCE_SYSTEM_REFERENCE
8979            AND MSII.ORGANIZATION_ID = l_org_id
8980            AND ROWNUM = 1
8981         )
8982     WHERE EIAI.PROCESS_FLAG = 0
8983       AND EIAI.BATCH_ID = p_data_set_id
8984       AND EXISTS (SELECT NULL
8985                   FROM MTL_SYSTEM_ITEMS_INTERFACE MSII
8986                   WHERE MSII.SET_PROCESS_ID = p_data_set_id
8987                     AND MSII.PROCESS_FLAG = 1
8988                     AND MSII.CONFIRM_STATUS IN ('CNR', 'CMR', 'CCR', G_FAKE_CONF_STATUS_FLAG)
8989                     AND MSII.SOURCE_SYSTEM_ID = EIAI.SOURCE_SYSTEM_ID
8990                     AND MSII.SOURCE_SYSTEM_REFERENCE = EIAI.SOURCE_SYSTEM_REFERENCE
8991                     AND MSII.ORGANIZATION_ID = l_org_id);
8992 
8993     Debug_Conc_Log('Resolve_Child_Entities - After resolving intersection rows' );
8994     -- getting security predicate
8995     EGO_DATA_SECURITY.get_security_predicate(
8996       p_api_version      => 1.0
8997      ,p_function         => 'EGO_VIEW_SS_ITEM_XREFS'
8998      ,p_object_name      => 'EGO_ITEM'
8999      ,p_user_name        => l_party_name
9000      ,p_statement_type   => 'EXISTS'
9001      ,p_pk1_alias        => 'MCR.INVENTORY_ITEM_ID'
9002      ,p_pk2_alias        => l_org_id
9003      ,x_predicate        => l_security_predicate
9004      ,x_return_status    => l_return_status
9005     );
9006 
9007     IF l_security_predicate IS NULL THEN
9008       l_security_predicate := ' AND 1=1 ';
9009     ELSE
9010       l_security_predicate := ' AND '||l_security_predicate;
9011     END IF;
9012 
9013     Debug_Conc_Log('Resolve_Child_Entities - Security Predicate - '||l_security_predicate);
9014 
9015     -- updating all the child entities, which do not have parent in mtl_system_items_interface
9016     -- updating the items and org assignments
9017 
9018     -- Note that using q'# is a new feature of 10g. By using this syntax, we can put as many single quotes within
9019     -- the string. for example q'# This is Devendra's code #'
9020     l_sql := q'#
9021                UPDATE MTL_SYSTEM_ITEMS_INTERFACE MSII
9022                  SET (PROCESS_FLAG, TRANSACTION_TYPE, INVENTORY_ITEM_ID) =
9023                      (SELECT
9024                         1,
9025                         NVL(MSII.TRANSACTION_TYPE, 'SYNC'),
9026                         MCR.INVENTORY_ITEM_ID
9027                       FROM MTL_CROSS_REFERENCES_B MCR
9028                       WHERE MCR.CROSS_REFERENCE_TYPE = 'SS_ITEM_XREF'
9029                         AND MCR.CROSS_REFERENCE = MSII.SOURCE_SYSTEM_REFERENCE
9030                         AND MCR.SOURCE_SYSTEM_ID = MSII.SOURCE_SYSTEM_ID
9031                         AND SYSDATE BETWEEN NVL(MCR.START_DATE_ACTIVE, SYSDATE - 1) AND NVL(MCR.END_DATE_ACTIVE, SYSDATE + 1)
9032                         AND ROWNUM = 1
9033                      )
9034                WHERE MSII.SET_PROCESS_ID = :p_data_set_id
9035                  AND MSII.PROCESS_FLAG = 0
9036                  -- PICK ONLY CHILD ITEMS
9037                  AND EXISTS (SELECT NULL
9038                              FROM MTL_PARAMETERS MP
9039                              WHERE MP.MASTER_ORGANIZATION_ID = :l_org_id
9040                                AND MP.ORGANIZATION_ID <> MP.MASTER_ORGANIZATION_ID
9041                                AND MP.ORGANIZATION_ID = MSII.ORGANIZATION_ID)
9042                  -- CHILD MUST NOT HAVE A MASTER RECORD IN CURRENT BATCH
9043                  AND NOT EXISTS (SELECT NULL
9044                                  FROM MTL_SYSTEM_ITEMS_INTERFACE MSII2
9045                                  WHERE MSII2.PROCESS_FLAG in (0, 1, 33390,33391)
9046                                    AND MSII2.SET_PROCESS_ID = :p_data_set_id1
9047                                    AND MSII2.SOURCE_SYSTEM_ID = MSII.SOURCE_SYSTEM_ID
9048                                    AND MSII2.SOURCE_SYSTEM_REFERENCE = MSII.SOURCE_SYSTEM_REFERENCE
9049                                    AND MSII2.ORGANIZATION_ID = :l_org_id1
9050                                 )
9051                  -- HAS A CROSS REFERENCE
9052                  AND EXISTS (SELECT NULL
9053                              FROM MTL_CROSS_REFERENCES_B MCR
9054                              WHERE MCR.CROSS_REFERENCE_TYPE = 'SS_ITEM_XREF'
9055                                AND MCR.CROSS_REFERENCE = MSII.SOURCE_SYSTEM_REFERENCE
9056                                AND MCR.SOURCE_SYSTEM_ID = MSII.SOURCE_SYSTEM_ID
9057                                AND SYSDATE BETWEEN NVL(MCR.START_DATE_ACTIVE, SYSDATE - 1) AND NVL(MCR.END_DATE_ACTIVE, SYSDATE + 1)
9058                              #'||l_security_predicate||')';
9059 
9060     EXECUTE IMMEDIATE l_sql USING p_data_set_id, l_org_id, p_data_set_id, l_org_id;
9061 
9062     Debug_Conc_Log('Resolve_Child_Entities - After updating items intf table for child items that has XXref' );
9063 
9064     -- updating the item revisions
9065     l_sql := q'#
9066                UPDATE MTL_ITEM_REVISIONS_INTERFACE MIRI
9067                  SET (PROCESS_FLAG, TRANSACTION_TYPE, INVENTORY_ITEM_ID) =
9068                      (SELECT
9069                         1,
9070                         NVL(MIRI.TRANSACTION_TYPE, 'SYNC'),
9071                         MCR.INVENTORY_ITEM_ID
9072                       FROM MTL_CROSS_REFERENCES_B MCR
9073                       WHERE MCR.CROSS_REFERENCE_TYPE = 'SS_ITEM_XREF'
9074                         AND MCR.CROSS_REFERENCE = MIRI.SOURCE_SYSTEM_REFERENCE
9075                         AND MCR.SOURCE_SYSTEM_ID = MIRI.SOURCE_SYSTEM_ID
9076                         AND (MCR.START_DATE_ACTIVE < SYSDATE OR MCR.START_DATE_ACTIVE IS NULL)
9077                         AND (MCR.END_DATE_ACTIVE > SYSDATE OR MCR.END_DATE_ACTIVE IS NULL)
9078                         AND ROWNUM = 1
9079                      )
9080                WHERE MIRI.SET_PROCESS_ID = :p_data_set_id
9081                  AND MIRI.PROCESS_FLAG = 0
9082                  -- MUST NOT HAVE A MASTER ITEM RECORD IN CURRENT BATCH
9083                  AND NOT EXISTS (SELECT NULL
9084                                  FROM MTL_SYSTEM_ITEMS_INTERFACE MSII
9085                                  WHERE MSII.PROCESS_FLAG IN (0, 1, 33390,33391)
9086                                    AND MSII.SET_PROCESS_ID = :p_data_set_id1
9087                                    AND MSII.SOURCE_SYSTEM_ID =  MIRI.SOURCE_SYSTEM_ID
9088                                    AND MSII.SOURCE_SYSTEM_REFERENCE = MIRI.SOURCE_SYSTEM_REFERENCE
9089                                    AND MSII.ORGANIZATION_ID = :l_org_id
9090                                 )
9091                  -- HAS A CROSS REFERENCE
9092                  AND EXISTS (SELECT NULL
9093                              FROM MTL_CROSS_REFERENCES_B MCR
9094                              WHERE MCR.CROSS_REFERENCE_TYPE = 'SS_ITEM_XREF'
9095                                AND MCR.CROSS_REFERENCE = MIRI.SOURCE_SYSTEM_REFERENCE
9096                                AND MCR.SOURCE_SYSTEM_ID = MIRI.SOURCE_SYSTEM_ID
9097                                AND (MCR.START_DATE_ACTIVE < SYSDATE OR MCR.START_DATE_ACTIVE IS NULL)
9098                                AND (MCR.END_DATE_ACTIVE > SYSDATE OR MCR.END_DATE_ACTIVE IS NULL)
9099                              #'||l_security_predicate||')';
9100 
9101     EXECUTE IMMEDIATE l_sql USING p_data_set_id, p_data_set_id, l_org_id;
9102 
9103     Debug_Conc_Log('Resolve_Child_Entities - After updating revisions intf table for items that has XXref' );
9104 
9105     -- updating the item revisions where revision is null and revision_import_policy is Update Latest
9106     -- Bug: 5476972
9107     IF l_import_policy = 'L' THEN
9108       l_sql := q'#
9109                  UPDATE MTL_ITEM_REVISIONS_INTERFACE MIRI
9110                    SET (REVISION, TRANSACTION_TYPE) =
9111                        (SELECT MAX(REVISION) KEEP (DENSE_RANK FIRST ORDER BY EFFECTIVITY_DATE DESC), 'UPDATE'
9112                         FROM MTL_ITEM_REVISIONS_B
9113                         WHERE INVENTORY_ITEM_ID = MIRI.INVENTORY_ITEM_ID
9114                           AND ORGANIZATION_ID = MIRI.ORGANIZATION_ID)
9115                  WHERE MIRI.SET_PROCESS_ID = :p_data_set_id
9116                    AND MIRI.PROCESS_FLAG = 1
9117                    AND MIRI.REVISION IS NULL
9118                    -- MUST NOT HAVE A MASTER ITEM RECORD IN CURRENT BATCH
9119                    AND NOT EXISTS (SELECT NULL
9120                                    FROM MTL_SYSTEM_ITEMS_INTERFACE MSII
9121                                    WHERE MSII.PROCESS_FLAG IN (0, 1, 33390,33391)
9122                                      AND MSII.SET_PROCESS_ID = :p_data_set_id1
9123                                      AND MSII.SOURCE_SYSTEM_ID =  MIRI.SOURCE_SYSTEM_ID
9124                                      AND MSII.SOURCE_SYSTEM_REFERENCE = MIRI.SOURCE_SYSTEM_REFERENCE
9125                                      AND MSII.ORGANIZATION_ID = :l_org_id
9126                                   )
9127                    -- HAS A CROSS REFERENCE
9128                    AND EXISTS (SELECT NULL
9129                                FROM MTL_CROSS_REFERENCES_B MCR
9130                                WHERE MCR.CROSS_REFERENCE_TYPE = 'SS_ITEM_XREF'
9131                                  AND MCR.CROSS_REFERENCE = MIRI.SOURCE_SYSTEM_REFERENCE
9132                                  AND MCR.SOURCE_SYSTEM_ID = MIRI.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                                #'||l_security_predicate||')';
9136 
9137       EXECUTE IMMEDIATE l_sql USING p_data_set_id, p_data_set_id, l_org_id;
9138 
9139       Debug_Conc_Log('Resolve_Child_Entities - After updating REVISION in revisions intf table for items that has XXref' );
9140     END IF;
9141 
9142     -- updating the item category assignments
9143     l_sql := q'#
9144                UPDATE MTL_ITEM_CATEGORIES_INTERFACE MICI
9145                  SET (PROCESS_FLAG, TRANSACTION_TYPE, INVENTORY_ITEM_ID) =
9146                      (SELECT
9147                         1,
9148                         MICI.TRANSACTION_TYPE,
9149                         MCR.INVENTORY_ITEM_ID
9150                       FROM MTL_CROSS_REFERENCES_B MCR
9151                       WHERE MCR.CROSS_REFERENCE_TYPE = 'SS_ITEM_XREF'
9152                         AND MCR.CROSS_REFERENCE = MICI.SOURCE_SYSTEM_REFERENCE
9153                         AND MCR.SOURCE_SYSTEM_ID = MICI.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                         AND ROWNUM = 1
9157                      )
9158                WHERE MICI.SET_PROCESS_ID = :p_data_set_id
9159                  AND MICI.PROCESS_FLAG = 0
9160                  -- MUST NOT HAVE A MASTER ITEM RECORD IN CURRENT BATCH
9161                  AND NOT EXISTS (SELECT NULL
9162                                  FROM MTL_SYSTEM_ITEMS_INTERFACE MSII
9163                                  WHERE MSII.PROCESS_FLAG IN (0, 1, 33390,33391)
9164                                    AND MSII.SET_PROCESS_ID = :p_data_set_id1
9165                                    AND MSII.SOURCE_SYSTEM_ID =  MICI.SOURCE_SYSTEM_ID
9166                                    AND MSII.SOURCE_SYSTEM_REFERENCE = MICI.SOURCE_SYSTEM_REFERENCE
9167                                    AND MSII.ORGANIZATION_ID = :l_org_id
9168                                 )
9169                  -- HAS A CROSS REFERENCE
9170                  AND EXISTS (SELECT NULL
9171                              FROM MTL_CROSS_REFERENCES_B MCR
9172                              WHERE MCR.CROSS_REFERENCE_TYPE = 'SS_ITEM_XREF'
9173                                AND MCR.CROSS_REFERENCE = MICI.SOURCE_SYSTEM_REFERENCE
9174                                AND MCR.SOURCE_SYSTEM_ID = MICI.SOURCE_SYSTEM_ID
9175                                AND (MCR.START_DATE_ACTIVE < SYSDATE OR MCR.START_DATE_ACTIVE IS NULL)
9176                                AND (MCR.END_DATE_ACTIVE > SYSDATE OR MCR.END_DATE_ACTIVE IS NULL)
9177                             #'||l_security_predicate||')';
9178 
9179     EXECUTE IMMEDIATE l_sql USING p_data_set_id, p_data_set_id, l_org_id;
9180 
9181     Debug_Conc_Log('Resolve_Child_Entities - After updating categories intf table for items that has XXref');
9182 
9183     -- updating the item people
9184     l_sql := q'#
9185                UPDATE EGO_ITEM_PEOPLE_INTF EIPI
9186                  SET (PROCESS_STATUS, TRANSACTION_TYPE, INVENTORY_ITEM_ID) =
9187                      (SELECT
9188                         1,
9189                         NVL(EIPI.TRANSACTION_TYPE, 'SYNC'),
9190                         MCR.INVENTORY_ITEM_ID
9191                       FROM MTL_CROSS_REFERENCES_B MCR
9192                       WHERE MCR.CROSS_REFERENCE_TYPE = 'SS_ITEM_XREF'
9193                         AND MCR.CROSS_REFERENCE = EIPI.SOURCE_SYSTEM_REFERENCE
9194                         AND MCR.SOURCE_SYSTEM_ID = EIPI.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                         AND ROWNUM = 1
9198                      )
9199                WHERE EIPI.DATA_SET_ID = :p_data_set_id
9200                  AND EIPI.PROCESS_STATUS = 0
9201                  -- MUST NOT HAVE A MASTER ITEM RECORD IN CURRENT BATCH
9202                  AND NOT EXISTS (SELECT NULL
9203                                  FROM MTL_SYSTEM_ITEMS_INTERFACE MSII
9204                                  WHERE MSII.PROCESS_FLAG IN (0, 1, 33390,33391)
9205                                    AND MSII.SET_PROCESS_ID = :p_data_set_id1
9206                                    AND MSII.SOURCE_SYSTEM_ID =  EIPI.SOURCE_SYSTEM_ID
9207                                    AND MSII.SOURCE_SYSTEM_REFERENCE = EIPI.SOURCE_SYSTEM_REFERENCE
9208                                    AND MSII.ORGANIZATION_ID = :l_org_id
9209                                 )
9210                  -- HAS A CROSS REFERENCE
9211                  AND EXISTS (SELECT NULL
9212                              FROM MTL_CROSS_REFERENCES_B MCR
9213                              WHERE MCR.CROSS_REFERENCE_TYPE = 'SS_ITEM_XREF'
9214                                AND MCR.CROSS_REFERENCE = EIPI.SOURCE_SYSTEM_REFERENCE
9215                                AND MCR.SOURCE_SYSTEM_ID = EIPI.SOURCE_SYSTEM_ID
9216                                AND (MCR.START_DATE_ACTIVE < SYSDATE OR MCR.START_DATE_ACTIVE IS NULL)
9217                                AND (MCR.END_DATE_ACTIVE > SYSDATE OR MCR.END_DATE_ACTIVE IS NULL)
9218                             #'||l_security_predicate||')';
9219 
9220     EXECUTE IMMEDIATE l_sql USING p_data_set_id, p_data_set_id, l_org_id;
9221 
9222     Debug_Conc_Log('Resolve_Child_Entities - After updating item people intf table for items that has XXref');
9223 
9224     -- updating the item user defined attributes interface
9225     l_sql := q'#
9226                UPDATE EGO_ITM_USR_ATTR_INTRFC EIUAI
9227                  SET (PROCESS_STATUS, TRANSACTION_TYPE, INVENTORY_ITEM_ID) =
9228                      (SELECT
9229                         1,
9230                         NVL(EIUAI.TRANSACTION_TYPE, 'SYNC'),
9231                         MCR.INVENTORY_ITEM_ID
9232                       FROM MTL_CROSS_REFERENCES_B MCR
9233                       WHERE MCR.CROSS_REFERENCE_TYPE = 'SS_ITEM_XREF'
9234                         AND MCR.CROSS_REFERENCE = EIUAI.SOURCE_SYSTEM_REFERENCE
9235                         AND MCR.SOURCE_SYSTEM_ID = EIUAI.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                         AND ROWNUM = 1
9239                      )
9240                WHERE EIUAI.DATA_SET_ID = :p_data_set_id
9241                  AND EIUAI.PROCESS_STATUS = 0
9242                  -- MUST NOT HAVE A MASTER ITEM RECORD IN CURRENT BATCH
9243                  AND NOT EXISTS (SELECT NULL
9244                                  FROM MTL_SYSTEM_ITEMS_INTERFACE MSII
9245                                  WHERE MSII.PROCESS_FLAG IN (0, 1, 33390, 33391)
9246                                    AND MSII.SET_PROCESS_ID = :p_data_set_id1
9247                                    AND MSII.SOURCE_SYSTEM_ID =  EIUAI.SOURCE_SYSTEM_ID
9248                                    AND MSII.SOURCE_SYSTEM_REFERENCE = EIUAI.SOURCE_SYSTEM_REFERENCE
9249                                    AND MSII.ORGANIZATION_ID = :l_org_id
9250                                 )
9251                  -- HAS A CROSS REFERENCE
9252                  AND EXISTS (SELECT NULL
9253                              FROM MTL_CROSS_REFERENCES_B MCR
9254                              WHERE MCR.CROSS_REFERENCE_TYPE = 'SS_ITEM_XREF'
9255                                AND MCR.CROSS_REFERENCE = EIUAI.SOURCE_SYSTEM_REFERENCE
9256                                AND MCR.SOURCE_SYSTEM_ID = EIUAI.SOURCE_SYSTEM_ID
9257                                AND (MCR.START_DATE_ACTIVE < SYSDATE OR MCR.START_DATE_ACTIVE IS NULL)
9258                                AND (MCR.END_DATE_ACTIVE > SYSDATE OR MCR.END_DATE_ACTIVE IS NULL)
9259                             #'||l_security_predicate||')';
9260 
9261     EXECUTE IMMEDIATE l_sql USING p_data_set_id, p_data_set_id, l_org_id;
9262 
9263     Debug_Conc_Log('Resolve_Child_Entities - After updating user attrs intf table for items that has XXref');
9264 
9265     -- updating the item AML interface
9266     l_sql := q'#
9267                UPDATE EGO_AML_INTF EAI
9268                  SET (PROCESS_FLAG, TRANSACTION_TYPE, INVENTORY_ITEM_ID) =
9269                      (SELECT
9270                         1,
9271                         NVL(EAI.TRANSACTION_TYPE, 'SYNC'),
9272                         MCR.INVENTORY_ITEM_ID
9273                       FROM MTL_CROSS_REFERENCES_B MCR
9274                       WHERE MCR.CROSS_REFERENCE_TYPE = 'SS_ITEM_XREF'
9275                         AND MCR.CROSS_REFERENCE = EAI.SOURCE_SYSTEM_REFERENCE
9276                         AND MCR.SOURCE_SYSTEM_ID = EAI.SOURCE_SYSTEM_ID
9277                         AND (MCR.START_DATE_ACTIVE < SYSDATE OR MCR.START_DATE_ACTIVE IS NULL)
9278                         AND (MCR.END_DATE_ACTIVE > SYSDATE OR MCR.END_DATE_ACTIVE IS NULL)
9279                         AND ROWNUM = 1
9280                      )
9281                WHERE EAI.DATA_SET_ID = :p_data_set_id
9282                  AND EAI.PROCESS_FLAG = 0
9283                  -- MUST NOT HAVE A MASTER ITEM RECORD IN CURRENT BATCH
9284                  AND NOT EXISTS (SELECT NULL
9285                                  FROM MTL_SYSTEM_ITEMS_INTERFACE MSII
9286                                  WHERE MSII.PROCESS_FLAG IN (0, 1, 33390, 33391)
9287                                    AND MSII.SET_PROCESS_ID = :p_data_set_id1
9288                                    AND MSII.SOURCE_SYSTEM_ID =  EAI.SOURCE_SYSTEM_ID
9289                                    AND MSII.SOURCE_SYSTEM_REFERENCE = EAI.SOURCE_SYSTEM_REFERENCE
9290                                    AND MSII.ORGANIZATION_ID = :l_org_id
9291                                 )
9292                  -- HAS A CROSS REFERENCE
9293                  AND EXISTS (SELECT NULL
9294                              FROM MTL_CROSS_REFERENCES_B MCR
9295                              WHERE MCR.CROSS_REFERENCE_TYPE = 'SS_ITEM_XREF'
9296                                AND MCR.CROSS_REFERENCE = EAI.SOURCE_SYSTEM_REFERENCE
9297                                AND MCR.SOURCE_SYSTEM_ID = EAI.SOURCE_SYSTEM_ID
9298                                AND (MCR.START_DATE_ACTIVE < SYSDATE OR MCR.START_DATE_ACTIVE IS NULL)
9299                                AND (MCR.END_DATE_ACTIVE > SYSDATE OR MCR.END_DATE_ACTIVE IS NULL)
9300                             #'||l_security_predicate||')';
9301 
9302     EXECUTE IMMEDIATE l_sql USING p_data_set_id, p_data_set_id, l_org_id;
9303 
9304     Debug_Conc_Log('Resolve_Child_Entities - After updating aml intf table for items that has XXref');
9305 
9306     -- updating the item intersections
9307     l_sql := q'#
9308                UPDATE EGO_ITEM_ASSOCIATIONS_INTF EIAI
9309                  SET (PROCESS_FLAG, TRANSACTION_TYPE, INVENTORY_ITEM_ID) =
9310                      (SELECT
9311                         1,
9312                         EIAI.TRANSACTION_TYPE,
9313                         MCR.INVENTORY_ITEM_ID
9314                       FROM MTL_CROSS_REFERENCES_B MCR
9315                       WHERE MCR.CROSS_REFERENCE_TYPE = 'SS_ITEM_XREF'
9316                         AND MCR.CROSS_REFERENCE = EIAI.SOURCE_SYSTEM_REFERENCE
9317                         AND MCR.SOURCE_SYSTEM_ID = EIAI.SOURCE_SYSTEM_ID
9318                         AND (MCR.START_DATE_ACTIVE < SYSDATE OR MCR.START_DATE_ACTIVE IS NULL)
9319                         AND (MCR.END_DATE_ACTIVE > SYSDATE OR MCR.END_DATE_ACTIVE IS NULL)
9320                         AND ROWNUM = 1
9321                      )
9322                WHERE EIAI.BATCH_ID = :p_data_set_id
9323                  AND EIAI.PROCESS_FLAG = 0
9324                  -- MUST NOT HAVE A MASTER ITEM RECORD IN CURRENT BATCH
9325                  AND NOT EXISTS (SELECT NULL
9326                                  FROM MTL_SYSTEM_ITEMS_INTERFACE MSII
9327                                  WHERE MSII.PROCESS_FLAG IN (0, 1, 33390,33391)
9328                                    AND MSII.SET_PROCESS_ID = :p_data_set_id1
9329                                    AND MSII.SOURCE_SYSTEM_ID =  EIAI.SOURCE_SYSTEM_ID
9330                                    AND MSII.SOURCE_SYSTEM_REFERENCE = EIAI.SOURCE_SYSTEM_REFERENCE
9331                                    AND MSII.ORGANIZATION_ID = :l_org_id
9332                                 )
9333                  -- HAS A CROSS REFERENCE
9334                  AND EXISTS (SELECT NULL
9335                              FROM MTL_CROSS_REFERENCES_B MCR
9336                              WHERE MCR.CROSS_REFERENCE_TYPE = 'SS_ITEM_XREF'
9337                                AND MCR.CROSS_REFERENCE = EIAI.SOURCE_SYSTEM_REFERENCE
9338                                AND MCR.SOURCE_SYSTEM_ID = EIAI.SOURCE_SYSTEM_ID
9339                                AND (MCR.START_DATE_ACTIVE < SYSDATE OR MCR.START_DATE_ACTIVE IS NULL)
9340                                AND (MCR.END_DATE_ACTIVE > SYSDATE OR MCR.END_DATE_ACTIVE IS NULL)
9341                             #'||l_security_predicate||')';
9342 
9343     EXECUTE IMMEDIATE l_sql USING p_data_set_id, p_data_set_id, l_org_id;
9344 
9345     Debug_Conc_Log('Resolve_Child_Entities - After updating intersections intf table for items that has XXref');
9346 
9347     UPDATE MTL_SYSTEM_ITEMS_INTERFACE
9348     SET REQUEST_ID = CASE PROCESS_FLAG
9349                      WHEN 33390 THEN l_request_id
9350                      WHEN 33391 THEN l_request_id
9351                      ELSE REQUEST_ID
9352                      END,
9353         PROCESS_FLAG = CASE PROCESS_FLAG
9354                        WHEN 33390 THEN 3
9355                        WHEN 33391 THEN 3
9356                        ELSE PROCESS_FLAG
9357                        END,
9358         CONFIRM_STATUS = SUBSTR(CONFIRM_STATUS, 1, 2)
9359     WHERE SET_PROCESS_ID = p_data_set_id
9360       AND PROCESS_FLAG IN (1, 33390, 33391)
9361       AND CONFIRM_STATUS IN ('CNR', 'CMR', 'CCR')
9362       AND ORGANIZATION_ID = l_org_id;
9363     Debug_Conc_Log( 'Resolve_Child_Entities - Resolved pre-IOI process flag, request_id for ' || SQL%ROWCOUNT || ' rows' );
9364 
9365     /*
9366      * Note that setting the process flag to 7 does not interfere with the source system cross-reference
9367      * import because that bulk-loader looks for process flag 7 with the request id of the calling request.
9368      * Since both that code (Process_SSXref_Intf_Rows) and this chunk are executed within the auspices of
9369      * the same concurrent request, the cross-ref import will work correctly.
9370      */
9371     UPDATE MTL_SYSTEM_ITEMS_INTERFACE
9372     SET REQUEST_ID = l_request_id
9373       , PROCESS_FLAG = CASE PROCESS_FLAG
9374                        WHEN 33390 THEN 3
9375                        WHEN 33391 THEN 3
9376                        ELSE 7
9377                        END
9378     WHERE SET_PROCESS_ID = p_data_set_id
9379       AND PROCESS_FLAG IN (1, 33390, 33391)
9380       AND CONFIRM_STATUS IN ( G_FAKE_CONF_STATUS_FLAG, G_CONF_MATCH_FAKE, G_CONF_XREF_FAKE )
9381       AND ORGANIZATION_ID = l_org_id;
9382     Debug_Conc_Log( 'Resolve_Child_Entities - Stamped request_id and final process flag on ' || SQL%ROWCOUNT || ' inserted rows' );
9383 
9384     IF l_enabled_for_data_pool = 'N' THEN
9385       Debug_Conc_Log('Resolve_Child_Entities - Calling Merge_Batch_For_Import');
9386       Merge_Batch_For_Import(p_data_set_id, l_org_id);
9387       Debug_Conc_Log('Resolve_Child_Entities - Done Merge_Batch_For_Import');
9388 
9389       Debug_Conc_Log('Resolve_Child_Entities - Calling Clean_Up_UDA_Row_Idents');
9390       Clean_Up_UDA_Row_Idents( p_batch_id            => p_data_set_id,
9391                                p_process_status      => 1,
9392                                p_ignore_item_num_upd => FND_API.G_FALSE,
9393                                p_commit              => FND_API.G_FALSE );
9394 
9395       Debug_Conc_Log('Resolve_Child_Entities - Clean_Up_UDA_Row_Idents Done.');
9396     ELSE
9397       Debug_Conc_Log('Resolve_Child_Entities - Not calling Merge_Batch_For_Import, because this batch is enabled for data pool');
9398     END IF;
9399 
9400     Debug_Conc_Log('Resolve_Child_Entities - Resolving Style_Item_Flag');
9401     UPDATE MTL_SYSTEM_ITEMS_INTERFACE msii
9402     SET (STYLE_ITEM_FLAG, STYLE_ITEM_ID) = (SELECT
9403                                               DECODE(MAX(NVL(msik.STYLE_ITEM_FLAG, '$NULL$')),
9404                                                      '$NULL$', msii.STYLE_ITEM_FLAG,
9405                                                      NULL, msii.STYLE_ITEM_FLAG,
9406                                                      'N', 'N',
9407                                                      'Y', 'Y'
9408                                                     ),
9409                                               NVL(MAX(msik.STYLE_ITEM_ID), msii.STYLE_ITEM_ID)
9410                                             FROM MTL_SYSTEM_ITEMS_KFV msik, MTL_PARAMETERS mp
9411                                             WHERE (msii.INVENTORY_ITEM_ID = msik.INVENTORY_ITEM_ID
9412                                                 OR msii.ITEM_NUMBER = msik.CONCATENATED_SEGMENTS)
9413                                               AND msik.ORGANIZATION_ID = mp.MASTER_ORGANIZATION_ID
9414                                               AND msii.ORGANIZATION_ID = mp.ORGANIZATION_ID
9415                                            )
9416     WHERE SET_PROCESS_ID = p_data_set_id
9417       AND PROCESS_FLAG   = 1;
9418 
9419     Debug_Conc_Log('Resolve_Child_Entities - Done Resolving Style_Item_Flag, rows processed='||SQL%ROWCOUNT);
9420 
9421     Debug_Conc_Log('Resolve_Child_Entities END');
9422     IF FND_API.G_TRUE = p_commit THEN
9423       Debug_Conc_Log('Resolve_Child_Entities COMMITING');
9424       COMMIT;
9425     END IF;
9426 
9427   END Resolve_Child_Entities;
9428 
9429     PROCEDURE Stamp_Row_RequestId( p_request_id    IN  MTL_SYSTEM_ITEMS_INTERFACE.REQUEST_ID%TYPE
9430                                  , p_target_rowid  IN  UROWID
9431                                  )
9432     IS
9433     BEGIN
9434         IF p_request_id IS NULL THEN RETURN; END IF;
9435 
9436         SAVEPOINT do_stamp_row;
9437 
9438         UPDATE  MTL_SYSTEM_ITEMS_INTERFACE MSII
9439         SET     REQUEST_ID = p_request_id
9440         WHERE   MSII.ROWID              = p_target_rowid
9441            AND  PROCESS_FLAG            = 7
9442            AND  (   SOURCE_SYSTEM_ID    IS NOT NULL
9443                 OR  SOURCE_SYSTEM_REFERENCE IS NOT NULL
9444                 );
9445 
9446         IF 1 <> SQL%ROWCOUNT THEN
9447             ROLLBACK TO do_stamp_row;
9448 --      ELSE
9449 --          COMMIT;
9450         END IF;
9451 
9452         RETURN;
9453     END;
9454 
9455 
9456     PROCEDURE Stamp_RequestId_For_ReImport( p_request_id    IN  MTL_SYSTEM_ITEMS_INTERFACE.REQUEST_ID%TYPE )
9457     IS
9458         l_index     PLS_INTEGER;
9459     BEGIN
9460         IF G_MSII_REIMPORT_ROWS IS NOT NULL THEN
9461             l_index := G_MSII_REIMPORT_ROWS.FIRST;
9462             WHILE l_index IS NOT NULL LOOP
9463                 UPDATE MTL_SYSTEM_ITEMS_INTERFACE
9464                     SET REQUEST_ID = p_request_id
9465                 WHERE   ROWID = G_MSII_REIMPORT_ROWS( l_index );
9466                 l_index := G_MSII_REIMPORT_ROWS.next( l_index );
9467             END LOOP;
9468             G_MSII_REIMPORT_ROWS := NULL;
9469         END IF;
9470     END;
9471 
9472     PROCEDURE Log_Error_For_ReImport(p_request_id    IN  MTL_SYSTEM_ITEMS_INTERFACE.REQUEST_ID%TYPE
9473                                     , p_target_rowid  IN  UROWID
9474                                     , p_err_msg       IN  VARCHAR2
9475                                     )
9476     IS
9477       l_org_id            NUMBER;
9478       l_transaction_id    NUMBER;
9479       dumm_status         VARCHAR2(100);
9480       l_user_id           NUMBER := FND_GLOBAL.USER_ID;
9481       l_login_id          NUMBER := FND_GLOBAL.LOGIN_ID;
9482       l_prog_appid        NUMBER := FND_GLOBAL.PROG_APPL_ID;
9483       l_prog_id           NUMBER := FND_GLOBAL.CONC_PROGRAM_ID;
9484       l_err_text          VARCHAR2(4000);
9485     BEGIN
9486       UPDATE MTL_SYSTEM_ITEMS_INTERFACE
9487       SET REQUEST_ID = p_request_id
9488       WHERE ROWID = p_target_rowid
9489       RETURNING ORGANIZATION_ID, TRANSACTION_ID
9490       INTO l_org_id, l_transaction_id;
9491 
9492       dumm_status  := INVPUOPI.mtl_log_interface_err(
9493                             l_org_id
9494                            ,l_user_id
9495                            ,l_login_id
9496                            ,l_prog_appid
9497                            ,l_prog_id
9498                            ,p_request_id
9499                            ,l_transaction_id
9500                            ,p_err_msg
9501                            ,'GLOBAL_TRADE_ITEM_NUMBER'
9502                            ,'MTL_SYSTEM_ITEMS_INTERFACE'
9503                            ,'INV_IOI_ERR_FAIL4REIMPORT'--bug 11894684, replace INV_IOI_ERR
9504                            ,l_err_text);
9505     EXCEPTION WHEN OTHERS THEN
9506       NULL;
9507     END Log_Error_For_ReImport;
9508 
9509     PROCEDURE Prepare_Row_For_ReImport
9510         (   p_batch_id          IN          MTL_SYSTEM_ITEMS_INTERFACE.SET_PROCESS_ID%TYPE
9511         ,   p_organization_id   IN          MTL_SYSTEM_ITEMS_INTERFACE.ORGANIZATION_ID%TYPE
9512         ,   p_target_rowid      IN          UROWID
9513         ,   x_return_code       OUT NOCOPY  NUMBER
9514         ,   x_err_msg           OUT NOCOPY  VARCHAR2
9515         )
9516     IS
9517         l_process_flag      MTL_SYSTEM_ITEMS_INTERFACE.PROCESS_FLAG%TYPE;
9518         l_ssr               MTL_SYSTEM_ITEMS_INTERFACE.SOURCE_SYSTEM_REFERENCE%TYPE;
9519         l_ss_id             MTL_SYSTEM_ITEMS_INTERFACE.SOURCE_SYSTEM_ID%TYPE;
9520         l_ssr_desc          MTL_SYSTEM_ITEMS_INTERFACE.SOURCE_SYSTEM_REFERENCE_DESC%TYPE;
9521         l_batch_ss_id       EGO_IMPORT_BATCHES_B.SOURCE_SYSTEM_ID%TYPE;
9522         l_request_id        MTL_SYSTEM_ITEMS_INTERFACE.REQUEST_ID%TYPE;
9523         l_org_id            MTL_SYSTEM_ITEMS_INTERFACE.ORGANIZATION_ID%TYPE;
9524         l_item_number       MTL_SYSTEM_ITEMS_INTERFACE.ITEM_NUMBER%TYPE;
9525         l_item_id           MTL_SYSTEM_ITEMS_INTERFACE.INVENTORY_ITEM_ID%TYPE;
9526         l_ssxref_only       EGO_IMPORT_OPTION_SETS.IMPORT_XREF_ONLY%TYPE;
9527 
9528         l_is_pdh_batch      BOOLEAN;
9529         l_is_reimport       BOOLEAN;
9530         l_is_ssxref_only    BOOLEAN;
9531         l_reimport_process_status  MTL_SYSTEM_ITEMS_INTERFACE.PROCESS_FLAG%TYPE;
9532         l_priv_exists       VARCHAR2(1);
9533         l_msg_text          VARCHAR2(4000);
9534         l_xref_item_number  MTL_SYSTEM_ITEMS_INTERFACE.ITEM_NUMBER%TYPE;
9535         l_xref_item_id      MTL_SYSTEM_ITEMS_INTERFACE.INVENTORY_ITEM_ID%TYPE;
9536         l_xref_desc         MTL_CROSS_REFERENCES.DESCRIPTION%TYPE;
9537         l_org_code          MTL_SYSTEM_ITEMS_INTERFACE.ORGANIZATION_CODE%TYPE;
9538         l_party_name        VARCHAR2(1000); -- Bug: 5355759
9539     BEGIN
9540         x_return_code       := 0;
9541         BEGIN     -- CHECK THAT BATCH HAS A HEADER
9542             SELECT  BATCH.SOURCE_SYSTEM_ID
9543                 ,   BATCH.ORGANIZATION_ID
9544                 ,   NVL( OPT.IMPORT_XREF_ONLY, 'N' )
9545             INTO    l_batch_ss_id
9546                 ,   l_org_id
9547                 ,   l_ssxref_only
9548             FROM    EGO_IMPORT_BATCHES_B BATCH, EGO_IMPORT_OPTION_SETS OPT
9549             WHERE   BATCH.BATCH_ID          = p_batch_id
9550                 AND BATCH.ORGANIZATION_ID   = p_organization_id
9551                 AND BATCH.BATCH_ID          = OPT.BATCH_ID;
9552         EXCEPTION
9553             WHEN NO_DATA_FOUND THEN
9554                 x_return_code := 20; -- no batch header
9555                 RETURN;
9556         END;
9557 
9558         l_is_reimport       := FALSE;
9559         l_is_pdh_batch      := ( l_batch_ss_id = get_pdh_source_system_id );
9560         l_is_ssxref_only    := NOT l_is_pdh_batch AND ( 'Y' = l_ssxref_only );
9561         l_party_name        := Get_Current_Party_Name; -- Bug: 5355759
9562         IF l_is_pdh_batch THEN
9563             SAVEPOINT do_prepare_master_row; -- ENSURES THAT THE UPDATES ARE AN ATOMIC UNIT WITHIN THE TRANSACTION
9564             -- XXX: Should child updates be attempted first?
9565 
9566             -- update/select master item row
9567             UPDATE  MTL_SYSTEM_ITEMS_INTERFACE MSII
9568             SET     PROCESS_FLAG =  CASE PROCESS_FLAG
9569                                     WHEN 3 THEN 1
9570 --                                    WHEN 7 THEN G_IOI_STAMP_REQUEST_ID_FLAG
9571                                     ELSE PROCESS_FLAG END
9572             WHERE   SET_PROCESS_ID          = p_batch_id
9573                AND  ORGANIZATION_ID         = p_organization_id
9574                AND  MSII.ROWID              = p_target_rowid
9575                AND  PROCESS_FLAG            IN ( 3, 7 )
9576                AND  (   SOURCE_SYSTEM_ID    IS NULL
9577                     OR  SOURCE_SYSTEM_ID    = l_batch_ss_id
9578                     )
9579             RETURNING
9580                     MSII.PROCESS_FLAG
9581                 ,   MSII.REQUEST_ID
9582                 ,   MSII.INVENTORY_ITEM_ID
9583                 ,   MSII.ITEM_NUMBER
9584                 ,   MSII.ORGANIZATION_ID
9585             INTO
9586                     l_process_flag
9587                 ,   l_request_id
9588                 ,   l_item_id
9589                 ,   l_item_number
9590                 ,   l_org_id;
9591 
9592             IF 1 <> SQL%ROWCOUNT THEN
9593                 ROLLBACK TO do_prepare_master_row;
9594                 x_return_code := 10; -- update statement found too many matching master rows, or not enough
9595                 RETURN;
9596             END IF;
9597 
9598             IF 7 = l_process_flag THEN
9599 --              IF G_MSII_REIMPORT_ROWS IS NULL THEN
9600 --                  G_MSII_REIMPORT_ROWS := UROWID_TABLE( );
9601 --              END IF;
9602                 x_return_code := G_NEEDS_REQUEST_ID_STAMP;
9603 --              G_MSII_REIMPORT_ROWS.EXTEND( );
9604 --              G_MSII_REIMPORT_ROWS( G_MSII_REIMPORT_ROWS.LAST ) := p_target_rowid;
9605             ELSE
9606                 l_is_reimport := TRUE;
9607                 SAVEPOINT do_prepare_master_row; -- move savepoint up since parent row was in error
9608             END IF;
9609 
9610             IF l_item_id IS NOT NULL THEN
9611                 -- xxx: should the item number to use for comparison be fetched from the msii kfv?
9612 
9613                 -- updating the item's org assignments
9614                 UPDATE  MTL_SYSTEM_ITEMS_INTERFACE MSII
9615                 SET     PROCESS_FLAG = 1
9616                 WHERE   (   INVENTORY_ITEM_ID       = l_item_id
9617                         OR  (   ITEM_NUMBER         = l_item_number
9618                             AND INVENTORY_ITEM_ID   IS NULL
9619                             )
9620                         )
9621                     AND PROCESS_FLAG            = 3
9622                     AND SET_PROCESS_ID          = p_batch_id
9623                     AND REQUEST_ID              = l_request_id
9624                     AND ORGANIZATION_ID         IN  (   SELECT  MP.ORGANIZATION_ID
9625                                                         FROM    MTL_PARAMETERS MP
9626                                                         WHERE   MP.MASTER_ORGANIZATION_ID   =   l_org_id
9627                                                             AND MP.ORGANIZATION_ID          <>  l_org_id
9628                                                     );
9629                 l_is_reimport := l_is_reimport OR ( 0 <> SQL%ROWCOUNT );
9630 
9631                 -- updating item revisions
9632                 UPDATE  MTL_ITEM_REVISIONS_INTERFACE miri
9633                 SET     PROCESS_FLAG = 1
9634                 WHERE   (   INVENTORY_ITEM_ID       = l_item_id
9635                         OR  (   ITEM_NUMBER         = l_item_number
9636                             AND INVENTORY_ITEM_ID   IS NULL
9637                             )
9638                         )
9639                     AND PROCESS_FLAG            = 3
9640                     AND SET_PROCESS_ID          = p_batch_id
9641                     AND REQUEST_ID              = l_request_id
9642                     AND ORGANIZATION_ID         IN  (   SELECT  MP.ORGANIZATION_ID
9643                                                         FROM    MTL_PARAMETERS MP
9644                                                         WHERE   MP.MASTER_ORGANIZATION_ID   =  l_org_id
9645                                                     );
9646                 l_is_reimport := l_is_reimport OR ( 0 <> SQL%ROWCOUNT );
9647 
9648                 -- updating item category assignments
9649                 UPDATE MTL_ITEM_CATEGORIES_INTERFACE mici
9650                 SET     PROCESS_FLAG = 1
9651                 WHERE   (   INVENTORY_ITEM_ID       = l_item_id
9652                         OR  (   ITEM_NUMBER         = l_item_number
9653                             AND INVENTORY_ITEM_ID   IS NULL
9654                             )
9655                         )
9656                     AND PROCESS_FLAG            = 3
9657                     AND SET_PROCESS_ID          = p_batch_id
9658                     AND REQUEST_ID              = l_request_id
9659                     AND ORGANIZATION_ID         IN  (   SELECT  MP.ORGANIZATION_ID
9660                                                         FROM    MTL_PARAMETERS MP
9661                                                         WHERE   MP.MASTER_ORGANIZATION_ID   =  l_org_id
9662                                                     );
9663                 l_is_reimport := l_is_reimport OR ( 0 <> SQL%ROWCOUNT );
9664 
9665                 -- updating item user defined attributes
9666                 UPDATE EGO_ITM_USR_ATTR_INTRFC
9667                 SET     PROCESS_STATUS = 1
9668                 WHERE   (   INVENTORY_ITEM_ID       = l_item_id
9669                         OR  (   ITEM_NUMBER         = l_item_number
9670                             AND INVENTORY_ITEM_ID   IS NULL
9671                             )
9672                         )
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   (   INVENTORY_ITEM_ID       = l_item_id
9686                         OR  (   ITEM_NUMBER         = l_item_number
9687                             AND INVENTORY_ITEM_ID   IS NULL
9688                             )
9689                         )
9690                     AND PROCESS_STATUS          = 3
9691                     AND DATA_SET_ID             = p_batch_id
9692                     AND REQUEST_ID              = l_request_id
9693                     AND ORGANIZATION_ID         IN  (   SELECT  MP.ORGANIZATION_ID
9694                                                         FROM    MTL_PARAMETERS MP
9695                                                         WHERE   MP.MASTER_ORGANIZATION_ID   =  l_org_id
9696                                                     );
9697                 l_is_reimport := l_is_reimport OR ( 0 <> SQL%ROWCOUNT );
9698 
9699                 -- updating item AML
9700                 UPDATE EGO_AML_INTF
9701                 SET     PROCESS_FLAG = 1
9702                 WHERE   (   INVENTORY_ITEM_ID       = l_item_id
9703                         OR  (   ITEM_NUMBER         = l_item_number
9704                             AND INVENTORY_ITEM_ID   IS NULL
9705                             )
9706                         )
9707                     AND PROCESS_FLAG            = 3
9708                     AND DATA_SET_ID             = p_batch_id
9709                     AND REQUEST_ID              = l_request_id
9710                     AND ORGANIZATION_ID         IN  (   SELECT  MP.ORGANIZATION_ID
9711                                                         FROM    MTL_PARAMETERS MP
9712                                                         WHERE   MP.MASTER_ORGANIZATION_ID   =  l_org_id
9713                                                     );
9714                 l_is_reimport := l_is_reimport OR ( 0 <> SQL%ROWCOUNT );
9715 
9716                 UPDATE EGO_ITEM_ASSOCIATIONS_INTF
9717                 SET     PROCESS_FLAG = 1
9718                 WHERE   (   INVENTORY_ITEM_ID       = l_item_id
9719                         OR  (   ITEM_NUMBER         = l_item_number
9720                             AND INVENTORY_ITEM_ID   IS NULL
9721                             )
9722                         )
9723                     AND PROCESS_FLAG            = 3
9724                     AND BATCH_ID             = p_batch_id
9725                     AND REQUEST_ID              = l_request_id
9726                     AND ORGANIZATION_ID         IN  (   SELECT  MP.ORGANIZATION_ID
9727                                                         FROM    MTL_PARAMETERS MP
9728                                                         WHERE   MP.MASTER_ORGANIZATION_ID   =  l_org_id
9729                                                     );
9730                 l_is_reimport := l_is_reimport OR ( 0 <> SQL%ROWCOUNT );
9731             ELSE    -- item id is null
9732                 -- updating the item's org assignments
9733                 UPDATE  MTL_SYSTEM_ITEMS_INTERFACE MSII
9734                 SET     PROCESS_FLAG = 1
9735                 WHERE   ITEM_NUMBER             = l_item_number
9736                     AND PROCESS_FLAG            = 3
9737                     AND SET_PROCESS_ID          = p_batch_id
9738                     AND REQUEST_ID              = l_request_id
9739                     AND ORGANIZATION_ID         IN  (   SELECT  MP.ORGANIZATION_ID
9740                                                         FROM    MTL_PARAMETERS MP
9741                                                         WHERE   MP.MASTER_ORGANIZATION_ID   =   l_org_id
9742                                                             AND MP.ORGANIZATION_ID          <>  l_org_id
9743                                                     );
9744                 l_is_reimport := l_is_reimport OR ( 0 <> SQL%ROWCOUNT );
9745 
9746                 -- updating item revisions
9747                 UPDATE  MTL_ITEM_REVISIONS_INTERFACE miri
9748                 SET     PROCESS_FLAG = 1
9749                 WHERE   ITEM_NUMBER             = l_item_number
9750                     AND PROCESS_FLAG            = 3
9751                     AND SET_PROCESS_ID          = p_batch_id
9752                     AND REQUEST_ID              = l_request_id
9753                     AND ORGANIZATION_ID         IN  (   SELECT  MP.ORGANIZATION_ID
9754                                                         FROM    MTL_PARAMETERS MP
9755                                                         WHERE   MP.MASTER_ORGANIZATION_ID   =  l_org_id
9756                                                     );
9757                 l_is_reimport := l_is_reimport OR ( 0 <> SQL%ROWCOUNT );
9758 
9759                 -- updating item category assignments
9760                 UPDATE MTL_ITEM_CATEGORIES_INTERFACE mici
9761                 SET     PROCESS_FLAG = 1
9762                 WHERE   ITEM_NUMBER             = l_item_number
9763                     AND PROCESS_FLAG            = 3
9764                     AND SET_PROCESS_ID          = p_batch_id
9765                     AND REQUEST_ID              = l_request_id
9766                     AND ORGANIZATION_ID         IN  (   SELECT  MP.ORGANIZATION_ID
9767                                                         FROM    MTL_PARAMETERS MP
9768                                                         WHERE   MP.MASTER_ORGANIZATION_ID   =  l_org_id
9769                                                     );
9770                 l_is_reimport := l_is_reimport OR ( 0 <> SQL%ROWCOUNT );
9771 
9772                 -- updating item user defined attributes
9773                 UPDATE EGO_ITM_USR_ATTR_INTRFC
9774                 SET     PROCESS_STATUS = 1
9775                 WHERE   ITEM_NUMBER             = l_item_number
9776                     AND PROCESS_STATUS          = 3
9777                     AND DATA_SET_ID             = p_batch_id
9778                     AND REQUEST_ID              = l_request_id
9779                     AND ORGANIZATION_ID         IN  (   SELECT  MP.ORGANIZATION_ID
9780                                                         FROM    MTL_PARAMETERS MP
9781                                                         WHERE   MP.MASTER_ORGANIZATION_ID   =  l_org_id
9782                                                     );
9783                 l_is_reimport := l_is_reimport OR ( 0 <> SQL%ROWCOUNT );
9784 
9785                 -- updating item people
9786                 UPDATE EGO_ITEM_PEOPLE_INTF eipi
9787                 SET     PROCESS_STATUS = 1
9788                 WHERE   ITEM_NUMBER             = l_item_number
9789                     AND PROCESS_STATUS          = 3
9790                     AND DATA_SET_ID             = p_batch_id
9791                     AND REQUEST_ID              = l_request_id
9792                     AND ORGANIZATION_ID         IN  (   SELECT  MP.ORGANIZATION_ID
9793                                                         FROM    MTL_PARAMETERS MP
9794                                                         WHERE   MP.MASTER_ORGANIZATION_ID   =  l_org_id
9795                                                     );
9796                 l_is_reimport := l_is_reimport OR ( 0 <> SQL%ROWCOUNT );
9797 
9798                 -- updating item AML
9799                 UPDATE EGO_AML_INTF
9800                 SET     PROCESS_FLAG = 1
9801                 WHERE   ITEM_NUMBER             = l_item_number
9802                     AND PROCESS_FLAG            = 3
9803                     AND DATA_SET_ID             = p_batch_id
9804                     AND REQUEST_ID              = l_request_id
9805                     AND ORGANIZATION_ID         IN  (   SELECT  MP.ORGANIZATION_ID
9806                                                         FROM    MTL_PARAMETERS MP
9807                                                         WHERE   MP.MASTER_ORGANIZATION_ID   =  l_org_id
9808                                                     );
9809                 l_is_reimport := l_is_reimport OR ( 0 <> SQL%ROWCOUNT );
9810                 -- updating item ITEM ASSOCIATIONS
9811                 UPDATE EGO_ITEM_ASSOCIATIONS_INTF
9812                 SET     PROCESS_FLAG = 1
9813                 WHERE   ITEM_NUMBER             = l_item_number
9814                     AND PROCESS_FLAG            = 3
9815                     AND BATCH_ID             = p_batch_id
9816                     AND REQUEST_ID              = l_request_id
9817                     AND ORGANIZATION_ID         IN  (   SELECT  MP.ORGANIZATION_ID
9818                                                         FROM    MTL_PARAMETERS MP
9819                                                         WHERE   MP.MASTER_ORGANIZATION_ID   =  l_org_id
9820                                                     );
9821                 l_is_reimport := l_is_reimport OR ( 0 <> SQL%ROWCOUNT );
9822             END IF;
9823         ELSE    -- source system is not PIMDH
9824             SAVEPOINT do_prepare_master_row; -- ENSURES THAT THE UPDATES ARE AN ATOMIC UNIT WITHIN THE TRANSACTION
9825 
9826             -- TODO: need to check for cross-reference related security.
9827             -- however, we can't trust confirm status for the errored rows...
9828 
9829             -- XXX: Should child updates be attempted first?
9830 
9831             -- Bug: 5355759
9832             IF l_is_ssxref_only THEN
9833                 l_reimport_process_status := 11;
9834             ELSE
9835                 l_reimport_process_status := 1;
9836             END IF;
9837 
9838             -- update/select master item row
9839             UPDATE  MTL_SYSTEM_ITEMS_INTERFACE MSII
9840             SET     PROCESS_FLAG =  CASE PROCESS_FLAG
9841                                     WHEN 3 THEN l_reimport_process_status
9842 --                                    WHEN 7 THEN G_IOI_STAMP_REQUEST_ID_FLAG
9843                                     ELSE PROCESS_FLAG END
9844             WHERE   SET_PROCESS_ID          = p_batch_id
9845                AND  ORGANIZATION_ID         = p_organization_id
9846                AND  MSII.ROWID              = p_target_rowid
9847                AND  PROCESS_FLAG            IN ( 3, 7 )
9848                AND  SOURCE_SYSTEM_ID        IS NOT NULL
9849                AND  SOURCE_SYSTEM_REFERENCE IS NOT NULL
9850             RETURNING
9851                     MSII.PROCESS_FLAG
9852                 ,   MSII.REQUEST_ID
9853                 ,   MSII.SOURCE_SYSTEM_ID
9854                 ,   MSII.SOURCE_SYSTEM_REFERENCE
9855                 ,   MSII.SOURCE_SYSTEM_REFERENCE_DESC
9856                 ,   MSII.ORGANIZATION_ID
9857                 ,   MSII.INVENTORY_ITEM_ID
9858                 ,   MSII.ITEM_NUMBER
9859             INTO
9860                     l_process_flag
9861                 ,   l_request_id
9862                 ,   l_ss_id
9863                 ,   l_ssr
9864                 ,   l_ssr_desc
9865                 ,   l_org_id
9866                 ,   l_item_id
9867                 ,   l_item_number;
9868 
9869             IF 1 <> SQL%ROWCOUNT THEN
9870                 ROLLBACK TO do_prepare_master_row;
9871                 x_return_code := 10;
9872                 RETURN;
9873             END IF;
9874 
9875             IF 7 = l_process_flag THEN
9876 --              IF G_MSII_REIMPORT_ROWS IS NULL THEN
9877 --                  G_MSII_REIMPORT_ROWS := UROWID_TABLE( );
9878 --              END IF;
9879                 x_return_code := G_NEEDS_REQUEST_ID_STAMP;
9880 --              G_MSII_REIMPORT_ROWS.EXTEND( );
9881 --              G_MSII_REIMPORT_ROWS( G_MSII_REIMPORT_ROWS.LAST ) := p_target_rowid;
9882             ELSE
9883                 l_is_reimport := TRUE;
9884                 SAVEPOINT do_prepare_master_row; -- move savepoint up since parent row was in error
9885                 -- Bug: 5355759
9886                 -- check for cross-reference related security
9887 
9888                 BEGIN
9889                     SELECT ORGANIZATION_CODE
9890                     INTO l_org_code
9891                     FROM MTL_PARAMETERS
9892                     WHERE ORGANIZATION_ID = l_org_id;
9893                 EXCEPTION
9894                 WHEN NO_DATA_FOUND THEN
9895                     NULL;
9896                 END;
9897 
9898                 BEGIN
9899                     SELECT  MSIK.CONCATENATED_SEGMENTS
9900                          ,  MSIK.INVENTORY_ITEM_ID
9901                          ,  MCR.DESCRIPTION
9902                     INTO    l_xref_item_number
9903                          ,  l_xref_item_id
9904                          ,  l_xref_desc
9905                     FROM  MTL_CROSS_REFERENCES MCR,
9906                           MTL_SYSTEM_ITEMS_KFV MSIK
9907                     WHERE   MCR.INVENTORY_ITEM_ID    = MSIK.INVENTORY_ITEM_ID
9908                         AND MSIK.ORGANIZATION_ID     = l_org_id
9909                         AND MCR.CROSS_REFERENCE_TYPE = 'SS_ITEM_XREF'
9910                         AND MCR.SOURCE_SYSTEM_ID     = l_ss_id
9911                         AND MCR.CROSS_REFERENCE      = l_ssr
9912                         AND SYSDATE BETWEEN NVL(MCR.START_DATE_ACTIVE, SYSDATE-1) AND NVL(MCR.END_DATE_ACTIVE, SYSDATE+1);
9913 
9914                     IF l_xref_item_id <> l_item_id THEN
9915                         -- old xref and new xref are not same, so check privilege on old item
9916                         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);
9917                         IF 'T'        <> l_priv_exists THEN
9918                             -- no privileges, logging error
9919                             FND_MESSAGE.SET_NAME('EGO', 'EGO_NO_EDIT_XREF_PRIV');
9920                             FND_MESSAGE.SET_TOKEN('ITEM', l_xref_item_number);
9921                             FND_MESSAGE.SET_TOKEN('ORG', l_org_code);
9922                             l_msg_text := FND_MESSAGE.GET;
9923                             UPDATE MTL_SYSTEM_ITEMS_INTERFACE
9924                                 SET PROCESS_FLAG = 3
9925                             WHERE ROWID          = p_target_rowid;
9926                             x_return_code       := G_NEED_TO_LOG_ERROR;
9927                             x_err_msg           := l_msg_text;
9928                             RETURN;
9929                         ELSE
9930                             -- privilege exists on old item. Check privilege on new item
9931                             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);
9932                             IF 'T'        <> l_priv_exists THEN
9933                                 -- no privileges, logging error
9934                                 FND_MESSAGE.SET_NAME('EGO', 'EGO_NO_EDIT_XREF_PRIV');
9935                                 FND_MESSAGE.SET_TOKEN('ITEM', l_item_number);
9936                                 FND_MESSAGE.SET_TOKEN('ORG', l_org_code);
9937                                 l_msg_text := FND_MESSAGE.GET;
9938 
9939                                 UPDATE MTL_SYSTEM_ITEMS_INTERFACE
9940                                     SET PROCESS_FLAG = 3
9941                                 WHERE ROWID          = p_target_rowid;
9942 
9943                                 x_return_code       := G_NEED_TO_LOG_ERROR;
9944                                 x_err_msg           := l_msg_text;
9945                                 RETURN;
9946                             END IF; -- IF 'T' <> l_priv_exists THEN
9947                         END IF;     -- IF 'T' <> l_priv_exists THEN
9948                     ELSIF l_xref_item_id = l_item_id AND NVL(l_ssr_desc, '!') <> NVL(l_xref_desc, '!') THEN
9949                         -- New and Old link are same, but description is different, so check privilege on item
9950                         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);
9951                         IF 'T'        <> l_priv_exists THEN
9952                             -- no privileges, logging error
9953                             FND_MESSAGE.SET_NAME('EGO', 'EGO_NO_EDIT_XREF_PRIV');
9954                             FND_MESSAGE.SET_TOKEN('ITEM', l_item_number);
9955                             FND_MESSAGE.SET_TOKEN('ORG', l_org_code);
9956                             l_msg_text := FND_MESSAGE.GET;
9957 
9958                             UPDATE MTL_SYSTEM_ITEMS_INTERFACE
9959                                 SET PROCESS_FLAG = 3
9960                             WHERE ROWID          = p_target_rowid;
9961 
9962                             x_return_code       := G_NEED_TO_LOG_ERROR;
9963                             x_err_msg           := l_msg_text;
9964                             RETURN;
9965                         END IF; -- IF 'T' <> l_priv_exists THEN
9966                     END IF;     -- IF l_xref_item_id <> l_item_id THEN
9967                 EXCEPTION
9968                 WHEN NO_DATA_FOUND THEN
9969                     -- check privilege only for new item
9970                     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);
9971                     IF 'T'        <> l_priv_exists THEN
9972                         -- no privileges, logging error
9973                         FND_MESSAGE.SET_NAME('EGO', 'EGO_NO_EDIT_XREF_PRIV');
9974                         FND_MESSAGE.SET_TOKEN('ITEM', l_item_number);
9975                         FND_MESSAGE.SET_TOKEN('ORG', l_org_code);
9976                         l_msg_text := FND_MESSAGE.GET;
9977 
9978                         UPDATE MTL_SYSTEM_ITEMS_INTERFACE
9979                             SET PROCESS_FLAG = 3
9980                         WHERE ROWID          = p_target_rowid;
9981 
9982                         x_return_code       := G_NEED_TO_LOG_ERROR;
9983                         x_err_msg           := l_msg_text;
9984                         RETURN;
9985                     END IF; -- IF 'T' <> l_priv_exists THEN
9986                 END;
9987             END IF;
9988 
9989             IF NOT l_is_ssxref_only THEN
9990                 -- updating item's org assignments
9991                 UPDATE  MTL_SYSTEM_ITEMS_INTERFACE MSII
9992                 SET     PROCESS_FLAG = 1
9993                 WHERE   SOURCE_SYSTEM_ID        = l_ss_id
9994                     AND SOURCE_SYSTEM_REFERENCE = l_ssr
9995                     AND PROCESS_FLAG            = 3
9996                     AND SET_PROCESS_ID          = p_batch_id
9997                     AND REQUEST_ID              = l_request_id
9998                     AND ORGANIZATION_ID     IN  (   SELECT  MP.ORGANIZATION_ID          -- org assignment
9999                                                     FROM    MTL_PARAMETERS MP
10000                                                     WHERE   MP.MASTER_ORGANIZATION_ID   =   l_org_id
10001                                                         AND MP.ORGANIZATION_ID          <>  l_org_id
10002                                                 );
10003                 l_is_reimport := l_is_reimport OR ( 0 <> SQL%ROWCOUNT );
10004 
10005                 -- updating item revisions
10006                 UPDATE  MTL_ITEM_REVISIONS_INTERFACE miri
10007                 SET     PROCESS_FLAG = 1
10008                 WHERE   SOURCE_SYSTEM_ID        = l_ss_id
10009                     AND SOURCE_SYSTEM_REFERENCE = l_ssr
10010                     AND PROCESS_FLAG            = 3
10011                     AND SET_PROCESS_ID          = p_batch_id
10012                     AND REQUEST_ID              = l_request_id
10013                     AND ORGANIZATION_ID         IN  (   SELECT  MP.ORGANIZATION_ID
10014                                                         FROM    MTL_PARAMETERS MP
10015                                                         WHERE   MP.MASTER_ORGANIZATION_ID   =  l_org_id
10016                                                     );
10017                 l_is_reimport := l_is_reimport OR ( 0 <> SQL%ROWCOUNT );
10018 
10019                 -- updating item category assignments
10020                 UPDATE MTL_ITEM_CATEGORIES_INTERFACE mici
10021                 SET     PROCESS_FLAG = 1
10022                 WHERE   SOURCE_SYSTEM_ID        = l_ss_id
10023                     AND SOURCE_SYSTEM_REFERENCE = l_ssr
10024                     AND PROCESS_FLAG            = 3
10025                     AND SET_PROCESS_ID          = p_batch_id
10026                     AND REQUEST_ID              = l_request_id
10027                     AND ORGANIZATION_ID         IN  (   SELECT  MP.ORGANIZATION_ID
10028                                                         FROM    MTL_PARAMETERS MP
10029                                                         WHERE   MP.MASTER_ORGANIZATION_ID   =  l_org_id
10030                                                     );
10031                 l_is_reimport := l_is_reimport OR ( 0 <> SQL%ROWCOUNT );
10032 
10033                 -- updating item user defined attributes
10034                 UPDATE EGO_ITM_USR_ATTR_INTRFC
10035                 SET     PROCESS_STATUS = 1
10036                 WHERE   SOURCE_SYSTEM_ID        = l_ss_id
10037                     AND SOURCE_SYSTEM_REFERENCE = l_ssr
10038                     AND PROCESS_STATUS          = 3
10039                     AND DATA_SET_ID             = p_batch_id
10040                     AND REQUEST_ID              = l_request_id
10041                     AND ORGANIZATION_ID         IN  (   SELECT  MP.ORGANIZATION_ID
10042                                                         FROM    MTL_PARAMETERS MP
10043                                                         WHERE   MP.MASTER_ORGANIZATION_ID   =  l_org_id
10044                                                     );
10045                 l_is_reimport := l_is_reimport OR ( 0 <> SQL%ROWCOUNT );
10046 
10047                 -- updating item people
10048                 UPDATE EGO_ITEM_PEOPLE_INTF eipi
10049                 SET     PROCESS_STATUS = 1
10050                 WHERE   SOURCE_SYSTEM_ID        = l_ss_id
10051                     AND SOURCE_SYSTEM_REFERENCE = l_ssr
10052                     AND PROCESS_STATUS          = 3
10053                     AND DATA_SET_ID             = p_batch_id
10054                     AND REQUEST_ID              = l_request_id
10055                     AND ORGANIZATION_ID         IN  (   SELECT  MP.ORGANIZATION_ID
10056                                                         FROM    MTL_PARAMETERS MP
10057                                                         WHERE   MP.MASTER_ORGANIZATION_ID   =  l_org_id
10058                                                     );
10059                 l_is_reimport := l_is_reimport OR ( 0 <> SQL%ROWCOUNT );
10060 
10061                 -- updating item AML
10062                 UPDATE EGO_AML_INTF
10063                 SET     PROCESS_FLAG = 1
10064                 WHERE   SOURCE_SYSTEM_ID        = l_ss_id
10065                     AND SOURCE_SYSTEM_REFERENCE = l_ssr
10066                     AND PROCESS_FLAG            = 3
10067                     AND DATA_SET_ID             = p_batch_id
10068                     AND REQUEST_ID              = l_request_id
10069                     AND ORGANIZATION_ID         IN  (   SELECT  MP.ORGANIZATION_ID
10070                                                         FROM    MTL_PARAMETERS MP
10071                                                         WHERE   MP.MASTER_ORGANIZATION_ID   =  l_org_id
10072                                                     );
10073                 l_is_reimport := l_is_reimport OR ( 0 <> SQL%ROWCOUNT );
10074                 UPDATE EGO_ITEM_ASSOCIATIONS_INTF
10075                 SET     PROCESS_FLAG = 1
10076                 WHERE   SOURCE_SYSTEM_ID        = l_ss_id
10077                     AND SOURCE_SYSTEM_REFERENCE = l_ssr
10078                     AND PROCESS_FLAG            = 3
10079                     AND BATCH_ID             = p_batch_id
10080                     AND REQUEST_ID              = l_request_id
10081                     AND ORGANIZATION_ID         IN  (   SELECT  MP.ORGANIZATION_ID
10082                                                         FROM    MTL_PARAMETERS MP
10083                                                         WHERE   MP.MASTER_ORGANIZATION_ID   =  l_org_id
10084                                                     );
10085                 l_is_reimport := l_is_reimport OR ( 0 <> SQL%ROWCOUNT );
10086             END IF; -- IF l_is_ssxref_only
10087         END IF;
10088 
10089         IF NOT l_is_reimport THEN
10090             ROLLBACK TO do_prepare_master_row;
10091             x_return_code := 50;
10092         END IF;
10093         SAVEPOINT do_prepare_master_row;
10094     EXCEPTION
10095         WHEN NO_DATA_FOUND THEN
10096             ROLLBACK TO do_prepare_master_row;
10097             x_return_code := 30;
10098         WHEN TOO_MANY_ROWS THEN
10099             ROLLBACK TO do_prepare_master_row;
10100             x_return_code := 40;
10101         WHEN OTHERS THEN -- unanticipated error ( probably during update )
10102             ROLLBACK TO do_prepare_master_row;
10103             x_return_code := SQLCODE;
10104     END Prepare_Row_For_ReImport;
10105 
10106  ------------------------------------------------------------------------------------------
10107  -- This function returns the batch status of a batch                                    --
10108  ------------------------------------------------------------------------------------------
10109  FUNCTION GET_BATCH_STATUS(p_batch_id NUMBER) RETURN VARCHAR2 AS
10110    l_batch_status VARCHAR2(2);
10111  BEGIN
10112    SELECT
10113      (CASE  WHEN ( (crimp.PHASE_CODE IN ('P', 'I', 'R') AND (crimp.REQUESTED_START_DATE <= SYSDATE) )
10114                   OR crmatch.PHASE_CODE IN ('P', 'I', 'R')
10115                  )
10116             THEN 'P'
10117             ELSE impbat.BATCH_STATUS
10118       END
10119      ) BATCH_STATUS
10120      INTO l_batch_status
10121    FROM
10122      EGO_IMPORT_BATCHES_B impbat,
10123      FND_CONCURRENT_REQUESTS crimp,
10124      FND_CONCURRENT_REQUESTS crmatch
10125    WHERE impbat.BATCH_ID               = p_batch_id
10126      AND impbat.LAST_MATCH_REQUEST_ID  = crmatch.REQUEST_ID (+)
10127      AND impbat.LAST_IMPORT_REQUEST_ID = crimp.REQUEST_ID (+);
10128 
10129    RETURN l_batch_status;
10130  EXCEPTION
10131    WHEN NO_DATA_FOUND THEN
10132      RETURN NULL;
10133  END GET_BATCH_STATUS;
10134 
10135     ------------------------------------------------------------------------------------------------
10136     --  Functions GET_LATEST_EIUAI_REV_[SS/PDH]                                                   --
10137     --  Returns the the code of the latest LOGICAL revision row loaded for the item into the      --
10138     --  user defined attribute interface table                                                    --
10139     --  Note the lack of attribute-specific parameters - this is to ensure that contexts in       --
10140     --      which this proc gets called will only attempt to go after a single logical revision   --
10141     --      row, regardless of the possible absence of the required attributes in that row and    --
10142     --      their possible presence in other logical rows of the interface table                  --
10143     ------------------------------------------------------------------------------------------------
10144     FUNCTION GET_LATEST_EIUAI_REV_SS
10145         (
10146             p_batch_id                      IN      EGO_ITM_USR_ATTR_INTRFC.DATA_SET_ID%TYPE
10147         ,   p_source_system_id              IN      EGO_ITM_USR_ATTR_INTRFC.SOURCE_SYSTEM_ID%TYPE
10148         ,   p_source_system_reference       IN      EGO_ITM_USR_ATTR_INTRFC.SOURCE_SYSTEM_REFERENCE%TYPE
10149         ,   p_organization_id               IN      EGO_ITM_USR_ATTR_INTRFC.ORGANIZATION_ID%TYPE
10150         ,   p_do_processed_rows_flag        IN      FLAG                    DEFAULT FND_API.G_FALSE
10151         ,   p_request_id                    IN      EGO_ITM_USR_ATTR_INTRFC.REQUEST_ID%TYPE DEFAULT NULL
10152         )
10153     RETURN EGO_ITM_USR_ATTR_INTRFC.REVISION%TYPE
10154     IS
10155         l_rev_code EGO_ITM_USR_ATTR_INTRFC.REVISION%TYPE;
10156     BEGIN
10157         IF  p_do_processed_rows_flag = FND_API.G_TRUE THEN
10158            SELECT MAX( EIUAI.REVISION ) INTO  l_rev_code
10159            FROM EGO_ITM_USR_ATTR_INTRFC EIUAI
10160            WHERE   EIUAI.SOURCE_SYSTEM_REFERENCE   = p_source_system_reference
10161                AND EIUAI.SOURCE_SYSTEM_ID          = p_source_system_id
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            IN ( 3,4 )
10166                AND EIUAI.REQUEST_ID                = p_request_id
10167                AND EXISTS( SELECT NULL -- SEE DEFINITION OF EGO_OBJ_ATTR_GRP_ASSOCS_V
10168                        FROM EGO_FND_DSC_FLX_CTX_EXT FL_CTX_EXT
10169                           , EGO_OBJ_AG_ASSOCS_B A
10170                        WHERE
10171                            -- CHECK FOR REVISION LEVEL GROUPS ONLY
10172                            A.DATA_LEVEL                             = 'ITEM_REVISION_LEVEL'
10173                            AND FL_CTX_EXT.DESCRIPTIVE_FLEXFIELD_NAME    = NVL( EIUAI.ATTR_GROUP_TYPE, G_DEFAULT_ATTR_GROUP_TYPE )
10174                            AND FL_CTX_EXT.APPLICATION_ID                = 431
10175                            AND FL_CTX_EXT.DESCRIPTIVE_FLEX_CONTEXT_CODE = EIUAI.ATTR_GROUP_INT_NAME
10176                            AND A.ATTR_GROUP_ID                      = FL_CTX_EXT.ATTR_GROUP_ID
10177                            -- TO ENSURE A(OBJECT_ID, CLASS_CODE, ATTR_GROUP) IDX USED:
10178                            AND A.CLASSIFICATION_CODE                IS NOT NULL
10179                            AND A.OBJECT_ID                          IS NOT NULL
10180                            AND ROWNUM = 1
10181                        );
10182                -- the aggregate function MAX always returns one (possibly null) row, so
10183                -- no need to check for the NO_DATA_FOUND exception, or initialize l_rev_code
10184         ELSE
10185            SELECT MAX( EIUAI.REVISION ) INTO  l_rev_code
10186            FROM EGO_ITM_USR_ATTR_INTRFC EIUAI
10187            WHERE   EIUAI.SOURCE_SYSTEM_REFERENCE   = p_source_system_reference
10188                AND EIUAI.SOURCE_SYSTEM_ID          = p_source_system_id
10189                AND EIUAI.ORGANIZATION_ID           = p_organization_id
10190                AND EIUAI.DATA_SET_ID               = p_batch_id
10191                AND EIUAI.REVISION                  IS NOT NULL
10192                AND EIUAI.PROCESS_STATUS            = 0
10193                AND EXISTS( SELECT NULL -- SEE DEFINITION OF EGO_OBJ_ATTR_GRP_ASSOCS_V
10194                        FROM EGO_FND_DSC_FLX_CTX_EXT FL_CTX_EXT
10195                           , EGO_OBJ_AG_ASSOCS_B A
10196                        WHERE
10197                            -- CHECK FOR REVISION LEVEL GROUPS ONLY
10198                            A.DATA_LEVEL                             = 'ITEM_REVISION_LEVEL'
10199                            AND FL_CTX_EXT.DESCRIPTIVE_FLEXFIELD_NAME    = NVL( EIUAI.ATTR_GROUP_TYPE, G_DEFAULT_ATTR_GROUP_TYPE )
10200                            AND FL_CTX_EXT.APPLICATION_ID                = 431
10201                            AND FL_CTX_EXT.DESCRIPTIVE_FLEX_CONTEXT_CODE = EIUAI.ATTR_GROUP_INT_NAME
10202                            AND A.ATTR_GROUP_ID                      = FL_CTX_EXT.ATTR_GROUP_ID
10203                            -- TO ENSURE A(OBJECT_ID, CLASS_CODE, ATTR_GROUP) IDX USED:
10204                            AND A.CLASSIFICATION_CODE                IS NOT NULL
10205                            AND A.OBJECT_ID                          IS NOT NULL
10206                            AND ROWNUM = 1
10207                        );
10208                -- the aggregate function MAX always returns one (possibly null) row, so
10209                -- no need to check for the NO_DATA_FOUND exception, or initialize l_rev_code
10210         END IF;
10211         RETURN l_rev_code;
10212     END GET_LATEST_EIUAI_REV_SS;
10213 
10214    FUNCTION GET_LATEST_EIUAI_REV_PDH
10215        (
10216            p_batch_id                      IN      EGO_ITM_USR_ATTR_INTRFC.DATA_SET_ID%TYPE
10217        ,   p_inventory_item_id             IN      EGO_ITM_USR_ATTR_INTRFC.INVENTORY_ITEM_ID%TYPE
10218        ,   p_item_number                   IN      EGO_ITM_USR_ATTR_INTRFC.ITEM_NUMBER%TYPE
10219        ,   p_organization_id               IN      EGO_ITM_USR_ATTR_INTRFC.ORGANIZATION_ID%TYPE
10220        ,   p_do_processed_rows_flag        IN      FLAG                    DEFAULT FND_API.G_FALSE
10221        ,   p_request_id                    IN      EGO_ITM_USR_ATTR_INTRFC.REQUEST_ID%TYPE DEFAULT NULL
10222        )
10223    RETURN EGO_ITM_USR_ATTR_INTRFC.REVISION%TYPE
10224    IS
10225        l_rev_code          EGO_ITM_USR_ATTR_INTRFC.REVISION%TYPE;
10226        l_sql_stmt          VARCHAR2( 32000 );
10227    BEGIN
10228        -- the aggregate function MAX always returns one (possibly null) row, so
10229        -- no need to check for the NO_DATA_FOUND exception, or initialize l_rev_code
10230 
10231        IF   p_inventory_item_id IS NULL
10232        THEN
10233            IF p_do_processed_rows_flag = FND_API.G_TRUE THEN
10234                SELECT MAX( EIUAI.REVISION )
10235                INTO l_rev_code
10236                FROM EGO_ITM_USR_ATTR_INTRFC EIUAI
10237                WHERE   EIUAI.ITEM_NUMBER               = p_item_number
10238                    AND EIUAI.ORGANIZATION_ID           = p_organization_id
10239                    AND EIUAI.DATA_SET_ID               = p_batch_id
10240                    AND EIUAI.REVISION                  IS NOT NULL
10241                    AND EIUAI.PROCESS_STATUS            IN ( 3, 4 )
10242                    AND EIUAI.REQUEST_ID                = p_request_id
10243                    AND EXISTS( SELECT NULL -- SEE DEFINITION OF EGO_OBJ_ATTR_GRP_ASSOCS_V
10244                            FROM EGO_FND_DSC_FLX_CTX_EXT FL_CTX_EXT
10245                               , EGO_OBJ_AG_ASSOCS_B A
10246                            WHERE
10247                                -- CHECK FOR REVISION LEVEL GROUPS ONLY
10248                                A.DATA_LEVEL                             = 'ITEM_REVISION_LEVEL'
10249                                AND FL_CTX_EXT.DESCRIPTIVE_FLEXFIELD_NAME    = NVL( EIUAI.ATTR_GROUP_TYPE, G_DEFAULT_ATTR_GROUP_TYPE )
10250                                AND FL_CTX_EXT.APPLICATION_ID                = 431
10251                                AND FL_CTX_EXT.DESCRIPTIVE_FLEX_CONTEXT_CODE = EIUAI.ATTR_GROUP_INT_NAME
10252                                AND A.ATTR_GROUP_ID                      = FL_CTX_EXT.ATTR_GROUP_ID
10253                                -- TO ENSURE A(OBJECT_ID, CLASS_CODE, ATTR_GROUP) IDX USED:
10254                                AND A.CLASSIFICATION_CODE                IS NOT NULL
10255                                AND A.OBJECT_ID                          IS NOT NULL
10256                                AND ROWNUM = 1
10257                            );
10258                    -- the aggregate function MAX always returns one (possibly null) row, so
10259                    -- no need to check for the NO_DATA_FOUND exception, or initialize l_rev_code
10260            ELSE
10261                SELECT MAX( EIUAI.REVISION )
10262                INTO l_rev_code
10263                FROM EGO_ITM_USR_ATTR_INTRFC EIUAI
10264                WHERE   EIUAI.ITEM_NUMBER               = p_item_number
10265                    AND EIUAI.ORGANIZATION_ID           = p_organization_id
10266                    AND EIUAI.DATA_SET_ID               = p_batch_id
10267                    AND EIUAI.REVISION                  IS NOT NULL
10268                    AND EIUAI.PROCESS_STATUS            = 1
10269                    AND EXISTS( SELECT NULL -- SEE DEFINITION OF EGO_OBJ_ATTR_GRP_ASSOCS_V
10270                            FROM EGO_FND_DSC_FLX_CTX_EXT FL_CTX_EXT
10271                               , EGO_OBJ_AG_ASSOCS_B A
10272                            WHERE
10273                                -- CHECK FOR REVISION LEVEL GROUPS ONLY
10274                                A.DATA_LEVEL                             = 'ITEM_REVISION_LEVEL'
10275                                AND FL_CTX_EXT.DESCRIPTIVE_FLEXFIELD_NAME    = NVL( EIUAI.ATTR_GROUP_TYPE, G_DEFAULT_ATTR_GROUP_TYPE )
10276                                AND FL_CTX_EXT.APPLICATION_ID                = 431
10277                                AND FL_CTX_EXT.DESCRIPTIVE_FLEX_CONTEXT_CODE = EIUAI.ATTR_GROUP_INT_NAME
10278                                AND A.ATTR_GROUP_ID                      = FL_CTX_EXT.ATTR_GROUP_ID
10279                                -- TO ENSURE A(OBJECT_ID, CLASS_CODE, ATTR_GROUP) IDX USED:
10280                                AND A.CLASSIFICATION_CODE                IS NOT NULL
10281                                AND A.OBJECT_ID                          IS NOT NULL
10282                                AND ROWNUM = 1
10283                            );
10284                    -- the aggregate function MAX always returns one (possibly null) row, so
10285                    -- no need to check for the NO_DATA_FOUND exception, or initialize l_rev_code
10286            END IF;
10287        ELSE
10288            IF p_do_processed_rows_flag = FND_API.G_TRUE THEN
10289                SELECT MAX( EIUAI.REVISION )
10290                INTO l_rev_code
10291                FROM EGO_ITM_USR_ATTR_INTRFC EIUAI
10292                WHERE
10293                    (   (   EIUAI.INVENTORY_ITEM_ID     IS NULL
10294                        AND EIUAI.ITEM_NUMBER           = p_item_number
10295                        )
10296                    OR  EIUAI.INVENTORY_ITEM_ID         = p_inventory_item_id
10297                    )
10298                    AND EIUAI.ORGANIZATION_ID           = p_organization_id
10299                    AND EIUAI.DATA_SET_ID               = p_batch_id
10300                    AND EIUAI.REVISION                  IS NOT NULL
10301                    AND EIUAI.PROCESS_STATUS            IN ( 3, 4 )
10302                    AND EIUAI.REQUEST_ID                = p_request_id
10303                    AND EXISTS( SELECT NULL -- SEE DEFINITION OF EGO_OBJ_ATTR_GRP_ASSOCS_V
10304                            FROM EGO_FND_DSC_FLX_CTX_EXT FL_CTX_EXT
10305                               , EGO_OBJ_AG_ASSOCS_B A
10306                            WHERE
10307                                -- CHECK FOR REVISION LEVEL GROUPS ONLY
10308                                A.DATA_LEVEL                             = 'ITEM_REVISION_LEVEL'
10309                                AND FL_CTX_EXT.DESCRIPTIVE_FLEXFIELD_NAME    = NVL( EIUAI.ATTR_GROUP_TYPE, G_DEFAULT_ATTR_GROUP_TYPE )
10310                                AND FL_CTX_EXT.APPLICATION_ID                = 431
10311                                AND FL_CTX_EXT.DESCRIPTIVE_FLEX_CONTEXT_CODE = EIUAI.ATTR_GROUP_INT_NAME
10312                                AND A.ATTR_GROUP_ID                      = FL_CTX_EXT.ATTR_GROUP_ID
10313                                -- TO ENSURE A(OBJECT_ID, CLASS_CODE, ATTR_GROUP) IDX USED:
10314                                AND A.CLASSIFICATION_CODE                IS NOT NULL
10315                                AND A.OBJECT_ID                          IS NOT NULL
10316                                AND ROWNUM = 1
10317                            );
10318                    -- the aggregate function MAX always returns one (possibly null) row, so
10319                    -- no need to check for the NO_DATA_FOUND exception, or initialize l_rev_code
10320            ELSE
10321                SELECT MAX( EIUAI.REVISION )
10322                INTO l_rev_code
10323                FROM EGO_ITM_USR_ATTR_INTRFC EIUAI
10324                WHERE
10325                    (   (   EIUAI.INVENTORY_ITEM_ID     IS NULL
10326                        AND EIUAI.ITEM_NUMBER           = p_item_number
10327                        )
10328                    OR  EIUAI.INVENTORY_ITEM_ID         = p_inventory_item_id
10329                    )
10330                    AND EIUAI.ORGANIZATION_ID           = p_organization_id
10331                    AND EIUAI.DATA_SET_ID               = p_batch_id
10332                    AND EIUAI.REVISION                  IS NOT NULL
10333                    AND EIUAI.PROCESS_STATUS            = 1
10334                    AND EXISTS( SELECT NULL -- SEE DEFINITION OF EGO_OBJ_ATTR_GRP_ASSOCS_V
10335                            FROM EGO_FND_DSC_FLX_CTX_EXT FL_CTX_EXT
10336                               , EGO_OBJ_AG_ASSOCS_B A
10337                            WHERE
10338                                -- CHECK FOR REVISION LEVEL GROUPS ONLY
10339                                A.DATA_LEVEL                             = 'ITEM_REVISION_LEVEL'
10340                                AND FL_CTX_EXT.DESCRIPTIVE_FLEXFIELD_NAME    = NVL( EIUAI.ATTR_GROUP_TYPE, G_DEFAULT_ATTR_GROUP_TYPE )
10341                                AND FL_CTX_EXT.APPLICATION_ID                = 431
10342                                AND FL_CTX_EXT.DESCRIPTIVE_FLEX_CONTEXT_CODE = EIUAI.ATTR_GROUP_INT_NAME
10343                                AND A.ATTR_GROUP_ID                      = FL_CTX_EXT.ATTR_GROUP_ID
10344                                -- TO ENSURE A(OBJECT_ID, CLASS_CODE, ATTR_GROUP) IDX USED:
10345                                AND A.CLASSIFICATION_CODE                IS NOT NULL
10346                                AND A.OBJECT_ID                          IS NOT NULL
10347                                AND ROWNUM = 1
10348                            );
10349                    -- the aggregate function MAX always returns one (possibly null) row, so
10350                    -- no need to check for the NO_DATA_FOUND exception, or initialize l_rev_code
10351            END IF;
10352        END IF;
10353        RETURN l_rev_code;
10354    END GET_LATEST_EIUAI_REV_PDH;
10355 
10356     FUNCTION GET_LATEST_MIRI_REV_SS
10357     (
10358         p_batch_id                      IN  MTL_ITEM_REVISIONS_INTERFACE.SET_PROCESS_ID%TYPE
10359     ,   p_source_system_id              IN  MTL_ITEM_REVISIONS_INTERFACE.SOURCE_SYSTEM_ID%TYPE
10360     ,   p_source_system_reference       IN  MTL_ITEM_REVISIONS_INTERFACE.SOURCE_SYSTEM_REFERENCE%TYPE
10361     ,   p_organization_id               IN  MTL_ITEM_REVISIONS_INTERFACE.ORGANIZATION_ID%TYPE
10362     ,   p_do_processed_rows_flag        IN  FLAG                    DEFAULT FND_API.G_FALSE
10363     ,   p_request_id                    IN  MTL_ITEM_REVISIONS_INTERFACE.REQUEST_ID%TYPE DEFAULT NULL
10364     )
10365     RETURN MTL_ITEM_REVISIONS_INTERFACE.REVISION%TYPE IS
10366        l_revision MTL_ITEM_REVISIONS_INTERFACE.REVISION%TYPE;
10367    BEGIN
10368       IF p_do_processed_rows_flag = FND_API.G_FALSE THEN
10369             SELECT MAX( REVISION ) KEEP ( DENSE_RANK FIRST ORDER BY MIRI.EFFECTIVITY_DATE DESC NULLS LAST , MIRI.REVISION DESC NULLS LAST )
10370             INTO l_revision
10371             FROM
10372                MTL_ITEM_REVISIONS_INTERFACE MIRI
10373             WHERE   MIRI.SET_PROCESS_id             = p_batch_id
10374                 AND MIRI.SOURCE_SYSTEM_ID           = p_source_system_id
10375                 AND MIRI.SOURCE_SYSTEM_REFERENCE    = p_source_system_reference
10376                 AND MIRI.ORGANIZATION_ID            = p_organization_id
10377                 AND MIRI.PROCESS_FLAG               = 0;
10378       ELSE
10379             SELECT MAX( REVISION ) KEEP ( DENSE_RANK FIRST ORDER BY MIRI.EFFECTIVITY_DATE DESC NULLS LAST , MIRI.REVISION DESC NULLS LAST )
10380             INTO l_revision
10381             FROM
10382                MTL_ITEM_REVISIONS_INTERFACE MIRI
10383             WHERE
10384                MIRI.SET_PROCESS_id              = p_batch_id
10385                AND MIRI.SOURCE_SYSTEM_ID        = p_source_system_id
10386                AND MIRI.SOURCE_SYSTEM_REFERENCE = p_source_system_reference
10387                AND MIRI.ORGANIZATION_ID         = p_organization_id
10388                AND MIRI.REQUEST_ID              = p_request_id
10389                AND MIRI.PROCESS_FLAG            IN (3, 7);
10390       END IF;
10391       RETURN l_revision;
10392    EXCEPTION
10393        WHEN NO_DATA_FOUND THEN
10394            RETURN NULL;
10395    END GET_LATEST_MIRI_REV_SS;
10396 
10397     FUNCTION GET_LATEST_MIRI_REV_PDH
10398     (
10399         p_batch_id                      IN  MTL_ITEM_REVISIONS_INTERFACE.SET_PROCESS_ID%TYPE
10400     ,   p_inventory_item_id             IN  MTL_ITEM_REVISIONS_INTERFACE.INVENTORY_ITEM_ID%TYPE
10401     ,   p_item_number                   IN  MTL_ITEM_REVISIONS_INTERFACE.ITEM_NUMBER%TYPE
10402     ,   p_organization_id               IN  MTL_ITEM_REVISIONS_INTERFACE.ORGANIZATION_ID%TYPE
10403     ,   p_do_processed_rows_flag        IN  FLAG                    DEFAULT FND_API.G_FALSE
10404     ,   p_request_id                    IN  MTL_ITEM_REVISIONS_INTERFACE.REQUEST_ID%TYPE DEFAULT NULL
10405     )
10406    RETURN MTL_ITEM_REVISIONS_INTERFACE.REVISION%TYPE IS
10407        l_revision MTL_ITEM_REVISIONS_INTERFACE.REVISION%TYPE;
10408    BEGIN
10409       IF p_inventory_item_id IS NULL THEN
10410          IF p_do_processed_rows_flag = FND_API.G_FALSE THEN
10411             SELECT MAX( REVISION ) KEEP ( DENSE_RANK FIRST
10412                                         ORDER BY MIRI.EFFECTIVITY_DATE DESC NULLS LAST , MIRI.REVISION DESC NULLS LAST )
10413             INTO l_revision
10414             FROM MTL_ITEM_REVISIONS_INTERFACE MIRI
10415             WHERE  MIRI.SET_PROCESS_id      = p_batch_id
10416                AND MIRI.ITEM_NUMBER         = p_item_number
10417                AND MIRI.ORGANIZATION_ID     = p_organization_id
10418                AND MIRI.PROCESS_FLAG        = 1;
10419          ELSE
10420             SELECT MAX( REVISION ) KEEP ( DENSE_RANK FIRST
10421                                         ORDER BY MIRI.EFFECTIVITY_DATE DESC NULLS LAST , MIRI.REVISION DESC NULLS LAST )
10422             INTO l_revision
10423             FROM MTL_ITEM_REVISIONS_INTERFACE MIRI
10424             WHERE  MIRI.SET_PROCESS_id      = p_batch_id
10425                AND MIRI.ITEM_NUMBER         = p_item_number
10426                AND MIRI.ORGANIZATION_ID     = p_organization_id
10427                AND MIRI.REQUEST_ID          = p_request_id
10428                AND MIRI.PROCESS_FLAG        IN (3, 7);
10429          END IF;
10430       ELSE -- p_inventory_item_id is not null
10431          IF p_do_processed_rows_flag = FND_API.G_FALSE THEN
10432             SELECT MAX( REVISION ) KEEP ( DENSE_RANK FIRST
10433                                         ORDER BY MIRI.EFFECTIVITY_DATE DESC NULLS LAST , MIRI.REVISION DESC NULLS LAST )
10434             INTO l_revision
10435             FROM MTL_ITEM_REVISIONS_INTERFACE MIRI
10436             WHERE   MIRI.SET_PROCESS_id = p_batch_id
10437                 AND (   ( MIRI.INVENTORY_ITEM_ID IS NULL AND MIRI.ITEM_NUMBER = p_item_number )
10438                     OR  MIRI.INVENTORY_ITEM_ID  = p_inventory_item_id
10439                     )
10440                 AND MIRI.ORGANIZATION_ID        = p_organization_id
10441                 AND MIRI.PROCESS_FLAG           = 1;
10442          ELSE
10443             SELECT MAX( REVISION ) KEEP ( DENSE_RANK FIRST
10444                                         ORDER BY MIRI.EFFECTIVITY_DATE DESC NULLS LAST , MIRI.REVISION DESC NULLS LAST )
10445             INTO l_revision
10446             FROM MTL_ITEM_REVISIONS_INTERFACE MIRI
10447             WHERE   MIRI.SET_PROCESS_id = p_batch_id
10448                 AND (   ( MIRI.INVENTORY_ITEM_ID IS NULL AND MIRI.ITEM_NUMBER = p_item_number )
10449                     OR  MIRI.INVENTORY_ITEM_ID  = p_inventory_item_id
10450                     )
10451                 AND MIRI.ORGANIZATION_ID        = p_organization_id
10452                 AND PROCESS_FLAG                IN ( 3, 7 );
10453          END IF;
10454       END IF;
10455       RETURN l_revision;
10456    EXCEPTION
10457        WHEN NO_DATA_FOUND THEN
10458            RETURN NULL;
10459    END GET_LATEST_MIRI_REV_PDH;
10460 
10461    --------------------------------------------------------------------------------------------
10462    --  Function WRAPPED_TO_NUMBER                                                            --
10463    --      Wraps the to_number built-in to return null in case of conversion failure         --
10464    --------------------------------------------------------------------------------------------
10465    FUNCTION WRAPPED_TO_NUMBER( p_val VARCHAR2 )
10466    RETURN NUMBER
10467    DETERMINISTIC
10468    IS
10469        l_return_value  NUMBER;
10470    BEGIN
10471        l_return_value := to_number( p_val );
10472        RETURN l_return_value;
10473    EXCEPTION
10474        WHEN OTHERS THEN
10475            RETURN NULL;
10476    END WRAPPED_TO_NUMBER;
10477 
10478    --------------------------------------------------------------------------------------------
10479    --  Function WRAPPED_TO_DATE                                                              --
10480    --      Wraps the to_date built-in to return null in case of conversion failure           --
10481    --------------------------------------------------------------------------------------------
10482    FUNCTION WRAPPED_TO_DATE( p_val VARCHAR2 )
10483    RETURN DATE
10484    DETERMINISTIC
10485    IS
10486        l_return_value  DATE;
10487    BEGIN
10488        l_return_value := to_date( p_val, EGO_USER_ATTRS_COMMON_PVT.G_DATE_FORMAT );
10489 
10490        -- bug 5366882: substitute internal "null-out" value with excel "null-out" value
10491        RETURN CASE WHEN l_return_value = to_date( '1', 'J' ) THEN G_EXCEL_MISS_DATE_VAL -- to_date( '9999-12-31', 'YYYY-MM-DD' )
10492                    ELSE l_return_value
10493                    END;
10494    EXCEPTION
10495        WHEN OTHERS THEN
10496            RETURN NULL;
10497    END WRAPPED_TO_DATE;
10498 
10499    --------------------------------------------------------------------------------------------
10500    --  Function GET_REV_USR_ATTR                                                             --
10501    --  Returns the display value of the specified revision attribute; if there is no         --
10502    --      display value, it returns the appropriate value column, based on the              --
10503    --      p_attr_value_type parameter                                                       --
10504    --------------------------------------------------------------------------------------------
10505    FUNCTION GET_REV_USR_ATTR
10506    (   p_batch_id                          IN  EGO_ITM_USR_ATTR_INTRFC.DATA_SET_ID%TYPE
10507        , p_source_system_id                IN  EGO_ITM_USR_ATTR_INTRFC.SOURCE_SYSTEM_ID%TYPE
10508        , p_source_system_reference         IN  EGO_ITM_USR_ATTR_INTRFC.SOURCE_SYSTEM_REFERENCE%TYPE
10509        , p_organization_id                 IN  EGO_ITM_USR_ATTR_INTRFC.ORGANIZATION_ID%TYPE
10510        , p_revision_code                   IN  EGO_ITM_USR_ATTR_INTRFC.REVISION%TYPE
10511        , p_attr_group_type                 IN  EGO_ITM_USR_ATTR_INTRFC.ATTR_GROUP_TYPE%TYPE
10512        , p_attr_group_name                 IN  EGO_ITM_USR_ATTR_INTRFC.ATTR_GROUP_INT_NAME%TYPE
10513        , p_attr_name                       IN  EGO_ITM_USR_ATTR_INTRFC.ATTR_INT_NAME%TYPE
10514        , p_attr_value_type                 IN  FLAG
10515        )
10516    RETURN EGO_ITM_USR_ATTR_INTRFC.ATTR_DISP_VALUE%TYPE
10517    IS
10518        l_return_value      EGO_ITM_USR_ATTR_INTRFC.ATTR_DISP_VALUE%TYPE;
10519        l_revision_code     EGO_ITM_USR_ATTR_INTRFC.REVISION%TYPE;
10520    BEGIN
10521        l_return_value  := null;
10522        l_revision_code := p_revision_code;
10523 
10524        -- Check to see whether the revision code has been provided:
10525        -- If not, default it to be the code of the latest LOGICAL revision row
10526        IF l_revision_code IS NULL
10527        THEN
10528            l_revision_code := GET_LATEST_EIUAI_REV_SS( p_batch_id                  => p_batch_id
10529                                                      , p_source_system_id          => p_source_system_id
10530                                                      , p_source_system_reference   => p_source_system_reference
10531                                                      , p_organization_id           => p_organization_id
10532                                                      , p_do_processed_rows_flag    => FND_API.G_FALSE
10533                                                      );
10534        END IF;
10535 
10536        IF  l_revision_code IS NOT NULL
10537        THEN
10538            BEGIN -- start sub-query block
10539                CASE p_attr_value_type
10540                    -- text attr-type case
10541                    WHEN G_TEXT_DATA_TYPE THEN
10542                        SELECT NVL( EIUAI.ATTR_DISP_VALUE, EIUAI.ATTR_VALUE_STR ) INTO l_return_value
10543                        FROM EGO_ITM_USR_ATTR_INTRFC EIUAI
10544                        WHERE
10545                            NVL( EIUAI.ATTR_GROUP_TYPE, G_DEFAULT_ATTR_GROUP_TYPE ) = p_attr_group_type
10546                            AND EIUAI.ATTR_GROUP_INT_NAME       = p_attr_group_name
10547                            AND EIUAI.ATTR_INT_NAME             = p_attr_name
10548                            AND EIUAI.SOURCE_SYSTEM_REFERENCE   = p_source_system_reference
10549                            AND EIUAI.SOURCE_SYSTEM_ID          = p_source_system_id
10550                            AND EIUAI.ORGANIZATION_ID           = p_organization_id
10551                            AND EIUAI.DATA_SET_ID               = p_batch_id
10552                            AND EIUAI.REVISION                  = l_revision_code
10553                            AND rownum < 2
10554                            ;
10555                    -- end text attr-type case
10556                    -- number attr-type case
10557                    WHEN G_NUMBER_DATA_TYPE THEN
10558                        SELECT NVL( EIUAI.ATTR_DISP_VALUE, TO_CHAR( EIUAI.ATTR_VALUE_NUM ) ) INTO l_return_value
10559                        FROM EGO_ITM_USR_ATTR_INTRFC EIUAI
10560                        WHERE
10561                            NVL( EIUAI.ATTR_GROUP_TYPE, G_DEFAULT_ATTR_GROUP_TYPE ) = p_attr_group_type
10562                            AND EIUAI.ATTR_GROUP_INT_NAME       = p_attr_group_name
10563                            AND EIUAI.ATTR_INT_NAME             = p_attr_name
10564                            AND EIUAI.SOURCE_SYSTEM_REFERENCE   = p_source_system_reference
10565                            AND EIUAI.SOURCE_SYSTEM_ID          = p_source_system_id
10566                            AND EIUAI.ORGANIZATION_ID           = p_organization_id
10567                            AND EIUAI.DATA_SET_ID               = p_batch_id
10568                            AND EIUAI.REVISION                  = l_revision_code
10569                            AND rownum < 2
10570                            ;
10571                    -- end number attr-type case
10572                    -- date attr-type case
10573                    WHEN G_DATE_DATA_TYPE THEN
10574                        -- XXX: which date format to use? what about date-time type vs date-type?
10575                        SELECT NVL( EIUAI.ATTR_DISP_VALUE, TO_CHAR( EIUAI.ATTR_VALUE_DATE ) ) INTO l_return_value
10576                        FROM EGO_ITM_USR_ATTR_INTRFC EIUAI
10577                        WHERE
10578                            NVL( EIUAI.ATTR_GROUP_TYPE, G_DEFAULT_ATTR_GROUP_TYPE ) = p_attr_group_type
10579                            AND EIUAI.ATTR_GROUP_INT_NAME       = p_attr_group_name
10580                            AND EIUAI.ATTR_INT_NAME             = p_attr_name
10581                            AND EIUAI.SOURCE_SYSTEM_REFERENCE   = p_source_system_reference
10582                            AND EIUAI.SOURCE_SYSTEM_ID          = p_source_system_id
10583                            AND EIUAI.ORGANIZATION_ID           = p_organization_id
10584                            AND EIUAI.DATA_SET_ID               = p_batch_id
10585                            AND EIUAI.REVISION                  = l_revision_code
10586                            AND rownum < 2
10587                            ;
10588                    -- end date attr-type case
10589                END CASE;
10590            EXCEPTION
10591                WHEN NO_DATA_FOUND THEN -- this attribute is not present in the interface table!
10592                    l_return_value := null; -- 'no data found';
10593                WHEN OTHERS THEN
10594                    l_return_value := null; -- 'other error';
10595            END; -- query sub-block
10596        ELSE -- revision code is null
10597            BEGIN -- start sub-query block
10598                CASE p_attr_value_type
10599                    -- text attr-type case
10600                    WHEN G_TEXT_DATA_TYPE THEN
10601                        SELECT NVL( EIUAI.ATTR_DISP_VALUE, EIUAI.ATTR_VALUE_STR ) INTO l_return_value
10602                        FROM EGO_ITM_USR_ATTR_INTRFC EIUAI
10603                        WHERE
10604                            NVL( EIUAI.ATTR_GROUP_TYPE, G_DEFAULT_ATTR_GROUP_TYPE ) = p_attr_group_type
10605                            AND EIUAI.ATTR_GROUP_INT_NAME       = p_attr_group_name
10606                            AND EIUAI.ATTR_INT_NAME             = p_attr_name
10607                            AND EIUAI.SOURCE_SYSTEM_REFERENCE   = p_source_system_reference
10608                            AND EIUAI.SOURCE_SYSTEM_ID          = p_source_system_id
10609                            AND EIUAI.ORGANIZATION_ID           = p_organization_id
10610                            AND EIUAI.DATA_SET_ID               = p_batch_id
10611                            AND EIUAI.REVISION                  IS NULL
10612                            AND rownum < 2
10613                            ;
10614                    -- end text attr-type case
10615                    -- number attr-type case
10616                    WHEN G_NUMBER_DATA_TYPE THEN
10617                        SELECT NVL( EIUAI.ATTR_DISP_VALUE, TO_CHAR( EIUAI.ATTR_VALUE_NUM ) ) INTO l_return_value
10618                        FROM EGO_ITM_USR_ATTR_INTRFC EIUAI
10619                        WHERE
10620                            NVL( EIUAI.ATTR_GROUP_TYPE, G_DEFAULT_ATTR_GROUP_TYPE ) = p_attr_group_type
10621                            AND EIUAI.ATTR_GROUP_INT_NAME       = p_attr_group_name
10622                            AND EIUAI.ATTR_INT_NAME             = p_attr_name
10623                            AND EIUAI.SOURCE_SYSTEM_REFERENCE   = p_source_system_reference
10624                            AND EIUAI.SOURCE_SYSTEM_ID          = p_source_system_id
10625                            AND EIUAI.ORGANIZATION_ID           = p_organization_id
10626                            AND EIUAI.DATA_SET_ID               = p_batch_id
10627                            AND EIUAI.REVISION                  IS NULL
10628                            AND rownum < 2
10629                            ;
10630                    -- end number attr-type case
10631                    -- date attr-type case
10632                    WHEN G_DATE_DATA_TYPE THEN
10633                        -- XXX: which date format to use? what about date-time type vs date-type?
10634                        SELECT NVL( EIUAI.ATTR_DISP_VALUE, TO_CHAR( EIUAI.ATTR_VALUE_DATE ) ) INTO l_return_value
10635                        FROM EGO_ITM_USR_ATTR_INTRFC EIUAI
10636                        WHERE
10637                            NVL( EIUAI.ATTR_GROUP_TYPE, G_DEFAULT_ATTR_GROUP_TYPE ) = p_attr_group_type
10638                            AND EIUAI.ATTR_GROUP_INT_NAME       = p_attr_group_name
10639                            AND EIUAI.ATTR_INT_NAME             = p_attr_name
10640                            AND EIUAI.SOURCE_SYSTEM_REFERENCE   = p_source_system_reference
10641                            AND EIUAI.SOURCE_SYSTEM_ID          = p_source_system_id
10642                            AND EIUAI.ORGANIZATION_ID           = p_organization_id
10643                            AND EIUAI.DATA_SET_ID               = p_batch_id
10644                            AND EIUAI.REVISION                  IS NULL
10645                            AND rownum < 2
10646                            ;
10647                    -- end date attr-type case
10648                END CASE;
10649            EXCEPTION
10650                WHEN NO_DATA_FOUND THEN -- this attribute is not present in the interface table!
10651                    l_return_value := null; -- 'no data found';
10652                WHEN OTHERS THEN
10653                    l_return_value := null; -- 'other error';
10654            END; -- query sub-block
10655        END IF;
10656 
10657        RETURN l_return_value;
10658    END GET_REV_USR_ATTR;
10659 
10660     ----------------------------------------------------------------------------------------------
10661     --  Function GET_REV_USR_ATTR_TO_CHAR
10662     --  Returns the display value of the specified revision attribute, if the attribute is present
10663     --  in the interface table, or the internal value, interpreted as a display value.
10664     --  The assumption is that this will be called from a value set context ...
10665     ----------------------------------------------------------------------------------------------
10666     FUNCTION GET_REV_USR_ATTR_TO_CHAR
10667         (
10668           p_batch_id                        IN  EGO_ITM_USR_ATTR_INTRFC.DATA_SET_ID%TYPE
10669         , p_source_system_id                IN  EGO_ITM_USR_ATTR_INTRFC.SOURCE_SYSTEM_ID%TYPE           DEFAULT NULL
10670         , p_source_system_reference         IN  EGO_ITM_USR_ATTR_INTRFC.SOURCE_SYSTEM_REFERENCE%TYPE    DEFAULT NULL
10671         , p_organization_id                 IN  EGO_ITM_USR_ATTR_INTRFC.ORGANIZATION_ID%TYPE
10672         , p_revision_code                   IN  EGO_ITM_USR_ATTR_INTRFC.REVISION%TYPE
10673         , p_attr_group_type                 IN  EGO_ITM_USR_ATTR_INTRFC.ATTR_GROUP_TYPE%TYPE
10674         , p_attr_group_name                 IN  EGO_ITM_USR_ATTR_INTRFC.ATTR_GROUP_INT_NAME%TYPE
10675         , p_attr_name                       IN  EGO_ITM_USR_ATTR_INTRFC.ATTR_INT_NAME%TYPE
10676         , p_do_processed_rows_flag          IN  FLAG DEFAULT FND_API.G_FALSE
10677         , p_request_id                      IN  EGO_ITM_USR_ATTR_INTRFC.REQUEST_ID%TYPE                 DEFAULT NULL
10678         , p_inventory_item_id               IN  EGO_ITM_USR_ATTR_INTRFC.INVENTORY_ITEM_ID%TYPE          DEFAULT NULL
10679         , p_item_number                     IN  EGO_ITM_USR_ATTR_INTRFC.ITEM_NUMBER%TYPE                DEFAULT NULL
10680         , p_use_pdh_keys_to_join            IN  BOOLEAN
10681         , p_get_value_col                   IN  BOOLEAN
10682         , p_attr_type                       IN  FLAG
10683         , p_attr_miss_value                 IN  BOOLEAN DEFAULT TRUE
10684         )
10685     RETURN EGO_ITM_USR_ATTR_INTRFC.ATTR_DISP_VALUE%TYPE
10686     IS
10687         l_return_value      EGO_ITM_USR_ATTR_INTRFC.ATTR_DISP_VALUE%TYPE;
10688         l_revision_code     EGO_ITM_USR_ATTR_INTRFC.REVISION%TYPE;
10689         l_sql_stmt          VARCHAR2( 32000 );
10690         l_do_procd_rows_sql VARCHAR2( 200 );
10691         l_join_sql          VARCHAR2( 200 );
10692         l_select_sql        VARCHAR2( 200 );
10693         l_do_processed_rows BOOLEAN;
10694         l_miss_str          VARCHAR2( 30 );
10695         l_date_format       VARCHAR2( 30 ) := NULL;
10696     BEGIN
10697         l_return_value  := null; -- 'default';
10698 
10699         CASE -- order of WHEN clauses matters!
10700             WHEN p_USE_PDH_KEYS_TO_JOIN AND
10701                  p_inventory_item_id IS NULL AND
10702                  p_item_number IS NULL
10703                 THEN RETURN l_return_value;
10704             WHEN p_USE_PDH_KEYS_TO_JOIN THEN
10705                 l_join_sql :=
10706                     ' AND ( ( '
10707                 ||  CASE
10708                     WHEN p_inventory_item_id IS NOT NULL THEN
10709                             ' EIUAI.INVENTORY_ITEM_ID     IS NULL AND'
10710                     ELSE    ''
10711                     END
10712                 ||          ' EIUAI.ITEM_NUMBER           = :item_number '
10713                 ||          ' ) '
10714                 ||      ' OR  EIUAI.INVENTORY_ITEM_ID     = :item_id '
10715                 ||      ' ) '
10716                 ;
10717             WHEN p_source_system_reference IS NULL AND
10718                  p_source_system_id IS NULL
10719                  THEN RETURN l_return_value;
10720             ELSE
10721                 l_join_sql := ' AND EIUAI.SOURCE_SYSTEM_REFERENCE   = :ss_ref '
10722                            || ' AND EIUAI.SOURCE_SYSTEM_ID          = :ss_id ';
10723         END CASE;
10724 
10725         l_do_processed_rows := ( p_do_processed_rows_flag = FND_API.G_TRUE );
10726         l_do_procd_rows_sql :=  ' AND EIUAI.PROCESS_STATUS'
10727                             ||  CASE
10728                                 WHEN l_do_processed_rows                                    THEN ' IN ( 3, 4 ) AND EIUAI.REQUEST_ID = :req_id '
10729                                 WHEN NOT l_do_processed_rows AND NOT p_use_pdh_keys_to_join THEN ' = 0 '
10730                                 WHEN NOT l_do_processed_rows AND p_use_pdh_keys_to_join     THEN ' = 1 '
10731                                 ELSE ''   -- XXX: hmmm, raise exception here?
10732                                 END;
10733 
10734         l_date_format :=    CASE p_attr_type
10735                             WHEN G_DATE_TIME_DATA_TYPE THEN FND_PROFILE.VALUE( 'ICX_DATE_FORMAT_MASK' ) || ' HH24:MI:SS'
10736                             WHEN G_DATE_DATA_TYPE THEN FND_PROFILE.VALUE( 'ICX_DATE_FORMAT_MASK' )
10737                             ELSE NULL
10738                             END;
10739 
10740         l_miss_str  := CASE WHEN NOT p_attr_miss_value      THEN G_EXCEL_MISS_VS_VAL
10741                             WHEN p_attr_type = G_DATE_DATA_TYPE       THEN 'TO_CHAR('||G_EXCEL_MISS_DATE_STR||','''||l_date_format||''')'
10742                             WHEN p_attr_type = G_DATE_TIME_DATA_TYPE  THEN 'TO_CHAR('||G_EXCEL_MISS_DATE_STR||','''||l_date_format||''')'
10743                             WHEN p_attr_type = G_NUMBER_DATA_TYPE     THEN 'TO_CHAR('||G_EXCEL_MISS_NUM_STR||')'
10744                             WHEN p_attr_type = G_TEXT_DATA_TYPE       THEN ''''||G_EXCEL_MISS_CHAR_VAL||''''
10745                             END;
10746 
10747         IF p_get_value_col
10748         THEN
10749             l_select_sql := CASE
10750                             WHEN p_attr_type = G_DATE_DATA_TYPE OR p_attr_type = G_DATE_TIME_DATA_TYPE THEN
10751                                 'DECODE( EIUAI.ATTR_VALUE_DATE'
10752                                     ||', NULL, ' || l_miss_str
10753                                     ||', '|| EGO_USER_ATTRS_BULK_PVT.G_NULL_DATE_VAL ||', '|| l_miss_str
10754                                     ||', TO_CHAR( EIUAI.ATTR_VALUE_DATE, '''|| l_date_format || ''')'
10755                                     ||')'
10756                             WHEN p_attr_type = G_NUMBER_DATA_TYPE THEN
10757                                 -- ignore UOM column completely ... the assumption is that this
10758                                 -- code is called for junk values only
10759                                 'DECODE( EIUAI.ATTR_VALUE_NUM'
10760                                     ||', NULL, ' || l_miss_str
10761                                     ||', TO_CHAR( EIUAI.ATTR_VALUE_NUM )'
10762                                     ||')'
10763                             WHEN p_attr_type = G_TEXT_DATA_TYPE THEN
10764                                 'NVL( EIUAI.ATTR_VALUE_STR, '|| l_miss_str || ')'
10765                             END;
10766         ELSE
10767             l_select_sql := ' EIUAI.ATTR_DISP_VALUE ';
10768         END IF;
10769 
10770         -- Check to see whether the revision code has been provided:
10771         -- If not, default it to be the code of the latest LOGICAL revision row
10772         l_revision_code :=
10773             CASE -- order of WHEN clauses matters!
10774             WHEN p_revision_code IS NOT NULL THEN p_revision_code
10775             WHEN p_use_pdh_keys_to_join THEN
10776                 GET_LATEST_EIUAI_REV_PDH(   p_batch_id                  => p_batch_id
10777                                         ,   p_inventory_item_id         => p_inventory_item_id
10778                                         ,   p_item_number               => p_item_number
10779                                         ,   p_organization_id           => p_organization_id
10780                                         ,   p_do_processed_rows_flag    => p_do_processed_rows_flag
10781                                         ,   p_request_id                => p_request_id
10782                                         )
10783             ELSE
10784                 GET_LATEST_EIUAI_REV_SS (   p_batch_id                  => p_batch_id
10785                                         ,   p_source_system_id          => p_source_system_id
10786                                         ,   p_source_system_reference   => p_source_system_reference
10787                                         ,   p_organization_id           => p_organization_id
10788                                         ,   p_do_processed_rows_flag    => p_do_processed_rows_flag
10789                                         ,   p_request_id                => p_request_id
10790                                         )
10791             END;
10792 
10793         l_sql_stmt := '
10794             SELECT ' || l_select_sql
10795         ||' FROM EGO_ITM_USR_ATTR_INTRFC EIUAI '
10796         ||' WHERE '
10797             ||' NVL( EIUAI.ATTR_GROUP_TYPE, :default_attr_grp ) = :attr_grp_type'
10798             ||' AND EIUAI.ATTR_GROUP_INT_NAME       = :attr_grp'
10799             ||' AND EIUAI.ATTR_INT_NAME             = :attr '
10800                 || l_join_sql
10801             ||' AND EIUAI.ORGANIZATION_ID           = :org_id '
10802             ||' AND EIUAI.DATA_SET_ID               = :batch_id '
10803                 || l_do_procd_rows_sql
10804             ||' AND DECODE( EIUAI.REVISION, :rev_code, 1, 0 ) = 1 '
10805             ||' AND rownum = 1 '
10806             ;
10807             -- note that decode does a null-safe comparision (i.e. ( NULL = NULL ) = TRUE ||||'')
10808 
10809         IF l_do_processed_rows THEN
10810             CASE
10811                 WHEN p_USE_PDH_KEYS_TO_JOIN THEN
10812                     EXECUTE IMMEDIATE l_sql_stmt
10813                         INTO l_return_value
10814                         USING G_DEFAULT_ATTR_GROUP_TYPE
10815                             , p_attr_group_type, p_attr_group_name, p_attr_name
10816                             , p_item_number, p_inventory_item_id, p_organization_id, p_batch_id
10817                             , p_request_id
10818                             , l_revision_code
10819                         ;
10820                 WHEN NOT p_USE_PDH_KEYS_TO_JOIN THEN
10821                     EXECUTE IMMEDIATE l_sql_stmt
10822                         INTO l_return_value
10823                         USING G_DEFAULT_ATTR_GROUP_TYPE
10824                             , p_attr_group_type, p_attr_group_name, p_attr_name
10825                             , p_source_system_reference, p_source_system_id, p_organization_id, p_batch_id
10826                             , p_request_id
10827                             , l_revision_code
10828                         ;
10829             END CASE;
10830         ELSE -- unprocessed rows
10831             CASE
10832                 WHEN p_USE_PDH_KEYS_TO_JOIN THEN
10833                     EXECUTE IMMEDIATE l_sql_stmt
10834                         INTO l_return_value
10835                         USING G_DEFAULT_ATTR_GROUP_TYPE
10836                             , p_attr_group_type, p_attr_group_name, p_attr_name
10837                             , p_item_number, p_inventory_item_id, p_organization_id, p_batch_id
10838                             , l_revision_code
10839                         ;
10840                 WHEN NOT p_USE_PDH_KEYS_TO_JOIN THEN
10841                     EXECUTE IMMEDIATE l_sql_stmt
10842                         INTO l_return_value
10843                         USING G_DEFAULT_ATTR_GROUP_TYPE
10844                             , p_attr_group_type, p_attr_group_name, p_attr_name
10845                             , p_source_system_reference, p_source_system_id, p_organization_id, p_batch_id
10846                             , l_revision_code
10847                         ;
10848             END CASE;
10849         END IF;
10850 
10851         RETURN l_return_value;
10852 
10853     EXCEPTION
10854         WHEN NO_DATA_FOUND THEN -- this attribute is not present in the interface table !
10855             RETURN l_return_value;
10856         WHEN OTHERS THEN
10857             -- XXX: Log the error here?
10858             RETURN l_return_value;
10859     END GET_REV_USR_ATTR_TO_CHAR;
10860 
10861     FUNCTION GET_REV_USR_ATTR_SS_DISP
10862         (
10863           p_batch_id                        IN  EGO_ITM_USR_ATTR_INTRFC.DATA_SET_ID%TYPE
10864         , p_source_system_id                IN  EGO_ITM_USR_ATTR_INTRFC.SOURCE_SYSTEM_ID%TYPE
10865         , p_source_system_reference         IN  EGO_ITM_USR_ATTR_INTRFC.SOURCE_SYSTEM_REFERENCE%TYPE
10866         , p_organization_id                 IN  EGO_ITM_USR_ATTR_INTRFC.ORGANIZATION_ID%TYPE
10867         , p_revision_code                   IN  EGO_ITM_USR_ATTR_INTRFC.REVISION%TYPE
10868         , p_attr_group_type                 IN  EGO_ITM_USR_ATTR_INTRFC.ATTR_GROUP_TYPE%TYPE
10869         , p_attr_group_name                 IN  EGO_ITM_USR_ATTR_INTRFC.ATTR_GROUP_INT_NAME%TYPE
10870         , p_attr_name                       IN  EGO_ITM_USR_ATTR_INTRFC.ATTR_INT_NAME%TYPE
10871         , p_attr_type                       IN  FLAG
10872         , p_from_internal_column            IN  FLAG
10873         , p_do_processed_rows_flag          IN  FLAG                                    DEFAULT FND_API.G_FALSE
10874         , p_request_id                      IN  EGO_ITM_USR_ATTR_INTRFC.REQUEST_ID%TYPE DEFAULT NULL
10875         )
10876     RETURN EGO_ITM_USR_ATTR_INTRFC.ATTR_DISP_VALUE%TYPE
10877     IS
10878         l_get_value_col BOOLEAN := ( FND_API.G_TRUE = p_from_internal_column );
10879     BEGIN
10880         RETURN GET_REV_USR_ATTR_TO_CHAR
10881         (
10882           p_batch_id                        => p_batch_id
10883         , p_source_system_id                => p_source_system_id
10884         , p_source_system_reference         => p_source_system_reference
10885         , p_organization_id                 => p_organization_id
10886         , p_revision_code                   => p_revision_code
10887         , p_attr_group_type                 => p_attr_group_type
10888         , p_attr_group_name                 => p_attr_group_name
10889         , p_attr_name                       => p_attr_name
10890         , p_attr_type                       => p_attr_type
10891         , p_do_processed_rows_flag          => p_do_processed_rows_flag
10892         , p_request_id                      => p_request_id
10893         , p_use_pdh_keys_to_join            => FALSE
10894         , p_get_value_col                   => l_get_value_col
10895         , p_attr_miss_value                 => FALSE -- returns value set miss value if get_value_column TRUE
10896         );
10897     END;
10898 
10899     FUNCTION GET_REV_USR_ATTR_PDH_DISP
10900         (
10901           p_batch_id                        IN  EGO_ITM_USR_ATTR_INTRFC.DATA_SET_ID%TYPE
10902         , p_inventory_item_id               IN  EGO_ITM_USR_ATTR_INTRFC.INVENTORY_ITEM_ID%TYPE
10903         , p_item_number                     IN  EGO_ITM_USR_ATTR_INTRFC.ITEM_NUMBER%TYPE
10904         , p_organization_id                 IN  EGO_ITM_USR_ATTR_INTRFC.ORGANIZATION_ID%TYPE
10905         , p_revision_code                   IN  EGO_ITM_USR_ATTR_INTRFC.REVISION%TYPE
10906         , p_attr_group_type                 IN  EGO_ITM_USR_ATTR_INTRFC.ATTR_GROUP_TYPE%TYPE
10907         , p_attr_group_name                 IN  EGO_ITM_USR_ATTR_INTRFC.ATTR_GROUP_INT_NAME%TYPE
10908         , p_attr_name                       IN  EGO_ITM_USR_ATTR_INTRFC.ATTR_INT_NAME%TYPE
10909         , p_attr_type                       IN  FLAG
10910         , p_from_internal_column            IN  FLAG
10911         , p_do_processed_rows_flag          IN  FLAG                                    DEFAULT FND_API.G_FALSE
10912         , p_request_id                      IN  EGO_ITM_USR_ATTR_INTRFC.REQUEST_ID%TYPE DEFAULT NULL
10913         )
10914     RETURN EGO_ITM_USR_ATTR_INTRFC.ATTR_DISP_VALUE%TYPE
10915     IS
10916         l_get_value_col BOOLEAN := ( FND_API.G_TRUE = p_from_internal_column );
10917     BEGIN
10918         RETURN GET_REV_USR_ATTR_TO_CHAR
10919         (
10920           p_batch_id                        => p_batch_id
10921         , p_inventory_item_id               => p_inventory_item_id
10922         , p_item_number                     => p_item_number
10923         , p_organization_id                 => p_organization_id
10924         , p_revision_code                   => p_revision_code
10925         , p_attr_group_type                 => p_attr_group_type
10926         , p_attr_group_name                 => p_attr_group_name
10927         , p_attr_name                       => p_attr_name
10928         , p_attr_type                       => p_attr_type
10929         , p_do_processed_rows_flag          => p_do_processed_rows_flag
10930         , p_request_id                      => p_request_id
10931         , p_use_pdh_keys_to_join            => TRUE
10932         , p_get_value_col                   => l_get_value_col
10933         , p_attr_miss_value                 => FALSE -- returns value set miss value if get_value_column TRUE
10934         );
10935     END;
10936 
10937 
10938     ----------------------------------------------------------------------------------------------
10939     --  Function GET_REV_USR_ATTR_DISP_DATE
10940     --  Returns the date value of the specified revision attribute, if the attribute is present
10941     --  in the interface table, merging in an attempted conversion of the display column content.
10942     ----------------------------------------------------------------------------------------------
10943     FUNCTION GET_REV_USR_ATTR_DATE
10944         (
10945           p_batch_id                        IN  EGO_ITM_USR_ATTR_INTRFC.DATA_SET_ID%TYPE
10946         , p_source_system_id                IN  EGO_ITM_USR_ATTR_INTRFC.SOURCE_SYSTEM_ID%TYPE           DEFAULT NULL
10947         , p_source_system_reference         IN  EGO_ITM_USR_ATTR_INTRFC.SOURCE_SYSTEM_REFERENCE%TYPE    DEFAULT NULL
10948         , p_organization_id                 IN  EGO_ITM_USR_ATTR_INTRFC.ORGANIZATION_ID%TYPE
10949         , p_revision_code                   IN  EGO_ITM_USR_ATTR_INTRFC.REVISION%TYPE
10950         , p_attr_group_type                 IN  EGO_ITM_USR_ATTR_INTRFC.ATTR_GROUP_TYPE%TYPE
10951         , p_attr_group_name                 IN  EGO_ITM_USR_ATTR_INTRFC.ATTR_GROUP_INT_NAME%TYPE
10952         , p_attr_name                       IN  EGO_ITM_USR_ATTR_INTRFC.ATTR_INT_NAME%TYPE
10953         , p_do_processed_rows_flag          IN  FLAG DEFAULT FND_API.G_FALSE
10954         , p_request_id                      IN  EGO_ITM_USR_ATTR_INTRFC.REQUEST_ID%TYPE                 DEFAULT NULL
10955         , p_inventory_item_id               IN  EGO_ITM_USR_ATTR_INTRFC.INVENTORY_ITEM_ID%TYPE          DEFAULT NULL
10956         , p_item_number                     IN  EGO_ITM_USR_ATTR_INTRFC.ITEM_NUMBER%TYPE                DEFAULT NULL
10957         , p_use_pdh_keys_to_join            IN  BOOLEAN
10958         , p_get_value_column                IN  BOOLEAN
10959         )
10960     RETURN EGO_ITM_USR_ATTR_INTRFC.ATTR_VALUE_DATE%TYPE
10961     IS
10962         l_return_value      EGO_ITM_USR_ATTR_INTRFC.ATTR_VALUE_DATE%TYPE;
10963         l_revision_code     EGO_ITM_USR_ATTR_INTRFC.REVISION%TYPE;
10964         l_sql_stmt          VARCHAR2( 32000 );
10965         l_do_procd_rows_sql VARCHAR2( 200 );
10966         l_join_sql          VARCHAR2( 200 );
10967         l_select_sql        VARCHAR2( 300 );
10968         l_do_processed_rows BOOLEAN;
10969     BEGIN
10970         l_return_value  := null; -- 'default';
10971 
10972         CASE -- order of WHEN clauses matters!
10973             WHEN p_USE_PDH_KEYS_TO_JOIN AND
10974                  p_inventory_item_id IS NULL AND
10975                  p_item_number IS NULL
10976                 THEN RETURN l_return_value;
10977             WHEN p_USE_PDH_KEYS_TO_JOIN THEN
10978                 l_join_sql :=
10979                     ' AND ( ( '
10980                 ||  CASE
10981                     WHEN p_inventory_item_id IS NOT NULL THEN
10982                             ' EIUAI.INVENTORY_ITEM_ID     IS NULL AND'
10983                     ELSE    ''
10984                     END
10985                 ||          ' EIUAI.ITEM_NUMBER           = :item_number '
10986                 ||          ' ) '
10987                 ||      ' OR  EIUAI.INVENTORY_ITEM_ID     = :item_id '
10988                 ||      ' ) '
10989                 ;
10990             WHEN p_source_system_reference IS NULL AND
10991                  p_source_system_id IS NULL
10992                  THEN RETURN l_return_value;
10993             ELSE
10994                 l_join_sql := ' AND EIUAI.SOURCE_SYSTEM_REFERENCE   = :ss_ref '
10995                            || ' AND EIUAI.SOURCE_SYSTEM_ID          = :ss_id ';
10996         END CASE;
10997 
10998         l_do_processed_rows := ( p_do_processed_rows_flag = FND_API.G_TRUE );
10999         l_do_procd_rows_sql :=  ' AND EIUAI.PROCESS_STATUS'
11000                             ||  CASE
11001                                 WHEN l_do_processed_rows                                    THEN ' IN ( 3, 4 ) AND EIUAI.REQUEST_ID = :req_id '
11002                                 WHEN NOT l_do_processed_rows AND NOT p_use_pdh_keys_to_join THEN ' = 0 '
11003                                 WHEN NOT l_do_processed_rows AND p_use_pdh_keys_to_join     THEN ' = 1 '
11004                                 ELSE ''   -- XXX: hmmm, raise exception here?
11005                                 END;
11006 
11007         IF p_get_value_column THEN
11008             l_select_sql    := ' EIUAI.ATTR_VALUE_DATE ';
11009         ELSE
11010             l_select_sql    :=  ' NVL2( EIUAI.ATTR_DISP_VALUE '
11011                                 ||  ' , EGO_IMPORT_PVT.wrapped_to_date( EIUAI.ATTR_DISP_VALUE ) '
11012                                 ||  ' , CASE WHEN EIUAI.ATTR_VALUE_DATE IS NULL '
11013                                            || 'OR EIUAI.ATTR_VALUE_DATE = TO_DATE(''1'',''J'') THEN ' || G_EXCEL_MISS_DATE_STR
11014                                         || ' ELSE EIUAI.ATTR_VALUE_DATE END'
11015                                 ||  ' ) '
11016                             ;
11017         END IF;
11018 
11019         -- Check to see whether the revision code has been provided:
11020         -- If not, default it to be the code of the latest LOGICAL revision row
11021         l_revision_code :=
11022             CASE -- order of WHEN clauses matters!
11023             WHEN p_revision_code IS NOT NULL THEN p_revision_code
11024             WHEN p_use_pdh_keys_to_join THEN
11025                 GET_LATEST_EIUAI_REV_PDH(   p_batch_id                  => p_batch_id
11026                                         ,   p_inventory_item_id         => p_inventory_item_id
11027                                         ,   p_item_number               => p_item_number
11028                                         ,   p_organization_id           => p_organization_id
11029                                         ,   p_do_processed_rows_flag    => p_do_processed_rows_flag
11030                                         ,   p_request_id                => p_request_id
11031                                         )
11032             ELSE
11033                 GET_LATEST_EIUAI_REV_SS (   p_batch_id                  => p_batch_id
11034                                         ,   p_source_system_id          => p_source_system_id
11035                                         ,   p_source_system_reference   => p_source_system_reference
11036                                         ,   p_organization_id           => p_organization_id
11037                                         ,   p_do_processed_rows_flag    => p_do_processed_rows_flag
11038                                         ,   p_request_id                => p_request_id
11039                                         )
11040             END;
11041 
11042         l_sql_stmt := '
11043             SELECT ' || l_select_sql
11044         ||' FROM EGO_ITM_USR_ATTR_INTRFC EIUAI '
11045         ||' WHERE '
11046             ||' NVL( EIUAI.ATTR_GROUP_TYPE, :default_attr_grp ) = :attr_grp_type'
11047             ||' AND EIUAI.ATTR_GROUP_INT_NAME       = :attr_grp'
11048             ||' AND EIUAI.ATTR_INT_NAME             = :attr '
11049                 || l_join_sql
11050             ||' AND EIUAI.ORGANIZATION_ID           = :org_id '
11051             ||' AND EIUAI.DATA_SET_ID               = :batch_id '
11052                 || l_do_procd_rows_sql
11053             ||' AND DECODE( EIUAI.REVISION, :rev_code, 1, 0 ) = 1 '
11054             ||' AND rownum = 1 '
11055             ;
11056             -- note that decode does a null-safe comparision (i.e. ( NULL = NULL ) = TRUE ||||'')
11057 
11058 --      my_put_line( 'sql:' || l_sql_stmt );
11059 
11060         IF l_do_processed_rows THEN
11061             CASE
11062                 WHEN p_USE_PDH_KEYS_TO_JOIN THEN
11063                     EXECUTE IMMEDIATE l_sql_stmt
11064                         INTO l_return_value
11065                         USING G_DEFAULT_ATTR_GROUP_TYPE
11066                             , p_attr_group_type, p_attr_group_name, p_attr_name
11067                             , p_item_number, p_inventory_item_id, p_organization_id, p_batch_id
11068                             , p_request_id
11069                             , l_revision_code
11070                         ;
11071                 WHEN NOT p_USE_PDH_KEYS_TO_JOIN THEN
11072                     EXECUTE IMMEDIATE l_sql_stmt
11073                         INTO l_return_value
11074                         USING G_DEFAULT_ATTR_GROUP_TYPE
11075                             , p_attr_group_type, p_attr_group_name, p_attr_name
11076                             , p_source_system_reference, p_source_system_id, p_organization_id, p_batch_id
11077                             , p_request_id
11078                             , l_revision_code
11079                         ;
11080             END CASE;
11081         ELSE -- unprocessed rows
11082             CASE
11083                 WHEN p_USE_PDH_KEYS_TO_JOIN THEN
11084                     EXECUTE IMMEDIATE l_sql_stmt
11085                         INTO l_return_value
11086                         USING G_DEFAULT_ATTR_GROUP_TYPE
11087                             , p_attr_group_type, p_attr_group_name, p_attr_name
11088                             , p_item_number, p_inventory_item_id, p_organization_id, p_batch_id
11089                             , l_revision_code
11090                         ;
11091                 WHEN NOT p_USE_PDH_KEYS_TO_JOIN THEN
11092                     EXECUTE IMMEDIATE l_sql_stmt
11093                         INTO l_return_value
11094                         USING G_DEFAULT_ATTR_GROUP_TYPE
11095                             , p_attr_group_type, p_attr_group_name, p_attr_name
11096                             , p_source_system_reference, p_source_system_id, p_organization_id, p_batch_id
11097                             , l_revision_code
11098                         ;
11099             END CASE;
11100         END IF;
11101 
11102         RETURN l_return_value;
11103 
11104     EXCEPTION
11105         WHEN NO_DATA_FOUND THEN -- this attribute is not present in the interface table !
11106             RETURN l_return_value;
11107         WHEN OTHERS THEN
11108 --          MY_PUT_LINE( 'GET_REV_USR_ATTR_DATE Error code ' || SQLCODE || ': ' || SQLERRM );
11109             RETURN l_return_value;
11110     END GET_REV_USR_ATTR_DATE;
11111 
11112     FUNCTION GET_REV_USR_ATTR_SS_DDATE
11113         (
11114         p_batch_id                          IN  EGO_ITM_USR_ATTR_INTRFC.DATA_SET_ID%TYPE
11115         , p_source_system_id                IN  EGO_ITM_USR_ATTR_INTRFC.SOURCE_SYSTEM_ID%TYPE
11116         , p_source_system_reference         IN  EGO_ITM_USR_ATTR_INTRFC.SOURCE_SYSTEM_REFERENCE%TYPE
11117         , p_organization_id                 IN  EGO_ITM_USR_ATTR_INTRFC.ORGANIZATION_ID%TYPE
11118         , p_revision_code                   IN  EGO_ITM_USR_ATTR_INTRFC.REVISION%TYPE
11119         , p_attr_group_type                 IN  EGO_ITM_USR_ATTR_INTRFC.ATTR_GROUP_TYPE%TYPE
11120         , p_attr_group_name                 IN  EGO_ITM_USR_ATTR_INTRFC.ATTR_GROUP_INT_NAME%TYPE
11121         , p_attr_name                       IN  EGO_ITM_USR_ATTR_INTRFC.ATTR_INT_NAME%TYPE
11122         , p_do_processed_rows_flag          IN  FLAG                                DEFAULT FND_API.G_FALSE
11123         ,   p_request_id                    IN  EGO_ITM_USR_ATTR_INTRFC.REQUEST_ID%TYPE                 DEFAULT NULL
11124         )
11125     RETURN EGO_ITM_USR_ATTR_INTRFC.ATTR_VALUE_DATE%TYPE IS
11126     BEGIN
11127         RETURN GET_REV_USR_ATTR_DATE
11128         (
11129           p_batch_id                        => p_batch_id
11130         , p_source_system_id                => p_source_system_id
11131         , p_source_system_reference         => p_source_system_reference
11132         , p_organization_id                 => p_organization_id
11133         , p_revision_code                   => p_revision_code
11134         , p_attr_group_type                 => p_attr_group_type
11135         , p_attr_group_name                 => p_attr_group_name
11136         , p_attr_name                       => p_attr_name
11137         , p_do_processed_rows_flag          => p_do_processed_rows_flag
11138         , p_request_id                      => p_request_id
11139         , p_use_pdh_keys_to_join            => false
11140         , p_get_value_column                => false
11141         );
11142     END GET_REV_USR_ATTR_SS_DDATE;
11143 
11144     FUNCTION GET_REV_USR_ATTR_PDH_DDATE
11145         (   p_batch_id                      IN  EGO_ITM_USR_ATTR_INTRFC.DATA_SET_ID%TYPE
11146         ,   p_inventory_item_id             IN  EGO_ITM_USR_ATTR_INTRFC.INVENTORY_ITEM_ID%TYPE
11147         ,   p_item_number                   IN  EGO_ITM_USR_ATTR_INTRFC.ITEM_NUMBER%TYPE
11148         ,   p_organization_id               IN  EGO_ITM_USR_ATTR_INTRFC.ORGANIZATION_ID%TYPE
11149         ,   p_revision_code                 IN  EGO_ITM_USR_ATTR_INTRFC.REVISION%TYPE
11150         ,   p_attr_group_type               IN  EGO_ITM_USR_ATTR_INTRFC.ATTR_GROUP_TYPE%TYPE
11151         ,   p_attr_group_name               IN  EGO_ITM_USR_ATTR_INTRFC.ATTR_GROUP_INT_NAME%TYPE
11152         ,   p_attr_name                     IN  EGO_ITM_USR_ATTR_INTRFC.ATTR_INT_NAME%TYPE
11153         ,   p_do_processed_rows_flag        IN  FLAG                                DEFAULT FND_API.G_FALSE
11154         ,   p_request_id                    IN  EGO_ITM_USR_ATTR_INTRFC.REQUEST_ID%TYPE                 DEFAULT NULL
11155         )
11156     RETURN EGO_ITM_USR_ATTR_INTRFC.ATTR_VALUE_DATE%TYPE IS
11157     BEGIN
11158         RETURN GET_REV_USR_ATTR_DATE
11159         (
11160           p_batch_id                        => p_batch_id
11161         , p_inventory_item_id               => p_inventory_item_id
11162         , p_item_number                     => p_item_number
11163         , p_organization_id                 => p_organization_id
11164         , p_revision_code                   => p_revision_code
11165         , p_attr_group_type                 => p_attr_group_type
11166         , p_attr_group_name                 => p_attr_group_name
11167         , p_attr_name                       => p_attr_name
11168         , p_do_processed_rows_flag          => p_do_processed_rows_flag
11169         , p_request_id                      => p_request_id
11170         , p_use_pdh_keys_to_join            => true
11171         , p_get_value_column                => false
11172         );
11173     END GET_REV_USR_ATTR_PDH_DDATE;
11174 
11175     ----------------------------------------------------------------------------------------------
11176     --  Function GET_REV_USR_ATTR_DISP_STR
11177     --  Returns the string value of the specified revision attribute, if the attribute is present
11178     --  in the interface table, merging in an attempted conversion of the display column content.
11179     ----------------------------------------------------------------------------------------------
11180     FUNCTION GET_REV_USR_ATTR_STR
11181         (   p_batch_id                      IN  EGO_ITM_USR_ATTR_INTRFC.DATA_SET_ID%TYPE
11182         ,   p_source_system_id              IN  EGO_ITM_USR_ATTR_INTRFC.SOURCE_SYSTEM_ID%TYPE           DEFAULT NULL
11183         ,   p_source_system_reference       IN  EGO_ITM_USR_ATTR_INTRFC.SOURCE_SYSTEM_REFERENCE%TYPE    DEFAULT NULL
11184         ,   p_organization_id               IN  EGO_ITM_USR_ATTR_INTRFC.ORGANIZATION_ID%TYPE
11185         ,   p_revision_code                 IN  EGO_ITM_USR_ATTR_INTRFC.REVISION%TYPE
11186         ,   p_attr_group_type               IN  EGO_ITM_USR_ATTR_INTRFC.ATTR_GROUP_TYPE%TYPE
11187         ,   p_attr_group_name               IN  EGO_ITM_USR_ATTR_INTRFC.ATTR_GROUP_INT_NAME%TYPE
11188         ,   p_attr_name                     IN  EGO_ITM_USR_ATTR_INTRFC.ATTR_INT_NAME%TYPE
11189         ,   p_do_processed_rows_flag        IN  FLAG                                                    DEFAULT FND_API.G_FALSE
11190         ,   p_request_id                    IN  EGO_ITM_USR_ATTR_INTRFC.REQUEST_ID%TYPE                 DEFAULT NULL
11191         ,   p_inventory_item_id             IN  EGO_ITM_USR_ATTR_INTRFC.INVENTORY_ITEM_ID%TYPE          DEFAULT NULL
11192         ,   p_item_number                   IN  EGO_ITM_USR_ATTR_INTRFC.ITEM_NUMBER%TYPE                DEFAULT NULL
11193         ,   p_use_pdh_keys_to_join          IN  BOOLEAN
11194         ,   p_get_value_column              IN  BOOLEAN
11195         )
11196     RETURN EGO_ITM_USR_ATTR_INTRFC.ATTR_VALUE_STR%TYPE
11197     IS
11198         l_return_value      EGO_ITM_USR_ATTR_INTRFC.ATTR_VALUE_STR%TYPE;
11199         l_revision_code     EGO_ITM_USR_ATTR_INTRFC.REVISION%TYPE;
11200         l_sql_stmt          VARCHAR2( 32000 );
11201         l_do_procd_rows_sql VARCHAR2( 200 );
11202         l_join_sql          VARCHAR2( 200 );
11203         l_select_sql        VARCHAR2( 200 );
11204         l_do_processed_rows BOOLEAN;
11205     BEGIN
11206         l_return_value  := null; -- 'default';
11207 
11208         CASE -- order of WHEN clauses matters!
11209             WHEN p_USE_PDH_KEYS_TO_JOIN AND
11210                  p_inventory_item_id IS NULL AND
11211                  p_item_number IS NULL
11212                 THEN RETURN l_return_value;
11213             WHEN p_USE_PDH_KEYS_TO_JOIN THEN
11214                 l_join_sql :=
11215                     ' AND ( ( '
11216                 ||  CASE
11217                     WHEN p_inventory_item_id IS NOT NULL THEN
11218                             ' EIUAI.INVENTORY_ITEM_ID     IS NULL AND'
11219                     ELSE    ''
11220                     END
11221                 ||          ' EIUAI.ITEM_NUMBER           = :item_number '
11222                 ||          ' ) '
11223                 ||      ' OR  EIUAI.INVENTORY_ITEM_ID     = :item_id '
11224                 ||      ' ) '
11225                 ;
11226             WHEN p_source_system_reference IS NULL AND
11227                  p_source_system_id IS NULL
11228                  THEN RETURN l_return_value;
11229             ELSE
11230                 l_join_sql := '
11231                     AND EIUAI.SOURCE_SYSTEM_REFERENCE   = :ss_ref
11232                     AND EIUAI.SOURCE_SYSTEM_ID          = :ss_id ';
11233         END CASE;
11234 
11235         l_do_processed_rows := ( p_do_processed_rows_flag = FND_API.G_TRUE );
11236         l_do_procd_rows_sql :=  ' AND EIUAI.PROCESS_STATUS'
11237                             ||  CASE
11238                                 WHEN l_do_processed_rows                                    THEN ' IN ( 3, 4 ) AND EIUAI.REQUEST_ID = :req_id '
11239                                 WHEN NOT l_do_processed_rows AND NOT p_use_pdh_keys_to_join THEN ' = 0 '
11240                                 WHEN NOT l_do_processed_rows AND p_use_pdh_keys_to_join     THEN ' = 1 '
11241                                 ELSE ''   -- XXX: hmmm, raise exception here?
11242                                 END;
11243 
11244         IF p_get_value_column THEN
11245             l_select_sql := ' EIUAI.ATTR_VALUE_STR ';
11246         ELSE
11247             l_select_sql := ' COALESCE( EIUAI.ATTR_DISP_VALUE, EIUAI.ATTR_VALUE_STR, '''|| G_EXCEL_MISS_CHAR_VAL ||''' ) ';
11248         END IF;
11249 
11250         -- Check to see whether the revision code has been provided:
11251         -- If not, default it to be the code of the latest LOGICAL revision row
11252         l_revision_code :=
11253             CASE -- order of WHEN clauses matters!
11254             WHEN p_revision_code IS NOT NULL THEN p_revision_code
11255             WHEN p_use_pdh_keys_to_join THEN
11256                 GET_LATEST_EIUAI_REV_PDH(   p_batch_id                  => p_batch_id
11257                                         ,   p_inventory_item_id         => p_inventory_item_id
11258                                         ,   p_item_number               => p_item_number
11259                                         ,   p_organization_id           => p_organization_id
11260                                         ,   p_do_processed_rows_flag    => p_do_processed_rows_flag
11261                                         ,   p_request_id                => p_request_id
11262                                         )
11263             ELSE
11264                 GET_LATEST_EIUAI_REV_SS (   p_batch_id                  => p_batch_id
11265                                         ,   p_source_system_id          => p_source_system_id
11266                                         ,   p_source_system_reference   => p_source_system_reference
11267                                         ,   p_organization_id           => p_organization_id
11268                                         ,   p_do_processed_rows_flag    => p_do_processed_rows_flag
11269                                         ,   p_request_id                => p_request_id
11270                                         )
11271             END;
11272 
11273         l_sql_stmt := '
11274             SELECT ' || l_select_sql
11275             || '
11276             FROM EGO_ITM_USR_ATTR_INTRFC EIUAI
11277             WHERE
11278                 NVL( EIUAI.ATTR_GROUP_TYPE, :default_attr_grp ) = :attr_grp_type
11279                 AND EIUAI.ATTR_GROUP_INT_NAME       = :attr_grp
11280                 AND EIUAI.ATTR_INT_NAME             = :attr '
11281                 || l_join_sql
11282                 || '
11283                 AND EIUAI.ORGANIZATION_ID           = :org_id
11284                 AND EIUAI.DATA_SET_ID               = :batch_id '
11285                 ||  l_do_procd_rows_sql
11286 /*                ||  '
11287                 AND EIUAI.REVISION '
11288                 ||  CASE l_revision_code
11289                     WHEN NULL THEN 'IS NULL '
11290                     ELSE '= :rev_code '
11291                     END */
11292                 || '
11293                 AND DECODE( EIUAI.REVISION, :rev_code, 1, 0 ) = 1
11294                 AND rownum = 1
11295             ';
11296 
11297 --        my_put_line( l_sql_stmt );
11298 
11299         CASE
11300             WHEN l_do_processed_rows AND p_USE_PDH_KEYS_TO_JOIN THEN
11301                 EXECUTE IMMEDIATE l_sql_stmt
11302                     INTO l_return_value
11303                     USING G_DEFAULT_ATTR_GROUP_TYPE
11304                         , p_attr_group_type, p_attr_group_name, p_attr_name
11305                         , p_item_number, p_inventory_item_id, p_organization_id, p_batch_id
11306                         , p_request_id
11307                         , l_revision_code
11308                     ;
11309             WHEN l_do_processed_rows AND NOT p_USE_PDH_KEYS_TO_JOIN THEN
11310                 EXECUTE IMMEDIATE l_sql_stmt
11311                     INTO l_return_value
11312                     USING G_DEFAULT_ATTR_GROUP_TYPE
11313                         , p_attr_group_type, p_attr_group_name, p_attr_name
11314                         , p_source_system_reference, p_source_system_id, p_organization_id, p_batch_id
11315                         , p_request_id
11316                         , l_revision_code
11317                     ;
11318             WHEN NOT l_do_processed_rows AND p_USE_PDH_KEYS_TO_JOIN THEN
11319                 EXECUTE IMMEDIATE l_sql_stmt
11320                     INTO l_return_value
11321                     USING G_DEFAULT_ATTR_GROUP_TYPE
11322                         , p_attr_group_type, p_attr_group_name, p_attr_name
11323                         , p_item_number, p_inventory_item_id, p_organization_id, p_batch_id
11324                         , l_revision_code
11325                     ;
11326             WHEN NOT l_do_processed_rows AND NOT p_USE_PDH_KEYS_TO_JOIN THEN
11327                 EXECUTE IMMEDIATE l_sql_stmt
11328                     INTO l_return_value
11329                     USING G_DEFAULT_ATTR_GROUP_TYPE
11330                         , p_attr_group_type, p_attr_group_name, p_attr_name
11331                         , p_source_system_reference, p_source_system_id, p_organization_id, p_batch_id
11332                         , l_revision_code
11333                     ;
11334         END CASE;
11335         RETURN l_return_value;
11336 
11337     EXCEPTION
11338         WHEN NO_DATA_FOUND THEN -- this attribute is not present in the interface table !
11339             RETURN l_return_value;
11340         WHEN OTHERS THEN
11341 --          MY_PUT_LINE( 'Error code ' || SQLCODE || ': ' || SQLERRM );
11342             RAISE;
11343     END GET_REV_USR_ATTR_STR;
11344 
11345     FUNCTION GET_REV_USR_ATTR_SS_DSTR
11346         (
11347         p_batch_id                          IN  EGO_ITM_USR_ATTR_INTRFC.DATA_SET_ID%TYPE
11348         , p_source_system_id                IN  EGO_ITM_USR_ATTR_INTRFC.SOURCE_SYSTEM_ID%TYPE
11349         , p_source_system_reference         IN  EGO_ITM_USR_ATTR_INTRFC.SOURCE_SYSTEM_REFERENCE%TYPE
11350         , p_organization_id                 IN  EGO_ITM_USR_ATTR_INTRFC.ORGANIZATION_ID%TYPE
11351         , p_revision_code                   IN  EGO_ITM_USR_ATTR_INTRFC.REVISION%TYPE
11352         , p_attr_group_type                 IN  EGO_ITM_USR_ATTR_INTRFC.ATTR_GROUP_TYPE%TYPE
11353         , p_attr_group_name                 IN  EGO_ITM_USR_ATTR_INTRFC.ATTR_GROUP_INT_NAME%TYPE
11354         , p_attr_name                       IN  EGO_ITM_USR_ATTR_INTRFC.ATTR_INT_NAME%TYPE
11355         , p_do_processed_rows_flag          IN  FLAG DEFAULT FND_API.G_FALSE
11356         ,   p_request_id                    IN  EGO_ITM_USR_ATTR_INTRFC.REQUEST_ID%TYPE                 DEFAULT NULL
11357         )
11358     RETURN EGO_ITM_USR_ATTR_INTRFC.ATTR_VALUE_STR%TYPE IS
11359     BEGIN
11360         RETURN GET_REV_USR_ATTR_STR
11361         (
11362           p_batch_id                        => p_batch_id
11363         , p_source_system_id                => p_source_system_id
11364         , p_source_system_reference         => p_source_system_reference
11365         , p_organization_id                 => p_organization_id
11366         , p_revision_code                   => p_revision_code
11367         , p_attr_group_type                 => p_attr_group_type
11368         , p_attr_group_name                 => p_attr_group_name
11369         , p_attr_name                       => p_attr_name
11370         , p_do_processed_rows_flag          => p_do_processed_rows_flag
11371         , p_request_id                      => p_request_id
11372         , p_use_pdh_keys_to_join            => false
11373         , p_get_value_column                => false
11374         );
11375     END GET_REV_USR_ATTR_SS_DSTR;
11376 
11377     FUNCTION GET_REV_USR_ATTR_PDH_DSTR
11378         (
11379         p_batch_id                          IN  EGO_ITM_USR_ATTR_INTRFC.DATA_SET_ID%TYPE
11380         , p_inventory_item_id               IN  EGO_ITM_USR_ATTR_INTRFC.INVENTORY_ITEM_ID%TYPE
11381         , p_item_number                     IN  EGO_ITM_USR_ATTR_INTRFC.ITEM_NUMBER%TYPE
11382         , p_organization_id                 IN  EGO_ITM_USR_ATTR_INTRFC.ORGANIZATION_ID%TYPE
11383         , p_revision_code                   IN  EGO_ITM_USR_ATTR_INTRFC.REVISION%TYPE
11384         , p_attr_group_type                 IN  EGO_ITM_USR_ATTR_INTRFC.ATTR_GROUP_TYPE%TYPE
11385         , p_attr_group_name                 IN  EGO_ITM_USR_ATTR_INTRFC.ATTR_GROUP_INT_NAME%TYPE
11386         , p_attr_name                       IN  EGO_ITM_USR_ATTR_INTRFC.ATTR_INT_NAME%TYPE
11387         , p_do_processed_rows_flag          IN  FLAG DEFAULT FND_API.G_FALSE
11388         ,   p_request_id                    IN  EGO_ITM_USR_ATTR_INTRFC.REQUEST_ID%TYPE                 DEFAULT NULL
11389         )
11390     RETURN EGO_ITM_USR_ATTR_INTRFC.ATTR_VALUE_STR%TYPE IS
11391     BEGIN
11392         RETURN GET_REV_USR_ATTR_STR
11393         (
11394           p_batch_id                        => p_batch_id
11395         , p_inventory_item_id               => p_inventory_item_id
11396         , p_item_number                     => p_item_number
11397         , p_organization_id                 => p_organization_id
11398         , p_revision_code                   => p_revision_code
11399         , p_attr_group_type                 => p_attr_group_type
11400         , p_attr_group_name                 => p_attr_group_name
11401         , p_attr_name                       => p_attr_name
11402         , p_do_processed_rows_flag          => p_do_processed_rows_flag
11403         , p_request_id                      => p_request_id
11404         , p_use_pdh_keys_to_join            => true
11405         , p_get_value_column                => false
11406         );
11407     END GET_REV_USR_ATTR_PDH_DSTR;
11408 
11409     ----------------------------------------------------------------------------------------------
11410     --  Function GET_REV_USR_ATTR_DISP_NUM
11411     --  Returns the number value of the specified revision attribute, if the attribute is present
11412     --  in the interface table, merging in an attempted conversion of the display column content.
11413     --------------------------------------------------------------------------------------------
11414     FUNCTION GET_REV_USR_ATTR_NUM
11415         (
11416         p_batch_id                          IN  EGO_ITM_USR_ATTR_INTRFC.DATA_SET_ID%TYPE
11417         , p_source_system_id                IN  EGO_ITM_USR_ATTR_INTRFC.SOURCE_SYSTEM_ID%TYPE           DEFAULT NULL
11418         , p_source_system_reference         IN  EGO_ITM_USR_ATTR_INTRFC.SOURCE_SYSTEM_REFERENCE%TYPE    DEFAULT NULL
11419         , p_organization_id                 IN  EGO_ITM_USR_ATTR_INTRFC.ORGANIZATION_ID%TYPE
11420         , p_revision_code                   IN  EGO_ITM_USR_ATTR_INTRFC.REVISION%TYPE
11421         , p_attr_group_type                 IN  EGO_ITM_USR_ATTR_INTRFC.ATTR_GROUP_TYPE%TYPE
11422         , p_attr_group_name                 IN  EGO_ITM_USR_ATTR_INTRFC.ATTR_GROUP_INT_NAME%TYPE
11423         , p_attr_name                       IN  EGO_ITM_USR_ATTR_INTRFC.ATTR_INT_NAME%TYPE
11424         , p_output_uom_code                 IN  EGO_ITM_USR_ATTR_INTRFC.ATTR_VALUE_UOM%TYPE             DEFAULT NULL
11425         , p_do_processed_rows_flag          IN  FLAG DEFAULT FND_API.G_FALSE
11426         , p_request_id                      IN  EGO_ITM_USR_ATTR_INTRFC.REQUEST_ID%TYPE                 DEFAULT NULL
11427         , p_inventory_item_id               IN  EGO_ITM_USR_ATTR_INTRFC.INVENTORY_ITEM_ID%TYPE          DEFAULT NULL
11428         , p_item_number                     IN  EGO_ITM_USR_ATTR_INTRFC.ITEM_NUMBER%TYPE                DEFAULT NULL
11429         , p_use_pdh_keys_to_join            IN  BOOLEAN
11430         , p_get_value_column                IN  BOOLEAN
11431         )
11432     RETURN EGO_ITM_USR_ATTR_INTRFC.ATTR_VALUE_NUM%TYPE
11433     IS
11434         l_return_value      EGO_ITM_USR_ATTR_INTRFC.ATTR_VALUE_NUM%TYPE;
11435         l_num_value         EGO_ITM_USR_ATTR_INTRFC.ATTR_VALUE_NUM%TYPE;
11436         l_revision_code     EGO_ITM_USR_ATTR_INTRFC.REVISION%TYPE;
11437         l_sql_stmt          VARCHAR2( 32000 );
11438         l_do_procd_rows_sql VARCHAR2( 200 );
11439         l_join_sql          VARCHAR2( 200 );
11440         l_select_sql        VARCHAR2( 200 );
11441         l_do_processed_rows BOOLEAN;
11442 
11443         l_uom_code          EGO_ITM_USR_ATTR_INTRFC.ATTR_VALUE_UOM%TYPE;
11444         l_uom_disp_value    EGO_ITM_USR_ATTR_INTRFC.ATTR_UOM_DISP_VALUE%TYPE;
11445         l_uom_rate          NUMBER := 1;
11446     BEGIN
11447         l_return_value  := null; -- 'default';
11448 
11449         CASE -- order of WHEN clauses matters!
11450             WHEN p_USE_PDH_KEYS_TO_JOIN AND
11451                  p_inventory_item_id IS NULL AND
11452                  p_item_number IS NULL
11453                 THEN RETURN l_return_value;
11454             WHEN p_USE_PDH_KEYS_TO_JOIN THEN
11455                 l_join_sql :=
11456                     ' AND ( ( '
11457                 ||  CASE
11458                     WHEN p_inventory_item_id IS NOT NULL THEN
11459                             ' EIUAI.INVENTORY_ITEM_ID     IS NULL AND'
11460                     ELSE    ''
11461                     END
11462                 ||          ' EIUAI.ITEM_NUMBER           = :item_number '
11463                 ||          ' ) '
11464                 ||      ' OR  EIUAI.INVENTORY_ITEM_ID     = :item_id '
11465                 ||      ' ) '
11466                 ;
11467             WHEN p_source_system_reference IS NULL AND
11468                  p_source_system_id IS NULL
11469                  THEN RETURN l_return_value;
11470             ELSE
11471                 l_join_sql := ' AND EIUAI.SOURCE_SYSTEM_REFERENCE   = :ss_ref '
11472                            || ' AND EIUAI.SOURCE_SYSTEM_ID          = :ss_id ';
11473         END CASE;
11474 
11475         l_do_processed_rows := ( p_do_processed_rows_flag = FND_API.G_TRUE );
11476         l_do_procd_rows_sql :=  ' AND EIUAI.PROCESS_STATUS'
11477                             ||  CASE
11478                                 WHEN l_do_processed_rows                                    THEN ' IN ( 3, 4 ) AND EIUAI.REQUEST_ID = :req_id '
11479                                 WHEN NOT l_do_processed_rows AND NOT p_use_pdh_keys_to_join THEN ' = 0 '
11480                                 WHEN NOT l_do_processed_rows AND p_use_pdh_keys_to_join     THEN ' = 1 '
11481                                 ELSE ''   -- XXX: hmmm, raise exception here?
11482                                 END;
11483 
11484         IF p_get_value_column THEN
11485             l_select_sql    := ' EIUAI.ATTR_VALUE_NUM ';
11486         ELSE
11487             l_select_sql    :=  ' NVL2( EIUAI.ATTR_DISP_VALUE '
11488                                 ||  ' , to_number( EIUAI.ATTR_DISP_VALUE ) '
11489                                 ||  ' , NVL( EIUAI.ATTR_VALUE_NUM, ' || G_EXCEL_MISS_NUM_STR
11490                                 ||  ' ) ) '
11491                             ;
11492         END IF;
11493 
11494         -- Check to see whether the revision code has been provided:
11495         -- If not, default it to be the code of the latest LOGICAL revision row
11496         l_revision_code :=
11497             CASE -- order of WHEN clauses matters!
11498             WHEN p_revision_code IS NOT NULL THEN p_revision_code
11499             WHEN p_use_pdh_keys_to_join THEN
11500                 GET_LATEST_EIUAI_REV_PDH(   p_batch_id                  => p_batch_id
11501                                         ,   p_inventory_item_id         => p_inventory_item_id
11502                                         ,   p_item_number               => p_item_number
11503                                         ,   p_organization_id           => p_organization_id
11504                                         ,   p_do_processed_rows_flag    => p_do_processed_rows_flag
11505                                         ,   p_request_id                => p_request_id
11506                                         )
11507             ELSE
11508                 GET_LATEST_EIUAI_REV_SS (   p_batch_id                  => p_batch_id
11509                                         ,   p_source_system_id          => p_source_system_id
11510                                         ,   p_source_system_reference   => p_source_system_reference
11511                                         ,   p_organization_id           => p_organization_id
11512                                         ,   p_do_processed_rows_flag    => p_do_processed_rows_flag
11513                                         ,   p_request_id                => p_request_id
11514                                         )
11515             END;
11516 
11517         l_sql_stmt := '
11518             SELECT ' || l_select_sql
11519             || ', ATTR_VALUE_UOM
11520                 , ATTR_UOM_DISP_VALUE
11521             FROM EGO_ITM_USR_ATTR_INTRFC EIUAI
11522             WHERE
11523                 NVL( EIUAI.ATTR_GROUP_TYPE, :default_attr_grp ) = :attr_grp_type
11524                 AND EIUAI.ATTR_GROUP_INT_NAME       = :attr_grp
11525                 AND EIUAI.ATTR_INT_NAME             = :attr '
11526                 || l_join_sql
11527                 || '
11528                 AND EIUAI.ORGANIZATION_ID           = :org_id
11529                 AND EIUAI.DATA_SET_ID               = :batch_id '
11530                 ||  l_do_procd_rows_sql
11531                 || '
11532                 AND DECODE( EIUAI.REVISION, :rev_code, 1, 0 ) = 1
11533                 AND rownum = 1
11534             ';
11535 
11536 --      my_put_line( l_sql_stmt );
11537 
11538         CASE
11539             WHEN l_do_processed_rows AND p_USE_PDH_KEYS_TO_JOIN THEN
11540                 EXECUTE IMMEDIATE l_sql_stmt
11541                     INTO l_num_value, l_uom_code, l_uom_disp_value
11542                     USING G_DEFAULT_ATTR_GROUP_TYPE
11543                         , p_attr_group_type, p_attr_group_name, p_attr_name
11544                         , p_item_number, p_inventory_item_id, p_organization_id, p_batch_id
11545                         , p_request_id
11546                         , l_revision_code
11547                     ;
11548             WHEN l_do_processed_rows AND NOT p_USE_PDH_KEYS_TO_JOIN THEN
11549                 EXECUTE IMMEDIATE l_sql_stmt
11550                     INTO l_num_value, l_uom_code, l_uom_disp_value
11551                     USING G_DEFAULT_ATTR_GROUP_TYPE
11552                         , p_attr_group_type, p_attr_group_name, p_attr_name
11553                         , p_source_system_reference, p_source_system_id, p_organization_id, p_batch_id
11554                         , p_request_id
11555                         , l_revision_code
11556                     ;
11557             WHEN NOT l_do_processed_rows AND p_USE_PDH_KEYS_TO_JOIN THEN
11558                 EXECUTE IMMEDIATE l_sql_stmt
11559                     INTO l_num_value, l_uom_code, l_uom_disp_value
11560                     USING G_DEFAULT_ATTR_GROUP_TYPE
11561                         , p_attr_group_type, p_attr_group_name, p_attr_name
11562                         , p_item_number, p_inventory_item_id, p_organization_id, p_batch_id
11563                         , l_revision_code
11564                     ;
11565             WHEN NOT l_do_processed_rows AND NOT p_USE_PDH_KEYS_TO_JOIN THEN
11566                 EXECUTE IMMEDIATE l_sql_stmt
11567                     INTO l_num_value, l_uom_code, l_uom_disp_value
11568                     USING G_DEFAULT_ATTR_GROUP_TYPE
11569                         , p_attr_group_type, p_attr_group_name, p_attr_name
11570                         , p_source_system_reference, p_source_system_id, p_organization_id, p_batch_id
11571                         , l_revision_code
11572                     ;
11573         END CASE;
11574 
11575         -- perform a uom conversion if one is necessary
11576         l_return_value := CASE WHEN p_output_uom_code IS NULL THEN l_num_value
11577                                ELSE WRAPPED_TO_UOM( p_val             => l_num_value
11578                                                   , p_to_uom_code     => p_output_uom_code
11579                                                   , p_from_uom_code   => l_uom_code
11580                                                   , p_from_uom_value  => l_uom_disp_value
11581                                                   )
11582                                END;
11583         RETURN l_return_value;
11584     EXCEPTION
11585         WHEN NO_DATA_FOUND THEN -- this attribute is not present in the interface table !
11586             RETURN l_return_value;
11587         WHEN OTHERS THEN
11588 --          MY_PUT_LINE( 'GET_REV_USR_ATTR_NUM Error code ' || SQLCODE || ': ' || SQLERRM );
11589             RETURN l_return_value;
11590     END GET_REV_USR_ATTR_NUM;
11591 
11592     --------------------------------------------------------------------------------------------
11593     --  Function WRAPPED_TO_UOM                                                               --
11594     --      Wraps inv_convert.uom_conversion to return null in case of conversion failure.    --
11595     --      If both of the from_uom params are null, no attempt to make the conversion is     --
11596     --        performed.                                                                      --
11597     --------------------------------------------------------------------------------------------
11598     FUNCTION WRAPPED_TO_UOM( p_val                  NUMBER
11599                            , p_to_uom_code          EGO_ITM_USR_ATTR_INTRFC.ATTR_VALUE_UOM%TYPE
11600                            , p_from_uom_code        EGO_ITM_USR_ATTR_INTRFC.ATTR_VALUE_UOM%TYPE
11601                            , p_from_uom_value       EGO_ITM_USR_ATTR_INTRFC.ATTR_UOM_DISP_VALUE%TYPE
11602                            , p_inventory_item_id    EGO_ITM_USR_ATTR_INTRFC.INVENTORY_ITEM_ID%TYPE      DEFAULT NULL
11603                            )
11604     RETURN NUMBER IS
11605         l_uom_code  EGO_ITM_USR_ATTR_INTRFC.ATTR_VALUE_UOM%TYPE := p_from_uom_code;
11606         l_uom_rate  NUMBER;
11607     BEGIN
11608         IF      p_val IS NULL
11609             OR  p_val = 0
11610             OR  p_val = 9.99e125 -- G_EXCEL_MISS_NUM we make sure that null out attempts are not UOM converted
11611             OR  (   p_from_uom_code     IS NULL
11612                 AND p_from_uom_value    IS NULL
11613                 )
11614         THEN
11615             RETURN p_val;
11616         END IF;
11617 
11618         IF l_uom_code IS NULL THEN
11619             SELECT  uom_code INTO l_uom_code
11620             FROM    mtl_units_of_measure_vl
11621             WHERE   unit_of_measure = p_from_uom_value;
11622         END IF;
11623 
11624         inv_convert.inv_um_conversion( from_unit => l_uom_code
11625                                      , to_unit   => p_to_uom_code
11626                                      , item_id   => p_inventory_item_id
11627                                      , uom_rate  => l_uom_rate
11628                                      );
11629         IF  l_uom_rate <> -99999 -- the error value in the inv_convert package
11630         THEN
11631             RETURN l_uom_rate * p_val;
11632         ELSE
11633             RETURN NULL;
11634         END IF;
11635 
11636     EXCEPTION
11637         WHEN OTHERS THEN
11638             RETURN NULL;
11639     END WRAPPED_TO_UOM;
11640 
11641     FUNCTION GET_REV_USR_ATTR_SS_DNUM
11642         (
11643           p_batch_id                        IN  EGO_ITM_USR_ATTR_INTRFC.DATA_SET_ID%TYPE
11644         , p_source_system_id                IN  EGO_ITM_USR_ATTR_INTRFC.SOURCE_SYSTEM_ID%TYPE
11645         , p_source_system_reference         IN  EGO_ITM_USR_ATTR_INTRFC.SOURCE_SYSTEM_REFERENCE%TYPE
11646         , p_organization_id                 IN  EGO_ITM_USR_ATTR_INTRFC.ORGANIZATION_ID%TYPE
11647         , p_revision_code                   IN  EGO_ITM_USR_ATTR_INTRFC.REVISION%TYPE
11648         , p_attr_group_type                 IN  EGO_ITM_USR_ATTR_INTRFC.ATTR_GROUP_TYPE%TYPE
11649         , p_attr_group_name                 IN  EGO_ITM_USR_ATTR_INTRFC.ATTR_GROUP_INT_NAME%TYPE
11650         , p_attr_name                       IN  EGO_ITM_USR_ATTR_INTRFC.ATTR_INT_NAME%TYPE
11651         , p_output_uom_code                 IN  EGO_ITM_USR_ATTR_INTRFC.ATTR_VALUE_UOM%TYPE
11652         , p_do_processed_rows_flag          IN  FLAG                                DEFAULT FND_API.G_FALSE
11653         , p_request_id                      IN  EGO_ITM_USR_ATTR_INTRFC.REQUEST_ID%TYPE DEFAULT NULL
11654         )
11655     RETURN EGO_ITM_USR_ATTR_INTRFC.ATTR_VALUE_NUM%TYPE IS
11656     BEGIN
11657         RETURN GET_REV_USR_ATTR_NUM
11658         (
11659           p_batch_id                        => p_batch_id
11660         , p_source_system_id                => p_source_system_id
11661         , p_source_system_reference         => p_source_system_reference
11662         , p_organization_id                 => p_organization_id
11663         , p_revision_code                   => p_revision_code
11664         , p_attr_group_type                 => p_attr_group_type
11665         , p_attr_group_name                 => p_attr_group_name
11666         , p_attr_name                       => p_attr_name
11667         , p_do_processed_rows_flag          => p_do_processed_rows_flag
11668         , p_request_id                      => p_request_id
11669         , p_use_pdh_keys_to_join            => FALSE
11670         , p_get_value_column                => FALSE
11671         , p_output_uom_code                 => p_output_uom_code
11672         );
11673     END GET_REV_USR_ATTR_SS_DNUM;
11674 
11675     FUNCTION GET_REV_USR_ATTR_PDH_DNUM
11676         (
11677           p_batch_id                        IN  EGO_ITM_USR_ATTR_INTRFC.DATA_SET_ID%TYPE
11678         , p_inventory_item_id               IN  EGO_ITM_USR_ATTR_INTRFC.INVENTORY_ITEM_ID%TYPE
11679         , p_item_number                     IN  EGO_ITM_USR_ATTR_INTRFC.ITEM_NUMBER%TYPE
11680         , p_organization_id                 IN  EGO_ITM_USR_ATTR_INTRFC.ORGANIZATION_ID%TYPE
11681         , p_revision_code                   IN  EGO_ITM_USR_ATTR_INTRFC.REVISION%TYPE
11682         , p_attr_group_type                 IN  EGO_ITM_USR_ATTR_INTRFC.ATTR_GROUP_TYPE%TYPE
11683         , p_attr_group_name                 IN  EGO_ITM_USR_ATTR_INTRFC.ATTR_GROUP_INT_NAME%TYPE
11684         , p_attr_name                       IN  EGO_ITM_USR_ATTR_INTRFC.ATTR_INT_NAME%TYPE
11685         , p_output_uom_code                 IN  EGO_ITM_USR_ATTR_INTRFC.ATTR_VALUE_UOM%TYPE
11686         , p_do_processed_rows_flag          IN  FLAG                                DEFAULT FND_API.G_FALSE
11687         , p_request_id                      IN  EGO_ITM_USR_ATTR_INTRFC.REQUEST_ID%TYPE DEFAULT NULL
11688         )
11689     RETURN EGO_ITM_USR_ATTR_INTRFC.ATTR_VALUE_NUM%TYPE IS
11690     BEGIN
11691         RETURN GET_REV_USR_ATTR_NUM
11692         (
11693           p_batch_id                        => p_batch_id
11694         , p_inventory_item_id               => p_inventory_item_id
11695         , p_item_number                     => p_item_number
11696         , p_organization_id                 => p_organization_id
11697         , p_revision_code                   => p_revision_code
11698         , p_attr_group_type                 => p_attr_group_type
11699         , p_attr_group_name                 => p_attr_group_name
11700         , p_attr_name                       => p_attr_name
11701         , p_do_processed_rows_flag          => p_do_processed_rows_flag
11702         , p_request_id                      => p_request_id
11703         , p_use_pdh_keys_to_join            => TRUE
11704         , p_get_value_column                => FALSE
11705         , p_output_uom_code                 => p_output_uom_code
11706         );
11707     END GET_REV_USR_ATTR_PDH_DNUM;
11708 
11709     --------------------------------------------------------------------------------------------
11710     --  Function GET_REV_USR_ATTR_STR                                                         --
11711     --  Returns the string value of the specified revision attribute, if the attribute is present
11712     --  in the interface table.
11713     --------------------------------------------------------------------------------------------
11714     FUNCTION GET_REV_USR_ATTR_SS_VSTR
11715         (
11716         p_batch_id                          IN  EGO_ITM_USR_ATTR_INTRFC.DATA_SET_ID%TYPE
11717         , p_source_system_id                IN  EGO_ITM_USR_ATTR_INTRFC.SOURCE_SYSTEM_ID%TYPE
11718         , p_source_system_reference         IN  EGO_ITM_USR_ATTR_INTRFC.SOURCE_SYSTEM_REFERENCE%TYPE
11719         , p_organization_id                 IN  EGO_ITM_USR_ATTR_INTRFC.ORGANIZATION_ID%TYPE
11720         , p_revision_code                   IN  EGO_ITM_USR_ATTR_INTRFC.REVISION%TYPE
11721         , p_attr_group_type                 IN  EGO_ITM_USR_ATTR_INTRFC.ATTR_GROUP_TYPE%TYPE
11722         , p_attr_group_name                 IN  EGO_ITM_USR_ATTR_INTRFC.ATTR_GROUP_INT_NAME%TYPE
11723         , p_attr_name                       IN  EGO_ITM_USR_ATTR_INTRFC.ATTR_INT_NAME%TYPE
11724         , p_do_processed_rows_flag          IN  FLAG DEFAULT FND_API.G_FALSE
11725         ,   p_request_id                    IN  EGO_ITM_USR_ATTR_INTRFC.REQUEST_ID%TYPE                 DEFAULT NULL
11726         )
11727     RETURN EGO_ITM_USR_ATTR_INTRFC.ATTR_VALUE_STR%TYPE IS
11728     BEGIN
11729         RETURN GET_REV_USR_ATTR_STR
11730         (
11731           p_batch_id                        => p_batch_id
11732         , p_source_system_id                => p_source_system_id
11733         , p_source_system_reference         => p_source_system_reference
11734         , p_organization_id                 => p_organization_id
11735         , p_revision_code                   => p_revision_code
11736         , p_attr_group_type                 => p_attr_group_type
11737         , p_attr_group_name                 => p_attr_group_name
11738         , p_attr_name                       => p_attr_name
11739         , p_do_processed_rows_flag          => p_do_processed_rows_flag
11740         , p_request_id                      => p_request_id
11741         , p_use_pdh_keys_to_join            => false
11742         , p_get_value_column                => true
11743         );
11744     END GET_REV_USR_ATTR_SS_VSTR;
11745 
11746     FUNCTION GET_REV_USR_ATTR_PDH_VSTR
11747         (
11748         p_batch_id                          IN  EGO_ITM_USR_ATTR_INTRFC.DATA_SET_ID%TYPE
11749         , p_inventory_item_id               IN  EGO_ITM_USR_ATTR_INTRFC.INVENTORY_ITEM_ID%TYPE
11750         , p_item_number                     IN  EGO_ITM_USR_ATTR_INTRFC.ITEM_NUMBER%TYPE
11751         , p_organization_id                 IN  EGO_ITM_USR_ATTR_INTRFC.ORGANIZATION_ID%TYPE
11752         , p_revision_code                   IN  EGO_ITM_USR_ATTR_INTRFC.REVISION%TYPE
11753         , p_attr_group_type                 IN  EGO_ITM_USR_ATTR_INTRFC.ATTR_GROUP_TYPE%TYPE
11754         , p_attr_group_name                 IN  EGO_ITM_USR_ATTR_INTRFC.ATTR_GROUP_INT_NAME%TYPE
11755         , p_attr_name                       IN  EGO_ITM_USR_ATTR_INTRFC.ATTR_INT_NAME%TYPE
11756         , p_do_processed_rows_flag          IN  FLAG DEFAULT FND_API.G_FALSE
11757         ,   p_request_id                    IN  EGO_ITM_USR_ATTR_INTRFC.REQUEST_ID%TYPE                 DEFAULT NULL
11758         )
11759     RETURN EGO_ITM_USR_ATTR_INTRFC.ATTR_VALUE_STR%TYPE IS
11760     BEGIN
11761         RETURN GET_REV_USR_ATTR_STR
11762         (
11763           p_batch_id                        => p_batch_id
11764         , p_inventory_item_id               => p_inventory_item_id
11765         , p_item_number                     => p_item_number
11766         , p_organization_id                 => p_organization_id
11767         , p_revision_code                   => p_revision_code
11768         , p_attr_group_type                 => p_attr_group_type
11769         , p_attr_group_name                 => p_attr_group_name
11770         , p_attr_name                       => p_attr_name
11771         , p_do_processed_rows_flag          => p_do_processed_rows_flag
11772         , p_request_id                      => p_request_id
11773         , p_use_pdh_keys_to_join            => true
11774         , p_get_value_column                => true
11775         );
11776     END GET_REV_USR_ATTR_PDH_VSTR;
11777 
11778     --------------------------------------------------------------------------------------------
11779     --  Function GET_REV_USR_ATTR_DATE
11780     --  Returns the date value of the specified revision attribute, if the attribute is present
11781     --  in the interface table.
11782     --------------------------------------------------------------------------------------------
11783     FUNCTION GET_REV_USR_ATTR_SS_VDATE
11784         (
11785         p_batch_id                          IN  EGO_ITM_USR_ATTR_INTRFC.DATA_SET_ID%TYPE
11786         , p_source_system_id                IN  EGO_ITM_USR_ATTR_INTRFC.SOURCE_SYSTEM_ID%TYPE
11787         , p_source_system_reference         IN  EGO_ITM_USR_ATTR_INTRFC.SOURCE_SYSTEM_REFERENCE%TYPE
11788         , p_organization_id                 IN  EGO_ITM_USR_ATTR_INTRFC.ORGANIZATION_ID%TYPE
11789         , p_revision_code                   IN  EGO_ITM_USR_ATTR_INTRFC.REVISION%TYPE
11790         , p_attr_group_type                 IN  EGO_ITM_USR_ATTR_INTRFC.ATTR_GROUP_TYPE%TYPE
11791         , p_attr_group_name                 IN  EGO_ITM_USR_ATTR_INTRFC.ATTR_GROUP_INT_NAME%TYPE
11792         , p_attr_name                       IN  EGO_ITM_USR_ATTR_INTRFC.ATTR_INT_NAME%TYPE
11793         , p_do_processed_rows_flag          IN  FLAG                                DEFAULT FND_API.G_FALSE
11794         ,   p_request_id                    IN  EGO_ITM_USR_ATTR_INTRFC.REQUEST_ID%TYPE                 DEFAULT NULL
11795         )
11796     RETURN EGO_ITM_USR_ATTR_INTRFC.ATTR_VALUE_DATE%TYPE IS
11797     BEGIN
11798         RETURN GET_REV_USR_ATTR_DATE
11799         (
11800           p_batch_id                        => p_batch_id
11801         , p_source_system_id                => p_source_system_id
11802         , p_source_system_reference         => p_source_system_reference
11803         , p_organization_id                 => p_organization_id
11804         , p_revision_code                   => p_revision_code
11805         , p_attr_group_type                 => p_attr_group_type
11806         , p_attr_group_name                 => p_attr_group_name
11807         , p_attr_name                       => p_attr_name
11808         , p_do_processed_rows_flag          => p_do_processed_rows_flag
11809         , p_request_id                      => p_request_id
11810         , p_use_pdh_keys_to_join            => false
11811         , p_get_value_column                => true
11812         );
11813     END GET_REV_USR_ATTR_SS_VDATE;
11814 
11815     FUNCTION GET_REV_USR_ATTR_PDH_VDATE
11816         (
11817         p_batch_id                          IN  EGO_ITM_USR_ATTR_INTRFC.DATA_SET_ID%TYPE
11818         , p_inventory_item_id               IN  EGO_ITM_USR_ATTR_INTRFC.INVENTORY_ITEM_ID%TYPE
11819         , p_item_number                     IN  EGO_ITM_USR_ATTR_INTRFC.ITEM_NUMBER%TYPE
11820         , p_organization_id                 IN  EGO_ITM_USR_ATTR_INTRFC.ORGANIZATION_ID%TYPE
11821         , p_revision_code                   IN  EGO_ITM_USR_ATTR_INTRFC.REVISION%TYPE
11822         , p_attr_group_type                 IN  EGO_ITM_USR_ATTR_INTRFC.ATTR_GROUP_TYPE%TYPE
11823         , p_attr_group_name                 IN  EGO_ITM_USR_ATTR_INTRFC.ATTR_GROUP_INT_NAME%TYPE
11824         , p_attr_name                       IN  EGO_ITM_USR_ATTR_INTRFC.ATTR_INT_NAME%TYPE
11825         , p_do_processed_rows_flag          IN  FLAG                                DEFAULT FND_API.G_FALSE
11826         ,   p_request_id                    IN  EGO_ITM_USR_ATTR_INTRFC.REQUEST_ID%TYPE                 DEFAULT NULL
11827         )
11828     RETURN EGO_ITM_USR_ATTR_INTRFC.ATTR_VALUE_DATE%TYPE IS
11829     BEGIN
11830         RETURN GET_REV_USR_ATTR_DATE
11831         (
11832           p_batch_id                        => p_batch_id
11833         , p_inventory_item_id               => p_inventory_item_id
11834         , p_item_number                     => p_item_number
11835         , p_organization_id                 => p_organization_id
11836         , p_revision_code                   => p_revision_code
11837         , p_attr_group_type                 => p_attr_group_type
11838         , p_attr_group_name                 => p_attr_group_name
11839         , p_attr_name                       => p_attr_name
11840         , p_do_processed_rows_flag          => p_do_processed_rows_flag
11841         , p_request_id                      => p_request_id
11842         , p_use_pdh_keys_to_join            => true
11843         , p_get_value_column                => true
11844         );
11845     END GET_REV_USR_ATTR_PDH_VDATE;
11846 
11847     --------------------------------------------------------------------------------------------
11848     --  Function GET_REV_USR_ATTR_NUM
11849     --  Returns the number value of the specified revision attribute, if the attribute is present
11850     --  in the interface table.
11851     --      p_output_uom_code parameter is ignored (no uom conversions performed)
11852     --------------------------------------------------------------------------------------------
11853     FUNCTION GET_REV_USR_ATTR_SS_VNUM
11854         (
11855           p_batch_id                        IN  EGO_ITM_USR_ATTR_INTRFC.DATA_SET_ID%TYPE
11856         , p_source_system_id                IN  EGO_ITM_USR_ATTR_INTRFC.SOURCE_SYSTEM_ID%TYPE
11857         , p_source_system_reference         IN  EGO_ITM_USR_ATTR_INTRFC.SOURCE_SYSTEM_REFERENCE%TYPE
11858         , p_organization_id                 IN  EGO_ITM_USR_ATTR_INTRFC.ORGANIZATION_ID%TYPE
11859         , p_revision_code                   IN  EGO_ITM_USR_ATTR_INTRFC.REVISION%TYPE
11860         , p_attr_group_type                 IN  EGO_ITM_USR_ATTR_INTRFC.ATTR_GROUP_TYPE%TYPE
11861         , p_attr_group_name                 IN  EGO_ITM_USR_ATTR_INTRFC.ATTR_GROUP_INT_NAME%TYPE
11862         , p_attr_name                       IN  EGO_ITM_USR_ATTR_INTRFC.ATTR_INT_NAME%TYPE
11863         , p_output_uom_code                 IN  EGO_ITM_USR_ATTR_INTRFC.ATTR_VALUE_UOM%TYPE
11864         , p_do_processed_rows_flag          IN  FLAG                                DEFAULT FND_API.G_FALSE
11865         , p_request_id                      IN  EGO_ITM_USR_ATTR_INTRFC.REQUEST_ID%TYPE DEFAULT NULL
11866         )
11867     RETURN EGO_ITM_USR_ATTR_INTRFC.ATTR_VALUE_NUM%TYPE IS
11868     BEGIN
11869         RETURN GET_REV_USR_ATTR_NUM
11870         (
11871           p_batch_id                        => p_batch_id
11872         , p_source_system_id                => p_source_system_id
11873         , p_source_system_reference         => p_source_system_reference
11874         , p_organization_id                 => p_organization_id
11875         , p_revision_code                   => p_revision_code
11876         , p_attr_group_type                 => p_attr_group_type
11877         , p_attr_group_name                 => p_attr_group_name
11878         , p_attr_name                       => p_attr_name
11879         , p_do_processed_rows_flag          => p_do_processed_rows_flag
11880         , p_request_id                      => p_request_id
11881         , p_use_pdh_keys_to_join            => false
11882         , p_get_value_column                => true
11883         , p_output_uom_code                 => NULL
11884         );
11885     END GET_REV_USR_ATTR_SS_VNUM;
11886 
11887     FUNCTION GET_REV_USR_ATTR_PDH_VNUM
11888         (
11889           p_batch_id                        IN  EGO_ITM_USR_ATTR_INTRFC.DATA_SET_ID%TYPE
11890         , p_inventory_item_id               IN  EGO_ITM_USR_ATTR_INTRFC.INVENTORY_ITEM_ID%TYPE
11891         , p_item_number                     IN  EGO_ITM_USR_ATTR_INTRFC.ITEM_NUMBER%TYPE
11892         , p_organization_id                 IN  EGO_ITM_USR_ATTR_INTRFC.ORGANIZATION_ID%TYPE
11893         , p_revision_code                   IN  EGO_ITM_USR_ATTR_INTRFC.REVISION%TYPE
11894         , p_attr_group_type                 IN  EGO_ITM_USR_ATTR_INTRFC.ATTR_GROUP_TYPE%TYPE
11895         , p_attr_group_name                 IN  EGO_ITM_USR_ATTR_INTRFC.ATTR_GROUP_INT_NAME%TYPE
11896         , p_attr_name                       IN  EGO_ITM_USR_ATTR_INTRFC.ATTR_INT_NAME%TYPE
11897         , p_output_uom_code                 IN  EGO_ITM_USR_ATTR_INTRFC.ATTR_VALUE_UOM%TYPE
11898         , p_do_processed_rows_flag          IN  FLAG                                DEFAULT FND_API.G_FALSE
11899         , p_request_id                      IN  EGO_ITM_USR_ATTR_INTRFC.REQUEST_ID%TYPE DEFAULT NULL
11900         )
11901     RETURN EGO_ITM_USR_ATTR_INTRFC.ATTR_VALUE_NUM%TYPE IS
11902     BEGIN
11903         RETURN GET_REV_USR_ATTR_NUM
11904         (
11905           p_batch_id                        => p_batch_id
11906         , p_inventory_item_id               => p_inventory_item_id
11907         , p_item_number                     => p_item_number
11908         , p_organization_id                 => p_organization_id
11909         , p_revision_code                   => p_revision_code
11910         , p_attr_group_type                 => p_attr_group_type
11911         , p_attr_group_name                 => p_attr_group_name
11912         , p_attr_name                       => p_attr_name
11913         , p_do_processed_rows_flag          => p_do_processed_rows_flag
11914         , p_request_id                      => p_request_id
11915         , p_use_pdh_keys_to_join            => true
11916         , p_get_value_column                => true
11917         , p_output_uom_code                 => NULL
11918         );
11919     END GET_REV_USR_ATTR_PDH_VNUM;
11920 
11921  FUNCTION Get_PDH_Source_System_Id RETURN NUMBER AS
11922  BEGIN
11923    RETURN G_PDH_SOURCE_SYSTEM_ID;
11924  END;
11925 
11926  -----------------------------------------------------------------------------------------
11927  -- Get_Tokens                                                                          --
11928  -- Takes a string and breaks it into tokens, returning them in another space-delimited --
11929  -- string; the tokens are determined according to the attributes/preferences of the    --
11930  -- intermedia text index on items, using its stoplist, lexer, etc.                     --
11931  -----------------------------------------------------------------------------------------
11932  PROCEDURE GET_TOKENS
11933  (
11934    p_string_val         IN        VARCHAR2
11935   ,x_tokens             OUT       NOCOPY VARCHAR2
11936  ) IS
11937 
11938    l_schema_name        VARCHAR2(30);
11939    l_policy_name        CONSTANT  VARCHAR2(30)    :=  'EGO_ITEM_TEXT_TL_POL1';
11940 
11941    l_token_table        CTX_DOC.token_tab;
11942 
11943  BEGIN
11944 
11945    -- initialization
11946    x_tokens := '';
11947    l_schema_name := EGO_COMMON_PVT.Get_Prod_Schema('EGO');
11948 
11949    -- retrieve tokens in a table
11950    CTX_DOC.Policy_Tokens(l_schema_name || '.' || l_policy_name
11951                         ,p_string_val
11952                         ,l_token_table
11953                         ,userenv('lang')  -- look into how to process other languages
11954                         ,NULL
11955                         ,NULL
11956    );
11957 
11958    -- for each token, put operators and join with the specified conjunction
11959    FOR i IN 1..l_token_table.count LOOP
11960 
11961      -- reset the clause
11962      x_tokens := x_tokens || ' ' || l_token_table(i).token;
11963 
11964    END LOOP;
11965 
11966  END GET_TOKENS;
11967 
11968  ------------------------------------------------------------------------------------------
11969  -- Convert_Org_And_Cat_Grp                                                              --
11970  -- This procedure converts a specified interface table row's organization code to an ID --
11971  -- and converts the item catalog category name to its corresponding ID; these           --
11972  -- conversions only occur if the org code/category name exactly match an existing name  --
11973  -- in PDH.                                                                              --
11974  ------------------------------------------------------------------------------------------
11975  PROCEDURE CONVERT_ORG_AND_CAT_GRP
11976  (
11977    p_batch_id           IN        NUMBER
11978   ,p_src_system_id      IN        NUMBER
11979   ,p_src_system_ref     IN        VARCHAR2
11980   ,p_commit             IN        BOOLEAN
11981  ) IS
11982 
11983    l_org_id             NUMBER;
11984    l_org_code           VARCHAR2(3);
11985 
11986    l_catalog_grp_id     NUMBER;
11987    l_catalog_grp_name   VARCHAR2(820);
11988 
11989    l_update_flag        BOOLEAN;
11990 
11991  BEGIN
11992 
11993    IF (p_batch_id IS NOT NULL AND p_src_system_id IS NOT NULL AND p_src_system_ref IS NOT NULL) THEN
11994 
11995      --------------------------------
11996      -- MTL_SYSTEM_ITEMS_INTERFACE --
11997      --------------------------------
11998      UPDATE MTL_SYSTEM_ITEMS_INTERFACE MSII
11999         SET ORGANIZATION_ID =
12000              NVL(ORGANIZATION_ID,
12001                  (SELECT MP.ORGANIZATION_ID
12002                     FROM MTL_PARAMETERS MP
12003                    WHERE MP.ORGANIZATION_CODE = MSII.ORGANIZATION_CODE))
12004            ,ITEM_CATALOG_GROUP_ID =
12005              NVL(ITEM_CATALOG_GROUP_ID,
12006                  (SELECT MICG.ITEM_CATALOG_GROUP_ID
12007                     FROM MTL_ITEM_CATALOG_GROUPS_B_KFV MICG
12008                    WHERE MICG.CONCATENATED_SEGMENTS = MSII.ITEM_CATALOG_GROUP_NAME))
12009       WHERE SET_PROCESS_ID = p_batch_id
12010         AND SOURCE_SYSTEM_ID = p_src_system_id
12011         AND SOURCE_SYSTEM_REFERENCE = p_src_system_ref
12012         AND PROCESS_FLAG = 0;
12013 
12014      ------------------
12015      -- EGO_AML_INTF --
12016      ------------------
12017      UPDATE EGO_AML_INTF EAI
12018         SET ORGANIZATION_ID =
12019              NVL(ORGANIZATION_ID,
12020                  (SELECT MP.ORGANIZATION_ID
12021                     FROM MTL_PARAMETERS MP
12022                    WHERE MP.ORGANIZATION_CODE = EAI.ORGANIZATION_CODE))
12023       WHERE DATA_SET_ID = p_batch_id
12024         AND SOURCE_SYSTEM_ID = p_src_system_id
12025         AND SOURCE_SYSTEM_REFERENCE = p_src_system_ref
12026         AND PROCESS_FLAG = 0;
12027 
12028      -----------------------------
12029      -- EGO_ITM_USR_ATTR_INTRFC --
12030      -----------------------------
12031      UPDATE EGO_ITM_USR_ATTR_INTRFC EIUAI
12032         SET ORGANIZATION_ID =
12033              NVL(ORGANIZATION_ID,
12034                  (SELECT MP.ORGANIZATION_ID
12035                     FROM MTL_PARAMETERS MP
12036                    WHERE MP.ORGANIZATION_CODE = EIUAI.ORGANIZATION_CODE))
12037       WHERE DATA_SET_ID = p_batch_id
12038         AND SOURCE_SYSTEM_ID = p_src_system_id
12039         AND SOURCE_SYSTEM_REFERENCE = p_src_system_ref
12040         AND PROCESS_STATUS = 0;
12041 
12042      IF (p_commit) THEN
12043        COMMIT WORK;
12044      END IF;
12045 
12046    END IF; -- if all parameters are not null
12047 
12048  END CONVERT_ORG_AND_CAT_GRP;
12049 
12050 
12051  ------------------------------------------------------------------------------------------
12052  -- Convert_Org_Cat_Grp_For_Batch                                                        --
12053  -- This is a wrapper procedure for the previous conversion procedure; this one accepts  --
12054  -- a batch ID and converts all unprocessed rows belonging to that batch.                --
12055  ------------------------------------------------------------------------------------------
12056  PROCEDURE CONVERT_ORG_CAT_GRP_FOR_BATCH
12057  (
12058    p_batch_id           IN        NUMBER
12059   ,p_commit             IN        BOOLEAN
12060  ) IS
12061 
12062    CURSOR c_batch_pks IS
12063      SELECT MSII.SOURCE_SYSTEM_ID SOURCE_SYSTEM_ID
12064            ,MSII.SOURCE_SYSTEM_REFERENCE SOURCE_SYSTEM_REFERENCE
12065        FROM MTL_SYSTEM_ITEMS_INTERFACE MSII
12066       WHERE MSII.SET_PROCESS_ID = p_batch_id
12067         AND MSII.PROCESS_FLAG = 0
12068         AND MSII.CONFIRM_STATUS IN ('US', 'UM', 'UN');
12069 
12070  BEGIN
12071 
12072    FOR v_pks IN c_batch_pks
12073    LOOP
12074 
12075      CONVERT_ORG_AND_CAT_GRP(p_batch_id, v_pks.SOURCE_SYSTEM_ID, v_pks.SOURCE_SYSTEM_REFERENCE, p_commit);
12076 
12077    END LOOP;
12078 
12079  END CONVERT_ORG_CAT_GRP_FOR_BATCH;
12080 
12081 
12082  ------------------------------------------------------------------------------------------
12083  -- Confirm_Matches                                                                      --
12084  -- This procedure takes care of setting the confirm status for a particular match in    --
12085  -- the item match table, depending on how many matches were found for a row in the      --
12086  -- interface table.                                                                     --
12087  ------------------------------------------------------------------------------------------
12088  PROCEDURE CONFIRM_MATCHES
12089  (
12090    p_batch_id           IN        NUMBER
12091   ,p_src_system_id      IN        NUMBER
12092   ,p_src_system_ref     IN        VARCHAR2
12093   ,p_match_count        IN        NUMBER
12094   ,p_inventory_item_id  IN        NUMBER
12095   ,p_organization_id    IN        NUMBER
12096  ) IS
12097 
12098    l_confirm_single_match         VARCHAR2(1);
12099    l_confirm_no_match         VARCHAR2(1);
12100 
12101  BEGIN
12102 
12103    IF (p_match_count < 1) THEN
12104 
12105      /* Bug 8621347. If item does not have any matches, get CONFIRM_NO_MATCH value of the Batch */
12106      SELECT NVL(CONFIRM_NO_MATCH,'N')
12107         INTO l_confirm_no_match
12108         FROM EGO_IMPORT_BATCH_DETAILS_V
12109         WHERE BATCH_ID=p_batch_id;
12110 
12111      /* Bug 8621347. Set the CONFIRM_STATUS to G_CONF_NEW (Confirm New), if CONFIRM_NO_MATCH i.e., 'Automatically Confirm New Item on No Match'
12112         is enabled. Otherwise, set CONFIRM_STATUS to G_UNCONF_NONE_MATCH (Unconfirm No Match).
12113      */
12114      IF (l_confirm_no_match = 'Y') THEN
12115              EGO_IMPORT_PVT.Set_Confirm_Status(p_batch_id
12116                                       ,p_src_system_id
12117                                       ,p_src_system_ref
12118                                       ,EGO_IMPORT_PVT.G_CONF_NEW);
12119      ELSE
12120              EGO_IMPORT_PVT.Set_Confirm_Status(p_batch_id
12121                                       ,p_src_system_id
12122                                       ,p_src_system_ref
12123                                       ,EGO_IMPORT_PVT.G_UNCONF_NONE_MATCH);
12124      END IF;
12125 
12126    ELSIF (p_match_count > 1) THEN
12127 
12128      EGO_IMPORT_PVT.Set_Confirm_Status(p_batch_id
12129                                       ,p_src_system_id
12130                                       ,p_src_system_ref
12131                                       ,EGO_IMPORT_PVT.G_UNCONF_MULT_MATCH);
12132 
12133    ELSE
12134 
12135      SELECT CONFIRM_SINGLE_MATCH
12136        INTO l_confirm_single_match
12137        FROM EGO_IMPORT_BATCH_DETAILS_V
12138       WHERE BATCH_ID = p_batch_id;
12139 
12140      IF (l_confirm_single_match = 'Y') THEN
12141 
12142        EGO_IMPORT_PVT.Set_Confirm_Status(p_batch_id
12143                                         ,p_src_system_id
12144                                         ,p_src_system_ref
12145                                         ,EGO_IMPORT_PVT.G_CONF_MATCH
12146                                         ,p_inventory_item_id
12147                                         ,p_organization_id);
12148 
12149      ELSE
12150 
12151        EGO_IMPORT_PVT.Set_Confirm_Status(p_batch_id
12152                                         ,p_src_system_id
12153                                         ,p_src_system_ref
12154                                         ,EGO_IMPORT_PVT.G_UNCONF_SIGL_MATCH
12155                                         ,p_inventory_item_id
12156                                         ,p_organization_id);
12157 
12158      END IF;
12159 
12160    END IF;
12161 
12162  END CONFIRM_MATCHES;
12163 
12164  ------------------------------------------------------------------------------------------
12165  -- Get_Latest_Revision_Func                                                             --
12166  -- This function returns the latest revision available for a particular spoke item.     --
12167  -- The function first checks for a revision in the item revision interface table, then  --
12168  -- MSI interface, and finally, the user-defined attributes interface table.             --
12169  ------------------------------------------------------------------------------------------
12170  FUNCTION GET_LATEST_REVISION_FUNC
12171  (
12172    p_batch_id                        IN          EGO_ITM_USR_ATTR_INTRFC.DATA_SET_ID%TYPE
12173  , p_source_system_id                IN          EGO_ITM_USR_ATTR_INTRFC.SOURCE_SYSTEM_ID%TYPE
12174  , p_source_system_reference         IN          EGO_ITM_USR_ATTR_INTRFC.SOURCE_SYSTEM_REFERENCE%TYPE
12175  , p_organization_id                 IN          EGO_ITM_USR_ATTR_INTRFC.ORGANIZATION_ID%TYPE
12176  )
12177  RETURN VARCHAR2
12178  IS
12179 
12180     l_revision_code                   VARCHAR2(3);
12181 
12182 
12183  BEGIN
12184 
12185    -- attempt to get the latest revision from the revision interface table
12186    -- according to latest effectivity date; in the case of equal effectivity
12187    -- dates, return that with the "greatest" revision code (ASCII sort order)
12188    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 );
12189 
12190    -- if the revision still could not be obtained, then obtain it from the
12191    -- user attrs interface table (ASCII sort order)
12192    IF (l_revision_code IS NULL) THEN
12193      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 );
12194    END IF;
12195 
12196    RETURN l_revision_code;
12197  END GET_LATEST_REVISION_FUNC;
12198 
12199     /**
12200      * For every unprocessed master record in a batch which has transaction_type value of 'UPDATE' or 'SYNC'
12201      * if it has no inventory_item_id
12202      *    if it has an item number, parse it into segments.
12203      *    determine if an item exists with these segments in MSI and if true, populate inventory_item_id
12204      * else it has inventory_item_id
12205      *    determine if an item exists with this inventory_item_id in MSI
12206      *
12207      * if the current transaction_type is 'SYNC'
12208      *    change it to 'UPDATE' if there is a way to resolve it to an existing item.
12209      *    change it to 'CREATE' if there is no way to resolve it to an existing item
12210      */
12211     PROCEDURE UPDATE_ITEM_SYNC_RECORDS
12212     (p_set_id  IN  NUMBER
12213      ,p_org_id IN NUMBER
12214     ) IS
12215       CURSOR c_items_table IS
12216         SELECT rowid
12217               ,organization_id
12218               ,inventory_item_id
12219               ,item_number
12220               ,transaction_id
12221               ,transaction_type
12222         FROM   mtl_system_items_interface
12223         WHERE  set_process_id   = p_set_id
12224           AND    process_flag     = 0
12225           AND organization_id = p_org_id
12226           AND (     confirm_status IS NULL
12227               OR    confirm_status = G_FAKE_CONF_STATUS_FLAG ) -- for bug 5136989
12228           AND UPPER(transaction_type) in ('SYNC', 'UPDATE')
12229           FOR UPDATE OF transaction_type;
12230 
12231       CURSOR c_item_exists(cp_item_id NUMBER) IS
12232         SELECT  1
12233         FROM   mtl_system_items_b
12234         WHERE  inventory_item_id = cp_item_id;
12235 
12236       l_item_exist NUMBER(10) := 0;
12237       l_err_text   VARCHAR2(200);
12238       l_status      NUMBER(10):= 0;
12239       l_item_id    mtl_system_items_b.inventory_item_id%TYPE;
12240 
12241    BEGIN
12242 
12243       FOR item_record IN c_items_table LOOP
12244          l_item_exist :=0;
12245          l_item_id    := NULL;
12246 
12247          IF item_record.inventory_item_id IS NULL THEN
12248             IF item_record.item_number IS NOT NULL THEN
12249                l_status  := INVPUOPI.MTL_PR_PARSE_ITEM_NUMBER(
12250                                ITEM_NUMBER =>item_record.item_number
12251                   ,ITEM_ID     =>item_record.inventory_item_id
12252                   ,TRANS_ID    =>item_record.transaction_id
12253                   ,ORG_ID      =>item_record.organization_id
12254                   ,ERR_TEXT    =>l_err_text
12255                   ,P_ROWID     =>item_record.rowid);
12256             END IF;
12257             l_item_exist := INVUPD1B.EXISTS_IN_MSI(
12258                     ROW_ID      => item_record.rowid
12259                    ,ORG_ID      => item_record.organization_id
12260                    ,INV_ITEM_ID => l_item_id
12261                    ,TRANS_ID    => item_record.transaction_id
12262                    ,ERR_TEXT    => l_err_text
12263                    ,XSET_ID     => p_set_id);
12264          ELSE
12265             l_item_id := item_record.inventory_item_id;
12266             OPEN  c_item_exists(item_record.inventory_item_id);
12267             FETCH c_item_exists INTO l_item_exist;
12268             CLOSE c_item_exists;
12269             l_item_exist := NVL(l_item_exist,0);
12270          END IF;
12271 
12272          IF upper(item_record.transaction_type) = 'SYNC' THEN
12273             IF l_item_exist = 1 THEN
12274                UPDATE mtl_system_items_interface
12275                SET    transaction_type  = 'UPDATE'
12276                WHERE  rowid = item_record.rowid;
12277             ELSE
12278                IF item_record.item_number IS NOT NULL THEN
12279                   UPDATE mtl_system_items_interface
12280                   SET    transaction_type = 'CREATE', inventory_item_id = NULL
12281                   WHERE  rowid = item_record.rowid;
12282                ELSE
12283                   UPDATE mtl_system_items_interface
12284                   SET    transaction_type = 'UPDATE', inventory_item_id = NULL
12285                   WHERE  rowid = item_record.rowid;
12286                END IF;
12287             END IF;
12288          END IF;
12289       END LOOP;
12290    END UPDATE_ITEM_SYNC_RECORDS;
12291 
12292 
12293    PROCEDURE SET_CONFIRM_STATUS
12294     (p_batch_id                IN  MTL_SYSTEM_ITEMS_INTERFACE.SET_PROCESS_ID%TYPE
12295     ,p_source_system_id        IN  MTL_SYSTEM_ITEMS_INTERFACE.SOURCE_SYSTEM_ID%TYPE
12296     ,p_source_system_reference IN  MTL_SYSTEM_ITEMS_INTERFACE.SOURCE_SYSTEM_REFERENCE%TYPE
12297     ,p_new_status              IN  MTL_SYSTEM_ITEMS_INTERFACE.CONFIRM_STATUS%TYPE
12298     ,p_inventory_item_id       IN  MTL_SYSTEM_ITEMS_INTERFACE.INVENTORY_ITEM_ID%TYPE DEFAULT NULL
12299     ,p_organization_id         IN  MTL_SYSTEM_ITEMS_INTERFACE.ORGANIZATION_ID%TYPE DEFAULT NULL
12300     ,p_check_matching_table    IN  FLAG  DEFAULT FND_API.G_FALSE
12301     ,errmsg                    OUT NOCOPY VARCHAR2
12302     ,retcode                   OUT NOCOPY VARCHAR2
12303     ) IS
12304     CURSOR cur_old_status IS
12305      SELECT CONFIRM_STATUS
12306      FROM MTL_SYSTEM_ITEMS_INTERFACE MSII, EGO_IMPORT_BATCHES_B BA
12307      WHERE MSII.SET_PROCESS_ID = p_batch_id
12308         AND MSII.SOURCE_SYSTEM_ID = p_source_system_id
12309         AND MSII.SOURCE_SYSTEM_REFERENCE = p_source_system_reference
12310         AND MSII.ORGANIZATION_ID = BA.ORGANIZATION_ID
12311         AND BA.BATCH_ID = p_batch_id
12312         AND NVL(MSII.PROCESS_FLAG, 0) < 1
12313         AND ROWNUM < 2;
12314 
12315     l_old_status  MTL_SYSTEM_ITEMS_INTERFACE.CONFIRM_STATUS%TYPE;
12316     l_need_resolve_unconf_status FLAG := p_check_matching_table;
12317     l_resolved_status  MTL_SYSTEM_ITEMS_INTERFACE.CONFIRM_STATUS%TYPE := p_new_status;
12318     l_item_in_matching_table NUMBER;
12319     BEGIN
12320        OPEN cur_old_status;
12321        FETCH cur_old_status INTO l_old_status;
12322        CLOSE cur_old_status;
12323 
12324        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,
12325                                                             G_UNCONF_SIGL_MATCH,G_UNCONF_MULT_MATCH,G_EXCLUDED) THEN
12326           errmsg := 'Invalid old status';
12327           retcode := 'F';
12328           RETURN;
12329        END IF;
12330 
12331        IF p_new_status NOT IN (G_CONF_MATCH,G_CONF_NEW, G_UNCONF_NONE_MATCH,
12332                                G_UNCONF_SIGL_MATCH,G_UNCONF_MULT_MATCH,G_EXCLUDED,
12333                                G_UNCONF_ACTION, G_UNEXCLUDE_ACTION) THEN
12334           errmsg := 'Invalid new status or action';
12335           retcode := 'F';
12336           RETURN;
12337        END IF;
12338 
12339        IF (l_old_status = G_UNCONF_NONE_MATCH AND p_new_status = G_CONF_MATCH) OR
12340           (l_old_status = G_CONF_XREF AND p_new_status = G_UNCONF_SIGL_MATCH) OR
12341           (l_old_status = G_CONF_XREF AND p_new_status = G_UNCONF_MULT_MATCH) OR
12342           (l_old_status = G_CONF_XREF AND p_new_status = G_CONF_MATCH) OR
12343           (l_old_status = G_CONF_MATCH AND p_new_status = G_UNCONF_NONE_MATCH) OR
12344           (l_old_status = G_CONF_MATCH AND p_new_status = G_CONF_MATCH) OR
12345           (l_old_status = G_CONF_NEW AND p_new_status = G_CONF_MATCH) OR
12346           (l_old_status = G_CONF_NEW AND p_new_status = G_CONF_NEW) OR
12347           (l_old_status = G_EXCLUDED AND p_new_status = G_CONF_MATCH) OR
12348           (l_old_status = G_EXCLUDED AND p_new_status = G_CONF_NEW) OR
12349           (l_old_status = G_EXCLUDED AND p_new_status = G_EXCLUDED) THEN
12350           errmsg := 'Invalid status transition from ' || l_old_status || ' to ' || p_new_status || '.';
12351           retcode := 'F';
12352           RETURN;
12353        END IF;
12354 
12355        IF l_old_status NOT IN (G_CONF_MATCH,G_CONF_XREF,G_CONF_NEW) AND p_new_status = G_UNCONF_ACTION THEN
12356           errmsg := 'Invalid action: cannot unconfirm an item that is not confirmed.';
12357           retcode := 'F';
12358           RETURN;
12359        END IF;
12360 
12361        IF l_old_status <> G_EXCLUDED AND p_new_status = G_UNEXCLUDE_ACTION THEN
12362           errmsg := 'Invalid action: cannot unexclude an item that is not excluded';
12363           retcode := 'F';
12364           RETURN;
12365        END IF;
12366 
12367        IF p_new_status = G_CONF_MATCH AND (p_inventory_item_id IS NULL OR p_organization_id IS NULL) THEN
12368           errmsg := 'Insufficient parameters: need PDH item id and org id';
12369           retcode := 'F';
12370           RETURN;
12371        END IF;
12372 
12373        IF p_new_status <> G_CONF_MATCH AND p_inventory_item_id IS NOT NULL THEN
12374           errmsg := 'Invalid parameters: p_inventory_item_id must be null if item is not confirmed as matched';
12375           retcode := 'F';
12376           RETURN;
12377        END IF;
12378 
12379        IF p_new_status = G_CONF_MATCH THEN
12380           BEGIN
12381              SELECT 1 INTO l_item_in_matching_table
12382              FROM EGO_ITEM_MATCHES
12383              WHERE BATCH_ID = p_batch_id
12384                 AND SOURCE_SYSTEM_ID = p_source_system_id
12385                 AND SOURCE_SYSTEM_REFERENCE = p_source_system_reference
12386                 AND INVENTORY_ITEM_ID = p_inventory_item_id
12387                 AND ORGANIZATION_ID = p_organization_id;
12388           EXCEPTION WHEN NO_DATA_FOUND THEN
12389             errmsg := 'Invalid parameters: need to pick a PDH item that is matched';
12390             retcode := 'F';
12391             RETURN;
12392           END;
12393        END IF;
12394 
12395        IF p_new_status IN (G_CONF_MATCH, G_CONF_NEW, G_EXCLUDED) AND
12396           p_check_matching_table = FND_API.G_TRUE THEN
12397           errmsg := 'Invalid parameters: cannot check matching table when setting confirm_status to ' || p_new_status;
12398           retcode := 'F';
12399           RETURN;
12400        END IF;
12401 
12402        IF p_new_status IN (G_UNCONF_ACTION, G_UNEXCLUDE_ACTION) THEN
12403           l_need_resolve_unconf_status := FND_API.G_TRUE;
12404        END IF;
12405 
12406        IF l_need_resolve_unconf_status = FND_API.G_TRUE THEN
12407           SELECT decode(count(1), 0, G_UNCONF_NONE_MATCH, 1, G_UNCONF_SIGL_MATCH, G_UNCONF_MULT_match)
12408             INTO l_resolved_status
12409           FROM EGO_ITEM_MATCHES
12410           WHERE BATCH_ID = p_batch_id
12411              AND SOURCE_SYSTEM_ID = p_source_system_id
12412              AND SOURCE_SYSTEM_REFERENCE = p_source_system_reference;
12413        END IF;
12414 
12415        UPDATE MTL_SYSTEM_ITEMS_INTERFACE
12416        SET CONFIRM_STATUS = l_resolved_status, INVENTORY_ITEM_ID = p_inventory_item_id
12417        WHERE SET_PROCESS_ID = p_batch_id
12418           AND SOURCE_SYSTEM_ID = p_source_system_id
12419           AND SOURCE_SYSTEM_REFERENCE = p_source_system_reference
12420           AND ORGANIZATION_ID = (SELECT ORGANIZATION_id FROM EGO_IMPORT_BATCHES_B WHERE BATCH_ID = p_batch_id)
12421           AND NVL(PROCESS_FLAG, 0) < 1;
12422 
12423        IF l_old_status = G_EXCLUDED THEN
12424           DELETE FROM EGO_IMPORT_EXCLUDED_SS_ITEMS
12425           WHERE SOURCE_SYSTEM_ID = p_source_system_id
12426              AND SOURCE_SYSTEM_REFERENCE = p_source_system_reference;
12427        END IF;
12428 
12429        IF p_new_status = G_EXCLUDED THEN
12430           MERGE INTO EGO_IMPORT_EXCLUDED_SS_ITEMS
12431           USING dual
12432           ON (SOURCE_SYSTEM_ID = p_source_system_id AND SOURCE_SYSTEM_REFERENCE = p_source_system_reference)
12433           WHEN matched THEN
12434             UPDATE SET LAST_UPDATED_BY = FND_GLOBAL.USER_ID, LAST_UPDATE_DATE = SYSDATE,
12435                        LAST_UPDATE_LOGIN = FND_GLOBAL.LOGIN_ID, OBJECT_VERSION_NUMBER = OBJECT_VERSION_NUMBER + 1
12436           WHEN NOT matched THEN
12437             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);
12438        END IF;
12439 
12440        errmsg := NULL;
12441        retcode := 'S';
12442     END SET_CONFIRM_STATUS;
12443 
12444   ------------------------------------------------------------------
12445   -- Function for returning the change order flag for the batch
12446   -- Bug#4631349 (RSOUNDAR)
12447   ------------------------------------------------------------------
12448   FUNCTION getAddAllToChangeFlag (p_batch_id  IN  NUMBER)
12449   RETURN VARCHAR2 IS
12450 
12451   l_add_all_change_flag VARCHAR2(1);
12452 
12453   BEGIN
12454     SELECT NVL(ADD_ALL_TO_CHANGE_FLAG,'N')
12455     INTO l_add_all_change_flag
12456     FROM EGO_IMPORT_OPTION_SETS
12457     WHERE BATCH_ID = p_batch_id;
12458     RETURN l_add_all_change_flag;
12459   EXCEPTION
12460     WHEN OTHERS THEN
12461       RETURN 'N';
12462 
12463   END  getAddAllToChangeFlag;
12464 
12465   FUNCTION Get_Lookup_Meaning(p_lookup_type IN VARCHAR2, p_lookup_code IN VARCHAR2)
12466   RETURN VARCHAR2 IS
12467     l_meaning VARCHAR2(1000);
12468   BEGIN
12469     SELECT MEANING INTO l_meaning
12470     FROM FND_LOOKUPS
12471     WHERE LOOKUP_TYPE = p_lookup_type
12472       AND LOOKUP_CODE = p_lookup_code;
12473 
12474     RETURN l_meaning;
12475   EXCEPTION WHEN OTHERS THEN
12476     RETURN NULL;
12477   END Get_Lookup_Meaning;
12478 
12479   ------------------------------------------------------------------
12480   --Function for returning batch details before import
12481   --Bug.:4933193
12482   ------------------------------------------------------------------
12483   FUNCTION GET_IMPORT_DETAILS_DATA
12484                             (     p_set_process_id                NUMBER,
12485                                   p_organization_id               NUMBER ,
12486                                   p_organization_code             VARCHAR2
12487                             )
12488                             RETURN  SYSTEM.EGO_IMPORT_CNT_TABLE
12489   IS
12490   CURSOR cr_item  ( p_set_process_id NUMBER, p_organization_id NUMBER , p_organization_code VARCHAR2) IS
12491     SELECT
12492       COUNT(1) CNT ,
12493       COUNT(
12494         CASE
12495         WHEN PROCESS_FLAG = 7
12496         AND UPPER(TRANSACTION_TYPE)= 'CREATE'
12497         THEN 1
12498         ELSE NULL
12499         END
12500         ) AS NEW_CNT ,
12501       COUNT(
12502         CASE
12503         WHEN PROCESS_FLAG = 7
12504         AND UPPER(TRANSACTION_TYPE)= 'UPDATE'
12505         THEN 1
12506         ELSE NULL
12507         END
12508         ) UPDATE_CNT
12509     FROM MTL_SYSTEM_ITEMS_INTERFACE
12510     WHERE SET_PROCESS_ID = p_set_process_id
12511     AND ( (ORGANIZATION_ID is not null and ORGANIZATION_ID = p_organization_id )
12512         OR
12513         (ORGANIZATION_ID is null and ORGANIZATION_CODE = p_organization_code )
12514         );
12515 
12516 
12517   CURSOR cr_org_assign (p_set_process_id NUMBER, p_organization_id NUMBER) IS
12518     SELECT
12519       COUNT(1) CNT ,
12520       COUNT(
12521         CASE
12522         WHEN PROCESS_FLAG = 7
12523         AND UPPER(TRANSACTION_TYPE)= 'CREATE'
12524         THEN 1
12525         ELSE NULL
12526         END
12527         ) AS NEW_CNT ,
12528       COUNT(
12529         CASE
12530         WHEN PROCESS_FLAG = 7
12531         AND UPPER(TRANSACTION_TYPE)= 'UPDATE'
12532         THEN 1
12533         ELSE NULL
12534         END
12535         ) UPDATE_CNT
12536     FROM MTL_SYSTEM_ITEMS_INTERFACE msii
12537     WHERE SET_PROCESS_ID = p_set_process_id
12538     AND EXISTS
12539       (
12540       SELECT NULL
12541       FROM MTL_PARAMETERS mp
12542       WHERE mp.MASTER_ORGANIZATION_ID = p_organization_id
12543         AND mp.ORGANIZATION_ID <> mp.MASTER_ORGANIZATION_ID
12544         AND (  (msii.ORGANIZATION_ID IS NOT NULL AND mp.ORGANIZATION_ID = msii.ORGANIZATION_ID)
12545             OR
12546             (msii.ORGANIZATION_ID IS NULL AND mp.ORGANIZATION_CODE = msii.ORGANIZATION_CODE)
12547             )
12548       );
12549 
12550 
12551   CURSOR cr_revision (p_set_process_id NUMBER, p_organization_id NUMBER) IS
12552     SELECT
12553       COUNT(1) AS CNT ,
12554       COUNT(
12555         CASE
12556         WHEN PROCESS_FLAG = 7
12557         AND UPPER(TRANSACTION_TYPE)= 'CREATE'
12558         THEN 1
12559         ELSE NULL
12560         END
12561         ) AS NEW_CNT ,
12562       COUNT(
12563         CASE
12564         WHEN PROCESS_FLAG = 7
12565         AND UPPER(TRANSACTION_TYPE)= 'UPDATE'
12566         THEN 1
12567         ELSE NULL
12568         END
12569         ) UPDATE_CNT
12570     FROM  MTL_ITEM_REVISIONS_INTERFACE miri
12571     WHERE SET_PROCESS_ID = p_set_process_id
12572       AND EXISTS
12573         (
12574           SELECT NULL
12575           FROM MTL_PARAMETERS mp
12576           WHERE mp.MASTER_ORGANIZATION_ID = p_organization_id
12577           AND (  (miri.ORGANIZATION_ID IS NOT NULL AND mp.ORGANIZATION_ID = miri.ORGANIZATION_ID)
12578               OR
12579               (miri.ORGANIZATION_ID IS NULL AND mp.ORGANIZATION_CODE = miri.ORGANIZATION_CODE)
12580               )
12581         );
12582 
12583 
12584   CURSOR cr_structure (p_set_process_id NUMBER, p_organization_id NUMBER) IS
12585     SELECT
12586       COUNT(
12587         CASE
12588         WHEN UPPER(TRANSACTION_TYPE) <> 'NO_OP'
12589         THEN 1
12590         ELSE NULL
12591         END
12592         ) AS CNT ,
12593       COUNT(
12594         CASE
12595         WHEN PROCESS_FLAG = 7
12596         AND UPPER(TRANSACTION_TYPE)= 'CREATE'
12597         THEN 1
12598         ELSE NULL
12599         END
12600         ) AS NEW_CNT ,
12601       COUNT(
12602         CASE
12603         WHEN PROCESS_FLAG = 7
12604         AND UPPER(TRANSACTION_TYPE) IN ( 'UPDATE', 'DELETE' )
12605         THEN 1
12606         ELSE NULL
12607         END
12608         ) UPDATE_CNT
12609     FROM BOM_INVENTORY_COMPS_INTERFACE bici
12610     WHERE bici.BATCH_ID = p_set_process_id
12611       AND EXISTS
12612           (
12613               SELECT NULL
12614               FROM MTL_PARAMETERS mp
12615               WHERE mp.MASTER_ORGANIZATION_ID = p_organization_id
12616               AND (  (bici.ORGANIZATION_ID IS NOT NULL AND mp.ORGANIZATION_ID = bici.ORGANIZATION_ID)
12617                      OR
12618                      (bici.ORGANIZATION_ID IS NULL AND mp.ORGANIZATION_CODE = bici.ORGANIZATION_CODE)
12619                   )
12620           );
12621 
12622 
12623   CURSOR cr_people (p_set_process_id NUMBER, p_organization_id NUMBER) IS
12624     SELECT
12625       COUNT(1) AS CNT ,
12626       COUNT(
12627         CASE
12628         WHEN PROCESS_STATUS = 4
12629         AND UPPER(TRANSACTION_TYPE)= 'CREATE'
12630         THEN 1
12631         ELSE NULL
12632         END
12633         ) AS NEW_CNT ,
12634       COUNT(
12635         CASE
12636         WHEN PROCESS_STATUS = 4
12637         AND ( UPPER(TRANSACTION_TYPE) IN ('UPDATE', 'DELETE') )
12638         THEN 1
12639         ELSE NULL
12640         END
12641         ) UPDATE_CNT
12642     FROM EGO_ITEM_PEOPLE_INTF eipi
12643     WHERE eipi.DATA_SET_ID = p_set_process_id
12644       AND EXISTS
12645       (
12646         SELECT NULL
12647         FROM MTL_PARAMETERS mp
12648         WHERE mp.MASTER_ORGANIZATION_ID = p_organization_id
12649           AND (  (eipi.ORGANIZATION_ID IS NOT NULL AND mp.ORGANIZATION_ID = eipi.ORGANIZATION_ID)
12650               OR
12651               (eipi.ORGANIZATION_ID IS NULL AND mp.ORGANIZATION_CODE = eipi.ORGANIZATION_CODE)
12652         )
12653       ) ;
12654 
12655 
12656   CURSOR cr_category_assignment (p_set_process_id NUMBER, p_organization_id NUMBER) IS
12657     SELECT
12658       COUNT(1) AS CNT ,
12659       COUNT(
12660         CASE
12661         WHEN PROCESS_FLAG = 7
12662         AND UPPER(TRANSACTION_TYPE)= 'CREATE'
12663         THEN 1
12664         ELSE NULL
12665         END
12666         ) AS NEW_CNT ,
12667       COUNT(
12668         CASE
12669         WHEN PROCESS_FLAG = 7
12670         AND ( UPPER(TRANSACTION_TYPE) IN ( 'UPDATE','DELETE') )
12671         THEN 1
12672         ELSE NULL
12673         END
12674         ) UPDATE_CNT
12675     FROM MTL_ITEM_CATEGORIES_INTERFACE mici
12676     WHERE mici.SET_PROCESS_ID = p_set_process_id
12677       AND EXISTS
12678         (
12679           SELECT NULL
12680           FROM MTL_PARAMETERS mp
12681           WHERE mp.MASTER_ORGANIZATION_ID = p_organization_id
12682             AND (  (mici.ORGANIZATION_ID IS NOT NULL AND mp.ORGANIZATION_ID = mici.ORGANIZATION_ID)
12683                     OR
12684                    (mici.ORGANIZATION_ID IS NULL AND mp.ORGANIZATION_CODE = mici.ORGANIZATION_CODE)
12685                 )
12686         );
12687 
12688 
12689   CURSOR cr_aml (p_set_process_id NUMBER, p_organization_id NUMBER) IS
12690     SELECT
12691       COUNT(1) AS CNT ,
12692       COUNT(
12693         CASE
12694         WHEN PROCESS_FLAG = 7
12695         AND UPPER(TRANSACTION_TYPE)= 'CREATE'
12696         THEN 1
12697         ELSE NULL
12698         END
12699         ) AS NEW_CNT ,
12700       COUNT(
12701         CASE
12702         WHEN PROCESS_FLAG = 7
12703         AND UPPER(TRANSACTION_TYPE)= 'UPDATE'
12704         THEN 1
12705         ELSE NULL
12706         END
12707         ) UPDATE_CNT
12708     FROM EGO_AML_INTF eai
12709     WHERE eai.DATA_SET_ID = p_set_process_id
12710       AND EXISTS
12711         (
12712           SELECT NULL
12713           FROM MTL_PARAMETERS mp
12714           WHERE mp.MASTER_ORGANIZATION_ID = p_organization_id
12715             AND (  (eai.ORGANIZATION_ID IS NOT NULL AND mp.ORGANIZATION_ID = eai.ORGANIZATION_ID)
12716                 OR
12717                 (eai.ORGANIZATION_ID IS NULL AND mp.ORGANIZATION_CODE = eai.ORGANIZATION_CODE)
12718                 )
12719         );
12720 
12721 
12722   CURSOR cr_component_ops (p_set_process_id NUMBER, p_organization_id NUMBER) IS
12723     SELECT
12724       COUNT(1) AS CNT ,
12725       COUNT(
12726         CASE
12727         WHEN PROCESS_FLAG = 7
12728         AND UPPER(TRANSACTION_TYPE)= 'CREATE'
12729         THEN 1
12730         ELSE NULL
12731         END
12732         ) AS NEW_CNT ,
12733       COUNT(
12734         CASE
12735         WHEN PROCESS_FLAG = 7
12736         AND UPPER(TRANSACTION_TYPE)= 'UPDATE'
12737         THEN 1
12738         ELSE NULL
12739         END
12740         ) UPDATE_CNT
12741     FROM BOM_COMPONENT_OPS_INTERFACE bcoi
12742     WHERE bcoi.BATCH_ID = p_set_process_id
12743       AND EXISTS
12744       (
12745         SELECT NULL
12746         FROM MTL_PARAMETERS mp
12747         WHERE mp.MASTER_ORGANIZATION_ID = p_organization_id
12748           AND (  (bcoi.ORGANIZATION_ID IS NOT NULL AND mp.ORGANIZATION_ID = bcoi.ORGANIZATION_ID)
12749                  OR
12750                  (bcoi.ORGANIZATION_ID IS NULL AND mp.ORGANIZATION_CODE = bcoi.ORGANIZATION_CODE)
12751               )
12752       );
12753 
12754 
12755   CURSOR cr_ref_desgs (p_set_process_id NUMBER, p_organization_id NUMBER) IS
12756     SELECT
12757       COUNT(1) AS CNT ,
12758       COUNT(
12759         CASE
12760         WHEN PROCESS_FLAG = 7
12761         AND UPPER(TRANSACTION_TYPE)= 'CREATE'
12762         THEN 1
12763         ELSE NULL
12764         END
12765         ) AS NEW_CNT ,
12766       COUNT(
12767         CASE
12768         WHEN PROCESS_FLAG = 7
12769         AND UPPER(TRANSACTION_TYPE)= 'UPDATE'
12770         THEN 1
12771         ELSE NULL
12772         END
12773         ) UPDATE_CNT
12774     FROM BOM_REF_DESGS_INTERFACE brdi
12775     WHERE brdi.BATCH_ID = p_set_process_id
12776       AND EXISTS
12777       (
12778         SELECT NULL
12779         FROM MTL_PARAMETERS mp
12780         WHERE mp.MASTER_ORGANIZATION_ID = p_organization_id
12781           AND (  (brdi.ORGANIZATION_ID IS NOT NULL AND mp.ORGANIZATION_ID = brdi.ORGANIZATION_ID)
12782                  OR
12783                  (brdi.ORGANIZATION_ID IS NULL AND mp.ORGANIZATION_CODE = brdi.ORGANIZATION_CODE)
12784               )
12785       );
12786 
12787 
12788   CURSOR cr_sub_comps (p_set_process_id NUMBER, p_organization_id NUMBER) IS
12789     SELECT
12790       COUNT(1) AS CNT ,
12791       COUNT(
12792         CASE
12793         WHEN PROCESS_FLAG = 7
12794         AND UPPER(TRANSACTION_TYPE)= 'CREATE'
12795         THEN 1
12796         ELSE NULL
12797         END
12798         ) AS NEW_CNT ,
12799       COUNT(
12800         CASE
12801         WHEN PROCESS_FLAG = 7
12802         AND UPPER(TRANSACTION_TYPE)= 'UPDATE'
12803         THEN 1
12804         ELSE NULL
12805         END
12806         ) UPDATE_CNT
12807     FROM BOM_SUB_COMPS_INTERFACE bsci
12808     WHERE bsci.BATCH_ID = p_set_process_id
12809       AND EXISTS
12810       (
12811         SELECT NULL
12812         FROM MTL_PARAMETERS mp
12813         WHERE mp.MASTER_ORGANIZATION_ID = p_organization_id
12814           AND (  (bsci.ORGANIZATION_ID IS NOT NULL AND mp.ORGANIZATION_ID = bsci.ORGANIZATION_ID)
12815                  OR
12816                  (bsci.ORGANIZATION_ID IS NULL AND mp.ORGANIZATION_CODE = bsci.ORGANIZATION_CODE)
12817               )
12818       );
12819 
12820 
12821   CURSOR cr_bill_of_mtls (p_set_process_id NUMBER, p_organization_id NUMBER) IS
12822     SELECT
12823         COUNT(
12824         CASE
12825         WHEN UPPER(TRANSACTION_TYPE) <> 'NO_OP'
12826         THEN 1
12827         ELSE NULL
12828         END
12829         ) AS CNT ,
12830       COUNT(
12831         CASE
12832         WHEN PROCESS_FLAG = 7
12833         AND UPPER(TRANSACTION_TYPE)= 'CREATE'
12834         THEN 1
12835         ELSE NULL
12836         END
12837         ) AS NEW_CNT ,
12838       COUNT(
12839         CASE
12840         WHEN PROCESS_FLAG = 7
12841         AND UPPER(TRANSACTION_TYPE)= 'UPDATE'
12842         THEN 1
12843         ELSE NULL
12844         END
12845         ) UPDATE_CNT
12846     FROM BOM_BILL_OF_MTLS_INTERFACE bomi
12847     WHERE bomi.BATCH_ID = p_set_process_id
12848       AND EXISTS
12849       (
12850         SELECT NULL
12851         FROM MTL_PARAMETERS mp
12852         WHERE mp.MASTER_ORGANIZATION_ID = p_organization_id
12853           AND (  (bomi.ORGANIZATION_ID IS NOT NULL AND mp.ORGANIZATION_ID = bomi.ORGANIZATION_ID)
12854                  OR
12855                  (bomi.ORGANIZATION_ID IS NULL AND mp.ORGANIZATION_CODE = bomi.ORGANIZATION_CODE)
12856               )
12857       );
12858 
12859   CURSOR cr_item_sup (p_set_process_id NUMBER, p_organization_id NUMBER) IS
12860     SELECT
12861       edlb.DATA_LEVEL_NAME AS DATA_LEVEL_NAME,
12862       COUNT(1) AS CNT ,
12863       COUNT(
12864         CASE
12865         WHEN PROCESS_FLAG = 7
12866         AND UPPER(TRANSACTION_TYPE)= 'CREATE'
12867         THEN 1
12868         ELSE NULL
12869         END
12870         ) AS NEW_CNT ,
12871       COUNT(
12872         CASE
12873         WHEN PROCESS_FLAG = 7
12874         AND UPPER(TRANSACTION_TYPE)= 'UPDATE'
12875         THEN 1
12876         ELSE NULL
12877         END
12878         ) UPDATE_CNT
12879     FROM EGO_ITEM_ASSOCIATIONS_INTF eiai, EGO_DATA_LEVEL_B edlb
12880     WHERE eiai.BATCH_ID = p_set_process_id
12881       AND eiai.DATA_LEVEL_ID = edlb.DATA_LEVEL_ID
12882       AND EXISTS
12883         (
12884           SELECT NULL
12885           FROM MTL_PARAMETERS mp
12886           WHERE mp.MASTER_ORGANIZATION_ID = p_organization_id
12887             AND (  (eiai.ORGANIZATION_ID IS NOT NULL AND mp.ORGANIZATION_ID = eiai.ORGANIZATION_ID)
12888                 OR
12889                 (eiai.ORGANIZATION_ID IS NULL AND mp.ORGANIZATION_CODE = eiai.ORGANIZATION_CODE)
12890                 )
12891         )
12892     GROUP BY edlb.DATA_LEVEL_NAME;
12893 
12894 
12895   CURSOR cr_lookup  IS
12896     SELECT LOOKUP_CODE,
12897       MEANING,
12898       TAG
12899     FROM FND_LOOKUP_VALUES_VL
12900     WHERE LOOKUP_TYPE='EGO_PDH_ENTITY_TYPES'
12901       AND VIEW_APPLICATION_ID = 0
12902       AND SECURITY_GROUP_ID = fnd_global.lookup_security_group(LOOKUP_TYPE, VIEW_APPLICATION_ID);
12903 
12904 
12905   TYPE   TABLE_TAG_TYPE         IS TABLE OF VARCHAR2(150) INDEX BY VARCHAR2(30);
12906   TYPE   TABLE_MEANING_TYPE     IS TABLE OF VARCHAR2(80) INDEX BY VARCHAR2(30);
12907 
12908 
12909   l_row_type          SYSTEM.EGO_IMPORT_CNT_REC;
12910   l_return_table      SYSTEM.EGO_IMPORT_CNT_TABLE;
12911   l_tag               TABLE_TAG_TYPE;
12912   l_meaning           TABLE_MEANING_TYPE;
12913   l_import_xref_only  VARCHAR2(1);
12914 
12915   BEGIN
12916     l_return_table := SYSTEM.EGO_IMPORT_CNT_TABLE();
12917     l_row_type     := SYSTEM.EGO_IMPORT_CNT_REC('',0,0,0,0,0);
12918 
12919     -- Bug: 5262421, if IMPORT_XREF_ONLY is 'Y', then we will show 0 as after import count for AML
12920     BEGIN
12921       SELECT NVL(opt.IMPORT_XREF_ONLY, 'N') INTO l_import_xref_only
12922       FROM EGO_IMPORT_BATCHES_B b, EGO_IMPORT_OPTION_SETS opt
12923       WHERE b.BATCH_ID = p_set_process_id
12924         AND b.BATCH_ID = opt.BATCH_ID;
12925     EXCEPTION WHEN NO_DATA_FOUND THEN
12926       l_import_xref_only := 'N';
12927     END;
12928 
12929     FOR i IN cr_lookup
12930     LOOP
12931       l_tag(i.LOOKUP_CODE) := i.TAG;
12932       l_meaning(i.LOOKUP_CODE) := i.MEANING;
12933     END LOOP;
12934 
12935     FOR i IN cr_item( p_set_process_id, p_organization_id, p_organization_code)
12936     LOOP
12937       IF i.CNT > 0 THEN
12938         l_return_table.EXTEND();
12939         l_row_type.MEANING := l_meaning('ITEM');
12940         l_row_type.CNT := i.CNT;
12941         l_row_type.NEW_CNT := i.NEW_CNT;
12942         l_row_type.TAG := l_tag('ITEM');
12943         l_row_type.UPDATE_CNT := i.UPDATE_CNT;
12944         l_row_type.AFTER_IMPORT_TOTAL := i.NEW_CNT + i.UPDATE_CNT;
12945         l_return_table(l_return_table.LAST) := l_row_type;
12946       END IF;
12947     END LOOP;
12948 
12949     FOR i IN cr_org_assign (p_set_process_id, p_organization_id)
12950     LOOP
12951       IF i.CNT > 0 THEN
12952         l_return_table.EXTEND();
12953         l_row_type.MEANING := l_meaning('ORG_ASSIGN');
12954         l_row_type.CNT := i.CNT;
12955         l_row_type.NEW_CNT := i.NEW_CNT;
12956         l_row_type.TAG := l_tag('ORG_ASSIGN');
12957         l_row_type.UPDATE_CNT := i.UPDATE_CNT;
12958         l_row_type.AFTER_IMPORT_TOTAL := i.NEW_CNT + i.UPDATE_CNT;
12959         l_return_table(l_return_table.LAST) := l_row_type;
12960       END IF;
12961     END LOOP;
12962 
12963     FOR i IN cr_revision (p_set_process_id, p_organization_id)
12964     LOOP
12965       IF i.CNT > 0 THEN
12966         l_return_table.EXTEND();
12967         l_row_type.MEANING := l_meaning('REVISION');
12968         l_row_type.CNT := i.CNT;
12969         l_row_type.NEW_CNT := i.NEW_CNT;
12970         l_row_type.TAG := l_tag('REVISION');
12971         l_row_type.UPDATE_CNT := i.UPDATE_CNT;
12972         l_row_type.AFTER_IMPORT_TOTAL := i.NEW_CNT + i.UPDATE_CNT;
12973         l_return_table(l_return_table.LAST) := l_row_type;
12974       END IF;
12975     END LOOP;
12976 
12977     FOR i IN cr_structure (p_set_process_id, p_organization_id)
12978     LOOP
12979       IF i.CNT > 0 THEN
12980         l_return_table.EXTEND();
12981         l_row_type.MEANING := l_meaning('STRUCTURE');
12982         l_row_type.CNT := i.CNT;
12983         l_row_type.NEW_CNT := i.NEW_CNT;
12984         l_row_type.TAG := l_tag('STRUCTURE');
12985         l_row_type.UPDATE_CNT := i.UPDATE_CNT;
12986         l_row_type.AFTER_IMPORT_TOTAL := i.NEW_CNT + i.UPDATE_CNT;
12987         l_return_table(l_return_table.LAST) := l_row_type;
12988       END IF;
12989     END LOOP;
12990 
12991     FOR i IN cr_people (p_set_process_id, p_organization_id)
12992     LOOP
12993       IF i.CNT > 0 THEN
12994         l_return_table.EXTEND();
12995         l_row_type.MEANING := l_meaning('PEOPLE');
12996         l_row_type.CNT := i.CNT;
12997         l_row_type.NEW_CNT := i.NEW_CNT;
12998         l_row_type.TAG := l_tag('PEOPLE');
12999         l_row_type.UPDATE_CNT := i.UPDATE_CNT;
13000         l_row_type.AFTER_IMPORT_TOTAL := i.NEW_CNT + i.UPDATE_CNT;
13001         l_return_table(l_return_table.LAST) := l_row_type;
13002       END IF;
13003     END LOOP;
13004 
13005     FOR i IN cr_category_assignment (p_set_process_id, p_organization_id)
13006     LOOP
13007       IF i.CNT > 0 THEN
13008         l_return_table.EXTEND();
13009         l_row_type.MEANING := l_meaning('CATEGORY_ASSIGN');
13010         l_row_type.CNT := i.CNT;
13011         l_row_type.NEW_CNT := i.NEW_CNT;
13012         l_row_type.TAG := l_tag('CATEGORY_ASSIGN');
13013         l_row_type.UPDATE_CNT := i.UPDATE_CNT;
13014         l_row_type.AFTER_IMPORT_TOTAL := i.NEW_CNT + i.UPDATE_CNT;
13015         l_return_table(l_return_table.LAST) := l_row_type;
13016       END IF;
13017     END LOOP;
13018 
13019     FOR i IN cr_aml (p_set_process_id, p_organization_id)
13020     LOOP
13021       IF i.CNT > 0 THEN
13022         l_return_table.EXTEND();
13023         l_row_type.MEANING := l_meaning( 'AML');
13024         l_row_type.CNT := i.CNT;
13025         -- Bug: 5262421, if l_import_xref_only is Y, then in after import total only show 0
13026         IF NVL(l_import_xref_only, 'N') = 'Y' THEN
13027           l_row_type.NEW_CNT := 0;
13028           l_row_type.UPDATE_CNT := 0;
13029           l_row_type.AFTER_IMPORT_TOTAL := 0;
13030         ELSE
13031           l_row_type.NEW_CNT := i.NEW_CNT;
13032           l_row_type.UPDATE_CNT := i.UPDATE_CNT;
13033           l_row_type.AFTER_IMPORT_TOTAL := i.NEW_CNT + i.UPDATE_CNT;
13034         END IF;
13035         l_row_type.TAG := l_tag( 'AML');
13036         l_return_table(l_return_table.LAST) := l_row_type;
13037       END IF;
13038     END LOOP;
13039 
13040     FOR i IN cr_component_ops (p_set_process_id, p_organization_id)
13041     LOOP
13042       IF i.CNT > 0 THEN
13043         l_return_table.EXTEND();
13044         l_row_type.MEANING := l_meaning('COMPONENT_OPS');
13045         l_row_type.CNT := i.CNT;
13046         l_row_type.NEW_CNT := i.NEW_CNT;
13047         l_row_type.TAG := l_tag('COMPONENT_OPS');
13048         l_row_type.UPDATE_CNT := i.UPDATE_CNT;
13049         l_row_type.AFTER_IMPORT_TOTAL := i.NEW_CNT + i.UPDATE_CNT;
13050         l_return_table(l_return_table.LAST) := l_row_type;
13051       END IF;
13052     END LOOP;
13053 
13054     FOR i IN cr_ref_desgs (p_set_process_id, p_organization_id)
13055     LOOP
13056       IF i.CNT > 0 THEN
13057         l_return_table.EXTEND();
13058         l_row_type.MEANING := l_meaning('REF_DESGS');
13059         l_row_type.CNT := i.CNT;
13060         l_row_type.NEW_CNT := i.NEW_CNT;
13061         l_row_type.TAG := l_tag('REF_DESGS');
13062         l_row_type.UPDATE_CNT := i.UPDATE_CNT;
13063         l_row_type.AFTER_IMPORT_TOTAL := i.NEW_CNT + i.UPDATE_CNT;
13064         l_return_table(l_return_table.LAST) := l_row_type;
13065       END IF;
13066     END LOOP;
13067 
13068     FOR i IN cr_sub_comps (p_set_process_id, p_organization_id)
13069     LOOP
13070       IF i.CNT > 0 THEN
13071         l_return_table.EXTEND();
13072         l_row_type.MEANING := l_meaning('SUB_COMPS');
13073         l_row_type.CNT := i.CNT;
13074         l_row_type.NEW_CNT := i.NEW_CNT;
13075         l_row_type.TAG := l_tag('SUB_COMPS');
13076         l_row_type.UPDATE_CNT := i.UPDATE_CNT;
13077         l_row_type.AFTER_IMPORT_TOTAL := i.NEW_CNT + i.UPDATE_CNT;
13078         l_return_table(l_return_table.LAST) := l_row_type;
13079       END IF;
13080     END LOOP;
13081 
13082     FOR i IN cr_bill_of_mtls (p_set_process_id, p_organization_id )
13083     LOOP
13084       IF i.CNT > 0 THEN
13085         l_return_table.EXTEND();
13086         l_row_type.MEANING := l_meaning('BILL_OF_MTLS');
13087         l_row_type.CNT := i.CNT;
13088         l_row_type.NEW_CNT := i.NEW_CNT;
13089         l_row_type.TAG := l_tag('BILL_OF_MTLS');
13090         l_row_type.UPDATE_CNT := i.UPDATE_CNT;
13091         l_row_type.AFTER_IMPORT_TOTAL := i.NEW_CNT + i.UPDATE_CNT;
13092         l_return_table(l_return_table.LAST) := l_row_type;
13093       END IF;
13094     END LOOP;
13095 
13096     FOR i IN cr_item_sup (p_set_process_id, p_organization_id )
13097     LOOP
13098       IF i.CNT > 0 THEN
13099         l_return_table.EXTEND();
13100         IF i.DATA_LEVEL_NAME = 'ITEM_SUP' THEN
13101           l_row_type.MEANING := l_meaning('ITEM_SUP');
13102           l_row_type.TAG := l_tag('ITEM_SUP');
13103         ELSIF i.DATA_LEVEL_NAME = 'ITEM_SUP_SITE' THEN
13104           l_row_type.MEANING := l_meaning('ITEM_SUP_SITE');
13105           l_row_type.TAG := l_tag('ITEM_SUP_SITE');
13106         ELSIF i.DATA_LEVEL_NAME = 'ITEM_SUP_SITE_ORG' THEN
13107           l_row_type.MEANING := l_meaning('ITEM_ORG_SUP_SITE');
13108           l_row_type.TAG := l_tag('ITEM_ORG_SUP_SITE');
13109         END IF;
13110         l_row_type.CNT := i.CNT;
13111         l_row_type.NEW_CNT := i.NEW_CNT;
13112         l_row_type.UPDATE_CNT := i.UPDATE_CNT;
13113         l_row_type.AFTER_IMPORT_TOTAL := i.NEW_CNT + i.UPDATE_CNT;
13114         l_return_table(l_return_table.LAST) := l_row_type;
13115       END IF;
13116     END LOOP;
13117 
13118     RETURN  l_return_table ;
13119   EXCEPTION
13120     WHEN OTHERS THEN
13121       l_row_type := SYSTEM.EGO_IMPORT_CNT_REC('',0,0,0,0,0);
13122       l_return_table := SYSTEM.EGO_IMPORT_CNT_TABLE();
13123       l_row_type.MEANING := SQLERRM;
13124       l_return_table.EXTEND();
13125       l_return_table(l_return_table.LAST) := l_row_type;
13126       RETURN l_return_table;
13127   END GET_IMPORT_DETAILS_DATA;
13128 
13129   /*
13130    * This method updates the request_ids to ego_import_batches_b table.
13131    */
13132   PROCEDURE Update_Request_Id_To_Batch (
13133             p_import_request_id  IN NUMBER,
13134             p_match_request_id   IN NUMBER,
13135             p_batch_id           IN NUMBER)
13136   IS
13137   BEGIN
13138     IF ( NVL(p_import_request_id, 0) > 0 ) OR ( NVL(p_match_request_id, 0) > 0 ) THEN
13139       UPDATE EGO_IMPORT_BATCHES_B
13140       SET LAST_MATCH_REQUEST_ID = DECODE(p_match_request_id, NULL, LAST_MATCH_REQUEST_ID, 0, LAST_MATCH_REQUEST_ID, p_match_request_id),
13141           LAST_IMPORT_REQUEST_ID = DECODE(p_import_request_id, NULL, LAST_IMPORT_REQUEST_ID, 0, LAST_IMPORT_REQUEST_ID, p_import_request_id)
13142       WHERE BATCH_ID = p_batch_id;
13143     END IF; -- IF ( NVL(p_import_request_id, 0) > 0 ) OR ( NVL(p_match_request_id, 0) > 0 ) THEN
13144   END Update_Request_Id_To_Batch;
13145 
13146 END EGO_IMPORT_PVT;