제품 테이블, 판매 테이블 생성 및 백업
본문 바로가기
IT. 컴퓨터

제품 테이블, 판매 테이블 생성 및 백업

by 솔기잇 2020. 4. 21.

 

 

<< 제품 테이블 생성 >>

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