테이블 및 컬럼 정보 조회하는 쿼리 작성중 0 4 1,438

by Nesquik [Oracle 기초] 오라클 테이블정보 컬럼정보 [2020.06.14 00:04:22]


1111.PNG (12,168Bytes)

선배님들 안녕하십니까

쿼리 작성중에 어려움이 있어서 도움을 요청드립니다, 꼭 혼자서 해결하고 싶어 몇일간 붙잡고 있지만 쉽지가 않네요..

 

제가 원하는 결과는 오라클11g 환경에서 db의 모든(or 특정 유저) 테이블 정보와 그 테이블에 속한 컬럼정보, 컬럼의 pk 여부, fk여부를 조회하는겁니다

(다른 유저에 같은 이름의 테이블 주의, 건수는 실제 건수를 세진 않고 dba_tables에 num_rows면 됩니다)

원하는 결과의 모습은 이미지를 첨부했습니다

 

작성중에 참고한 테이블은

dba_tables
dba_tab_comments
dba_tab_columns
dba_col_comments
dba_tab_columns
dba_constraints
dba_cons_columns

위 테이블을 이용해 작성해 보려고 해보았으나.. pk, fk부분을 해결하지 못했습니다.. ㅠㅠ

select a.owner, a.table_name, b.comments, a.num_rows , c.table_name,c.column_id, c.column_name, d.comments, c.data_type, c.data_length, c.nullable
from
dba_tables a
,dba_tab_comments b
,dba_tab_columns c
,dba_col_comments d
where a.owner = b.owner
and a.table_name = b.table_name
and a.owner(+) = c.owner
and a.table_name(+) =  c.table_name
and c.owner = d.owner
and c.table_name =  d.table_name
and c.column_name =  d.column_name
and a.owner in
(
'SCOTT'
)
order by a.owner, a.table_name,c.column_id

 

조언 부탁 드립니다 감사합니다

by ㅇㅇ준 [2020.06.14 00:29:21]
SELECT A.OWNER
     , A.TABLE_NAME
     , B.COMMENTS
     , A.NUM_ROWS 
     , C.TABLE_NAME
     , C.COLUMN_ID
     , C.COLUMN_NAME
     , D.COMMENTS
     , C.DATA_TYPE
     , C.DATA_LENGTH
     , C.NULLABLE
     , CASE WHEN (SELECT COUNT(*)
                    FROM DBA_CONSTRAINTS AA
                       , DBA_CONS_COLUMNS BB
                   WHERE AA.OWNER = BB.OWNER
                     AND AA.TABLE_NAME = BB.TABLE_NAME
                     AND AA.CONSTRAINT_NAME =BB.CONSTRAINT_NAME
                     AND AA.OWNER = C.OWNER
                     AND AA.TABLE_NAME =C.TABLE_NAME
                     AND BB.OWNER=C.OWNER
                     AND BB.TABLE_NAME=C.TABLE_NAME
                     AND BB.COLUMN_NAME=C.COLUMN_NAME
                     AND AA.CONSTRAINT_TYPE = 'P'
                     AND POSITION IS NOT NULL) >0 THEN 'Y' ELSE '' END  AS PK_INFO
     , CASE WHEN (SELECT COUNT(*)
                    FROM DBA_CONSTRAINTS AA
                       , DBA_CONS_COLUMNS BB
                   WHERE AA.OWNER = BB.OWNER
                     AND AA.TABLE_NAME = BB.TABLE_NAME
                     AND AA.CONSTRAINT_NAME =BB.CONSTRAINT_NAME
                     AND AA.OWNER = C.OWNER
                     AND AA.TABLE_NAME =C.TABLE_NAME
                     AND BB.OWNER=C.OWNER
                     AND BB.TABLE_NAME=C.TABLE_NAME
                     AND BB.COLUMN_NAME=C.COLUMN_NAME
                     AND AA.CONSTRAINT_TYPE = 'R'
                     AND POSITION IS NOT NULL) >0 THEN 'Y' ELSE '' END AS FK_INFO
FROM DBA_TABLES A
    , DBA_TAB_COMMENTS B
    , DBA_TAB_COLUMNS C
    , DBA_COL_COMMENTS D
WHERE A.OWNER       = B.OWNER(+)
  AND A.TABLE_NAME  = B.TABLE_NAME(+)
  AND A.OWNER       = C.OWNER
  AND A.TABLE_NAME  = C.TABLE_NAME
  AND C.OWNER       = D.OWNER(+)
  AND C.TABLE_NAME  =  D.TABLE_NAME(+)
  AND C.COLUMN_NAME =  D.COLUMN_NAME(+)
  AND A.OWNER IN ('SCOTT')
ORDER BY A.OWNER, A.TABLE_NAME,C.COLUMN_ID;

테이블과 코멘트는 필수 사항이 아니기때문에 없을 수 있어서 현재 쿼리는 이렇게 수정되는게 어떨까요


by Nesquik [2020.06.14 00:49:29]

이렇게 늦은 시간에.. 조언 감사합니다 참고 하겠습니다!!!


by ㅇㅇ준 [2020.06.14 01:08:28]

늦은시간까지 일하시는 모양이네요 힘내세요~


by Nesquik [2020.06.14 01:34:54]

와 정말 감사합니다!!  ㅠㅠ 많이 배웁니다

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입