1 PACKAGE BODY ddr_webservices_pub AS
2 /* $Header: ddrpcwsb.pls 120.8 2008/04/03 09:55:49 vbhave noship $ */
3
4 -- Start of comments
5 -- API name : get_dyn_query
6 -- Type: Private
7 -- Pre-reqs: None.
8 -- Function: to get the dynamic query
9 -- Parameters:
10 -- IN :
11 -- p_api_version IN NUMBER Required
12 -- p_mfg_org_cd IN VARCHAR2Required
13 -- Manufaturer organization code
14 -- p_org_dim_lvl_cd IN VARCHAR2
15 -- Identifies the organization hierarchy level code
16 -- p_org_lvl_val IN VARCHAR2
17 -- Organization hierarchy level code value
18 -- p_exp_org_level IN VARCHAR2
19 -- expected aggregation level of organization hierarchy
20 -- p_loc_dim_lvl_cd IN VARCHAR2
21 -- Identifies the location hierarchy level code
22 -- p_loc_lvl_val IN VARCHAR2
23 -- Location hierarchy level code
24 -- p_exp_loc_level IN VARCHAR2
25 -- Expected aggregation level of location hierarchy
26 -- p_item_dim_lvl_cd IN VARCHAR2
27 -- p_item_lvl_val IN VARCHAR2
28 -- p_exp_item_level IN VARCHAR2
29 -- p_time_dim_lvl_cd IN VARCHAR2
30 -- p_time_lvl_val IN VARCHAR2
31 -- p_exp_time_level IN VARCHAR2
32 -- Version: Current version1.0
33 -- Initial version 1.0
34 -- End of comments
35
36 PROCEDURE get_dyn_query(p_api_version IN NUMBER,
37 p_call_type IN VARCHAR2,
38 p_mfg_org_cd IN VARCHAR2,
39 p_org_cd IN VARCHAR2,
40 p_org_dim_lvl_cd IN VARCHAR2,
41 p_org_lvl_val IN VARCHAR2,
42 p_exp_org_level IN VARCHAR2,
43 p_loc_dim_lvl_cd IN VARCHAR2,
44 p_loc_lvl_val IN VARCHAR2,
45 p_exp_loc_level IN VARCHAR2,
46 p_item_dim_lvl_cd IN VARCHAR2,
47 p_item_lvl_val IN VARCHAR2,
48 p_exp_item_level IN VARCHAR2,
49 p_time_dim_lvl_cd IN VARCHAR2,
50 p_time_lvl_val IN VARCHAR2,
51 p_exp_time_level IN VARCHAR2,
52 p_fact_code IN VARCHAR2,
53 x_return_status OUT NOCOPY VARCHAR2,
54 x_msg_count OUT NOCOPY NUMBER,
55 x_msg_data OUT NOCOPY VARCHAR2,
56 x_dyn_query OUT NOCOPY VARCHAR2);
57
58 -- Start of comments
59 -- API name : get_fact_table
60 -- Type: Private
61 -- Pre-reqs: None.
62 -- Function: to get the name of the fact table
63 -- Parameters:
64 -- IN :
65 -- p_fact_code IN VARCHAR2 Required
66 -- DDR fact code
67 -- OUT NOCOPY :
68 -- fact table name(VARCHAR2)
69 -- Version: Current version1.0
70 -- Initial version 1.0
71 -- End of comments
72 PROCEDURE get_fact_table(p_fact_code IN VARCHAR2,
73 x_return_status OUT NOCOPY VARCHAR2,
74 x_msg_count OUT NOCOPY NUMBER,
75 x_msg_data OUT NOCOPY VARCHAR2,
76 x_fact_name OUT NOCOPY VARCHAR2);
77
78 -- Start of comments
79 -- API name : get_aggr_fact_colms
80 -- Type: Private
81 -- Pre-reqs: None.
82 -- Function: to get the fact columns on which aggregate function to be performed.
83 -- Parameters:
84 -- IN :
85 -- p_fact_code IN VARCHAR2 Required
86 -- DDR fact code
87 -- OUT NOCOPY :
88 -- fact columns on which aggregate function to be performed(VARCHAR2)
89 -- Version: Current version1.0
90 -- Initial version 1.0
91 -- End of comments
92 PROCEDURE get_aggr_fact_colms(p_fact_code IN VARCHAR2,
93 x_return_status OUT NOCOPY VARCHAR2,
94 x_msg_count OUT NOCOPY NUMBER,
95 x_msg_data OUT NOCOPY VARCHAR2,
96 x_fact_cols OUT NOCOPY VARCHAR2);
97
98 -- Start of comments
99 -- API name : get_detail_fact_colms
100 -- Type: Private
101 -- Pre-reqs: None.
102 -- Function: to get the fact column names.
103 -- Parameters:
104 -- IN :
105 -- p_fact_code IN VARCHAR2Required
106 -- DDR fact code
107 -- OUT NOCOPY :
108 -- fact columns on which aggregate function to be performed(VARCHAR2)
109 -- Version: Current version1.0
110 -- Initial version 1.0
111 -- End of comments
112 PROCEDURE get_detail_fact_colms(p_fact_code IN VARCHAR2,
113 x_return_status OUT NOCOPY VARCHAR2,
114 x_msg_count OUT NOCOPY NUMBER,
115 x_msg_data OUT NOCOPY VARCHAR2,
116 x_fact_cols OUT NOCOPY VARCHAR2);
117
118 -- Start of comments
119 -- API name : get_aggr_group_colms
120 -- Type: Private
121 -- Pre-reqs: None.
122 -- Function: to get the name of the columns on which group by clause to be performed
123 -- Parameters:
124 -- IN :
125 -- p_exp_org_level IN VARCHAR2 Required
126 -- Expected organization dimension level code passed by downstream application
127 -- p_exp_loc_level IN VARCHAR2 Required
128 -- Expected location dimension level code passed by downstream application
129 -- p_exp_item_level IN VARCHAR2 Required
130 -- Expected item dimension level code passed by downstream application
131 -- p_exp_time_level IN VARCHAR2 Required
132 -- Expected time dimension level code passed by downstream application
133 -- OUT NOCOPY :
134 -- name of the columns on which group by clause to be performed (VARCHAR2)
135 -- Version: Current version1.0
136 -- Initial version 1.0
137 -- End of comments
138 PROCEDURE get_aggr_group_colms(p_exp_org_level IN VARCHAR2,
139 p_exp_loc_level IN VARCHAR2,
140 p_exp_item_level IN VARCHAR2,
141 p_exp_time_level IN VARCHAR2,
142 x_return_status OUT NOCOPY VARCHAR2,
143 x_msg_count OUT NOCOPY NUMBER,
144 x_msg_data OUT NOCOPY VARCHAR2,
145 x_group_col OUT NOCOPY VARCHAR2);
146
147 -- Start of comments
148 -- API name : write_fact_to_xml_file
149 -- Type: Private
150 -- Pre-reqs: None.
151 -- Function: to write the selected fact data to the xml file
152 -- Parameters:
153 -- IN :
154 -- p_query
155 -- dynamic query to fetch the data
156 -- p_fact_code
157 -- Fact code
158 -- OUT NOCOPY :
159 -- p_job_id
160 -- Job Id
161 -- Version: Current version1.0
162 -- Initial version 1.0
163 -- End of comments
164 PROCEDURE write_fact_to_xml_file(p_query IN VARCHAR2,
165 p_fact_code IN VARCHAR2,
166 p_job_id IN NUMBER,
167 x_return_status OUT NOCOPY VARCHAR2,
168 x_msg_count OUT NOCOPY NUMBER,
169 x_msg_data OUT NOCOPY VARCHAR2);
170
171 -- Start of comments
172 -- API name : validate_input_params
173 -- Type: Private
174 -- Pre-reqs: None.
175 -- Function: to validate the input parameters
176 -- Parameters:
177 -- IN :
178 -- p_api_version IN NUMBER Required
179 -- p_mfg_org_cd IN VARCHAR2 Required
180 -- Manufaturer organization code
181 -- p_org_dim_lvl_cd IN VARCHAR2
182 -- Identifies the organization hierarchy level code
183 -- p_org_lvl_val IN VARCHAR2
184 -- Organization hierarchy level code value
185 -- p_exp_org_level IN VARCHAR2
186 -- expected aggregation level of organization hierarchy
187 -- p_loc_dim_lvl_cd IN VARCHAR2
188 -- Identifies the location hierarchy level code
189 -- p_loc_lvl_val IN VARCHAR2
190 -- Location hierarchy level code
191 -- p_exp_loc_level IN VARCHAR2
192 -- Expected aggregation level of location hierarchy
193 -- p_item_dim_lvl_cd IN VARCHAR2
194 -- p_item_lvl_val IN VARCHAR2
195 -- p_exp_item_level IN VARCHAR2
196 -- p_time_dim_lvl_cd IN VARCHAR2
197 -- p_time_lvl_val IN VARCHAR2
198 -- p_exp_time_level IN VARCHAR2
199 -- p_fact_code IN VARCHAR2
200 -- p_attribute1 IN VARCHAR2
201 -- p_attribute2 IN VARCHAR2
202 -- p_attribute3 IN VARCHAR2
203 -- p_attribute4 IN VARCHAR2
204 -- p_attribute5 IN VARCHAR2values are ''A' for Aggregate and ''D'' for detail
205 -- OUT NOCOPY :
206 -- fact table name(VARCHAR2)
207 -- Version: Current version1.0
208 -- Initial version 1.0
209 -- End of comments
210
211 PROCEDURE validate_input_params(p_api_version IN NUMBER,
212 p_mfg_org_cd IN VARCHAR2,
213 p_org_cd IN VARCHAR2,
214 p_org_dim_lvl_cd IN VARCHAR2,
215 p_org_lvl_val IN VARCHAR2,
216 p_exp_org_level IN VARCHAR2,
217 p_loc_dim_lvl_cd IN VARCHAR2,
218 p_loc_lvl_val IN VARCHAR2,
219 p_exp_loc_level IN VARCHAR2,
220 p_item_dim_lvl_cd IN VARCHAR2,
221 p_item_lvl_val IN VARCHAR2,
222 p_exp_item_level IN VARCHAR2,
223 p_time_dim_lvl_cd IN VARCHAR2,
224 p_time_lvl_val IN VARCHAR2,
225 p_exp_time_level IN VARCHAR2,
226 p_fact_code IN VARCHAR2,
227 x_return_status OUT NOCOPY VARCHAR2,
228 x_msg_count OUT NOCOPY NUMBER,
229 x_msg_data OUT NOCOPY VARCHAR2);
230
231 -- Start of comments
232 -- API name : get_ddr_ws_file_seq_nextval
233 -- Type: Private
234 -- Pre-reqs: None.
235 -- Function: to get the file id from sequence
236 -- Parameters:
237 -- IN :
238 --
239 -- OUT NOCOPY :
240 -- file ID sequence number
241 -- Version: Current version1.0
242 -- Initial version 1.0
243 -- End of comments
244 FUNCTION get_ddr_ws_file_seq_nextval(x_return_status OUT NOCOPY VARCHAR2,
245 x_msg_count OUT NOCOPY NUMBER,
246 x_msg_data OUT NOCOPY VARCHAR2) RETURN VARCHAR2;
247
248
249 -- Start of comments
250 -- API name : get_itm_hrchy_clauses
251 -- Type: Private
252 -- Pre-reqs: None.
253 -- Function: to get the item hierarchy clauses
254 -- Parameters:
255 -- IN :
256 -- p_item_dim_lvl_cd
257 -- item dimensions hiertarchy level code
258 -- p_item_lvl_val
259 -- item dimension hierarchy level code value
260 -- OUT NOCOPY :
261 --
262 -- Version: Current version1.0
263 -- Initial version 1.0
264 -- End of comments
265 PROCEDURE get_itm_hrchy_clauses(p_item_dim_lvl_cd IN VARCHAR2,
266 p_item_lvl_val IN VARCHAR2,
267 p_exp_item_level IN VARCHAR2,
268 p_fact_code IN VARCHAR2,
269 x_return_status OUT NOCOPY VARCHAR2,
270 x_msg_count OUT NOCOPY VARCHAR2,
274 x_itm_where_clus OUT NOCOPY VARCHAR2);
271 x_msg_data OUT NOCOPY VARCHAR2,
272 x_itm_ref_tbls OUT NOCOPY VARCHAR2,
273 x_itm_ref_joins OUT NOCOPY VARCHAR2,
275
276 -- Start of comments
277 -- API name : get_item_ref_join
278 -- Type: Private
279 -- Pre-reqs: None.
280 -- Function: to get the reference joiins for the item hierarchy
281 -- Parameters:
282 -- IN :
283 -- p_sys_var
284 -- system variable name
285 -- OUT NOCOPY :
286 -- '
287 -- Version: Current version1.0
288 -- Initial version 1.0
289 -- End of comments
290 PROCEDURE get_item_ref_join(p_lvl_rnk IN NUMBER,
291 x_ref_join OUT NOCOPY VARCHAR2,
292 x_return_status OUT NOCOPY VARCHAR2,
293 x_msg_count OUT NOCOPY VARCHAR2,
294 x_msg_data OUT NOCOPY VARCHAR2);
295
296 -- Start of comments
297 -- API name : get_org_hrchy_clauses
298 -- Type: Private
299 -- Pre-reqs: None.
300 -- Function: to get the organization hierarchy clauses
301 -- Parameters:
302 -- IN :
303 -- p_sys_var
304 -- system variable name
305 -- OUT NOCOPY :
306 -- '
307 -- Version: Current version1.0
308 -- Initial version 1.0
309 -- End of comments
310 PROCEDURE get_org_hrchy_clauses(p_org_dim_lvl_cd IN VARCHAR2,
311 p_org_lvl_val IN VARCHAR2,
312 p_exp_org_level IN VARCHAR2,
313 p_fact_code IN VARCHAR2,
314 x_return_status OUT NOCOPY VARCHAR2,
315 x_msg_count OUT NOCOPY VARCHAR2,
316 x_msg_data OUT NOCOPY VARCHAR2,
317 x_org_ref_tbls OUT NOCOPY VARCHAR2,
318 x_org_ref_joins OUT NOCOPY VARCHAR2,
319 x_org_where_clus OUT NOCOPY VARCHAR2);
320
321 -- Start of comments
322 -- API name : get_org_ref_join
323 -- Type: Private
324 -- Pre-reqs: None.
325 -- Function: to get the reference joiins for the organization hierarchy
326 -- Parameters:
327 -- IN :
328 -- p_sys_var
329 -- system variable name
330 -- OUT NOCOPY :
331 -- '
332 -- Version: Current version1.0
333 -- Initial version 1.0
334 PROCEDURE get_org_ref_join(p_lvl_rnk IN NUMBER,
335 x_ref_join OUT NOCOPY VARCHAR2,
336 x_return_status OUT NOCOPY VARCHAR2,
337 x_msg_count OUT NOCOPY VARCHAR2,
338 x_msg_data OUT NOCOPY VARCHAR2);
339
340 -- Start of comments
341 -- API name : get_itm_hrchy_clauses
342 -- Type: Private
343 -- Pre-reqs: None.
344 -- Function: to get the time hierarchy clauses
345 -- Parameters:
346 -- IN :
347 -- p_sys_var
348 -- system variable name
349 -- OUT NOCOPY :
350 -- '
351 -- Version: Current version1.0
352 -- Initial version 1.0
353 -- End of comments
354 PROCEDURE get_time_hrchy_clauses(p_time_dim_lvl_cd IN VARCHAR2,
355 p_time_lvl_val IN VARCHAR2,
356 p_exp_time_level IN VARCHAR2,
357 p_fact_code IN VARCHAR2,
358 p_org_cd IN VARCHAR2,
359 x_return_status OUT NOCOPY VARCHAR2,
360 x_msg_count OUT NOCOPY VARCHAR2,
361 x_msg_data OUT NOCOPY VARCHAR2,
362 x_time_ref_tbls OUT NOCOPY VARCHAR2,
363 x_time_ref_joins OUT NOCOPY VARCHAR2,
364 x_time_where_clus OUT NOCOPY VARCHAR2);
365
366 -- Start of comments
367 -- API name : get_time_ref_join
368 -- Type: Private
369 -- Pre-reqs: None.
370 -- Function: to get the reference joiins for the time hierarchy
371 -- Parameters:
372 -- IN :
373 -- p_sys_var
374 -- system variable name
375 -- OUT NOCOPY :
376 -- '
377 -- Version: Current version1.0
378 -- Initial version 1.0
379 PROCEDURE get_time_ref_join(p_hrchy_name IN VARCHAR2,
380 p_lvl_rnk IN NUMBER,
381 x_ref_join OUT NOCOPY VARCHAR2,
382 x_return_status OUT NOCOPY VARCHAR2,
383 x_msg_count OUT NOCOPY VARCHAR2,
384 x_msg_data OUT NOCOPY VARCHAR2);
385
386 -- Start of comments
387 -- API name : get_itm_hrchy_clauses
388 -- Type: Private
389 -- Pre-reqs: None.
390 -- Function: to get the location hierarchy clauses
391 -- Parameters:
392 -- IN :
393 -- p_sys_var
394 -- system variable name
395 -- OUT NOCOPY :
396 -- '
397 -- Version: Current version1.0
398 -- Initial version 1.0
399 -- End of comments
400 PROCEDURE get_loc_hrchy_clauses(p_loc_dim_lvl_cd IN VARCHAR2,
401 p_loc_lvl_val IN VARCHAR2,
402 p_exp_loc_level IN VARCHAR2,
403 p_org_dim_lvl_cd IN VARCHAR2,
404 p_fact_code IN VARCHAR2,
405 x_return_status OUT NOCOPY VARCHAR2,
406 x_msg_count OUT NOCOPY VARCHAR2,
407 x_msg_data OUT NOCOPY VARCHAR2,
408 x_loc_ref_tbls OUT NOCOPY VARCHAR2,
409 x_loc_ref_joins OUT NOCOPY VARCHAR2,
410 x_loc_where_clus OUT NOCOPY VARCHAR2);
411
412 -- Start of comments
413 -- API name : get_loc_ref_join
414 -- Type: Private
415 -- Pre-reqs: None.
416 -- Function: to get the reference joiins for the location hierarchy
417 -- Parameters:
418 -- IN :
419 -- p_sys_var
420 -- system variable name
421 -- OUT NOCOPY :
422 -- '
423 -- Version: Current version1.0
424 -- Initial version 1.0
425 PROCEDURE get_loc_ref_join(p_lvl_rnk IN NUMBER,
426 x_ref_join OUT NOCOPY VARCHAR2,
427 x_return_status OUT NOCOPY VARCHAR2,
428 x_msg_count OUT NOCOPY VARCHAR2,
429 x_msg_data OUT NOCOPY VARCHAR2);
430
431 -- Start of comments
432 -- API name : get_hrchy_lvl
433 -- Type: Private
434 -- Pre-reqs: None.
435 -- Function: to get the hierarchy level for the given hierarchy code from metadata table
436 -- Parameters:
437 -- IN :
438 -- p_sys_var
439 -- system variable name
440 -- OUT NOCOPY :
441 -- '
442 -- Version: Current version1.0
443 -- Initial version 1.0
444 PROCEDURE get_hrchy_lvl(p_hrchy_lvl_name IN VARCHAR2,
445 p_hrchy_lvl_cd IN VARCHAR2,
446 x_hrchy_lvl OUT NOCOPY NUMBER,
447 x_return_status OUT NOCOPY VARCHAR2,
448 x_msg_count OUT NOCOPY VARCHAR2,
449 x_msg_data OUT NOCOPY VARCHAR2);
450 --Bug 6880404 change start
451 --Start of comments
452 -- API name : get_other_join_conditions
453 -- Type: Private
454 -- Pre-reqs: None.
455 -- Function: to get any other join conditions related
456 -- Parameters:
457 -- IN :
458 -- p_sys_var
459 -- system variable name
460 -- OUT NOCOPY :
461 -- '
462 -- Version: Current version1.0
463 -- Initial version 1.0
464 PROCEDURE get_other_join_conditions(p_fact_code IN VARCHAR2,
465 x_return_status OUT NOCOPY VARCHAR2,
466 x_msg_count OUT NOCOPY VARCHAR2,
467 x_msg_data OUT NOCOPY VARCHAR2,
468 x_oth_join_codn OUT NOCOPY VARCHAR2);
469 --Bug 6880404 change end
470
471 PROCEDURE ddr_fact_aggr_prc(p_api_version IN NUMBER,
472 p_job_id IN NUMBER,
473 p_mfg_org_cd IN VARCHAR2,
474 p_org_cd IN VARCHAR2,
475 p_org_dim_lvl_cd IN VARCHAR2,
476 p_org_lvl_val IN VARCHAR2,
477 p_exp_org_level IN VARCHAR2,
478 p_loc_dim_lvl_cd IN VARCHAR2,
479 p_loc_lvl_val IN VARCHAR2,
480 p_exp_loc_level IN VARCHAR2,
481 p_item_dim_lvl_cd IN VARCHAR2,
482 p_item_lvl_val IN VARCHAR2,
483 p_exp_item_level IN VARCHAR2,
484 p_time_dim_lvl_cd IN VARCHAR2,
485 p_time_lvl_val IN VARCHAR2,
486 p_exp_time_level IN VARCHAR2,
487 p_fact_code IN VARCHAR2,
488 p_attribute1 IN VARCHAR2,
489 p_attribute2 IN VARCHAR2,
490 p_attribute3 IN VARCHAR2,
491 p_attribute4 IN VARCHAR2,
492 p_attribute5 IN VARCHAR2)
493 AS
494 l_query VARCHAR2(32767):=null;
495 l_return_status VARCHAR2(30):=null;
496 l_msg_count NUMBER:=null;
497 l_msg_data VARCHAR2(250):=null;
498 l_job_id NUMBER:=null;
499 BEGIN
500 l_job_id:=p_job_id;
501 --update job status to Running
502 UPDATE DDR_WS_JOB set status= ddr_webservices_constants.g_ret_sts_running,start_date=sysdate where job_id=p_job_id ;
503 --build dynamic query
504 get_dyn_query(p_api_version,
505 'A',
506 p_mfg_org_cd,
507 p_org_cd,
508 p_org_dim_lvl_cd,
509 p_org_lvl_val,
510 p_exp_org_level,
511 p_loc_dim_lvl_cd,
512 p_loc_lvl_val,
513 p_exp_loc_level,
517 p_time_dim_lvl_cd,
514 p_item_dim_lvl_cd,
515 p_item_lvl_val,
516 p_exp_item_level,
518 p_time_lvl_val,
519 p_exp_time_level,
520 p_fact_code,
521 l_return_status,
522 l_msg_count,
523 l_msg_data,
524 l_query);
525 IF l_return_status<>ddr_webservices_constants.g_ret_sts_success THEN
526 UPDATE DDR_WS_JOB SET status=l_return_status,err_message=l_msg_data,end_date=sysdate WHERE job_id=p_job_id ;
527 RETURN;
528 END IF;
529 --write data to xml file based on dynamic query generated
530 write_fact_to_xml_file(l_query,p_fact_code,l_job_id,l_return_status,l_msg_count,l_msg_data);
531 --update job status to complete/error
532 UPDATE DDR_WS_JOB SET status=ddr_webservices_constants.g_ret_sts_success,err_message=l_msg_data,end_date=sysdate WHERE job_id=p_job_id ;
533 EXCEPTION
534 WHEN NO_DATA_FOUND THEN
535 l_return_status:=ddr_webservices_constants.g_ret_sts_error;
536 l_msg_count:=1;
537 l_msg_data:='No Data Found. Error code:'||sqlcode||' Error message:'||sqlerrm;
538 UPDATE DDR_WS_JOB SET status=l_return_status,err_message=l_msg_data,end_date=sysdate WHERE job_id=p_job_id ;
539 WHEN OTHERS THEN
540 l_return_status:=ddr_webservices_constants.g_ret_sts_unexp_error;
541 l_msg_count:=1;
542 l_msg_data:='Unexpected Error. Error code:'||sqlcode||' Error message:'||sqlerrm;
543 UPDATE DDR_WS_JOB SET status=l_return_status,err_message=l_msg_data,end_date=sysdate WHERE job_id=p_job_id ;
544 END ddr_fact_aggr_prc;
545
546 PROCEDURE ddr_fact_details_prc(p_api_version IN NUMBER,
547 p_job_id IN NUMBER,
548 p_mfg_org_cd IN VARCHAR2,
549 p_org_cd IN VARCHAR2,
550 p_org_dim_lvl_cd IN VARCHAR2,
551 p_org_lvl_val IN VARCHAR2,
552 p_loc_dim_lvl_cd IN VARCHAR2,
553 p_loc_lvl_val IN VARCHAR2,
554 p_item_dim_lvl_cd IN VARCHAR2,
555 p_item_lvl_val IN VARCHAR2,
556 p_time_dim_lvl_cd IN VARCHAR2,
557 p_time_lvl_val IN VARCHAR2,
558 p_fact_code IN VARCHAR2,
559 p_attribute1 IN VARCHAR2,
560 p_attribute2 IN VARCHAR2,
561 p_attribute3 IN VARCHAR2,
562 p_attribute4 IN VARCHAR2,
563 p_attribute5 IN VARCHAR2)
564 AS
565 l_query VARCHAR2(32767):=null;
566 l_return_status VARCHAR2(30):=null;
567 l_msg_count NUMBER:=null;
568 l_msg_data VARCHAR2(250):=null;
569 l_job_id NUMBER:=null;
570 BEGIN
571 l_job_id:=p_job_id;
572 --update job status to Running
573 UPDATE DDR_WS_JOB set status= ddr_webservices_constants.g_ret_sts_running,start_date=sysdate where job_id=p_job_id ;
574 --build dynamic query
575 get_dyn_query(p_api_version,
576 'D',
577 p_mfg_org_cd,
578 p_org_cd,
579 p_org_dim_lvl_cd,
580 p_org_lvl_val,
581 null,
582 p_loc_dim_lvl_cd,
583 p_loc_lvl_val,
584 null,
585 p_item_dim_lvl_cd,
586 p_item_lvl_val,
587 null,
588 p_time_dim_lvl_cd,
589 p_time_lvl_val,
590 null,
591 p_fact_code,
592 l_return_status,
593 l_msg_count,
594 l_msg_data,
595 l_query);
596 IF l_return_status<>ddr_webservices_constants.g_ret_sts_success THEN
597 UPDATE DDR_WS_JOB SET status=l_return_status,err_message=l_msg_data,end_date=sysdate WHERE job_id=p_job_id ;
598 RETURN;
599 END IF;
600 --write data to xml file based on dynamic query generated
601 write_fact_to_xml_file(l_query,p_fact_code,l_job_id,l_return_status,l_msg_count,l_msg_data);
602 --update job status to complete/error
603 UPDATE DDR_WS_JOB SET status=ddr_webservices_constants.g_ret_sts_success,err_message=l_msg_data,end_date=sysdate WHERE job_id=p_job_id ;
604 EXCEPTION
605 WHEN NO_DATA_FOUND THEN
606 l_return_status:=ddr_webservices_constants.g_ret_sts_error;
607 l_msg_count:=1;
608 l_msg_data:='No Data Found. Error code:'||sqlcode||' Error message:'||sqlerrm;
609 UPDATE DDR_WS_JOB SET status=l_return_status,err_message=l_msg_data,end_date=sysdate WHERE job_id=p_job_id ;
610 WHEN OTHERS THEN
611 l_return_status:=ddr_webservices_constants.g_ret_sts_unexp_error;
612 l_msg_count:=1;
613 l_msg_data:='Unexpected Error. Error code:'||sqlcode||' Error message:'||sqlerrm;
614 UPDATE DDR_WS_JOB SET status=l_return_status,err_message=l_msg_data,end_date=sysdate WHERE job_id=p_job_id ;
615 END ddr_fact_details_prc;
616
617
618 PROCEDURE get_dyn_query(p_api_version IN NUMBER,
619 p_call_type IN VARCHAR2,
620 p_mfg_org_cd IN VARCHAR2,
621 p_org_cd IN VARCHAR2,
622 p_org_dim_lvl_cd IN VARCHAR2,
623 p_org_lvl_val IN VARCHAR2,
624 p_exp_org_level IN VARCHAR2,
625 p_loc_dim_lvl_cd IN VARCHAR2,
626 p_loc_lvl_val IN VARCHAR2,
627 p_exp_loc_level IN VARCHAR2,
628 p_item_dim_lvl_cd IN VARCHAR2,
629 p_item_lvl_val IN VARCHAR2,
630 p_exp_item_level IN VARCHAR2,
631 p_time_dim_lvl_cd IN VARCHAR2,
632 p_time_lvl_val IN VARCHAR2,
633 p_exp_time_level IN VARCHAR2,
634 p_fact_code IN VARCHAR2,
635 x_return_status OUT NOCOPY VARCHAR2,
636 x_msg_count OUT NOCOPY NUMBER,
637 x_msg_data OUT NOCOPY VARCHAR2,
638 x_dyn_query OUT NOCOPY VARCHAR2)
639 IS
640 l_query VARCHAR2(32767):=null;
641 l_fact_table_name VARCHAR2(30) :=null;
642 l_fact_cols VARCHAR2(32767):=null;
643 l_org_where_clus VARCHAR2(100) :=null;
644 l_loc_where_clus VARCHAR2(100) :=null;
645 l_itm_where_clus VARCHAR2(100) :=null;
646 l_time_where_clus VARCHAR2(100) :=null;
647 l_group_col VARCHAR2(120) :=null;
648 l_query_len NUMBER :=null;
649 l_itm_ref_tbls VARCHAR2(32767):=null;
650 l_itm_ref_joins VARCHAR2(32767):=null;
651 l_org_ref_tbls VARCHAR2(32767):=null;
652 l_org_ref_joins VARCHAR2(32767):=null;
653 l_time_ref_tbls VARCHAR2(32767):=null;
654 l_time_ref_joins VARCHAR2(32767):=null;
655 l_loc_ref_tbls VARCHAR2(32767):=null;
656 l_loc_ref_joins VARCHAR2(32767):=null;
657 --Bug 6880404 change start
658 l_oth_join_codn VARCHAR2(32767):=null;
659 --Bug 6880404 change end
660 BEGIN
661 --validate the input parameters
662 validate_input_params(p_api_version,
663 p_mfg_org_cd,
664 p_org_cd,
665 p_org_dim_lvl_cd,
666 p_org_lvl_val,
667 null,
668 p_loc_dim_lvl_cd,
669 p_loc_lvl_val,
670 null,
671 p_item_dim_lvl_cd,
672 p_item_lvl_val,
673 null,
674 p_time_dim_lvl_cd,
675 p_time_lvl_val,
676 null,
677 p_fact_code,
678 x_return_status,
679 x_msg_count,
680 x_msg_data);
681 IF x_return_status<>ddr_webservices_constants.g_ret_sts_success THEN
682 RETURN;
683 END IF;
684 -- get fact table name
685 get_fact_table(p_fact_code,x_return_status,x_msg_count,x_msg_data,l_fact_table_name);
686 IF p_call_type='A' THEN
687 -- get aggregated select fact column names
688 get_aggr_fact_colms(p_fact_code,x_return_status,x_msg_count,x_msg_data,l_fact_cols);
689 ELSIF p_call_type='D' THEN
690 -- get detailed select fact column names
691 get_detail_fact_colms(p_fact_code,x_return_status,x_msg_count,x_msg_data,l_fact_cols);
692 END IF;
693 --get the reference tables ,reference table joins and where clause for the item hierarchy
694 IF p_item_dim_lvl_cd IS NOT NULL OR p_exp_item_level IS NOT NULL THEN
695 get_itm_hrchy_clauses(p_item_dim_lvl_cd,
696 p_item_lvl_val,
697 p_exp_item_level,
698 p_fact_code,
699 x_return_status,
700 x_msg_count,
701 x_msg_data,
702 l_itm_ref_tbls,
703 l_itm_ref_joins,
704 l_itm_where_clus);
705 IF x_return_status<>ddr_webservices_constants.g_ret_sts_success THEN
706 RETURN;
707 END IF;
708 END IF;
709 --get the reference tables ,reference table joins and where clause join for the organization hierarchy level
710 IF p_org_dim_lvl_cd IS NOT NULL OR p_exp_org_level IS NOT NULL THEN
711 get_org_hrchy_clauses(p_org_dim_lvl_cd,
712 p_org_lvl_val,
713 p_exp_org_level,
714 p_fact_code,
715 x_return_status,
716 x_msg_count,
717 x_msg_data,
718 l_org_ref_tbls,
719 l_org_ref_joins,
720 l_org_where_clus);
721 IF x_return_status<>ddr_webservices_constants.g_ret_sts_success THEN
722 RETURN;
723 END IF;
724 END IF;
725 --get the reference tables ,reference table joins and where clause join for the time hierarchy level
726 IF p_time_dim_lvl_cd IS NOT NULL OR p_exp_time_level IS NOT NULL THEN
727 get_time_hrchy_clauses(p_time_dim_lvl_cd,
728 p_time_lvl_val,
729 p_exp_time_level,
730 p_fact_code,
731 p_org_cd,
732 x_return_status,
733 x_msg_count,
734 x_msg_data,
735 l_time_ref_tbls,
736 l_time_ref_joins,
737 l_time_where_clus);
738 IF x_return_status<>ddr_webservices_constants.g_ret_sts_success THEN
739 RETURN;
740 END IF;
741 END IF;
742 --get the reference tables ,reference table joins and where clause join for the location hierarchy level
743 IF p_loc_dim_lvl_cd IS NOT NULL OR p_exp_loc_level IS NOT NULL THEN
744 get_loc_hrchy_clauses(p_loc_dim_lvl_cd,
745 p_loc_lvl_val,
746 p_exp_loc_level,
747 p_org_dim_lvl_cd,
748 p_fact_code,
749 x_return_status,
750 x_msg_count,
751 x_msg_data,
752 l_loc_ref_tbls,
753 l_loc_ref_joins,
754 l_loc_where_clus);
755 IF x_return_status<>ddr_webservices_constants.g_ret_sts_success THEN
756 RETURN;
757 END IF;
758 END IF;
759 --Bug 6880404 change start
760 --get other join conditions
761 get_other_join_conditions(p_fact_code,
762 x_return_status,
763 x_msg_count,
764 x_msg_data,
765 l_oth_join_codn);
766 --Bug 6880404 change end
767 -- get group by columns
768 IF p_call_type='A' THEN
769 get_aggr_group_colms(p_exp_org_level,
770 p_exp_loc_level,
771 p_exp_item_level,
772 p_exp_time_level,
773 x_return_status,
774 x_msg_count,
775 x_msg_data,
776 l_group_col);
777 IF x_return_status<>ddr_webservices_constants.g_ret_sts_success THEN
778 RETURN;
779 END IF;
780 END IF;
781
782 --dynamically building query
783 l_query := 'SELECT ' || l_fact_cols;
784 IF p_call_type='A' AND l_group_col IS NOT NULL THEN
785 l_query := l_query || ','|| l_group_col;
786 END IF;
787 --appending fact table to query string
788 l_query := l_query || ' FROM ' || l_fact_table_name || ' x';
789 --include the various reference tables in from clause
790 --Item Hierarchy reference tables
791 l_query := l_query || l_itm_ref_tbls;
792 --Organization Hierarchy reference tables
793 l_query := l_query || l_org_ref_tbls;
794 --Time Hierarchy reference tables
795 l_query := l_query || l_time_ref_tbls;
796 --location Hierarchy reference tables
797 l_query := l_query || l_loc_ref_tbls;
798 --appending organization code to query string
799 l_query := l_query || ' WHERE '|| ' x.MFG_ORG_CD ='''|| p_mfg_org_cd||'''';
800 l_query := l_query || ' AND '|| ' x.RTL_ORG_CD ='''|| p_org_cd||'''';
801 --Bug 6880404 change start
802 l_query := l_query || l_oth_join_codn;
803 --Bug 6880404 change end
804 -- ITEM Dimension Hierarchy joins
805 l_query := l_query || l_itm_ref_joins;
806 IF l_itm_where_clus IS NOT NULL THEN
807 l_query := l_query || ' AND ' || l_itm_where_clus || '';
808 END IF;
809 -- Organization Dimension Hierarchy joins
810 l_query := l_query || l_org_ref_joins;
811 IF l_org_where_clus IS NOT NULL THEN
812 l_query := l_query || ' AND '|| l_org_where_clus || '';
813 END IF;
814 -- Time Dimension Hierarchy joins
815 l_query := l_query || l_time_ref_joins;
816 IF l_time_where_clus IS NOT NULL THEN
817 l_query := l_query || ' AND '|| l_time_where_clus || '';
818 END IF;
819 -- Loaction Dimension Hierarchy joins
820 l_query := l_query ||l_loc_ref_joins;
821 IF l_loc_where_clus IS NOT NULL THEN
822 l_query := l_query || ' AND '|| l_loc_where_clus || '';
823 END IF;
824 IF p_call_type='A' THEN
825 --group by clause join
826 IF l_group_col IS NOT NULL THEN
827 l_query := l_query || ' GROUP BY '|| l_group_col;
828 END IF;
829 END IF;
830 SELECT LENGTH(l_query) into l_query_len from dual;
831 -- DBMS_OUTPUT.PUT_LINE('l_query_len='||l_query_len);
832 -- DBMS_OUTPUT.PUT_LINE('l_query='||l_query);
833 x_dyn_query:= l_query;
834 EXCEPTION
835 WHEN NO_DATA_FOUND THEN
836 x_return_status := ddr_webservices_constants.g_ret_sts_error;
837 x_msg_count := 1;
838 x_msg_data := 'No Data Found. Error Code' ||sqlcode||' Error message:'||sqlerrm;
839 WHEN OTHERS THEN
840 x_return_status:=ddr_webservices_constants.g_ret_sts_unexp_error;
841 x_msg_count:=1;
842 x_msg_data:='Unexpected Error. Error code:'||sqlcode||' Error message:'||sqlerrm;
843 END get_dyn_query;
844
845 PROCEDURE get_fact_table(p_fact_code IN VARCHAR2,
846 x_return_status OUT NOCOPY VARCHAR2,
847 x_msg_count OUT NOCOPY NUMBER,
848 x_msg_data OUT NOCOPY VARCHAR2,
849 x_fact_name OUT NOCOPY VARCHAR2)
850 IS
851 BEGIN
852 --case condition to determine name of the fact table
853 CASE p_fact_code
854 -- for MARKET ITEM SALES DAY
855 WHEN ddr_webservices_constants.g_misd_cd THEN
859 x_fact_name:= ddr_webservices_constants.g_pp_fact_tbl;
856 x_fact_name:= ddr_webservices_constants.g_misd_fact_tbl;
857 -- for PROMOTION PLAN
858 WHEN ddr_webservices_constants.g_pp_cd THEN
860 -- for RETAIL INVENTORY ITEM DAY
861 WHEN ddr_webservices_constants.g_riid_cd THEN
862 x_fact_name:= ddr_webservices_constants.g_riid_fact_tbl;
863 -- for RETAIL SALE RETURN ITEM DAY fact
864 WHEN ddr_webservices_constants.g_rsrid_cd THEN
865 x_fact_name:= ddr_webservices_constants.g_rsrid_fact_tbl;
866 -- for RETAILER ORDER ITEM DAY
867 WHEN ddr_webservices_constants.g_roid_cd THEN
868 x_fact_name:= ddr_webservices_constants.g_roid_fact_tbl;
869 -- for RETAILER SHIP ITEM DAY
870 WHEN ddr_webservices_constants.g_rsid_cd THEN
871 x_fact_name:= ddr_webservices_constants.g_rsid_fact_tbl;
872 -- for SALE FORECAST ITEM BY DAY
873 WHEN ddr_webservices_constants.g_sfid_cd THEN
874 x_fact_name:= ddr_webservices_constants.g_sfid_fact_tbl;
875 END CASE;
876 EXCEPTION
877 WHEN OTHERS THEN
878 x_return_status:=ddr_webservices_constants.g_ret_sts_unexp_error;
879 x_msg_count:=1;
880 x_msg_data:='Unexpected Error. Error code:'||sqlcode||' Error message:'||sqlerrm;
881 END get_fact_table;
882
883 PROCEDURE get_aggr_fact_colms(p_fact_code IN VARCHAR2,
884 x_return_status OUT NOCOPY VARCHAR2,
885 x_msg_count OUT NOCOPY NUMBER,
886 x_msg_data OUT NOCOPY VARCHAR2,
887 x_fact_cols OUT NOCOPY VARCHAR2)
888 IS
889 BEGIN
890 --case condition to identify aggregate column names from fact table
891 CASE p_fact_code
892 -- for MARKET ITEM SALES DAY
893 WHEN ddr_webservices_constants.g_misd_cd THEN
894 x_fact_cols:='sum(x.AVG_MMACV_SLS_RATE) AVG_MMACV_SLS_RATE,'
895 ||'sum(x.AVG_STORE_SELL_ITEM_QTY) AVG_STORE_SELL_ITEM_QTY,'
896 ||'sum(x.AVG_ACV_WGT_DSTRBTN_PCT) AVG_ACV_WGT_DSTRBTN_PCT,'
897 ||'sum(x.AVG_WGT_PRICE_RDCTN_PCT) AVG_WGT_PRICE_RDCTN_PCT,'
898 ||'sum(x.SLS_QTY) SLS_QTY,'
899 ||'sum(x.SLS_AMT) SLS_AMT,'
900 ||'sum(x.NRML_QTY) NRML_QTY,'
901 ||'sum(x.NRML_AMT) NRML_AMT,'
902 ||'sum(x.SLS_PRICE_CUT_QTY) SLS_PRICE_CUT_QTY,'
903 ||'sum(x.SLS_PRICE_CUT_AMT) SLS_PRICE_CUT_AMT,'
904 ||'sum(x.MAIN_AD_QTY) MAIN_AD_QTY,'
905 ||'sum(x.MAIN_AD_AMT) MAIN_AD_AMT';
906 --for PROMOTION PLAN
907 WHEN ddr_webservices_constants.g_pp_cd THEN
908 x_fact_cols:='sum(x.PRMTN_PRICE_AMT) PRMTN_PRICE_AMT';
909 -- for RETAIL INVENTORY ITEM DAY
910 WHEN ddr_webservices_constants.g_riid_cd THEN
911 x_fact_cols:= 'sum(x.ON_HAND_QTY) ON_HAND_QTY,'
912 ||'sum(x.RECVD_QTY) RECVD_QTY,'
913 ||'sum(x.IN_TRANSIT_QTY) IN_TRANSIT_QTY,'
914 ||'sum(x.BCK_ORDR_QTY) BCK_ORDR_QTY,'
915 ||'sum(x.QLTY_HOLD_QTY) QLTY_HOLD_QTY,'
916 ||'sum(x.ON_HAND_NET_COST_AMT) ON_HAND_NET_COST_AMT,'
917 ||'sum(x.RECVD_NET_COST_AMT) RECVD_NET_COST_AMT,'
918 ||'sum(x.IN_TRANSIT_NET_COST_AMT) IN_TRANSIT_NET_COST_AMT,'
919 ||'sum(x.BCKORDR_NET_COST_AMT) BCKORDR_NET_COST_AMT,'
920 ||'sum(x.QLTY_HOLD_NET_COST_AMT) QLTY_HOLD_NET_COST_AMT,'
921 ||'sum(x.ON_HAND_RTL_AMT) ON_HAND_RTL_AMT,'
922 ||'sum(x.RECVD_RTL_AMT) RECVD_RTL_AMT,'
923 ||'sum(x.IN_TRANSIT_RTL_AMT) IN_TRANSIT_RTL_AMT,'
924 ||'sum(x.BCKORDR_RTL_AMT) BCKORDR_RTL_AMT,'
925 ||'sum(x.QLTY_HOLD_RTL_AMT) QLTY_HOLD_RTL_AMT';
926 -- for RETAIL SALE RETURN ITEM DAY fact
927 WHEN ddr_webservices_constants.g_rsrid_cd THEN
928 x_fact_cols:='sum(x.SLS_QTY) SLS_QTY,'
929 ||'sum(x.SLS_AMT) SLS_AMT,'
930 ||'sum(x.SLS_COST_AMT) SLS_COST_AMT,'
931 ||'sum(x.RTRN_QTY) RTRN_QTY,'
932 ||'sum(x.RTRN_AMT) RTRN_AMT,'
933 ||'sum(x.RTRN_COST_AMT) RTRN_COST_AMT';
934 -- for RETAILER ORDER ITEM DAY
935 WHEN ddr_webservices_constants.g_roid_cd THEN
936 x_fact_cols:='sum(x.ORDR_QTY) ORDR_QTY,'
937 ||'sum(x.ORDR_AMT) ORDR_AMT';
938 -- for RETAILER SHIP ITEM DAY
939 WHEN ddr_webservices_constants.g_rsid_cd THEN
940 x_fact_cols:= 'sum(x.SHIP_QTY) SHIP_QTY,'
941 ||'sum(x.SHIP_AMT) SHIP_AMT';
942 -- for SALE FORECAST ITEM BY DAY
943 WHEN ddr_webservices_constants.g_sfid_cd THEN
944 x_fact_cols:= 'sum(x.FRCST_SLS_QTY) FRCST_SLS_QTY,'
945 ||'sum(x.FRCST_SLS_AMT) FRCST_SLS_AMT';
946 END CASE;
947 EXCEPTION
948 WHEN OTHERS THEN
949 x_return_status:=ddr_webservices_constants.g_ret_sts_unexp_error;
950 x_msg_count:=1;
951 x_msg_data:='Unexpected Error. Error code:'||sqlcode||' Error message:'||sqlerrm;
952 END get_aggr_fact_colms;
953
954 PROCEDURE get_detail_fact_colms(p_fact_code IN VARCHAR2,
955 x_return_status OUT NOCOPY VARCHAR2,
956 x_msg_count OUT NOCOPY NUMBER,
957 x_msg_data OUT NOCOPY VARCHAR2,
958 x_fact_cols OUT NOCOPY VARCHAR2)
959 IS
960 BEGIN
961 --case condition to identify aggregate column names from fact table
962 CASE p_fact_code
963 -- for MARKET ITEM SALES DAY
964 WHEN ddr_webservices_constants.g_misd_cd THEN
965 x_fact_cols:='x.MFG_ORG_CD MFG_ORG_CD,'
966 ||'x.RTL_ORG_CD RTL_ORG_CD,'
967 ||'x.GLBL_ITEM_ID GLBL_ITEM_ID,'
968 ||'x.MKT_AREA_ID MKT_AREA_ID,'
969 ||'x.MKT_AREA_CD MKT_AREA_CD,'
970 ||'x.DAY_CD DAY_CD,'
971 ||'x.BSNS_UNIT_CD BSNS_UNIT_CD,'
972 ||'x.GLBL_ITEM_ID_TYP GLBL_ITEM_ID_TYP,'
973 ||'x.MKT_ITEM_ID MKT_ITEM_ID,'
974 ||'x.UOM_CD UOM_CD,'
975 ||'x.UOM_CD_PRMRY UOM_CD_PRMRY,'
976 ||'x.UOM_CD_ALT UOM_CD_ALT,'
977 ||'x.CRNCY_CD CRNCY_CD,'
978 ||'x.REC_CURR_DT REC_CURR_DT,'
979 ||'x.AVG_MMACV_SLS_RATE AVG_MMACV_SLS_RATE,'
980 ||'x.AVG_STORE_SELL_ITEM_QTY AVG_STORE_SELL_ITEM_QTY,'
984 ||'x.AVG_WGT_PRICE_RDCTN_PCT AVG_WGT_PRICE_RDCTN_PCT,'
981 ||'x.AVG_STORE_SELL_ITEM_QTY_PRMRY AVG_STORE_SELL_ITEM_QTY_PRMRY,'
982 ||'x.AVG_STORE_SELL_ITEM_QTY_ALT AVG_STORE_SELL_ITEM_QTY_ALT,'
983 ||'x.AVG_ACV_WGT_DSTRBTN_PCT AVG_ACV_WGT_DSTRBTN_PCT,'
985 ||'x.SLS_QTY SLS_QTY,'
986 ||'x.SLS_QTY_PRMRY SLS_QTY_PRMRY,'
987 ||'x.SLS_QTY_ALT SLS_QTY_ALT,'
988 ||'x.SLS_AMT SLS_AMT,'
989 ||'x.SLS_AMT_LCL SLS_AMT_LCL,'
990 ||'x.SLS_AMT_RPT SLS_AMT_RPT,'
991 ||'x.NRML_QTY NRML_QTY,'
992 ||'x.NRML_QTY_PRMRY NRML_QTY_PRMRY,'
993 ||'x.NRML_QTY_ALT NRML_QTY_ALT,'
994 ||'x.NRML_AMT NRML_AMT,'
995 ||'x.NRML_AMT_LCL NRML_AMT_LCL,'
996 ||'x.NRML_AMT_RPT NRML_AMT_RPT,'
997 ||'x.SLS_PRICE_CUT_QTY SLS_PRICE_CUT_QTY,'
998 ||'x.SLS_PRICE_CUT_QTY_PRMRY SLS_PRICE_CUT_QTY_PRMRY,'
999 ||'x.SLS_PRICE_CUT_QTY_ALT SLS_PRICE_CUT_QTY_ALT,'
1000 ||'x.SLS_PRICE_CUT_AMT SLS_PRICE_CUT_AMT,'
1001 ||'x.SLS_PRICE_CUT_AMT_LCL SLS_PRICE_CUT_AMT_LCL,'
1002 ||'x.SLS_PRICE_CUT_AMT_RPT SLS_PRICE_CUT_AMT_RPT,'
1003 ||'x.MAIN_AD_QTY MAIN_AD_QTY,'
1004 ||'x.MAIN_AD_QTY_PRMRY MAIN_AD_QTY_PRMRY,'
1005 ||'x.MAIN_AD_QTY_ALT MAIN_AD_QTY_ALT,'
1006 ||'x.MAIN_AD_AMT MAIN_AD_AMT,'
1007 ||'x.MAIN_AD_AMT_LCL MAIN_AD_AMT_LCL,'
1008 ||'x.MAIN_AD_AMT_RPT MAIN_AD_AMT_RPT';
1009 --for PROMOTION PLAN
1010 WHEN ddr_webservices_constants.g_pp_cd THEN
1011 x_fact_cols:='x.MFG_ORG_CD MFG_ORG_CD,'
1012 ||'x.RTL_ORG_CD RTL_ORG_CD,'
1013 ||'x.ORG_BSNS_UNIT_ID ORG_BSNS_UNIT_ID,'
1014 ||'x.RTL_BSNS_UNIT_CD RTL_BSNS_UNIT_CD,'
1015 ||'x.PRMTN_TYP PRMTN_TYP,'
1016 ||'x.PRMTN_FROM_DT PRMTN_FROM_DT,'
1017 ||'x.PRMTN_TO_DT PRMTN_TO_DT,'
1018 ||'x.GLBL_ITEM_ID GLBL_ITEM_ID,'
1019 ||'x.RTL_SKU_ITEM_ID RTL_SKU_ITEM_ID,'
1020 ||'x.RTL_SKU_ITEM_NBR RTL_SKU_ITEM_NBR,'
1021 ||'x.GLBL_ITEM_ID_TYP GLBL_ITEM_ID_TYP,'
1022 ||'x.CRNCY_CD CRNCY_CD,'
1023 ||'x.PRMTN_PRICE_AMT PRMTN_PRICE_AMT,'
1024 ||'x.PRMTN_PRICE_AMT_LCL PRMTN_PRICE_AMT_LCL,'
1025 ||'x.PRMTN_PRICE_AMT_RPT PRMTN_PRICE_AMT_RPT';
1026 -- for RETAIL INVENTORY ITEM DAY
1027 WHEN ddr_webservices_constants.g_riid_cd THEN
1028 x_fact_cols:= 'x.MFG_ORG_CD MFG_ORG_CD,'
1029 ||'x.RTL_ORG_CD RTL_ORG_CD,'
1030 ||'x.ORG_BSNS_UNIT_ID ORG_BSNS_UNIT_ID,'
1031 ||'x.RTL_BSNS_UNIT_CD RTL_BSNS_UNIT_CD,'
1032 ||'x.GLBL_ITEM_ID GLBL_ITEM_ID,'
1033 ||'x.RTL_SKU_ITEM_ID RTL_SKU_ITEM_ID,'
1034 ||'x.RTL_SKU_ITEM_NBR RTL_SKU_ITEM_NBR,'
1035 ||'x.DAY_CD DAY_CD,'
1036 ||'x.GLBL_ITEM_ID_TYP GLBL_ITEM_ID_TYP,'
1037 ||'x.INV_LOC_TYP_CD INV_LOC_TYP_CD,'
1038 ||'x.INV_LOC_ID INV_LOC_ID,'
1039 ||'x.INV_LOC_CD INV_LOC_CD,'
1040 ||'x.UOM_CD UOM_CD,'
1041 ||'x.UOM_CD_PRMRY UOM_CD_PRMRY,'
1042 ||'x.UOM_CD_ALT UOM_CD_ALT,'
1043 ||'x.CRNCY_CD CRNCY_CD,'
1044 ||'x.ON_HAND_QTY ON_HAND_QTY,'
1045 ||'x.ON_HAND_QTY_PRMRY ON_HAND_QTY_PRMRY,'
1046 ||'x.ON_HAND_QTY_ALT ON_HAND_QTY_ALT,'
1047 ||'x.RECVD_QTY RECVD_QTY,'
1048 ||'x.RECVD_QTY_PRMRY RECVD_QTY_PRMRY,'
1049 ||'x.RECVD_QTY_ALT RECVD_QTY_ALT,'
1050 ||'x.IN_TRANSIT_QTY IN_TRANSIT_QTY,'
1051 ||'x.IN_TRANSIT_QTY_PRMRY IN_TRANSIT_QTY_PRMRY,'
1052 ||'x.IN_TRANSIT_QTY_ALT IN_TRANSIT_QTY_ALT,'
1053 ||'x.BCK_ORDR_QTY BCK_ORDR_QTY,'
1054 ||'x.BCK_ORDR_QTY_PRMRY BCK_ORDR_QTY_PRMRY,'
1055 ||'x.BCK_ORDR_QTY_ALT BCK_ORDR_QTY_ALT,'
1056 ||'x.QLTY_HOLD_QTY QLTY_HOLD_QTY,'
1057 ||'x.QLTY_HOLD_QTY_PRMRY QLTY_HOLD_QTY_PRMRY,'
1058 ||'x.QLTY_HOLD_QTY_ALT QLTY_HOLD_QTY_ALT,'
1059 ||'x.ON_HAND_NET_COST_AMT ON_HAND_NET_COST_AMT,'
1060 ||'x.ON_HAND_NET_COST_AMT_LCL ON_HAND_NET_COST_AMT_LCL,'
1061 ||'x.ON_HAND_NET_COST_AMT_RPT ON_HAND_NET_COST_AMT_RPT,'
1062 ||'x.RECVD_NET_COST_AMT RECVD_NET_COST_AMT,'
1063 ||'x.RECVD_NET_COST_AMT_LCL RECVD_NET_COST_AMT_LCL,'
1064 ||'x.RECVD_NET_COST_AMT_RPT RECVD_NET_COST_AMT_RPT,'
1065 ||'x.IN_TRANSIT_NET_COST_AMT IN_TRANSIT_NET_COST_AMT,'
1066 ||'x.IN_TRANSIT_NET_COST_AMT_LCL IN_TRANSIT_NET_COST_AMT_LCL,'
1067 ||'x.IN_TRANSIT_NET_COST_AMT_RPT IN_TRANSIT_NET_COST_AMT_RPT,'
1068 ||'x.BCKORDR_NET_COST_AMT BCKORDR_NET_COST_AMT,'
1069 ||'x.BCKORDR_NET_COST_AMT_LCL BCKORDR_NET_COST_AMT_LCL,'
1070 ||'x.BCKORDR_NET_COST_AMT_RPT BCKORDR_NET_COST_AMT_RPT,'
1071 ||'x.QLTY_HOLD_NET_COST_AMT QLTY_HOLD_NET_COST_AMT,'
1072 ||'x.QLTY_HOLD_NET_COST_AMT_LCL QLTY_HOLD_NET_COST_AMT_LCL,'
1073 ||'x.QLTY_HOLD_NET_COST_AMT_RPT QLTY_HOLD_NET_COST_AMT_RPT,'
1074 ||'x.ON_HAND_RTL_AMT ON_HAND_RTL_AMT,'
1075 ||'x.ON_HAND_RTL_AMT_LCL ON_HAND_RTL_AMT_LCL,'
1076 ||'x.ON_HAND_RTL_AMT_RPT ON_HAND_RTL_AMT_RPT,'
1077 ||'x.RECVD_RTL_AMT RECVD_RTL_AMT,'
1078 ||'x.RECVD_RTL_AMT_LCL RECVD_RTL_AMT_LCL,'
1079 ||'x.RECVD_RTL_AMT_RPT RECVD_RTL_AMT_RPT,'
1080 ||'x.IN_TRANSIT_RTL_AMT IN_TRANSIT_RTL_AMT,'
1081 ||'x.IN_TRANSIT_RTL_AMT_LCL IN_TRANSIT_RTL_AMT_LCL,'
1082 ||'x.IN_TRANSIT_RTL_AMT_RPT IN_TRANSIT_RTL_AMT_RPT,'
1083 ||'x.BCKORDR_RTL_AMT BCKORDR_RTL_AMT,'
1084 ||'x.BCKORDR_RTL_AMT_LCL BCKORDR_RTL_AMT_LCL,'
1085 ||'x.BCKORDR_RTL_AMT_RPT BCKORDR_RTL_AMT_RPT,'
1086 ||'x.QLTY_HOLD_RTL_AMT QLTY_HOLD_RTL_AMT,'
1087 ||'x.QLTY_HOLD_RTL_AMT_LCL QLTY_HOLD_RTL_AMT_LCL,'
1088 ||'x.QLTY_HOLD_RTL_AMT_RPT QLTY_HOLD_RTL_AMT_RPT';
1089 -- for RETAIL SALE RETURN ITEM DAY fact
1090 WHEN ddr_webservices_constants.g_rsrid_cd THEN
1091 x_fact_cols:='x.MFG_ORG_CD MFG_ORG_CD,'
1092 ||'x.RTL_ORG_CD RTL_ORG_CD,'
1093 ||'x.ORG_BSNS_UNIT_ID ORG_BSNS_UNIT_ID,'
1094 ||'x.BSNS_UNIT_CD BSNS_UNIT_CD,'
1095 ||'x.DAY_CD DAY_CD,'
1096 ||'x.GLBL_ITEM_ID GLBL_ITEM_ID,'
1097 ||'x.RTL_SKU_ITEM_ID RTL_SKU_ITEM_ID,'
1098 ||'x.RTL_SKU_ITEM_NBR RTL_SKU_ITEM_NBR,'
1099 ||'x.GLBL_ITEM_ID_TYP GLBL_ITEM_ID_TYP,'
1100 ||'x.UOM_CD UOM_CD,'
1101 ||'x.UOM_CD_PRMRY UOM_CD_PRMRY,'
1102 ||'x.UOM_CD_ALT UOM_CD_ALT,'
1103 ||'x.CRNCY_CD CRNCY_CD,'
1104 ||'x.SLS_QTY SLS_QTY,'
1105 ||'x.SLS_QTY_PRMRY SLS_QTY_PRMRY,'
1109 ||'x.SLS_AMT_RPT SLS_AMT_RPT,'
1106 ||'x.SLS_QTY_ALT SLS_QTY_ALT,'
1107 ||'x.SLS_AMT SLS_AMT,'
1108 ||'x.SLS_AMT_LCL SLS_AMT_LCL,'
1110 ||'x.SLS_COST_AMT SLS_COST_AMT,'
1111 ||'x.SLS_COST_AMT_LCL SLS_COST_AMT_LCL,'
1112 ||'x.SLS_COST_AMT_RPT SLS_COST_AMT_RPT,'
1113 ||'x.RTRN_QTY RTRN_QTY,'
1114 ||'x.RTRN_QTY_PRMRY RTRN_QTY_PRMRY,'
1115 ||'x.RTRN_QTY_ALT RTRN_QTY_ALT,'
1116 ||'x.RTRN_AMT RTRN_AMT,'
1117 ||'x.RTRN_AMT_LCL RTRN_AMT_LCL,'
1118 ||'x.RTRN_AMT_RPT RTRN_AMT_RPT,'
1119 ||'x.RTRN_COST_AMT RTRN_COST_AMT,'
1120 ||'x.RTRN_COST_AMT_LCL RTRN_COST_AMT_LCL,'
1121 ||'x.RTRN_COST_AMT_RPT RTRN_COST_AMT_RPT';
1122 -- for RETAILER ORDER ITEM DAY
1123 WHEN ddr_webservices_constants.g_roid_cd THEN
1124 x_fact_cols:='x.MFG_ORG_CD MFG_ORG_CD,'
1125 ||'x.RTL_ORG_CD RTL_ORG_CD,'
1126 ||'x.ORG_BSNS_UNIT_ID ORG_BSNS_UNIT_ID,'
1127 ||'x.RTL_BSNS_UNIT_CD RTL_BSNS_UNIT_CD,'
1128 ||'x.DAY_CD DAY_CD,'
1129 ||'x.GLBL_ITEM_ID GLBL_ITEM_ID,'
1130 ||'x.RTL_SKU_ITEM_ID RTL_SKU_ITEM_ID,'
1131 ||'x.RTL_SKU_ITEM_NBR RTL_SKU_ITEM_NBR,'
1132 ||'x.GLBL_ITEM_ID_TYP GLBL_ITEM_ID_TYP,'
1133 ||'x.UOM_CD UOM_CD,'
1134 ||'x.UOM_CD_PRMRY UOM_CD_PRMRY,'
1135 ||'x.UOM_CD_ALT UOM_CD_ALT,'
1136 ||'x.CRNCY_CD CRNCY_CD,'
1137 ||'x.ORDR_QTY ORDR_QTY,'
1138 ||'x.ORDR_QTY_PRMRY ORDR_QTY_PRMRY,'
1139 ||'x.ORDR_QTY_ALT ORDR_QTY_ALT,'
1140 ||'x.ORDR_AMT ORDR_AMT,'
1141 ||'x.ORDR_AMT_LCL ORDR_AMT_LCL,'
1142 ||'x.ORDR_AMT_RPT ORDR_AMT_RPT';
1143 -- for RETAILER SHIP ITEM DAY
1144 WHEN ddr_webservices_constants.g_rsid_cd THEN
1145 x_fact_cols:= 'x.MFG_ORG_CD MFG_ORG_CD,'
1146 ||'x.RTL_ORG_CD RTL_ORG_CD,'
1147 ||'x.ORG_BSNS_UNIT_ID ORG_BSNS_UNIT_ID,'
1148 ||'x.RTL_BSNS_UNIT_CD RTL_BSNS_UNIT_CD,'
1149 ||'x.DAY_CD DAY_CD,'
1150 ||'x.GLBL_ITEM_ID GLBL_ITEM_ID,'
1151 ||'x.RTL_SKU_ITEM_ID RTL_SKU_ITEM_ID,'
1152 ||'x.RTL_SKU_ITEM_NBR RTL_SKU_ITEM_NBR,'
1153 ||'x.GLBL_ITEM_ID_TYP GLBL_ITEM_ID_TYP,'
1154 ||'x.UOM_CD UOM_CD,'
1155 ||'x.UOM_CD_PRMRY UOM_CD_PRMRY,'
1156 ||'x.UOM_CD_ALT UOM_CD_ALT,'
1157 ||'x.CRNCY_CD CRNCY_CD,'
1158 ||'x.SHIP_QTY SHIP_QTY,'
1159 ||'x.SHIP_QTY_PRMRY SHIP_QTY_PRMRY,'
1160 ||'x.SHIP_QTY_ALT SHIP_QTY_ALT,'
1161 ||'x.SHIP_AMT SHIP_AMT,'
1162 ||'x.SHIP_AMT_LCL SHIP_AMT_LCL,'
1163 ||'x.SHIP_AMT_RPT SHIP_AMT_RPT';
1164 -- for SALE FORECAST ITEM BY DAY
1165 WHEN ddr_webservices_constants.g_sfid_cd THEN
1166 x_fact_cols:= 'x.MFG_ORG_CD MFG_ORG_CD,'
1167 ||'x.RTL_ORG_CD RTL_ORG_CD,'
1168 ||'x.FRCST_NBR FRCST_NBR,'
1169 ||'x.FRCST_TYP FRCST_TYP,'
1170 ||'x.FRCST_VRSN FRCST_VRSN,'
1171 ||'x.ORG_BSNS_UNIT_ID ORG_BSNS_UNIT_ID,'
1172 ||'x.BSNS_UNIT_CD BSNS_UNIT_CD,'
1173 ||'x.DAY_CD DAY_CD,'
1174 ||'x.GLBL_ITEM_ID GLBL_ITEM_ID,'
1175 ||'x.RTL_SKU_ITEM_ID RTL_SKU_ITEM_ID,'
1176 ||'x.RTL_SKU_ITEM_NBR RTL_SKU_ITEM_NBR,'
1177 ||'x.GLBL_ITEM_ID_TYP GLBL_ITEM_ID_TYP,'
1178 ||'x.FRCST_SLS_UOM_CD FRCST_SLS_UOM_CD,'
1179 ||'x.FRCST_SLS_UOM_CD_PRMRY FRCST_SLS_UOM_CD_PRMRY,'
1180 ||'x.FRCST_SLS_UOM_CD_ALT FRCST_SLS_UOM_CD_ALT,'
1181 ||'x.CRNCY_CD CRNCY_CD,'
1182 ||'x.FRCST_SLS_QTY FRCST_SLS_QTY,'
1183 ||'x.FRCST_SLS_QTY_PRMRY FRCST_SLS_QTY_PRMRY,'
1184 ||'x.FRCST_SLS_QTY_ALT FRCST_SLS_QTY_ALT,'
1185 ||'x.FRCST_SLS_AMT FRCST_SLS_AMT,'
1186 ||'x.FRCST_SLS_AMT_LCL FRCST_SLS_AMT_LCL,'
1187 ||'x.FRCST_SLS_AMT_RPT FRCST_SLS_AMT_RPT';
1188 END CASE;
1189 x_return_status:=ddr_webservices_constants.g_ret_sts_success;
1190 EXCEPTION
1191 WHEN OTHERS THEN
1192 x_return_status:=ddr_webservices_constants.g_ret_sts_unexp_error;
1193 x_msg_count:=1;
1194 x_msg_data:='Unexpected Error. Error code:'||sqlcode||' Error message:'||sqlerrm;
1195 END get_detail_fact_colms;
1196
1197 PROCEDURE get_aggr_group_colms(p_exp_org_level IN VARCHAR2,
1198 p_exp_loc_level IN VARCHAR2,
1199 p_exp_item_level IN VARCHAR2,
1200 p_exp_time_level IN VARCHAR2,
1201 x_return_status OUT NOCOPY VARCHAR2,
1202 x_msg_count OUT NOCOPY NUMBER,
1203 x_msg_data OUT NOCOPY VARCHAR2,
1204 x_group_col OUT NOCOPY VARCHAR2)
1205 IS
1206 l_group_col VARCHAR2(500):=null;
1207 l_ref_join VARCHAR2(100):=null;
1208 l_lvl_rnk NUMBER:=null;
1209 l_hrchy_lvl_name VARCHAR2(50):=null;
1210 BEGIN
1211 --get aggregate columns for the Organization hierarchy based on given hierarchy level code
1212 IF p_exp_org_level IS NOT NULL THEN
1213 get_hrchy_lvl('ORGANIZATION',p_exp_org_level,l_lvl_rnk,x_return_status,x_msg_count,x_msg_data);
1214 IF x_return_status<>ddr_webservices_constants.g_ret_sts_success THEN
1215 RETURN;
1216 END IF;
1217 get_org_ref_join(l_lvl_rnk,l_group_col,x_return_status, x_msg_count,x_msg_data);
1218 END IF;
1219 --get aggregate columns for the location hierarchy based on given hierarchy level code
1220 IF p_exp_loc_level IS NOT NULL THEN
1221 get_hrchy_lvl('LOCATION',p_exp_loc_level,l_lvl_rnk,x_return_status,x_msg_count,x_msg_data);
1222 IF x_return_status<>ddr_webservices_constants.g_ret_sts_success THEN
1223 RETURN;
1224 END IF;
1225 get_loc_ref_join(l_lvl_rnk,l_ref_join,x_return_status, x_msg_count,x_msg_data);
1226 IF l_group_col IS NOT NUll THEN
1227 l_group_col :=l_group_col ||','||l_ref_join;
1228 ELSIF l_group_col IS NUll THEN
1229 l_group_col :=l_ref_join;
1230 END IF;
1231 END IF;
1232 --get aggregate columns for the Item hierarchy based on given hierarchy level code
1233 IF p_exp_item_level IS NOT NULL THEN
1237 END IF;
1234 get_hrchy_lvl('ITEM',p_exp_item_level,l_lvl_rnk,x_return_status,x_msg_count,x_msg_data);
1235 IF x_return_status<>ddr_webservices_constants.g_ret_sts_success THEN
1236 RETURN;
1238 get_item_ref_join(l_lvl_rnk,l_ref_join,x_return_status, x_msg_count,x_msg_data);
1239 IF l_group_col IS NOT NUll THEN
1240 l_group_col :=l_group_col ||','||l_ref_join;
1241 ELSIF l_group_col IS NUll THEN
1242 l_group_col :=l_ref_join;
1243 END IF;
1244 END IF;
1245 --get aggregate columns for the time hierarchy based on given hierarchy level code
1246 IF p_exp_time_level IS NOT NULL THEN
1247 SELECT hrchy_lvl_name INTO l_hrchy_lvl_name FROM DDR_WS_METADATA WHERE hrchy_lvl_cd=p_exp_time_level;
1248 get_hrchy_lvl(l_hrchy_lvl_name,p_exp_time_level,l_lvl_rnk,x_return_status,x_msg_count,x_msg_data);
1249 IF x_return_status<>ddr_webservices_constants.g_ret_sts_success THEN
1250 RETURN;
1251 END IF;
1252 get_time_ref_join(l_hrchy_lvl_name,l_lvl_rnk,l_ref_join,x_return_status, x_msg_count,x_msg_data);
1253 IF l_group_col IS NOT NUll THEN
1254 l_group_col :=l_group_col ||','||l_ref_join;
1255 ELSIF l_group_col IS NUll THEN
1256 l_group_col :=l_ref_join;
1257 END IF;
1258 END IF;
1259 x_group_col:= l_group_col;
1260 x_return_status:=ddr_webservices_constants.g_ret_sts_success;
1261 EXCEPTION
1262 WHEN NO_DATA_FOUND THEN
1263 x_return_status:=ddr_webservices_constants.g_ret_sts_unexp_error;
1264 x_msg_count:=1;
1265 x_msg_data:='No Data Found. Error code:'||sqlcode||' Error message:'||sqlerrm;
1266 WHEN OTHERS THEN
1267 x_return_status:=ddr_webservices_constants.g_ret_sts_unexp_error;
1268 x_msg_count:=1;
1269 x_msg_data:='Unexpected Error. Error code:'||sqlcode||' Error message:'||sqlerrm;
1270 END get_aggr_group_colms;
1271
1272 PROCEDURE write_fact_to_xml_file(p_query IN VARCHAR2,
1273 p_fact_code IN VARCHAR2,
1274 p_job_id IN NUMBER,
1275 x_return_status OUT NOCOPY VARCHAR2,
1276 x_msg_count OUT NOCOPY NUMBER,
1277 x_msg_data OUT NOCOPY VARCHAR2)
1278 IS
1279 l_cur NUMBER:=null;
1280 l_dtbl DBMS_SQL.desc_tab;
1281 l_cnt NUMBER;
1282 l_status NUMBER;
1283 l_val VARCHAR2(200);
1284 l_col_name VARCHAR2(200);
1285 l_xml_file UTL_FILE.file_type;
1286 l_fetch_ctn NUMBER:=0;
1287 l_fetch_rows NUMBER:=0;
1288 l_file_name VARCHAR2(30):=null;
1289 l_total_row_count NUMBER:=0;
1290 l_dir_name VARCHAR2(30):=null;
1291 l_pagination_row_count NUMBER:=null;
1292 l_max_row_count NUMBER:=null;
1293 l_fact VARCHAR2(32767):=null;
1294 l_file_id VARCHAR2(100):= NULL;
1295 l_max_rows EXCEPTION;
1296 BEGIN
1297 --get logical directory name from system variable table
1298 ddr_webservices_pub.get_sys_var_val('OUTPUT_DIR_PATH',x_return_status, x_msg_count,x_msg_data,l_dir_name);
1299 --get pagination row count from system variable table
1300 ddr_webservices_pub.get_sys_var_val('MAX_REC_PER_FILE',x_return_status, x_msg_count,x_msg_data,l_pagination_row_count);
1301 --get threashold value for the maximum records for which files can be created
1302 ddr_webservices_pub.get_sys_var_val('MAX_OUT NOCOPY PUT_RECORDS',x_return_status, x_msg_count,x_msg_data,l_max_row_count);
1303 -- DBMS_OUTPUT.PUT_LINE('l_max_row_count='||l_max_row_count);
1304 l_pagination_row_count:=to_number(l_pagination_row_count);
1305 --get file id
1306 l_file_id :=get_ddr_ws_file_seq_nextval(x_return_status,x_msg_count,x_msg_data);
1307 --construct file name
1308 l_file_name := p_fact_code || '_'|| l_file_id || '.xml';
1309 --open file in write mode
1313 --open cursor
1310 l_xml_file := UTL_FILE.fopen(l_dir_name,l_file_name,ddr_webservices_constants.g_file_write_mode);
1311 --write xml header data in the xml file
1312 UTL_FILE.put_line(l_xml_file, '<?xml version="1.0" encoding="UTF-8"?>');
1314 l_cur := dbms_sql.open_cursor;
1315 dbms_sql.parse(l_cur,p_query,dbms_sql.native);
1316 l_status := dbms_sql.execute(l_cur);
1317 --to column defination from the cursor
1318 dbms_sql.describe_columns(l_cur,l_cnt,l_dtbl);
1319 FOR i in 1..l_cnt LOOP
1320 dbms_sql.define_column(l_cur,i,l_val,30);
1321 END LOOP;
1322 UTL_FILE.put_line(l_xml_file, '<FACT_DATA>');
1323 l_fetch_rows:=dbms_sql.fetch_rows(l_cur);
1324 WHILE ( l_fetch_rows > 0 ) LOOP
1325 l_fetch_ctn:=l_fetch_ctn+l_fetch_rows;
1326 UTL_FILE.put_line(l_xml_file, '<FACT>');
1327 l_fact:=null;
1328 --write individual row in the xml file
1329 FOR i in 1..l_cnt loop
1330 l_col_name:= l_dtbl(i).col_name;
1331 dbms_sql.column_value(l_cur,i,l_val);
1332 -- l_fact:=l_fact||'<'||l_col_name||'>'||l_val||'</'||l_col_name||'>'||chr(10);
1333 -- Use of chr function not allowed by GSCC. The new line character is introduced using line edit
1334 l_fact:=l_fact||'<'||l_col_name||'>'||l_val||'</'||l_col_name||'>'||'
1335 '||NULL;
1336 END LOOP;
1337 -- UTL_FILE.put_line(l_xml_file, l_fact||chr(10)||'</FACT>');
1338 -- Use of chr function not allowed by GSCC. The new line character is introduced using line edit
1339 UTL_FILE.put_line(l_xml_file, l_fact||'
1340 '||'</FACT>');
1341 IF l_fetch_ctn = l_pagination_row_count THEN
1342 UTL_FILE.put_line(l_xml_file,'</FACT_DATA>');
1343 UTL_FILE.FCLOSE(l_xml_file);
1344 --update the job file metadata table with the file name
1345 BEGIN
1346 INSERT INTO ddr_ws_job_file_dls(file_id, job_id, file_name, status, delete_flag,src_sys_idnt, src_sys_dt, crtd_by_dsr, last_updt_by_dsr,
1347 created_by, creation_date, last_updated_by,
1348 last_update_date, last_update_login)
1349 VALUES (l_file_id, p_job_id, l_file_name, ddr_webservices_constants.g_ret_sts_success, 'N','ABC', SYSDATE, 'ABC', 'ABC',101, SYSDATE, 101,
1350 SYSDATE, 101);
1351 END;
1352 l_fetch_rows:=dbms_sql.fetch_rows(l_cur);
1353 IF(l_fetch_rows > 0) THEN
1354 IF l_total_row_count >=l_max_row_count THEN
1355 RAISE l_max_rows;
1356 END IF;
1357 l_file_id :=get_ddr_ws_file_seq_nextval(x_return_status,x_msg_count,x_msg_data);
1358 l_file_name := p_fact_code || '_'|| l_file_id || '.xml';
1359 l_xml_file := UTL_FILE.fopen(l_dir_name,l_file_name,ddr_webservices_constants.g_file_write_mode);
1360 UTL_FILE.put_line(l_xml_file, '<?xml version="1.0" encoding="UTF-8"?>');
1361 UTL_FILE.put_line(l_xml_file, '<FACT_DATA>');
1362 l_fetch_ctn:=0;
1363 END IF;
1364 ELSE
1365 l_fetch_rows:=dbms_sql.fetch_rows(l_cur);
1366 END IF;
1367 l_total_row_count:=l_total_row_count+1;
1368 END LOOP;
1369 -- DBMS_OUTPUT.PUT_LINE('l_total_row_count='||l_total_row_count);
1370 dbms_sql.close_cursor(l_cur);
1371 IF l_fetch_ctn <> l_pagination_row_count THEN
1372 UTL_FILE.put_line(l_xml_file, '</FACT_DATA>');
1373 UTL_FILE.FCLOSE(l_xml_file);
1374 BEGIN
1375 -- DBMS_OUTPUT.PUT_LINE('third, l_file_id='||l_file_id);
1376 INSERT INTO ddr_ws_job_file_dls
1377 (file_id, job_id, file_name, status, delete_flag,
1378 src_sys_idnt, src_sys_dt, crtd_by_dsr, last_updt_by_dsr,
1379 created_by, creation_date, last_updated_by,
1380 last_update_date, last_update_login
1381 )
1385 END;
1382 VALUES (l_file_id, p_job_id, l_file_name, ddr_webservices_constants.g_ret_sts_success, 'N',
1383 'ABC', SYSDATE, 'ABC', 'ABC',101, SYSDATE, 101,
1384 SYSDATE, 101);
1386 END IF;
1387 x_return_status:=ddr_webservices_constants.g_ret_sts_success;
1388 EXCEPTION
1389 WHEN l_max_rows THEN
1390 IF dbms_sql.is_open(l_cur) THEN
1391 dbms_sql.close_cursor(l_cur);
1392 END IF;
1393 IF UTL_FILE.is_open(l_xml_file) THEN
1394 UTL_FILE.fclose(l_xml_file);
1395 END IF;
1396 x_return_status:=ddr_webservices_constants.g_ret_sts_error;
1397 x_msg_count:=1;
1398 x_msg_data:='Program exceeded maximum row OUT NOCOPY put';
1399 WHEN UTL_FILE.INTERNAL_ERROR THEN
1400 IF dbms_sql.is_open(l_cur) THEN
1401 dbms_sql.close_cursor(l_cur);
1402 END IF;
1403 IF UTL_FILE.is_open(l_xml_file) THEN
1404 UTL_FILE.fclose(l_xml_file);
1405 END IF;
1406 x_return_status:=ddr_webservices_constants.g_ret_sts_unexp_error;
1407 x_msg_count:=1;
1408 x_msg_data:='Cannot open file :' || l_file_name ||', write error; code:' || sqlcode ||',message:' || sqlerrm;
1409 WHEN UTL_FILE.INVALID_OPERATION THEN
1410 IF dbms_sql.is_open(l_cur) THEN
1411 dbms_sql.close_cursor(l_cur);
1412 END IF;
1413 IF UTL_FILE.is_open(l_xml_file) THEN
1414 UTL_FILE.fclose(l_xml_file);
1415 END IF;
1416 x_return_status:=ddr_webservices_constants.g_ret_sts_unexp_error;
1417 x_msg_count:=1;
1418 x_msg_data:='Cannot open file :' || l_file_name ||', write error; code:' || sqlcode ||',message:' || sqlerrm;
1419 WHEN UTL_FILE.INVALID_PATH THEN
1420 IF dbms_sql.is_open(l_cur) THEN
1421 dbms_sql.close_cursor(l_cur);
1422 END IF;
1423 IF UTL_FILE.is_open(l_xml_file) THEN
1424 UTL_FILE.fclose(l_xml_file);
1425 END IF;
1426 x_return_status:=ddr_webservices_constants.g_ret_sts_unexp_error;
1427 x_msg_count:=1;
1428 x_msg_data:='Cannot open file :' || l_file_name ||', write error; code:' || sqlcode ||',message:' || sqlerrm;
1429 WHEN UTL_FILE.WRITE_ERROR THEN
1430 IF dbms_sql.is_open(l_cur) THEN
1431 dbms_sql.close_cursor(l_cur);
1432 END IF;
1433 IF UTL_FILE.is_open(l_xml_file) THEN
1434 UTL_FILE.fclose(l_xml_file);
1435 END IF;
1436 x_return_status:=ddr_webservices_constants.g_ret_sts_unexp_error;
1437 x_msg_count:=1;
1438 x_msg_data:='Cannot write to file :' || l_file_name ||', write error; code:' || sqlcode ||',message:' || sqlerrm;
1439 WHEN OTHERS THEN
1440 IF dbms_sql.is_open(l_cur) THEN
1441 dbms_sql.close_cursor(l_cur);
1442 END IF;
1443 IF UTL_FILE.is_open(l_xml_file) THEN
1444 UTL_FILE.fclose(l_xml_file);
1445 END IF;
1446 x_return_status:=ddr_webservices_constants.g_ret_sts_unexp_error;
1447 x_msg_count:=1;
1448 x_msg_data:='Unexpected Error. Error code:'||sqlcode||' Error message:'||sqlerrm;
1449 END write_fact_to_xml_file;
1450
1451 PROCEDURE validate_input_params(p_api_version IN NUMBER,
1452 p_mfg_org_cd IN VARCHAR2,
1453 p_org_cd IN VARCHAR2,
1454 p_org_dim_lvl_cd IN VARCHAR2,
1455 p_org_lvl_val IN VARCHAR2,
1456 p_exp_org_level IN VARCHAR2,
1457 p_loc_dim_lvl_cd IN VARCHAR2,
1458 p_loc_lvl_val IN VARCHAR2,
1459 p_exp_loc_level IN VARCHAR2,
1460 p_item_dim_lvl_cd IN VARCHAR2,
1461 p_item_lvl_val IN VARCHAR2,
1462 p_exp_item_level IN VARCHAR2,
1463 p_time_dim_lvl_cd IN VARCHAR2,
1464 p_time_lvl_val IN VARCHAR2,
1465 p_exp_time_level IN VARCHAR2,
1466 p_fact_code IN VARCHAR2,
1467 x_return_status OUT NOCOPY VARCHAR2,
1468 x_msg_count OUT NOCOPY NUMBER,
1469 x_msg_data OUT NOCOPY VARCHAR2)
1470 IS
1471 l_api_ver EXCEPTION;
1472 l_fact_code_null EXCEPTION;
1473 l_mfg_code_null EXCEPTION;
1474 l_rtl_org_code_null EXCEPTION;
1475 l_hrchy_cd VARCHAR2(50):=NULL;
1476 BEGIN
1477 IF p_api_version IS NULL THEN
1478 RAISE l_api_ver;
1479 END IF;
1480 IF p_api_version<>ddr_webservices_constants.g_api_version THEN
1481 RAISE l_api_ver;
1482 END IF;
1483 IF p_fact_code IS NULL THEN
1484 RAISE l_fact_code_null;
1485 END IF;
1486 IF p_mfg_org_cd IS NULL THEN
1487 RAISE l_mfg_code_null;
1488 END IF;
1489 IF p_org_cd IS NULL THEN
1490 RAISE l_rtl_org_code_null;
1491 END IF;
1492 x_return_status:=ddr_webservices_constants.g_ret_sts_success;
1493 EXCEPTION
1494 WHEN l_api_ver THEN
1495 x_return_status:=ddr_webservices_constants.g_ret_sts_error;
1496 x_msg_count:=1;
1497 x_msg_data:='API version number should not be null';
1498 WHEN l_fact_code_null THEN
1499 x_return_status:=ddr_webservices_constants.g_ret_sts_error;
1500 x_msg_count:=1;
1501 x_msg_data:='Fact code should not be null';
1502 WHEN l_mfg_code_null THEN
1503 x_return_status:=ddr_webservices_constants.g_ret_sts_error;
1504 x_msg_count:=1;
1505 x_msg_data:='Manufacturer Organization code should not be null';
1506 WHEN l_rtl_org_code_null THEN
1507 x_return_status:=ddr_webservices_constants.g_ret_sts_error;
1508 x_msg_count:=1;
1509 x_msg_data:='Retailer Organization code should not be null';
1510 WHEN OTHERS THEN
1511 x_return_status:=ddr_webservices_constants.g_ret_sts_unexp_error;
1512 x_msg_count:=1;
1513 x_msg_data:='Unexpected Error. Error code:'||sqlcode||' Error message:'||sqlerrm;
1514 END validate_input_params;
1515
1516 PROCEDURE get_sys_var_val(p_sys_var IN VARCHAR2,
1517 x_return_status OUT NOCOPY VARCHAR2,
1518 x_msg_count OUT NOCOPY NUMBER,
1519 x_msg_data OUT NOCOPY VARCHAR2,
1520 x_sys_var_val OUT NOCOPY VARCHAR2)
1521 IS
1522 BEGIN
1523 SELECT lkup_name INTO x_sys_var_val FROM ddr_r_lkup_mst WHERE lkup_cd=p_sys_var;
1524 x_return_status:=ddr_webservices_constants.g_ret_sts_success;
1525 EXCEPTION
1526 WHEN NO_DATA_FOUND THEN
1527 x_return_status := ddr_webservices_constants.g_ret_sts_error;
1528 x_msg_count := 1;
1529 x_msg_data := 'No Data Found. Error Code' ||sqlcode||' Error message:'||sqlerrm;
1530 WHEN OTHERS THEN
1531 x_return_status:=ddr_webservices_constants.g_ret_sts_unexp_error;
1532 x_msg_count:=1;
1533 x_msg_data:='Unexpected Error. Error code:'||sqlcode||' Error message:'||sqlerrm;
1534 END get_sys_var_val;
1535
1536 FUNCTION get_ddr_ws_file_seq_nextval(x_return_status OUT NOCOPY VARCHAR2,
1537 x_msg_count OUT NOCOPY NUMBER,
1538 x_msg_data OUT NOCOPY VARCHAR2) RETURN VARCHAR2
1539 IS
1540 l_next_val NUMBER:=null;
1541 BEGIN
1542 SELECT DDR_WS_FILE_SEQ.NEXTVAL INTO l_next_val FROM dual;
1543 RETURN to_char(l_next_val);
1544 EXCEPTION
1545 WHEN NO_DATA_FOUND THEN
1546 x_return_status := ddr_webservices_constants.g_ret_sts_error;
1547 x_msg_count := 1;
1548 x_msg_data := 'No Data Found. Error Code' ||sqlcode||' Error message:'||sqlerrm;
1549 WHEN OTHERS THEN
1550 x_return_status:=ddr_webservices_constants.g_ret_sts_unexp_error;
1551 x_msg_count:=1;
1552 x_msg_data:='Unexpected Error. Error code:'||sqlcode||' Error message:'||sqlerrm;
1553 END get_ddr_ws_file_seq_nextval;
1554
1555 PROCEDURE get_itm_hrchy_clauses(p_item_dim_lvl_cd IN VARCHAR2,
1556 p_item_lvl_val IN VARCHAR2,
1557 p_exp_item_level IN VARCHAR2,
1558 p_fact_code IN VARCHAR2,
1559 x_return_status OUT NOCOPY VARCHAR2,
1560 x_msg_count OUT NOCOPY VARCHAR2,
1561 x_msg_data OUT NOCOPY VARCHAR2,
1562 x_itm_ref_tbls OUT NOCOPY VARCHAR2,
1563 x_itm_ref_joins OUT NOCOPY VARCHAR2,
1564 x_itm_where_clus OUT NOCOPY VARCHAR2)
1565 IS
1566 l_lvl_rnk NUMBER:=null;
1567 BEGIN
1568 -- CASE p_fact_code
1569 -- for RETAIL SALE RETURN ITEM DAY fact
1570 --WHEN ddr_webservices_constants.g_rsrid_cd THEN
1571
1572 IF p_item_dim_lvl_cd IS NOT NULL THEN
1573 get_hrchy_lvl('ITEM',p_item_dim_lvl_cd,l_lvl_rnk,x_return_status,x_msg_count,x_msg_data);
1574 ELSIF p_exp_item_level IS NOT NULL THEN
1575 get_hrchy_lvl('ITEM',p_exp_item_level,l_lvl_rnk,x_return_status,x_msg_count,x_msg_data);
1576 END IF;
1577 IF l_lvl_rnk IS NULL THEN
1578 RETURN;
1579 END IF;
1580 IF l_lvl_rnk>=1 THEN
1581 x_itm_ref_tbls:=',DDR_R_MFG_SKU_ITEM ITMA';
1582 x_itm_ref_joins:='AND x.GLBL_ITEM_ID = ITMA.GLBL_ITEM_ID';
1583 END IF;
1584 IF l_lvl_rnk>=2 THEN
1585 x_itm_ref_tbls:=x_itm_ref_tbls || ',DDR_R_MFG_ITEM ITMB';
1586 x_itm_ref_joins:=x_itm_ref_joins||' AND ITMA.MFG_ITEM_ID = ITMB.MFG_ITEM_ID';
1587 END IF;
1588 IF l_lvl_rnk>=3 THEN
1589 x_itm_ref_tbls:=x_itm_ref_tbls || ',DDR_R_MFG_ITEM_SBC ITMC';
1590 x_itm_ref_joins:=x_itm_ref_joins||' AND ITMB.MFG_ITEM_SBC_ID = ITMC.MFG_ITEM_SBC_ID';
1591 END IF;
1592 IF l_lvl_rnk>=4 THEN
1593 x_itm_ref_tbls:=x_itm_ref_tbls || ',DDR_R_MFG_ITEM_CLASS ITMD';
1594 x_itm_ref_joins:=x_itm_ref_joins||' AND ITMC.MFG_ITEM_CLASS_ID = ITMD.MFG_ITEM_CLASS_ID';
1595 END IF;
1596 IF l_lvl_rnk>=5 THEN
1597 x_itm_ref_tbls:=x_itm_ref_tbls || ',DDR_R_MFG_ITEM_GRP ITME';
1598 x_itm_ref_joins:=x_itm_ref_joins||' AND ITMD.MFG_ITEM_GRP_ID = ITME.MFG_ITEM_GRP_ID';
1599 END IF;
1600 IF l_lvl_rnk>=6 THEN
1601 x_itm_ref_tbls:=x_itm_ref_tbls || ',DDR_R_MFG_ITEM_DIV ITMF';
1602 x_itm_ref_joins:=x_itm_ref_joins||' AND ITME.MFG_ITEM_DIV_ID = ITMF.MFG_ITEM_DIV_ID';
1603 END IF;
1604 IF p_item_dim_lvl_cd IS NOT NULL THEN
1605 get_item_ref_join(l_lvl_rnk,x_itm_where_clus,x_return_status,x_msg_count,x_msg_data);
1606 x_itm_where_clus:= x_itm_where_clus || '=''' || p_item_lvl_val||'''';
1607 END IF;
1608 -- END CASE;
1609 EXCEPTION
1610 WHEN OTHERS THEN
1611 x_return_status:=ddr_webservices_constants.g_ret_sts_unexp_error;
1612 x_msg_count:=1;
1613 x_msg_data:='Unexpected Error. Error code:'||sqlcode||' Error message:'||sqlerrm;
1614 END get_itm_hrchy_clauses;
1615
1616 PROCEDURE get_item_ref_join(p_lvl_rnk IN NUMBER,
1617 x_ref_join OUT NOCOPY VARCHAR2,
1618 x_return_status OUT NOCOPY VARCHAR2,
1619 x_msg_count OUT NOCOPY VARCHAR2,
1620 x_msg_data OUT NOCOPY VARCHAR2)
1621 IS
1622 BEGIN
1623 CASE p_lvl_rnk
1624 WHEN 1 THEN
1625 x_ref_join:=' ITMA.MFG_SKU_ITEM_NBR';
1626 WHEN 2 THEN
1627 x_ref_join:=' ITMB.MFG_ITEM_NBR ';
1628 WHEN 3 THEN
1629 x_ref_join:=' ITMC.MFG_SBC_CD ';
1630 WHEN 4 THEN
1631 x_ref_join:=' ITMD.MFG_CLASS_CD ';
1632 WHEN 5 THEN
1633 x_ref_join:=' ITME.MFG_GRP_CD ';
1634 WHEN 6 THEN
1635 x_ref_join:=' ITMF.MFG_DIV_CD ';
1636 END CASE;
1637 EXCEPTION
1638 WHEN OTHERS THEN
1639 x_return_status:=ddr_webservices_constants.g_ret_sts_unexp_error;
1640 x_msg_count:=1;
1641 x_msg_data:='Unexpected Error. Error code:'||sqlcode||' Error message:'||sqlerrm;
1642
1643 END get_item_ref_join;
1644
1645
1646 PROCEDURE get_org_hrchy_clauses(p_org_dim_lvl_cd IN VARCHAR2,
1647 p_org_lvl_val IN VARCHAR2,
1648 p_exp_org_level IN VARCHAR2,
1649 p_fact_code IN VARCHAR2,
1650 x_return_status OUT NOCOPY VARCHAR2,
1651 x_msg_count OUT NOCOPY VARCHAR2,
1652 x_msg_data OUT NOCOPY VARCHAR2,
1653 x_org_ref_tbls OUT NOCOPY VARCHAR2,
1654 x_org_ref_joins OUT NOCOPY VARCHAR2,
1655 x_org_where_clus OUT NOCOPY VARCHAR2)
1656 IS
1657 l_lvl_rnk NUMBER:=null;
1658 BEGIN
1659 -- CASE p_fact_code
1660 -- for RETAIL SALE RETURN ITEM DAY fact
1661 --WHEN ddr_webservices_constants.g_rsrid_cd THEN
1662 IF p_org_dim_lvl_cd IS NOT NULL THEN
1663 get_hrchy_lvl('ORGANIZATION',p_org_dim_lvl_cd,l_lvl_rnk,x_return_status,x_msg_count,x_msg_data);
1664 ELSIF p_exp_org_level IS NOT NULL THEN
1665 get_hrchy_lvl('ORGANIZATION',p_exp_org_level,l_lvl_rnk,x_return_status,x_msg_count,x_msg_data);
1666 END IF;
1667 IF l_lvl_rnk IS NULL THEN
1668 RETURN;
1669 END IF;
1670 IF l_lvl_rnk>=1 THEN
1671 x_org_ref_tbls:=',DDR_R_ORG_BSNS_UNIT ORGA';
1672 x_org_ref_joins:=' AND X.ORG_BSNS_UNIT_ID = ORGA.ORG_BSNS_UNIT_ID';
1673 END IF;
1674 IF l_lvl_rnk>=2 THEN
1675 x_org_ref_tbls:=x_org_ref_tbls || ',DDR_R_ORG_DSTRCT ORGB';
1676 x_org_ref_joins:=x_org_ref_joins||' AND ORGA.ORG_DSTRCT_ID = ORGB.ORG_DSTRCT_ID';
1677 END IF;
1678 IF l_lvl_rnk>=3 THEN
1679 x_org_ref_tbls:=x_org_ref_tbls || ',DDR_R_ORG_RGN ORGC';
1680 x_org_ref_joins:=x_org_ref_joins||' AND ORGB.ORG_RGN_ID = ORGC.ORG_RGN_ID';
1681 END IF;
1682 IF l_lvl_rnk>=4 THEN
1683 x_org_ref_tbls:=x_org_ref_tbls || ',DDR_R_ORG_AREA ORGD';
1684 x_org_ref_joins:=x_org_ref_joins||' AND ORGC.ORG_AREA_ID = ORGD.ORG_AREA_ID';
1685 END IF;
1686 IF l_lvl_rnk>=5 THEN
1687 x_org_ref_tbls:=x_org_ref_tbls || ',DDR_R_ORG_CHAIN ORGE';
1688 x_org_ref_joins:=x_org_ref_joins||' AND ORGD.ORG_CHAIN_ID = ORGE.ORG_CHAIN_ID';
1689 END IF;
1690 IF l_lvl_rnk>=6 THEN
1691 x_org_ref_tbls:=x_org_ref_tbls || ',DDR_R_ORG ORGF';
1692 --x_itm_ref_joins:=x_itm_ref_joins||' ';
1693 END IF;
1694 IF l_lvl_rnk>=7 THEN
1695 x_org_ref_tbls:=x_org_ref_tbls || ',DDR_R_RTL_CLSTR ORGG,DDR_R_RTL_CLSTR_RTL_ASSC ORGH';
1696 x_org_ref_joins:=x_org_ref_joins||' AND ORGE.ORG_CD = ORGH.RTL_ORG_CD';
1697 END IF;
1698 IF p_org_dim_lvl_cd IS NOT NULL THEN
1699 get_org_ref_join(l_lvl_rnk,x_org_where_clus,x_return_status,x_msg_count,x_msg_data);
1703 EXCEPTION
1700 x_org_where_clus:= x_org_where_clus || '=''' || p_org_lvl_val||'''';
1701 END IF;
1702 -- END CASE;
1704 WHEN OTHERS THEN
1705 x_return_status:=ddr_webservices_constants.g_ret_sts_unexp_error;
1706 x_msg_count:=1;
1707 x_msg_data:='Unexpected Error. Error code:'||sqlcode||' Error message:'||sqlerrm;
1708 END get_org_hrchy_clauses;
1709
1710 PROCEDURE get_org_ref_join(p_lvl_rnk IN NUMBER,
1711 x_ref_join OUT NOCOPY VARCHAR2,
1712 x_return_status OUT NOCOPY VARCHAR2,
1713 x_msg_count OUT NOCOPY VARCHAR2,
1714 x_msg_data OUT NOCOPY VARCHAR2)
1715 IS
1716 BEGIN
1717 CASE p_lvl_rnk
1718 --bug 6921259 change start
1719 WHEN 0 THEN
1720 x_ref_join:=' X.INV_LOC_CD ';
1721 --bug 6921259 change end
1722 WHEN 1 THEN
1723 x_ref_join:=' ORGA.BSNS_UNIT_CD ';
1724 WHEN 5 THEN
1725 x_ref_join:=' ORGE.CHAIN_CD ';
1726 WHEN 6 THEN
1727 x_ref_join:=' ORGF.ORG_CD ';
1728 WHEN 7 THEN
1729 x_ref_join:=' ORGG.CLSTR_CD ';
1730 END CASE;
1731 EXCEPTION
1732 WHEN OTHERS THEN
1733 x_return_status:=ddr_webservices_constants.g_ret_sts_unexp_error;
1734 x_msg_count:=1;
1735 x_msg_data:='Unexpected Error. Error code:'||sqlcode||' Error message:'||sqlerrm;
1736 END get_org_ref_join;
1737
1738 PROCEDURE get_time_hrchy_clauses(p_time_dim_lvl_cd IN VARCHAR2,
1739 p_time_lvl_val IN VARCHAR2,
1740 p_exp_time_level IN VARCHAR2,
1741 p_fact_code IN VARCHAR2,
1742 p_org_cd IN VARCHAR2,
1743 x_return_status OUT NOCOPY VARCHAR2,
1744 x_msg_count OUT NOCOPY VARCHAR2,
1745 x_msg_data OUT NOCOPY VARCHAR2,
1746 x_time_ref_tbls OUT NOCOPY VARCHAR2,
1747 x_time_ref_joins OUT NOCOPY VARCHAR2,
1748 x_time_where_clus OUT NOCOPY VARCHAR2)
1749 IS
1750 l_lvl_rnk NUMBER:=null;
1751 l_hrchy_lvl_name VARCHAR2(50):=null;
1752 BEGIN
1753 -- CASE p_fact_code
1754 -- for RETAIL SALE RETURN ITEM DAY fact
1755 --WHEN ddr_webservices_constants.g_rsrid_cd THEN
1756 --to get the time hierarchy level name(GREGORIAN TIME OR BUSINESS TIME)
1757 IF p_time_dim_lvl_cd IS NOT NULL THEN
1758 SELECT hrchy_lvl_name INTO l_hrchy_lvl_name FROM DDR_WS_METADATA WHERE
1759 hrchy_lvl_cd=p_time_dim_lvl_cd;
1760 get_hrchy_lvl(l_hrchy_lvl_name,p_time_dim_lvl_cd,l_lvl_rnk,x_return_status,x_msg_count,x_msg_data);
1761 ELSIF p_exp_time_level IS NOT NULL THEN
1762 SELECT hrchy_lvl_name INTO l_hrchy_lvl_name FROM DDR_WS_METADATA WHERE
1763 hrchy_lvl_cd=p_exp_time_level;
1764 get_hrchy_lvl(l_hrchy_lvl_name,p_exp_time_level,l_lvl_rnk,x_return_status,x_msg_count,x_msg_data);
1765 END IF;
1766 IF l_lvl_rnk IS NULL THEN
1767 RETURN;
1768 END IF;
1769 CASE l_hrchy_lvl_name
1770 WHEN 'GREGORIAN TIME' THEN
1771 IF l_lvl_rnk>=1 THEN
1772 x_time_ref_tbls:=',DDR_R_DAY TDAY';
1773 x_time_ref_joins:=' AND X.DAY_CD = TDAY.DAY_CD';
1774 END IF;
1775 IF l_lvl_rnk>=3 THEN
1776 x_time_ref_tbls:=x_time_ref_tbls || ',DDR_R_CLNDR_MNTH TCA';
1777 x_time_ref_joins:=x_time_ref_joins||' AND TDAY.CLNDR_MNTH_ID = TCA.CLNDR_MNTH_ID';
1778 END IF;
1779 IF l_lvl_rnk>=5 THEN
1780 x_time_ref_tbls:=x_time_ref_tbls || ',DDR_R_CLNDR_QTR TCB,DDR_R_CLNDR_YR TCC';
1781 x_time_ref_joins:=x_time_ref_joins||' AND TCA.CLNDR_QTR_ID=TCB.CLNDR_QTR_ID AND TCB.CLNDR_YR_ID = TCC.CLNDR_YR_ID';
1782 END IF;
1783 IF p_time_dim_lvl_cd IS NOT NULL THEN
1784 get_time_ref_join(l_hrchy_lvl_name,l_lvl_rnk,x_time_where_clus,x_return_status,x_msg_count,x_msg_data);
1785 x_time_where_clus:= x_time_where_clus || '=''' ||
1786 p_time_lvl_val||'''';
1787 END IF;
1788 WHEN 'BUSINESS TIME' THEN
1789 IF l_lvl_rnk>=1 THEN
1790 x_time_ref_tbls:=',DDR_R_CLNDR TCLNDR,DDR_R_DAY TDAY,DDR_R_BASE_DAY TBA';
1791 x_time_ref_joins:=' AND X.DAY_CD = TDAY.DAY_CD AND TDAY.DAY_CD = TBA.DAY_CD '
1792 ||' AND TBA.CLNDR_TYP=''BSNS'' AND TBA.CLNDR_CD=TCLNDR.CLNDR_CD AND TCLNDR.CLNDR_TYP=''BSNS'''
1793 ||' AND TCLNDR.ORG_CD='''||p_org_cd||'''';
1794 END IF;
1795 IF l_lvl_rnk>=2 THEN
1796 x_time_ref_tbls:=x_time_ref_tbls || ',DDR_R_BSNS_WK TBB';
1797 x_time_ref_joins:=x_time_ref_joins||' AND TBA.WK_ID = TBB.BSNS_WK_ID';
1798 END IF;
1799 IF l_lvl_rnk>=3 THEN
1800 x_time_ref_tbls:=x_time_ref_tbls || ',DDR_R_BSNS_MNTH TBC';
1801 x_time_ref_joins:=x_time_ref_joins||' AND TBB.BSNS_MNTH_ID = TBC.BSNS_MNTH_ID';
1802 END IF;
1803 IF l_lvl_rnk>=4 THEN
1804 x_time_ref_tbls:=x_time_ref_tbls || ',DDR_R_BSNS_QTR TBD';
1805 x_time_ref_joins:=x_time_ref_joins||' AND TBC.BSNS_QTR_ID = TBD.BSNS_QTR_ID';
1806 END IF;
1807 IF l_lvl_rnk>=5 THEN
1808 x_time_ref_tbls:=x_time_ref_tbls || ',DDR_R_BSNS_YR TBE';
1809 x_time_ref_joins:=x_time_ref_joins||' AND TBD.BSNS_YR_ID = TBE.BSNS_YR_ID';
1810 END IF;
1811 IF p_time_dim_lvl_cd IS NOT NULL THEN
1812 get_time_ref_join(l_hrchy_lvl_name,l_lvl_rnk,x_time_where_clus,x_return_status,x_msg_count,x_msg_data);
1813 x_time_where_clus:= x_time_where_clus || '=''' ||
1814 p_time_lvl_val||'''';
1815 END IF;
1816
1820 WHEN OTHERS THEN
1817 END CASE;
1818 -- END CASE;
1819 EXCEPTION
1821 x_return_status:=ddr_webservices_constants.g_ret_sts_unexp_error;
1822 x_msg_count:=1;
1823 x_msg_data:='Unexpected Error. Error code:'||sqlcode||' Error message:'||sqlerrm;
1824 END get_time_hrchy_clauses;
1825
1826 PROCEDURE get_time_ref_join(p_hrchy_name IN VARCHAR2,
1827 p_lvl_rnk IN NUMBER,
1828 x_ref_join OUT NOCOPY VARCHAR2,
1829 x_return_status OUT NOCOPY VARCHAR2,
1830 x_msg_count OUT NOCOPY VARCHAR2,
1831 x_msg_data OUT NOCOPY VARCHAR2)
1832 IS
1833 BEGIN
1834 CASE p_hrchy_name
1835 WHEN 'GREGORIAN TIME' THEN
1836 CASE p_lvl_rnk
1837 WHEN 1 THEN
1838 x_ref_join:=' X.DAY_CD ';
1839 WHEN 3 THEN
1840 x_ref_join:=' TCA.MNTH_CD ';
1841 WHEN 5 THEN
1842 x_ref_join:=' TCC.YR_CD';
1843 END CASE;
1844 WHEN 'BUSINESS TIME' THEN
1845 CASE p_lvl_rnk
1846 WHEN 1 THEN
1847 x_ref_join:=' X.DAY_CD';
1848 WHEN 2 THEN
1849 x_ref_join:=' TBB.WK_CD';
1850 WHEN 3 THEN
1851 x_ref_join:=' TBC.MNTH_CD ';
1852 WHEN 4 THEN
1853 x_ref_join:=' TBD.QTR_CD ';
1854 WHEN 5 THEN
1855 --bug 6928308 change start
1856 x_ref_join:=' TBE.YR_CD ';
1857 --bug 6928308 change end
1858 END CASE;
1859 END CASE;
1860 EXCEPTION
1861 WHEN OTHERS THEN
1862 x_return_status:=ddr_webservices_constants.g_ret_sts_unexp_error;
1863 x_msg_count:=1;
1864 x_msg_data:='Unexpected Error. Error code:'||sqlcode||' Error message:'||sqlerrm;
1865 END get_time_ref_join;
1866
1867
1868 PROCEDURE get_loc_hrchy_clauses(p_loc_dim_lvl_cd IN VARCHAR2,
1869 p_loc_lvl_val IN VARCHAR2,
1870 p_exp_loc_level IN VARCHAR2,
1871 p_org_dim_lvl_cd IN VARCHAR2,
1872 p_fact_code IN VARCHAR2,
1873 x_return_status OUT NOCOPY VARCHAR2,
1874 x_msg_count OUT NOCOPY VARCHAR2,
1875 x_msg_data OUT NOCOPY VARCHAR2,
1876 x_loc_ref_tbls OUT NOCOPY VARCHAR2,
1877 x_loc_ref_joins OUT NOCOPY VARCHAR2,
1878 x_loc_where_clus OUT NOCOPY VARCHAR2)
1879 IS
1880 l_lvl_rnk NUMBER:=null;
1881 l_org_lvl_rnk NUMBER:=null;
1882 BEGIN
1883 -- CASE p_fact_code
1884 -- for RETAIL SALE RETURN ITEM DAY fact
1885 --WHEN ddr_webservices_constants.g_rsrid_cd THEN
1886 IF p_loc_dim_lvl_cd IS NOT NULL THEN
1887 get_hrchy_lvl('LOCATION',p_loc_dim_lvl_cd,l_lvl_rnk,x_return_status,x_msg_count,x_msg_data);
1888 ELSIF p_exp_loc_level IS NOT NULL THEN
1889 get_hrchy_lvl('LOCATION',p_exp_loc_level,l_lvl_rnk,x_return_status,x_msg_count,x_msg_data);
1890 END IF;
1891 IF l_lvl_rnk IS NULL THEN
1892 RETURN;
1893 END IF;
1894 IF l_lvl_rnk>=1 THEN
1895 --check if p_org_dim_lvl_cd is not specified, the include DSR_R_ORG_BSNS_UNIT ORGA in FROM clause
1896 IF p_org_dim_lvl_cd IS NULL THEN
1897 x_loc_ref_tbls:= ',DDR_R_ORG_BSNS_UNIT ORGA';
1898 x_loc_ref_joins:=' AND X.ORG_BSNS_UNIT_ID = ORGA.ORG_BSNS_UNIT_ID';
1899 END IF;
1900 x_loc_ref_tbls:= x_loc_ref_tbls|| ',DDR_R_ADDR_LOC LOCA,DDR_R_CITY LOCB';
1901 x_loc_ref_joins:=x_loc_ref_joins||' AND ORGA.ADDR_LOC_ID = LOCA.ADDR_LOC_ID(+) AND LOCA.CITY_CD = LOCB.CITY_CD(+)';
1902 END IF;
1903 IF l_lvl_rnk>=2 THEN
1904 x_loc_ref_tbls:=x_loc_ref_tbls || ',DDR_R_STATE LOCC';
1905 x_loc_ref_joins:=x_loc_ref_joins||' AND LOCB.STATE_CD = LOCC.STATE_CD(+)';
1906 END IF;
1907 IF l_lvl_rnk>=3 THEN
1908 x_loc_ref_tbls:=x_loc_ref_tbls || ',DDR_R_CNTRY LOCD';
1909 x_loc_ref_joins:=x_loc_ref_joins||' AND LOCC.CNTRY_CD = LOCD.CNTRY_CD(+)';
1910 END IF;
1911 IF p_loc_dim_lvl_cd IS NOT NULL THEN
1912 get_loc_ref_join(l_lvl_rnk,x_loc_where_clus,x_return_status,x_msg_count,x_msg_data);
1913 x_loc_where_clus:= x_loc_where_clus || '=''' || p_loc_lvl_val||'''';
1914 END IF;
1915 -- END CASE;
1916 EXCEPTION
1917 WHEN OTHERS THEN
1918 x_return_status:=ddr_webservices_constants.g_ret_sts_unexp_error;
1919 x_msg_count:=1;
1920 x_msg_data:='Unexpected Error. Error code:'||sqlcode||' Error message:'||sqlerrm;
1921 END get_loc_hrchy_clauses;
1922
1923 PROCEDURE get_loc_ref_join(p_lvl_rnk IN NUMBER,
1924 x_ref_join OUT NOCOPY VARCHAR2,
1925 x_return_status OUT NOCOPY VARCHAR2,
1926 x_msg_count OUT NOCOPY VARCHAR2,
1927 x_msg_data OUT NOCOPY VARCHAR2)
1928 IS
1929 BEGIN
1930 CASE p_lvl_rnk
1931 WHEN 1 THEN
1932 x_ref_join:=' LOCB.CITY_CD ';
1933 WHEN 2 THEN
1934 x_ref_join:=' LOCC.STATE_CD ';
1935 WHEN 3 THEN
1936 x_ref_join:=' LOCD.CNTRY_CD ';
1937 END CASE;
1938 EXCEPTION
1939 WHEN OTHERS THEN
1940 x_return_status:=ddr_webservices_constants.g_ret_sts_unexp_error;
1941 x_msg_count:=1;
1942 x_msg_data:='Unexpected Error. Error code:'||sqlcode||' Error message:'||sqlerrm;
1943 END get_loc_ref_join;
1944
1945 PROCEDURE get_hrchy_lvl(p_hrchy_lvl_name IN VARCHAR2,
1946 p_hrchy_lvl_cd IN VARCHAR2,
1947 x_hrchy_lvl OUT NOCOPY NUMBER,
1948 x_return_status OUT NOCOPY VARCHAR2,
1949 x_msg_count OUT NOCOPY VARCHAR2,
1950 x_msg_data OUT NOCOPY VARCHAR2)
1951 IS
1952 l_hrchy_lvl NUMBER:=null;
1953 BEGIN
1954 SELECT lvl_rnk INTO l_hrchy_lvl FROM DDR_WS_METADATA WHERE HRCHY_LVL_CD=p_hrchy_lvl_cd AND hrchy_lvl_name=p_hrchy_lvl_name;
1955 -- DBMS_OUTPUT.PUT_LINE('p_hrchy_lvl_name='||p_hrchy_lvl_name||' ,p_hrchy_lvl_cd='||p_hrchy_lvl_cd||' ,x_hrchy_lvl='||l_hrchy_lvl);
1956 x_hrchy_lvl:=l_hrchy_lvl;
1957 EXCEPTION
1958 WHEN NO_DATA_FOUND THEN
1959 x_return_status := ddr_webservices_constants.g_ret_sts_error;
1960 x_msg_count := 1;
1961 x_msg_data := 'No data found for hierarchy code:'|| p_hrchy_lvl_cd ||'. Error Code' ||sqlcode||' Error message:'||sqlerrm;
1962 END get_hrchy_lvl;
1963
1964 --Bug 6880404 change start
1965 PROCEDURE get_other_join_conditions(p_fact_code VARCHAR2,
1966 x_return_status OUT NOCOPY VARCHAR2,
1967 x_msg_count OUT NOCOPY VARCHAR2,
1968 x_msg_data OUT NOCOPY VARCHAR2,
1969 x_oth_join_codn OUT NOCOPY VARCHAR2)
1970 IS
1971 l_join_cndn VARCHAR2(32767):=NULL;
1972 l_max_frcst_date DATE:=null;
1973 BEGIN
1974 --if the fact code is for forcest sales table, then join condition to fetch
1975 --the latest forcest version
1976 IF p_fact_code= ddr_webservices_constants.g_sfid_cd THEN
1977 --bug 6905930 change start
1978 l_join_cndn:= ' AND (x.frcst_vrsn,x.mfg_org_cd,x.rtl_org_cd,
1979 x.org_bsns_unit_id, x.day_cd, x.glbl_item_id, x.rtl_sku_item_id) IN(SELECT
1980 MAX(frcst_vrsn), mfg_org_cd, rtl_org_cd, org_bsns_unit_id, day_cd,
1981 glbl_item_id, rtl_sku_item_id FROM ddr_b_sls_frcst_item_day GROUP BY
1982 mfg_org_cd, rtl_org_cd, org_bsns_unit_id, day_cd, glbl_item_id,
1983 rtl_sku_item_id)';
1984 --bug 6905930 change end
1985 END IF;
1986 x_oth_join_codn := l_join_cndn;
1987 EXCEPTION
1988 WHEN NO_DATA_FOUND THEN
1989 x_return_status := ddr_webservices_constants.g_ret_sts_error;
1990 x_msg_count := 1;
1991 x_msg_data := 'No data found. Error Code' ||sqlcode||' Error
1992 message:'||sqlerrm;
1993 WHEN OTHERS THEN
1994 x_return_status:=ddr_webservices_constants.g_ret_sts_unexp_error;
1995 x_msg_count:=1;
1996 x_msg_data:='Unexpected Error. Error code:'||sqlcode||' Error message:
1997 '||sqlerrm;
1998 END get_other_join_conditions;
1999 --Bug 6880404 change end
2000
2001 END ddr_webservices_pub;