DBA Data[Home] [Help]

FUNCTION: SYS.LOGSTDBY$UTABF

Source


1 function logstdby$utabf (viewusage in varchar2)
2 return logstdby$urecs pipelined parallel_enable
3 is
4   lsby_object_row logstdby$urec := logstdby$urec('','','','',0,0,0,0,0);
5   type lsby_tcur is ref cursor return logstdby_unsupport_tab_10_2%ROWTYPE;
6   dataset lsby_tcur;
7   lsby_query_row dataset%ROWTYPE;
8   cmpat varchar2(16);
9   compat_num number;
10   role  varchar2(16);
11 begin
12   if ((viewusage <> 'LOGSTDBY') and (viewusage <> 'ROLLING')) then
13     return;
14   end if;
15 
16   select database_role into role from sys.v$database;
17 
18   if role = 'PRIMARY' then
19     select substr(value,1,8) into cmpat
20     from sys.v$parameter where name = 'compatible';
21   else
22     select nvl(
23       (select substr(x.redo_compat,1,8)
24        from sys.x$krvslvst x),
25       (select substr(v.value,1,8) from sys.v$parameter v
26        where name = 'compatible')) into cmpat from dual;
27   end if;
28 
29   /* Convert version string like 10.2.0.3.1 to number like 10020003   */
30   /* preserving only the first 4 numbers in the string.  */
31 
32   compat_num :=
33     nvl(to_number(substr(regexp_substr(cmpat, '\d+', 1,1),1,7),'9999999'),0)
34       * 1000000 +
35     nvl(to_number(substr(regexp_substr(cmpat, '\d+', 1,2),1,2), '99'),0)
36       * 10000 +
37     nvl(to_number(substr(regexp_substr(cmpat, '\d+', 1,3),1,2), '99'),0)
38       * 100 +
39     nvl(to_number(substr(regexp_substr(cmpat, '\d+', 1,4),1,2), '99'),0);
40 
41   if compat_num >= 12000000 then
42     if viewusage = 'ROLLING' then
43       open dataset for select * from logstdby_ru_unsupport_tab_12_1;
44     else
45       open dataset for select * from logstdby_unsupport_tab_12_1;
46     end if;
47   elsif compat_num >= 11020003 then
48     open dataset for select * from logstdby_unsupport_tab_11_2b;
49   elsif compat_num >= 11020000 then
50     open dataset for select * from logstdby_unsupport_tab_11_2;
51   elsif compat_num >= 11000000 then
52     open dataset for select * from logstdby_unsupport_tab_11_1;
53   elsif compat_num >= 10020000 then
54     open dataset for select * from logstdby_unsupport_tab_10_2;
55   else
56     open dataset for select * from logstdby_unsupport_tab_10_1;
57   end if;
58 
59   loop
60     fetch dataset into lsby_query_row;
61     exit when dataset%NOTFOUND;
62     if lsby_query_row.gensby = 0  or
63        lsby_query_row.gensby = -2
64     then
65       lsby_object_row.owner       := lsby_query_row.owner;
66       lsby_object_row.table_name  := lsby_query_row.table_name;
67       lsby_object_row.column_name := lsby_query_row.column_name;
68       lsby_object_row.attributes  := lsby_query_row.attributes;
69       lsby_object_row.type#       := lsby_query_row.type#;
70       lsby_object_row.scale       := lsby_query_row.scale;
71       lsby_object_row.precision#  := lsby_query_row.precision#;
72       lsby_object_row.charsetform := lsby_query_row.charsetform;
73       lsby_object_row.gensby      := lsby_query_row.gensby;
74       pipe row (lsby_object_row);
75     end if;
76   end loop;
77   close dataset;
78 
79   exception when others then
80     if dataset%ISOPEN then
81       close dataset;
82     end if;
83 end;