오라클 check constraint 확인.

georgek의 이미지

안녕하세요. DB를 공부하고있는 학생인데 질문이 생겨서 올리게되었습니다.

제가 기존에 존재하는 테이블에 아래와 같은 체크 제약을 추가해줬습니다.

ALTER TABLE Employees add CONSTRAINT FN_check CHECK (FirstName IN (UPPER(substr(FirstName,1,1))|| LOWER(substr(FirstName,2,20))));
ALTER TABLE Employees add CONSTRAINT LN_check CHECK (LastName IN (UPPER(substr(LastName,1,1))||LOWER(substr(LastName,2,20))));

check constraint를 테이블에 추가시켜주고나서 이걸 추출해서 확인하고 싶은데, 인터넷에 찾은 user_constraint 등등 을 써서 제약조건을 찾는방법을 써도
제가 추가한 FN_check,LN_check(체크제약들)는 결과로 나오지 않는데, 테이블의 모든 제약조건 및 체크제약(?)을 어떻게 볼 수 있는지 알려주실 수 있나요?
한시간째 구글링을 해봐도 나오질 않네요.

감사합니다!

chanik의 이미지

CREATE TABLE Employees
(
    empno       NUMBER(10) PRIMARY KEY,
    FirstName   varchar2(20),
    LastName    varchar2(20)
);
 
ALTER TABLE Employees ADD CONSTRAINT FN_check CHECK (FirstName IN (UPPER(substr(FirstName,1,1))|| LOWER(substr(FirstName,2,20))));
ALTER TABLE Employees ADD CONSTRAINT LN_check CHECK (LastName IN (UPPER(substr(LastName,1,1))||LOWER(substr(LastName,2,20))));

위와 같이 table을 적당히 만들고 알려주신 constraints를 만든 다음
아래와 같은 sql문을 동작시키면 결과가 나오는군요.
SELECT 
    constraint_name, constraint_type, 
    r_constraint_name, InitCap(STATUS) STATUS, InitCap(delete_rule) Delete_rule,
    R_CONSTRAINT_NAME, R_OWNER, search_condition,
    InitCap(DEFERRABLE) deferrable, InitCap(DEFERRED) deferred,
    InitCap(VALIDATED) validated, InitCap(bad) bad
    ,InitCap(RELY) Rely
FROM sys.user_constraints
WHERE TABLE_NAME = 'EMPLOYEES'
ORDER BY 1

CONSTRAINT_NAME                C R_CONSTRAINT_NAME              STATUS   DELETE_RU R_CONSTRAINT_NAME              R_OWNER                        SEARCH_CONDITION                                                                DEFERRABLE     DEFERRED  VALIDATED     BAD RELY
------------------------------ - ------------------------------ -------- --------- ------------------------------ ------------------------------ -------------------------------------------------------------------------------- -------------- --------- ------------- --- ----
FN_CHECK                       C                                Enabled                                                                          FirstName IN (UPPER(substr(FirstName,1,1))|| LOWER(substr(FirstName,2,20)))     Not Deferrable Immediate Validated
LN_CHECK                       C                                Enabled                                                                          LastName IN (UPPER(substr(LastName,1,1))||LOWER(substr(LastName,2,20)))         Not Deferrable Immediate Validated
SYS_C0012431                   P                                Enabled                                                                                                                                                          Not Deferrable Immediate Validated

이 sql문은 제가 만든 것이 아니라 오래된 DB관리도구인 Toad for Oracle을 통해 알아낸 것입니다.
Toad for Oracle은 상용프로그램이지만 기능제약이 있는 무료버전도 있습니다.
가끔씩 무료라이센스 만기가 되면 최신버전으로 한 번씩 다시 받아 설치해야 하는 불편이 있지만
공부하거나 간단한 업무처리를 하는데는 무료버전도 충분할 것입니다.

아래 페이지에서 "Toad for Oracle Freeware"를 설치하면 됩니다. Windows용 32/64-bit 버전이 따로 있습니다.
http://www.toadworld.com/m/freeware/default.aspx

Toad 실행하고 DB에 연결한 다음,
[Database] 메뉴의 [Spool SQL] -> [Spool SQL to Screen]을 켭니다.
[Database] 메뉴의 [Schema Browser]를 띄워서 해당 table 선택하고 constraints를 열람해보면
이 정보를 얻기 위해 Toad가 오라클에 보내는 명령들이 하단의 Spool SQL 창에 다 나올 것입니다.
여기서 적당한 것을 골라 참고해 쓰시면 됩니다.