Ora-04072:无效触发类型

jer*_*e78 2 sql oracle oracle11g

我正在尝试在Oracle 11g上执行以下SQL语句.谈到Oracle时我没有经验,我不确定为什么会失败.此查询由我们的开发人员提供给我.

我试图通过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;
Run Code Online (Sandbox Code Playgroud)

Ton*_*ews 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;
Run Code Online (Sandbox Code Playgroud)

2)

ALTER TRIGGER TBL_ADMINCOMMAND_TRG ENABLE;
Run Code Online (Sandbox Code Playgroud)

尝试一次一个.

顺便说一句,这一行:

SELECT TBL_ADMINCOMMANDS_SEQ.nextval INTO :new.ADMINCOMMANDID FROM DUAL;
Run Code Online (Sandbox Code Playgroud)

可以在11G中简化为:

:new.ADMINCOMMANDID := TBL_ADMINCOMMANDS_SEQ.nextval;
Run Code Online (Sandbox Code Playgroud)

实际上,整个触发器可以简化为:

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;
Run Code Online (Sandbox Code Playgroud)