IT Log
Trigger Procedures 본문
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_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();
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