트리거, OR REPLACE

인삼주·2023년 5월 10일
0

DB 모델링과 OracleSQL

목록 보기
15/16

트리거

: 총의 방아쇠를 당기는 것과 특정 테이블이 변경되면 이를 이벤트로 다른 테이블이 자동으로(연쇄적으로) 변경되는 자동화 기능. (무결성 유지/ 일부 작업 자동화 등의 용도)
ex) 판매 제품 테이블과 재고 테이블이 있을 때, 재고 수량을 늘리면 제품 테이블의 수량도 늘어나는 것

CREATE [OR REPLACE] TRIGGER 트리거명
[BEFORE / AFTER] UPDATE / INSERT / DELETE 
ON 테이블명 -- 트리거가 적용될 대상 테이블 
[FOR EACH ROW] -- 변경된 한줄 한줄에 대해 모두 처리
DECLARE
    변수선언
BEGIN
    실행할 PL/SQL 프로그램 코딩
END;
/
  • OR REPLACE : 객체 덮어쓰기 또는 대체

  • BEFORE를 사용하면, UPDATE/INSERT/DELECT문이 실행되기 전에 트리거가 실행.

  • AFTER를 사용하면, UPDATE/INSERT/DELECT문이 실행된 후에 트리거가 실행.

  • FOR EACH ROW 를 생략하면 문장 레벨 트리거, 기술하면 행 레벨 트리거.

  • 문장 레벨 트리거는 어떤 사용자가 설정되어 있는 테이블에 대해 DML(UPDATE,INSERT,DELECT)문을 실행할 때 단 한번만 트리거를 발생시킬 때 사용.

  • 행 레벨 트리거는 DML(UPDATE,INSERT,DELECT)문에 의해서 여러 개의 행이 변경된다면 각 행이 변경될 때마다 트리거를 발생시키는 방법
    (만약 5개의 행이 변경되면, 트리거가 5번 발생)


OR REPLACE

: 객체 덮어쓰기 또는 대체
** DB시스템에서 객체(테이블,뷰,함수,프로시저 등)를 생성하는 SQL문은 객체가 존재하지 않을 때만 실행. 만약 같은 이름을 가진 객체가 존재하는 경우 오류 발생
... 이때 'OR REPLACE' 사용

CREATE TABLE mytable (
    id INT,
    name VARCHAR(50)
);

-- 이후, 개발자가 같은 이름 테이블을 다시 생성하려고 하면 오류 발생

CREATE TABLE mytable (
    id INT,
    name VARCHAR(50),
    age INT
);
-- 오류 발생: mytable 테이블이 이미 존재합니다.
-- 이런 경우 'OR REPLACE' 옵션 사용하여 기존 테이블 대체

CREATE OR REPLACE TABLE mytable (
    id INT,
    name VARCHAR(50),
    age INT
);
-- mytable 테이블이 이미 존재하면, 새로운 컬럼 age가 추가됩니다.

0개의 댓글