[Home] [Help]
select o.name,
c.name,
decode(c.type#, 1, decode(c.charsetform, 2, 'NVARCHAR2', 'VARCHAR2'),
2, decode(c.scale, null,
decode(c.precision#, null, 'NUMBER', 'FLOAT'),
'NUMBER'),
8, 'LONG',
9, decode(c.charsetform, 2, 'NCHAR VARYING', 'VARCHAR'),
12, 'DATE',
23, 'RAW', 24, 'LONG RAW',
58, nvl2(ac.synobj#, (select o.name from obj$ o
where o.obj#=ac.synobj#), ot.name),
69, 'ROWID',
96, decode(c.charsetform, 2, 'NCHAR', 'CHAR'),
100, 'BINARY_FLOAT',
101, 'BINARY_DOUBLE',
105, 'MLSLABEL',
106, 'MLSLABEL',
111, nvl2(ac.synobj#, (select o.name from obj$ o
where o.obj#=ac.synobj#), ot.name),
112, decode(c.charsetform, 2, 'NCLOB', 'CLOB'),
113, 'BLOB', 114, 'BFILE', 115, 'CFILE',
121, nvl2(ac.synobj#, (select o.name from obj$ o
where o.obj#=ac.synobj#), ot.name),
122, nvl2(ac.synobj#, (select o.name from obj$ o
where o.obj#=ac.synobj#), ot.name),
123, nvl2(ac.synobj#, (select o.name from obj$ o
where o.obj#=ac.synobj#), ot.name),
178, 'TIME(' ||c.scale|| ')',
179, 'TIME(' ||c.scale|| ')' || ' WITH TIME ZONE',
180, 'TIMESTAMP(' ||c.scale|| ')',
181, 'TIMESTAMP(' ||c.scale|| ')' || ' WITH TIME ZONE',
231, 'TIMESTAMP(' ||c.scale|| ')' || ' WITH LOCAL TIME ZONE',
182, 'INTERVAL YEAR(' ||c.precision#||') TO MONTH',
183, 'INTERVAL DAY(' ||c.precision#||') TO SECOND(' ||
c.scale || ')',
208, 'UROWID',
'UNDEFINED'),
decode(c.type#, 111, 'REF'),
nvl2(ac.synobj#, (select u.name from "_BASE_USER" u, obj$ o
where o.owner#=u.user# and o.obj#=ac.synobj#),
ut.name),
c.length, c.precision#, c.scale,
decode(sign(c.null$),-1,'D', 0, 'Y', 'N'),
decode(c.col#, 0, to_number(null), c.col#), c.deflength,
c.default$, h.distcnt,
case when SYS_OP_DV_CHECK(o.name, o.owner#) = 1
then h.lowval
else null
end,
case when SYS_OP_DV_CHECK(o.name, o.owner#) = 1
then h.hival
else null
end,
h.density, h.null_cnt,
case when nvl(h.distcnt,0) = 0 then h.distcnt
-- no histogram
when h.row_cnt = 0 then 1
-- hybrid histogram
when exists(select 1 from sys.histgrm$ hg
where c.obj# = hg.obj# and c.intcol# = hg.intcol#
and hg.ep_repeat_count > 0 and rownum < 2) then h.row_cnt
-- top-frequency histogram
when bitand(h.spare2, 64) > 0
then h.row_cnt
-- frequency histogram
when (bitand(h.spare2, 32) > 0 or h.bucket_cnt > 2049 or
(h.bucket_cnt >= h.distcnt and h.density*h.bucket_cnt < 1))
then h.row_cnt
-- height-balanced histogram
else h.bucket_cnt
end,
h.timestamp#, h.sample_size,
decode(c.charsetform, 1, 'CHAR_CS',
2, 'NCHAR_CS',
3, NLS_CHARSET_NAME(c.charsetid),
4, 'ARG:'||c.charsetid),
decode(c.charsetid, 0, to_number(NULL),
nls_charset_decl_len(c.length, c.charsetid)),
decode(bitand(h.spare2, 2), 2, 'YES', 'NO'),
decode(bitand(h.spare2, 1), 1, 'YES', 'NO'),
decode(bitand(h.spare2, 8), 8, 'INCREMENTAL ', '') ||
decode(bitand(h.spare2, 128), 128, 'HIST_FOR_INCREM_STATS ', '') ||
decode(bitand(h.spare2, 256), 256, 'HISTOGRAM_ONLY ', '') ||
decode(bitand(h.spare2, 512), 512, 'STATS_ON_LOAD ', ''),
h.avgcln,
c.spare3,
decode(c.type#, 1, decode(bitand(c.property, 8388608), 0, 'B', 'C'),
96, decode(bitand(c.property, 8388608), 0, 'B', 'C'),
null),
decode(bitand(ac.flags, 128), 128, 'YES', 'NO'),
decode(o.status, 1, decode(bitand(ac.flags, 256), 256, 'NO', 'YES'),
decode(bitand(ac.flags, 2), 2, 'NO',
decode(bitand(ac.flags, 4), 4, 'NO',
decode(bitand(ac.flags, 8), 8, 'NO',
'N/A')))),
decode(c.property, 0, 'NO', decode(bitand(c.property, 32), 32, 'YES',
'NO')),
decode(c.property, 0, 'NO', decode(bitand(c.property, 8), 8, 'YES',
'NO')),
decode(c.segcol#, 0, to_number(null), c.segcol#), c.intcol#,
-- warning! If you update stats related info, make sure to also update
-- GTT session private stats in cdoptim.sql
case when nvl(h.row_cnt,0) = 0 then 'NONE'
when exists(select 1 from sys.histgrm$ hg
where c.obj# = hg.obj# and c.intcol# = hg.intcol#
and hg.ep_repeat_count > 0 and rownum < 2) then 'HYBRID'
when bitand(h.spare2, 64) > 0
then 'TOP-FREQUENCY'
when (bitand(h.spare2, 32) > 0 or h.bucket_cnt > 2049 or
(h.bucket_cnt >= h.distcnt and h.density*h.bucket_cnt < 1))
then 'FREQUENCY'
else 'HEIGHT BALANCED'
end,
decode(bitand(c.property, 1024), 1024,
(select decode(bitand(cl.property, 1), 1, rc.name, cl.name)
from sys.col$ cl, attrcol$ rc where cl.intcol# = c.intcol#-1
and cl.obj# = c.obj# and c.obj# = rc.obj#(+) and
cl.intcol# = rc.intcol#(+)),
decode(bitand(c.property, 1), 0, c.name,
(select tc.name from sys.attrcol$ tc
where c.obj# = tc.obj# and c.intcol# = tc.intcol#))),
decode(bitand(c.property, 17179869184), 17179869184, 'YES',
decode(bitand(c.property, 32), 32, 'NO', 'YES')),
decode(bitand(c.property, 68719476736), 68719476736, 'YES', 'NO'),
decode(bitand(c.property, 137438953472 + 274877906944),
137438953472, 'YES', 274877906944, 'YES', 'NO'),
case when c.evaledition# is null then null
else (select name from obj$ where obj# = c.evaledition#) end,
case when c.unusablebefore# is null then null
else (select name from obj$ where obj# = c.unusablebefore#) end,
case when c.unusablebeginning# is null then null
else (select name from obj$ where obj# = c.unusablebeginning#) end
from sys.col$ c, sys."_CURRENT_EDITION_OBJ" o, sys.hist_head$ h,
sys.coltype$ ac, sys.obj$ ot, sys."_BASE_USER" ut, sys.tab$ t
where o.obj# = c.obj#
and o.obj# = t.obj#(+)
and bitand(o.flags, 128) = 0
and o.owner# = userenv('SCHEMAID')
and c.obj# = h.obj#(+) and c.intcol# = h.intcol#(+)
and c.obj# = ac.obj#(+) and c.intcol# = ac.intcol#(+)
and ac.toid = ot.oid$(+)
and ot.type#(+) = 13
and ot.owner# = ut.user#(+)
and (o.type# in (3, 4) /* cluster, view */
or
(o.type# = 2 /* tables, excluding iot - overflow and nested tables */
and
not exists (select null
from sys.tab$ t
where t.obj# = o.obj#
and (bitand(t.property, 512) = 512 or
bitand(t.property, 8192) = 8192))))
SELECT O.NAME
,
C.NAME
,
DECODE(C.TYPE#
, 1
, DECODE(C.CHARSETFORM
, 2
, 'NVARCHAR2'
, 'VARCHAR2')
,
2
, DECODE(C.SCALE
, NULL
,
DECODE(C.PRECISION#
, NULL
, 'NUMBER'
, 'FLOAT')
,
'NUMBER')
,
8
, 'LONG'
,
9
, DECODE(C.CHARSETFORM
, 2
, 'NCHAR VARYING'
, 'VARCHAR')
,
12
, 'DATE'
,
23
, 'RAW'
, 24
, 'LONG RAW'
,
58
, NVL2(AC.SYNOBJ#
, (SELECT O.NAME
FROM OBJ$ O
WHERE O.OBJ#=AC.SYNOBJ#)
, OT.NAME)
,
69
, 'ROWID'
,
96
, DECODE(C.CHARSETFORM
, 2
, 'NCHAR'
, 'CHAR')
,
100
, 'BINARY_FLOAT'
,
101
, 'BINARY_DOUBLE'
,
105
, 'MLSLABEL'
,
106
, 'MLSLABEL'
,
111
, NVL2(AC.SYNOBJ#
, (SELECT O.NAME
FROM OBJ$ O
WHERE O.OBJ#=AC.SYNOBJ#)
, OT.NAME)
,
112
, DECODE(C.CHARSETFORM
, 2
, 'NCLOB'
, 'CLOB')
,
113
, 'BLOB'
, 114
, 'BFILE'
, 115
, 'CFILE'
,
121
, NVL2(AC.SYNOBJ#
, (SELECT O.NAME
FROM OBJ$ O
WHERE O.OBJ#=AC.SYNOBJ#)
, OT.NAME)
,
122
, NVL2(AC.SYNOBJ#
, (SELECT O.NAME
FROM OBJ$ O
WHERE O.OBJ#=AC.SYNOBJ#)
, OT.NAME)
,
123
, NVL2(AC.SYNOBJ#
, (SELECT O.NAME
FROM OBJ$ O
WHERE O.OBJ#=AC.SYNOBJ#)
, OT.NAME)
,
178
, 'TIME(' ||C.SCALE|| ')'
,
179
, 'TIME(' ||C.SCALE|| ')' || ' WITH TIME ZONE'
,
180
, 'TIMESTAMP(' ||C.SCALE|| ')'
,
181
, 'TIMESTAMP(' ||C.SCALE|| ')' || ' WITH TIME ZONE'
,
231
, 'TIMESTAMP(' ||C.SCALE|| ')' || ' WITH LOCAL TIME ZONE'
,
182
, 'INTERVAL YEAR(' ||C.PRECISION#||') TO MONTH'
,
183
, 'INTERVAL DAY(' ||C.PRECISION#||') TO SECOND(' ||
C.SCALE || ')'
,
208
, 'UROWID'
,
'UNDEFINED')
,
DECODE(C.TYPE#
, 111
, 'REF')
,
NVL2(AC.SYNOBJ#
, (SELECT U.NAME
FROM "_BASE_USER" U
, OBJ$ O
WHERE O.OWNER#=U.USER#
AND O.OBJ#=AC.SYNOBJ#)
,
UT.NAME)
,
C.LENGTH
, C.PRECISION#
, C.SCALE
,
DECODE(SIGN(C.NULL$)
, -1
, 'D'
, 0
, 'Y'
, 'N')
,
DECODE(C.COL#
, 0
, TO_NUMBER(NULL)
, C.COL#)
, C.DEFLENGTH
,
C.DEFAULT$
, H.DISTCNT
,
CASE WHEN SYS_OP_DV_CHECK(O.NAME
, O.OWNER#) = 1
THEN H.LOWVAL
ELSE NULL
END
,
CASE WHEN SYS_OP_DV_CHECK(O.NAME
, O.OWNER#) = 1
THEN H.HIVAL
ELSE NULL
END
,
H.DENSITY
, H.NULL_CNT
,
CASE WHEN NVL(H.DISTCNT
, 0) = 0 THEN H.DISTCNT
-- NO HISTOGRAM
WHEN H.ROW_CNT = 0 THEN 1
-- HYBRID HISTOGRAM
WHEN EXISTS(SELECT 1
FROM SYS.HISTGRM$ HG
WHERE C.OBJ# = HG.OBJ#
AND C.INTCOL# = HG.INTCOL#
AND HG.EP_REPEAT_COUNT > 0
AND ROWNUM < 2) THEN H.ROW_CNT
-- TOP-FREQUENCY HISTOGRAM
WHEN BITAND(H.SPARE2
, 64) > 0
THEN H.ROW_CNT
-- FREQUENCY HISTOGRAM
WHEN (BITAND(H.SPARE2
, 32) > 0 OR H.BUCKET_CNT > 2049 OR
(H.BUCKET_CNT >= H.DISTCNT
AND H.DENSITY*H.BUCKET_CNT < 1))
THEN H.ROW_CNT
-- HEIGHT-BALANCED HISTOGRAM
ELSE H.BUCKET_CNT
END
,
H.TIMESTAMP#
, H.SAMPLE_SIZE
,
DECODE(C.CHARSETFORM
, 1
, 'CHAR_CS'
,
2
, 'NCHAR_CS'
,
3
, NLS_CHARSET_NAME(C.CHARSETID)
,
4
, 'ARG:'||C.CHARSETID)
,
DECODE(C.CHARSETID
, 0
, TO_NUMBER(NULL)
,
NLS_CHARSET_DECL_LEN(C.LENGTH
, C.CHARSETID))
,
DECODE(BITAND(H.SPARE2
, 2)
, 2
, 'YES'
, 'NO')
,
DECODE(BITAND(H.SPARE2
, 1)
, 1
, 'YES'
, 'NO')
,
DECODE(BITAND(H.SPARE2
, 8)
, 8
, 'INCREMENTAL '
, '') ||
DECODE(BITAND(H.SPARE2
, 128)
, 128
, 'HIST_FOR_INCREM_STATS '
, '') ||
DECODE(BITAND(H.SPARE2
, 256)
, 256
, 'HISTOGRAM_ONLY '
, '') ||
DECODE(BITAND(H.SPARE2
, 512)
, 512
, 'STATS_ON_LOAD '
, '')
,
H.AVGCLN
,
C.SPARE3
,
DECODE(C.TYPE#
, 1
, DECODE(BITAND(C.PROPERTY
, 8388608)
, 0
, 'B'
, 'C')
,
96
, DECODE(BITAND(C.PROPERTY
, 8388608)
, 0
, 'B'
, 'C')
,
NULL)
,
DECODE(BITAND(AC.FLAGS
, 128)
, 128
, 'YES'
, 'NO')
,
DECODE(O.STATUS
, 1
, DECODE(BITAND(AC.FLAGS
, 256)
, 256
, 'NO'
, 'YES')
,
DECODE(BITAND(AC.FLAGS
, 2)
, 2
, 'NO'
,
DECODE(BITAND(AC.FLAGS
, 4)
, 4
, 'NO'
,
DECODE(BITAND(AC.FLAGS
, 8)
, 8
, 'NO'
,
'N/A'))))
,
DECODE(C.PROPERTY
, 0
, 'NO'
, DECODE(BITAND(C.PROPERTY
, 32)
, 32
, 'YES'
,
'NO'))
,
DECODE(C.PROPERTY
, 0
, 'NO'
, DECODE(BITAND(C.PROPERTY
, 8)
, 8
, 'YES'
,
'NO'))
,
DECODE(C.SEGCOL#
, 0
, TO_NUMBER(NULL)
, C.SEGCOL#)
, C.INTCOL#
,
-- WARNING! IF YOU UPDATE STATS RELATED INFO
, MAKE SURE TO ALSO UPDATE
-- GTT SESSION PRIVATE STATS IN CDOPTIM.SQL
CASE WHEN NVL(H.ROW_CNT
, 0) = 0 THEN 'NONE'
WHEN EXISTS(SELECT 1
FROM SYS.HISTGRM$ HG
WHERE C.OBJ# = HG.OBJ#
AND C.INTCOL# = HG.INTCOL#
AND HG.EP_REPEAT_COUNT > 0
AND ROWNUM < 2) THEN 'HYBRID'
WHEN BITAND(H.SPARE2
, 64) > 0
THEN 'TOP-FREQUENCY'
WHEN (BITAND(H.SPARE2
, 32) > 0 OR H.BUCKET_CNT > 2049 OR
(H.BUCKET_CNT >= H.DISTCNT
AND H.DENSITY*H.BUCKET_CNT < 1))
THEN 'FREQUENCY'
ELSE 'HEIGHT BALANCED'
END
,
DECODE(BITAND(C.PROPERTY
, 1024)
, 1024
,
(SELECT DECODE(BITAND(CL.PROPERTY
, 1)
, 1
, RC.NAME
, CL.NAME)
FROM SYS.COL$ CL
, ATTRCOL$ RC
WHERE CL.INTCOL# = C.INTCOL#-1
AND CL.OBJ# = C.OBJ#
AND C.OBJ# = RC.OBJ#(+) AND
CL.INTCOL# = RC.INTCOL#(+))
,
DECODE(BITAND(C.PROPERTY
, 1)
, 0
, C.NAME
,
(SELECT TC.NAME
FROM SYS.ATTRCOL$ TC
WHERE C.OBJ# = TC.OBJ#
AND C.INTCOL# = TC.INTCOL#)))
,
DECODE(BITAND(C.PROPERTY
, 17179869184)
, 17179869184
, 'YES'
,
DECODE(BITAND(C.PROPERTY
, 32)
, 32
, 'NO'
, 'YES'))
,
DECODE(BITAND(C.PROPERTY
, 68719476736)
, 68719476736
, 'YES'
, 'NO')
,
DECODE(BITAND(C.PROPERTY
, 137438953472 + 274877906944)
,
137438953472
, 'YES'
, 274877906944
, 'YES'
, 'NO')
,
CASE WHEN C.EVALEDITION# IS NULL THEN NULL
ELSE (SELECT NAME
FROM OBJ$
WHERE OBJ# = C.EVALEDITION#) END
,
CASE WHEN C.UNUSABLEBEFORE# IS NULL THEN NULL
ELSE (SELECT NAME
FROM OBJ$
WHERE OBJ# = C.UNUSABLEBEFORE#) END
,
CASE WHEN C.UNUSABLEBEGINNING# IS NULL THEN NULL
ELSE (SELECT NAME
FROM OBJ$
WHERE OBJ# = C.UNUSABLEBEGINNING#) END
FROM SYS.COL$ C
, SYS."_CURRENT_EDITION_OBJ" O
, SYS.HIST_HEAD$ H
,
SYS.COLTYPE$ AC
, SYS.OBJ$ OT
, SYS."_BASE_USER" UT
, SYS.TAB$ T
WHERE O.OBJ# = C.OBJ#
AND O.OBJ# = T.OBJ#(+)
AND BITAND(O.FLAGS
, 128) = 0
AND O.OWNER# = USERENV('SCHEMAID')
AND C.OBJ# = H.OBJ#(+)
AND C.INTCOL# = H.INTCOL#(+)
AND C.OBJ# = AC.OBJ#(+)
AND C.INTCOL# = AC.INTCOL#(+)
AND AC.TOID = OT.OID$(+)
AND OT.TYPE#(+) = 13
AND OT.OWNER# = UT.USER#(+)
AND (O.TYPE# IN (3
, 4) /* CLUSTER
, VIEW */
OR
(O.TYPE# = 2 /* TABLES
, EXCLUDING IOT - OVERFLOW
AND NESTED TABLES */
AND
NOT EXISTS (SELECT NULL
FROM SYS.TAB$ T
WHERE T.OBJ# = O.OBJ#
AND (BITAND(T.PROPERTY
, 512) = 512 OR
BITAND(T.PROPERTY
, 8192) = 8192))))
|
|
|
|