簡體   English   中英

Ora-04072: 無效的觸發器類型

[英]Ora-04072: INVALID TRIGGER TYPE

我正在嘗試在 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*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;

另請注意,如果您的觸發器使用IF inserting ,則您只能執行觸發器BEFORE INSERT

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM