TRIGGER

김재령·2022년 3월 4일
0

DB

목록 보기
15/15

KREAM 오마주 프로젝트 진행 중 회원정보의 프로필 이미지를 변경하면
변경전에 등록해둔 중고거래 게시글의 프로필 이미지가 변경되지 않는다
그래서 MEMBER테이블에 UPDATE발생시 TRADE테이블의 데이터가 함께 변경되도록 하는 기능이 필요해 TRIGGER를 알게 되었다

TRIGGER란?

  • 테이블에 이벤트가 발생하였을때 자동으로 사용자가 정의한 PL/SQL명령을 실행 할 수 있는 구문

TRIGGER생성

CREATE ORREPLACE TRIGGER 트리거명 
[BEFORE | AFTER]
[FOR EACH ROW]
[WHEN (조건)]
DECLARE-- 변수선언
BEGIN
	--SQL명령어 작성
    --트리거 컴파일시 수행할 코드
   EXCEPTION
END;
  • CREATE[OR REPLACE] TRIGGER : 트리거 생성 ,재생성 명령어
  • [BEFORE | AFTER] : 트리거가 실행될 이벤트 조건
  • FOR EACH ROW : 행트리거 실행

    [행트리거]
    트랜잭션 내의 각 행에 대해 한번만 수행(컬럼 각각의 행데이터가 변화가 생길때마다 실행, 각 컬럼의 데이터 값을 제어 가능하다)

[문장트리거]
트랜잭션내에서 한번만 수행되며 컬럼의 각 데이터행을 제어할 수 없다.

트리거 생성시 주의사항

  1. 트리거는 테이블에 최대 3개까지 가능
  2. 트리거 내에서는 COMMIT,ROLLBACK문 사용 불가
  3. 이미 트리거가 정의된 작업에 대해 다른 트리거를 정의하면 기존의 것을 대체한다
  4. 뷰나 임시 테이블을 참조 할 수 있으나 생성할 수 없다
  5. 트리거동작은 이를 삭제하기 전까지 계속된다

트리거 활성화 비활성화

ALTER TRIGGER [트리거명] DISABLE;
ALTER TRIGGER [트리거명] ENABLE;

트리거 상태 확인

SELECT TABLE_NAME, STATUS FROM USER_TRIGGERS;

트리거 삭제

DROP TRIGGER [트리거명];

연습구문

create table Testmember(
    name varchar2(50) not null,
    num number 
);
insert into testmember values('채채',12,'남');
insert into testmember values('재재',23,'여');
commit;



create table newmember(
    name1 varchar2(50) not null,
    num1 number 
);
commit;



CREATE OR REPLACE TRIGGER trigger_table
AFTER update or insert ON testmember
FOR EACH ROW
begin
    if updating then
        update newmember set num1=:new.num where name1=:old.name; 
    elsif inserting then
        insert into newmember values(:new.name,:new.num);
    end if;
end;
commit;

--여기서 ELSE IF => ELSIF로 사용

INSERT INTO TESTMEMBER VALUES('차차',13,'여');
update testmember set NUM = '38' where name='차차';




프로젝트 적용

profile
with me

0개의 댓글