DBA Data[Home] [Help]

PACKAGE BODY: APPS.INV_TXN_PURGE_WORKER

Source


1 PACKAGE BODY INV_TXN_PURGE_WORKER AS
2 /* $Header: INVTPGWB.pls 120.1.12000000.2 2007/02/21 23:11:53 yssingh ship $ */
3 
4 --Procedure to purge the transaction tables
5 
6 
7   PROCEDURE Txn_Purge_Worker(
8 			    x_errbuf            OUT NOCOPY VARCHAR2
9 			   ,x_retcode           OUT NOCOPY NUMBER
10                       	   ,p_organization_id   IN  NUMBER
11                      	   ,p_min_date 		IN  VARCHAR2
12  		     	   ,p_max_date          IN  VARCHAR2
13                           )
14      IS
15 
16     l_debug          NUMBER := NVL(fnd_profile.VALUE('INV_DEBUG_TRACE'), 0);
17 
18 
19     l_min_date       DATE := fnd_date.displaydate_to_date(p_min_date);
20     l_max_date       DATE := fnd_date.displaydate_to_date(p_max_date);
21 
22     l_bulk_limit     NUMBER := 2000;
23 
24     TYPE rowidtab IS TABLE OF ROWID INDEX BY BINARY_INTEGER;
25     rowid_list       rowidtab;
26 
27     TYPE tranidtab IS TABLE OF NUMBER INDEX BY BINARY_INTEGER;
28     tranid_list      tranidtab;
29 
30     l_ret boolean;
31     l_tempvar number;
32 
33     l_count number;
34     l_total_count number;
35     l_total_count1 number;
36     l_total_count2 number;
37     l_total_count3 number;
38     l_total_count4 number;
39 
40 --Bug3681437:Used the trunc cmd for transaction_date validation for all 5 cursors below
41 
42     -- bug 4951747 : removed trunc to leverage MTL_MATERIAL_TRANSACTIONS_N5 index
43 
44     -- Bug 5894075 : removed trunc from all the queries and added - (1/(24*3600)) to max date
45     CURSOR c_mmt IS
46        SELECT ROWID, TRANSACTION_ID
47        FROM     MTL_MATERIAL_TRANSACTIONS
48        WHERE    transaction_date >= l_min_date and transaction_date <= l_max_date + 1-(1/(24*3600))
49                 AND organization_id = p_organization_id;
50 
51     CURSOR c_mmta IS
52        SELECT ROWID
53        FROM     MTL_MATERIAL_TXN_ALLOCATIONS
54        WHERE    transaction_date >= l_min_date and transaction_date <= l_max_date + 1-(1/(24*3600))
55                 AND organization_id = p_organization_id;
56 
57     CURSOR c_mtlt IS
58        SELECT ROWID
59        FROM     MTL_TRANSACTION_LOT_NUMBERS
60        WHERE    transaction_date >= l_min_date and transaction_date <= l_max_date + 1-(1/(24*3600))
61                 AND organization_id = p_organization_id;
62 
63     CURSOR c_mut IS
64        SELECT ROWID
65        FROM     MTL_UNIT_TRANSACTIONS
66        WHERE    transaction_date >= l_min_date and transaction_date <= l_max_date + 1-(1/(24*3600))
67                 AND organization_id = p_organization_id;
68 
69     -- bug 4951747 : removed trunc to leverage MTL_TRANSACTION_ACCOUNTS_N5 index
70     CURSOR c_mta IS
71        SELECT ROWID
72        FROM     MTL_TRANSACTION_ACCOUNTS
73        WHERE    transaction_date >= l_min_date and transaction_date <= l_max_date + 1-(1/(24*3600))
74                 AND organization_id = p_organization_id;
75 
76 BEGIN
77 
78     SAVEPOINT PURGE_SAVEPOINT;
79 
80     IF (l_debug = 1) THEN
81     	 inv_log_util.trace('Purge Worker : OrgId='||p_organization_id||',Min_Date='||l_min_date||',Max_Date='||l_max_date,'TXN_PURGE_WORKER', 9);
82     END IF;
83 
84     --Check if max_date is less than min_date, if yes error out.
85     IF  l_max_date < l_min_date THEN
86 	    IF (l_debug = 1) THEN
87 	    	 inv_log_util.trace('Max_date cannot be less than min_date', 'TXN_PURGE_WORKER', 9);
88 	    END IF;
89             RAISE fnd_api.g_exc_error;
90     END IF;
91 
92     -- Validate the Organization passed to ensure that it has no OPEN
93     -- accounting periods for the Max_date specified
94     begin
95           SELECT 1
96               into l_tempvar
97             FROM ORG_ACCT_PERIODS
98            WHERE ORGANIZATION_ID = p_organization_id
99              AND SCHEDULE_CLOSE_DATE >= l_max_date
100              AND OPEN_FLAG = 'N' AND ROWNUM < 2;
101     exception
102        WHEN NO_DATA_FOUND THEN
103         IF (l_debug = 1) THEN
104           inv_log_util.trace('Purge Worker : Accounting Period is not closed for the Max_date','TXN_PURGE_WORKER', 9);
105         END IF;
106         l_ret := fnd_concurrent.set_completion_status('ERROR', 'Error');
107 
108         x_retcode  := 2;
109         x_errbuf   := 'Error';
110 	return;
111     end ;
112 
113     -- *************** Purge from MTL_MATERIAL_TXN_ALLOCATIONS ****************
114     l_total_count := 0;
115     OPEN c_mmta;
116     LOOP
117 	l_count := 0;
118 
119         FETCH c_mmta bulk collect INTO rowid_list limit l_bulk_limit;
120 
121 	IF rowid_list.first IS NULL THEN
122 	    IF (l_debug = 1) THEN
123     		 inv_log_util.trace('Purge Worker : No more Records to delete from MMTA','TXN_PURGE_WORKER', 9);
124 	    END IF;
125 	    EXIT;
126         END IF;
127 
128 	FORALL i IN rowid_list.first .. rowid_list.last
129 		DELETE FROM MTL_MATERIAL_TXN_ALLOCATIONS
130 		WHERE ROWID = rowid_list(i);
131 
132 	l_count := SQL%ROWCOUNT;
133 	COMMIT;
134 	l_total_count := l_total_count + l_count;
135 	EXIT WHEN c_mmta%notfound;
136     END LOOP;
137     CLOSE c_mmta;
138 
139     IF (l_debug = 1) THEN
140        inv_log_util.trace('Deleted :'||l_total_count||' rows from MMTA', 'TXN_PURGE_WORKER', 9);
141     END IF;
142 
143     -- *************** Purge from MTL_TRANSACTION_LOT_NUMBERS ******************
144     l_total_count := 0;
145     OPEN c_mtlt;
146     LOOP
147 	l_count := 0;
148 
149         FETCH c_mtlt bulk collect INTO rowid_list limit l_bulk_limit;
150 
151 	IF rowid_list.first IS NULL THEN
152 	    IF (l_debug = 1) THEN
153     		 inv_log_util.trace('Purge Worker : No more Records to delete from MTLN','TXN_PURGE_WORKER', 9);
154 	    END IF;
155 	    EXIT;
156         END IF;
157 
158 	FORALL i IN rowid_list.first .. rowid_list.last
159 		DELETE FROM MTL_TRANSACTION_LOT_NUMBERS
160 		WHERE ROWID = rowid_list(i);
161 
162 	l_count := SQL%ROWCOUNT;
163 	COMMIT;
164 	l_total_count := l_total_count + l_count;
165 	EXIT WHEN c_mtlt%notfound;
166     END LOOP;
167     CLOSE c_mtlt;
168 
169     IF (l_debug = 1) THEN
170        inv_log_util.trace('Deleted :'||l_total_count||' rows from MTLN', 'TXN_PURGE_WORKER', 9);
171     END IF;
172 
173     -- *************** Purge from MTL_UNIT_TRANSACTIONS ******************
174     l_total_count := 0;
175     OPEN c_mut;
176     LOOP
177 	l_count := 0;
178 
179         FETCH c_mut bulk collect INTO rowid_list limit l_bulk_limit;
180 
181 	IF rowid_list.first IS NULL THEN
182 	    IF (l_debug = 1) THEN
183     		 inv_log_util.trace('Purge Worker : No more Records to delete from MUT','TXN_PURGE_WORKER', 9);
184 	    END IF;
185 	    EXIT;
186         END IF;
187 
188 	FORALL i IN rowid_list.first .. rowid_list.last
189 		DELETE FROM MTL_UNIT_TRANSACTIONS
190 		WHERE ROWID = rowid_list(i);
191 
192 	l_count := SQL%ROWCOUNT;
193 	COMMIT;
194 	l_total_count := l_total_count + l_count;
195 	EXIT WHEN c_mut%notfound;
196     END LOOP;
197     CLOSE c_mut;
198 
199     IF (l_debug = 1) THEN
200        inv_log_util.trace('Deleted :'||l_total_count||' rows from MUT', 'TXN_PURGE_WORKER', 9);
201     END IF;
202 
203     -- *************** Purge from MTL_TRANSACTION_ACCOUNTS ******************
204     l_total_count := 0;
205     OPEN c_mta;
206     LOOP
207 	l_count := 0;
208 
209         FETCH c_mta bulk collect INTO rowid_list limit l_bulk_limit;
210 
211 	IF rowid_list.first IS NULL THEN
212 	    IF (l_debug = 1) THEN
213     		 inv_log_util.trace('Purge Worker : No more Records to delete from MTA','TXN_PURGE_WORKER', 9);
214 	    END IF;
215 	    EXIT;
216         END IF;
217 
218 	FORALL i IN rowid_list.first .. rowid_list.last
219 		DELETE FROM MTL_TRANSACTION_ACCOUNTS
220 		WHERE ROWID = rowid_list(i);
221 
222 	l_count := SQL%ROWCOUNT;
223 	COMMIT;
224 	l_total_count := l_total_count + l_count;
225 	EXIT WHEN c_mta%notfound;
226     END LOOP;
227     CLOSE c_mta;
228 
229     IF (l_debug = 1) THEN
230        inv_log_util.trace('Deleted :'||l_total_count||' rows from MTA', 'TXN_PURGE_WORKER', 9);
231     END IF;
232 
233 
234     -- *************** Purge from MMT and dependent tables ********************
235     l_total_count1 := 0;
236     l_total_count2 := 0;
237     l_total_count3 := 0;
238     l_total_count4 := 0;
239     l_total_count  := 0;
240 
241     OPEN c_mmt;
242     LOOP
243 
244         FETCH c_mmt bulk collect INTO rowid_list,tranid_list limit l_bulk_limit;
245 
246 	IF tranid_list.first IS NULL THEN
247 	    IF (l_debug = 1) THEN
248     		 inv_log_util.trace('Purge Worker : No more Records to delete from MMT for dependant tables','TXN_PURGE_WORKER', 9);
249 	    END IF;
250 	    EXIT;
251         END IF;
252 
253         -- *************** Purge from WIP_SCRAP_VALUES ************************
254 	l_count := 0;
255 
256 	FORALL i IN tranid_list.first .. tranid_list.last
257 		DELETE FROM WIP_SCRAP_VALUES
258 		WHERE TRANSACTION_ID = tranid_list(i);
259 
260 	l_count := SQL%ROWCOUNT;
261 	COMMIT;
262 	l_total_count1 := l_total_count1 + l_count;
263 
264         -- *************** Purge from MTL_CST_ACTUAL_COST_DETAILS ********************
265         l_count := 0;
266 
267 	FORALL i IN tranid_list.first .. tranid_list.last
268 		DELETE FROM MTL_CST_ACTUAL_COST_DETAILS
269 		WHERE TRANSACTION_ID = tranid_list(i);
270 
271 	l_count := SQL%ROWCOUNT;
272 	COMMIT;
273 	l_total_count2 := l_total_count2 + l_count;
274 
275         -- *************** Purge from MTL_CST_TXN_COST_DETAILS ********************
276         l_count := 0;
277 
278 	FORALL i IN tranid_list.first .. tranid_list.last
279 		DELETE FROM MTL_CST_TXN_COST_DETAILS
280 		WHERE TRANSACTION_ID = tranid_list(i);
281 
282 	l_count := SQL%ROWCOUNT;
283 	COMMIT;
284 	l_total_count3 := l_total_count3 + l_count;
285 
286         -- *************** Purge from MTL_ACTUAL_COST_SUBELEMENT ********************
287         l_count := 0;
288 
289 	FORALL i IN tranid_list.first .. tranid_list.last
290 		DELETE FROM MTL_ACTUAL_COST_SUBELEMENT
291 		WHERE TRANSACTION_ID = tranid_list(i);
292 
293 	l_count := SQL%ROWCOUNT;
294 	COMMIT;
295 	l_total_count4 := l_total_count4 + l_count;
296 
297         -- *************** Purge from MTL_MATERIAL_TRANSACTIONS ********************
298         l_count := 0;
299 
300 	FORALL i IN rowid_list.first .. rowid_list.last
301 		DELETE FROM MTL_MATERIAL_TRANSACTIONS
302 		WHERE ROWID = rowid_list(i);
303 
304 	l_count := SQL%ROWCOUNT;
305 	COMMIT;
306 	l_total_count := l_total_count + l_count;
307 
308         EXIT WHEN c_mmt%notfound;
309     END LOOP;
310     CLOSE c_mmt;
311 
312     IF (l_debug = 1) THEN
313 	inv_log_util.trace('Deleted :'||l_total_count1||' rows from WSV', 'TXN_PURGE_WORKER', 9);
314 	inv_log_util.trace('Deleted :'||l_total_count2||' rows from MCACD', 'TXN_PURGE_WORKER', 9);
315 	inv_log_util.trace('Deleted :'||l_total_count3||' rows from MCTCD', 'TXN_PURGE_WORKER', 9);
316 	inv_log_util.trace('Deleted :'||l_total_count4||' rows from MACS', 'TXN_PURGE_WORKER', 9);
317 	inv_log_util.trace('Deleted :'||l_total_count ||' rows from MMT', 'TXN_PURGE_WORKER', 9);
318     END IF;
319 
320     l_ret := fnd_concurrent.set_completion_status('NORMAL', 'Success');
321 
322     x_retcode  := 0;
323     x_errbuf   := 'Success';
324 
325 EXCEPTION
326   WHEN OTHERS THEN
327     IF (l_debug = 1) THEN
328        inv_log_util.trace('Error :'||substr(sqlerrm, 1, 100), 'TXN_PURGE_WORKER', 1);
329     END IF;
330 
331       IF c_mmt%ISOPEN THEN
332          CLOSE c_mmt;
333       END IF;
334 
335       IF c_mmta%ISOPEN THEN
336          CLOSE c_mmta;
337       END IF;
338 
339       IF c_mtlt%ISOPEN THEN
340          CLOSE c_mtlt;
341       END IF;
342 
343       IF c_mut%ISOPEN THEN
344          CLOSE c_mut;
345       END IF;
346 
347       IF c_mta%ISOPEN THEN
348          CLOSE c_mta;
349       END IF;
350 
351     ROLLBACK TO PURGE_SAVEPOINT;
352 
353     l_ret := fnd_concurrent.set_completion_status('ERROR', 'Error');
354 
355     x_retcode  := 2;
356     x_errbuf   := 'Error';
357 
358  END Txn_Purge_Worker;
359 
360 END INV_TXN_PURGE_WORKER;