Я получаю две ошибки для своего триггера и не смог выяснить, где проблема, любая помощь очень ценится :) Триггер должен срабатывать при обновлении столбца ListPrice. Триггер не должен допускать, чтобы новая прейскурантная цена была меньше StandardCost + 20%. Этот триггер должен разрешать любое повышение цены. Он должен корректно отбрасывать изменения, если цена слишком низкая, или разрешать обновление, если цена не слишком низкая.
Первое создание этой таблицы:
CREATE TABLE Product (
ProductID NUMBER NOT NULL PRIMARY KEY,
ListPrice NUMBER NOT NULL,
StandardCost NUMBER NOT NULL,
ProductDesc varchar2(20) NOT NULL
);
Затем вставьте эти данные в таблицу:
INSERT INTO product VALUES(1, 20,10,'A');
INSERT INTO product VALUES(2, 21,12,'B');
INSERT INTO product VALUES(3, 22,14,'C');
INSERT INTO product VALUES(4, 23,16,'D');
INSERT INTO product VALUES(5, 40,19,'E');
INSERT INTO product VALUES(6, 22,10,'F');
INSERT INTO product VALUES(7, 25,21,'G');
INSERT INTO product VALUES(8, 29,22,'H');
INSERT INTO product VALUES(9, 25,23,'I');
INSERT INTO product VALUES(10, 30,25,'J');
Вот код для триггера, где я получаю ошибку:
CREATE OR REPLACE TRIGGER Product_Price_Check
BEFORE UPDATE OF listprice ON product
FOR EACH ROW
DECLARE
sCost NUMBER(10,5);
BEGIN
sCost := (:old.standardcost + (:old.standardcost*0.2));
IF((:new.listprice) > (:old.listprice))
THEN
SET :old.listprice := :new.listprice;
END IF;
IF (:new.listprice < (sCost))
THEN
RAISE_APPLICATION_ERROR(-20101,'cannot update as price is less');
END IF;
END;
/
Это коды ошибок:
Ошибка (6,1): PL / SQL: SQL Оператор игнорируется
Ошибка (6,5): PL / SQL: bORA-00922: отсутствует или недействителен