[Home] [Help]
PROCEDURE: SYS.PATCH_XDB$RESOURCE_T
Source
1 procedure PATCH_XDB$RESOURCE_T IS
2 attr_no_RCL number;
3 attr_no_COBI number;
4 attr_no_BV number;
5 found_XDBHI number;
6 patch_COBI boolean;
7 patch_BV boolean;
8 patch_XDBHI boolean;
9 begin
10 select attr_no into attr_no_RCL from DBA_TYPE_ATTRS
11 where owner = 'XDB' and TYPE_NAME = 'XDB$RESOURCE_T'
12 and ATTR_NAME = 'RCLIST';
13 select attr_no into attr_no_COBI from DBA_TYPE_ATTRS
14 where owner = 'XDB' and TYPE_NAME = 'XDB$RESOURCE_T'
15 and ATTR_NAME = 'CHECKEDOUTBYID';
16 select attr_no into attr_no_BV from DBA_TYPE_ATTRS
17 where owner = 'XDB' and TYPE_NAME = 'XDB$RESOURCE_T'
18 and ATTR_NAME = 'BASEVERSION';
19 select count(*) into found_XDBHI from DBA_INDEXES
20 where owner = 'XDB' and TABLE_NAME = 'XDB$RESOURCE'
21 and INDEX_NAME = 'XDBHI_IDX';
22
23 -- correct attribute order: RCLIST < CHECKEDOUTBYID < BASEVERSION
24 patch_COBI := (attr_no_RCL > attr_no_COBI);
25 patch_BV := (attr_no_RCL > attr_no_BV) OR (attr_no_COBI > attr_no_BV);
26 patch_XDBHI := (found_XDBHI > 0) AND (patch_COBI OR patch_BV);
27
28 -- decide whether XDB_RESOURCE_T needs patching
29 if (patch_COBI OR patch_BV OR patch_XDBHI) then
30 dbms_output.put_line('Patching XDB.XDB$RESOURCE_T');
31 else
32 dbms_output.put_line('No need to patch XDB.XDB$RESOURCE_T');
33 return;
34 end if;
35
36 -- remove dependencies temporarily
37 if patch_XDBHI then
38 dbms_output.put_line(
39 ' Dropping index XDB.XDBHI_IDX on XDB.XDB_RESOURCE');
40 execute immediate 'drop index XDB.XDBHI_IDX';
41 end if;
42
43 -- patch CHECKEDOUTBYID
44 if patch_COBI then
45 dbms_output.put_line(
46 ' Patching attribute CHECKEDOUTBYID');
47 execute immediate
48 'alter type XDB.XDB$RESOURCE_T drop attribute CHECKEDOUTBYID cascade';
49 execute immediate
50 'alter type XDB.XDB$RESOURCE_T add attribute (CHECKEDOUTBYID RAW(16)) cascade';
51 end if;
52
53 -- patch BASEVERSION
54 if patch_BV then
55 dbms_output.put_line(
56 ' Patching attribute BASEVERSION');
57 execute immediate
58 'alter type XDB.XDB$RESOURCE_T drop attribute BASEVERSION cascade';
59 execute immediate
60 'alter type XDB.XDB$RESOURCE_T add attribute (BASEVERSION RAW(16)) cascade';
61 end if;
62
63 -- restore dependencies
64 if patch_XDBHI then
65 dbms_output.put_line(
66 ' Re-creating index XDB.XDBHI_IDX on XDB.XDB_RESOURCE');
67 execute immediate
68 'create index xdb.xdbhi_idx on xdb.xdb$resource p (value(p)) indextype is xdb.xdbhi_idxtyp';
69 end if;
70 end;