DBA Data[Home] [Help]

PACKAGE BODY: APPS.EDW_CLEAN_OBJECT

Source


1 package body EDW_CLEAN_OBJECT as
2 /*$Header: EDWOCLNB.pls 120.1 2006/03/28 01:45:12 rkumar noship $*/
3 
4 procedure clean_up_object(
5 Errbuf out NOCOPY varchar2,
6 Retcode out NOCOPY varchar2,
7 p_object_name in varchar2,
8 p_truncate_stg in varchar2) IS
9 Begin
10   retcode:='0';
11 
12   g_object_name:=get_short_name_for_long(p_object_name);
13   if g_object_name is null then
14     errbuf:=g_status_message;
15     retcode:='2';
16     return;
17   end if;
18   g_truncate_stg:=p_truncate_stg;
19   EDW_OWB_COLLECTION_UTIL.setup_conc_program_log(g_object_name);
20   write_to_log_file('g_object_name='||g_object_name||',g_truncate_stg='||g_truncate_stg);
21   init_all;
22   if is_dimension(g_object_name) then
23     if clean_up_dimension(g_object_name)=false then
24       errbuf:=g_status_message;
25       retcode:='2';
26       return;
27     end if;
28   else
29     if clean_up_fact(g_object_name)=false then
30       errbuf:=g_status_message;
31       retcode:='2';
32       return;
33     end if;
34   end if;
35 Exception when others then
36   errbuf:=sqlerrm;
37   retcode:='2';
38 End;
39 
40 function clean_up_dimension(p_dim varchar2) return boolean is
41 Begin
42   if read_metadata(p_dim)=false then
43     return false;
44   end if;
45   if clean_dim_objects=false then
46     return false;
47   end if;
48   return true;
49 Exception when others then
50   g_status_message:=sqlerrm;
51   g_status:=false;
52   return false;
53 End;
54 
55 
56 function read_metadata(p_dim varchar2) return boolean is
57 l_stmt varchar2(10000);
58 TYPE CurTyp IS REF CURSOR;
59 cv   CurTyp;
60 l_table varchar2(400);
61 l_table_owner varchar2(30); --bug#4905343
62 l_level_tag varchar2(30);   --bug#4905343
63 Begin
64   g_dim:=p_dim;
65   g_bis_owner:=EDW_OWB_COLLECTION_UTIL.get_db_user('BIS');
66   g_dim_owner:=EDW_OWB_COLLECTION_UTIL.get_table_owner(g_dim);
67 
68   l_level_tag:='_LTC';
69 
70   l_stmt:='select syn.table_owner '||
71           ' from user_synonyms syn, edw_dimensions_md_v dim, edw_levels_md_v lvl'||
72   	  ' where dim.dim_name=:a and lvl.dim_id=dim.dim_id and syn.table_name=lvl.level_name||:b'; ----bug#4905343
73 
74   open cv for l_stmt using g_dim,l_level_tag;	  --bug#4905343
75   fetch cv into l_table_owner;
76   close cv;
77 
78   l_stmt:='select ltc.name,lstg.name,snplog.log_table from edw_tables_md_v ltc, edw_dimensions_md_v dim, '||
79    'edw_levels_md_v lvl, edw_tables_md_v lstg,all_snapshot_logs snplog,edw_pvt_map_properties_md_v map, '||
80    'user_synonyms syn '||
81    'where dim.dim_name=:a '||
82    'and lvl.dim_id=dim.dim_id and ltc.name=lvl.level_name||:b '|| --bug#4905343
83    'and map.primary_target(+)=ltc.elementid and map.primary_source=lstg.elementid(+) '||
84    'and snplog.master=ltc.name and snplog.log_owner=:c';
85 
86   write_to_log_file('going to execute '||l_stmt);
87   open cv for l_stmt using g_dim, l_level_tag,l_table_owner; --bug#4905343
88   g_number_ltc:=1;
89   loop
90     fetch cv into g_ltc_tables(g_number_ltc),g_lstg_tables(g_number_ltc),g_ltc_snplogs(g_number_ltc);
91     exit when cv%notfound;
92     g_number_ltc:=g_number_ltc+1;
93   end loop;
94   g_number_ltc:=g_number_ltc-1;
95   g_number_op_tables:=0;
96   for i in 1..g_number_ltc loop
97     g_number_op_tables:=g_number_op_tables+1;
98     l_table:=substr(g_ltc_tables(i),1,26);
99     g_op_tables(g_number_op_tables):=l_table||'OK';
100   end loop;
101   g_dim_ilog:=g_dim||'IL';
102   return true;
103 Exception when others then
104   g_status_message:=sqlerrm;
105   g_status:=false;
106   return false;
107 End;
108 
109 function clean_dim_objects return boolean is
110 l_stmt varchar2(4000);
111 l_count number;
112 Begin
113   l_stmt:='truncate table '||g_dim_owner||'.'||g_dim;
114   write_to_log_file(l_stmt);
115   if execute_stmt(l_stmt)=false then
116     null;
117   end if;
118   for i in 1..g_number_ltc loop
119     l_stmt:='truncate table '||g_dim_owner||'.'||g_ltc_tables(i);
120     write_to_log_file(l_stmt);
121     if execute_stmt(l_stmt)=false then
122       null;
123     end if;
124   end loop;
125   if g_truncate_stg='Y' then
126     for i in 1..g_number_ltc loop
127       if g_lstg_tables(i) is not null then
128         l_stmt:='truncate table '||g_dim_owner||'.'||g_lstg_tables(i);
129         write_to_log_file(l_stmt);
130         if execute_stmt(l_stmt)=false then
131           null;
132         end if;
133       end if;
134     end loop;
135   else
136     for i in 1..g_number_ltc loop
137       if g_lstg_tables(i) is not null then
138         l_stmt:='update '||g_lstg_tables(i)||' set collection_status=''READY'' where collection_status<>''READY'' '||
139         ' and rownum<=100000';
140         write_to_log_file(l_stmt);
141         loop
142           execute immediate l_stmt;
143           l_count:=sql%rowcount;
144           commit;
145           if l_count <100000 then
146             exit;
147           end if;
148         end loop;
149       end if;
150     end loop;
151   end if;
152 
153   for i in 1..g_number_ltc loop
154     if g_ltc_snplogs(i) is not null then
155       l_stmt:='truncate table '||g_dim_owner||'.'||g_ltc_snplogs(i);
156       write_to_log_file(l_stmt);
157       if execute_stmt(l_stmt)=false then
158         null;
159       end if;
160     end if;
161   end loop;
162   l_stmt:='drop table '||g_bis_owner||'.'||g_dim_ilog;
163   write_to_log_file(l_stmt);
164   if execute_stmt(l_stmt)=false then
165     null;
166   end if;
167   for i in 1..g_number_op_tables loop
168     l_stmt:='drop table '||g_bis_owner||'.'||g_op_tables(i);
169     write_to_log_file(l_stmt);
170     if execute_stmt(l_stmt)=false then
171       null;
172     end if;
173   end loop;
174   return true;
175 Exception when others then
176   g_status_message:=sqlerrm;
177   g_status:=false;
178   return false;
179 End;
180 
181 procedure write_to_log_file(p_message varchar2) is
182 Begin
183   EDW_OWB_COLLECTION_UTIL.write_to_log_file_n(p_message);
184 Exception when others then
185   null;
186 End;
187 
188 function execute_stmt(p_stmt varchar2) return boolean is
189 Begin
190   execute immediate p_stmt;
191   return true;
192 Exception when others then
193   g_status_message:=sqlerrm;
194   g_status:=false;
195   return false;
196 End;
197 
198 procedure init_all is
199 begin
200  g_status:=true;
201 End;
202 
203 function is_dimension(p_object_name varchar2) return boolean is
204 l_stmt varchar2(2000);
205 TYPE CurTyp IS REF CURSOR;
206 cv   CurTyp;
207 l_res number;
208 Begin
209   l_stmt:='select 1 from edw_dimensions_md_v where dim_name=:a';
210   write_to_log_file(l_stmt);
211   open cv for l_stmt using p_object_name;
212   fetch cv into l_res;
213   close cv;
214   if l_res=1 then
215     return true;
216   else
217     return false;
218   end if;
219 Exception when others then
220   g_status_message:=sqlerrm;
221   g_status:=false;
222   return false;
223 End;
224 
225 function read_fact_metadata(p_fact varchar2) return boolean is
226 l_stmt varchar2(10000);
227 TYPE CurTyp IS REF CURSOR;
228 cv   CurTyp;
229 l_owner varchar2(400);
230 Begin
231   g_bis_owner:=EDW_OWB_COLLECTION_UTIL.get_db_user('BIS');
232   g_dim_owner:=EDW_OWB_COLLECTION_UTIL.get_table_owner(p_fact);
233   l_stmt:='select rel.name from edw_tables_md_v rel,edw_pvt_map_properties_md_v map,edw_facts_md_v tgt '||
234   'where tgt.fact_name=:a and map.primary_target=tgt.fact_id '||
235   'and rel.elementid=map.primary_source ';
236   write_to_log_file(l_stmt);
237   open cv for l_stmt using p_fact;
238   fetch cv into g_fstg_table;
239   close cv;
240   g_fact_snplog :=EDW_OWB_COLLECTION_UTIL.get_table_snapshot_log(p_fact);
241   g_fact_dlog:=EDW_OWB_COLLECTION_UTIL.get_log_for_table(p_fact,'Delete Log');
242   if g_fact_dlog is null then
243     g_fact_dlog:=g_bis_owner||'.'||substr(g_object_name,1,26)||'DLG';
244   else
245     l_owner:=EDW_OWB_COLLECTION_UTIL.get_table_owner(g_fact_dlog);
246     g_fact_dlog:=l_owner||'.'||g_fact_dlog;
247   end if;
248   g_fact_ilog:=g_bis_owner||'.'||substr(p_fact,1,26)||'OK';
249   l_stmt:='select distinct cube_src.fact_id||''_''||cube.fact_id from edw_facts_md_v cube,edw_facts_md_v cube_src, '||
250    'edw_pvt_map_properties_md_v map where map.primary_target=cube.fact_id and map.primary_source=cube_src.fact_id  '||
251    'and cube_src.fact_name=:a';
252   g_number_ilog:=1;
253   write_to_log_file(l_stmt);
254   open cv for l_stmt using p_fact;
255   loop
256     fetch cv into g_base_fact_ilog(g_number_ilog);
257     exit when cv%notfound;
258     g_number_ilog:=g_number_ilog+1;
259   end loop;
260   g_number_ilog:=g_number_ilog-1;
261   close cv;
262   for i in 1..g_number_ilog loop
263     g_base_fact_dlog(i):=g_bis_owner||'.D'||g_base_fact_ilog(i);
264     g_base_fact_ilog(i):=g_bis_owner||'.I'||g_base_fact_ilog(i);
265   end loop;
266   l_stmt:='select distinct cube_src.fact_id||''_''||cube.fact_id from edw_facts_md_v cube,edw_facts_md_v '||
267   'cube_src, edw_pvt_map_properties_md_v map where map.primary_source=cube.fact_id and '||
268   'map.primary_target=cube_src.fact_id  '||
269   'and cube_src.fact_name=:a';
270   g_derv_number_ilog:=1;
271   write_to_log_file(l_stmt);
272   open cv for l_stmt using p_fact;
273   loop
274     fetch cv into g_derv_fact_ilog(g_derv_number_ilog);
275     exit when cv%notfound;
276     g_derv_number_ilog:=g_derv_number_ilog+1;
277   end loop;
278   g_derv_number_ilog:=g_derv_number_ilog-1;
279   close cv;
280   for i in 1..g_derv_number_ilog loop
281     g_derv_fact_dlog(i):=g_bis_owner||'.D'||g_derv_fact_ilog(i);
282     g_derv_fact_ilog(i):=g_bis_owner||'.I'||g_derv_fact_ilog(i);
283   end loop;
284 
285   return true;
286 Exception when others then
287   g_status_message:=sqlerrm;
288   g_status:=false;
289   return false;
290 End;
291 
292 function clean_fact_objects return boolean is
293 l_stmt varchar2(10000);
294 l_count number;
295 Begin
296   l_stmt:='truncate table '||g_dim_owner||'.'||g_object_name;
297   write_to_log_file(l_stmt);
298   if execute_stmt(l_stmt)=false then
299     null;
300   end if;
301   if g_fact_snplog is not null then
302     l_stmt:='truncate table '||g_dim_owner||'.'||g_fact_snplog;
303     write_to_log_file(l_stmt);
304     if execute_stmt(l_stmt)=false then
305       null;
306     end if;
307   end if;
308   if g_fact_dlog is not null then
309     l_stmt:='truncate table '||g_fact_dlog;
310     write_to_log_file(l_stmt);
311     if execute_stmt(l_stmt)=false then
312       null;
313     end if;
314   end if;
315   l_stmt:='drop table '||g_fact_ilog;
316   write_to_log_file(l_stmt);
317   if execute_stmt(l_stmt)=false then
318     null;
319   end if;
320   for i in 1..g_number_ilog loop
321     l_stmt:='drop table '||g_base_fact_dlog(i);
322     write_to_log_file(l_stmt);
323     if execute_stmt(l_stmt)=false then
324       null;
325     end if;
326     l_stmt:='drop table '||g_base_fact_ilog(i);
327     write_to_log_file(l_stmt);
328     if execute_stmt(l_stmt)=false then
329       null;
330     end if;
331   end loop;
332   for i in 1..g_derv_number_ilog loop
333     l_stmt:='drop table '||g_derv_fact_dlog(i);
334     write_to_log_file(l_stmt);
335     if execute_stmt(l_stmt)=false then
336       null;
337     end if;
338     l_stmt:='drop table '||g_derv_fact_ilog(i);
339     write_to_log_file(l_stmt);
340     if execute_stmt(l_stmt)=false then
341       null;
342     end if;
343   end loop;
344   if g_fstg_table is not null then
345     if g_truncate_stg='Y' then
346       l_stmt:='truncate table '||g_dim_owner||'.'||g_fstg_table;
347       write_to_log_file(l_stmt);
348       if execute_stmt(l_stmt)=false then
349         null;
350       end if;
351     else
352       l_stmt:='update '||g_fstg_table||' set collection_status=''READY'' where collection_status<>''READY'' '||
353       ' and rownum<=100000';
354       write_to_log_file(l_stmt);
355       loop
356         execute immediate l_stmt;
357         l_count:=sql%rowcount;
358         commit;
359         if l_count <100000 then
360           exit;
361         end if;
362       end loop;
363     end if;
364   end if;
365 
366   return true;
367 Exception when others then
368   g_status_message:=sqlerrm;
369   g_status:=false;
370   return false;
371 End;
372 
373 
374 function clean_up_fact(p_fact varchar2) return boolean is
375 Begin
376   if read_fact_metadata(p_fact)=false then
377     return false;
378   end if;
379   if clean_fact_objects=false then
380     return false;
381   end if;
382   return true;
383 Exception when others then
384   g_status_message:=sqlerrm;
385   g_status:=false;
386   return false;
387 End;
388 
389 function get_short_name_for_long(p_name varchar2) return varchar2 is
390 l_stmt varchar2(2000);
391 TYPE CurTyp IS REF CURSOR;
392 cv   CurTyp;
393 l_name varchar2(400);
394 Begin
395   l_stmt:='select relation_name from edw_relations_md_v where relation_long_name=:a';
399   close cv;
396   write_to_log_file(l_stmt);
397   open cv for l_stmt using p_name;
398   fetch cv into l_name;
400   if l_name is null then
401     l_name:=p_name;
402   end if;
403   return l_name;
404 Exception when others then
405   g_status_message:=sqlerrm;
406   g_status:=false;
407   return null;
408 End;
409 
410 
411 
412 END EDW_CLEAN_OBJECT;