我是学习SQL_trigger的新手,并且我正在尝试使用Oracle Developer SQLcl在这两个表上应用Tiggger:
product
( PRODUCT_NAME, DISCOUNTED CHAR(1) DEFAULT 'N',
PK PRIMARY KEY (PRODUCT_NAME));
peopleOrder
( ORDER_ID, PRODUCT_NAME,
PRIMARY KEY (ORDER_ID, PRODUCT_NAME),
FOREIGN KEY (PRODUCT_NAME) REFERENCES PRODUCT (PRODUCT_NAME));
@我希望我的Triger执行以下操作:当我将行更新或插入到peopleOrder中时,触发器应检查行的product_name在产品表中的折扣列中是否具有值“ N”,如果没有“ N”值,则应显示错误消息。
@我尝试了多种方法并使用了以下触发程序,但是当我插入行时,触发程序似乎不起作用,并且对行没有影响:
CREATE OR REPLACE TRIGGER constraint_1
before UPDATE OR INSERT on peopleOrder
for each row
begin
if not (:new.product_name in
(select product_name from product where discounted = 'N' )) then
RAISE_APPLICATION_ERROR(-20001, 'No discounted product can be ordered
!');
END IF;
INSERT INTO peopleOrder VALUES (:new.ORDER_ID, :new.PRODUCT_NAME);
END;
/
@我的插入命令是:
INSERT INTO peopleOder (ORDER_ID, PRODUCT_NAME) VALUES (251, 'Mutton'); and 'Mutton' has value 'N' in the discounted column in the product table.
您需要做的第一件事是了解触发器是什么。它是一段代码,运行作为[一部分]]语句,从而引发该语句。因此,您无法