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;