编写引发异常的SQL触发器

时间:2016-12-08 17:41:10

标签: sql oracle

如果项目的价格设置为超过最便宜项目价值四倍的值,我必须编写一个引发错误的SQL触发器。 表的名称是itemType,价格列的名称是价格。 这就是我的尝试,但我似乎无法让它发挥作用。

CREATE OR REPLACE TRIGGER harekrishna
BEFORE INSERT ON itemType 
REFERENCING NEW AS newrow
FOR EACH ROW
DECLARE
hPrice NUMBER;
BEGIN
SELECT price INTO hPrice 
  FROM itemType
  WHERE price = :newrow.price; 
IF hPrice > 4 * MIN(price)
  raise_application_error(-20000, (‘Price of item’ |:newrow.price |‘greater than 4 times the least expensive item’); 
END IF;

1 个答案:

答案 0 :(得分:1)

在最后一行中,您的引号字符错误,缺少THEN和遗失END。尝试一下,如果你有更多的错误,请告诉我。

CREATE OR REPLACE TRIGGER harekrishna
    BEFORE INSERT ON itemType 
    REFERENCING NEW AS newrow
    FOR EACH ROW
    DECLARE
    hPrice NUMBER;
    BEGIN
    SELECT min(price) INTO hPrice 
      FROM itemType; 
    IF :newrow.price > 4 * hPrice  THEN
      raise_application_error(-20000, 'Price of item' ||:newrow.price ||'greater than 4 times the least expensive item'); 
    END IF;
    END;

此选择的逻辑也毫无意义,因此我将其更改为获得最低价格,如果只是使用:newrow