繁体   English   中英

在pl / sql中插入触发器

[英]insert trigger in pl/sql

我在pl / sql中找不到以下问题的正确结构:在“产品表”上需要一个触发器,该触发器将在插入新产品之前检查价格,产品价格不得超过4000美元。

CREATE or REPLACE TRIGGER pro 
BEFORE UPDATE OF price 
ON products
FOR EACH ROW 
declare 
pr products.price%type;
BEGIN 
if pr < 4000 then 
INSERT INTO products VALUES (:old.product_ID,:old.price);
end if; 
END;

请帮忙

使用检查约束代替触发器:

create table products (price number);

ALTER TABLE PRODUCTS ADD CONSTRAINT check_price CHECK (price < 4000);

测试:

insert into products values (5000)  => ERROR

编辑:如果您坚持触发版本:

CREATE or REPLACE TRIGGER pro BEFORE insert or UPDATE OF price ON products 
FOR EACH ROW 
BEGIN 
if :new.price > 4000 then 
  raise_application_error(-20101, 'Price exceeds 4000.');
end if; 
END;

您为此而烦恼触发器而不是检查约束的唯一原因是控制错误消息。 请记住,触发器假定操作正在进行,因此要停止操作,您的工具将引发异常。

CREATE OR REPLACE TRIGGER pro 
BEFORE INSERT OR UPDATE
ON products
FOR EACH ROW 
BEGIN 
if :new.price > 4000 then 
     RAISE_APPLICATION_ERROR(-20001,'Price exceeds maximum permitted value') ;
end if; 
END;

如果您不喜欢引发错误并仅保留我认为的旧值,请使用以下代码:

CREATE or REPLACE TRIGGER pro 
      BEFORE UPDATE OF price 
      ON products
      FOR EACH ROW 
declare 
   pr products.price%type;
BEGIN 
  if :new.price > 4000 then 
     :new.price := :old.price;
     :new.product_ID := :old.product_ID;
  end if; 
END;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM