[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;