본문 바로가기
프로그래밍 언어/쿼리문 + Oracle + MySQL

[오라클] PK(Primary Key)만 가져오는 Oracle 쿼리

by 우림 2017. 5. 12.
1
2
3
4
5
6
7
SELECT C.POSITION ,C.COLUMN_NAME
FROM USER_CONS_COLUMNS C
     INNER JOIN USER_CONSTRAINTS S
             ON C.CONSTRAINT_NAME = S.CONSTRAINT_NAME
            AND S.CONSTRAINT_TYPE = 'P'
WHERE C.TABLE_NAME = 'SKUWC'
ORDER BY 1
cs


해당 테이블의 primary key(프라이머리 키)만 가져오는 쿼리랍니다.

이 쿼리를 응용해서 DB 상의 모든 테이블의 Primary Key만 뽑을수도 있겠죠.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
WITH LIST AS
(
    SELECT A.TABLE_NAME,
           A.COLUMN_NAME,
           A.DATA_TYPE,
           A.DATA_LENGTH,
           A.NULLABLE,
           B.COMMENTS
    FROM   dba_tab_columns A,
           all_col_comments B
    WHERE  A.OWNER = B.OWNER
    AND    A.TABLE_NAME = B.TABLE_NAME
    AND    A.COLUMN_NAME = B.COLUMN_NAME
    AND    A.OWNER = 'LOTOSDEV' -- DB명
),
PKLIST AS
(
    SELECT C.TABLE_NAME,
           C.COLUMN_NAME,
           C.POSITION
    FROM USER_CONS_COLUMNS C,
         USER_CONSTRAINTS S
    WHERE C.CONSTRAINT_NAME = S.CONSTRAINT_NAME
    AND S.CONSTRAINT_TYPE = 'P'
)
SELECT L.TABLE_NAME AS "테이블명",
       L.COLUMN_NAME AS "컬럼명",
       L.DATA_TYPE AS "데이터타입",
       L.DATA_LENGTH AS "길이",
       CASE WHEN P.POSITION < 99 THEN 'Y'
            ELSE ' '
       END AS "PK",
       L.NULLABLE AS "Null 여부",
       L.COMMENTS AS "Comments"
FROM LIST L,
     PKLIST P
WHERE L.TABLE_NAME = P.TABLE_NAME
  AND L.COLUMN_NAME = P.COLUMN_NAME
 ORDER BY L.TABLE_NAME,
          NVL(P.POSITION, 99)
;
cs


위 쿼리는 해당 DB의 Primary Key만 가져오는 쿼리랍니다.


댓글