메뉴 상세정보를 수정해야하는 요구사항이 있었다.
그런데 메뉴 테이블은 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 |
---|