Триггер для предотвращения обновления заказа, если количество превышает количество в наличии - PullRequest
0 голосов
/ 26 сентября 2018

Необходимо создать триггер в Oracle, который предотвратит вход Order в таблицу ItemsOrder, если количество больше, чем имеется в наличии в таблице Items Количество в наличии.

Это то, что у меня естьна данный момент:

create or replace
TRIGGER check_qty
AFTER UPDATE on OrderItems
FOR EACH ROW
BEGIN
  IF(SELECT
      OrderItems.quantity, Items.quantityOnHand FROM Items
      INNER JOIN OrderItems On Items.itemID = OrderItems.itemID
      WHERE Items.quantityOnHand < OrderItems.quantity);
      raise_application_error(-20999,'The quantity amount is greater than the unite available');
  ELSE
    dbms_output.put_line('Success');
  END IF;
END

Получение следующей ошибки:

Ошибка (2,6): PLS-00103: Обнаружен символ «ВЫБОР» при ожидании одного из следующих действий: (- +case mod new не null продолжить avg счетчик текущий существует max min предыдущий sql stddev сумма дисперсии выполнить forall время слияния временная отметка интервал дата конвейер

ошибка (4,13): PLS-00103: обнаружен символ «JOIN» при ожидании одного изследующее:,; для группы, имеющей пересечение минус порядок, начало объединения, где соединение

1 Ответ

0 голосов
/ 26 сентября 2018

Я бы подумал примерно так:

create or replace trigger check_qty before update on OrderItems
for each row as
    v_quantity number;
BEGIN
    select i.quantityOnHand into v_quantity
    from items i
    where i.itemId = :new.itemId;

    if (v_quantity < :new.quantity) then
      raise_application_error(-20999, 'The quantity amount is greater than the unite available');
    end if;
end;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...