사용자 도구

사이트 도구


기술문서:레퍼런스:쿼리:기본:객체:트리거

차이

문서의 선택한 두 판 사이의 차이를 보여줍니다.

차이 보기로 링크

양쪽 이전 판 이전 판
다음 판
이전 판
기술문서:레퍼런스:쿼리:기본:객체:트리거 [2026/01/23 19:09]
carlito76
기술문서:레퍼런스:쿼리:기본:객체:트리거 [2026/01/27 13:58] (현재)
carlito76
줄 11: 줄 11:
  
 ===== MySQL/MariaDB ===== ===== MySQL/MariaDB =====
-<sxh sql; gutter: true; highlight: [36];>+<sxh sql; gutter: true; highlight: [9, 37-38, 40];>
 /* /*
  MySQL 5.0.2 이상/MariaDB 5.1 이상  MySQL 5.0.2 이상/MariaDB 5.1 이상
줄 20: 줄 20:
 CREATE TRIGGER {트리거} CREATE TRIGGER {트리거}
  {BEFORE | AFTER}  {BEFORE | AFTER}
- {INSERT | UPDATE | DELETE} -- 중복 선택 불가+ {INSERT | UPDATE | DELETE} -- 중복 선택 불가 / MariaDB 10.1.8 미만
 ON {테이블} ON {테이블}
  FOR EACH ROW -- ROW 단위  FOR EACH ROW -- ROW 단위
 BEGIN BEGIN
 + DECLARE {변수} {타입};
 +
  /*  /*
- 쿼리 작성+ 쿼리 작성 (트랜잭션 사용 제약)
  */  */
 END END
줄 49: 줄 51:
 CREATE OR REPLACE TRIGGER {트리거} CREATE OR REPLACE TRIGGER {트리거}
  {BEFORE | AFTER}  {BEFORE | AFTER}
- {INSERT | UPDATE | DELETE} -- 중복 선택 + {INSERT | UPDATE | DELETE} -- 중복 선택 가능 (OR) / MariaDB 10.1.8 이상
 ON {테이블} ON {테이블}
  FOR EACH ROW -- ROW 단위  FOR EACH ROW -- ROW 단위
 BEGIN BEGIN
 + DECLARE {변수} {타입};
 +
  /*  /*
- 쿼리 작성+ 쿼리 작성 (트랜잭션 사용 제약)
  */  */
 END END
줄 63: 줄 67:
  
 ===== MSSQL ===== ===== MSSQL =====
-<sxh sql; gutter: true; highlight: [25];>+<sxh sql; gutter: true; highlight: [44-45];>
 /* /*
  MSSQL 2000 이상  MSSQL 2000 이상
줄 75: 줄 79:
 BEGIN BEGIN
  SET NOCOUNT ON;  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;
줄 95: 줄 119:
 BEGIN BEGIN
  SET NOCOUNT ON;  SET NOCOUNT ON;
 +
 + DECLARE @{변수} {타입};
 +
  /*  /*
- 쿼리 작성+ 쿼리 작성 (트랜잭션 사용 제약)
  */  */
 END; END;
줄 106: 줄 133:
  
 ===== Oracle/Tibero ===== ===== Oracle/Tibero =====
-<sxh sql; gutter: true; highlight: [27];>+<sxh sql; gutter: true; highlight: [26-27];>
 /* /*
  Oracle 8i 이상/Tibero 5 이상  Oracle 8i 이상/Tibero 5 이상
줄 118: 줄 145:
  FOR EACH ROW -- ROW 단위 (생략 시 STATEMENT 단위)  FOR EACH ROW -- ROW 단위 (생략 시 STATEMENT 단위)
 DECLARE DECLARE
- -- 변수 선언+ {변수} {타입};
 BEGIN BEGIN
  /*  /*
- 쿼리 작성+ 쿼리 작성 (트랜잭션 사용 제약)
  */  */
 END; END;
줄 140: 줄 167:
  FOR EACH ROW -- ROW 단위 (생략 시 STATEMENT 단위)  FOR EACH ROW -- ROW 단위 (생략 시 STATEMENT 단위)
 DECLARE DECLARE
