DBA Data[Home] [Help]

TYPE BODY: SYS.V_RANGERECSETIMPL_T

Source


1 type body v_RangeRecSetImpl_t is
2 
3   static function ODCITableStart(sctx   IN OUT v_RangeRecSetImpl_t,
4                                  opCode IN varchar2)
5     return number is
6   begin
7     -- instantiate the object and initialise curval.
8     sctx:=v_RangeRecSetImpl_t(0, 0, opCode);
9     return SYS.ODCIConst.Success;
10   end ODCITableStart;
11 
12   member function ODCITableFetch(self   IN OUT v_RangeRecSetImpl_t,
13                                  nrows  IN     number,
14                                  objSet OUT    v_RangeRecSet_t)
15     return number is
16 
17     n                number := 0;
18     i                number;
19     indx             number := 0;
20     dbcount          number;
21     ret              boolean;
22     restoreRangeTab  sys.dbms_rcvman.restoreRangeTab_t;
23 
24     CURSOR getAllDb_c IS SELECT  dbid FROM v$database;
25     dbDetail getAllDb_c%rowtype;
26 
27   begin
28     open getAllDb_c;
29     objSet := v_RangeRecSet_t();
30 
31     select count(*) into dbcount from v$database;
32 
33     while n < dbcount and self.done = 0 loop
34       n := n + 1;
35 
36       sys.dbms_rcvman.resetAll;
37       sys.dbms_rcvman.setAllIncarnations(TRUE);
38 
39       if (opCode = 'V$ANY') then
40         sys.dbms_rcvman.setDeviceTypeAny;
41       elsif (opCode = 'V$DISK') then
42         sys.dbms_rcvman.setDeviceType('DISK');
43       elsif (opCode = 'V$SBT') then
44         sys.dbms_rcvman.setDeviceType('SBT_TAPE');
45       end if;
46 
47       fetch getAllDb_c into dbDetail;
48       sys.dbms_rcvman.setdatabase(NULL, NULL, NULL, dbDetail.dbid);
49 
50       ret := sys.dbms_rcvman.getRestoreRangeSet(restoreRangeTab,
51                                                 opCode,
52                                                 dbDetail.dbid);
53       i := to_number(null);
54       LOOP
55         IF (i is null) THEN
56            i := restoreRangeTab.first;
57         ELSE
58            i := restoreRangeTab.next(i);
59         END IF;
60         EXIT WHEN i IS NULL;
61 
62         if (restoreRangeTab(i).isValidRange = TRUE) then
63           objSet.extend;
64           indx := indx + 1;
65           objSet(indx) := v_RangeRec_t(
66                                     to_number(null),
67                                     to_date(null),
68                                     to_date(null),
69                                     to_number(null),
70                                     to_number(null),
71                                     to_number(null),
72                                     to_number(null),
73                                     to_date(null),
74                                     to_date(null),
75                                     to_number(null));
76           if (ret = TRUE) then
77             objSet(indx).db_id            := dbDetail.dbid;
78             objSet(indx).low_time         := restoreRangeTab(i).lowTime;
79             objSet(indx).high_time        := restoreRangeTab(i).highTime;
80             objSet(indx).low_change#      := restoreRangeTab(i).lowScn;
81             objSet(indx).high_change#     := restoreRangeTab(i).highScn;
82             objSet(indx).low_resetlogs_change# := restoreRangeTab(i).lowRlgScn;
83             objSet(indx).high_resetlogs_change# :=
84                                                 restoreRangeTab(i).highRlgScn;
85             objSet(indx).low_resetlogs_time  := restoreRangeTab(i).lowRlgTime;
86             objSet(indx).high_resetlogs_time := restoreRangeTab(i).highRlgTime;
87             objSet(indx).con_id              := restoreRangeTab(i).con_id;
88           end if;
89         end if;
90       END LOOP;
91       self.curval := self.curval + 1;
92       if (self.curval = dbcount) then
93         self.done := 1;
94         close getAllDb_c;
95       end if;
96     end loop;
97 
98     return SYS.ODCIConst.Success;
99   end ODCITableFetch;
100 
101   member function ODCITableClose(self IN v_RangeRecSetImpl_t)
102     return number is
103   begin
104     return SYS.ODCIConst.Success;
105   end ODCITableClose;
106 end;