select u.name, o.name, co.name, c.upper_bound,
decode(bitand(c.properties, 32768), 32768, 'REF',
decode(bitand(c.properties, 16384), 16384, 'POINTER')),
nvl2(c.synobj#, (select u.name from user$ u, "_CURRENT_EDITION_OBJ" o
where o.owner#=u.user# and o.obj#=c.synobj#),
decode(bitand(et.properties, 64), 64, null, eu.name)),
nvl2(c.synobj#, (select o.name from "_CURRENT_EDITION_OBJ" o where o.obj#=c.synobj#),
decode(et.typecode,
9, decode(c.charsetform, 2, 'NVARCHAR2', eo.name),
96, decode(c.charsetform, 2, 'NCHAR', eo.name),
112, decode(c.charsetform, 2, 'NCLOB', eo.name),
eo.name)),
c.length, c.precision, c.scale,
decode(c.charsetform, 1, 'CHAR_CS',
2, 'NCHAR_CS',
3, NLS_CHARSET_NAME(c.charsetid),
4, 'ARG:'||c.charsetid),
decode(bitand(c.properties, 131072), 131072, 'FIXED',
decode(bitand(c.properties, 262144), 262144, 'VARYING')),
decode(bitand(c.properties, 65536), 65536, 'NO', 'YES'),
decode(bitand(c.properties, 4096), 4096, 'C', 'B')
from sys.user$ u, sys."_CURRENT_EDITION_OBJ" o, sys.collection$ c, sys."_CURRENT_EDITION_OBJ" co,
sys."_CURRENT_EDITION_OBJ" eo, sys.user$ eu, sys.type$ et
where o.owner# = u.user#
and o.type# <> 10 -- must not be invalid
and o.oid$ = c.toid
and o.subname IS NULL -- only the most recent version
and c.coll_toid = co.oid$
and c.elem_toid = eo.oid$
and eo.owner# = eu.user#
and c.elem_toid = et.tvoid
and c.package_obj# IS NULL -- filter out plsql types
and (o.owner# = userenv('SCHEMAID')
or
o.obj# in (select oa.obj#
from sys.objauth$ oa
where grantee# in (select kzsrorol
from x$kzsro))
or /* user has system privileges */
exists (select null from v$enabledprivs
where priv_number in (-184 /* EXECUTE ANY TYPE */,
-181 /* CREATE ANY TYPE */)))
SELECT U.NAME
, O.NAME
, CO.NAME
, C.UPPER_BOUND
,
DECODE(BITAND(C.PROPERTIES
, 32768)
, 32768
, 'REF'
,
DECODE(BITAND(C.PROPERTIES
, 16384)
, 16384
, 'POINTER'))
,
NVL2(C.SYNOBJ#
, (SELECT U.NAME
FROM USER$ U
, "_CURRENT_EDITION_OBJ" O
WHERE O.OWNER#=U.USER#
AND O.OBJ#=C.SYNOBJ#)
,
DECODE(BITAND(ET.PROPERTIES
, 64)
, 64
, NULL
, EU.NAME))
,
NVL2(C.SYNOBJ#
, (SELECT O.NAME
FROM "_CURRENT_EDITION_OBJ" O
WHERE O.OBJ#=C.SYNOBJ#)
,
DECODE(ET.TYPECODE
,
9
, DECODE(C.CHARSETFORM
, 2
, 'NVARCHAR2'
, EO.NAME)
,
96
, DECODE(C.CHARSETFORM
, 2
, 'NCHAR'
, EO.NAME)
,
112
, DECODE(C.CHARSETFORM
, 2
, 'NCLOB'
, EO.NAME)
,
EO.NAME))
,
C.LENGTH
, C.PRECISION
, C.SCALE
,
DECODE(C.CHARSETFORM
, 1
, 'CHAR_CS'
,
2
, 'NCHAR_CS'
,
3
, NLS_CHARSET_NAME(C.CHARSETID)
,
4
, 'ARG:'||C.CHARSETID)
,
DECODE(BITAND(C.PROPERTIES
, 131072)
, 131072
, 'FIXED'
,
DECODE(BITAND(C.PROPERTIES
, 262144)
, 262144
, 'VARYING'))
,
DECODE(BITAND(C.PROPERTIES
, 65536)
, 65536
, 'NO'
, 'YES')
,
DECODE(BITAND(C.PROPERTIES
, 4096)
, 4096
, 'C'
, 'B')
FROM SYS.USER$ U
, SYS."_CURRENT_EDITION_OBJ" O
, SYS.COLLECTION$ C
, SYS."_CURRENT_EDITION_OBJ" CO
,
SYS."_CURRENT_EDITION_OBJ" EO
, SYS.USER$ EU
, SYS.TYPE$ ET
WHERE O.OWNER# = U.USER#
AND O.TYPE# <> 10 -- MUST NOT BE INVALID
AND O.OID$ = C.TOID
AND O.SUBNAME IS NULL -- ONLY THE MOST RECENT VERSION
AND C.COLL_TOID = CO.OID$
AND C.ELEM_TOID = EO.OID$
AND EO.OWNER# = EU.USER#
AND C.ELEM_TOID = ET.TVOID
AND C.PACKAGE_OBJ# IS NULL -- FILTER OUT PLSQL TYPES
AND (O.OWNER# = USERENV('SCHEMAID')
OR
O.OBJ# IN (SELECT OA.OBJ#
FROM SYS.OBJAUTH$ OA
WHERE GRANTEE# IN (SELECT KZSROROL
FROM X$KZSRO))
OR /* USER HAS SYSTEM PRIVILEGES */
EXISTS (SELECT NULL
FROM V$ENABLEDPRIVS
WHERE PRIV_NUMBER IN (-184 /* EXECUTE ANY TYPE */
,
-181 /* CREATE ANY TYPE */)))
|
|
|