Почему Trigger SET работает только на минус, а не на сумму? - PullRequest
0 голосов
/ 13 октября 2018

Почему, если я выполняю запрос INSERT к таблице parking , он выполняет операцию обновления, а если я выполняю запрос DELETE, то выводится только сообщение "hi" но не добавляет +1?

CREATE OR REPLACE TRIGGER employees

AFTER INSERT OR DELETE ON parking
FOR EACH ROW
BEGIN

IF INSERTING THEN
UPDATE area_p
SET Capacity = Capacity-1
WHERE NAME_AREA = :NEW.N_AREA;

IF DELETING THEN
DBMS_OUTPUT.PUT_LINE('hi');
UPDATE area_p
SET Capacity = Capacity+1
WHERE NAME_AREA = :NEW.N_AREA;
END IF;

END;
/

1 Ответ

0 голосов
/ 13 октября 2018

Вам необходимо использовать :OLD для DELETE:

CREATE OR REPLACE TRIGGER employees
AFTER INSERT OR DELETE ON parking
FOR EACH ROW
BEGIN
  IF INSERTING THEN
    UPDATE area_p
    SET Capacity = Capacity-1
    WHERE NAME_AREA = :NEW.N_AREA;
  END IF;

  IF DELETING THEN
    DBMS_OUTPUT.PUT_LINE('hi');     -- you should avoid print from trigger
    UPDATE area_p
    SET Capacity = Capacity+1
    WHERE NAME_AREA = :OLD.N_AREA;  -- here
  END IF;
END;
/

С О СТАРЫХ и НОВЫХ псевдозаписях :

Для строки, котораятриггер обрабатывает:

  • Для триггера INSERT OLD не содержит значений, а NEW содержит новые значения.

  • Для триггера UPDATEOLD содержит старые значения, а NEW содержит новые значения.

  • Для триггера DELETE OLD содержит старые значения, а NEW не содержит значений.

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