DBA Data[Home] [Help]

FUNCTION: SYS.LOGSTDBY$TABF

Source


1 function logstdby$tabf (request in varchar2 default null)
2 return logstdby$srecs pipelined parallel_enable
3 is
4   lsby_object_row logstdby$srec := logstdby$srec('','',0,0,0,0);
5   type lsby_tcur is ref cursor return logstdby_support_tab_10_1%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 request is null then
13     select database_role into role from sys.v$database;
14   else
15     role := request;
16   end if;
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     open dataset for select * from logstdby_support_tab_12_1;
43   elsif  compat_num >= 11020003 then
44     open dataset for select * from logstdby_support_tab_11_2b;
45   elsif compat_num >= 11020000 then
46     open dataset for select * from logstdby_support_tab_11_2;
47   elsif compat_num >= 11000000 then
48     open dataset for select * from logstdby_support_tab_11_1;
49   elsif compat_num >= 10020000 then
50     open dataset for select * from logstdby_support_tab_10_2;
51   else
52     open dataset for select * from logstdby_support_tab_10_1;
53   end if;
54 
55   loop
56     fetch dataset into lsby_query_row;
57     exit when dataset%NOTFOUND;
58     lsby_object_row.owner  := lsby_query_row.owner;
59     lsby_object_row.name   := lsby_query_row.name ;
60     lsby_object_row.type#  := lsby_query_row.type#;
61     lsby_object_row.obj#   := lsby_query_row.obj# ;
62     lsby_object_row.current_sby := lsby_query_row.current_sby;
63     lsby_object_row.gensby := lsby_query_row.gensby;
64     pipe row (lsby_object_row);
65   end loop;
66   close dataset;
67 
68   exception when others then
69     if dataset%ISOPEN then
70       close dataset;
71     end if;
72 end;