[오라클] 트리거로 백업
본문 바로가기
IT. 컴퓨터

[오라클] 트리거로 백업

by 솔기잇 2020. 6. 2.

<< 제품 테이블 생성 >>

CREATE TABLE TBL_PRODUCT3

(PDCODE     VARCHAR2(10)

,PDNAME     VARCHAR2(10)

,DANGA       NUMBER

,CONSTRAINT TBL_PRODUCT3_PDCODE_PK

                    PRIMARY KEY(PDCODE)

);

 

 

<< 판매 테이블 생성 >>

CREATE TABLE TBL_PANMAE3

(PDCODE     VARCHAR2(10)

,PANDAY      DATE DEFAULT SYSDATE

,PANSU        NUMBER

,CONSTRAINT TBL_PANMAE3_PDCODE_FK

                    FOREIGN KEY(PDCODE)

                    REFERENCES TBL_PRODUCT3(PDCODE)

);

 

 

 

 

-- 판매백업 (구지 지우고 싶다면 해라)

CREATE TABLE TBL_PANMAE3_BACKUP

(PDCODE     VARCHAR2(10)

,PANDAY      DATE DEFAULT SYSDATE

,PANSU        NUMBER

);

 

1.일단 테이블을 만들고

2.트리거로 백업을 한다.

 

 

------------------------------------------------------------------------------ 

CREATE OR REPLACE TRIGGER ATRI_TBL_PRODUCT3_DELETE

AFTER DELETE

ON TBL_PRODUCT3

FOR EACH ROW

BEGIN

            INSERT INTO TBL_PANMAE3_BACKUP

 

-- TBL_PANMAE3_BACKUP 테이블에 밑의 결과물을 여기에 넣어라

       SELECT *

       FROM TBL_PANMAE3     

 

--판매테이블에서 제품코드가

       WHERE PDCODE = :OLD.PDCODE;

       DELETE TBL_PANMAE3

 

-- 판매 기록 새우깡을 읽어다가  백업쪽에 넣어 주어라.

       WHERE PDCODE = :OLD.PDCODE;

 

END;

------------------------------------------------------------------------------ 

 

 

INSERT INTO TBL_PRODUCT3(PDCODE,PDNAME,DANGA)

VALUES ('SWK', '새우깡', 1000);

INSERT INTO TBL_PRODUCT3(PDCODE,PDNAME,DANGA)

VALUES ('KJK', '감자깡', 1500);

INSERT INTO TBL_PRODUCT3(PDCODE,PDNAME,DANGA)

VALUES ('YPR', '양파링', 2000);

 

 

INSERT INTO TBL_PANMAE3(PDCODE,PANSU)

VALUES('SWK', 20);

INSERT INTO TBL_PANMAE3(PDCODE,PANSU)

VALUES('KJK', 30);

INSERT INTO TBL_PANMAE3(PDCODE,PANSU)

VALUES('SWK', 50);

INSERT INTO TBL_PANMAE3(PDCODE,PANSU)

VALUES('SWK', 10);

 

- 부모 키가 없습니다

INSERT INTO TBL_PANMAE3(PDCODE,PANSU)

VALUES('BBR', 15);

-- ORA-02291: 무결성 제약조건(NEWSCOTT.TBL_PANMAE3_PDCODE_FK)이 위배되었습니다

 

 

 

--조회-----------------------------------------------------

SELECT *

FROM TBL_PRODUCT3;

 

SELECT *

FROM TBL_PANMAE3;

 

SELECT *

FROM TBL_PANMAE3_BACKUP;

------------------------------------------------------------

 

 

--이동

DELETE TBL_PRODUCT3

WHERE PDCODE = 'SWK';

=> 결과적으로 보면 부모(제품) 테이블에서는 바로 삭제가 되고,
 자식(판매) 테이블은 실제 판매 테이블에서 백업 테이블로 데이터가 이동하는 형식이다.

 

ROLLBACK;

-- 백업과 같은 방법은 사용하지 않는다.

-- 왜냐면 다시 인설트할 때 값넣기가

-- 어렵다.

 

 


close