[Home] [Help]
PACKAGE BODY: APPS.CN_PURGE_TABLES_PUB
Source
1 PACKAGE BODY CN_PURGE_TABLES_PUB AS
2 /* $Header: CNPTPRGB.pls 120.0.12010000.4 2010/06/17 05:03:18 sseshaiy noship $*/
3
4 G_PKG_NAME CONSTANT VARCHAR2(30) := 'CN_PURGE_TABLES_PUB';
5 G_FILE_NAME CONSTANT VARCHAR2(12) := 'CNPTPRGB.pls';
6 g_cn_debug VARCHAR2(1) := fnd_profile.value('CN_DEBUG');
7 g_error_msg VARCHAR2(100) := ' is a required field. Please enter proper value for it.';
8 g_script_name CONSTANT VARCHAR2(30) := 'CNPTPRGBT1.0';
9 g_request_id NUMBER := fnd_global.conc_request_id;
10
11
12
13 PROCEDURE debugmsg
14 (
15 msg VARCHAR2
16 )
17 IS
18 BEGIN
19 --g_cn_debug := 'Y';
20 IF g_cn_debug = 'Y' THEN
21 cn_message_pkg.debug
22 (
23 SUBSTR(msg,1,254)
24 )
25 ;
26 fnd_file.put_line
27 (
28 fnd_file.Log, msg
29 )
30 ; -- Bug fix 5125980
31 END IF;
32 -- comment out dbms_output before checking in file
33 -- dbms_output.put_line(substr(msg,1,254));
34 END debugmsg;
35
36 PROCEDURE parent_conc_wait(
37 l_child_program_id_tbl IN OUT NOCOPY sub_program_id_type
38 , retcode OUT NOCOPY VARCHAR2
39 , errbuf OUT NOCOPY VARCHAR2
40
41 )
42 IS
43
44 call_status BOOLEAN;
45
46 l_req_id NUMBER;
47
48 l_phase VARCHAR2(100);
49 l_status VARCHAR2(100);
50 l_dev_phase VARCHAR2(100);
51 l_dev_status VARCHAR2(100);
52 l_message VARCHAR2(2000);
53
54 child_proc_fail_exception EXCEPTION;
55 BEGIN
56 debugmsg('CN_PURGE_TABLES_PUB.Parent Process starts Waiting For Child
57 Processes to complete');
58
59 FOR l_child_program_id IN l_child_program_id_tbl.FIRST..l_child_program_id_tbl.LAST
60 LOOP
61
62 call_status :=
63 FND_CONCURRENT.get_request_status(
64 l_child_program_id_tbl(l_child_program_id), '', '',
65 l_phase, l_status, l_dev_phase,
66 l_dev_status, l_message);
67
68 debugmsg('CN_PURGE_TABLES_PUB. Request '||l_child_program_id_tbl(l_child_program_id)
69 ||' l_dev_phase '||l_dev_phase||' l_dev_status ');
70
71 WHILE l_dev_phase <> 'COMPLETE'
72 LOOP
73
74 call_status :=
75 FND_CONCURRENT.get_request_status(
76 l_child_program_id_tbl(l_child_program_id), '', '',
77 l_phase, l_status, l_dev_phase,
78 l_dev_status, l_message);
79
80 debugmsg('CN_PURGE_TABLES_PUB. Request '||l_child_program_id_tbl(l_child_program_id)
81 ||' l_dev_phase '||l_dev_phase||' l_dev_status. Parent Process going to sleep for 10 seconds. ');
82
83 dbms_lock.sleep(10);
84
85 END LOOP;
86
87
88 IF l_dev_status = 'ERROR'
89 THEN
90 retcode := 2;
91 errbuf := l_message;
92 raise child_proc_fail_exception;
93 END IF;
94
95 END LOOP;
96 EXCEPTION
97 WHEN child_proc_fail_exception
98 THEN
99 retcode := 2;
100 debugmsg('CN_PURGE_TABLES_PUB.archive_purge_cn_tables.Child Proc Failed exception');
101 debugmsg('CN_PURGE_TABLES_PUB : SQLCODE : ' || SQLCODE);
102 debugmsg('CN_PURGE_TABLES_PUB : SQLERRM : ' || SQLERRM);
103 WHEN OTHERS THEN
104 debugmsg('CN_PURGE_TABLES_PUB : Unexpected exception in archive_purge_cn_tables');
105 debugmsg('CN_PURGE_TABLES_PUB : SQLCODE : ' || SQLCODE);
106 debugmsg('CN_PURGE_TABLES_PUB : SQLERRM : ' || SQLERRM);
107 retcode := 2;
108 errbuf := 'CN_PURGE_TABLES_PUB.archive_purge_cn_tables.exception.others';
109
110 END parent_conc_wait;
111
112
113 -- API name : archive_purge_cn_tables
114 -- Type : public.
115 -- Pre-reqs :
116 PROCEDURE archive_purge_cn_tables
117 (
118 errbuf OUT NOCOPY VARCHAR2,
119 retcode OUT NOCOPY VARCHAR2,
120 p_run_mode IN VARCHAR2,
121 p_start_period_name IN VARCHAR2,
122 p_end_period_name IN VARCHAR2,
123 p_org_id IN NUMBER,
124 p_table_space IN VARCHAR2,
125 p_no_of_workers IN NUMBER,
126 p_worker_id IN NUMBER,
127 p_batch_size IN NUMBER
128 )
129 IS
130
131 CURSOR get_start_period_id
132 IS
133 SELECT period_id
134 FROM cn_periods
135 WHERE period_name = p_start_period_name
136 AND org_id = p_org_id AND closing_status in ('C', 'P') ;
137
138 CURSOR get_end_period_id
139 IS
140 SELECT period_id
141 FROM cn_periods
142 WHERE period_name = p_end_period_name
143 AND org_id = p_org_id AND closing_status in ('C', 'P') ;
144
145 l_api_name CONSTANT VARCHAR2(30) := 'purge_cn_tables';
146 l_api_version CONSTANT NUMBER :=1.0;
147 l_init_msg_list VARCHAR2(10) := FND_API.G_FALSE;
148 l_start_period_id NUMBER := -1;
149 l_end_period_id NUMBER := -1;
150 l_error_msg VARCHAR(240);
151 l_time VARCHAR2(20);
152 l_table_space VARCHAR2(30);
153 x_msg_count NUMBER;
154 x_msg_data VARCHAR2(2000);
155 x_return_status VARCHAR2(1);
156 l_req_id NUMBER;
157 l_child_program_id_tbl sub_program_id_type;
158 child_proc_fail_exception EXCEPTION;
159
160 BEGIN
161 retcode := '0';
162 errbuf := 'S';
163 x_msg_count := 0;
164 x_msg_data := ':';
165 x_return_status := 'S';
166 l_error_msg := '';
167
168 SELECT TO_CHAR(sysdate,'dd-mm-rr:hh:mi:ss') INTO l_time FROM dual;
169
170 debugmsg('CN_PURGE_TABLES_PUB.archive_purge_cn_tables: START l_time ' || l_time );
171 debugmsg('CN_PURGE_TABLES_PUB.archive_purge_cn_tables: x_org_id: ' || p_org_id);
172 debugmsg('CN_PURGE_TABLES_PUB.archive_purge_cn_tables: x_start_period_name: ' || p_start_period_name);
173 debugmsg('CN_PURGE_TABLES_PUB.archive_purge_cn_tables: x_end_period_name: ' || p_end_period_name);
174 debugmsg('CN_PURGE_TABLES_PUB.archive_purge_cn_tables: p_run_mode: ' || p_run_mode);
175 debugmsg('CN_PURGE_TABLES_PUB.archive_purge_cn_tables: p_no_of_workers: ' || p_no_of_workers);
176 debugmsg('CN_PURGE_TABLES_PUB.archive_purge_cn_tables: p_worker_id: ' || p_worker_id);
177 debugmsg('CN_PURGE_TABLES_PUB.archive_purge_cn_tables: p_batch_size: ' || p_batch_size);
178 debugmsg('CN_PURGE_TABLES_PUB.archive_purge_cn_tables: p_table_space: ' || p_table_space);
179 debugmsg('CN_PURGE_TABLES_PUB.archive_purge_cn_tables: g_cn_debug: ' || g_cn_debug);
180
181 -- Standard call to check for call compatibility.
182 IF NOT FND_API.Compatible_API_Call ( l_api_version , l_api_version , l_api_name , G_PKG_NAME ) THEN
183 debugmsg('CN_PURGE_TABLES_PUB.purge_cn_tables api: Not Compatible_API_Call ');
184 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
185 END IF;
186 -- Initialize message list if p_init_msg_list is set to TRUE.
187 IF FND_API.to_Boolean( l_init_msg_list ) THEN
188 FND_MSG_PUB.initialize;
189 END IF;
190
191 -- Initialize API return status to success
192 x_return_status := FND_API.G_RET_STS_SUCCESS;
193
194 IF(p_org_id is null) THEN
195 l_error_msg := 'p_org_id' || g_error_msg;
196 debugmsg('CN_PURGE_TABLES_PUB.archive_purge_cn_tables: l_error_msg: ' || l_error_msg);
197 fnd_message.set_name('CN', 'CN_AP_REQ_FIELD_NOT_SET_ERROR');
198 fnd_message.set_token('FIELD','p_org_id');
199 fnd_msg_pub.add;
200 RAISE CN_PURGE_REQ_FIELD_NOT_SET_ER;
201 END IF;
202
203 mo_global.set_policy_context('S',p_org_id);
204
205 IF(p_start_period_name is null) THEN
206 l_error_msg := 'p_start_period_name' || g_error_msg;
207 debugmsg('CN_PURGE_TABLES_PUB.archive_purge_cn_tables: l_error_msg: ' || l_error_msg);
208 fnd_message.set_name('CN', 'CN_AP_REQ_FIELD_NOT_SET_ERROR');
209 fnd_message.set_token('FIELD','p_start_period_name');
210 fnd_msg_pub.add;
211 RAISE CN_PURGE_REQ_FIELD_NOT_SET_ER;
212 END IF;
213
214 IF(p_end_period_name is null) THEN
215 l_error_msg := 'p_end_period_name' || g_error_msg;
216 debugmsg('CN_PURGE_TABLES_PUB.archive_purge_cn_tables: l_error_msg: ' || l_error_msg);
217 fnd_message.set_name('CN', 'CN_AP_REQ_FIELD_NOT_SET_ERROR');
218 fnd_message.set_token('FIELD','p_end_period_name');
219 fnd_msg_pub.add;
220 RAISE CN_PURGE_REQ_FIELD_NOT_SET_ER;
221 END IF;
222
223 OPEN get_start_period_id; -- open the cursor
224 FETCH get_start_period_id INTO l_start_period_id; -- fetch data into local variables
225 CLOSE get_start_period_id;
226
227 OPEN get_end_period_id; -- open the cursor
228 FETCH get_end_period_id INTO l_end_period_id; -- fetch data into local variables
229 CLOSE get_end_period_id;
230
231 debugmsg('CN_PURGE_TABLES_PUB.archive_purge_cn_tables: l_start_period_id: ' || l_start_period_id);
232 debugmsg('CN_PURGE_TABLES_PUB.archive_purge_cn_tables: l_end_period_id: ' || l_end_period_id);
233
234 --Mandatory fields validation starts here
235 IF(l_start_period_id = -1) THEN
236 l_error_msg := 'Start Period Id calculation error: Please enter proper values for p_start_period_name and p_org_d';
237 debugmsg('CN_PURGE_TABLES_PUB.archive_purge_cn_tables: l_error_msg: ' || l_error_msg);
238 fnd_message.set_name('CN', 'CN_AP_REQ_FIELD_NOT_SET_ERROR');
239 fnd_message.set_token('FIELD','p_start_period_name');
240 fnd_msg_pub.add;
241 RAISE CN_PURGE_REQ_FIELD_NOT_SET_ER;
242 END IF;
243
244 IF(l_end_period_id = -1) THEN
245 l_error_msg := 'End Period Id calculation error: Please enter proper values for p_end_period_name and p_org_d';
246 debugmsg('CN_PURGE_TABLES_PUB.archive_purge_cn_tables: l_error_msg: ' || l_error_msg);
247 fnd_message.set_name('CN', 'CN_AP_REQ_FIELD_NOT_SET_ERROR');
248 fnd_message.set_token('FIELD','p_end_period_name');
249 fnd_msg_pub.add;
250 RAISE CN_PURGE_REQ_FIELD_NOT_SET_ER;
251 END IF;
252
253 IF(p_run_mode <> 'A' and p_run_mode <> 'P') THEN
254 l_error_msg := 'p_run_mode' || g_error_msg;
255 debugmsg('CN_PURGE_TABLES_PUB.archive_purge_cn_tables: l_error_msg: ' || l_error_msg);
256 fnd_message.set_name('CN', 'CN_AP_REQ_FIELD_NOT_SET_ERROR');
257 fnd_message.set_token('FIELD','p_run_mode');
258 fnd_msg_pub.add;
259 RAISE CN_PURGE_REQ_FIELD_NOT_SET_ER;
260 END IF;
261
262 IF(p_run_mode = 'P') THEN
263 IF(p_no_of_workers is null or p_no_of_workers < 1) THEN
264 l_error_msg := 'p_no_of_workers' || g_error_msg;
265 debugmsg('CN_PURGE_TABLES_PUB.archive_purge_cn_tables: l_error_msg: ' || l_error_msg);
266 fnd_message.set_name('CN', 'CN_AP_REQ_FIELD_NOT_SET_ERROR');
267 fnd_message.set_token('FIELD','p_no_of_workers (Expected value between 1 and 10)');
268 fnd_msg_pub.add;
269 RAISE CN_PURGE_REQ_FIELD_NOT_SET_ER;
270 END IF;
271
272 IF(p_worker_id is null or p_worker_id <= 0) THEN
273 l_error_msg := 'p_worker_id' || g_error_msg;
274 debugmsg('CN_PURGE_TABLES_PUB.archive_purge_cn_tables: l_error_msg: ' || l_error_msg);
275 fnd_message.set_name('CN', 'CN_AP_REQ_FIELD_NOT_SET_ERROR');
276 fnd_message.set_token('FIELD','p_worker_id (Expected value > 0)');
277 fnd_msg_pub.add;
278 RAISE CN_PURGE_REQ_FIELD_NOT_SET_ER;
279 END IF;
280
281 IF(p_batch_size is null or p_batch_size <= 0) THEN
282 l_error_msg := 'p_batch_size' || g_error_msg;
283 debugmsg('CN_PURGE_TABLES_PUB.archive_purge_cn_tables: l_error_msg: ' || l_error_msg);
284 fnd_message.set_name('CN', 'CN_AP_REQ_FIELD_NOT_SET_ERROR');
285 fnd_message.set_token('FIELD','p_batch_size (Expected value > 0)');
286 fnd_msg_pub.add;
287 RAISE CN_PURGE_REQ_FIELD_NOT_SET_ER;
288 END IF;
289 END IF;
290
291 IF(p_run_mode = 'P' and p_no_of_workers > 1) THEN
292
293
294
295 CN_PURGE_TABLES_PVT.audit_purge_cn_tables ( p_run_mode => p_run_mode,
296 p_start_period_id => l_start_period_id,
297 p_end_period_id => l_end_period_id,
298 p_org_id => p_org_id,
299 p_worker_id => p_worker_id,
300 p_no_of_workers => p_no_of_workers,
301 p_batch_size => p_batch_size,
302 x_msg_count => x_msg_count,
303 x_msg_data => x_msg_data,
304 x_return_status => x_return_status );
305
306 l_child_program_id_tbl := sub_program_id_type();
307
308 FOR idx in 1 .. p_no_of_workers LOOP
309
310
311 debugmsg('CN_PURGE_TABLES_PUB.archive_purge_cn_tables: Submit Worker number : ' || idx);
312
313 l_req_id := FND_REQUEST.SUBMIT_REQUEST('CN', -- Application
314 'CN_PURGE_PARALLEL' , -- Concurrent Program
315 '', -- description
316 '', -- start time
317 FALSE -- sub request flag
318 ,p_run_mode
319 ,l_start_period_id
320 ,l_end_period_id
321 ,p_no_of_workers
322 ,p_org_id
323 ,'NONE'
324 ,idx
325 ,p_batch_size
326 ,g_request_id
327 );
328 commit;
329
330 debugmsg('CN_PURGE_TABLES_PUB.archive_purge_cn_tables: Submit Worker number : ' || idx || ' l_req_id : '
331 || l_req_id);
332
333
334 IF l_req_id = 0 THEN
335 retcode := 2;
336 errbuf := fnd_message.get;
337 raise child_proc_fail_exception;
338 ELSE
339 -- storing the request ids in an array
340 l_child_program_id_tbl.EXTEND;
341 l_child_program_id_tbl(l_child_program_id_tbl.LAST):=l_req_id;
342 END IF;
343 END LOOP;
344
345 debugmsg('CN_PURGE_TABLES_PUB.archive_purge_cn_tables:Parent Process starts Waiting For Purge
346 Child Processes to complete');
347
348 parent_conc_wait(l_child_program_id_tbl,retcode,errbuf);
349
350 COMMIT;
351
352 /*CN_PURGE_TABLES_PVT.archive_purge_cn_tables
353 (
354 errbuf => errbuf,
355 retcode => retcode,
356 p_run_mode => p_run_mode,
357 p_start_period_id => l_start_period_id,
358 p_end_period_id => l_end_period_id,
359 p_no_of_workers => p_no_of_workers,
360 p_org_id => p_org_id,
361 p_table_space => p_table_space,
362 p_worker_id => p_worker_id,
363 p_batch_size => p_batch_size,
364 p_request_id => g_request_id,
365 x_msg_count => x_msg_count,
366 x_msg_data => x_msg_data,
367 x_return_status => x_return_status) ;*/
368
369
370
371 ELSE
372 CN_PURGE_TABLES_PVT.archive_purge_cn_tables
373 (
374 errbuf => errbuf,
375 retcode => retcode,
376 p_run_mode => p_run_mode,
377 p_start_period_id => l_start_period_id,
378 p_end_period_id => l_end_period_id,
379 p_no_of_workers => p_no_of_workers,
380 p_org_id => p_org_id,
381 p_table_space => p_table_space,
382 p_worker_id => p_worker_id,
383 p_batch_size => p_batch_size,
384 p_request_id => g_request_id) ;
385 END IF;
386 SELECT TO_CHAR(sysdate,'dd-mm-rr:hh:mi:ss') INTO l_time FROM dual;
387
388 debugmsg('CN_PURGE_TABLES_PUB.archive_purge_cn_tables: x_msg_count: ' || x_msg_count);
389 debugmsg('CN_PURGE_TABLES_PUB.archive_purge_cn_tables: x_msg_data: ' || x_msg_data);
390 debugmsg('CN_PURGE_TABLES_PUB.archive_purge_cn_tables: x_return_status: ' || x_return_status);
391 debugmsg('CN_PURGE_TABLES_PUB.archive_purge_cn_tables: END l_time ' || l_time );
392
393 IF(x_return_status <> 'S') THEN
394 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
395 END IF;
396
397
398 EXCEPTION
399 WHEN CN_PURGE_REQ_FIELD_NOT_SET_ER THEN
400 x_return_status := 'F';
401 retcode := '-1';
402 --errbuf := l_error_msg;
403 debugmsg('CN_PURGE_TABLES_PUB.archive_purge_cn_tables:exception: CN_AIA_REQ_FIELD_NOT_SET_ERROR: ');
404 FND_MSG_PUB.Count_And_Get
405 (
406 p_encoded => FND_API.G_FALSE,
407 p_count => x_msg_count,
408 p_data => x_msg_data
409 );
410 debugmsg('CN_PURGE_TABLES_PUB.archive_purge_cn_tables:exception: x_msg_count: ' || x_msg_count);
411 debugmsg('CN_PURGE_TABLES_PUB.archive_purge_cn_tables:exception: x_msg_data: ' || x_msg_data);
412 errbuf := x_msg_data;
413 --raise_application_error (-20001,l_error_msg);
414 WHEN OTHERS THEN
415 ROLLBACK;
416 retcode := '-2';
417 x_return_status := 'F';
418 errbuf := x_msg_data || ' : ' || SQLERRM(SQLCODE());
419 debugmsg('CN_PURGE_TABLES_PUB.archive_purge_cn_tables:exception others: ' || errbuf);
420 --RAISE FND_API.G_EXC_ERROR;
421 raise_application_error (-20002,errbuf);
422 END archive_purge_cn_tables;
423
424 END CN_PURGE_TABLES_PUB;