깜놀하는 해므찌로

MSSQL / ORACLE / MARIADB / MYSQL Insert Trigger SQL 기본 입력 트리거 생성 예시 본문

IT

MSSQL / ORACLE / MARIADB / MYSQL Insert Trigger SQL 기본 입력 트리거 생성 예시

agnusdei1207 2022. 10. 1. 08:46
반응형
SMALL

0. 트리거 : 트리거는 1개의 테이블에 입력, 수정, 삭제 이벤트가 발생했을 경우 다른 테이블에도 연쇄적인 작업이 필요할 경우에만 사용하도록 합시다. 

 

1. 트리거 예시로 두 개의 테이블을 사용하겠습니다.

2. 트리거로 데이터를 조작하기 위해 컬럼의 타입을 맞추도록 합니다. (선택)

CREATE TRIGGER t_pk_trigger
	   ON  T_PK
	   AFTER UPDATE
	AS 
	BEGIN
	    INSERT INTO t_pk values(5, '트리거 작동');
	END
	GO

3. 기본적인 UPDATE 트리거 생성 예시

CREATE TRIGGER t_fk_trigger
	   ON  T_PK
	   AFTER INSERT
	AS 
	BEGIN

	    INSERT INTO t_fk values(5, '트리거 작동');

	END
	GO

4. 두 개의 테이블을 사이에서 작동하는 INSERT 트리거 생성 예시

CREATE TRIGGER t_fk_trg
	   ON  T_PK
	   AFTER INSERT
	AS 
	BEGIN
		SET NOCOUNT ON;
        
        // insert, update, delete 를 구분할 변수 (I, U, D)
		DECLARE @Action AS CHAR(1)
        
        // 기본 insert 로 시작
		SET @Action = 'I'
        
		// deleted 테이블과 inserted 테이블에 데이터가 둘 다 있다면 update 로 판단
        // deleted 테이블에 데이터가 없으면 insert 로 판단
        
		IF Exists(select * from deleted)
		begin
			SET @Action = (Case when Exists(SELECT * from inserted) then 'U' else 'D' END)
		end

		Declare @SEQ AS Int
		Declare @C_NAME AS Varchar(50)
		
        // insert, update, delete 를 구분하여 해당 테이블로부터 데이터를 가져와 변수에 저장
        
		IF @Action = 'D'
			Begin
				SELECT @SEQ = SEQ, @C_NAME = C_NAME FROM deleted
			End
		Else
			Begin
				SELECT @SEQ = SEQ, @C_NAME = C_NAME FROM inserted
			End

		// 최종 결과 insert
	    INSERT INTO t_fk(SEQ, C_NAME) values(@SEQ, @C_NAME);

	END
	GO

5. 1개의 테이블에 INSERT 가 될 경우 다른 테이블에 해당 값이 입력되록하는 INSERT 트리거 예시

6. 변수를 선언한 후

7. 첫 테이블에 INSERT 된 값들을 변수에 넣고

8. 가상 테이블인 inserted / deleted 로부터 조회 후 선언해둔 변수에 저장합니다.

9. 끝으로 2번째 테이블에 해당 값을 INSERT 합니다.

반응형
LIST