DBA Data[Home] [Help]

PACKAGE BODY: APPS.AZ_DELETE

Source


1 PACKAGE BODY "AZ_DELETE" AS
2 /* $Header: azdeleteb.pls 120.1.12000000.2 2007/02/23 06:32:11 lmathur noship $ */
3 COMMIT_BATCH_SIZE NUMBER;
4 v_dml_count       NUMBER := 0;
5 /**********************************************************/
6 --Procedure to delete all records irrespective to the 'source'
7 PROCEDURE delete_all(p_request_id IN NUMBER,
8           	 p_table_name IN VARCHAR2) IS
9 
10 
11 v_source_list         TYP_NEST_TAB_VARCHAR;
12 v_id_list             TYP_NEST_TAB_NUMBER;
13 
14 BEGIN
15         EXECUTE IMMEDIATE 'ALTER SESSION SET CURSOR_SHARING=''SIMILAR''';
16         COMMIT_BATCH_SIZE := FND_PROFILE.VALUE('AZ_COMMIT_ROWCOUNT');
17         COMMIT_BATCH_SIZE := COMMIT_BATCH_SIZE*2; --can take more records for deletion
18 	--gather stats on the table from which the records are to be deleted
19 	FND_STATS.GATHER_TABLE_STATS('AZ',p_table_name);
20         execute immediate 'select distinct(source) from '||p_table_name||
21                           ' where request_id='||p_request_id
22                           BULK COLLECT INTO v_source_list;
23 
24         IF v_source_list.COUNT >0 THEN
25                  FOR i IN 1 .. v_source_list.COUNT LOOP
26                      BEGIN
27                         delete_source(p_request_id,v_source_list(i),p_table_name);
28                         EXCEPTION
29 
30                        WHEN OTHERS THEN
31                             raise_application_error(-20001,
32                             'DELETE_ALL: Error while deleting records for a given source:'||v_source_list(i));
33                      END;
34                  END LOOP; -- loop
35               END IF; -- the number of distinct source > 0
36 
37         COMMIT;
38 
39 EXCEPTION
40 
41     WHEN OTHERS THEN
42      raise_application_error(-20001,
43                 'Error occurred while deleting records for request id:'||p_request_id);
44 FND_STATS.GATHER_TABLE_STATS('AZ',p_table_name);
45 END delete_all;
46 
47 
48 -- procedure to delete all the records for a given source
49 PROCEDURE delete_source(p_request_id IN NUMBER,p_source IN VARCHAR2,p_table_name IN VARCHAR2)
50 IS
51 v_id_list             TYP_NEST_TAB_NUMBER;
52 TYPE cur_type IS REF CURSOR;
53 cur_id cur_type;
54 
55 BEGIN
56     open cur_id for 'select id from '||p_table_name||
57                     ' where request_id=:1 and source=:2'
58                     USING p_request_id,p_source;
59     LOOP
60     FETCH cur_id BULK COLLECT INTO v_id_list LIMIT COMMIT_BATCH_SIZE;
61 
62     FORALL i IN 1..v_id_list.COUNT
63     execute immediate 'delete from '||p_table_name||' where
64                         request_id=:1 and source=:2 and
65                         id=:3' using p_request_id,p_source,v_id_list(i);
66     COMMIT;
67     EXIT WHEN cur_id%NOTFOUND;
68     END LOOP;
69     COMMIT;
70 
71 EXCEPTION
72     WHEN OTHERS THEN
73      raise_application_error(-20001,
74                 'Error in deletion for source:'||p_source);
75 END delete_source;
76 
77 
78 END;