Ora-04072: недействительный тип триггера - PullRequest
2 голосов
/ 05 июля 2011

Я пытаюсь выполнить следующую инструкцию SQL в Oracle 11g.Я не опытный, когда дело доходит до Oracle, и я не уверен, почему это терпит неудачу.Этот запрос был предоставлен мне нашим разработчиком.

Я пытался выполнить его через рабочий лист SQL в OEM.

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 ]

6 голосов
/ 05 июля 2011

Код, который вы показываете, работает для меня, но только как две отдельные команды:

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;
2 голосов
/ 05 июля 2011

Если вы используете 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...