DBA Data[Home] [Help]

PACKAGE BODY: APPS.CSM_ACCESS_PURGE_PKG

Source


1 PACKAGE BODY CSM_ACCESS_PURGE_PKG AS
2 /* $Header: csmeacpb.pls 120.0.12010000.1 2008/07/28 16:12:46 appldev ship $ */
3 
4 --
5 -- Purpose: Procedures to purge Invalid Acc Records
6 -- MODIFICATION HISTORY
7 -- Person      Date       Comments
8 -- TRAJASEK    28MAy07    Initial Revision
9 -- ---------   ------     ------------------------------------------
10 
11 /*** Globals ***/
12 /**/
13 PROCEDURE DELETE_NON_ACC_MFS_TABLE
14 IS
15  CURSOR c_csm_inv_org
16  IS
17  SELECT DISTINCT USER_ID
18  FROM   CSM_USER_INVENTORY_ORG   ACC
19  WHERE  USER_ID IS NOT NULL
20  AND NOT EXISTS (SELECT 1 FROM ASG_USER AU WHERE AU.USER_ID=ACC.USER_ID
21                   AND AU.ENABLED= 'Y');
22 
23  CURSOR c_csl_inv_org
24  IS
25  SELECT DISTINCT RESOURCE_ID
26  FROM   CSL_RESOURCE_INVENTORY_ORG   ACC
27  WHERE  RESOURCE_ID IS NOT NULL
28  AND NOT EXISTS (SELECT 1 FROM ASG_USER AU WHERE AU.RESOURCE_ID=ACC.RESOURCE_ID
29                   AND AU.ENABLED= 'Y');
30 
31 TYPE USERID_TABLE_TYPE IS TABLE OF NUMBER INDEX BY BINARY_INTEGER;
32 l_user_list      USERID_TABLE_TYPE;
33 
34 BEGIN
35   OPEN  c_csm_inv_org;
36   FETCH c_csm_inv_org BULK COLLECT INTO l_user_list;
37   CLOSE c_csm_inv_org;
38 
39     IF l_user_list.COUNT >0 THEN
40     FOR i IN 1..l_user_list.COUNT
41     LOOP
42         BEGIN
43             DELETE  FROM CSM_USER_INVENTORY_ORG WHERE USER_ID = l_user_list(i);
44         EXCEPTION
45         WHEN OTHERS THEN
46           NULL;
47         END;
48 
49     END LOOP;
50     l_user_list.DELETE;
51     END IF;
52 
53   OPEN  c_csl_inv_org;
54   FETCH c_csl_inv_org BULK COLLECT INTO l_user_list;
55   CLOSE c_csl_inv_org;
56 
57     IF l_user_list.COUNT >0 THEN
58     FOR i IN 1..l_user_list.COUNT
59     LOOP
60         BEGIN
61             DELETE  FROM CSL_RESOURCE_INVENTORY_ORG WHERE RESOURCE_ID = l_user_list(i);
62         EXCEPTION
63         WHEN OTHERS THEN
64           NULL;
65         END;
66     END LOOP;
67     l_user_list.DELETE;
68     END IF;
69 
70 END DELETE_NON_ACC_MFS_TABLE;
71 
72 PROCEDURE DELETE_ACC_FOR_USER
73 ( p_acc_table_name IN VARCHAR2
74 , p_user_id        IN NUMBER
75 ) IS
76  l_stmt    VARCHAR2(1000);
77 BEGIN
78   l_stmt := 'DELETE ' || p_acc_table_name ||' WHERE USER_ID = :P1';
79 
80   EXECUTE IMMEDIATE l_stmt USING p_user_id;
81 
82 END DELETE_ACC_FOR_USER;
83 
84 PROCEDURE DELETE_ACC_FOR_RESOURCE
85 ( p_acc_table_name IN VARCHAR2
86 , p_resource_id        IN NUMBER
87 ) IS
88  l_stmt    VARCHAR2(1000);
89 BEGIN
90   l_stmt := 'DELETE ' || p_acc_table_name ||' WHERE RESOURCE_ID = :P1';
91 
92   EXECUTE IMMEDIATE l_stmt USING p_resource_id;
93 
94 END DELETE_ACC_FOR_RESOURCE;
95 
96 PROCEDURE PURGE_INVALID_ACC_DATA(p_status  OUT NOCOPY VARCHAR2,
97                                      p_message OUT NOCOPY VARCHAR2)
98 IS
99 PRAGMA AUTONOMOUS_TRANSACTION;
100 
101   CURSOR c_csm_acc_list IS
102   SELECT ITEM_ID,
103          ACCESS_OWNER,
104          ACCESS_NAME
105   FROM   ASG_PUB_ITEM
106   WHERE  PUB_NAME IN ('SERVICEP','JTM_HANDHELD')
107   AND    ACCESS_NAME IS NOT NULL
108   AND    STATUS  = 'Y'
109   AND    ENABLED = 'Y';
110 
111   CURSOR c_csl_acc_list IS
112   SELECT ITEM_ID,
113          ACCESS_OWNER,
114          ACCESS_NAME
115   FROM   ASG_PUB_ITEM
116   WHERE  PUB_NAME IN ('JTM','SERVICEL')
117   AND    ACCESS_NAME IS NOT NULL
118   AND    STATUS  = 'Y'
119   AND    ENABLED = 'Y';
120 
121  TYPE acc_table_type    IS TABLE OF c_csm_acc_list%ROWTYPE;
122  TYPE USERID_TABLE_TYPE IS TABLE OF NUMBER INDEX BY BINARY_INTEGER;
123 
124  acc_tab_list     ACC_TABLE_TYPE;
125  l_user_list      USERID_TABLE_TYPE;
126  l_sql_stmt       VARCHAR2(1000);
127  l_sqlerrno 	  VARCHAR2(20);
128  l_sqlerrmsg	  VARCHAR2(4000);
129  l_error_msg		VARCHAR2(4000);
130 BEGIN
131 
132 --Purge records for CSM
133   OPEN   c_csm_acc_list;
134   FETCH  c_csm_acc_list BULK COLLECT INTO acc_tab_list;
135   CLOSE  c_csm_acc_list;
136   CSM_UTIL_PKG.LOG('Entering CSM_COUNTER_EVENT_PKG.COUNTER_PURGE_DATA', 'CSM_COUNTER_EVENT_PKG.COUNTER_PURGE_DATA',FND_LOG.LEVEL_EVENT);
137   FOR I IN 1..acc_tab_list.COUNT
138   LOOP
139       l_sql_stmt:= 'SELECT DISTINCT USER_ID FROM '||acc_tab_list(I).ACCESS_NAME ||
140              ' ACC WHERE USER_ID IS NOT NULL
141 			       AND NOT EXISTS (SELECT 1 FROM ASG_USER AU WHERE AU.USER_ID=ACC.USER_ID AND AU.ENABLED= ''Y'')';
142       BEGIN
143         EXECUTE IMMEDIATE l_sql_stmt BULK COLLECT INTO l_user_list;
144       EXCEPTION
145       WHEN OTHERS THEN
146           NULL;
147       END;
148       CSM_UTIL_PKG.LOG('Processing Access list', 'CSM_COUNTER_EVENT_PKG.COUNTER_PURGE_DATA',FND_LOG.LEVEL_EVENT);
149       IF l_user_list.COUNT >0 THEN
150           FOR J IN 1..l_user_list.COUNT
151           LOOP
152             DELETE_ACC_FOR_USER(acc_tab_list(I).ACCESS_NAME,l_user_list(J));
153           END LOOP;
154           COMMIT;
155           l_user_list.DELETE;
156       END IF;
157   END LOOP; --Access list loop
158 
159   CSM_UTIL_PKG.LOG('Completed processing Access list', 'CSM_COUNTER_EVENT_PKG.COUNTER_PURGE_DATA',FND_LOG.LEVEL_EVENT);
160   IF acc_tab_list.COUNT > 0 THEN
161      acc_tab_list.DELETE;
162   END IF;
163 
164 
165 --Purge records for CSL
166   OPEN   c_csl_acc_list;
167   FETCH  c_csl_acc_list BULK COLLECT INTO acc_tab_list;
168   CLOSE  c_csl_acc_list;
169   CSM_UTIL_PKG.LOG('Entering CSM_COUNTER_EVENT_PKG.COUNTER_PURGE_DATA', 'CSM_COUNTER_EVENT_PKG.COUNTER_PURGE_DATA',FND_LOG.LEVEL_EVENT);
170 
171   FOR I IN 1..acc_tab_list.COUNT
172   LOOP
173       l_sql_stmt:= 'SELECT DISTINCT RESOURCE_ID FROM '||acc_tab_list(I).ACCESS_NAME ||
174              ' ACC WHERE RESOURCE_ID IS NOT NULL
175 			       AND NOT EXISTS (SELECT 1 FROM ASG_USER AU WHERE AU.RESOURCE_ID=ACC.RESOURCE_ID AND AU.ENABLED= ''Y'')';
176       BEGIN
177         EXECUTE IMMEDIATE l_sql_stmt BULK COLLECT INTO l_user_list;
178       EXCEPTION
179       WHEN OTHERS THEN
180           NULL;
181       END;
182       CSM_UTIL_PKG.LOG('Processing Access list', 'CSM_COUNTER_EVENT_PKG.COUNTER_PURGE_DATA',FND_LOG.LEVEL_EVENT);
183 
184       IF l_user_list.COUNT >0 THEN
185           FOR J IN 1..l_user_list.COUNT
186           LOOP
187             DELETE_ACC_FOR_RESOURCE(acc_tab_list(I).ACCESS_NAME,l_user_list(J));
188           END LOOP;
189           COMMIT;
190           l_user_list.DELETE;
191       END IF;
192   END LOOP; --Access list loop
193 
194   CSM_UTIL_PKG.LOG('Completed processing Access list', 'CSM_COUNTER_EVENT_PKG.COUNTER_PURGE_DATA',FND_LOG.LEVEL_EVENT);
195   IF acc_tab_list.COUNT > 0 THEN
196      acc_tab_list.DELETE;
197   END IF;
198   --call to delete non acc mfs tables
199   DELETE_NON_ACC_MFS_TABLE;
200 
201   COMMIT;
202 
203   p_status := 'SUCCESS';
204   p_message :=  'CSM_ACCESS_PURGE_PKG.PURGE_INVALID_ACC_DATA Executed successfully';
205 
206 EXCEPTION
207   --log the error
208   WHEN OTHERS THEN
209   	l_sqlerrno := TO_CHAR(SQLCODE);
210 	l_sqlerrmsg:= SUBSTR(SQLERRM,1,2000);
211     ROLLBACK;
212     l_error_msg := ' Exception in  PURGE_INVALID_ACC_DATA'
213                        || ':' || l_sqlerrno || ':' || l_sqlerrmsg;
214     p_status := 'ERROR';
215     p_message := 'Error in CSM_ACCESS_PURGE_PKG.PURGE_INVALID_ACC_DATA: ' || l_error_msg;
216     CSM_UTIL_PKG.LOG(l_error_msg, 'CSM_ACCESS_PURGE_PKG.PURGE_INVALID_ACC_DATA',FND_LOG.LEVEL_EVENT);
217 
218 END PURGE_INVALID_ACC_DATA;
219 
220 END CSM_ACCESS_PURGE_PKG; -- of package csm_counter_event_pkg