본문 바로가기

ORACLE SQL

[ORACLE] SQL - TRIGGER(DELETE시 데이터 백업 예시)

728x90

안녕하세요. TRIGGER를 활용해서

테이블에서 DELETE시,  별도의 TABLE 에 알아서 백업해주는 코드입니다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
--ABCD 테이블 생성
create TABLE ABCD (id number,name nvarchar2(5));
insert into ABCD values(1,'유재석');
insert into ABCD values(2,'박명수');
insert into ABCD values(3,'하동훈');
 
--ABCD_DEL_LIST 테이블 생성(ABCD에서 삭제한 데이터를 백업할 테이블)
--where 1 = 0을 활용하여 column이름만 가져왔습니다.
create TABLE ABCD_DEL_LIST 
as
select * from ABCD
where 1 = 0;
 
--trigger를 만들어줍니다. 
--delete후에 실행되게 만들었습니다.
--주의할점은 그냥 명령문 실행(CTRL+ENTER)할 경우 OLD 를 변수?로 인식해 오류가 납니다.
--따라서, 스크립트 실행(F5)로 트리거를 생성합니다.
create or replace trigger trig_abcd 
    after delete
    on ABCD
    for each row
begin
    DBMS_OUTPUT.PUT_LINE('Trigger 작동, 백업완료');
    insert into ABCD_DEL_LIST values(:OLD.ID, :OLD.NAME);
end
;
 
--ID가 2인 것을 DELETE하는 것으로 TRIGGER가 정상 작동하는 것을 확인했습니다.
delete from abcd where id = '2';
select * from ABCD_DEL_LIST;
cs