не может изменить НОВЫЕ значения для этого типа триггера - PullRequest
1 голос
/ 29 сентября 2019

Я пытаюсь создать триггер, который давал бы скидку клиенту с идентификатором 24535, когда в таблицу вставлялась новая строка, и я получал ошибку в заголовке.

CREATE OR REPLACE TRIGGER TOP_DISCOUNT 
AFTER INSERT ON PURCHASE
FOR EACH ROW
BEGIN 
    IF :old.ClientNo = 24535 THEN
    :new.Amount := :old.Amount * 0.85;
    END IF;
END;

thisтак выглядит таблица

CREATE TABLE PURCHASE (
    PURCHASENO  NUMBER(5),
    RECEIPTNO   NUMBER(6),
    SERVICETYPE VARCHAR2(25),
    PAYMENTTYPE VARCHAR2(10),
    GST     VARCHAR2(3),
    AMOUNT      NUMBER(4),
    SERVEDBY    NUMBER(4),
    CLIENTNO    NUMBER(5)
);

Заранее спасибо!

1 Ответ

1 голос
/ 29 сентября 2019
Триггер

After insert не может изменить значение, которое будет вставлено, а также :old не поддерживается в insert trigger.

Ваш триггер должен выглядеть следующим образом:

CREATE OR REPLACE TRIGGER TOP_DISCOUNT 
BEFORE INSERT ON PURCHASE
FOR EACH ROW
BEGIN 
    IF :new.ClientNo = 24535 THEN
        :new.Amount := :new.Amount * 0.85;
    END IF;
END;
/

Ура !!

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