Не удается скомпилировать мой триггер в Apex Oracle SQL / PL PLS-00103 - PullRequest
0 голосов
/ 13 декабря 2018
create or replace TRIGGER  lening_bri
BEFORE
update on lening
for each row
begin

if :old.terugbetaald = 'N' and :new.terugbetaald = 'Y' then
  :new.datumterugbetaald := sysdate;
end if;

if :old.terugbetaald = 'Y' and :new.terugbetaald = 'N' then
   :new.datumterugbetaald := NULL;
end if;

if :old.terugbetaald = 'N' and :new.terugbetaald = 'Y' then
   :new.datumterugbetaald := sysdate;
end if;

if old.datumterugbetaald := NULL and :new.datumterugbetaald := NOT NULL then
    :new.terugbetaald := 'Y'
end if;

if :old.datumterugbetaald := NOT NULL and :new.datumterugbetaald := NULL then
    :new.terugbetaald := 'N'
end if;

end;

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

PLS-00103: Encountered the symbol "=" when expecting one of the following: . ( * @ % & = - + < / > at in is mod remainder not rem then <an exponent (**)> <> or != or ~= >= <= <> and or like like2 like4 likec between || multiset member submultiset

Для двух последних операторов if необходимо выполнить следующее:

  • Когда я заполняю datumterugbetaald, для terugbetaald должно быть установлено значениеДа.
  • Если мне нужно очистить datumterugbetaald, для Terugbetaald должно быть установлено значение *

1 Ответ

0 голосов
/ 13 декабря 2018

Последние два оператора if используют оператор присваивания := вместо оператора равенства =.В одной из ссылок old отсутствует и двоеточие в начале, и вам не хватает пары точек с запятой в конце оператора.

Но вы не можете сравнить ноль с проверками равенства, есть выделенныеоператоры , которые вы должны использовать вместо этого.

Таким образом, они должны быть:

if :old.datumterugbetaald IS NULL and :new.datumterugbetaald IS NOT NULL then
    :new.terugbetaald := 'Y';
end if;

if :old.datumterugbetaald IS NOT NULL and :new.datumterugbetaald IS NULL then
    :new.terugbetaald := 'N';
end if;

Вам также необходимо рассмотреть, какой столбец должен быть установлен, если ни один if не имеет значения true- если столбец, который вы проверяете, был и остается нулевым, или был и остается и не остается (в том числе, если он меняет значение).

То же самое верно и для ваших первых трех проверок;и ваши первый и третий чеки кажутся одинаковыми.

...