본문 바로가기

개발/DB

[Oracle] 데이터 삽입 시 다른 테이블에도 삽입하는 트리거 작성

메뉴 상세정보를 수정해야하는 요구사항이 있었다.
그런데 메뉴 테이블은 depth에 따라 나누어져있었고, 수정요청 시 3개의 테이블을 모두 확인해야하는 한계가 있었다.

차라리 메뉴이름(PK)과 depth를 저장할 테이블을 따로 구성하는 것이 낫다고 판단했고

이는 서비스에서 각 Dao 를 트랜잭션 처리하는 것보단, DB상에서 트리거로 구성하는 것이 훨씬 효율적이라고 생각했다. 

create or replace TRIGGER menu_add 

AFTER insert on DEPTH_1_MENU 

for each row

    begin

        insert into menu values(:NEW.MENU_NAME, 1);

    end;


menu_add  -> 트리거 이름

AFTER insert on ~ -> ~ 테이블에 insert 쿼리가 실행된 후 트리거가 작동한다는 의미

여기서 AFTER 대신 BEFORE도 들어갈 수 있는데, 이 경우에는 아래 트리거 작성 부분에 :NEW 키워드를 사용함으로써 트리거를 적용할 테이블의 속성을 이용할 수 없다는 것에 유의해야한다. 



NEW.변수명 앞에 : 를 붙이지 않으면

2/37      PL/SQL: ORA-00984: 열을 사용할 수 없습니다

같은 에러가 나니 주의해야한다.

'개발 > DB' 카테고리의 다른 글

[Oracle] Oracle 11g DB 설치 후, Oracle SQL Developer 접속하기  (0) 2018.10.16