- -- 변수 선언+ {변수} {타입};
 BEGIN BEGIN
  /*  /*
- 쿼리 작성+ 쿼리 작성 (트랜잭션 사용 제약)
  */  */
 END; END;
줄 149: 줄 176:
  
 /* /*
- Oracle 23c+ Oracle 23c 이상
 */ */
 -- 삭제 -- 삭제
줄 156: 줄 183:
  
 ===== PostgreSQL ===== ===== PostgreSQL =====
-<sxh sql; gutter: true; highlight: [537480, 80-84106112-117];> +<sxh sql; gutter: true; highlight: [61837, 49, 64, 76, 80, 91, 100-101103106-111, 113];>
 /* /*
- PostgreSQL 7.3 이상+ PostgreSQL 7.3 이상 (Single Quote 방식)
 */ */
 -- 생성 -- 생성
 CREATE FUNCTION {함수}() CREATE FUNCTION {함수}()
--- CREATE OR REPLACE FUNCTION {함수}() +RETURNS TRIGGER AS '
-RETURNS TRIGGER AS $$+
 DECLARE DECLARE
- -- 변수 선언+ {변수} {타입};
 BEGIN BEGIN
  /*  /*
- 쿼리 작성+ 쿼리 작성 (트랜잭션 사용 제약)
  */  */
- RETURN NEW; -- BEFORE > INSERTUPDATE + 
- -- RETURN OLD; -- BEFORE > DELETE + RETURN NEW; -- FOR EACH ROW > BEFORE > INSERT UPDATE 
- -- 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 {트리거}
줄 187: 줄 213:
 -- 삭제 -- 삭제
 DROP TRIGGER {트리거} ON {테이블}; DROP TRIGGER {트리거} ON {테이블};
-DROP FUNCTION {함수}(); -- 인자 타입 명시+DROP FUNCTION {함수}();
  
 /* /*
- PostgreSQL 8.이상+ PostgreSQL 8.이상 (Dollar Quoting 방식)
 */ */
 -- 생성 -- 생성
 CREATE FUNCTION {함수}() CREATE FUNCTION {함수}()
--- CREATE OR REPLACE FUNCTION {함수}() 
 RETURNS TRIGGER AS $$ RETURNS TRIGGER AS $$
 DECLARE DECLARE
- -- 변수 선언+ {변수} {타입};
 BEGIN BEGIN
  /*  /*
- 쿼리 작성+ 쿼리 작성 (트랜잭션 사용 제약)
  */  */
- RETURN NEW; -- BEFORE > INSERTUPDATE + 
- -- RETURN OLD; -- BEFORE > DELETE + RETURN NEW; -- FOR EACH ROW > BEFORE > INSERT UPDATE 
- -- 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;
줄 210: 줄 236:
 CREATE TRIGGER {트리거} CREATE TRIGGER {트리거}
  {BEFORE | AFTER}  {BEFORE | AFTER}
- {INSERT | UPDATE | DELETE | TRUNCATE} -- 중복 선택 가능 (OR)+ {INSERT | UPDATE | DELETE} -- 중복 선택 가능 (OR)
 ON {테이블} ON {테이블}
  FOR EACH ROW -- ROW 단위  FOR EACH ROW -- ROW 단위
줄 217: 줄 243:
  
 /* /*
- PostgreSQL 9.이상+ PostgreSQL 8.이상 (Dollar Quoting 방식)
 */ */
 -- 생성 -- 생성
 CREATE FUNCTION {함수}() CREATE FUNCTION {함수}()
--- CREATE OR REPLACE FUNCTION {함수}() 
 RETURNS TRIGGER AS $$ RETURNS TRIGGER AS $$
 DECLARE DECLARE
- -- 변수 선언+ {변수} {타입};
 BEGIN BEGIN
  /*  /*
- 쿼리 작성+ 쿼리 작성 (트랜잭션 사용 제약)
  */  */
