IT Log

Trigger Procedures 본문

SQL/PostgreSQL

Trigger Procedures

newly0513 2021. 2. 4. 11:19
728x90
반응형

Special Variables

인수 기능
NEW INSERT/UPDATE 작업에 사용할 수 있는 변수. DELETE 작업에서는 불가
OLD UPDATE/DELETE 작업에 사용할 수 있는 변수. INSERT 작업에서는 불가
TG_NAME 실행된 트리거의 이름을 포함하는 변수
TG_WHEN BEFORE, AFTER, INSTEAD OF
TG_LEVEL
ROW / STATEMENT
TG_OP INSERT, UPDATE, DELETE, TRUNCATE
TG_RELID 트리거 호출을 발생시킨 TABLE의 오브젝트 ID
TG_RELNAME 트리거 호출을 발생시킨 TABLE의 이름 > 향후 없어질 예정으로 'TG_TABLE_NAME으로 사용'
TG_TABLE_NAME 트리거 호출을 발생시킨 TABLE의 이름
TG_TABLE_SCHEMA
트리거 호출을 발생시킨 TABLE의 SCHEMA
TG_NARGS
CREATE TRIGGER문에서 Trigger Procedures에 제공된 인수의 수
TG_ARGV[]
CREATE TRIGGER문의 인수. 인덱스는 0부터 계산

INSERT / UPDATE 예제

CREATE TABLE emp (
    empname text,
    salary integer,
    last_date timestamp,
    last_user text
);

CREATE FUNCTION emp_stamp() RETURNS trigger AS $emp_stamp$
    BEGIN
        -- empname과 salary가 NULL이 아닌지 확인
        IF NEW.empname IS NULL THEN
            RAISE EXCEPTION 'empname cannot be null';
        END IF;
        IF NEW.salary IS NULL THEN
            RAISE EXCEPTION '% cannot have null salary', NEW.empname;
        END IF;

        -- salary가 양수인지 확인
        IF NEW.salary < 0 THEN
            RAISE EXCEPTION '% cannot have a negative salary', NEW.empname;
        END IF;

        -- 변경이 일어난 date와 user를 변경
        NEW.last_date := current_timestamp;
        NEW.last_user := current_user;
        RETURN NEW;
    END;
$emp_stamp$ LANGUAGE plpgsql;

-- EMP 테이블에 INSERT 또는 UPDATE가 실행되기 전(BEFORE)에 모든 행에 대해서 EMP_STAMP 함수를 실행
CREATE TRIGGER emp_stamp BEFORE INSERT OR UPDATE ON emp
    FOR EACH ROW EXECUTE PROCEDURE emp_stamp();

 

 

 

참조 : www.postgresql.org/docs/9.6/plpgsql-trigger.html

728x90
반응형

'SQL > PostgreSQL' 카테고리의 다른 글

[PostgreSQL] CREATE TABLE AS  (0) 2021.05.14
[PostgreSQL] CREATE  (0) 2021.05.14
CREAETE TRIGGER  (0) 2021.02.05
DROP  (0) 2019.12.11
Comments