DBA Data[Home] [Help]

PACKAGE BODY: APPS.FND_SOA_UTIL

Source


1 package body fnd_soa_util as
2 /* $Header: FNDSOAUB.pls 120.4.12020000.5 2013/06/08 14:53:59 vshanmug ship $ */
3 
4 /* Purge Function to delete all Data */
5 procedure delete_by_date_cp(errbuf out NOCOPY varchar2,
6                             retcode out NOCOPY varchar2,
7                             start_date in  varchar2,
8                             end_date in  varchar2,
9                             module in varchar2) is
10         v_strt_date DATE;
11         v_end_date DATE;
12         deleted_requests_count NUMBER;
13         deleted_response_count NUMBER;
14         deleted_method_count NUMBER;
15 	deleted_att_count NUMBER;
16 	deleted_error_count NUMBER;
17 	deleted_log_count NUMBER;
18         v_direction varchar2(15);
19 begin
20   FND_FILE.put_line(FND_FILE.log, 'Start Date: '||start_date);
21   FND_FILE.put_line(FND_FILE.log, 'End Date:   '||end_date);
22   FND_FILE.put_line(FND_FILE.log, 'Module:     '||module);
23 
24   v_strt_date := trunc(FND_CONC_DATE.STRING_TO_DATE(start_date),'DD');
25   v_end_date :=trunc( FND_CONC_DATE.STRING_TO_DATE(end_date),'DD');
26   v_end_date := v_end_date +1;
27   IF(v_strt_date is NULL) then
28      errbuf := 'Unexpected error converting character string to date:'
29                    ||start_date;
30      retcode := '2';
31      FND_FILE.put_line(FND_FILE.log,errbuf);
32      RETURN;
33   END IF;
34   IF(v_end_date is NULL) then
35      errbuf := 'Unexpected error converting character string to date:'
36                    ||end_date;
37      retcode := '2';
38      FND_FILE.put_line(FND_FILE.log,errbuf);
39      RETURN;
40   END IF;
41 
42   if (module = 'INVOKER') then
43     v_direction := 'OUTBOUND';
44   elsif (module is null or module = 'PROVIDER') then
45     v_direction := 'INBOUND';
46   end if;
47 
48   /* Purge Function to delete obsoleted Log Data */
49   deleted_log_count := delete_log_by_date_range(v_strt_date,v_end_date, v_direction);
50   FND_FILE.put_line(FND_FILE.log, 'Records purged in FND_LOG_MESSAGES - '||deleted_log_count);
51 
52   /* Purge Function to delete all requests Data */
53   deleted_requests_count := delete_requests_by_date_range(v_direction,v_strt_date,v_end_date);
54   FND_FILE.put_line(FND_FILE.log, 'Records purged in FND_SOA_REQUEST - '||deleted_requests_count);
55 
56   /* Purge Function to delete all method Data */
57   deleted_method_count := delete_method_by_date_range(v_strt_date,v_end_date);
58   FND_FILE.put_line(FND_FILE.log, 'Records purged in FND_SOA_RESPONSE_METHOD - '||deleted_method_count);
59 
60   /* Purge Function to delete all attachment Data */
61   deleted_att_count := delete_att_by_date_range(v_strt_date,v_end_date);
62   FND_FILE.put_line(FND_FILE.log, 'Records purged in FND_SOA_ATTACHMENT - '||deleted_att_count);
63 
64   /* Purge Function to delete all attachment body Data */
65   deleted_att_count := delete_body_by_date_range(v_strt_date,v_end_date);
66   FND_FILE.put_line(FND_FILE.log, 'Records purged in FND_SOA_BODY_PIECE - '||deleted_att_count);
67 
68   /* Purge Function to delete all Error Data */
69   deleted_error_count := delete_error_by_date_range(v_strt_date,v_end_date);
70   FND_FILE.put_line(FND_FILE.log, 'Records purged in FND_SOA_RUNTIME_ERROR - '||deleted_error_count);
71 
72   errbuf := '';
73   retcode := '0';
74 
75 end delete_by_date_cp;
76 
77 
78 /* Purge Function to delete all requests Data */
79 FUNCTION delete_requests_by_date_range(
80          x_direction IN VARCHAR2,
81          x_start_date IN DATE,
82          x_end_date IN DATE) return NUMBER is
83   rowcount number := 0;
84   temp_rowcount number := 0;
85 BEGIN
86  LOOP
87   BEGIN
88 
89     DELETE FROM  FND_SOA_REQUEST
90     WHERE message_id IN
91 	(SELECT WR.message_id
92        	 FROM FND_SOA_REQUEST WR
93 	 WHERE (x_start_date IS NOT NULL and x_end_date IS NOT NULL)
94          AND x_start_date <= WR.request_timestamp
95          AND x_end_date >= WR.request_timestamp)
96     AND nvl(direction, 'INBOUND') = x_direction
97     AND request_status <> 'IN_PROCESS'
98     AND rownum <= 20000;
99 
100     temp_rowcount := SQL%ROWCOUNT;
101     COMMIT;
102     rowcount := rowcount + temp_rowcount;
103     EXIT WHEN (temp_rowcount = 0);
104 
105     EXCEPTION
106       WHEN NO_DATA_FOUND THEN
107         NULL; /* Should never happen */
108       WHEN OTHERS THEN
109         IF ((SQLCODE = 60) or (SQLCODE = 4020)) then
110           NULL;  /* Ignore rows that are deadlocked */
111         ELSE
112           RAISE;
113         END IF;
114      END;
115   END LOOP;
116   fnd_file.put_line(fnd_file.output,'Deleted '|| rowcount ||' rows from FND_SOA_REQUEST ');
117   RETURN rowcount;
118 
119 END;
120 
121 /* Purge Function to delete all method Data */
122 FUNCTION delete_method_by_date_range(
123          x_start_date IN DATE,
124          x_end_date IN DATE) return NUMBER is
125   rowcount number := 0;
126   temp_rowcount number := 0;
127 BEGIN
128  LOOP
129   BEGIN
130 
131      DELETE FROM FND_SOA_RESPONSE_METHOD
132      WHERE message_id NOT IN
133             (SELECT message_id FROM FND_SOA_REQUEST)
134      AND rownum <= 20000;
135 
136     temp_rowcount := SQL%ROWCOUNT;
137     COMMIT;
138     rowcount := rowcount + temp_rowcount;
139     EXIT WHEN (temp_rowcount = 0);
140 
141     EXCEPTION
142       WHEN NO_DATA_FOUND THEN
143         NULL; /* Should never happen */
144       WHEN OTHERS THEN
145         IF ((SQLCODE = 60) or (SQLCODE = 4020)) then
146           NULL;  /* Ignore rows that are deadlocked */
147         ELSE
148           RAISE;
149         END IF;
150      END;
151   END LOOP;
152   fnd_file.put_line(fnd_file.output,
153 			'Deleted '|| rowcount ||' rows from FND_SOA_RESPONSE_METHOD ');
154   RETURN rowcount;
155 END;
156 
157 
158 /* Purge Function to delete all attachment Data */
159 FUNCTION delete_att_by_date_range(
160          x_start_date IN DATE,
161          x_end_date IN DATE) return NUMBER is
162   rowcount number := 0;
163   temp_rowcount number := 0;
164 BEGIN
165  LOOP
166   BEGIN
167 
168     DELETE FROM FND_SOA_ATTACHMENT WA
169     WHERE message_id NOT IN
170 	(SELECT message_id FROM FND_SOA_REQUEST)
171     AND rownum <= 20000;
172 
173     temp_rowcount := SQL%ROWCOUNT;
174     COMMIT;
175     rowcount := rowcount + temp_rowcount;
176     EXIT WHEN (temp_rowcount = 0);
177     EXCEPTION
178       WHEN NO_DATA_FOUND THEN
179         NULL; /* Should never happen */
180       WHEN OTHERS THEN
181         IF ((SQLCODE = 60) or (SQLCODE = 4020)) then
182           NULL;  /* Ignore rows that are deadlocked */
183         ELSE
184           RAISE;
185         END IF;
186     END;
187    END LOOP;
188   fnd_file.put_line(fnd_file.output,
189 			'Deleted '|| rowcount ||' rows from FND_SOA_ATTACHMENT');
190   RETURN rowcount;
191 END;
192 
193 
194 
195 /* Purge Function to delete all attachment body Data */
196 FUNCTION delete_body_by_date_range(
197          x_start_date IN DATE,
198          x_end_date IN DATE) return NUMBER is
199   rowcount number := 0;
200   temp_rowcount number := 0;
201 BEGIN
202  LOOP
203    BEGIN
204 
205    DELETE
206      FROM FND_SOA_BODY_PIECE WP
207      WHERE (message_id NOT IN
208              (SELECT message_id FROM FND_SOA_REQUEST))
209      AND rownum <= 20000;
210 
211    temp_rowcount := SQL%ROWCOUNT;
212    COMMIT;
213    rowcount := rowcount + temp_rowcount;
214    EXIT WHEN (temp_rowcount = 0);
215 
216    EXCEPTION
217      WHEN NO_DATA_FOUND THEN
218 	NULL; /* Should never happen */
219      WHEN OTHERS THEN
220 	IF ((SQLCODE = 60) or (SQLCODE = 4020)) then
221 	   NULL;  /* Ignore rows that are deadlocked */
222 	ELSE
223 	   RAISE;
224 	END IF;
225    END;
226   END LOOP;
227   fnd_file.put_line(fnd_file.output,
228 			'Deleted '|| rowcount ||' rows from FND_SOA_BODY_PIECE');
229   RETURN rowcount;
230 END;
231 
232 /* Purge function to delete all Error Data */
233 FUNCTION delete_error_by_date_range(
234 		x_start_date IN DATE,
235 		x_end_date IN DATE) return NUMBER is
236 	rowcount number := 0;
237 	temp_rowcount number := 0;
238 BEGIN
239   LOOP
240     BEGIN
241 
242 	DELETE FROM FND_SOA_RUNTIME_ERROR RE
243 	WHERE (message_id NOT IN
244 	      (SELECT message_id FROM FND_SOA_REQUEST))
245         AND rownum <= 20000;
246 
247         temp_rowcount := SQL%ROWCOUNT;
248         COMMIT;
249         rowcount := rowcount + temp_rowcount;
250         EXIT WHEN (temp_rowcount = 0);
251 
252 	EXCEPTION
253 	WHEN NO_DATA_FOUND THEN
254             NULL; /* Should never happen */
255 	WHEN OTHERS THEN
256             IF ((SQLCODE = 60) or (SQLCODE = 4020)) then
257 	        NULL;  /* Ignore rows that are deadlocked */
258             ELSE
259 		RAISE;
260 	    END IF;
261         END;
262   END LOOP;
263   fnd_file.put_line(fnd_file.output,
264 			'Deleted '|| rowcount ||' rows from FND_SOA_RUNTIME_ERROR');
265   RETURN rowcount;
266 END;
267 
268 /* Purge function to delete all Log Data */
269 FUNCTION delete_log_by_date_range(
270 		x_start_date IN DATE,
271 		x_end_date IN DATE,
272                 x_direction in varchar2) return NUMBER is
273 	rowcount number := 0;
274 	temp_rowcount number := 0;
275 BEGIN
276   LOOP
277    BEGIN
278 
279      DELETE from fnd_log_messages
280      where transaction_context_id in
281      (select transaction_context_id
282       from fnd_log_transaction_context
283       where transaction_type = 'SOA_INSTANCE'
284       and transaction_id in
285           (select message_id
286            from fnd_soa_request
287            where REQUEST_STATUS = 'SUCCESS'
288            and x_start_date <= REQUEST_TIMESTAMP
289            AND x_end_date >= REQUEST_TIMESTAMP
290            AND direction = x_direction))
291       AND rownum <= 20000;
292 
293      temp_rowcount := SQL%ROWCOUNT;
294      COMMIT;
295 
296      rowcount := rowcount + temp_rowcount;
297      EXIT WHEN (temp_rowcount = 0);
298 
299      EXCEPTION
300         WHEN OTHERS THEN
301            IF ((SQLCODE = 60) or (SQLCODE = 4020) OR (SQLCODE = 1722)) then
302 	       NULL;  /* Ignore rows that are deadlocked */
303            ELSE
304                RAISE;
305         END IF;
306      END;
307   END LOOP;
308   fnd_file.put_line(fnd_file.output,
309 			'Deleted '|| rowcount ||' rows from FND_LOG_MESSAGES');
310   RETURN rowcount;
311 END;
312 
313 /* Purge Function to Delete Log Details by Message ID */
314 FUNCTION delete_log_by_instance_id(
315 	x_instance_id IN NUMBER) return NUMBER is
316 	rowcount number := 0;
317 	temp_rowcount number := 0;
318 BEGIN
319   LOOP
320     BEGIN
321 
322 	DELETE
323             from fnd_log_messages
324 	    where transaction_context_id in
325 	    (select transaction_context_id
326 	         from fnd_log_transaction_context
327 		 where transaction_type = 'SOA_INSTANCE'
328 		 and transaction_id = x_instance_id) and rownum <= 20000;
329 	temp_rowcount := SQL%ROWCOUNT;
330         COMMIT;
331         rowcount := rowcount + temp_rowcount;
332         EXIT WHEN (temp_rowcount = 0);
333 
334         EXCEPTION
335 	WHEN NO_DATA_FOUND THEN
336             NULL; /* Should never happen */
337 	WHEN OTHERS THEN
338             IF ((SQLCODE = 60) or (SQLCODE = 4020)) then
339          		NULL;  /* Ignore rows that are deadlocked */
340             ELSE
341              	RAISE;
342             END IF;
343         END;
344    END LOOP;
345    RETURN rowcount;
346  END;
347 
348 
349 end  fnd_soa_util;