Oracle 9i에서 ALL_TAB_COLS 뷰를 조회하면 UNUSED로 표시된 열과 '활성'테이블 열이 나열됩니다. 명시 적으로 열이 UNUSED인지 여부 또는 테이블에 사용되지 않는 열을 나열하는 뷰가 있는지 여부를 나타내는 필드가없는 것 같습니다. 사용하지 않는 열이 무엇인지 쉽게 알 수 있도록 어떻게 ALL_TAB_COLS에서 필터링 할 수 있습니까?ALL_TAB_COLS에서 어떤 열이 사용되지 않았는지 어떻게 알 수 있습니까?
3
A
답변
2
ALL_TAB_COLS 대신 ALL_TAB_COLUMNS를 사용해보십시오. Oracle 11.2에서 사용되지 않는 열은 ALL_TAB_COLS (이름은 바뀌 었음)에 표시되지만 ALL_TAB_COLUMNS에는 표시되지 않습니다.
alter table t1 set unused column c2;
그럼 I 참조 :
가select column_name from all_tab_cols where owner='ME' and table_name='T1';
COLUMN_NAME
-----------
C1
SYS_C00002_10060107:25:40$
select column_name from all_tab_columns where owner='ME' and table_name='T1';
COLUMN_NAME
-----------
C1
1
ALL_TAB_COLUMNS 정의에 유일한 필터는 그 다음 미사용 C2 설정
create table t1 (c1 varchar2(30), c2 varchar2(30);
:
은이 같은 테이블을 작성 "where hidden_column = 'NO'"이므로 UNUSED 열이 HIDDEN_COLUMN 필드에 플래그로 표시됩니다.데이터 정의보기를 보면 열이 UNUSED가되면 COL $ .PROPERTY가 32800 (비트 2^5 및 2^15)으로 설정됩니다. 2^5는 숨겨진 열을 표시하는 데 사용되므로 2^15는 UNUSED 일 수 있습니다. 필요한 것 (예 : this)과 같이 작동해야하는 것을 기반으로 ALL_TAB_COLS의 사용자 정의 버전을 작성할 수 있습니다.
CREATE OR REPLACE FORCE VIEW all_tab_cols_rev (owner,
table_name,
column_name,
data_type,
data_type_mod,
data_type_owner,
data_length,
data_precision,
data_scale,
nullable,
column_id,
default_length,
data_default,
num_distinct,
low_value,
high_value,
density,
num_nulls,
num_buckets,
last_analyzed,
sample_size,
character_set_name,
char_col_decl_length,
global_stats,
user_stats,
avg_col_len,
char_length,
char_used,
v80_fmt_image,
data_upgraded,
hidden_column,
virtual_column,
segment_column_id,
internal_column_id,
histogram,
qualified_col_name,
unused_column)
AS
SELECT u.NAME,
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 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,
h.lowval,
h.hival,
h.density,
h.null_cnt,
CASE
WHEN NVL (h.distcnt, 0) = 0
THEN h.distcnt
WHEN h.row_cnt = 0
THEN 1
WHEN ( h.bucket_cnt > 255
OR ( h.bucket_cnt > h.distcnt
AND h.row_cnt = h.distcnt
AND h.density * h.bucket_cnt <= 1))
THEN h.row_cnt
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'),
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#,
CASE
WHEN NVL (h.row_cnt, 0) = 0
THEN 'NONE'
WHEN ( h.bucket_cnt > 255
OR ( h.bucket_cnt > h.distcnt
AND h.row_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 (c.property, 0, 'NO', DECODE (BITAND (c.property, 32768), 32768, 'YES', 'NO'))
FROM SYS.col$ c, SYS.obj$ o, SYS.hist_head$ h, SYS.user$ u, SYS.coltype$ ac, SYS.obj$ ot, SYS.user$ ut
WHERE o.obj# = c.obj#
AND o.owner# = u.user#
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))))
AND ( o.owner# = USERENV ('SCHEMAID')
OR o.obj# IN (SELECT obj#
FROM SYS.objauth$
WHERE grantee# IN (SELECT kzsrorol
FROM x$kzsro))
OR /* user has system privileges */
EXISTS (
SELECT NULL
FROM v$enabledprivs
WHERE priv_number IN
(-45 /* LOCK ANY TABLE */,
-47 /* SELECT ANY TABLE */,
-48 /* INSERT ANY TABLE */,
-49 /* UPDATE ANY TABLE */,
-50 /* DELETE ANY TABLE */)));
I는 그 다음 SELECT에게 ANY DICTIONARY 권한을 가진 별도의 고정 스키마에 뷰를 넣어 것 그것을 위해 공용 동의어를 만들 수 있습니다. 이렇게하면 모든 사용자가 권한이있는 테이블에 대해서만 UNUSED_COLUMN 열을 볼 수 있습니다.
+0
불행하게도 다른 숨겨진 열이 있습니다 (색인 된 가상 열, LOB 열 ...) – thecoop
관련 문제
- 1. 어떤 ELF 의존성이 충족되지 않았는지 어떻게 알 수 있습니까?
- 2. 어떤 인덱스가 사용되지 않았는지 확인하는 방법은 무엇입니까?
- 3. MySQL 쿼리가 PHP에서 아무것도 반환하지 않았는지 어떻게 알 수 있습니까?
- 4. ManualResetEvent가 신호를 받거나 신호를받지 않았는지 어떻게 알 수 있습니까?
- 5. , 어떤 페이지가 현재인지 어떻게 알 수 있습니까?
- 6. 어떤 파일이 상수인지 어떻게 알 수 있습니까?
- 7. 어떤 .emacs 파일이로드되었는지 어떻게 알 수 있습니까?
- 8. 어떤 행을 클릭했는지 어떻게 알 수 있습니까?
- 9. 어떤 유형의 데이터베이스인지 어떻게 알 수 있습니까?
- 10. 어떤 기능이 호출되는지 어떻게 알 수 있습니까?
- 11. checkbox.checkedchanged 이벤트 질문. 어떤 체크 박스가 선택되었는지/변경되지 않았는지 어떻게 알 수 있습니까?
- 12. 인덱스에 varchar (max) 유형의 열이 있는지 어떻게 알 수 있습니까?
- 13. xaml이 더 이상 사용되지 않는다는 것을 어떻게 알 수 있습니까?
- 14. 어떤 헤더에서 어떤 기능이 사용되고 있는지 어떻게 알 수 있습니까?
- 15. 어떤 클래스에서 어떤 함수가 호출되었는지 어떻게 알 수 있습니까?
- 16. 어떻게 알 수 있습니까?
- 17. WPF 창이 어떤 모니터인지 알 수 있습니까?
- 18. 예외가있을 수 있음을 어떻게 알 수 있습니까?
- 19. 어떤 클래스 메소드가 사용되고 있지 않은지 어떻게 알 수 있습니까?
- 20. GXT에서 어떤 사건이 발생했는지 어떻게 알 수 있습니까?
- 21. 어떤 스레드가 메서드를 호출했는지 어떻게 알 수 있습니까?
- 22. CCK 포맷터는 어떤 필드와 노드를 참조하는지 어떻게 알 수 있습니까?
- 23. 어떤 MySQL 슬레이브가 응답했는지 어떻게 알 수 있습니까?
- 24. MySQL : 어떤 설정 파일이 사용되는지 어떻게 알 수 있습니까?
- 25. 어떤 유닉스 쉘을 사용하고 있는지 어떻게 알 수 있습니까?
- 26. 클래스에서 어떤 종류의 예외가 발생하는지 어떻게 알 수 있습니까?
- 27. 어떤 템플릿을 사용하고 있는지 어떻게 알 수 있습니까?
- 28. 테이블에 어떤 유형의 잠금이 있는지 어떻게 알 수 있습니까?
- 29. PERFORCE 분기에서 어떤 파일을 변경했는지 어떻게 알 수 있습니까?
- 30. CardLayouts : 어떤 카드가 보이는지 어떻게 알 수 있습니까?
불행히도, all_tab_cols에 필요한 정보 (숨겨진 데이터 유형 및 LOB 열, 기능 색인의 숨겨진 가상 열 ...)가 있습니다. – thecoop
사용하지 않는 열 이름 형식이 동일해야합니다 (sys_c00002_10060107 : 25 : 40 $ ')? – thecoop
미안하지만, 나는 잘 모르겠다. –