- RETURN NEW; -- BEFORE > INSERTUPDATE + 
- -- RETURN OLD; -- BEFORE > DELETE + RETURN NEW; -- FOR EACH ROW > BEFORE > INSERT UPDATE 
- -- RETURN NULL; -- AFTER, INSTEAD OF+ -- 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} -- 테이블 + {BEFORE | AFTER} 
- -- {INSTEAD OF} -- 뷰 + {INSERT | UPDATE | DELETE | TRUNCATE} -- 중복 선택 가능 (OR), TRUNCATE (STATEMENT 단위
- {INSERT | UPDATE | DELETE | TRUNCATE} -- 중복 선택 가능 (OR), TRUNCATE (테이블+ON {테이블} 
-ON {테이블/뷰+ FOR EACH ROW -- ROW 단위 
- FOR EACH ROW -- ROW 단위 (테이블/뷰) + -- FOR EACH STATEMENT -- STATEMENT 단위
- -- FOR EACH STATEMENT -- STATEMENT 단위 (테이블)+
  EXECUTE PROCEDURE {함수}();  EXECUTE PROCEDURE {함수}();
- 
--- 삭제 
-DROP TRIGGER IF EXISTS {트리거} ON {테이블/뷰}; 
-DROP FUNCTION IF EXISTS {함수}(); -- 인자 타입 명시 
  
 /* /*
- PostgreSQL 11.이상+ PostgreSQL 9.이상 (Dollar Quoting 방식)
 */ */
 -- 생성 -- 생성
 CREATE FUNCTION {함수}() CREATE FUNCTION {함수}()
--- CREATE OR REPLACE FUNCTION {함수}() 
 RETURNS TRIGGER AS $$ RETURNS TRIGGER AS $$
 DECLARE DECLARE
- -- 변수 선언+ {변수} {타입};
 BEGIN BEGIN
  /*  /*
- 쿼리 작성+ 쿼리 작성 (트랜잭션 사용 제약)
  */  */
- RETURN NEW; -- BEFORE > INSERTUPDATE + 
- -- RETURN OLD; -- BEFORE > DELETE + RETURN NEW; -- FOR EACH ROW > BEFORE | INSTEAD OF > INSERT UPDATE 
- -- RETURN NULL; -- AFTER, INSTEAD OF+ -- RETURN OLD; -- FOR EACH ROW > BEFORE | INSTEAD OF > DELETE 
 + -- RETURN NULL; -- FOR EACH ROW > 작업 종료 (AFTER)작업 무효화 (BEFORE | INSTEAD OF), FOR EACH STATEMENT
 END; END;
 $$ LANGUAGE plpgsql; $$ LANGUAGE plpgsql;
줄 270: 줄 291:
  {BEFORE | AFTER} -- 테이블  {BEFORE | AFTER} -- 테이블
  -- {INSTEAD OF} -- 뷰  -- {INSTEAD OF} -- 뷰
- {INSERT | UPDATE | DELETE | TRUNCATE} -- 중복 선택 가능 (OR), TRUNCATE (테이블)+ {INSERT | UPDATE | DELETE | TRUNCATE} -- 중복 선택 가능 (OR), TRUNCATE (STATEMENT 단위)
 ON {테이블/뷰} ON {테이블/뷰}
  FOR EACH ROW -- ROW 단위 (테이블/뷰)  FOR EACH ROW -- ROW 단위 (테이블/뷰)
  -- FOR EACH STATEMENT -- STATEMENT 단위 (테이블)  -- FOR EACH STATEMENT -- STATEMENT 단위 (테이블)
- EXECUTE FUNCTION {함수}();+ EXECUTE PROCEDURE {함수}(); 
 + -- EXECUTE FUNCTION {함수}(); -- PostgreSQL 11.0 이상 
 + 
 +-- 삭제 
 +DROP TRIGGER IF EXISTS {트리거} ON {테이블/뷰}; 
 +DROP FUNCTION IF EXISTS {함수}();
 </sxh> </sxh>
  
 {{tag>"쿼리" "Query" "기본" "객체"}} {{tag>"쿼리" "Query" "기본" "객체"}}