본문 바로가기
SQL(쿼리)

트리거 생성(IF문 활용해서 Not Null인 컬럼만 트리거 작동)

by 취미툰 2020. 12. 7.
반응형

트리거를 만들 상황이 생겼습니다.

간단한 트리거이긴 하지만, 특정 테이블 컬럼에 INSERT나 UPDATE 발생 시 다른 테이블에 로깅을 위해 해당값을 삽입하는 트리거입니다.

단, NULL 값은 필요없으므로 삽입할 필요가 없는 상황입니다.

 

테스트 환경에서 대략 생성하여 테스트 수행시 NULL값은 제외하고 잘 작동되는것을 확인하였습니다.

 

1.테이블 생성

--데이터를 삽입할 테이블
CREATE TABLE  TESTLINK
(a VARCHAR2(10);

--데이터 삽입시 트리거가 insert 할 테이블
CREATE TABLE TESTLINK2
(a VARCHAR2(10));

 

 

2.트리거 생성

TESTLINK의 A 컬럼에 INSERT나 UPDATE 발생시 작동
CREATE OR REPLACE TRIGGER TEST.TEST_FCE01
AFTER INSERT OR UPDATE OF A
ON TEST.TESTLINK
FOR EACH ROW
 BEGIN
  IF (:NEW.A) is NOT null THEN
	insert into TEST.testlink2(A)
	values(:NEW.A);
  ELSE
  DBMS_OUTPUT.PUT_LINE('This is Null');
  END IF;
END;

 

 

3. 결과 테스트

--데이터 insert 전
SQL> select * from testlink;

A         
----------

0 rows selected.


SQL> select * from testlink2;

A         
----------

0 rows selected.


--데이터 insert(NULL값,'1'값 두개 삽입)
SQL> insert into testlink
values(NULL);

1 rows Inserted.

SQL> insert into testlink
values('1');

1 rows Inserted.


--확인

SQL> select * from testlink;

A         
----------
          
1         

2 rows selected.

NULL값 포함 2개의 행 검색됌
SQL> select * from testlink2;

A         
----------
1         

1 rows selected.

TESTLINK2 테이블에는 NULL 값이 제외되고 1만 삽입된것을 확인할 수 있습니다.

반응형

'SQL(쿼리)' 카테고리의 다른 글

Oracle RANK 함수  (0) 2021.07.06
실행계획 확인하기,실제 실행계획 확인하기  (0) 2020.12.22
SCOTT스키마예제를 통해 계층구조 쿼리 정리  (0) 2020.11.25
ROLLUP을 대신하는 방법  (0) 2020.11.24
ROLLUP  (0) 2020.11.20

댓글