<< 제품 테이블 생성 >>
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;
-- 백업과 같은 방법은 사용하지 않는다. 왜냐면 다시 인설트할 때 값넣기가
-- 어렵다.
'IT. 컴퓨터' 카테고리의 다른 글
[오라클] 연산자 (0) | 2020.04.24 |
---|---|
[오라클] 괄호, AND, OR, NOT, =, !=,(^=, <>) 연산 (0) | 2020.04.22 |
STATUS 제약조건 (0) | 2020.04.20 |
테이블명, 제약조건, 컬럼명 변경하기 (0) | 2020.04.19 |
[오라클] 부모 컬럼 지우면 자식 컬럼 지워짐 (0) | 2020.04.17 |