我的触发器有两个错误,并且还无法确定问题出在哪里,任何帮助都是非常感谢的:)触发器应该会触发ListPrice列的更新。触发器不应允许新的列表价格低于StandardCost + 20%。此触发器应该允许任何价格,如果价格太低,increase.IT应该正确地放弃更改;如果价格不太低,则允许更新。
首先创建此表:
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:丢失或无效选项
发布于 2020-02-26 05:51:11
我理解在代码中不需要使用SET
关键字。除此之外,我们不能将价值分配给旧的。我在下面的代码中对此部分进行了评论。此外,您可以完全注释第一个if
块,因为如果您的条件不满足,只需要引发错误,否则它将允许更新。
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;
/
https://stackoverflow.com/questions/60407293
复制相似问题