DBA Data[Home] [Help]

PACKAGE BODY: APPS.MSD_SRP_PROCESS_STREAM_DATA

Source


1 PACKAGE BODY msd_srp_process_stream_data AS -- body
2   /* $Header: MSDSRPPPB.pls 120.8 2010/10/22 08:07:25 sjagathe ship $*/
3 
4    null_char constant VARCHAR2(6) := '-23453';
5 
6   g_error constant NUMBER := 2;
7   g_warning constant NUMBER := 1;
8 
9   v_sql_stmt pls_integer;
10   v_debug boolean := nvl(fnd_profile.VALUE('MRP_DEBUG'),   'N') = 'Y';
11 
12   PROCEDURE log_message(p_error_text IN VARCHAR2) IS
13   BEGIN
14 
15     IF fnd_global.conc_request_id > 0 THEN
16       fnd_file.PUT_LINE(fnd_file.LOG,   p_error_text);
17     END IF;
18 
19   EXCEPTION
20   WHEN others THEN
21     RETURN;
22   END log_message;
23 
24   PROCEDURE launch(errbuf OUT nocopy VARCHAR2,   retcode OUT nocopy NUMBER,   p_instance_id IN NUMBER,   p_stream_id IN NUMBER) IS
25 
26   CURSOR get_dm_schema IS
27   SELECT owner
28   FROM dba_objects
29   WHERE owner = owner
30    AND object_type = 'TABLE'
31    AND object_name = 'MDP_MATRIX'
32   ORDER BY created DESC;
33 
34   CURSOR check_srp_plan IS
35   SELECT demand_plan_id
36   FROM msd_demand_plans
37   WHERE demand_plan_id = 5555555;
38 
39   CURSOR get_scn_id IS
40   SELECT scenario_id
41   FROM msd_dp_scenarios
42   WHERE scenario_name LIKE
43     (SELECT DISTINCT(scenario_name)
44      FROM msd_dp_scenario_entries
45 	 WHERE scenario_id = -23453)
46   ;
47 
48   CURSOR get_scn_name IS
49   SELECT DISTINCT(scenario_name)
50   FROM msd_dp_scenario_entries
51   WHERE scenario_id = -23453;
52 
53   CURSOR get_count_err_records(l_scenario_id NUMBER) IS
54   SELECT COUNT(*)
55   FROM msd_dp_scenario_entries
56   WHERE demand_plan_id = 5555555
57    AND scenario_id = l_scenario_id;
58 
59   CURSOR get_err_records IS
60   SELECT * from MSC_ITEM_FAILURE_RATES
61   where process_flag = 'E';
62 
63   msd_schema_name VARCHAR2(100);
64   msc_schema_name VARCHAR2(100);
65   l_scenario_name VARCHAR2(100);
66   l_entity_name VARCHAR2(100);
67   lv_sql_stmt VARCHAR2(4000);
68   lv_sql_stmt1 VARCHAR2(4000);
69   lv_sql_stmt2 VARCHAR2(4000);
70   lv_sql_stmt3 VARCHAR2(4000);
71   lv_sql_stmt4 VARCHAR2(4000);
72   lv_sql_stmt5 VARCHAR2(4000);
73   lv_sql_stmt6 VARCHAR2(4000);
74   lv_error_text VARCHAR2(1000);
75   lv_dummy1 VARCHAR2(32);
76   lv_dummy2 VARCHAR2(32);
77 
78   bind_var VARCHAR2(20);
79 
80   l_scenario_id NUMBER;
81   l_demand_plan_id NUMBER;
82   l_err_count NUMBER;
83 
84   lv_retval boolean;
85 
86   failure_rate_id get_err_records % rowtype;
87 
88   x_table_name   VARCHAR2(50) := NULL;
89   x_index_name   VARCHAR2(50) := NULL;
90   x_owner        VARCHAR2(50) := 'MSD';
91   x_sql          VARCHAR2(2000) := NULL;
92   x_is_present   NUMBER        := 0;
93   x_rows_deleted NUMBER        := 0;
94 
95   BEGIN
96 
97     log_message('***************** Entered in the procedure - LAUNCH **********');
98 
99     OPEN get_dm_schema;
100     FETCH get_dm_schema
101     INTO msd_schema_name;
102     CLOSE get_dm_schema;
103 
104     IF msd_schema_name IS NOT NULL THEN
105 
106       IF(p_stream_id < 6) THEN
107         lv_retval := fnd_installation.get_app_info('MSD',   lv_dummy1,   lv_dummy2,   msd_schema_name);
108       END IF;
109 
110     ELSE
111       lv_retval := fnd_installation.get_app_info('MSD',   lv_dummy1,   lv_dummy2,   msd_schema_name);
112     END IF;
113 
114     lv_retval := fnd_installation.get_app_info('MSC',   lv_dummy1,   lv_dummy2,   msc_schema_name);
115 
116     --LOG_MESSAGE('Fetched the schema name from profile MSD_DEM_SCHEMA as '||msd_schema_name);
117 
118     IF p_stream_id = 1 THEN
119 
120       l_entity_name := 'InstallBaseHistory';
121       v_sql_stmt := 01;
122       lv_sql_stmt := ' UPDATE  ' || msd_schema_name || '.MSD_DEM_INS_BASE_HISTORY t1'
123       || ' SET t1.level1_sr_pk = ( SELECT t2.sr_inventory_item_id '
124       || '    FROM msc_system_items t2 '
125       || '    WHERE t2.sr_instance_id  =  :p_instance_id '
126       || '                           AND   t2.item_name       = t1.level1 '
127       || '                           AND   rownum = 1) ';
128 
129     END IF;
130 
131     IF p_stream_id = 2 THEN
132 
133       l_entity_name := 'Field Service Usage History';
134       v_sql_stmt := 02;
135       lv_sql_stmt := ' UPDATE  ' || msd_schema_name
136       || '.MSD_DEM_FLD_SER_USG_HISTORY t1'
137       || ' SET t1.level1_sr_pk = ( SELECT distinct(t2.sr_inventory_item_id) '
138        || '            FROM msc_system_items t2 '
139        || '          WHERE t2.sr_instance_id  =  :p_instance_id '
140        || '          AND   t2.item_name       = t1.level1 '
141        || '          AND   rownum = 1) ' ;
142 
143       lv_sql_stmt1 := ' UPDATE ' || msd_schema_name
144       || '.MSD_DEM_FLD_SER_USG_HISTORY t1'
145       || ' SET t1.level2_sr_pk = ( SELECT t2.region_id '
146       || '                       FROM msc_regions t2 '
147       || '              where t2.sr_instance_id = :p_instance_id '
148        || '               AND t2.zone = t1.level2 '
149        || '               AND t2.zone_usage = 1)'  ;
150 
151     END IF;
152 
153     IF p_stream_id = 3 THEN
154 
155       l_entity_name := 'Depot Repair Usage History';
156       v_sql_stmt := 03;
157       lv_sql_stmt := ' UPDATE  '
158        || msd_schema_name
159         || '.MSD_DEM_DPT_REP_USG_HISTORY t1'
160 	|| ' SET t1.level1_sr_pk = ( SELECT distinct(t2.sr_inventory_item_id) '
161 	|| '                           FROM msc_system_items t2 '
162 	|| '                  WHERE t2.sr_instance_id  =  :p_instance_id '
163 	|| '                    AND   t2.item_name       = t1.level1) ';
164 
165       lv_sql_stmt1 := ' UPDATE '
166       || msd_schema_name
167       || '.MSD_DEM_DPT_REP_USG_HISTORY t1'
168       || ' SET t1.level2_sr_pk = ( SELECT t2.sr_tp_id '
169       || '                       FROM msc_trading_partners t2 '
170       || '              where t2.sr_instance_id = :p_instance_id '
171       || '              AND t2.organization_code = t1.level2) ';
172 
173     END IF;
174 
175     IF p_stream_id = 4 THEN
176 
177       l_entity_name := 'Service Part Return History';
178       v_sql_stmt := 04;
179       lv_sql_stmt := ' UPDATE  '
180       || msd_schema_name
181       || '.MSD_DEM_SRP_RETURN_HISTORY t1'
182       || ' SET t1.level1_sr_pk = ( SELECT distinct(t2.sr_inventory_item_id) '
183       || '                           FROM msc_system_items t2 '
184       || '                WHERE t2.sr_instance_id  =  :p_instance_id '
185       || '                           AND   t2.item_name       = t1.level1 '
186       || '                           AND   rownum = 1) ';
187 
188       lv_sql_stmt1 := ' UPDATE '
189       || msd_schema_name || '.MSD_DEM_SRP_RETURN_HISTORY t1'
190       || ' SET t1.level2_sr_pk = ( SELECT t2.region_id '
191       || '                       FROM msc_regions t2 '
192       || '             where t2.sr_instance_id = :p_instance_id '
193       || '                       AND t2.zone = t1.level2 '
194       || '                       AND t2.zone_usage = 1)';
195 
196     END IF;
197 
198     IF p_stream_id = 5 THEN
199 
200       l_entity_name := 'Failure Rates';
201       v_sql_stmt := 05;
202 
203       lv_sql_stmt := 'UPDATE ' || msc_schema_name
204       || '.MSC_ITEM_FAILURE_RATES t1'
205       || ' SET t1.using_assembly_id = nvl((select distinct(t2.inventory_item_id)'
206       || '                             FROM msc_system_items t2 '
207       || '                  where t2.sr_instance_id = :p_instance_id '
208       || '                     and t2.item_name = t1.using_assembly_name),-55555) ';
209 
210       lv_sql_stmt1 := 'UPDATE ' || msc_schema_name
211       || '.MSC_ITEM_FAILURE_RATES t1'
212       || ' SET t1.inventory_item_id = nvl((select distinct(t2.inventory_item_id) '
213       || '                             FROM msc_system_items t2 '
214       || '                      where t2.sr_instance_id = :p_instance_id '
215       || '                             and t2.item_name = t1.item_name),-55555) ';
216 
217       lv_sql_stmt2 := ' UPDATE ' || msc_schema_name
218       || '.MSC_ITEM_FAILURE_RATES '
219       || ' SET FAILURE_RATE = 1'
220       || ' where failure_rate > 1'
221       || ' and process_flag = ''N'' ';
222 
223       lv_sql_stmt3 := ' UPDATE ' || msc_schema_name
224       || '.MSC_ITEM_FAILURE_RATES '
225       || ' SET FAILURE_RATE = 0'
226       || ' where failure_rate < 0'
227       || ' and process_flag = ''N'' ';
228 
229       lv_sql_stmt4 := ' UPDATE ' || msc_schema_name
230       || '.MSC_ITEM_FAILURE_RATES '
231       || ' SET PROCESS_FLAG = ''P'''
232       || ' where PROCESS_FLAG = ''N''';
233 
234       lv_sql_stmt5 := ' UPDATE ' || msc_schema_name
235       || '.MSC_ITEM_FAILURE_RATES '
236       || ' SET PROCESS_FLAG = ''E'''
237       || ' where PROCESS_FLAG = ''N'''
238       || ' and (USING_ASSEMBLY_ID = -55555 or INVENTORY_ITEM_ID = -55555) ';
239 
240       lv_sql_stmt6 := 'DELETE FROM ' || msc_schema_name
241       || '.MSC_ITEM_FAILURE_RATES '
242       || 'WHERE PROCESS_FLAG = ''E''';
243 
244     END IF;
245 
246     IF p_stream_id = 6 THEN
247 
248       l_entity_name := 'Product Return History';
249       v_sql_stmt := 06;
250       --lv_sql_stmt := ' UPDATE  ' || msd_schema_name
251       --|| '.MSD_DEM_RETURN_HISTORY t1'
252       -- || ' SET t1.level1_sr_pk = ( SELECT distinct(t2.sr_inventory_item_id) '
253       --|| '                           FROM msc_system_items t2 '
254       -- || '                      WHERE t2.sr_instance_id  =  :p_instance_id '
255       -- || '                           AND   t2.item_name       = t1.level1) ';
256 
257     END IF;
258 
259     IF p_stream_id = 7 THEN
260 
261       l_entity_name := 'Forecast Data';
262       v_sql_stmt := 07;
263 
264 	  OPEN check_srp_plan;
265       FETCH check_srp_plan
266       INTO l_demand_plan_id;
267       CLOSE check_srp_plan;
268 
269       OPEN get_scn_id;
270       FETCH get_scn_id
271       INTO l_scenario_id;
272       CLOSE get_scn_id;
273 
274       IF l_demand_plan_id IS NULL THEN
275 
276         INSERT
277         INTO msd_demand_plans(demand_plan_id,   organization_id,   demand_plan_name,   last_update_date,   last_updated_by,   creation_date,   created_by,   sr_instance_id,   use_org_specific_bom_flag)
278         VALUES(5555555,   -23453,   'SRP DUMMY PLAN',   trunc(sysdate),   fnd_global.user_id,   trunc(sysdate),   fnd_global.user_id,   -23453,   'N');
279 
280       END IF;
281 
282       IF l_scenario_id IS NOT NULL THEN
283 
284         OPEN get_scn_name;
285         FETCH get_scn_name
286         INTO l_scenario_name;
287         CLOSE get_scn_name;
288 
289 	lv_sql_stmt := 'DELETE FROM MSD_DP_SCENARIO_ENTRIES WHERE demand_plan_id = 5555555 and scenario_id = :l_scenario_id';
290 	EXECUTE IMMEDIATE lv_sql_stmt USING l_scenario_id;
291 
292           UPDATE MSD_DP_SCENARIO_ENTRIES SET SCENARIO_ID = l_scenario_id where scenario_name = l_scenario_name
293           and demand_plan_id = 5555555 and scenario_id = -23453;
294 
295 		END IF;
296 
297       IF l_scenario_id IS NULL THEN
298         bind_var := ':l_scenario_name,';
299 
300         OPEN get_scn_name;
301         FETCH get_scn_name
302         INTO l_scenario_name;
303         CLOSE get_scn_name;
304         lv_sql_stmt := 'INSERT INTO MSD_DP_SCENARIOS(demand_plan_id,scenario_id,scenario_name, '
305 	|| 'last_update_date,last_updated_by,creation_date,created_by)'
306 	|| 'values(5555555,MSD_DP_SCENARIOS_S.nextval,' || bind_var
307 	|| 'trunc(sysdate),fnd_global.user_id,trunc(sysdate),fnd_global.user_id)';
308         EXECUTE IMMEDIATE lv_sql_stmt USING l_scenario_name;
309 
310         INSERT INTO MSD_DP_SCENARIO_OUTPUT_LEVELS(demand_plan_id,scenario_id,level_id,last_update_date,last_updated_by,creation_date,created_by)
311         values(5555555,MSD_DP_SCENARIOS_S.CURRVAL,1,trunc(sysdate),fnd_global.user_id,trunc(sysdate),fnd_global.user_id);
312 
313         OPEN get_scn_id;
314         FETCH get_scn_id
315         INTO l_scenario_id;
316         CLOSE get_scn_id;
317 
318         lv_sql_stmt1 := 'UPDATE MSD_DP_SCENARIO_ENTRIES SET SCENARIO_ID = MSD_DP_SCENARIOS_S.CURRVAL' || ' WHERE SCENARIO_NAME = :l_scenario_name ';
319         log_message(lv_sql_stmt1);
320         EXECUTE IMMEDIATE lv_sql_stmt1 USING l_scenario_name;
321       END IF;
322 
323       COMMIT;
324 
325       lv_sql_stmt2 := 'DELETE FROM MSD_DP_SCN_ENTRIES_DENORM ' || 'WHERE SCENARIO_ID = :l_scenario_id ' || 'AND DEMAND_PLAN_ID = 5555555';
326 
327       EXECUTE IMMEDIATE lv_sql_stmt2 USING l_scenario_id;
328 
329       INSERT
330       INTO msd_dp_scn_entries_denorm(demand_plan_id,   scenario_id,   demand_id,   sr_inventory_item_id,   sr_organization_id,   start_time,   end_time,   quantity,   creation_date,   created_by)
331         (SELECT mdse.demand_plan_id,
332            mdse.scenario_id,
333            mdse.entry_id,
334            msi.sr_inventory_item_id,
335            mtp.sr_tp_id,
336            mdse.time_lvl_val_from,
337            mdse.time_lvl_val_to,
338            mdse.total_quantity,
339            mdse.creation_date,
340            mdse.created_by
341          FROM msd_dp_scenario_entries mdse,
342            msc_trading_partners mtp,
343            msc_system_items msi
344          WHERE mdse.demand_plan_id = 5555555
345          AND mdse.scenario_id = l_scenario_id
346          AND mdse.organization_lvl_val = mtp.organization_code
347          AND mdse.product_lvl_val = msi.item_name
348          AND mtp.sr_instance_id = p_instance_id
349          AND mtp.partner_type = 3
350          AND mtp.sr_tp_id = msi.organization_id
351          AND msi.sr_instance_id = p_instance_id
352          AND msi.plan_id = -1)
353       ;
354 
355       DELETE FROM msd_dp_scenario_entries mdse
356       WHERE mdse.scenario_id = l_scenario_id
357        AND mdse.organization_lvl_val IN
358         (SELECT organization_code
359          FROM msc_trading_partners
360          WHERE sr_instance_id = p_instance_id
361          AND partner_type = 3
362          AND organization_code LIKE mdse.organization_lvl_val
363          AND rownum = 1)
364       AND mdse.product_lvl_val IN
365         (SELECT item_name
366          FROM msc_system_items
367          WHERE sr_instance_id = p_instance_id
368          AND item_name LIKE mdse.product_lvl_val
369          AND rownum = 1)
370       ;
371 
372       OPEN get_count_err_records(l_scenario_id);
373       FETCH get_count_err_records
374       INTO l_err_count;
375       CLOSE get_count_err_records;
376 
377       IF l_err_count > 0 THEN
378         log_message('Records with demand_plan_id 5555555 and scenario_id '|| l_scenario_id ||' in table  MSD_DP_SCENARIO_ENTRIES errored out.');
379         retcode := g_error;
380 
381 		END IF;
382 
383       COMMIT;
384 
385     END IF;
386 
387     IF v_debug THEN
388       log_message(lv_sql_stmt);
389 
390       IF lv_sql_stmt1 IS NOT NULL THEN
391         log_message(lv_sql_stmt1);
392       END IF;
393 
394       IF lv_sql_stmt2 IS NOT NULL THEN
395         log_message(lv_sql_stmt2);
396       END IF;
397 
398     END IF;
399 
400     BEGIN
401 
402       IF lv_sql_stmt IS NOT NULL
403        AND p_stream_id < 7 THEN
404         EXECUTE IMMEDIATE lv_sql_stmt USING p_instance_id;
405       END IF;
406 
407       IF lv_sql_stmt1 IS NOT NULL
408        AND p_stream_id < 7 THEN
409         EXECUTE IMMEDIATE lv_sql_stmt1 USING p_instance_id;
410       END IF;
411 
412       IF lv_sql_stmt2 IS NOT NULL
413        AND p_stream_id < 7 THEN
414         EXECUTE IMMEDIATE lv_sql_stmt2;
415       END IF;
416 
417       IF lv_sql_stmt3 IS NOT NULL
418        AND p_stream_id < 7 THEN
419         EXECUTE IMMEDIATE lv_sql_stmt3;
420       END IF;
421 
422       IF lv_sql_stmt5 IS NOT NULL
423        AND p_stream_id < 7 THEN
424         EXECUTE IMMEDIATE lv_sql_stmt5;
425 
426         LOG_MESSAGE('The following records errored out during validation : ');
427 
428         FOR failure_rate_id in get_err_records
429         LOOP
430           LOG_MESSAGE(failure_rate_id.FAILURE_RATE || '~' ||
431                       failure_rate_id.COLLECTED_FLAG || '~' ||
432                       failure_rate_id.RETIREMENT_RATE || '~' ||
433                       failure_rate_id.ITEM_NAME || '~' ||
434                       failure_rate_id.USING_ASSEMBLY_NAME
435           );
436           retcode := g_error;
437         EXIT WHEN get_err_records % NOTFOUND;
438         END LOOP;
439       END IF;
440 
441       IF lv_sql_stmt4 IS NOT NULL
442        AND p_stream_id < 7 THEN
443         EXECUTE IMMEDIATE lv_sql_stmt4;
444       END IF;
445 
446       IF lv_sql_stmt6 IS NOT NULL
447        AND p_stream_id < 7 THEN
448         EXECUTE IMMEDIATE lv_sql_stmt6;
449       END IF;
450 
451     EXCEPTION
452     WHEN others THEN
453       log_message('Error generating Source Keys');
454 
455       lv_error_text := SUBSTR('MSD_SRP_PROCESS_STREAM_DATA.LAUNCH ' || '(' || v_sql_stmt || ')' || sqlerrm,   1,   240);
456       log_message(lv_error_text);
457 
458       errbuf := lv_error_text;
459       retcode := g_error;
460     END;
461     --Final commit
462     COMMIT;
463 
464     /* 10224184 - Check and remove duplicates and add unique indexes after data load */
465 
466     IF p_stream_id = 3 THEN
467 
468        x_table_name := 'MSD_DEM_DPT_REP_USG_HISTORY';
469        x_index_name := 'MSD_DEM_DPT_REP_USG_HIST_U1';
470 
471     END IF;
472 
473     IF p_stream_id = 2 THEN
474 
475        x_table_name := 'MSD_DEM_FLD_SER_USG_HISTORY';
476        x_index_name := 'MSD_DEM_FLD_SER_USG_HIST_U1';
477 
478     END IF;
479 
480     IF p_stream_id = 4 THEN
481 
482        x_table_name := 'MSD_DEM_SRP_RETURN_HISTORY';
483        x_index_name := 'MSD_DEM_SRP_RET_HIST_U1';
484 
485     END IF;
486 
487     IF (x_table_name IS NOT NULL AND x_index_name IS NOT NULL AND p_stream_id IN (3,2,4)) THEN
488 
489        msd_dem_common_utilities.log_debug ('Table Name - ' || x_table_name);
490        msd_dem_common_utilities.log_debug ('Index Name - ' || x_index_name);
491 
492        msd_dem_common_utilities.log_debug ('Checking for duplicates - ');
493        x_sql := 'SELECT sum(a) from (select 1 a FROM ' || x_table_name
494                                 || ' GROUP BY LEVEL1_SR_PK, LEVEL2_SR_PK, SDATE '
495                                 || ' HAVING count(1) > 1)';
496        msd_dem_common_utilities.log_debug (x_sql);
497        EXECUTE IMMEDIATE x_sql INTO x_is_present;
498 
499        IF (x_is_present > 0) THEN
500           --msd_dem_common_utilities.log_message('Duplicates found in table ' || x_table_name);
501           --msd_dem_common_utilities.log_message('Deleting duplicates ... ');
502 
503           x_sql := 'DELETE FROM ' || x_table_name
504                    || ' WHERE rowid NOT IN (SELECT max(rowid) FROM ' || x_table_name
505                    || '                     GROUP BY LEVEL1_SR_PK, LEVEL2_SR_PK, SDATE ) ';
506           msd_dem_common_utilities.log_debug (x_sql);
507           EXECUTE IMMEDIATE x_sql;
508           x_rows_deleted := SQL%ROWCOUNT;
509           msd_dem_common_utilities.log_message ('Duplicate rows deleted - ' || x_rows_deleted);
510 
511        END IF;
512 
513        msd_dem_common_utilities.log_message('Adding Index - ' || x_index_name);
514        x_sql := 'CREATE UNIQUE INDEX ' || x_owner || '.' || x_index_name
515                 || ' ON ' || x_owner || '.' || x_table_name
516                 || '(LEVEL1_SR_PK, LEVEL2_SR_PK, SDATE) ';
517        msd_dem_common_utilities.log_debug (x_sql);
518        EXECUTE IMMEDIATE x_sql;
519        msd_dem_common_utilities.log_message('Created Index - ' || x_index_name);
520 
521        msd_dem_common_utilities.log_message('Analyzing Table - ' || x_table_name);
522        fnd_stats.gather_table_stats(x_owner, x_table_name, 10, 4);
523 
524 
525     END IF;
526 
527     log_message('***************** Exiting from the procedure - LAUNCH **********');
528 
529   END launch;
530 
531 END msd_srp_process_stream_data;
532