ORA-00936: пропущенное выражение (sql-oracle) - PullRequest
1 голос
/ 14 июня 2019

Я хочу добавить 100 долларов к старым деньгам, но скажите мне ORA-00936: пропущенное выражение

create table sala(
    salary char(4));

insert into sala values(300);


create or replace trigger update_sal
after insert on sala
for each row
when(new.salary in not null)
begin
    update sala set salary=new.salary + 100;
end;


1 Ответ

2 голосов
/ 14 июня 2019

Неверный синтаксис триггера.

Попробуйте:

create or replace trigger update_sal
before insert on sala
for each row
begin
  if :new.salary is not null then
      :new.salary := :new.salary + 100;
  end if;
end;

Ключевые моменты:

  • Невозможно обновить ту же таблицу, что итриггер включен - это вызывает ошибку таблицы мутаций .Способ сделать это - присвоить значение напрямую, как показано выше.
  • Нельзя изменить значение :NEW в триггере after.Вы можете сделать это в триггере before.
  • Псевдозапись начинается с двоеточия, как :NEW

После добавления этого триггера, вот результат:

insert into sala values(700);
select * from sala;

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