Почему мой триггер не работает в моей базе данных Oracle? - PullRequest
0 голосов
/ 06 апреля 2020

У меня есть триггер SQL / PSM, который я должен применить к моей Oracle базе данных, но он не будет работать, и я действительно не понимаю, почему ...

Вот мой триггер для MySQL:

CREATE TRIGGER "trigger_ACTIVITE_COMPL"
BEFORE INSERT ON "ACTIVITE_COMPL"
FOR EACH ROW
BEGIN
    SELECT "auto_ACTIVITE_COMPL".nextval INTO :NEW."AC_NUM" 
    FROM dual;
END;

CREATE TRIGGER "trigger_RAPPORT_VISITE"
BEFORE INSERT ON "RAPPORT_VISITE" 
FOR EACH ROW
BEGIN
    SELECT "auto_RAPPORT_VISITE".nextval INTO :NEW."RAP_NUM" 
    FROM dual;
END;

Вот мой триггер для Oracle:

CREATE OR REPLACE TRIGGER "trigger_ACTIVITE_COMPL" 
BEFORE INSERT ON "ACTIVITE_COMPL" 
FOR EACH ROW
BEGIN
    SELECT "auto_ACTIVITE_COMPL".nextval 
    INTO :NEW."AC_NUM" 
    FROM dual;
END;

CREATE OR REPLACE TRIGGER "trigger_RAPPORT_VISITE" 
BEFORE INSERT ON "RAPPORT_VISITE" 
FOR EACH ROW
BEGIN
    SELECT "auto_RAPPORT_VISITE".nextval 
    INTO :NEW."RAP_NUM" 
    FROM dual;
END;

Когда я выполняю этот оператор, консоль говорит:

[ Предупреждение, код ошибки 17 110, SQLState 99999] Предупреждение: execution terminée ave c avertissement

[1: 1] Успешно выполнено за 0,318 с. не затронуты строки.

[8: 1] Сбой в 0 с. [Исключение, код ошибки 900, SQLState 42000] ORA-00900: инструкция SQL недействительная

Строка 8, столбец 1

[Предупреждение, код ошибки 17 110, SQLState 99999] Предупреждение: exécution terminée ave c avertissement

[10: 1] Успешно выполнено за 0,037 с. строки не затронуты.

[17: 1] Сбой в 0 с. [Исключение, код ошибки 900, SQLState 42000] ORA-00900: инструкция SQL недействительна

Строка 17, столбец 1

Выполнение завершено через 0,445 с, произошли 2 ошибки.

Итак, из-за того, что я понимаю, что есть синтаксическая ошибка, но я не могу найти, что не так, я просто знаю, что ошибка находится в строках 5 и 13, потому что когда я выполняю SQL SELECT "auto_ACTIVITE_COMPL".nextval FROM dual;, она работает.

Я не думаю, что вам нужна структура базы данных, чтобы обозначить проблему, поскольку это явно синтаксическая ошибка, но я не знаю, что именно.

Пожалуйста, помогите мне, если у вас есть идея, что проблема в том.

Спасибо.

PS: Я не очень хорош в PL / SQL и особенно когда дело доходит до Oracle, поэтому будьте добры и извините, если я звучу невежественно (это потому, что я Имао).

1 Ответ

0 голосов
/ 06 апреля 2020

Нет необходимости использовать оператор выбора для того, что вы делаете. Попробуйте это:

 :NEW."AC_NUM" := "auto_ACTIVITE_COMPL".nextval;

Кроме того, что @EdStevens сказал выше: лучший способ - никогда не заключать имена объектов в двойные кавычки!

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