DBA Data[Home] [Help]

PACKAGE BODY: APPS.MSD_CL_LOADERS

Source


1 PACKAGE BODY MSD_CL_LOADERS AS -- body
2 /* $Header: MSDCLLDB.pls 120.5 2007/11/05 13:35:48 vrepaka ship $ */
3   -- ========= Global Parameters ===========
4 
5    -- User Environment --
6    v_current_date               DATE:= sysdate;
7    v_current_user               NUMBER;
8    v_applsys_schema             VARCHAR2(32);
9    v_monitor_request_id         NUMBER;
10    v_request_id                 NumTblTyp:= NumTblTyp(0);
11    v_ctl_file                   VarcharTblTyp:= VarcharTblTyp(0);
12    v_dat_file                   VarcharTblTyp:= VarcharTblTyp(0);
13    v_bad_file                   VarcharTblTyp:= VarcharTblTyp(0);
14    v_dis_file                   VarcharTblTyp:= VarcharTblTyp(0);
15    v_dat_file_path              VARCHAR2(1000):='';
16    v_path_seperator             VARCHAR2(5):= '/';
17    v_ctl_file_path              VARCHAR2(1000):= '';
18 
19    v_task_pointer               NUMBER:= 0;
20 
21    v_debug                      boolean := FALSE;
22 
23   -- =========== Private Functions =============
24 
25    PROCEDURE LOG_MESSAGE( pBUFF  IN  VARCHAR2)
26    IS
27    BEGIN
28      IF fnd_global.conc_request_id > 0  THEN
29          FND_FILE.PUT_LINE( FND_FILE.LOG, pBUFF);
30      ELSE
31          null;
32          --DBMS_OUTPUT.PUT_LINE( pBUFF);
33      END IF;
34    EXCEPTION
35      WHEN OTHERS THEN
36         RETURN;
37    END LOG_MESSAGE;
38 
39 -- =====Local Procedures =========
40 
41    PROCEDURE GET_FILE_NAMES(  pDataFileName   VARCHAR2, pCtlFileName VARCHAR2)
42    IS
43    lv_file_name_length            NUMBER:= 0;
44    lv_bad_file_name               VARCHAR2(1000):= '';
45    lv_dis_file_name               VARCHAR2(1000):= '';
46 
47    BEGIN
48 		v_ctl_file.EXTEND;
49 		v_dat_file.EXTEND;
50 		v_bad_file.EXTEND;
51 		v_dis_file.EXTEND;
52 
53             v_task_pointer:= v_task_pointer + 1;
54 
55         	lv_file_name_length:= instr(pDataFileName, '.', -1);
56 
57 	  	IF lv_file_name_length = 0 then
58 
59 	  		lv_bad_file_name:= pDataFileName ||'.bad';
60 	  		lv_dis_file_name:= pDataFileName ||'.dis';
61 
62 	  	ELSE
63 
64 	  		lv_bad_file_name:= substr(pDataFileName, 1, lv_file_name_length)||'bad';
65 	  		lv_dis_file_name:= substr(pDataFileName, 1, lv_file_name_length)||'dis';
66 
67 	  	END IF;
68 
69 	     	v_ctl_file(v_task_pointer):= v_ctl_file_path || pCtlFileName;
70 		v_dat_file(v_task_pointer):= v_dat_file_path || pDataFileName;
71 		v_bad_file(v_task_pointer):= v_dat_file_path || lv_bad_file_name;
72 		v_dis_file(v_task_pointer):= v_dat_file_path || lv_dis_file_name;
73 
74 		IF v_debug THEN
75 			LOG_MESSAGE('v_ctl_file('||v_task_pointer||'): '||v_ctl_file(v_task_pointer));
76 			LOG_MESSAGE('v_dat_file('||v_task_pointer||'): '||v_dat_file(v_task_pointer));
77 			LOG_MESSAGE('v_bad_file('||v_task_pointer||'): '||v_bad_file(v_task_pointer));
78 			LOG_MESSAGE('v_dis_file('||v_task_pointer||'): '||v_dis_file(v_task_pointer));
79 		END IF;
80 
81    END GET_FILE_NAMES;
82 
83    FUNCTION is_request_status_running RETURN NUMBER
84    IS
85       l_call_status      boolean;
86       l_phase            varchar2(80);
87       l_status           varchar2(80);
88       l_dev_phase        varchar2(80);
89       l_dev_status       varchar2(80);
90       l_message          varchar2(2048);
91 
92       l_request_id       NUMBER;
93 
94    BEGIN
95 
96 	l_request_id:= FND_GLOBAL.CONC_REQUEST_ID;
97 
98       l_call_status:= FND_CONCURRENT.GET_REQUEST_STATUS
99                               ( l_request_id,
100                                 NULL,
101                                 NULL,
102                                 l_phase,
103                                 l_status,
104                                 l_dev_phase,
105                                 l_dev_status,
106                                 l_message);
107 
108       IF l_call_status=FALSE THEN
109          LOG_MESSAGE( l_message);
110          RETURN SYS_NO;
111       END IF;
112 
113       IF l_dev_phase='RUNNING' THEN
114          RETURN SYS_YES;
115       ELSE
116          RETURN SYS_NO;
117       END IF;
118 
119    END is_request_status_running;
120 
121    FUNCTION active_loaders RETURN NUMBER IS
122       l_call_status      boolean;
123       l_phase            varchar2(80);
124       l_status           varchar2(80);
125       l_dev_phase        varchar2(80);
126       l_dev_status       varchar2(80);
127       l_message          varchar2(2048);
128       l_request_id       NUMBER;
129 	l_active_loaders	 NUMBER:= 0 ;
130 
131    BEGIN
132 
133       FOR lc_i IN 1..(v_request_id.COUNT) LOOP
134 
135           l_request_id:= v_request_id(lc_i);
136 
137           l_call_status:= FND_CONCURRENT.GET_REQUEST_STATUS
138                               ( l_request_id,
139                                 NULL,
140                                 NULL,
141                                 l_phase,
142                                 l_status,
143                                 l_dev_phase,
144                                 l_dev_status,
145                                 l_message);
146 
147            IF l_call_status=FALSE THEN
148               LOG_MESSAGE( l_message);
149            END IF;
150 
151            IF l_dev_phase IN ( 'PENDING','RUNNING') THEN
152               l_active_loaders:= l_active_loaders + 1;
153            END IF;
154 
155        END LOOP;
156 
157        RETURN l_active_loaders;
158 
159    END active_loaders;
160 
161    FUNCTION LAUNCH_LOADER( ERRBUF                      OUT NOCOPY VARCHAR2,
162 	                     RETCODE			       OUT NOCOPY NUMBER)
163    RETURN NUMBER IS
164 
165    lv_request_id		NUMBER;
166    lv_parameters		VARCHAR2(2000):= '';
167 
168    BEGIN
169 
170         lv_request_id:=  FND_REQUEST.SUBMIT_REQUEST(
171                              'MSC',
172                              'MSCSLD', /* loader program called */
173                              NULL,  -- description
174                              NULL,  -- start date
175                              FALSE, -- TRUE,
176    				     v_ctl_file(v_task_pointer),
177 		                 v_dat_file(v_task_pointer),
178 				     v_dis_file(v_task_pointer),
179 				     v_bad_file(v_task_pointer),
180 				     null,
181 				     '10000000'); -- NUM_OF_ERRORS
182        COMMIT;
183 
184        IF lv_request_id = 0 THEN
185           FND_MESSAGE.SET_NAME('MSC', 'MSC_PP_LAUNCH_LOADER_FAIL');
186           ERRBUF:= FND_MESSAGE.GET;
187           LOG_MESSAGE( ERRBUF);
188           RETCODE:= G_ERROR;
189 	    RETURN -1;
190        ELSE
191          FND_MESSAGE.SET_NAME('MSC', 'MSC_PP_LOADER_REQUEST_ID');
192          FND_MESSAGE.SET_TOKEN('REQUEST_ID', lv_request_id);
193          LOG_MESSAGE(FND_MESSAGE.GET);
194        END IF;
195 
196 	RETURN lv_request_id;
197    EXCEPTION
198    WHEN OTHERS THEN
199          LOG_MESSAGE( SQLERRM);
200 	   RETURN -1;
201    END LAUNCH_LOADER;
202 
203 -- ===============================================================
204    PROCEDURE LAUNCH_MONITOR( ERRBUF          OUT NOCOPY VARCHAR2,
205                  RETCODE                     OUT NOCOPY NUMBER,
206                  p_instance_id               IN  NUMBER DEFAULT NULL,
207                  p_timeout                   IN  NUMBER,
208                  p_path_separator            IN  VARCHAR2 DEFAULT '/',
209                  p_ctl_file_path             IN  VARCHAR2,
210                  p_directory_path            IN  VARCHAR2,
211                  p_total_worker_num          IN  NUMBER,
212                  p_calendars                 IN  VARCHAR2 DEFAULT NULL,
213                  p_workday_patterns          IN  VARCHAR2 DEFAULT NULL,
214                  p_shift_times               IN  VARCHAR2 DEFAULT NULL,
215                  p_calendar_exceptions       IN  VARCHAR2 DEFAULT NULL,
216                  p_shift_exceptions          IN  VARCHAR2 DEFAULT NULL,
217                  p_demand_class              IN  VARCHAR2 DEFAULT NULL,
218                  p_trading_partners          IN  VARCHAR2 DEFAULT NULL,
219                  p_trading_partner_sites     IN  VARCHAR2 DEFAULT NULL,
220                  p_price_list                IN  VARCHAR2 DEFAULT NULL,
221                  p_category_set              IN  VARCHAR2 DEFAULT NULL,
222                  p_items                     IN  VARCHAR2 DEFAULT NULL,
223                  p_item_categories           IN  VARCHAR2 DEFAULT NULL,
224                  p_bom_headers               IN  VARCHAR2 DEFAULT NULL,
225                  p_bom_components            IN  VARCHAR2 DEFAULT NULL,
226                  p_uom                       IN  VARCHAR2 DEFAULT NULL,
227                  p_uom_conv                  IN  VARCHAR2 DEFAULT NULL,
228                  p_currency_conv             IN  VARCHAR2 DEFAULT NULL,
229                  p_setup_parameters          IN  VARCHAR2 DEFAULT NULL,
230                  p_fiscal_cal                IN  VARCHAR2 DEFAULT NULL,
231                  p_composite_cal             IN  VARCHAR2 DEFAULT NULL,
232                  p_level_value               IN  VARCHAR2 DEFAULT NULL,
233                  p_level_associations        IN  VARCHAR2 DEFAULT NULL,
234                  p_booking_data              IN  VARCHAR2 DEFAULT NULL,
235                  p_shipment_data             IN  VARCHAR2 DEFAULT NULL,
236                  p_mfg_forecast              IN  VARCHAR2 DEFAULT NULL,
237                  p_cs_data                   IN  VARCHAR2 DEFAULT NULL,
238                  p_level_org_asscns          IN  VARCHAR2 DEFAULT NULL,
239                  p_item_relationships        IN  VARCHAR2 DEFAULT NULL,
240                  p_sales_history             IN  VARCHAR2 DEFAULT NULL,
241 				 p_auto_run_download         IN  NUMBER   DEFAULT NULL,
242 		 p_install_base_history      IN  VARCHAR2 DEFAULT NULL,
243 		 p_fld_ser_usg_history       IN  VARCHAR2 DEFAULT NULL,
244 		 p_dpt_rep_usg_history       IN  VARCHAR2 DEFAULT NULL,
245 		 p_ser_part_ret_history      IN  VARCHAR2 DEFAULT NULL,
246 		 p_failure_rates             IN  VARCHAR2 DEFAULT NULL,
247                  p_prd_ret_history           IN  VARCHAR2 DEFAULT NULL,
248                  p_forecast_data             IN  VARCHAR2 DEFAULT NULL)
249    IS
250 
251    lc_i                 PLS_INTEGER;
252 
253    lv_process_time      NUMBER:= 0;
254    lv_check_point       NUMBER:= 0;
255    lv_request_id        NUMBER:= -1;
256    lv_start_time        DATE;
257 
258    lv_active_loaders    NUMBER:=0;
259 
260    EX_PROCESS_TIME_OUT EXCEPTION;
261 
262    BEGIN
263 -- ===== Switch on debug based on MRP: Debug Profile
264 
265         v_debug := FND_PROFILE.VALUE('MRP_DEBUG') = 'Y';
266 
267 -- print the parameters coming in
268 
269    IF v_debug THEN
270     LOG_MESSAGE('p_timeout: '||p_timeout);
271     LOG_MESSAGE('p_path_separator: '||p_path_separator);
272     LOG_MESSAGE('p_ctl_file_path: '||p_ctl_file_path);
273     LOG_MESSAGE('p_directory_path: '||p_directory_path);
274     LOG_MESSAGE('p_total_worker_num: '||p_total_worker_num);
275     LOG_MESSAGE('p_calendars: '||p_calendars);
276     LOG_MESSAGE('p_workday_patterns: '||p_workday_patterns);
277     LOG_MESSAGE('p_shift_times:'||p_shift_times);
278     LOG_MESSAGE('p_calendar_exceptions:'||p_calendar_exceptions);
279     LOG_MESSAGE('p_shift_exceptions:'||p_shift_exceptions);
280     LOG_MESSAGE('p_setup_parameters:'||p_setup_parameters);
281     LOG_MESSAGE('p_bom_headers: '||p_bom_headers);
282     LOG_MESSAGE('p_bom_components: '||p_bom_components);
283     LOG_MESSAGE('p_items: '||p_items);
284     LOG_MESSAGE('p_category_set : '||p_category_set);
285     LOG_MESSAGE('p_item_categories: '||p_item_categories);
286     LOG_MESSAGE('p_trading_partners: '||p_trading_partners);
287     LOG_MESSAGE('p_trading_partner_sites: '||p_trading_partner_sites);
288     LOG_MESSAGE('p_level_value: '||p_level_value);
289     LOG_MESSAGE('p_level_associations: '||p_level_associations);
290     LOG_MESSAGE('p_booking_data: '||p_booking_data);
291     LOG_MESSAGE('p_shipment_data: '||p_shipment_data);
292     LOG_MESSAGE('p_mfg_forecast: '||p_mfg_forecast);
293     LOG_MESSAGE('p_price_list: '||p_price_list);
294     -- LOG_MESSAGE('p_item_list_price: '||p_item_list_price);
295     LOG_MESSAGE('p_cs_data: '||p_cs_data);
296     LOG_MESSAGE('p_item_relationships: '||p_item_relationships);
297     LOG_MESSAGE('p_level_org_asscns: '||p_level_org_asscns);
298     LOG_MESSAGE('p_currency_conv: '||p_currency_conv);
299     LOG_MESSAGE('p_uom : '||p_uom);
300     LOG_MESSAGE('p_uom_conv: '||p_uom_conv);
301     LOG_MESSAGE('p_fiscal_cal: '||p_fiscal_cal);
302     LOG_MESSAGE('p_composite_cal: '||p_composite_cal);
303     LOG_MESSAGE('p_demand_class : '||p_demand_class);
304     LOG_MESSAGE('p_sales_history : '||p_sales_history);
305     LOG_MESSAGE('p_install_base_history : '||p_install_base_history);
306     LOG_MESSAGE('p_fld_ser_usg_history : '||p_fld_ser_usg_history);
307     LOG_MESSAGE('p_dpt_rep_usg_history : '||p_dpt_rep_usg_history);
308     LOG_MESSAGE('p_ser_part_ret_history : '||p_ser_part_ret_history);
309     LOG_MESSAGE('p_failure_rates : '||p_failure_rates);
310     LOG_MESSAGE('p_prd_ret_history : '||p_prd_ret_history);
311     LOG_MESSAGE('p_forecast_data : '||p_forecast_data);
312 
313      END IF;
314 
315 -- get the ctl file path. If last character is not path seperator add it
316 
317        v_path_seperator:= p_path_separator;
318 
319        v_ctl_file_path := p_ctl_file_path;
320 
321         IF v_ctl_file_path IS NOT NULL THEN
322                 IF SUBSTR(v_ctl_file_path,-1,1) = v_path_seperator then
323                         v_ctl_file_path:= v_ctl_file_path;
324                 ELSE
325                         v_ctl_file_path:= v_ctl_file_path || v_path_seperator;
326                 END IF;
327         END IF;
328 
329 -- ===== Assign the data file directory path to a global variable ===========
330 
331 -- If last character is not path seperator, add it. User may specify the path in the
332 -- file name itself. Hence, if path is null, do not add seperator
333 
334 	IF p_directory_path IS NOT NULL THEN
335 	  	IF SUBSTR(p_directory_path,-1,1) = v_path_seperator then
336 	      	v_dat_file_path:= p_directory_path;
337 	  	ELSE
338 			v_dat_file_path:= p_directory_path || v_path_seperator;
339 	  	END IF;
340 	END IF;
341 
342 -- ===== create the Control, Data, Bad, Discard Files lists ==================
343 	IF p_calendars IS NOT NULL THEN
344 		GET_FILE_NAMES( pDataFileName => p_calendars, pCtlFileName => 'MSC_ST_CALENDARS.ctl');
345 	END IF;
346 
347 	IF p_workday_patterns IS NOT NULL THEN
348 		GET_FILE_NAMES( pDataFileName => p_workday_patterns, pCtlFileName => 'MSC_ST_WORKDAY_PATTERNS.ctl');
349 	END IF;
350 
351 	IF p_shift_times IS NOT NULL THEN
352 		GET_FILE_NAMES( pDataFileName => p_shift_times, pCtlFileName => 'MSC_ST_SHIFT_TIMES.ctl');
353 	END IF;
354 
355 	IF p_calendar_exceptions IS NOT NULL THEN
356 		GET_FILE_NAMES( pDataFileName => p_calendar_exceptions, pCtlFileName => 'MSC_ST_CALENDAR_EXCEPTIONS.ctl');
357 	END IF;
358 
359 	IF p_shift_exceptions IS NOT NULL THEN
360 		GET_FILE_NAMES( pDataFileName => p_shift_exceptions, pCtlFileName => 'MSC_ST_SHIFT_EXCEPTIONS.ctl');
364 		GET_FILE_NAMES( pDataFileName => p_setup_parameters, pCtlFileName => 'MSD_ST_SETUP_PARAMETERS.ctl');
361 	END IF;
362 
363         IF p_setup_parameters IS NOT NULL THEN
365 	END IF;
366 
367         IF p_bom_headers IS NOT NULL THEN
368                 GET_FILE_NAMES( pDataFileName => p_bom_headers, pCtlFileName => 'MSC_ST_BOMS.ctl');
369         END IF;
370 
371         IF p_bom_components IS NOT NULL THEN
372                 GET_FILE_NAMES( pDataFileName => p_bom_components, pCtlFileName => 'MSC_ST_BOM_COMPONENTS.ctl');
373         END IF;
374 
375 	IF p_items IS NOT NULL THEN
376 		GET_FILE_NAMES( pDataFileName => p_items, pCtlFileName => 'MSC_ST_SYSTEM_ITEMS.ctl');
377 	END IF;
378 
379 	IF p_category_set IS NOT NULL THEN
380 		GET_FILE_NAMES( pDataFileName => p_category_set, pCtlFileName => 'MSC_ST_CATEGORY_SETS.ctl');
381 	END IF;
382 
383 	IF p_item_categories IS NOT NULL THEN
384 		GET_FILE_NAMES( pDataFileName => p_item_categories, pCtlFileName => 'MSC_ST_ITEM_CATEGORIES.ctl');
385 	END IF;
386 
387 	IF p_trading_partners IS NOT NULL THEN
388 		GET_FILE_NAMES( pDataFileName => p_trading_partners, pCtlFileName => 'MSC_ST_TRADING_PARTNERS.ctl');
389 	END IF;
390 
391 	IF p_trading_partner_sites IS NOT NULL THEN
392 		GET_FILE_NAMES( pDataFileName => p_trading_partner_sites, pCtlFileName => 'MSC_ST_TRADING_PARTNER_SITES.ctl');
393 	END IF;
394 
395 	IF p_level_value IS NOT NULL THEN
396 		GET_FILE_NAMES( pDataFileName => p_level_value, pCtlFileName => 'MSD_ST_LEVEL_VALUES.ctl');
397 	END IF;
398 
399 	IF p_level_associations IS NOT NULL THEN
400 		GET_FILE_NAMES( pDataFileName => p_level_associations, pCtlFileName => 'MSD_ST_LEVEL_ASSOCIATIONS.ctl');
401 	END IF;
402 
403 	IF p_booking_data IS NOT NULL THEN
404 		GET_FILE_NAMES( pDataFileName => p_booking_data, pCtlFileName => 'MSD_ST_BOOKING_DATA.ctl');
405 	END IF;
406 
407 	IF p_shipment_data IS NOT NULL THEN
408 		GET_FILE_NAMES( pDataFileName => p_shipment_data, pCtlFileName => 'MSD_ST_SHIPMENT_DATA.ctl');
409 	END IF;
410 
411 	IF p_mfg_forecast IS NOT NULL THEN
412 		GET_FILE_NAMES( pDataFileName => p_mfg_forecast, pCtlFileName => 'MSD_ST_MFG_FORECAST.ctl');
413 	END IF;
414 
415 	IF p_price_list IS NOT NULL THEN
416 		GET_FILE_NAMES( pDataFileName => p_price_list, pCtlFileName => 'MSD_ST_PRICE_LIST.ctl');
417 	END IF;
418 /*
419 	IF p_item_list_price IS NOT NULL THEN
420 		GET_FILE_NAMES( pDataFileName => p_item_list_price, pCtlFileName => 'MSD_ST_ITEM_LIST_PRICE.ctl');
421 	END IF;
422 */
423 	IF p_cs_data IS NOT NULL THEN
424 		GET_FILE_NAMES( pDataFileName => p_cs_data, pCtlFileName => 'MSD_ST_CS_DATA.ctl');
425 	END IF;
426 
427 	IF p_item_relationships IS NOT NULL THEN
428 		GET_FILE_NAMES( pDataFileName => p_item_relationships, pCtlFileName => 'MSD_ST_ITEM_RELATIONSHIPS.ctl');
429 	END IF;
430 
431 	IF p_level_org_asscns IS NOT NULL THEN
432 		GET_FILE_NAMES( pDataFileName => p_level_org_asscns, pCtlFileName => 'MSD_ST_LEVEL_ORG_ASSCNS.ctl');
433 	END IF;
434 
435 	IF p_currency_conv IS NOT NULL THEN
436 		GET_FILE_NAMES( pDataFileName => p_currency_conv, pCtlFileName => 'MSD_ST_CURRENCY_CONVERSIONS.ctl');
437 	END IF;
438 
439 	IF p_uom IS NOT NULL THEN
440 		GET_FILE_NAMES( pDataFileName => p_uom, pCtlFileName => 'MSC_ST_UNITS_OF_MEASURE.ctl');
441 	END IF;
442 
443 	IF p_uom_conv IS NOT NULL THEN
444 		GET_FILE_NAMES( pDataFileName => p_uom_conv, pCtlFileName => 'MSD_ST_UOM_CONVERSIONS.ctl');
445 	END IF;
446 
447 	IF p_fiscal_cal IS NOT NULL THEN
448 		GET_FILE_NAMES( pDataFileName => p_fiscal_cal, pCtlFileName => 'MSD_ST_TIME.ctl');
449 	END IF;
450 
451         IF p_composite_cal IS NOT NULL THEN
452 		GET_FILE_NAMES( pDataFileName => p_composite_cal, pCtlFileName => 'MSD_ST_COMPOSITE_CALENDARS.ctl');
453 	END IF;
454 
455         IF p_demand_class IS NOT NULL THEN
456 		GET_FILE_NAMES( pDataFileName => p_demand_class, pCtlFileName => 'MSC_ST_DEMAND_CLASSES.ctl');
457 	END IF;
458 
459 	IF p_sales_history IS NOT NULL THEN
460 		GET_FILE_NAMES( pDataFileName => p_sales_history, pCtlFileName => 'T_SRC_SALES_TMPL.ctl');
461 	END IF;
462 
463 	IF p_install_base_history IS NOT NULL THEN
464 		GET_FILE_NAMES( pDataFileName => p_install_base_history, pCtlFileName => 'MSD_DEM_INS_BASE_HISTORY.ctl');
465 	END IF;
466 
467        IF p_dpt_rep_usg_history IS NOT NULL THEN
468       	GET_FILE_NAMES( pDataFileName => p_dpt_rep_usg_history, pCtlFileName => 'MSD_DEM_DPT_REP_USG_HISTORY.ctl');
469        END IF;
470 
471      IF p_fld_ser_usg_history IS NOT NULL THEN
472    	GET_FILE_NAMES( pDataFileName => p_fld_ser_usg_history, pCtlFileName => 'MSD_DEM_FLD_SER_USG_HISTORY.ctl');
473        END IF;
474 
475 	 IF p_ser_part_ret_history IS NOT NULL THEN
476    	GET_FILE_NAMES( pDataFileName => p_ser_part_ret_history, pCtlFileName => 'MSD_DEM_SRP_RETURN_HISTORY.ctl');
477        END IF;
478 
479 	 IF p_failure_rates IS NOT NULL THEN
480    	GET_FILE_NAMES( pDataFileName => p_failure_rates, pCtlFileName => 'MSC_ITEM_FAILURE_RATES.ctl');
481        END IF;
482 
483 	 IF p_prd_ret_history IS NOT NULL THEN
484    	GET_FILE_NAMES( pDataFileName => p_prd_ret_history, pCtlFileName => 'MSD_DEM_RETURN_HISTORY.ctl');
485        END IF;
486 
487 	 IF p_forecast_data IS NOT NULL THEN
488    	GET_FILE_NAMES( pDataFileName => p_forecast_data, pCtlFileName => 'MSD_DP_SCENARIO_ENTRIES.ctl');
489 	 END IF;
490 
491       v_request_id.EXTEND(v_task_pointer);
492 
493       v_task_pointer:= 0;
494 
495   -- ============ Lauch the Loaders here ===============
496 
497      LOOP
498 
499 	IF active_loaders < p_total_worker_num THEN
500 
501             EXIT WHEN is_request_status_running <> SYS_YES;
502 
503 		IF v_task_pointer < (v_ctl_file.LAST - 1)  THEN
504 
505 		   v_task_pointer:= v_task_pointer + 1;
506 
507 		   lv_request_id:= LAUNCH_LOADER (ERRBUF        => ERRBUF,
508 					       RETCODE       => RETCODE);
509 
510 		   IF lv_request_id <> -1 THEN
511 			v_request_id(v_task_pointer):= lv_request_id;
512 		   END IF;
513 
514                 ELSIF active_loaders = 0 THEN
515 
516                    EXIT;
517 
518                ELSE
519 
520                   select (SYSDATE- START_TIME) into lv_process_time from dual;
521 
522                   IF lv_process_time > p_timeout/1440.0 THEN Raise EX_PROCESS_TIME_OUT;  END IF;
523 
524                       DBMS_LOCK.SLEEP( 5);
525 
526                   END IF;
527 
528 	ELSE
529    -- ============= Check the execution time ==============
530 
531          select (SYSDATE- START_TIME) into lv_process_time from dual;
532 
533          IF lv_process_time > p_timeout/1440.0 THEN Raise EX_PROCESS_TIME_OUT;  END IF;
534 
535          DBMS_LOCK.SLEEP( 5);
536 
537 	END IF;
538 
539       END LOOP;
540 
541      lv_check_point:= 3;
542 
543      IF RETCODE= G_ERROR THEN RETURN; END IF;
544 
545    EXCEPTION
546 
547       WHEN EX_PROCESS_TIME_OUT THEN
548 
549          ROLLBACK;
550 
551          FND_MESSAGE.SET_NAME('MSC', 'MSC_TIMEOUT');
552          ERRBUF:= FND_MESSAGE.GET;
553          RETCODE:= G_ERROR;
554          LOG_MESSAGE( ERRBUF);
555 
556       WHEN others THEN
557 
558          ROLLBACK;
559 
560          ERRBUF := SQLERRM;
561          RETCODE:= G_ERROR;
562          LOG_MESSAGE( ERRBUF);
563 
564    END LAUNCH_MONITOR;
565 
566 END MSD_CL_LOADERS;