我正在尝试在 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;
最佳答案
您显示的代码对我有效,但仅作为两个单独的命令:
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可以简化成这样:
:new.ADMINCOMMANDID := TBL_ADMINCOMMANDS_SEQ.nextval;
其实整个触发器可以简化为:
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;
关于sql - Ora-04072 : INVALID TRIGGER TYPE,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6584613/