2011-09-01 4 views
0

다음 SQL은 Oracle 9i 서버에서 실행될 때 "ORA-04098 : trigger 'DBO.WTF_TRIGGER'가 유효하지 않으며 재 검증에 실패했습니다."라는 오류가 발생합니다.Oracle 9i 자동 증가 트리거/시퀀스가 ​​작동하지 않습니다.

DROP TABLE "DBO".WTF; 

CREATE TABLE "DBO".WTF 
(id NUMBER PRIMARY KEY, 
name VARCHAR2(30)); 

CREATE SEQUENCE "DBO".WTF_sequence 
START WITH 1 
INCREMENT BY 1; 

CREATE OR REPLACE TRIGGER "DBO".WTF_trigger 
BEFORE INSERT 
ON "DBO".WTF 
REFERENCING NEW AS NEW 
FOR EACH ROW 
BEGIN 
SELECT "DBO".WTF_sequence.nextval INTO :NEW.id FROM dual; 
END; 

INSERT INTO "DBO".WTF (name) VALUES ('asd'); 

아이디어가 있으십니까?

+2

SHOW ERRORS 명령을 실행하면 구문 오류 또는 기타 문제점으로 인해 트리거가 컴파일되지 못하게됩니다. – APC

답변

3

APC가 지적한 것처럼 SQL * Plus에서 SHOW ERRORS을 수행하면 오류를 인쇄하는 데 도움이됩니다. 적절한 권한을 가지고 DBO 사용자를 생성하면 게시 한 코드가 완벽하게 작동합니다.

SQL> conn/as sysdba 
Connected. 
SQL> create user dbo identified by dbo; 

User created. 

SQL> grant connect, resource, unlimited tablespace to dbo; 

Grant succeeded. 

SQL> conn dbo/dbo 
Connected. 
SQL> DROP TABLE "DBO".WTF; 
DROP TABLE "DBO".WTF 
       * 
ERROR at line 1: 
ORA-00942: table or view does not exist 


SQL> 
SQL> CREATE TABLE "DBO".WTF 
    2 (id NUMBER PRIMARY KEY, 
    3 name VARCHAR2(30)); 

Table created. 

SQL> 
SQL> CREATE SEQUENCE "DBO".WTF_sequence 
    2 START WITH 1 
    3 INCREMENT BY 1; 

Sequence created. 

SQL> 
SQL> CREATE OR REPLACE TRIGGER "DBO".WTF_trigger 
    2 BEFORE INSERT 
    3 ON "DBO".WTF 
    4 REFERENCING NEW AS NEW 
    5 FOR EACH ROW 
    6 BEGIN 
    7 SELECT "DBO".WTF_sequence.nextval INTO :NEW.id FROM dual; 
    8 END; 
    9/

Trigger created. 

SQL> INSERT INTO "DBO".WTF (name) VALUES ('asd'); 

1 row created. 

SQL> select * from wtf; 

     ID NAME 
---------- ------------------------------ 
     1 asd