什么是我的SQLtrigger正确的原型?

问题描述 投票:0回答:1

我是学习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.
sql oracle plsql database-trigger
1个回答
0
投票

您需要做的第一件事是了解触发器是什么。它是一段代码,运行作为[一部分]]语句,从而引发该语句。因此,您无法

© www.soinside.com 2019 - 2024. All rights reserved.