SELECT A.TABLE_NAME , A.CONSTRAINT_NAME , B.COLUMN_NAME , B.POSITION FROM ALL_CONSTRAINTS A , ALL_CONS_COLUMNS B WHERE 1=1 AND A.CONSTRAINT_TYPE = 'P' AND A.OWNER = B.OWNER AND A.CONSTRAINT_NAME = B.CONSTRAINT_NAME -- AND A.TABLE_NAME = 'JOB_HISTORY' -- 특정테이블 ORDER BY B.POSITION
결과예시
TABLE_NAME
CONSTRAINT_NAME
COLUMN_NAME
POSITION
AQ$_ALERT_QT_H
SYS_IOT_TOP_19840
MSGID
1
AQ$_ALERT_QT_G
SYS_IOT_TOP_19843
MSGID
1
AQ$_ALERT_QT_I
SYS_IOT_TOP_19846
SUBSCRIBER#
1
TABLE_NAME : PK가 걸려있는 테이블
CONSTRAINT_NAME : PK이름
COLUMN_NAME : PK를 건 컬럼
POSITION : PK 순서
constraint_type
AND A.CONSTRAINT_TYPE = ‘P’ 와 같이, constraint_type을 명시한 조건절이 있는데, P 대신 다른 값을 사용하면 다른 constraint도 확인할 수 있다. 이에 대한 설명은 아래와 같다.
CONSTRAINT_TYPE
설명
대상
C
Check on a table, Check, Not NULL
Column
O
Read Only on a view
Object
P
Primary Key
Object
R
Referential AKA Foreign Key
Column
U
Unique Key
Column
V
Check Option on a view
Object
ALL_CONSTRAINTS, ALL_CONS_COLUMNS
사용자에 따라서 사용할 수 있는 뷰가 달라 질 수 있는 부분이 있습니다. 앞선 쿼리로 조회되지 않는다면 뷰를 바꿔서 조회하면 됩니다. ( FROM ALL_CONSTRAINTS A , ALL_CONS_COLUMNS B 부분)
ALL_CONSTRAINTS : 현재 사용자가 엑세스할 수 있는 테이블에 대한 제약 조건 정의
USER_CONSTRAINTS : 현재 사용자의 스키마에 있는 테이블에 대한 제약 조건 정의