CAFE

SQL Query Tips

동일한 컬럼명으로 구성된 테이블 찾기

작성자원쿼리맨|작성시간14.03.05|조회수277 목록 댓글 0

문제)


기존에 설계되어 있는 테이블이 몇백개 있습니다.
그런데 ERD나 테이블 정의서가 없습니다.
일일이 비교할수는 없는데 몇개를 찾아보니
테이블끼리 같은 스키마를 가지고 있는것이 있습니다.

예를 들어 테이블 A가 필드를 10개 가지고 있는데,
테이블 B의 필드 10와 서로 이름이 다 같습니다.

명명규칙을 적용했다고 봤을때 같은 기능을 하는 테이블이라고
보고 이런 테이블들을 쿼리로 추출하고 싶은데요.

테이블끼리 전 필드명이 같은 테이블끼리 뽑으려고 합니다.

딕셔너리를 이용하면 가능할듯도 싶고..
방법이 있으면 좀 알려주시기 바랍니다.




답변)


계층쿼리와 USER_TAB_COLUMNS 를 사용해서 아래와 같이 쿼리를 실행하시면,
결과는 아래와 같은 형태로 나옵니다.


GRP_TN
-------
A
B,C       <=== B와 C테이블은 구성컬럼명이 동일
D
E
F,G,H     <=== F,G,H테이블은 구성컬럼명이 동일




SELECT     SUBSTR (MAX (SYS_CONNECT_BY_PATH (TN, ',')), 2) GRP_TN
FROM       (SELECT TN
                 , GRP_CN
                 , ROW_NUMBER () OVER (PARTITION BY GRP_CN ORDER BY TN) RN_TN
            FROM   (SELECT     TN
                             , MAX (SYS_CONNECT_BY_PATH (CN, ',')) GRP_CN
                    FROM       (SELECT TABLE_NAME TN
                                     , COLUMN_NAME CN
                                     , ROW_NUMBER () OVER (PARTITION BY TABLE_NAME ORDER BY COLUMN_NAME) RN
                                FROM   USER_TAB_COLUMNS)
                    START WITH RN = 1
                    CONNECT BY PRIOR RN = RN - 1
                    AND        PRIOR TN = TN
                    GROUP BY   TN))
START WITH RN_TN = 1
CONNECT BY PRIOR RN_TN = RN_TN - 1
AND        PRIOR GRP_CN = GRP_CN
GROUP BY   GRP_CN
ORDER BY   GRP_TN

다음검색
현재 게시글 추가 기능 열기

댓글

댓글 리스트
맨위로

카페 검색

카페 검색어 입력폼