DBA Data[Home] [Help]

PACKAGE BODY: APPS.ISC_EDW_BACKLOGS_F_P

Source


1 PACKAGE BODY ISC_EDW_BACKLOGS_F_P AS
2 /* $Header: ISCF01PB.pls 115.5 2004/02/26 00:18:48 scheung ship $*/
3 
4 g_dummy         VARCHAR2(30);
5 g_dummy_int     NUMBER;
6 cid             NUMBER;
7 g_errbuf 	VARCHAR2(200) := NULL;
8 g_retcode 	NUMBER := 0;
9 l_exception_msg	VARCHAR2(2000)	:=NULL;
10 
11 CURSOR snap_c IS
12 SELECT backlog.backlogs_pk		c_pk,
13        nvl(time.cday_calendar_date,sysdate+1)	c_date
14 FROM   ISC_EDW_BACKLOGS_F		backlog,
15        EDW_TIME_M			time
16 WHERE  backlog.date_balance_fk_key = time.cday_cal_day_pk_key
17 ORDER BY 2 DESC ;
18 
19 
20 -- we wish to purge the _F table:
21 -- #1. for a date range (day level) : from_date to to_date (higher priority than #2)
22 -- #2. if any of the dates from #1 are null, any snapshot taken prior n days from sysdate
23 
24 PROCEDURE INSERT_FSTG( PK	IN VARCHAR2) IS
25 BEGIN
26 	cid := DBMS_SQL.Open_Cursor;
27 	DBMS_SQL.Parse( cid,
28 			'INSERT INTO ISC_EDW_BACKLOGS_FSTG (
29 				BASE_UOM_FK,
30 				BILL_TO_LOCATION_FK,
31 				BILL_TO_CUST_FK,
32 				CUSTOMER_FK,
33 				DATE_BALANCE_FK,
34 				DEMAND_CLASS_FK,
35 				GL_BOOK_FK,
36 				INSTANCE_FK,
37 				INV_ORG_FK,
38 				ORDER_CATEGORY_FK,
39 				OPERATING_UNIT_FK,
40 				ORDER_SOURCE_FK,
41 				ITEM_ORG_FK,
42 				TOP_MODEL_ITEM_FK,
43 				TASK_FK,
44 				SALES_CHANNEL_FK,
45 				ORDER_TYPE_FK,
46 				SALES_PERSON_FK,
47 				SHIP_TO_LOCATION_FK,
48 				SHIP_TO_CUST_FK,
49 				TRX_CURRENCY_FK,
50 				USER_FK1,
51 				USER_FK2,
52 				USER_FK3,
53 				USER_FK4,
54 				USER_FK5,
55 				BACKLOGS_PK,
56 				COLLECTION_STATUS,
57 				OPERATION_CODE)
58 			VALUES (
59 				''NA_EDW'',
60 				''NA_EDW'',
61 				''NA_EDW'',
62 				''NA_EDW'',
63 				''NA_EDW'',
64 				''NA_EDW'',
65 				''NA_EDW'',
66 				''NA_EDW'',
67 				''NA_EDW'',
68 				''NA_EDW'',
69 				''NA_EDW'',
70 				''NA_EDW'',
71 				''NA_EDW'',
72 				''NA_EDW'',
73 				''NA_EDW'',
74 				''NA_EDW'',
75 				''NA_EDW'',
76 				''NA_EDW'',
77 				''NA_EDW'',
78 				''NA_EDW'',
79 				''NA_EDW'',
80 				''NA_EDW'',
81 				''NA_EDW'',
82 				''NA_EDW'',
83 				''NA_EDW'',
84 				''NA_EDW'',
85 				'''||pk||''' ,
86 				''READY'',
87 				''DELETE'')',
88 	DBMS_SQL.Native);
89 	g_dummy_int:=DBMS_SQL.Execute(cid);
90 	DBMS_SQL.Close_Cursor(cid);
91 
92 EXCEPTION WHEN OTHERS THEN
93 	DBMS_SQL.Close_Cursor(cid);
94 	g_errbuf := sqlerrm;
95         g_retcode := -1;
96 	l_exception_msg  := g_retcode || ':' || g_errbuf;
97 	ROLLBACK;
98 	EDW_LOG.Put_Line('Other errors in Insert_Fstg : '|| l_exception_msg);
99 	RAISE;
100 
101 END INSERT_FSTG;
102 
103 
104 PROCEDURE DELETE_FACT(	Errbuf 		IN OUT NOCOPY	VARCHAR2,
105 			Retcode 	IN OUT NOCOPY	VARCHAR2,
106 			p_nb_days	IN	NUMBER,
107 			p_from_date	IN	VARCHAR2,
108 			p_to_date	IN	VARCHAR2) IS
109 
110 l_from_date	DATE	:= NULL;
111 l_to_date	DATE	:= NULL;
112 l_count		NUMBER	:= 0;
113 
114 BEGIN
115 Errbuf		:= NULL;
116 Retcode		:= '0';
117 	IF (p_from_date IS NOT NULL AND p_to_date IS NOT NULL)
118 	THEN
119 		BEGIN
120 			l_from_date := to_date(p_from_date,'YYYY/MM/DD HH24:MI:SS');
121 			l_to_date   := to_date(p_to_date, 'YYYY/MM/DD HH24:MI:SS');
122 
123 			FOR snap_rec IN snap_c
124 			LOOP
125 				IF snap_rec.c_date BETWEEN l_from_date AND l_to_date
126 				THEN
127 					BEGIN
128 					      INSERT_FSTG(snap_rec.c_pk);
129 					      l_count := l_count + 1;
130 					END;
131 				END IF;
132 			END LOOP;
133 			EDW_LOG.Put_Line('Marking '||l_count||' rows to be deleted from the Backlog Fact during next load');
134 			EDW_LOG.Put_Line('All snapshots taken between '||l_from_date||' and '||l_to_date||' will be deleted.');			COMMIT;
135 		END;
136 	ELSE
137 	BEGIN
138 		IF p_nb_days < 0
139 		THEN EDW_LOG.Put_Line('Please enter a positive number for the Number of Days');
140 		ELSE
141 		BEGIN
142 			IF p_nb_days IS NULL
143 			THEN EDW_LOG.Put_Line('All parameters are NULL,
144 please enter the following parameters :
145 
146 - both "FROM DATE" and "TO DATE", corresponding to the periode you want to PURGE,
147 or
148 - the "NUMBER OF DAYS" from today, corresponding to the period that you want to KEEP');
149 			ELSE
150 				BEGIN
151 					FOR snap_rec IN snap_c
152 					LOOP
153 						IF snap_rec.c_date < (sysdate - p_nb_days)
154 						THEN
155 							INSERT_FSTG(snap_rec.c_pk);
156 							l_count := l_count + 1;
157 						END IF;
158 					END LOOP;
159 				EDW_LOG.Put_Line('Marking '||l_count||' rows to be deleted from the Backlog Fact during next load.');
160 				EDW_LOG.Put_Line('All snapshots taken prior to '||(sysdate - p_nb_days)||' will be deleted.');
161 				END;
162 				COMMIT;
163 			END IF;
164 		END;
165 		END IF;
166 	END;
167 	END IF;
168 
169 EXCEPTION WHEN OTHERS THEN
170 	DBMS_SQL.Close_Cursor(cid);
171 	g_errbuf := sqlerrm;
172         g_retcode := -1;
173 	l_exception_msg  := g_retcode || ':' || g_errbuf;
174 	ROLLBACK;
175 	EDW_LOG.Put_Line('Other errors in Delete_Fact : '|| l_exception_msg);
176 	RAISE;
177 
178 END DELETE_FACT;
179 
180 
181 END ISC_EDW_BACKLOGS_F_P;