반응형
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 메모리스트림
- StringWriter
- ThreadGroup()
- String char[] 형변환
- 상관서브쿼리
- StringReader
- 표현 언어
- interrupt()
- 리눅스세팅
- 동기화
- sleep()메소드
- 스레드그룸
- include액션태그
- Linux셋팅
- interrupted()
- InputDialog
- isinterrupted()
- 상관 서브 쿼리
- include지시자
- 아이디중복
- char[] String 형변환
- include 지시자
- first-of-child
- Linux세팅
- first-child
- MemoryStream
- ID중복
- Daemon()
- ObjectInputStream
- 리눅스셋팅
Archives
- Today
- Total
다연이네
[days16] Trigger (트리거) 본문
반응형
trigger란 어떤 작업전, 또는 작업 후 trigger에 정의한 로직을 실행시키는 PL/SQL 블럭이다.
상품구매 -> 회원테이블의 누적 포인트 증가
A 10 50 -> 60
【형식】
CREATE [OR REPLACE] TRIGGER 트리거명 [BEFORE ? AFTER]
trigger_event ON 테이블명
[FOR EACH ROW [WHEN TRIGGER 조건]] --행 트리거임을 알림 :행마다 반복해서 트리거 실행 (김씨 모두 삭제 : 5명이라면 5번 수행)
DECLARE --1번만 트리거가 발생하면 문장 트리거
선언문
BEGIN
PL/SQL 코드
END;
create table tbl_trigger01(
id number primary key
,name varchar2(20)
);
create table tbl_trigger02(
memo varchar2(100)
,ilja date default sysdate
);
tbl_trigger01 테이블에 레코드 insert -> 자동으로 tbl_trigger02에 로그 기록
(일자, 트리거1 테이블에 데이터 추가)
insert into tbl_trigger01 values (1, '홍길동');
insert into tbl_trigeer02 values('홍길동 추가됨', '2020.11.19');
->이 로그 기록 작업을 트리거를 이용해 자동으로 하겠다
after trigger
--추가 후 로그 기록 == after
create or replace trigger tri_tbl_trigger01_insert --tri_대상테이블_DML
after --실제 01테이블에 insert작업이 완료된 후 자동으로 처리되는 트리거
insert on tbl_trigger01 -- 어떤작업 on 트리거명
--FOR EACH ROW [WHEN TRIGGER 조건] 행트리거가 아니라 1번만 실행되는 문장 트리거니까 제외
declare
vmemo varchar2(100);
begin
vmemo := '>추가 작업 - 로그 기록';
insert into tbl_trigger02 (memo) values(vmemo);
--저장프로시저는 commit/rollback 해야하지만 트리거 안에서는 자동으로 커밋/롤백 된 (auto commit)
--exception
end;
--Trigger TRI_TBL_TRIGGER01_INSERT이(가) 컴파일되었습니다.
insert into tbl_trigger01 values (1, '홍길동');
select * from tbl_trigger01;
select * from tbl_trigger02;
commit;
insert + update + delete 추가하기
create or replace trigger tri_tbl_trigger01
after
insert or update or delete on tbl_trigger01 --or로 나열 가능
declare
vmemo varchar2(100);
begin
if inserting then
vmemo := '>추가 작업 - 로그 기록';
elsif updating then
vmemo := '>수정 작업 - 로그 기록';
elsif deleting then
vmemo := '>삭제 작업 - 로그 기록';
end if;
insert into tbl_trigger02 (memo) values(vmemo);
end;
--Trigger TRI_TBL_TRIGGER01이(가) 컴파일되었습니다.
before trigger
--주말/근무시간 외에는 주문X 주문~insert
create or replace trigger tri_before_test
before --실제 insert 전에 트리거 수행
insert or update or delete on tbl_trigger01 --이벤트를 받을 대상 테이블
declare
vmemo varchar2(100);
begin
if to_char( sysdate, 'DY') in ('토','일')
or to_char(sysdate, 'HH24')<9
or to_char(sysdate, 'HH24')>18 then --근무시간 외라면 강제 예외 발생 -> 당연히 그 다음 insert작업도 불가
vmemo:= '근무시간 외 또는 주말에는 DML 처리 못함 - 로그 기록'; --롤백되어져서 이 메시지도 같이 롤백
insert into tbl_trigger02 (memo) values(vmemo);
raise_application_error(-20000, '근무시간 외에는 DML 불가');
-- elsif then
end if;
end;
--Trigger TRI_BEFORE_TEST이(가) 컴파일되었습니다.
insert into tbl_trigger01 values (2, '김동준');
--ORA-20000: 근무시간 외에는 DML 불가
반응형
'Oracle' 카테고리의 다른 글
[days17] 트리거(Trigger) 예제 (0) | 2020.11.23 |
---|---|
[days17] 트리거(Trigger)의 :NEW, :OLD **추가 필요 (0) | 2020.11.23 |
[days16] PL/SQL 블록 내에서 에러처리 (0) | 2020.11.19 |
[days15] Stored Function (저장함수) (0) | 2020.11.18 |
[days15] 저장 프로시저의 파라미터 in, out, in out (0) | 2020.11.18 |
Comments