[Home] [Help]
PACKAGE BODY: APPS.GMI_PRE_MIGRATION
Source
1 PACKAGE BODY GMI_Pre_Migration AS
2 /* $Header: GMIPMIGB.pls 120.1 2005/07/05 09:14:27 jgogna noship $
3 +==========================================================================+
4 | Copyright (c) 1998 Oracle Corporation |
5 | Redwood Shores, CA, USA |
6 | All rights reserved. |
7 +==========================================================================+
8 | FILE NAME |
9 | GMIPMIGB.pls |
10 | |
11 | TYPE |
12 | Public |
13 | |
14 | PACKAGE NAME |
15 | GMIPMIGB |
16 | |
17 | DESCRIPTION |
18 | This package contains the procedure used for pre-migration validation |
19 | of the OPM convergence migration. |
20 | |
21 | Contents |
22 | validate |
23 | |
24 | HISTORY |
25 | Created - Jatinder Gogna - 3/22/05 |
26 | |
27 | |
28 +==========================================================================+
29 */
30
31 /*====================================================================
32 -- PROCEDURE:
33 -- validate_desc_flex_definition
34 --
35 -- DESCRIPTION:
36 -- This PL/SQL procedure is used to validate the conflict
37 -- in desc flexfield usage for discrete and OPM.
38 --
39 -- PARAMETERS:
40 -- p_opm_desc_flex_name - OPM desc flexfield name
41 -- p_odm_desc_flex_name - ODM desc flexfield name
42 -- SYNOPSIS:
43 -- validate_desc_flex_definition( 'ITEM_FLEX', 'MTL_SYSTEM_ITEMS');
44 --
45 -- HISTORY
46 -- Jatinder Gogna - Created - 03/25/05
47 --====================================================================*/
48
49 PROCEDURE validate_desc_flex_definition
50 ( p_migration_run_id IN NUMBER,
51 p_opm_desc_flex_name IN VARCHAR2,
52 p_odm_desc_flex_name IN VARCHAR2)
53 IS
54
55 CURSOR c_get_desc_flex_col_conflict IS
56
57 SELECT col.descriptive_flex_context_code,
58 col.application_column_name,
59 col.end_user_column_name
60 FROM fnd_descr_flex_column_usages col,
61 fnd_descr_flex_contexts cont
62 WHERE
63 col.application_id = 551 and
64 col.descriptive_flexfield_name = p_opm_desc_flex_name and
65 col.enabled_flag = 'Y' and
66 col.application_id = cont.application_id and
67 col.descriptive_flexfield_name = cont.descriptive_flexfield_name and
68 col.descriptive_flex_context_code = cont.descriptive_flex_context_code and
69 cont.enabled_flag = 'Y' and
70 col.application_column_name in (
71 SELECT col2.application_column_name
72 FROM fnd_descr_flex_column_usages col2,
73 fnd_descr_flex_contexts cont2
74 WHERE
75 col2.application_id = 401 and
76 col2.descriptive_flexfield_name = p_odm_desc_flex_name and
77 col2.enabled_flag = 'Y' and
78 col.application_id = cont2.application_id and
79 col.descriptive_flexfield_name = cont2.descriptive_flexfield_name and
80 col.descriptive_flex_context_code = cont2.descriptive_flex_context_code and
81 cont2.enabled_flag = 'Y' );
82
83 CURSOR c_get_opm_desc_flex_cols IS
84
85 SELECT col.descriptive_flex_context_code,
86 col.application_column_name,
87 col.end_user_column_name
88 FROM fnd_descr_flex_column_usages col,
89 fnd_descr_flex_contexts cont
90 WHERE
91 col.application_id = 551 and
92 col.descriptive_flexfield_name = p_opm_desc_flex_name and
93 col.enabled_flag = 'Y' and
94 col.application_id = cont.application_id and
95 col.descriptive_flexfield_name = cont.descriptive_flexfield_name and
96 col.descriptive_flex_context_code = cont.descriptive_flex_context_code and
97 cont.enabled_flag = 'Y';
98
99 l_opm_context VARCHAR2(30);
100 l_odm_context VARCHAR2(30);
101 l_table_name VARCHAR2(50);
102 l_context VARCHAR2(50);
103 BEGIN
104 BEGIN
105 IF p_opm_desc_flex_name = 'ITEM_FLEX' THEN
106 l_table_name := 'IC_ITEM_MST_B';
107 l_context := 'ITEMS';
108 ELSIF p_opm_desc_flex_name = 'LOT_FLEX' THEN
109 l_table_name := 'IC_LOTS_MST';
110 l_context := 'LOTS';
111 END IF;
112 SELECT cont.descriptive_flex_context_code
113 INTO l_opm_context
114 FROM fnd_descr_flex_contexts cont
115 WHERE cont.application_id = 551 and
116 cont.descriptive_flexfield_name = p_opm_desc_flex_name and
117 cont.enabled_flag = 'Y' and
118 cont.global_flag = 'N' and
119 rownum = 1;
120 EXCEPTION
121 WHEN NO_DATA_FOUND THEN
122 NULL;
123 END;
124 BEGIN
125 SELECT cont.descriptive_flex_context_code
126 INTO l_odm_context
127 FROM fnd_descr_flex_contexts cont
128 WHERE cont.application_id = 401 and
129 cont.descriptive_flexfield_name = p_odm_desc_flex_name and
130 cont.enabled_flag = 'Y' and
131 cont.global_flag = 'N' and
132 rownum = 1;
133 EXCEPTION
134 WHEN NO_DATA_FOUND THEN
135 NULL;
136 END;
137 IF (l_opm_context is not NULL and l_odm_context is not NULL) THEN
138 -- Log Error
139 -- dbms_output.put_line ('Desc flexfield conflict. OPM context: '|| l_opm_context ||', ODM context: '|| l_odm_context);
140 GMA_COMMON_LOGGING.gma_migration_central_log (
141 p_run_id => p_migration_run_id,
142 p_log_level => FND_LOG.LEVEL_ERROR,
143 p_message_token => 'GMI_MIG_DFLEX_CONTEXT_CONFLICT',
144 p_table_name => 'IC_ITEM_MST_B',
145 p_context => 'ITEMS',
146 p_param1 => l_opm_context,
147 p_param2 => l_odm_context,
148 p_param3 => NULL,
149 p_param4 => NULL,
150 p_param5 => NULL,
151 p_db_error => NULL,
152 p_app_short_name => 'GMI');
153 END IF;
154
155 -- Check if any OPM item decsriptive flexfield column is used in
156 -- Discrete item flexfield
157
158 FOR conflict_columns in c_get_desc_flex_col_conflict LOOP
159 -- If we are here, that means we have a conflict
160
161 -- dbms_output.put_line ('Desc flexfield column conflict.' || conflict_columns.descriptive_flex_context_code ||', '||conflict_columns.end_user_column_name||', '||conflict_columns.application_column_name);
162 GMA_COMMON_LOGGING.gma_migration_central_log (
163 p_run_id => p_migration_run_id,
164 p_log_level => FND_LOG.LEVEL_ERROR,
165 p_message_token => 'GMI_MIG_DFLEX_COL_CONFLICT',
166 p_table_name => 'IC_ITEM_MST_B',
167 p_context => 'ITEMS',
168 p_param1 => conflict_columns.descriptive_flex_context_code,
169 p_param2 => conflict_columns.end_user_column_name,
170 p_param3 => conflict_columns.application_column_name,
171 p_param4 => NULL,
172 p_param5 => NULL,
173 p_db_error => NULL,
174 p_app_short_name => 'GMI');
175 END LOOP;
176
177 END;
178
179 /*====================================================================
180 -- PROCEDURE:
181 -- validate
182 --
183 -- DESCRIPTION:
184 -- This package contains the procedure used for pre-migration validation
185 -- of the OPM convergence migration.
186 --
187 -- PARAMETERS:
188 --
189 -- SYNOPSIS:
190 -- validate;
191 --
192 -- HISTORY
193 -- Jatinder Gogna - Created - 03/25/05
194 --====================================================================*/
195
196 PROCEDURE validate (
197 p_migration_run_id IN NUMBER) IS
198
199 CURSOR c_autolot IS
200 SELECT count(*) item_count
201 FROM ic_item_mst_b
202 WHERE lot_ctl = 1 AND
203 autolot_active_indicator <> 1;
204
205 CURSOR c_lot_status IS
206 SELECT i.item_no, l.lot_no, l.sublot_no, w.orgn_code, w.whse_code, inv.location, inv.lot_status
207 FROM ic_loct_inv inv, ic_item_mst_b i, ic_lots_mst l, ic_whse_mst w
208 WHERE
209 inv.whse_code = w.whse_code AND
210 inv.item_id = i.item_id AND
211 i.lot_ctl = 1 AND
212 inv.item_id = l.item_id AND
213 inv.lot_id = l.lot_id AND
214 inv.loct_onhand <> 0 AND
215 EXISTS (
216 SELECT 1
217 FROM ic_loct_inv inv2, ic_whse_mst w2
218 WHERE
219 inv.whse_code = w2.whse_code AND
220 inv.item_id = inv2.item_id AND
221 inv.lot_id = inv2.lot_id AND
222 -- Compare the balances within the mapped org
223 DECODE(w.subinventory_ind_flag, 'Y', w.orgn_code, w.whse_code) =
224 DECODE(w2.subinventory_ind_flag, 'Y', w2.orgn_code, w2.whse_code) AND
225 -- Same locations for whse mapped as subinventory will be created as diff locators.
226 inv.whse_code||inv.location <> inv2.whse_code||inv2.location AND
227 inv.lot_status <> inv2.lot_status AND
228 inv2.loct_onhand <> 0)
229 ORDER by i.item_no, l.lot_no, l.sublot_no, w.orgn_code, w.whse_code, inv.location;
230
231 CURSOR c_lot_uniqeness IS
232 SELECT organization_code
233 FROM mtl_parameters
234 WHERE
235 (organization_id IN (
236 SELECT mtl_organization_id
237 FROM ic_whse_mst) OR
238 organization_id IN (
239 SELECT organization_id
240 FROM ic_whse_mst)) AND
241 lot_number_uniqueness <> 2;
242
243 CURSOR c_org_locator_ctl1 IS
244 SELECT organization_code
245 FROM mtl_parameters
246 WHERE
247 (organization_id IN (
248 SELECT mtl_organization_id
249 FROM ic_whse_mst
250 WHERE loct_ctl = 1) OR
251 organization_id IN (
252 SELECT organization_id
253 FROM ic_whse_mst
254 WHERE loct_ctl = 1)) AND
255 stock_locator_control_code <> 4;
256
257 CURSOR c_sub_locator_ctl IS
258 SELECT distinct p.organization_code, s.secondary_inventory_name
259 FROM mtl_parameters p,
260 mtl_secondary_inventories s,
261 mtl_item_locations l,
262 ic_loct_mst ol
263 WHERE
264 p.organization_id = s.organization_id AND
265 p.organization_id = l.organization_id AND
266 s.secondary_inventory_name = l.subinventory_code AND
267 l.inventory_location_id = ol.inventory_location_id AND
268 s.locator_type <> 5 AND
269 (p.organization_id IN (
270 SELECT mtl_organization_id
271 FROM ic_whse_mst
272 WHERE loct_ctl = 1) OR
273 p.organization_id IN (
274 SELECT organization_id
275 FROM ic_whse_mst
276 WHERE loct_ctl = 1));
277
278 CURSOR c_org_locator_ctl2 IS
279 SELECT organization_code
280 FROM mtl_parameters
281 WHERE
282 (organization_id IN (
283 SELECT mtl_organization_id
284 FROM ic_whse_mst
285 WHERE loct_ctl = 0) OR
286 organization_id IN (
287 SELECT organization_id
288 FROM ic_whse_mst
289 WHERE loct_ctl = 0)) AND
290 stock_locator_control_code <> 1;
291
292 CURSOR c_neg_balances IS
293 SELECT i.item_no, l.lot_no, l.sublot_no, inv.whse_code, inv.location,
294 inv.loct_onhand, inv.loct_onhand2
295 FROM ic_loct_inv inv,
296 ic_item_mst_b i,
297 ic_lots_mst l
298 WHERE
299 inv.item_id = i.item_id AND
300 inv.item_id = l.item_id AND
301 inv.lot_id = l.lot_id AND
302 ROUND(loct_onhand, 5) <> 0 AND
303 DECODE(i.dualum_ind, 0, 99999, ROUND(loct_onhand2, 5)) <> 0 AND
304 loct_onhand < 0 AND
305 DECODE(i.dualum_ind, 0, 99999, loct_onhand2) < 0;
306
307 CURSOR c_mix_balances IS
308 SELECT i.item_no, l.lot_no, l.sublot_no, inv.whse_code, inv.location,
309 inv.loct_onhand, inv.loct_onhand2
310 FROM ic_loct_inv inv,
311 ic_item_mst_b i,
312 ic_lots_mst l
313 WHERE
314 inv.item_id = i.item_id AND
315 inv.item_id = l.item_id AND
316 inv.lot_id = l.lot_id AND
317 ROUND(loct_onhand, 5) <> 0 AND
318 ROUND(loct_onhand2, 5) <> 0 AND
319 i.dualum_ind <> 0 AND
320 loct_onhand/ABS(loct_onhand) <> loct_onhand2/ABS(loct_onhand2);
321
322 CURSOR c_decimal_dust_balances IS
323 SELECT i.item_no, l.lot_no, l.sublot_no, inv.whse_code, inv.location,
324 inv.loct_onhand, inv.loct_onhand2
325 FROM ic_loct_inv inv,
326 ic_item_mst_b i,
327 ic_lots_mst l
328 WHERE
329 inv.item_id = i.item_id AND
330 inv.item_id = l.item_id AND
331 inv.lot_id = l.lot_id AND
332 ROUND(loct_onhand, 5) = 0 AND
333 DECODE(i.dualum_ind, 0, 99999, ROUND(loct_onhand2, 5)) = 0 AND
334 (loct_onhand <> 0 OR loct_onhand2 <> 0);
335
336 CURSOR c_non_inv_balances IS
337 SELECT i.item_no, l.lot_no, l.sublot_no, inv.whse_code, inv.location,
338 inv.loct_onhand, inv.loct_onhand2
339 FROM ic_loct_inv inv,
340 ic_item_mst_b i,
341 ic_lots_mst l
342 WHERE
343 inv.item_id = i.item_id AND
344 i.noninv_ind = 1 AND
345 inv.item_id = l.item_id AND
346 inv.lot_id = l.lot_id AND
347 ROUND(loct_onhand, 5) <> 0 ;
348
349 CURSOR c_in_transit_transfers IS
350 select orgn_code, transfer_no
351 from ic_xfer_mst
352 WHERE
353 transfer_status = 2 AND
354 delete_mark = 0;
355
356 l_delimiter VARCHAR2(1);
357
358 BEGIN
359 -- Check the items which do not have auto lot numbering setup
360 FOR i IN c_autolot LOOP
361 -- dbms_output.put_line ('Number of lot controlled items without autolot numbering setup : '|| to_char(i.item_count));
362 GMA_COMMON_LOGGING.gma_migration_central_log (
363 p_run_id => p_migration_run_id,
364 p_log_level => FND_LOG.LEVEL_PROCEDURE,
365 p_message_token => 'GMI_MIG_ITEM_AUTOLOT',
366 p_table_name => 'IC_ITEM_MST_B',
367 p_context => 'ITEMS',
368 p_param1 => to_char(i.item_count),
369 p_param2 => NULL,
370 p_param3 => NULL,
371 p_param4 => NULL,
372 p_param5 => NULL,
373 p_db_error => NULL,
374 p_app_short_name => 'GMI');
375 END LOOP;
376
377 -- Validate the descriptive flexfield conflicts for items and lots.
378 validate_desc_flex_definition (p_migration_run_id, 'ITEM_FLEX', 'MTL_SYSTEM_ITEMS');
379 validate_desc_flex_definition (p_migration_run_id, 'LOTS_FLEX', 'MTL_LOT_NUMBERS');
380
381 -- Show any lots with multiple status in different locations.
382 FOR ls IN c_lot_status LOOP
383 l_delimiter := NULL;
384 IF ls.sublot_no is not NULL THEN
385 l_delimiter := '-';
386 END IF;
387 -- dbms_output.put_line ('Lot with multiple status. Item, Lot-Sublot, Whse, Location, Status : '|| ls.item_no||', '||ls.lot_no||l_delimiter||ls.sublot_no||', '||ls.whse_code||', '||ls.location||', '||ls.lot_status);
388 GMA_COMMON_LOGGING.gma_migration_central_log (
389 p_run_id => p_migration_run_id,
390 p_log_level => FND_LOG.LEVEL_PROCEDURE,
391 p_message_token => 'GMI_MIG_MULTIPLE_STATUS_LOT',
392 p_table_name => 'IC_LOTS_MST',
393 p_context => 'LOTS',
394 p_param1 => ls.item_no,
395 p_param2 => ls.lot_no||l_delimiter||ls.sublot_no,
396 p_param3 => ls.whse_code,
397 p_param4 => ls.location,
398 p_param5 => ls.lot_status,
399 p_db_error => NULL,
400 p_app_short_name => 'GMI');
401 END LOOP;
402
403 -- Validate the lot uniqueness for the existing process enabled organizations.
404 FOR lu IN c_lot_uniqeness LOOP
405 -- dbms_output.put_line ('Lot uniqueness not set to NONE for the organization : '||lu.organization_code);
406 GMA_COMMON_LOGGING.gma_migration_central_log (
407 p_run_id => p_migration_run_id,
408 p_log_level => FND_LOG.LEVEL_PROCEDURE,
409 p_message_token => 'GMI_MIG_INCORRECT_LOT_UNIQ',
410 p_table_name => 'IC_LOTS_MST',
411 p_context => 'LOTS',
412 p_param1 => lu.organization_code,
413 p_param2 => NULL,
414 p_param3 => NULL,
415 p_param4 => NULL,
416 p_param5 => NULL,
417 p_db_error => NULL,
418 p_app_short_name => 'GMI');
419 END LOOP;
420
421 -- Validate the discrete locator control
422
423 FOR dl1 IN c_org_locator_ctl1 LOOP
424 -- dbms_output.put_line ('Locator control not set to Determine at Subinventory for organization corresponding to location controlled OPM warehouses : '||dl1.organization_code);
425 GMA_COMMON_LOGGING.gma_migration_central_log (
426 p_run_id => p_migration_run_id,
427 p_log_level => FND_LOG.LEVEL_PROCEDURE,
428 p_message_token => 'GMI_MIG_INCORRECT_LOCT_CTL',
429 p_table_name => 'IC_LOCT_INV',
430 p_context => 'INVENTORY BALANCES',
431 p_param1 => dl1.organization_code,
432 p_param2 => NULL,
433 p_param3 => NULL,
434 p_param4 => NULL,
435 p_param5 => NULL,
436 p_db_error => NULL,
437 p_app_short_name => 'GMI');
438 END LOOP;
439
440 FOR dl1 IN c_sub_locator_ctl LOOP
441 -- dbms_output.put_line ('Locator control not set to Item Level for subinventory corresponding to OPM warehouse locators : '||dl1.organization_code||', '||dl1.secondary_inventory_name);
442 GMA_COMMON_LOGGING.gma_migration_central_log (
443 p_run_id => p_migration_run_id,
444 p_log_level => FND_LOG.LEVEL_PROCEDURE,
445 p_message_token => 'GMI_MIG_INCORRECT_SUB_LOCT_CTL',
446 p_table_name => 'IC_LOCT_INV',
447 p_context => 'INVENTORY BALANCES',
448 p_param1 => dl1.organization_code,
449 p_param2 => dl1.secondary_inventory_name,
450 p_param3 => NULL,
451 p_param4 => NULL,
452 p_param5 => NULL,
453 p_db_error => NULL,
454 p_app_short_name => 'GMI');
455 END LOOP;
456
457 FOR dl2 IN c_org_locator_ctl2 LOOP
458 -- dbms_output.put_line ('Locator control not set to None for organization corresponding to non-location controlled OPM warehouses : '||dl2.organization_code);
459 GMA_COMMON_LOGGING.gma_migration_central_log (
460 p_run_id => p_migration_run_id,
461 p_log_level => FND_LOG.LEVEL_PROCEDURE,
462 p_message_token => 'GMI_MIG_INCORRECT_NON_LOCT_CTL',
463 p_table_name => 'IC_LOCT_INV',
464 p_context => 'INVENTORY BALANCES',
465 p_param1 => dl2.organization_code,
466 p_param2 => NULL,
467 p_param3 => NULL,
468 p_param4 => NULL,
469 p_param5 => NULL,
470 p_db_error => NULL,
471 p_app_short_name => 'GMI');
472 END LOOP;
473
474 -- Show the negative OPM inventory balances.
475
476 FOR nb IN c_neg_balances LOOP
477 -- dbms_output.put_line ('Negative balances exists for item, lot, sublot, whse, location : '||nb.item_no||', '||nb.lot_no||', '||nb.sublot_no||', '||nb.whse_code||', '||nb.location);
478 GMA_COMMON_LOGGING.gma_migration_central_log (
479 p_run_id => p_migration_run_id,
480 p_log_level => FND_LOG.LEVEL_PROCEDURE,
481 p_message_token => 'GMI_MIG_NEG_BALANCES',
482 p_table_name => 'IC_LOCT_INV',
483 p_context => 'INVENTORY BALANCES',
484 p_param1 => nb.item_no,
485 p_param2 => nb.lot_no,
486 p_param3 => nb.sublot_no,
487 p_param4 => nb.whse_code,
488 p_param5 => nb.location,
489 p_db_error => NULL,
490 p_app_short_name => 'GMI');
491 END LOOP;
492
493 -- Show any OPM balances for dual controlled items which are positive for
494 -- primary and negative for secondary or vice-versa.
495
496 FOR mb IN c_mix_balances LOOP
497 -- dbms_output.put_line ('Mixed balances for dual quantity exists for item, lot, sublot, whse, location : '||mb.item_no||', '||mb.lot_no||', '||mb.sublot_no||', '||mb.whse_code||', '||mb.location);
498 GMA_COMMON_LOGGING.gma_migration_central_log (
499 p_run_id => p_migration_run_id,
500 p_log_level => FND_LOG.LEVEL_PROCEDURE,
501 p_message_token => 'GMI_MIG_MIX_BALANCES',
502 p_table_name => 'IC_LOCT_INV',
503 p_context => 'INVENTORY BALANCES',
504 p_param1 => mb.item_no,
505 p_param2 => mb.lot_no,
506 p_param3 => mb.sublot_no,
507 p_param4 => mb.whse_code,
508 p_param5 => mb.location,
509 p_db_error => NULL,
510 p_app_short_name => 'GMI');
511
512 END LOOP;
513
514 -- Show any decimal dust kind of balances that will not be migrated for convergence.
515
516 FOR db IN c_decimal_dust_balances LOOP
517 -- dbms_output.put_line ('Decimal dust balances exists for item, lot, sublot, whse, location : '||db.item_no||', '||db.lot_no||', '||db.sublot_no||', '||db.whse_code||', '||db.location);
518 GMA_COMMON_LOGGING.gma_migration_central_log (
519 p_run_id => p_migration_run_id,
520 p_log_level => FND_LOG.LEVEL_PROCEDURE,
521 p_message_token => 'GMI_MIG_DUST_BALANCES',
522 p_table_name => 'IC_LOCT_INV',
523 p_context => 'INVENTORY BALANCES',
524 p_param1 => db.item_no,
525 p_param2 => db.lot_no,
526 p_param3 => db.sublot_no,
527 p_param4 => db.whse_code,
528 p_param5 => db.location,
529 p_db_error => NULL,
530 p_app_short_name => 'GMI');
531 END LOOP;
532
533 -- Display balances for non-inv items
534 FOR nb IN c_non_inv_balances LOOP
535 -- dbms_output.put_line ('Inventory balances exists for non-inventory item, lot, sublot, whse, location : '||nb.item_no||', '||nb.lot_no||', '||nb.sublot_no||', '||nb.whse_code||', '||nb.location);
536 GMA_COMMON_LOGGING.gma_migration_central_log (
537 p_run_id => p_migration_run_id,
538 p_log_level => FND_LOG.LEVEL_PROCEDURE,
539 p_message_token => 'GMI_MIG_NEG_BALANCES',
540 p_table_name => 'IC_LOCT_INV',
541 p_context => 'INVENTORY BALANCES',
542 p_param1 => nb.item_no,
543 p_param2 => nb.lot_no,
544 p_param3 => nb.sublot_no,
545 p_param4 => nb.whse_code,
546 p_param5 => nb.location,
547 p_db_error => NULL,
548 p_app_short_name => 'GMI');
549 END LOOP;
550
551 -- Display in-transit transfers
552 FOR tb IN c_in_transit_transfers LOOP
553 -- dbms_output.put_line ('In Transit transfer exists : ' || tb.orgn_code ||' '||tb.transfer_no);
554 GMA_COMMON_LOGGING.gma_migration_central_log (
555 p_run_id => p_migration_run_id,
556 p_log_level => FND_LOG.LEVEL_PROCEDURE,
557 p_message_token => 'GMI_MIG_INTRANS_BALANCES',
558 p_table_name => 'IC_LOCT_INV',
559 p_context => 'INVENTORY BALANCES',
560 p_param1 => tb.orgn_code ||' '||tb.transfer_no,
561 p_param2 => NULL,
562 p_param3 => NULL,
563 p_param4 => NULL,
564 p_param5 => NULL,
565 p_db_error => NULL,
566 p_app_short_name => 'GMI');
567
568 END LOOP;
569
570 END;
571
572 END GMI_Pre_Migration;