2011-07-05 5 views
2

Oracle 11g에서 다음 SQL 문을 실행하려고합니다. 나는 오라클에 관해서 경험이 없기 때문에 이것이 왜 실패하고 있는지 확신 할 수 없다. 이 쿼리는 개발자가 제공 한 것입니다.Ora-04072 : INVALID TRIGGER TYPE

OEM의 SQL 워크 시트를 통해이를 실행하려고했습니다.

CREATE OR REPLACE TRIGGER TBL_ADMINCOMMAND_TRG BEFORE 
INSERT OR UPDATE ON tbl_AdminCommands FOR EACH ROW 
BEGIN 
IF inserting 
AND :new.ADMINCOMMANDID IS NULL THEN 
SELECT TBL_ADMINCOMMANDS_SEQ.nextval INTO :new.ADMINCOMMANDID FROM DUAL; 
END IF; 
END; 
ALTER TRIGGER TBL_ADMINCOMMAND_TRG ENABLE; 

답변

2
:

:new.ADMINCOMMANDID := TBL_ADMINCOMMANDS_SEQ.nextval; 

실제로 전체 트리거로 단순화 될 수있다

SQL * Plus를 사용하는 경우 PL/SQL 명령을 한 줄에 하나의 슬래시로 끝내야합니다 :

CREATE OR REPLACE TRIGGER TBL_ADMINCOMMAND_TRG 
BEFORE INSERT OR UPDATE ON tbl_AdminCommands 
FOR EACH ROW 
BEGIN 
    IF inserting AND :new.ADMINCOMMANDID IS NULL 
    THEN 
    SELECT TBL_ADMINCOMMANDS_SEQ.nextval 
     INTO :new.ADMINCOMMANDID 
     FROM DUAL; 
    END IF; 
END; 
/

ALTER TRIGGER TBL_ADMINCOMMAND_TRG ENABLE; 

또한주의 만 트리거 BEFORE INSERT을 할 수 IF inserting 트리거를 사용하는 경우 그.

+0

OEM을 통해 SQL Worksheet를 사용하고있었습니다. SQL * PLUS로 바꿨고 올바르게 실행되었습니다. – jerle78

6

당신이 나를 위해 작동하지만에만 두 개의 분리 된 명령을 보여 코드 :

1)

CREATE OR REPLACE TRIGGER TBL_ADMINCOMMAND_TRG BEFORE 
INSERT OR UPDATE ON tbl_AdminCommands FOR EACH ROW 
BEGIN 
IF inserting 
AND :new.ADMINCOMMANDID IS NULL THEN 
SELECT TBL_ADMINCOMMANDS_SEQ.nextval INTO :new.ADMINCOMMANDID FROM DUAL; 
END IF; 
END; 

2)

ALTER TRIGGER TBL_ADMINCOMMAND_TRG ENABLE; 

하는 것은 그들에게 하나를 수행보십시오 시각.

SELECT TBL_ADMINCOMMANDS_SEQ.nextval INTO :new.ADMINCOMMANDID FROM DUAL; 

은 11g의이 단순화 될 수있다 : 제쳐두고,이 선으로

CREATE OR REPLACE TRIGGER TBL_ADMINCOMMAND_TRG 
BEFORE INSERT ON tbl_AdminCommands 
FOR EACH ROW 
WHEN (NEW.ADMINCOMMANDID IS NULL) 
BEGIN 
    :new.ADMINCOMMANDID := TBL_ADMINCOMMANDS_SEQ.nextval; 
END; 
+0

+1 –

+0

SQL * Plus에서 쿼리를 다시 실행하여 정상적으로 작동했습니다. 나는 그것이 OEM을 통해 SQL 워크 시트에 특정한 것이라고 생각한다. 팁 (모두)에게 감사드립니다! – jerle78