MS SQL 로 작성된 트리거를 오라클 트리거로 변환할 때 예시를
몇자 적어 볼가 한다.
[MSSQL]
ⓛ
CREATE TRIGGER [T_EMP_MOVE_AFTER_DELETE] ON [EMP_MOVE] AFTER DELETE, UPDATE AS
BEGIN
DECLARE
@OLD$EMP_NO DECIMAL(19,5),
@OLD$DEPT_NO DECIMAL(19,5),
@OLD$EMP_NAME NVARCHAR(2),
②
DECLARE CUR CURSOR FOR
SELECT EMP_NO ,
DEPT_NO,
EMP_NAME,
③ FROM DELETED
OPEN CUR
FETCH NEXT FROM CUR INTO @OLD$EMP_NO,
@OLD$DEPT_NO,
@OLD$EMP_NAME
WHILE @@FETCH_STATUS = 0
BEGIN
IF @OLD$DEPT_NO IN ('10', '11')
BEGIN
UPDATE EMP_MOVE_HIST A
SET A.MOVE_CNT = ISNULL(A.MOVE_CNT , 0) + 1
A.BEFORE_DEPT_NO = @OLD$DEPT_NO
FROM DELETED
WHERE A.EMP_NO = @OLD$EMP_NO
AND A.DEPT_NO = @OLD$DEPT_NO
AND A.EMP_NAME= @OLD$EMP_NAME
END
ELSE
BEGIN
UPDATE EMP_MOVE_HIST
~~~~~~~~~~
END
FETCH NEXT FROM CUR INTO @OLD$QTY,
@OLD$WGT,
@OLD$COMP_CD,
END
-- 커서 해제
CLOSE CUR
DEALLOCATE CUR
END
[ORACLE]
CREATE TRIGGER T_EMP_MOVE_AFTER_DELETE DELETE OR UPDATE ON EMP_MOVE AFTER
FOR EACH ROW
BEGIN
IF DELETING THEN
IF :OLD.DEPT_NO IN ('10', '11') THEN
BEGIN
UPDATE EMP_MOVE_HIST A
SET A.MOVE_CNT = ISNULL(A.MOVE_CNT , 0) + 1
A.BEFORE_DEPT_NO = @OLD$DEPT_NO
FROM DELETED
WHERE A.EMP_NO = @OLD$EMP_NO
AND A.DEPT_NO = @OLD$DEPT_NO
AND A.EMP_NAME= @OLD$EMP_NAME;
END;
ELSE
BEGIN
UPDATE EMP_MOVE_HIST
~~~~~~~~~~;
END ;
END IF;
END IF;
END;
ⓛ 트리거가 목표가되는 테이블에 어떤시점에 어떤 DML (MSSQL 은 ,로 구분 ORACLE은 OR로 구분)
처리를 할 것인지 정의 한다.
② MSSQL 은 커서를 이용해 루프 를 진행 하면서 처리 하였고 ORACLE은 :OLD. (반영전 컬럼값) 키워드를 이용해
값을 직접 접근한다.
반대로 :NEW 는 (반영후 컬럼값)
③ MSSQL은 DELETED 를 사용해 테이블 통 으로 가져 올수 있는 반면에 ORACLE은 ②처럼
컬럼 개별값을 가져 와서 처리를 해야 하고 처리되는 (DELETING) 시점을 가져 올 수 있다.
'Dev Story > DB' 카테고리의 다른 글
실무에 사용 되는 오라클 커서 (CURSOR) 사용법 (0) | 2020.02.23 |
---|---|
오라클 테이블 반환 (PIPELINED TABLE) 함수 작성법 (0) | 2020.02.22 |
MSSQL -> Oracle 자주 사용 되는 날짜 시간 변환 편 (0) | 2020.02.20 |