2009년 5월 31일 일요일

제약 조건의 연기 (DELAY) & 테이블 삭제와 제약조건

=======제약 조건의 연기 (DELAY)
-------
SELECT  *
FROM USER_CONSTRAINTS
WHERE TABLE_NAME = 'TBL_EMP';
--F40 41


데이터의 양이 많을 때에 입력할때 마다 검사하는 것 보다 추후 일괄 처리하는 것이 좋다.
연장시킴으로 데이터를 받은 후, COMMIT 시에 일괄 검사하도록 수정
제약 조건의 수정은 기존의 제약조건을 삭제하고 다시 생성하는 방식으로 수정하여야 한다.

ALTER TABLE TBL_EMP
DROP CONSTRAINT TBL_EMP_EMAIL_CK;

ALTER TABLE TBL_EMP
ADD CONSTRAINT TBL_EMP_EMAIL_CK
    CHECK ( INSTR (EMAIL,'@',1,1)>1 AND INSTR (EMAIL,'@',1,2)=0  AND INSTR(EMAIL,'@',1,1) != LENGTH(EMAIL)
       AND  SUBSTR( REVERSE(EMAIL),1, INSTR(REVERSE(EMAIL),'.',1,1)) IN ('MOC.','TEN.','RK.') )
DEFERRABLE INITIALLY DEFERRED;

SELECT  *
FROM USER_CONSTRAINTS
WHERE TABLE_NAME = 'TBL_EMP';
-- F42, 43

SELECT *
FROM TBL_EMP;
 
INSERT INTO TBL_EMP VALUES (0004,'BMD','4112191181818','MADCOW@2MB.JAP',0002,10);
INSERT INTO TBL_EMP VALUES (0005,'꺽정','8010101234567','LIMNAVER.COM',0003,20);

SELECT * FROM TBL_EMP;
-- F44

COMMIT;
--F45


SELECT *
FROM TBL_EMP;
--F46

INSERT INTO TBL_EMP VALUES (0005,'꺽정','8010101234567','LIM@NAVER.COM',0003,20);

COMMIT;

SELECT *
FROM TBL_EMP;

-- F47

-------
==== 테이블의 삭제 시 주의점
------

DROP TABLE TBL_DEPT;

--F48

SELECT *
FROM USER_CONSTRAINTS
WHERE TABLE_NAME ='TBL_EMP' AND CONSTRAINT_TYPE ='R' ;

-- F49

SELECT *
FROM USER_CONSTRAINTS
WHERE CONSTRAINT_TYPE ='R' AND R_CONSTRAINT_NAME LIKE 'TBL_DEPT%';

--F50

DROP TABLE TBL_DEPT CASCADE CONSTRAINT;
테이블을 삭제 & 참조하는 제약들을 삭제

SELECT *
FROM TBL_DEPT;
--F51

댓글 없음:

댓글 쓰기