프로그래밍 정리/Oracle

Oracle 기본정리 - trigger 예제

Wooni0477 2019. 12. 4. 16:38
반응형

Oracle 기본정리 - trigger 예제


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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
---------------------------------------------------------------------------------------
--트리거
--dml문을 실행 할때 
-------------실행되기전(before) 
-------------실행된 후(after)
-------------이벤트를 만들어줌
create or replace trigger tg
    after insert
    on emp01
    begin
        dbms_output.put_line('사원이 입사하였습니다');
    end;
 
--제약조건 확인, emp01 외래키 확인하기
select * from user_constraints where table_name='EMP01';
 
insert into dept01 values(10,'hong','abc');
insert into emp01 values(11,'park',100,10,'kkk');   --실행시 '사원이 입사하였습니다'가 뜸
                                                    --많이 사용할수록 관리가 어렵다.
 
--------------------------------------------
--트리거 : for each row 사용해보기
--여러줄 삽입 또는 삭제 할 경우
--이벤트가 일어난 한 줄당 트리거를 실행시키기 위해 사용
 
create sequence sa_seq;
 
create or replace trigger tg2
    after delete
    on emp01
    for each row
    begin   
        dbms_output.put_line('aaa');
    end;
 
insert into emp01 values(17,'kim',100,10,'kkk');
insert into emp01 values(18,'kim',100,10,'kkk');
insert into emp01 values(19,'kim',100,10,'kkk');
insert into emp01 values(20,'kim',100,10,'kkk');
delete from emp01 where job = 'kkk';            --삭제한 만큼의 여러개의 트리거가 실행된다.
 
-----------------------------------------------------
--
 
 
 
 
 
--테이블 기본기 강제삭제
alter table emp01
drop primary key cascade;
 
alter table dept01
drop primary key cascade;
 
--테이블 삭제
drop table dept01 purge;
drop table emp01 purge;
select * from user_constraints where table_name = 'DEPT01';
select * from user_constraints where table_name = 'EMP01';
 
--테이블 다시생성
create table emp01
as 
    select * from emp;
    
create table dept01
as 
    select * from dept;
 
 
alter table dept01
    add constraint dept01_deptno_pk primary key(deptno);
 
alter table emp01
    add constraint emp01_empno_pk primary key(empno);
    
alter table emp01
    add constraint emp01_empno_fk foreign key(deptno)
        references dept01(deptno);
 
 
--update가 안됨, 왜 안되냐면 emp01테이블에 forign key에 이미 deptno=10 으로 연계 되어있다.
--이를 변경시켜줘야 dept01 변경가능하다.
update dept01 
set deptno=50
where deptno=10;
 
 
 
--트리거사용해서 dept01테이블 update 이벤트 발생시 emp01테이블도 같이 update 사용하게끔 해보자
create trigger depttg
    after update of deptno              --update 사용시 deptno칼럼 이벤트가 발생할 경우
    on dept01
    for each row
    begin
        update emp01
        set deptno=:NEW.deptno          --새로운 값을 넣음
        where deptno=:OLD.deptno;       --이전에 있던 값을   
    end;
 
--update가 됨
update dept01 
set deptno=50
where deptno=10;
 
select * from dept01;
cs
반응형