DBA Data[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;