SELECT f.fname, fo.gname, rc.sname, rc.oname, rc.lcname,
decode(rc.ctype,
1, decode(rc.charsetform, 2, 'NVARCHAR2', 'VARCHAR2'),
2, 'NUMBER',
12, 'DATE',
23, decode(utl_raw.bit_and(utl_raw.substr(rc.property, 1, 1), '04'),
'04', rc.ctype_name,
-- for soidref_fk_attr we want to display the real column type
decode(utl_raw.bit_and(utl_raw.substr(rc.property, 2, 1), '02'),
'02', rc.ctype_name,
'RAW')),
58, rc.ctype_name,
69, 'ROWID',
96, decode(rc.charsetform, 2, 'NCHAR', 'CHAR'),
112, NVL(rc.ctype_name, decode(rc.charsetform, 2, 'NCLOB', 'CLOB')),
113, 'BLOB',
111, rc.ctype_name,
121, rc.ctype_name,
122, rc.ctype_name,
123, rc.ctype_name,
'UNDEFINED'),
rc.pos, fo.gowner,
rc.toid,
rc.ctype_owner,
RAWTOHEX(rc.hashcode),
DECODE(rc.ctype,
111, 'REF',
23,
decode(utl_raw.bit_and(utl_raw.substr(rc.property,2,1),'02'),
'02', 'REF')
),
decode(rc.ctype, 23,
-- nested table column SETID (in the parent table)
decode(utl_raw.bit_and(utl_raw.substr(rc.property, 1, 1), '08'),
'08',decode(rc.top, rc.lcname, NULL, rc.top), rc.top),
-- for XMLType storage column
112, decode(rc.top, rc.lcname, NULL, rc.top),
rc.top),
rc.cname, rc.property
FROM system.repcat$_repcolumn rc, system.repcat$_flavor_objects fo,
system.repcat$_flavors f, system.repcat$_repobject ro
WHERE f.flavor_id = fo.flavor_id
AND f.gname = fo.gname
AND f.gowner = fo.gowner
AND rc.sname = fo.sname AND rc.oname = fo.oname
AND fo.type in (2, -1)
AND ro.sname = rc.sname
AND ro.oname = rc.oname
AND ro.type = rc.type
AND ro.gname = fo.gname
AND ro.gowner = fo.gowner
AND rc.pos IS NOT NULL
AND
((mod(rc.pos-1,8) < 4
AND fo.columns_present IS NOT NULL
-- the following AND clauses are necessary to avoid
-- invoking utl_raw.substr with fo.columns_present from one
-- object while rc.pos is from another object.
AND fo.sname = rc.sname
AND fo.oname = rc.oname
AND fo.type = rc.type
AND utl_raw.bit_and(utl_raw.substr(fo.columns_present,
floor((rc.pos-1)/8)+1, 1),
to_char(power(2, mod(rc.pos-1,8))))
!= '00')
OR
(mod(rc.pos-1,8) >= 4
AND fo.columns_present IS NOT NULL
-- the following AND clauses are necessary to avoid
-- invoking utl_raw.substr with fo.columns_present from one
-- object while rc.pos is from another object.
AND fo.sname = rc.sname
AND fo.oname = rc.oname
AND fo.type = rc.type
AND utl_raw.bit_and(utl_raw.substr(fo.columns_present,
floor((rc.pos-1)/8)+1, 1),
to_char(10*power(2, mod(rc.pos-1,8)-4)))
!= '00'))
SELECT F.FNAME
, FO.GNAME
, RC.SNAME
, RC.ONAME
, RC.LCNAME
,
DECODE(RC.CTYPE
,
1
, DECODE(RC.CHARSETFORM
, 2
, 'NVARCHAR2'
, 'VARCHAR2')
,
2
, 'NUMBER'
,
12
, 'DATE'
,
23
, DECODE(UTL_RAW.BIT_AND(UTL_RAW.SUBSTR(RC.PROPERTY
, 1
, 1)
, '04')
,
'04'
, RC.CTYPE_NAME
,
-- FOR SOIDREF_FK_ATTR WE WANT TO DISPLAY THE REAL COLUMN TYPE
DECODE(UTL_RAW.BIT_AND(UTL_RAW.SUBSTR(RC.PROPERTY
, 2
, 1)
, '02')
,
'02'
, RC.CTYPE_NAME
,
'RAW'))
,
58
, RC.CTYPE_NAME
,
69
, 'ROWID'
,
96
, DECODE(RC.CHARSETFORM
, 2
, 'NCHAR'
, 'CHAR')
,
112
, NVL(RC.CTYPE_NAME
, DECODE(RC.CHARSETFORM
, 2
, 'NCLOB'
, 'CLOB'))
,
113
, 'BLOB'
,
111
, RC.CTYPE_NAME
,
121
, RC.CTYPE_NAME
,
122
, RC.CTYPE_NAME
,
123
, RC.CTYPE_NAME
,
'UNDEFINED')
,
RC.POS
, FO.GOWNER
,
RC.TOID
,
RC.CTYPE_OWNER
,
RAWTOHEX(RC.HASHCODE)
,
DECODE(RC.CTYPE
,
111
, 'REF'
,
23
,
DECODE(UTL_RAW.BIT_AND(UTL_RAW.SUBSTR(RC.PROPERTY
, 2
, 1)
, '02')
,
'02'
, 'REF')
)
,
DECODE(RC.CTYPE
, 23
,
-- NESTED TABLE COLUMN SETID (IN THE PARENT TABLE)
DECODE(UTL_RAW.BIT_AND(UTL_RAW.SUBSTR(RC.PROPERTY
, 1
, 1)
, '08')
,
'08'
, DECODE(RC.TOP
, RC.LCNAME
, NULL
, RC.TOP)
, RC.TOP)
,
-- FOR XMLTYPE STORAGE COLUMN
112
, DECODE(RC.TOP
, RC.LCNAME
, NULL
, RC.TOP)
,
RC.TOP)
,
RC.CNAME
, RC.PROPERTY
FROM SYSTEM.REPCAT$_REPCOLUMN RC
, SYSTEM.REPCAT$_FLAVOR_OBJECTS FO
,
SYSTEM.REPCAT$_FLAVORS F
, SYSTEM.REPCAT$_REPOBJECT RO
WHERE F.FLAVOR_ID = FO.FLAVOR_ID
AND F.GNAME = FO.GNAME
AND F.GOWNER = FO.GOWNER
AND RC.SNAME = FO.SNAME
AND RC.ONAME = FO.ONAME
AND FO.TYPE IN (2
, -1)
AND RO.SNAME = RC.SNAME
AND RO.ONAME = RC.ONAME
AND RO.TYPE = RC.TYPE
AND RO.GNAME = FO.GNAME
AND RO.GOWNER = FO.GOWNER
AND RC.POS IS NOT NULL
AND
((MOD(RC.POS-1
, 8) < 4
AND FO.COLUMNS_PRESENT IS NOT NULL
-- THE FOLLOWING
AND CLAUSES ARE NECESSARY TO AVOID
-- INVOKING UTL_RAW.SUBSTR WITH FO.COLUMNS_PRESENT
FROM ONE
-- OBJECT WHILE RC.POS IS
FROM ANOTHER OBJECT.
AND FO.SNAME = RC.SNAME
AND FO.ONAME = RC.ONAME
AND FO.TYPE = RC.TYPE
AND UTL_RAW.BIT_AND(UTL_RAW.SUBSTR(FO.COLUMNS_PRESENT
,
FLOOR((RC.POS-1)/8)+1
, 1)
,
TO_CHAR(POWER(2
, MOD(RC.POS-1
, 8))))
!= '00')
OR
(MOD(RC.POS-1
, 8) >= 4
AND FO.COLUMNS_PRESENT IS NOT NULL
-- THE FOLLOWING
AND CLAUSES ARE NECESSARY TO AVOID
-- INVOKING UTL_RAW.SUBSTR WITH FO.COLUMNS_PRESENT
FROM ONE
-- OBJECT WHILE RC.POS IS
FROM ANOTHER OBJECT.
AND FO.SNAME = RC.SNAME
AND FO.ONAME = RC.ONAME
AND FO.TYPE = RC.TYPE
AND UTL_RAW.BIT_AND(UTL_RAW.SUBSTR(FO.COLUMNS_PRESENT
,
FLOOR((RC.POS-1)/8)+1
, 1)
,
TO_CHAR(10*POWER(2
, MOD(RC.POS-1
, 8)-4)))
!= '00'))
|
|
|