如果价格上涨超过10%,此触发器将抛出错误。由于某种原因,我收到了PLS-00103错误。
CREATE OR REPLACE TRIGGER product_price_updt
BEFORE UPDATE ON PRODUCT
FOR EACH ROW
DECLARE
price_error VARCHAR2(100);
BEGIN
IF (:new.price > :old.price * 1.1) THEN raise price_error;
END IF;
EXCEPTION
when price_error then ('Price increase is greater than 10%, update cancelled');
END;这是我编译它时看到的。
Error(7,78): PLS-00103: Encountered the symbol ")" when expecting one of the following: * & = - + < / > at in is mod remainder not rem <an exponent (**)> <> or != or ~= >= <= <> and or like like2 like4 likec as between || multiset member submultiset 也许我的语法是错误的,这个错误是误导性的。我找不到问题所在。
发布于 2013-04-02 03:21:12
RAISE必须与异常一起使用-在这里,您将其与VARCHAR2参数一起使用,这是一个问题。另一个我能看到的是,在你的异常代码块中,你有一个字符串('Price increase is increated10%,update call‘),其中你需要一些函数调用。我建议将触发器重写为:
CREATE OR REPLACE TRIGGER product_price_updt
BEFORE UPDATE ON PRODUCT
FOR EACH ROW
DECLARE
price_error EXCEPTION;
BEGIN
IF (:new.price > :old.price * 1.1) THEN
raise price_error;
END IF;
EXCEPTION
when price_error then
DBMS_OUTPUT.PUT_LINE('Price increase is greater than 10%, update cancelled');
END product_price_updt;分享和享受。
https://stackoverflow.com/questions/15750052
复制相似问题