문서의 선택한 두 판 사이의 차이를 보여줍니다.
| 양쪽 이전 판 이전 판 다음 판 | 이전 판 | ||
|
기술문서:레퍼런스:쿼리:기본:객체:트리거 [2026/01/21 17:26] carlito76 |
기술문서:레퍼런스:쿼리:기본:객체:트리거 [2026/01/27 13:58] (현재) carlito76 |
||
|---|---|---|---|
| 줄 11: | 줄 11: | ||
| ===== MySQL/ | ===== MySQL/ | ||
| - | <sxh sql; gutter: true;> | + | <sxh sql; gutter: true; highlight: [9, 37-38, 40];> |
| /* | /* | ||
| MySQL 5.0.2 이상/ | MySQL 5.0.2 이상/ | ||
| */ | */ | ||
| - | -- 생성 | ||
| DELIMITER $$ | DELIMITER $$ | ||
| + | -- 생성 | ||
| CREATE TRIGGER {트리거} | CREATE TRIGGER {트리거} | ||
| - | {BEFORE | AFTER} {INSERT | UPDATE | DELETE} ON {테이블} | + | {BEFORE | AFTER} |
| - | FOR EACH ROW -- ROW 단위 | + | {INSERT | UPDATE | DELETE} |
| + | ON {테이블} | ||
| + | FOR EACH ROW -- ROW 단위 | ||
| BEGIN | BEGIN | ||
| + | DECLARE {변수} {타입}; | ||
| + | |||
| /* | /* | ||
| - | 쿼리 작성 | + | 쿼리 작성 |
| */ | */ | ||
| END | END | ||
| 줄 38: | 줄 42: | ||
| -- 삭제 | -- 삭제 | ||
| DROP TRIGGER IF EXISTS {트리거}; | DROP TRIGGER IF EXISTS {트리거}; | ||
| + | |||
| + | /* | ||
| + | MariaDB 10.1.3 이상 | ||
| + | */ | ||
| + | DELIMITER $$ | ||
| + | |||
| + | -- 생성/ | ||
| + | CREATE OR REPLACE TRIGGER {트리거} | ||
| + | {BEFORE | AFTER} | ||
| + | {INSERT | UPDATE | DELETE} -- 중복 선택 가능 (OR) / MariaDB 10.1.8 이상 | ||
| + | ON {테이블} | ||
| + | FOR EACH ROW -- ROW 단위 | ||
| + | BEGIN | ||
| + | DECLARE {변수} {타입}; | ||
| + | |||
| + | /* | ||
| + | 쿼리 작성 (트랜잭션 사용 제약) | ||
| + | */ | ||
| + | END | ||
| + | $$ | ||
| + | |||
| + | DELIMITER ; | ||
| </ | </ | ||
| ===== MSSQL ===== | ===== MSSQL ===== | ||
| - | <sxh sql; gutter: true; highlight: [7-8];> | + | <sxh sql; gutter: true; highlight: [44-45];> |
| /* | /* | ||
| MSSQL 2000 이상 | MSSQL 2000 이상 | ||
| */ | */ | ||
| -- 생성 | -- 생성 | ||
| - | CREATE TRIGGER {트리거} ON {테이블} | + | CREATE TRIGGER {트리거} ON {테이블/뷰} |
| - | {INSTEAD OF | AFTER} {INSERT | UPDATE | DELETE} -- 중복 선택 가능 (콤마) | + | {INSTEAD OF | AFTER} -- 테이블 |
| - | -- CREATE TRIGGER | + | -- {INSTEAD OF} -- 뷰 |
| - | -- {INSTEAD OF} {INSERT | UPDATE | DELETE} -- 중복 선택 가능 (콤마) | + | {INSERT | UPDATE | DELETE} -- 중복 선택 가능 (콤마) |
| AS -- STATEMENT 단위 | AS -- STATEMENT 단위 | ||
| BEGIN | BEGIN | ||
| + | SET NOCOUNT ON; | ||
| + | |||
| + | DECLARE @{변수} {타입}; | ||
| + | |||
| /* | /* | ||
| - | 쿼리 작성 | + | 쿼리 작성 |
| + | */ | ||
| + | END; | ||
| + | GO | ||
| + | |||
| + | -- 수정 | ||
| + | ALTER TRIGGER {트리거} ON {테이블/ | ||
| + | {INSTEAD OF | AFTER} -- 테이블 | ||
| + | -- {INSTEAD OF} -- 뷰 | ||
| + | {INSERT | UPDATE | DELETE} -- 중복 선택 가능 (콤마) | ||
| + | AS -- STATEMENT 단위 | ||
| + | BEGIN | ||
| + | SET NOCOUNT ON; | ||
| + | |||
| + | DECLARE @{변수} {타입}; | ||
| + | |||
| + | /* | ||
| + | 쿼리 작성 (트랜잭션 사용 제약) | ||
| */ | */ | ||
| END; | END; | ||
| 줄 64: | 줄 111: | ||
| MSSQL 2016 이상 | MSSQL 2016 이상 | ||
| */ | */ | ||
| + | -- 생성/ | ||
| + | CREATE OR ALTER TRIGGER {트리거} ON {테이블/ | ||
| + | {INSTEAD OF | AFTER} -- 테이블 | ||
| + | -- {INSTEAD OF} -- 뷰 | ||
| + | {INSERT | UPDATE | DELETE} -- 중복 선택 가능 (콤마) | ||
| + | AS -- STATEMENT 단위 | ||
| + | BEGIN | ||
| + | SET NOCOUNT ON; | ||
| + | |||
| + | DECLARE @{변수} {타입}; | ||
| + | |||
| + | /* | ||
| + | 쿼리 작성 (트랜잭션 사용 제약) | ||
| + | */ | ||
| + | END; | ||
| + | GO | ||
| + | |||
| -- 삭제 | -- 삭제 | ||
| DROP TRIGGER IF EXISTS {트리거}; | DROP TRIGGER IF EXISTS {트리거}; | ||
| 줄 69: | 줄 133: | ||
| ===== Oracle/ | ===== Oracle/ | ||
| - | <sxh sql; gutter: true; highlight: [5, 7, 25, 27];> | + | <sxh sql; gutter: true; highlight: [26-27];> |
| /* | /* | ||
| Oracle 8i 이상/ | Oracle 8i 이상/ | ||
| 줄 75: | 줄 139: | ||
| -- 생성 | -- 생성 | ||
| CREATE TRIGGER {트리거} | CREATE TRIGGER {트리거} | ||
| - | {BEFORE | AFTER} | + | {BEFORE | AFTER} |
| - | -- {INSTEAD OF} {INSERT | UPDATE | DELETE} ON {뷰} -- 중복 선택 가능 (OR) | + | -- {INSTEAD OF} -- 뷰 |
| - | FOR EACH ROW -- ROW 단위 (생략 시 STATEMENT 단위) | + | {INSERT | UPDATE | DELETE} -- 중복 선택 가능 (OR) |
| + | ON {테이블/ | ||
| + | FOR EACH ROW -- ROW 단위 (생략 시 STATEMENT 단위) | ||
| DECLARE | DECLARE | ||
| - | -- 변수 | + | {변수} {타입}; |
| BEGIN | BEGIN | ||
| /* | /* | ||
| - | 쿼리 작성 | + | 쿼리 작성 |
| */ | */ | ||
| END; | END; | ||
| 줄 95: | 줄 161: | ||
| -- 생성/ | -- 생성/ | ||
| CREATE OR REPLACE TRIGGER {트리거} | CREATE OR REPLACE TRIGGER {트리거} | ||
| - | {BEFORE | AFTER} | + | {BEFORE | AFTER} |
| - | -- {INSTEAD OF} {INSERT | UPDATE | DELETE} ON {뷰} -- 중복 선택 가능 (OR) | + | -- {INSTEAD OF} -- 뷰 |
| - | FOR EACH ROW -- ROW 단위 (생략 시 STATEMENT 단위) | + | {INSERT | UPDATE | DELETE} -- 중복 선택 가능 (OR) |
| + | ON {테이블/ | ||
| + | FOR EACH ROW -- ROW 단위 (생략 시 STATEMENT 단위) | ||
| DECLARE | DECLARE | ||
| - | -- 변수 | + | {변수} {타입}; |
| BEGIN | BEGIN | ||
| /* | /* | ||
| - | 쿼리 작성 | + | 쿼리 작성 |
| */ | */ | ||
| END; | END; | ||
| 줄 108: | 줄 176: | ||
| /* | /* | ||
| - | Oracle 23c | + | Oracle 23c 이상 |
| */ | */ | ||
| -- 삭제 | -- 삭제 | ||
| 줄 115: | 줄 183: | ||
| ===== PostgreSQL ===== | ===== PostgreSQL ===== | ||
| - | <sxh sql; gutter: true; highlight: [50, 79, 81];> | + | <sxh sql; gutter: true; highlight: [6, 18, 37, 49, 64, 76, 80, 91, 100-101, 103, 106-111, 113];> |
| /* | /* | ||
| - | PostgreSQL 7.3 이상 | + | PostgreSQL 7.3 이상 |
| */ | */ | ||
| -- 생성 | -- 생성 | ||
| CREATE FUNCTION {함수}() | CREATE FUNCTION {함수}() | ||
| - | -- CREATE OR REPLACE FUNCTION {함수}() | + | RETURNS TRIGGER AS ' |
| - | RETURNS TRIGGER AS $$ | + | |
| DECLARE | DECLARE | ||
| - | -- 변수 | + | {변수} {타입}; |
| BEGIN | BEGIN | ||
| /* | /* | ||
| - | 쿼리 작성 | + | 쿼리 작성 |
| */ | */ | ||
| - | RETURN NEW; -- BEFORE > INSERT, UPDATE | + | |
| - | -- RETURN OLD; -- BEFORE > DELETE | + | RETURN NEW; -- FOR EACH ROW > BEFORE > INSERT |
| - | -- RETURN NULL; -- AFTER | + | -- RETURN OLD; -- FOR EACH ROW > BEFORE > DELETE |
| + | -- RETURN NULL; -- FOR EACH ROW > 작업 종료 (AFTER), 작업 무효화 (BEFORE), FOR EACH STATEMENT | ||
| END; | END; | ||
| - | $$ LANGUAGE plpgsql; | + | ' |
| CREATE TRIGGER {트리거} | CREATE TRIGGER {트리거} | ||
| - | {BEFORE | AFTER} {INSERT | UPDATE | DELETE} ON {테이블} -- 중복 선택 가능 (OR) | + | {BEFORE | AFTER} |
| - | FOR EACH ROW -- ROW 단위 | + | {INSERT | UPDATE | DELETE} -- 중복 선택 가능 (OR) |
| - | EXECUTE PROCEDURE {함수}(); | + | ON {테이블} |
| + | FOR EACH ROW -- ROW 단위 | ||
| + | -- FOR EACH STATEMENT -- STATEMENT | ||
| + | EXECUTE PROCEDURE {함수}(); | ||
| -- 삭제 | -- 삭제 | ||
| DROP TRIGGER {트리거} ON {테이블}; | DROP TRIGGER {트리거} ON {테이블}; | ||
| - | DROP FUNCTION {함수}(); | + | DROP FUNCTION {함수}(); |
| /* | /* | ||
| - | PostgreSQL | + | PostgreSQL |
| */ | */ | ||
| -- 생성 | -- 생성 | ||
| CREATE FUNCTION {함수}() | CREATE FUNCTION {함수}() | ||
| - | -- CREATE OR REPLACE FUNCTION {함수}() | ||
| RETURNS TRIGGER AS $$ | RETURNS TRIGGER AS $$ | ||
| DECLARE | DECLARE | ||
| - | -- 변수 | + | {변수} {타입}; |
| BEGIN | BEGIN | ||
| /* | /* | ||
| - | 쿼리 작성 | + | 쿼리 작성 |
| */ | */ | ||
| - | RETURN NEW; -- BEFORE > INSERT, UPDATE | + | |
| - | -- RETURN OLD; -- BEFORE > DELETE | + | RETURN NEW; -- FOR EACH ROW > BEFORE > INSERT |
| - | -- RETURN NULL; -- AFTER, | + | -- RETURN OLD; -- FOR EACH ROW > BEFORE > DELETE |
| + | -- RETURN NULL; -- FOR EACH ROW > 작업 종료 (AFTER), 작업 무효화 (BEFORE), FOR EACH STATEMENT | ||
| END; | END; | ||
| $$ LANGUAGE plpgsql; | $$ LANGUAGE plpgsql; | ||
| CREATE TRIGGER {트리거} | CREATE TRIGGER {트리거} | ||
| - | {BEFORE | AFTER} {INSERT | UPDATE | DELETE} ON {테이블} -- 중복 선택 가능 (OR) | + | {BEFORE | AFTER} |
| - | -- {INSTEAD OF} {INSERT | UPDATE | DELETE} | + | {INSERT | UPDATE | DELETE} -- 중복 선택 가능 (OR) |
| - | FOR EACH ROW -- ROW 단위 | + | ON {테이블} |
| - | EXECUTE PROCEDURE {함수}(); | + | FOR EACH ROW -- ROW 단위 |
| + | -- FOR EACH STATEMENT -- STATEMENT | ||
| + | EXECUTE PROCEDURE {함수}(); | ||
| - | -- 삭제 | + | /* |
| - | DROP TRIGGER | + | PostgreSQL 8.4 이상 (Dollar Quoting 방식) |
| - | DROP FUNCTION IF EXISTS | + | */ |
| + | -- 생성 | ||
| + | CREATE FUNCTION {함수}() | ||
| + | RETURNS TRIGGER AS $$ | ||
| + | DECLARE | ||
| + | {변수} {타입}; | ||
| + | BEGIN | ||
| + | /* | ||
| + | 쿼리 작성 (트랜잭션 사용 | ||
| + | */ | ||
| + | |||
| + | RETURN NEW; -- FOR EACH ROW > BEFORE > INSERT | UPDATE | ||
| + | -- RETURN OLD; -- FOR EACH ROW > BEFORE > DELETE | ||
| + | -- RETURN NULL; -- FOR EACH ROW > 작업 종료 (AFTER), 작업 무효화 (BEFORE), FOR EACH STATEMENT | ||
| + | END; | ||
| + | $$ LANGUAGE plpgsql; | ||
| + | |||
| + | CREATE | ||
| + | {BEFORE | AFTER} | ||
| + | {INSERT | UPDATE | DELETE | TRUNCATE} -- 중복 선택 가능 (OR), TRUNCATE (STATEMENT 단위) | ||
| + | ON {테이블} | ||
| + | FOR EACH ROW -- ROW 단위 | ||
| + | -- FOR EACH STATEMENT -- STATEMENT 단위 | ||
| + | EXECUTE PROCEDURE | ||
| /* | /* | ||
| - | PostgreSQL | + | PostgreSQL |
| */ | */ | ||
| -- 생성 | -- 생성 | ||
| CREATE FUNCTION {함수}() | CREATE FUNCTION {함수}() | ||
| - | -- CREATE OR REPLACE FUNCTION {함수}() | ||
| RETURNS TRIGGER AS $$ | RETURNS TRIGGER AS $$ | ||
| DECLARE | DECLARE | ||
| - | -- 변수 | + | {변수} {타입}; |
| BEGIN | BEGIN | ||
| /* | /* | ||
| - | 쿼리 작성 | + | 쿼리 작성 |
| */ | */ | ||
| - | RETURN NEW; -- BEFORE > INSERT, UPDATE | + | |
| - | -- RETURN OLD; -- BEFORE > DELETE | + | RETURN NEW; -- FOR EACH ROW > BEFORE |
| - | -- RETURN NULL; -- AFTER, INSTEAD OF | + | -- RETURN OLD; -- FOR EACH ROW > BEFORE |
| + | -- RETURN NULL; -- FOR EACH ROW > 작업 종료 (AFTER), 작업 무효화 (BEFORE | INSTEAD OF), FOR EACH STATEMENT | ||
| END; | END; | ||
| $$ LANGUAGE plpgsql; | $$ LANGUAGE plpgsql; | ||
| CREATE TRIGGER {트리거} | CREATE TRIGGER {트리거} | ||
| - | {BEFORE | AFTER} {INSERT | UPDATE | DELETE} ON {테이블} -- 중복 선택 가능 (OR) | + | {BEFORE | AFTER} |
| - | -- {INSTEAD OF} {INSERT | UPDATE | DELETE} | + | -- {INSTEAD OF} -- 뷰 |
| - | FOR EACH ROW -- ROW 단위 | + | {INSERT | UPDATE | DELETE |
| - | EXECUTE FUNCTION {함수}(); | + | ON {테이블/뷰} |
| + | FOR EACH ROW -- ROW 단위 | ||
| + | -- FOR EACH STATEMENT -- STATEMENT 단위 (테이블) | ||
| + | EXECUTE | ||
| + | -- EXECUTE FUNCTION {함수}(); -- PostgreSQL 11.0 이상 | ||
| + | |||
| + | -- 삭제 | ||
| + | DROP TRIGGER IF EXISTS {트리거} ON {테이블/ | ||
| + | DROP FUNCTION | ||
| </ | </ | ||
| {{tag>" | {{tag>" | ||