본문 바로가기
dev/DB

[DB/Oracle] TRIGGER * 바인드 입력 한번 찾아보기(찾음)

by dev_Step 2022. 4. 29.

아래의 SQL 문을 보면 

TRIGGER를 생성하는 쿼리문을 볼수 있다

 

첫줄부터 형식을 보면

CREATE [OR REPLACE[ TRIGGER  생성할_트리거_이름 [BEFORE/AFTER] [INSERT/UPDATE/DELETE] ON 테이블명

--> 트리거를 생설할때 트리거 이름을 만들고, 해당 트리거가 INSERT OR UPDATE OR DELETE 가 실행되기 BEFORE 전에 실행될것인가 AFTER 후에 실행될것인가를 정하고 ON 테이블명 --> 해당 테이블에서 [I/U/D]가 [AFTER/BEFORE] 할때 실행되는 트리거이다

 

REFERENCING NEW AS N OLD O

--> 해당 트리거가 INSERT일떄는 NEW만 사용 가능하다 이것은 INSERT 시에  이전의 데이터는 존재 하지 않기 때문에 적용되고 난 후의 값을 참조 할 수 있는 NEW 를 사용해야 하고

UPDATE의 경우는 UPDATE 가 실행되기 전 / 후에  기존에 있는 튜플과, UPDATE 되고 난 후에 튜블 모두 있기 때문에 NEW / OLD 모두 사용할 수 있고

DELETE의 경우는 삭제되고 나면 후의 데이터가 존재하지 않기 때문에 OLD만 사용이 가능하다.

 

* 여기서 의문점은 REFERENCING NEW AS N 하여 N을 사용하려고 하면 바인드 입력이라고 계속 뜨는데 왜 그런지 모르겠다 :(콜론) 키워드를 입력하고 변수를 입력하면 바인드 변수가 된다고 하는데 책에서는 정상적으로 된다고 나오는데..

해답을 찾았다. 트리거를 생성할때 명령문을 실행시키는게 아니라(Ctrl+Enter) X

스크립트 실행을 실시 해야 한다. !!!! (F5) 

또한 트리거 생성시에 REFERENCING OLD/NEW AS 이것은 FOR EACH ROW 보다 전에 쓰는게 TRIGGER 양식에 올바르다,

 

FOR EACH ROW [WHEN (조건)]  

트리거를 모든 ROW에 실행시킬 것인지 아니면 조건에 맞는 행에만 시킬것인지 써준다

 

 

 

[WHEN (조건) ] 

--> TRIGGER가 작동할 조건을 제시 할수 있으며, 이때 조건이 TRUE일떄만 TRIGGER만 작동된다. 

 

BEGIN

~ TIGGER가 실행될 본문 내용이다.

END;

 

 

 

보통 REFERENCING 해당 줄을 선언하지 않고, 보통

:OLD.속성명  ,  :NEW.속성명으로 사용하면 정상적으로 실행되는것을 확인할 수 있었다.

 

OLD, NEW 데이터를 참조할떄는 :(콜론) 을 붙여줘야 하며

REFERENCING NEW AS T_TABLE   --> 이렇게 선언했을때도 T_TABLE을 사용하려면 : 을 붙이고 사용해야 한다

*하지만 지금은 : 을 사용하고 하면 계쏙 바인드 입력하라고 해서.. 원인을 못찾고 있다.

해답을 찾았다. 트리거를 생성할때 명령문을 실행시키는게 아니라(Ctrl+Enter) X

스크립트 실행을 실시 해야 한다. !!!! (F5) 또한 트리거 생성시에 REFERENCING OLD/NEW AS 이것은 FOR EACH ROW 보다 전에 쓰는게 TRIGGER 양식에 올바르다,

 

 

 

또한 REFERENCING OLD //  NEW  AS 애칭 이것은

<EMP>

emp_name   emp_no    |

홍길동          A0001    |

--------------------------|

이런 EMP 테이블이 있다고 하자 

그럼 BEFORE UPDATE ON EMP REFERENCING NEW AS N OLD AS O 라고 했을떄 

 

업데이트 문을 실행 시키면 -->UPDATE A SET emp_name = '김길동' where emp_no = 'A0001' 

기존에있던 홍길동의 값은  :O.emp_name  '홍길동'이 되고 / ///   N.emp_name 은 '김길동'이 된다.

 

이런개념으로 INSERT 떄는 NEW 밖에 없고, DELETE는 OLD 밖에 없다.  UPDATE는 OLD NEW 모두 있다.

'dev > DB' 카테고리의 다른 글

[DB/Oracle] CASE 표현식, 슈도 칼럼 , 바인드 변수  (0) 2022.05.21
[DB/Oracle] SELECT  (0) 2022.05.21
[DB/Oracle] Procedure, Curosr , 사용자 정의 함수  (0) 2022.04.28
[DB/Oracle] SQL 모음  (0) 2022.04.28
[DB/Oracle] ORACLE 개념  (0) 2022.02.22