DBA Data[Home] [Help]

PACKAGE BODY: APPS.EDW_NAEDW_PUSH

Source


1 package body EDW_NAEDW_PUSH AS
2 /*$Header: EDWNAEDB.pls 115.29 2004/02/13 05:08:51 smulye ship $*/
3 
4 g_debug boolean:=false;
5 
6 cursor c0 is
7 select dim.dim_name,
8        dim.dim_id
9 from   edw_dimensions_md_v dim
10 where dim_name not like 'EDW_GL_ACCT%_M'
11 and dim_name <> 'EDW_NA'
12 order by dim.dim_name;
13 
14 cursor c0_0(p_dim varchar2) is
15 select dim.dim_name,dim.dim_id
16 from
17 edw_dimensions_md_v dim
18 where dim_long_name=p_dim;
19 
20 cursor c00(p_dim_id number) is
21 select level_name||'_LTC'
22 from edw_levels_md_v
23 where dim_id=p_dim_id;
24 
25 cursor c1(p_dim_id number) is
26 select distinct
27     lvl_child.level_name||'_LTC',
28     lvl_parent.level_name||'_LTC'
29 from
30     edw_levels_md_v lvl_child,
31     edw_levels_md_v lvl_parent,
32     edw_pvt_level_relation_md_v lvl_rel,
33     edw_hierarchies_md_v hier
34 where
35     hier.dim_id=p_dim_id
36 and lvl_rel.hierarchy_id=hier.hier_id
37 and lvl_child.level_id=lvl_rel.child_level_id
38 and lvl_parent.level_id=lvl_rel.parent_level_id;
39 
40 cursor c2(p_dim_id number) is
41 select
42     relation.name,
43     item.column_name,
44     item.data_type,
45     'FK',
46     parent.name
47 from
48     edw_levels_md_v lvl,
49     edw_tables_md_v relation,
50     edw_pvt_columns_md_v item,
51     edw_foreign_keys_md_v fk,
52     edw_pvt_key_columns_md_v isu,
53     edw_unique_keys_md_v pk,
54     edw_tables_md_v parent
55 where
56     lvl.dim_id=p_dim_id
57 and relation.name=lvl.level_name||'_LTC'
58 and item.parent_object_id=relation.elementid
59 and fk.entity_id=relation.elementid
60 and isu.key_id=fk.foreign_key_id
61 and item.column_id=isu.column_id
62 and pk.key_id=fk.key_id
63 and parent.elementid=pk.entity_id
64 union all
65 select
66     relation.name,
67     item.column_name,
68     item.data_type,
69     'PK',
70     null
71 from
72     edw_levels_md_v lvl,
73     edw_tables_md_v relation,
74     edw_pvt_columns_md_v item,
75     edw_unique_keys_md_v pk,
76     edw_pvt_key_columns_md_v isu
77 where
78     lvl.dim_id=p_dim_id
79 and relation.name=lvl.level_name||'_LTC'
80 and item.parent_object_id=relation.elementid
81 and pk.entity_id=relation.elementid
82 and isu.key_id=pk.key_id
83 and item.column_id=isu.column_id;
84 
85 --all other cols
86 cursor c3(p_dim_id number,p_owner varchar2) is
87 select
88     relation.name,
89     item.column_name,
90     item.length,
91     item.data_type
92 from
93     edw_tables_md_v relation,
94     edw_pvt_columns_md_v item
95 where
96      relation.name in (select level_name||'_LTC' from edw_levels_md_v where dim_id=p_dim_id)
97 and item.parent_object_id=relation.elementid
98 and item.column_name in ('NAME');
99 
100 cursor c3_II(p_dim_id number,p_owner varchar2) is
101 select
102     all_tab.table_name,
103     all_tab.column_name,
104     all_tab.data_length,
105     all_tab.data_type
106 from
107     all_tab_columns all_tab,
108     all_tables tab
109 where
110     all_tab.nullable in ('N')
111 and all_tab.table_name in (select level_name||'_LTC' from edw_levels_md_v where dim_id=p_dim_id)
112 and tab.table_name=all_tab.table_name
113 and tab.owner=p_owner
114 and all_tab.owner= p_owner
115 
116 and all_tab.column_name not in ('NAME');
117 
118 PROCEDURE PUSH (Errbuf out NOCOPY varchar2,
119 		retcode out NOCOPY varchar2) IS
120 
121 Begin
122 
123 retcode:='0';
124 g_debug:=null;
125 Init_all;
126 write_to_log_file_n('In PUSH for all Dimensions');
127 if g_status=false then
128   errbuf:=g_status_message;
129   retcode:='2';
130   return;
131 end if;
132 
133 write_to_log_file_n('START PUSH NAEDW for all dimensions, Start time '||get_time);
134 
135 Read_Metadata;
136 if g_status=false then
137   write_to_log_file_n('Error in Read Metadata '||g_status_message||get_time);
138   errbuf:=g_status_message;
139   retcode:='2';
140   return;
141 end if;
142 write_to_log_file_n('Read Metadata done...'||get_time);
143 Execute_insert_stmt;
144 write_to_log_file_n('Executed all insert '||get_time);
145 
146 --special case for edw_na
147 
148 write_to_log_file_n('Executed all populate_edw_na..End of NAEDW push '||get_time);
149 if g_all_dims_ok=false or g_status=false then
150   retcode:='1';
151   errbuf:='Please check log file for problems.';
152 end if;
153 finish_all(true);
154 
155 Exception when others then
156   g_status_message:=sqlerrm;
157   write_to_log_file_n(g_status_message);
158   errbuf:=g_status_message;
159   retcode:='2';
160   finish_all(false);
161 End;--PROCEDURE PUSH
162 
163 /*
164 called from the conc manager for a specific dimension
165 */
166 PROCEDURE PUSH(Errbuf out NOCOPY varchar2,
167 		retcode out NOCOPY varchar2,
168         p_dim_string in varchar2) IS
169 Begin
170 retcode:='0';
171 g_debug:=null;
172 Init_all;
173 write_to_log_file_n('In PUSH with dim name passed');
174 if g_status=false then
175   errbuf:=g_status_message;
176   retcode:='2';
177   return;
178 end if;
179 if g_debug then
180   write_to_log_file_n('Debug flag turned ON');
181 else
182   write_to_log_file_n('Debug flag turned OFF');
183 end if;
184 if g_debug then
185   write_to_log_file_n('p_dim_string ='||p_dim_string);
186 end if;
187 
188 if p_dim_string is null then
189   write_to_log_file_n('NA_EDW for all dimensions'||get_time);
190   PUSH(errbuf, retcode);
191   return;
192 else
193   write_to_log_file_n('NAEDW for specific dimension '||p_dim_string||get_time);
194   g_dim_string_flag:=true;
195   --Parse_dim_names(p_dim_string);--instead of read metadata
196   if get_one_dim_name(p_dim_string,'LONGNAME') = false then
197     errbuf:=g_status_message;
198     retcode:='2';
199     return;
200   end if;
201   Execute_insert_stmt;
202   if g_all_dims_ok=false  or g_status=false then
203     retcode:='2';
204     errbuf:=g_status_message;
205     finish_all(false);
206     return;
207   end if;
208   finish_all(true);
209 end if;
210 Exception when others then
211   g_status_message:=sqlerrm;
212   write_to_log_file_n(g_status_message);
213   errbuf:=g_status_message;
214   retcode:='2';
215   finish_all(false);
216 End;--PROCEDURE PUSH with dim string
217 
218 /*
219 called from collection engine for a specific dimension
220 */
221 PROCEDURE PUSH(Errbuf out NOCOPY varchar2,
222 		retcode out NOCOPY varchar2,
223         p_dim_string in varchar2,
224         p_debug boolean) IS
225 Begin
226   retcode:='0';
227   g_debug:=p_debug;
228   Init_all;
229   g_coll_engine_call:=true;
230   write_to_log_file_n('In PUSH with dim name passed');
231   if g_status=false then
232     errbuf:=g_status_message;
233     retcode:='2';
234     return;
235   end if;
236   if g_debug then
237     write_to_log_file_n('Debug flag turned ON');
238   else
239     write_to_log_file_n('Debug flag turned OFF');
240   end if;
241   if g_debug then
242     write_to_log_file_n('p_dim_string ='||p_dim_string);
243   end if;
244   if get_dim_pk(p_dim_string) =false then
245     errbuf:=g_status_message;
246     retcode:='2';
247     return;
248   end if;
249   --if there is a row in the star table, no need to check the levels either
250   if naedw_in_star(p_dim_string)=true then
251     g_naedw_in :=true;
252     write_to_log_file('NA_EDW row already in star table.');
253   else
254     g_naedw_in :=false;
255     write_to_log_file('NA_EDW row not present in star table');
256   end if;
257   if err_in_star(p_dim_string)=true then
258     g_err_in :=true;
259     write_to_log_file('ERR row already in star table.');
260   else
261     g_err_in :=false;
262     write_to_log_file('ERR row not present in star table');
263   end if;
264   if g_err_in=true and g_naedw_in=true then
265     write_to_log_file_n('Both NAEDW and ERROR rows in the star table');
266     return;
267   end if;
268 
269   g_dim_string_flag:=true;
270   --Parse_dim_names(p_dim_string);--instead of read metadata
271   if get_one_dim_name(p_dim_string,'NAME') = false then
272     errbuf:=g_status_message;
273     retcode:='2';
274     return;
275   end if;
276   Execute_insert_stmt;
277   if g_all_dims_ok=false  or g_status=false then
278     retcode:='2';
279     errbuf:=g_status_message;
280     finish_all(false);
281     return;
282   end if;
283   finish_all(true);
284 Exception when others then
285   g_status_message:=sqlerrm;
286   write_to_log_file_n(g_status_message);
287   errbuf:=g_status_message;
288   retcode:='2';
289   finish_all(false);
290 End;
291 
292 
293 function get_status_message return varchar2 is
294 begin
295  return g_status_message;
296 End;--function get_status_message return varchar2 is
297 
298 PROCEDURE Read_Metadata IS
299 
300 Begin
301 open c0;
302 g_number_dims:=1;
303 loop
304   fetch c0 into g_dim_name(g_number_dims),
305                 g_dim_id(g_number_dims);
306   exit when c0%NOTFOUND;
307   g_number_dims:=g_number_dims+1;
308 end loop;
309 g_number_dims:=g_number_dims-1;
310 
311 close c0;
312 --dbms_output.put_line('number of dime='||g_number_dims);
313 
314 Exception when others then
315   if c0%isopen then
316     close c0;
317   end if;
318   g_status_message:=sqlerrm;
319   write_to_log_file_n(g_status_message);
320   g_status:=false;
321 End;--PROCEDURE Read_Metadata IS
322 
323 function get_one_dim_name(p_dim_string varchar2,p_type varchar2) return boolean IS
324 TYPE CurTyp IS REF CURSOR;
325 cv   CurTyp;
326 l_stmt varchar2(1000);
327 begin
328   if g_debug then
329     write_to_log_file_n('In get_one_dim_name, dim ='||p_dim_string);
330   end if;
331   g_number_dims:=1;
332   g_dim_name(g_number_dims):=null;
333   g_dim_id(g_number_dims):=null;
334   if p_type='LONGNAME' then
335     l_stmt:='select dim_name,dim_id from edw_dimensions_md_v where dim_long_name=:s';
336   else
337     l_stmt:='select dim_name,dim_id from edw_dimensions_md_v where dim_name=:s';
338   end if;
339   if g_debug then
340     write_to_log_file_n('Going to execute ');
341     write_to_log_file(l_stmt);
342   end if;
343   open cv for l_stmt using p_dim_string;
344   fetch cv into g_dim_name(g_number_dims),g_dim_id(g_number_dims);
345   close cv;
346   write_to_log_file_n('Dimension='||g_dim_name(g_number_dims)||' and id='||g_dim_id(g_number_dims));
347   if g_dim_id(g_number_dims) is null then
348     return false;
349   else
350     return true;
351   end if;
352 Exception when others then
353   write_to_log_file_n('Error in get_one_dim_name '||sqlerrm||get_time);
354   g_status_message:=sqlerrm;
355   g_status:=false;
356   return false;
357 End;--PROCEDURE parse_dim_names(p_dim_string varchar2) IS
358 
359 
360 PROCEDURE parse_dim_names(p_dim_string varchar2) IS
361 l_start number;
362 l_end number;
363 l_str varchar2(300);
364 l_len number;
365 l_dim_name EDW_OWB_COLLECTION_UTIL.varcharTableType;
366 l_dim_id EDW_OWB_COLLECTION_UTIL.numberTableType;
367 l_dim_number number:=1;
368 Begin
369 l_start:=1;
370 l_end:=1;
371 l_len:=length(p_dim_string);
372 loop
373   l_end:=instr(p_dim_string,':',l_start);
374   if l_end = -1 then
375    exit;
376   end if;
377   g_number_dims:=g_number_dims+1;
378   g_dim_name(g_number_dims):=substr(p_dim_string,l_start,l_end-l_start);
379   l_start:=l_end+1;
380   if l_start >= l_len then
381     exit;
382   end if;
383 end loop;
384 --get the ids
385 open c0;
386 loop
387   fetch c0 into
388     l_dim_name(l_dim_number),
389     l_dim_id(l_dim_number);
390   exit when c0%notfound;
391   l_dim_number:=l_dim_number+1;
392 end loop;
393 close c0;
394 l_dim_number:=l_dim_number-1;
395 for i in 1..g_number_dims loop
396   for j in 1..l_dim_number loop
397     if g_dim_name(i)=l_dim_name(j) then
398       g_dim_id(i):=l_dim_id(j);
399       exit;
400     end if;
401   end loop;
402 end loop;
403 Exception when others then
404   if c0%isopen then
405     close c0;
406   end if;
407   write_to_log_file_n('Error in parse dim names '||sqlerrm||get_time);
408   g_status_message:=sqlerrm;
409   g_status:=false;
410 End;--PROCEDURE parse_dim_names(p_dim_string varchar2) IS
411 
412 PROCEDURE Parse_Metadata(p_dim_index number) IS
413 
414 l_parent EDW_OWB_COLLECTION_UTIL.varcharTableType;
415 l_child EDW_OWB_COLLECTION_UTIL.varcharTableType;
416 l_parent_level varchar2(400);
417 l_number number:=1;
418 l_found boolean;
419 Begin
420   g_all_level:=null;
421   Begin
422     g_number_levels:=1;
423     open c00(g_dim_id(p_dim_index));
424     loop
425       fetch c00 into g_levels(g_number_levels);
426       exit when c00%NOTFOUND;
427       g_number_levels:=g_number_levels+1;
428     end loop;
429     close c00;
430     g_number_levels:=g_number_levels-1;
431   Exception when others then
432   if c00%isopen then
433     close c00;
434   end if;
435     g_status_message:=sqlerrm;
436     write_to_log_file_n(g_status_message);
437     g_status:=false;
438     return;
439   end;
440 
441   Begin
442    open c1(g_dim_id(p_dim_index));
443    loop
444     fetch c1 into
445        l_child(l_number), l_parent(l_number);
446     exit when c1%NOTFOUND;
447     l_number:=l_number+1;
448    end loop;
449    l_number:=l_number-1;
450    close c1;
451   Exception when others then
452   if c1%isopen then
453     close c1;
454   end if;
455     g_status_message:=sqlerrm;
456     write_to_log_file_n(g_status_message);
457     g_status:=false;
458   end;
459 
460   --process the results here. first get the parent
461   for i in 1..g_number_levels loop
462     l_found:=false;
463     for j in 1..l_number loop
464       if g_levels(i)=l_child(j) then
465         l_found:=true;
466         exit;
467       end if;
468     end loop;
472         g_level_status(i):='P';
469     if l_found=false then
470       if  g_levels(i) = substr(g_dim_name(p_dim_index),1,instr(g_dim_name(p_dim_index),'_M',-1)-1)||'_A_LTC' then
471         l_parent_level:=g_levels(i);
473         g_all_level:=g_levels(i);
474       else
475         g_level_status(i):='C';
476       end if;
477       exit;
478     end if;
479   end loop;
480 
481   --assign the child status
482   for i in 1..g_number_levels loop
483     for j in 1..l_number loop
484       if l_child(j)=g_levels(i) then
485         if l_parent(j)=l_parent_level then
486           g_level_status(i):='CP';
487         else
488           g_level_status(i):='C';
489         end if;
490         exit;
491       end if;
492     end loop;
493   end loop;
494 
495 Exception when others then
496   g_status_message:=sqlerrm;
497   write_to_log_file_n(g_status_message);
498   g_status:=false;
499 End;--PROCEDURE Parse_Metadata IS
500 
501 PROCEDURE Make_insert_stmt(p_level_index number) IS
502 Begin
503   g_check_stmt:='select 1 from '||g_levels(p_level_index)||' where '||
504   g_level_pk(g_varchar_pk_index)||' = '||''''||g_naedw_varchar2||''''||' or '||
505   g_level_pk(g_varchar_pk_index)||' = '||''''||g_all_varchar2||'''';
506 
507   g_err_check_stmt:='select 1 from '||g_levels(p_level_index)||' where '||
508   g_level_pk(g_varchar_pk_index)||' = '||''''||g_err_varchar2||'''';
509 
510   g_insert_stmt:='insert into '||g_levels(p_level_index)||' ( ';
511   make_body_insert_update_stmt(p_level_index,true);
512   if g_status=false then
513    return;
514   end if;
515   g_insert_stmt:=g_insert_stmt||g_body_insert_update_stmt;
516   g_err_insert_stmt:='insert into '||g_levels(p_level_index)||' ( ';
517   make_err_body_insert_stmt(p_level_index,true);
518   if g_status=false then
519    return;
520   end if;
521   g_err_insert_stmt:=g_err_insert_stmt||g_err_body_insert_update_stmt;
522 Exception when others then
523   g_status_message:=sqlerrm;
524   write_to_log_file_n('Error in make_insert_stmt for level '||g_levels(p_level_index)||' '||
525     g_status_message||get_time);
526   g_status:=false;
527 End;--PROCEDURE Make_insert_stmt IS
528 
529 PROCEDURE Make_Update_Stmt(p_level_index number) IS
530 first_find boolean :=true;
531 l_pk_stmt varchar2(4000);
532 l_fk_stmt varchar2(4000);
533 Begin
534   g_update_stmt:='update  '||g_levels(p_level_index)||' set ( ';
535   make_body_insert_update_stmt(p_level_index,false);
536   if g_status=false then
537    return;
538   end if;
539   g_update_stmt:=g_update_stmt||g_body_insert_update_stmt;
540   g_err_update_stmt:='update  '||g_levels(p_level_index)||' set ( ';
541   make_err_body_insert_stmt(p_level_index,false);
542   if g_status=false then
543    return;
544   end if;
545   g_err_update_stmt:=g_err_update_stmt||g_err_body_insert_update_stmt;
546 Exception when others then
547 g_status_message:=sqlerrm;
548 write_to_log_file_n('Error in make_update_stmt for level '||g_levels(p_level_index)||' '||
549     g_status_message||get_time);
550 g_status:=false;
551 End;--PROCEDURE Make_Update_Stmt(p_level_index number) IS
552 
553 PROCEDURE make_body_insert_update_stmt(p_level_index number, p_insert_flag boolean) IS
554 first_find boolean:=true;
555 l_pk_stmt varchar2(4000);
556 l_fk_stmt varchar2(4000);
557 l_pk_num number;--which is the number pk
558 Begin
559   l_pk_num:=1;
560   g_body_insert_update_stmt:='';
561   for i in 1..g_level_pk_number loop
562     if first_find then
563       g_body_insert_update_stmt:=g_body_insert_update_stmt||' '||g_level_pk(i);
564       first_find:=false;
565     else
566       g_body_insert_update_stmt:=g_body_insert_update_stmt||','||g_level_pk(i);
567     end if;
568   end loop;
569 
570   for i in 1..g_level_fk_number loop
571     g_body_insert_update_stmt:=g_body_insert_update_stmt||','||g_level_fk(i);
572   end loop;
573 
574   for i in 1..g_level_col_number loop
575     if g_level_cols_datatype(i) = 'VARCHAR2' then
576       if g_level_status(p_level_index)='P' then
577         if g_level_cols_length(i) > g_all_varchar2_mesg_length then
578           g_body_insert_update_stmt:=g_body_insert_update_stmt||','||g_level_cols(i);
579         end if;
580       else
581         if g_level_cols_length(i) > g_unassigned_length then
582           g_body_insert_update_stmt:=g_body_insert_update_stmt||','||g_level_cols(i);
583         end if;
584       end if;
585     else
586       if g_level_cols(i) <> 'CREATION_DATE' and g_level_cols(i) <> 'LAST_UPDATE_DATE' then
587         g_body_insert_update_stmt:=g_body_insert_update_stmt||','||g_level_cols(i);
588       end if;
589     end if;
590   end loop;
591   if p_insert_flag then
592     --if g_level_status(p_level_index)<>'P' then
593       g_body_insert_update_stmt:=g_body_insert_update_stmt||',CREATION_DATE, LAST_UPDATE_DATE)';
594     --else
595       --g_body_insert_update_stmt:=g_body_insert_update_stmt||')';
596     --end if;
597     g_body_insert_update_stmt:=g_body_insert_update_stmt||' values (';
598   else
599     --if g_level_status(p_level_index)<>'P' then
600       g_body_insert_update_stmt:=g_body_insert_update_stmt||',LAST_UPDATE_DATE)';
601     --else
605   end if;
602       --g_body_insert_update_stmt:=g_body_insert_update_stmt||')';
603     --end if;
604     g_body_insert_update_stmt:=g_body_insert_update_stmt||'= (select ';
606   first_find:=true;
607 
608   for i in 1..g_level_pk_number loop
609     if g_level_pk_datatype(i)='VARCHAR2' then
610       if g_level_status(p_level_index)='P' then
611         l_pk_stmt:=''''||g_all_varchar2||'''';
612       else
613         l_pk_stmt:=''''||g_naedw_varchar2||'''';
614       end if;
615     elsif g_level_pk_datatype(i)='NUMBER' then
616       l_pk_num:=i;
617       if g_level_status(p_level_index)='P' then
618         l_pk_stmt:=g_all_number;
619       else
620         l_pk_stmt:=g_naedw_number;
621       end if;
622     elsif g_level_pk_datatype(i)='DATE' then
623       l_pk_stmt:=g_naedw_date;
624     else
625       l_pk_stmt:=''''||g_naedw_varchar2||'''';
626     end if;
627     if first_find then
628       g_body_insert_update_stmt:=g_body_insert_update_stmt||' '||l_pk_stmt;
629       first_find:=false;
630     else
631       g_body_insert_update_stmt:=g_body_insert_update_stmt||','||l_pk_stmt;
632     end if;
633   end loop;
634   for i in 1..g_level_fk_number loop
635     --if g_level_status(p_level_index)='P' OR g_level_status(p_level_index)='CP' then
636     if g_level_fk_parent(i)=g_all_level then
637       if g_level_fk_datatype(i)='VARCHAR2' then
638         l_fk_stmt:=''''||g_all_varchar2||'''';
639       elsif g_level_fk_datatype(i)='DATE' then
640         l_fk_stmt:=''''||g_all_date||'''';
641       elsif g_level_fk_datatype(i)='NUMBER' then
642         l_fk_stmt:=g_all_number;
643       else
644         l_fk_stmt:=''''||g_all_varchar2||'''';
645       end if;
646     else
647       if g_level_fk_datatype(i)='VARCHAR2' then
648         l_fk_stmt:=''''||g_naedw_varchar2||'''';
649       elsif g_level_fk_datatype(i)='DATE' then
650         l_fk_stmt:=''''||g_naedw_date||'''';
651       elsif g_level_fk_datatype(i)='NUMBER' then
652         l_fk_stmt:=g_naedw_number;
653       else
654         l_fk_stmt:=''''||g_naedw_varchar2||'''';
655       end if;
656     end if;
657     g_body_insert_update_stmt:=g_body_insert_update_stmt||','||l_fk_stmt;
658   end loop;
659 
660   for i in 1..g_level_col_number loop
661     if g_level_cols_datatype(i) = 'VARCHAR2' then
662       if g_level_status(p_level_index)='P' then
663         if g_level_cols_length(i) > g_all_varchar2_mesg_length then
664           g_body_insert_update_stmt:=g_body_insert_update_stmt||','||''''||g_all_varchar2_mesg||'''';
665         end if;
666       else
667         if g_level_cols_length(i) > g_unassigned_length then
668           g_body_insert_update_stmt:=g_body_insert_update_stmt||','||''''||g_unassigned||'''';
669         end if;
670       end if;
671     elsif g_level_cols_datatype(i) = 'DATE' then
672       if g_level_cols(i) <> 'CREATION_DATE' and g_level_cols(i) <> 'LAST_UPDATE_DATE' then
673         g_body_insert_update_stmt:=g_body_insert_update_stmt||','||'null';
674       end if;
675     elsif g_level_cols_datatype(i) = 'NUMBER' then
676       g_body_insert_update_stmt:=g_body_insert_update_stmt||','||g_naedw_number;
677     end if;
678   end loop;
679   if p_insert_flag then
680     --if g_level_status(p_level_index)<>'P' then
681       g_body_insert_update_stmt:=g_body_insert_update_stmt||',SYSDATE,SYSDATE)';
682     --else
683       --g_body_insert_update_stmt:=g_body_insert_update_stmt||')';
684     --end if;
685   else
686     --if g_level_status(p_level_index)<>'P' then
687       g_body_insert_update_stmt:=g_body_insert_update_stmt||',SYSDATE ';
688     --end if;
689     g_body_insert_update_stmt:=g_body_insert_update_stmt||' from dual) where '||
690        g_level_pk(l_pk_num)||'=';
691     if g_level_status(p_level_index)='P' then
692        g_body_insert_update_stmt:=g_body_insert_update_stmt||g_all_number||' ';
693     else
694        g_body_insert_update_stmt:=g_body_insert_update_stmt||g_naedw_number||' ';
695     end if;
696   end if;
697 Exception when others then
698   g_status_message:=sqlerrm;
699   write_to_log_file_n('Error in make_body_insert_update_stmt for level '||g_levels(p_level_index)||' '||
700     g_status_message||get_time);
701   g_status:=false;
702 End;--make_body_insert_update_stmt(p_level_index number) IS
703 
704 PROCEDURE make_err_body_insert_stmt(p_level_index number, p_insert_flag boolean) IS
705 first_find boolean:=true;
706 l_pk_stmt varchar2(4000);
707 l_fk_stmt varchar2(4000);
708 l_pk_num number;--which is the number pk
709 Begin
710   l_pk_num:=1;
711   g_err_body_insert_update_stmt:='';
712   for i in 1..g_level_pk_number loop
713     if first_find then
714       g_err_body_insert_update_stmt:=g_err_body_insert_update_stmt||' '||g_level_pk(i);
715       first_find:=false;
716     else
717       g_err_body_insert_update_stmt:=g_err_body_insert_update_stmt||','||g_level_pk(i);
718     end if;
719   end loop;
720 
721   for i in 1..g_level_fk_number loop
722     g_err_body_insert_update_stmt:=g_err_body_insert_update_stmt||','||g_level_fk(i);
723   end loop;
724 
725   for i in 1..g_level_col_number loop
726     if g_level_cols_datatype(i) = 'VARCHAR2' then
727       if g_level_status(p_level_index)='P' then
728         if g_level_cols_length(i) > g_all_varchar2_mesg_length then
732         if g_level_cols_length(i) > g_invalid_length then
729           g_err_body_insert_update_stmt:=g_err_body_insert_update_stmt||','||g_level_cols(i);
730         end if;
731       else
733           g_err_body_insert_update_stmt:=g_err_body_insert_update_stmt||','||g_level_cols(i);
734         end if;
735       end if;
736     else
737       if g_level_cols(i) <> 'CREATION_DATE' and g_level_cols(i) <> 'LAST_UPDATE_DATE' then
738         g_err_body_insert_update_stmt:=g_err_body_insert_update_stmt||','||g_level_cols(i);
739       end if;
740     end if;
741   end loop;
742   if p_insert_flag then
743     --if g_level_status(p_level_index)<>'P' then
744       g_err_body_insert_update_stmt:=g_err_body_insert_update_stmt||',CREATION_DATE, LAST_UPDATE_DATE)';
745     --else
746       --g_body_insert_update_stmt:=g_body_insert_update_stmt||')';
747     --end if;
748     g_err_body_insert_update_stmt:=g_err_body_insert_update_stmt||' values (';
749   else
750     --if g_level_status(p_level_index)<>'P' then
751       g_err_body_insert_update_stmt:=g_err_body_insert_update_stmt||',LAST_UPDATE_DATE)';
752     --else
753       --g_body_insert_update_stmt:=g_body_insert_update_stmt||')';
754     --end if;
755     g_err_body_insert_update_stmt:=g_err_body_insert_update_stmt||'= (select ';
756   end if;
757   first_find:=true;
758 
759   for i in 1..g_level_pk_number loop
760     if g_level_pk_datatype(i)='VARCHAR2' then
761       if g_level_status(p_level_index)='P' then
762         l_pk_stmt:=''''||g_all_varchar2||'''';
763       else
764         l_pk_stmt:=''''||g_err_varchar2||'''';
765       end if;
766     elsif g_level_pk_datatype(i)='NUMBER' then
767       l_pk_num:=i;
768       if g_level_status(p_level_index)='P' then
769         l_pk_stmt:=g_all_number;
770       else
771         l_pk_stmt:=g_err_number;
772       end if;
773     elsif g_level_pk_datatype(i)='DATE' then
774       l_pk_stmt:=g_naedw_date;
775     else
776       l_pk_stmt:=''''||g_err_varchar2||'''';
777     end if;
778     if first_find then
779       g_err_body_insert_update_stmt:=g_err_body_insert_update_stmt||' '||l_pk_stmt;
780       first_find:=false;
781     else
782       g_err_body_insert_update_stmt:=g_err_body_insert_update_stmt||','||l_pk_stmt;
783     end if;
784   end loop;
785   for i in 1..g_level_fk_number loop
786     --if g_level_status(p_level_index)='P' OR g_level_status(p_level_index)='CP' then
787     if g_level_fk_parent(i)=g_all_level then
788       if g_level_fk_datatype(i)='VARCHAR2' then
789         l_fk_stmt:=''''||g_all_varchar2||'''';
790       elsif g_level_fk_datatype(i)='DATE' then
791         l_fk_stmt:=''''||g_all_date||'''';
792       elsif g_level_fk_datatype(i)='NUMBER' then
793         l_fk_stmt:=g_all_number;
794       else
795         l_fk_stmt:=''''||g_all_varchar2||'''';
796       end if;
797     else
798       if g_level_fk_datatype(i)='VARCHAR2' then
799         l_fk_stmt:=''''||g_err_varchar2||'''';
800       elsif g_level_fk_datatype(i)='DATE' then
801         l_fk_stmt:=''''||g_naedw_date||'''';
802       elsif g_level_fk_datatype(i)='NUMBER' then
803         l_fk_stmt:=g_err_number;
804       else
805         l_fk_stmt:=''''||g_err_varchar2||'''';
806       end if;
807     end if;
808     g_err_body_insert_update_stmt:=g_err_body_insert_update_stmt||','||l_fk_stmt;
809   end loop;
810 
811   for i in 1..g_level_col_number loop
812     if g_level_cols_datatype(i) = 'VARCHAR2' then
813       if g_level_status(p_level_index)='P' then
814         if g_level_cols_length(i) > g_all_varchar2_mesg_length then
815           g_err_body_insert_update_stmt:=g_err_body_insert_update_stmt||','||''''||g_all_varchar2_mesg||'''';
816         end if;
817       else
818         if g_level_cols_length(i) > g_invalid_length then
819           g_err_body_insert_update_stmt:=g_err_body_insert_update_stmt||','||''''||g_invalid||'''';
820         end if;
821       end if;
822     elsif g_level_cols_datatype(i) = 'DATE' then
823       if g_level_cols(i) <> 'CREATION_DATE' and g_level_cols(i) <> 'LAST_UPDATE_DATE' then
824         g_err_body_insert_update_stmt:=g_err_body_insert_update_stmt||','||'null';
825       end if;
826     elsif g_level_cols_datatype(i) = 'NUMBER' then
827       g_err_body_insert_update_stmt:=g_err_body_insert_update_stmt||','||g_err_number;
828     end if;
829   end loop;
830   if p_insert_flag then
831     --if g_level_status(p_level_index)<>'P' then
832       g_err_body_insert_update_stmt:=g_err_body_insert_update_stmt||',SYSDATE,SYSDATE)';
833     --else
834       --g_body_insert_update_stmt:=g_body_insert_update_stmt||')';
835     --end if;
836   else
837     --if g_level_status(p_level_index)<>'P' then
838       g_err_body_insert_update_stmt:=g_err_body_insert_update_stmt||',SYSDATE ';
839     --end if;
840     g_err_body_insert_update_stmt:=g_err_body_insert_update_stmt||' from dual) where '||
841        g_level_pk(l_pk_num)||'=';
842     if g_level_status(p_level_index)='P' then
843        g_err_body_insert_update_stmt:=g_err_body_insert_update_stmt||g_all_number||' ';
844     else
845        g_err_body_insert_update_stmt:=g_err_body_insert_update_stmt||g_err_number||' ';
846     end if;
847   end if;
848 Exception when others then
849   g_status_message:=sqlerrm;
853 End;
850   write_to_log_file_n('Error in make_err_body_insert_update_stmt for level '||g_levels(p_level_index)||' '||
851     g_status_message||get_time);
852   g_status:=false;
854 
855 PROCEDURE Execute_insert_stmt_level(p_level_index number) IS
856 TYPE CurTyp IS REF CURSOR;
857 cv   CurTyp;
858 v_int number:=null;
859 l_insert boolean:=true;
860 l_stmt varchar2(10000);
861 Begin
862   if g_exec_flag= false then
863     return;
864   end if;
865   Begin
866     if g_debug then
867       write_to_log_file_n('Going to execute ');
868       write_to_log_file(g_check_stmt);
869     end if;
870     open cv for g_check_stmt;
871     fetch cv into v_int;
872     close cv;
873     if v_int is null then
874       l_insert:=true;
875       write_to_log_file_n('Need to insert NAEDW or ALL for '||g_levels(p_level_index));
876     else
877       l_insert:=false;
878       write_to_log_file_n('NAEDW or ALL already present for '||g_levels(p_level_index));
879       return ;
880     end if;
881   Exception when others then
882     g_status_message:=sqlerrm;
883     write_to_log_file_n(g_status_message||get_time);
884     write_to_log_file('Problem statement '||g_check_stmt);
885     g_status:=false;
886     return;
887   end;
888   if l_insert then
889    l_stmt:=g_insert_stmt;
890   else
891    if g_coll_engine_call=false then
892      l_stmt:=g_update_stmt;
893    else
894      return ;
895    end if;
896   end if;
897   if g_debug then
898     write_to_log_file_n('Going to execute ');
899     write_to_log_file(l_stmt);
900   end if;
901   Begin
902     execute immediate l_stmt;
903     write_to_log_file_n('Processed '||sql%rowcount||' rows');
904   Exception when others then
905     g_status_message:=sqlerrm;
906     write_to_log_file_n(g_status_message||get_time);
907     write_to_log_file('Problem stmt '||l_stmt);
908     g_status:=false;
909   end;
910 Exception when others then
911   g_status_message:=sqlerrm;
912   write_to_log_file_n(g_status_message||get_time);
913   g_status:=false;
914 End;--PROCEDURE Execute_insert_stmt_level(p_level_index number) IS
915 
916 PROCEDURE Execute_err_insert_stmt_level(p_level_index number) IS
917 TYPE CurTyp IS REF CURSOR;
918 cv   CurTyp;
919 v_int number:=null;
920 l_insert boolean:=true;
921 l_stmt varchar2(10000);
922 Begin
923   if g_exec_flag= false then
924     return;
925   end if;
926   Begin
927     if g_debug then
928       write_to_log_file_n('Going to execute ');
929       write_to_log_file(g_err_check_stmt);
930     end if;
931     open cv for g_err_check_stmt;
932     fetch cv into v_int;
933     close cv;
934     if v_int is null then
935       l_insert:=true;
936       write_to_log_file_n('Need to insert ERR  for '||g_levels(p_level_index));
937     else
938       l_insert:=false;
939       write_to_log_file_n('ERR already present for '||g_levels(p_level_index));
940       return ;
941     end if;
942   Exception when others then
943     g_status_message:=sqlerrm;
944     write_to_log_file_n(g_status_message||get_time);
945     write_to_log_file('Problem statement '||g_err_check_stmt);
946     g_status:=false;
947     return;
948   end;
949   if l_insert then
950    l_stmt:=g_err_insert_stmt;
951   else
952     if g_coll_engine_call=false then
953       l_stmt:=g_err_update_stmt;
954     else
955       return;
956     end if;
957   end if;
958   if g_debug then
959     write_to_log_file_n('Going to execute ');
960     write_to_log_file(l_stmt);
961   end if;
962   Begin
963     execute immediate l_stmt;
964     write_to_log_file_n('Processed '||sql%rowcount||' rows');
965   Exception when others then
966     g_status_message:=sqlerrm;
967     write_to_log_file_n(g_status_message||get_time);
968     write_to_log_file('Problem stmt '||l_stmt);
969     g_status:=false;
970   end;
971 Exception when others then
972   g_status_message:=sqlerrm;
973   write_to_log_file_n(g_status_message||get_time);
974   g_status:=false;
975 End;
976 
977 PROCEDURE Get_all_cols(p_index number) IS
978 l_relation_key EDW_OWB_COLLECTION_UTIL.varcharTableType;
979 l_item_key EDW_OWB_COLLECTION_UTIL.varcharTableType;
980 l_data_key EDW_OWB_COLLECTION_UTIL.varcharTableType;
981 l_type_key EDW_OWB_COLLECTION_UTIL.varcharTableType;
982 l_number_key number:=1;
983 l_relation EDW_OWB_COLLECTION_UTIL.varcharTableType;
984 l_item EDW_OWB_COLLECTION_UTIL.varcharTableType;
985 l_item_length EDW_OWB_COLLECTION_UTIL.numberTableType;
986 l_data EDW_OWB_COLLECTION_UTIL.varcharTableType;
987 l_type EDW_OWB_COLLECTION_UTIL.varcharTableType;
988 l_parent EDW_OWB_COLLECTION_UTIL.varcharTableType;
989 l_number number:=1;
990 l_found boolean;
991 l_owner varchar2(400);
992 Begin
993 
994  Begin
995   open c2(g_dim_id(p_index));
996   loop
997    fetch c2 into
998 	l_relation_key(l_number_key),
999 	l_item_key(l_number_key),
1000 	l_data_key(l_number_key),
1001 	l_type_key(l_number_key),
1005    end loop;
1002     l_parent(l_number_key);
1003     exit when c2%notfound;
1004     l_number_key:=l_number_key+1;
1006    l_number_key:=l_number_key-1;
1007    close c2;
1008  exception when others then
1009   if c2%isopen then
1010     close c2;
1011   end if;
1012   g_status_message:=sqlerrm;
1013   write_to_log_file_n('Error in cursor c2 Get_all_cols for '||g_dim_name(p_index)||' '||
1014     g_status_message||get_time);
1015   g_status:=false;
1016   return;
1017  end;
1018  Begin
1019   --get the table owner
1020   l_owner:=EDW_OWB_COLLECTION_UTIL.get_table_owner(g_dim_name(p_index));
1021   if g_debug then
1022     write_to_log_file_n('The owner for '||g_dim_name(p_index)||' is '||l_owner);
1023   end if;
1024   if l_owner is null then
1025     g_status_message:=EDW_OWB_COLLECTION_UTIL.g_status_message;
1026     g_status:=false;
1027     return;
1028   end if;
1029   open c3(g_dim_id(p_index),l_owner);
1030   loop
1031    fetch c3 into
1032     l_relation(l_number),
1033     l_item(l_number),
1034     l_item_length(l_number),
1035     l_data(l_number);
1036     exit when c3%notfound;
1037     l_number:=l_number+1;
1038    end loop;
1039    --l_number:=l_number-1;
1040    close c3;
1041  exception when others then
1042   if c3%isopen then
1043     close c3;
1044   end if;
1045   g_status_message:=sqlerrm;
1046   write_to_log_file_n('Error in cursor c3 Get_all_cols for '||g_dim_name(p_index)||' '||
1047     g_status_message||get_time);
1048   g_status:=false;
1049  end;
1050  begin
1051    open c3_II(g_dim_id(p_index),l_owner);
1052    loop
1053    fetch c3_II into
1054     l_relation(l_number),
1055     l_item(l_number),
1056     l_item_length(l_number),
1057     l_data(l_number);
1058     exit when c3_II%notfound;
1059     l_number:=l_number+1;
1060    end loop;
1061    l_number:=l_number-1;
1062    close c3_II;
1063  exception when others then
1064    g_status_message:=sqlerrm;
1065    write_to_log_file_n('Error in cursor c3_II Get_all_cols for '||g_dim_name(p_index)||' '||
1066    g_status_message||get_time);
1067    g_status:=false;
1068  end ;
1069  --assign the pk and fk to the levels
1070  --for each level, we also make the dml stmt
1071  for i in 1..g_number_levels loop
1072    g_level_fk_number:=0;
1073    g_level_pk_number:=0;
1074    g_level_col_number:=0;
1075    g_varchar_pk_index:=0;
1076    for j in 1..l_number_key loop
1077      if l_relation_key(j)=g_levels(i) then
1078        if l_type_key(j)='PK' then
1079          g_level_pk_number:=g_level_pk_number+1;
1080          g_level_pk(g_level_pk_number):=l_item_key(j);
1081          g_level_pk_datatype(g_level_pk_number):=l_data_key(j);
1082          if l_data_key(j) = 'VARCHAR2' then
1083            g_varchar_pk_index:=g_level_pk_number;
1084          end if;
1085        elsif l_type_key(j)='FK' then
1086          g_level_fk_number:=g_level_fk_number+1;
1087          g_level_fk(g_level_fk_number):=l_item_key(j);
1088          g_level_fk_datatype(g_level_fk_number):=l_data_key(j);
1089          g_level_fk_parent(g_level_fk_number):=l_parent(j);
1090        end if;
1091      end if;
1092    end loop;
1093    if g_debug then
1094      write_to_log_file_n('Level '||g_levels(i)||' , the unique keys and data type ');
1095      for j in 1..g_level_pk_number loop
1096        write_to_log_file(g_level_pk(j)||'     '||g_level_pk_datatype(j));
1097      end loop;
1098      write_to_log_file_n('Level '||g_levels(i)||' , the foreign keys and data type ');
1099      for j in 1..g_level_fk_number loop
1100        write_to_log_file(g_level_fk(j)||'     '||g_level_fk_datatype(j)||' '||g_level_fk_parent(j));
1101      end loop;
1102    end if;
1103    for j in 1..l_number loop
1104      if l_relation(j)=g_levels(i) then
1105        l_found:=false;
1106        for k in 1..g_level_pk_number loop
1107          if g_level_pk(k)=l_item(j) then
1108            l_found:=true;
1109  	       exit;
1110          end if;
1111        end loop;
1112        if l_found=false then
1113          for k in 1..g_level_fk_number loop
1114            if g_level_fk(k)=l_item(j) then
1115              l_found:=true;
1116  	         exit;
1117            end if;
1118          end loop;
1119          if l_found=false then
1120            g_level_col_number:=g_level_col_number+1;
1121            g_level_cols(g_level_col_number):=l_item(j);
1122            g_level_cols_length(g_level_col_number):=l_item_length(j);
1123            g_level_cols_datatype(g_level_col_number):=l_data(j);
1124          end if;
1125        end if;
1126      end if;
1127    end loop;
1128    if g_debug then
1129      write_to_log_file_n('Level '||g_levels(i)||', the columns and datatype and length ');
1130      for j in 1..g_level_col_number loop
1131        write_to_log_file(g_level_cols(j)||'       '||
1132         g_level_cols_datatype(j)||'    '||g_level_cols_length(j));
1133      end loop;
1134    end if;
1135    --make the stmt
1136    Make_insert_stmt(i);      --pass the level index
1137    --EDW_OWB_COLLECTION_UTIL.print_stmt(g_insert_stmt);
1138    if g_status = false then
1139      return;
1140    end if;
1144      if g_status = false then
1141    --we dont need to make update anymore. no updates at all..if the row is there, just skip the level
1142    if g_coll_engine_call=false then
1143      Make_update_stmt(i);      --pass the level index
1145        return;
1146      end if;
1147    end if;
1148    Execute_insert_stmt_level(i);
1149    if g_status = false then
1150      return;
1151    end if;
1152    if g_level_status(i) <> 'P' then --no need for all level
1153      Execute_err_insert_stmt_level(i);
1154      if g_status = false then
1155        return;
1156      end if;
1157    end if;
1158  end loop;
1159  Exception when others then
1160    g_status_message:=sqlerrm;
1161    write_to_log_file_n('Error in Get_all_cols for '||g_dim_name(p_index)||' '||
1162     g_status_message||get_time);
1163    g_status:=false;
1164 End;--PROCEDURE Get_all_cols(p_index number)
1165 
1166 PROCEDURE Execute_insert_stmt IS
1167 Begin
1168 
1169 for i in 1..g_number_dims loop
1170   g_status:=true;
1171   Parse_Metadata(i);
1172   if g_status then
1173     Get_all_cols(i);
1174   else
1175     g_all_dims_ok:=false;
1176     write_to_log_file_n('Error in Dimension '||g_dim_name(i)||' '||
1177         g_status_message||get_time);
1178   end if;
1179   if g_status=true then
1180     write_to_log_file_n('Finished Dimension '||g_dim_name(i)||get_time);
1181   else
1182     write_to_log_file_n('Error in Dimension '||g_dim_name(i)||' '||
1183         g_status_message||get_time);
1184     g_all_dims_ok:=false;
1185   end if;
1186 end loop;
1187 
1188 End;--PROCEDURE Execute_insert_stmt IS
1189 
1190 PROCEDURE Init_All IS
1191 Begin
1192 g_conc_program_name:='EDW_NAEDW_PUSH';
1193 EDW_OWB_COLLECTION_UTIL.init_all(g_conc_program_name,null,'bis.edw.loader');
1194 write_to_log_file_n('Finished setting up the log file');
1195 if g_debug is null then
1196   if fnd_profile.value('EDW_DEBUG')='Y' then
1197     g_debug:=true;--look at the profile value for this
1198   else
1199     g_debug:=false;
1200   end if;
1201 end if;
1202 g_coll_engine_call:=false;
1203 g_status:=true;
1204 g_status_message:=' ';
1205 g_exec_flag:=true;
1206 g_all_dims_ok:=true;
1207 g_number_dims:=0;
1208 g_dim_string_flag:=false;--user specifies the list of dims
1209 g_level_fk_number:=0;
1210 g_level_col_number:=0;
1211 FND_MESSAGE.SET_NAME('BIS','EDW_UNASSIGNED');
1212 g_unassigned:=FND_MESSAGE.GET;
1213 g_unassigned:=replace(g_unassigned,'''','''''');
1214 FND_MESSAGE.SET_NAME('BIS','EDW_INVALID');
1215 g_invalid:=FND_MESSAGE.GET;
1216 g_invalid:=replace(g_invalid,'''','''''');
1217 if g_debug then
1218   write_to_log_file_n('Unassigned is '||g_unassigned);
1219   write_to_log_file_n('Invalid Record is '||g_invalid);
1220 end if;
1221 g_unassigned_length:=length(g_invalid);
1222 g_invalid_length:=length(g_unassigned);
1223 write_to_log_file_n('Finished assigning g_unassigned');
1224 g_naedw_varchar2:='NA_EDW';
1225 g_err_varchar2:='NA_ERR';
1226 g_naedw_date:='to_date(''01/01/1000'',''MM/DD/YYYY'')';
1227 g_naedw_number:='0';
1228 g_err_number:='-1';
1229 g_all_varchar2:='ALL';
1230 FND_MESSAGE.SET_NAME('BIS','EDW_ALL');
1231 g_all_varchar2_mesg:=FND_MESSAGE.GET;
1232 g_all_varchar2_mesg:=replace(g_all_varchar2_mesg,'''','''''');
1233 g_all_varchar2_mesg_length:=length(g_all_varchar2_mesg);
1234 if g_debug then
1235   write_to_log_file_n('All is '||g_all_varchar2_mesg);
1236 end if;
1237 write_to_log_file_n('Finished assigning g_all');
1238 g_all_number:='1';
1239 g_all_date:='to_date(''01/01/1000'',''MM/DD/YYYY'')';
1240 g_conc_program_id:=FND_GLOBAL.Conc_request_id;--my conc id
1241 write_to_log_file_n('Concurrent request ID '||g_conc_program_id);
1242 Exception when others then
1243  write_to_log_file_n('Error in Init '||sqlerrm||get_time);
1244  g_status_message:=sqlerrm;
1245  g_status:=false;
1246 End;--PROCEDURE Init_All;
1247 
1248 procedure finish_all(p_flag boolean) is
1249 begin
1250   if p_flag=true then
1251     EDW_OWB_COLLECTION_UTIL.commit_conc_program_log;--this issues a commit
1252   else
1253     rollback;
1254     EDW_OWB_COLLECTION_UTIL.commit_conc_program_log;
1255   end if;
1256 End;--procedure finish_all(p_flag boolean) is
1257 
1258 
1259 function get_time return varchar2 is
1260 begin
1261   return ' '||to_char(sysdate,'MM/DD/YYYY HH24:MI:SS');
1262 Exception when others then
1263   write_to_log_file_n('Error in get_time '||sqlerrm);
1264 
1265 End;
1266 
1267 procedure write_to_log_file(p_message varchar2) is
1268 begin
1269  EDW_OWB_COLLECTION_UTIL.write_to_log_file(p_message);
1270 Exception when others then
1271  null;
1272 End;
1273 
1274 procedure write_to_log_file_n(p_message varchar2) is
1275 begin
1276  write_to_log_file('   ');
1277  write_to_log_file(p_message);
1278 Exception when others then
1279  null;
1280 End;
1281 
1282 function get_dim_pk(p_dim varchar2) return boolean is
1283 l_stmt varchar2(4000);
1284 TYPE CurTyp IS REF CURSOR;
1285 cv   CurTyp;
1286 Begin
1287   l_stmt:='select pk_item.column_name from edw_dimensions_md_v rel , edw_unique_keys_md_v pk, '||
1288   'edw_pvt_key_columns_md_v isu,edw_pvt_columns_md_v pk_item where rel.dim_name=:a '||
1289   'and pk.entity_id=rel.dim_id and pk.primarykey=1  '||
1290   'and isu.key_id=pk.key_id and pk_item.column_id=isu.column_id ';
1291   if g_debug then
1292     write_to_log_file_n('Going to execute '||l_stmt);
1293   end if;
1294   open cv for l_stmt using p_dim;
1295   fetch cv into g_dim_pk;
1296   close cv;
1297   if g_debug then
1298     write_to_log_file_n('Dim pk is '||g_dim_pk);
1299   end if;
1300   return true;
1301 Exception when others then
1302  g_status_message:=sqlerrm;
1303  g_status:=false;
1304  write_to_log_file_n(g_status_message);
1305  return false;
1306 End;
1307 
1308 function naedw_in_star(p_dim varchar2) return boolean is
1309 Begin
1310   if EDW_OWB_COLLECTION_UTIL.does_table_have_data(p_dim,g_dim_pk||'=0')=2 then
1311     return true;
1312   else
1313     return false;
1314   end if;
1315 Exception when others then
1316  g_status_message:=sqlerrm;
1317  g_status:=false;
1318  write_to_log_file_n(g_status_message);
1319  return false;
1320 End;
1321 
1322 function err_in_star(p_dim varchar2) return boolean is
1323 Begin
1324   if EDW_OWB_COLLECTION_UTIL.does_table_have_data(p_dim,g_dim_pk||'=-1')=2 then
1325     return true;
1326   else
1327     return false;
1328   end if;
1329 Exception when others then
1330  g_status_message:=sqlerrm;
1331  g_status:=false;
1332  write_to_log_file_n(g_status_message);
1333  return false;
1334 End;
1335 
1336 
1337 END EDW_NAEDW_PUSH;