Oracle 기본정리 - trigger 예제
프로그래밍 정리/Oracle
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 |
반응형
'프로그래밍 정리 > Oracle' 카테고리의 다른 글
오라클,mysql - 페이징 쿼리 (0) | 2020.01.18 |
---|---|
Oracle 기본정리 - Cursor 예제 (0) | 2019.12.04 |
Oracle 기본정리 - Procedure(if,for,while,in,out 예제) (0) | 2019.12.04 |
Oracle 기본정리 - Declare, Procedure 문제 (0) | 2019.12.04 |
Oracle 기본정리 - Declare, Procedure 기본 (0) | 2019.12.04 |