티스토리 뷰
반응형
오라클 호환모드가 설정되어 있는 데이터베이스에서 트리거 생성시 오류가 발생하는 케이스에 대해 소개합니다.
DB2 인스턴스 계정에서 db2set 명령으로 오라클 호환모드 설정내역을 확인합니다.
$ db2set -all
[i] DB2_COMPATIBILITY_VECTOR=ORA
[i] DB2_SKIPINSERTED=on
[i] DB2_OPTPROFILE=yes
[i] DB2_EVALUNCOMMITTED=yes
[i] DB2_SKIPDELETED=on
[i] DB2DBDFT=hansdb
[i] DB2COMM=TCPIP
[i] DB2AUTOSTART=NO
$ db2 "create table test (aa int, id char(20))"
DB20000I The SQL command completed successfully.
$ db2 "create table test_his (aa int, id char(20))"
DB20000I The SQL command completed successfully.
아래는 트리거 내용입니다.
$ cat create_trigger.sql
CREATE OR REPLACE TRIGGER TRI1 NO CASCADE AFTER INSERT ON TEST
REFERENCING NEW AS N
FOR EACH ROW
BEGIN
INSERT INTO TEST_HIS (aa,id) VALUES (N.aa, N.id);
END
!
트리거를 생성하려고 하면 아래와 같이 SQL0206N 오류가 발생합니다.
$ db2 -td! -f create_trigger.sql
DB21034E The command was processed as an SQL statement because it was not a
valid Command Line Processor command. During SQL processing it returned:
SQL0206N "N.AA" is not valid in the context where it is used. LINE NUMBER=5.
SQLSTATE=42703
오류 원인은 오라클 호환모드로 인한 것으로, 오라클 호환모드에서 위와 같이 TRIGGER 생성 구문을 사용하면 우선적으로 오라클 스타일로 해석되는 것 같습니다.
따라서 DB2 스타일로 인식되도록 FOR EACH ROW를 FOR EACH ROW MODE DB2SQL 로 바꿔줍니다.
CREATE TRIGGER TRI1 AFTER INSERT ON TEST
REFERENCING NEW AS N
FOR EACH ROW MODE DB2SQL
BEGIN
INSERT INTO TEST_HIS VALUES (N.aa, N.id);--
END
!
http://www.ibm.com/support/knowledgecenter/en/SSEPGG_11.1.0/com.ibm.db2.luw.sql.ref.doc/doc/r0000931.html
반응형
댓글
링크
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday