Plsql PLS-00103触发器错误
如果价格上涨超过10%,这个触发器应该抛出一个错误。由于某种原因,我收到PLS-00103错误Plsql PLS-00103触发器错误,plsql,Plsql,如果价格上涨超过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; EXCEPTIO
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
错误(7,78):PLS-00103:在预期以下情况时遇到“)”符号:&=-+>at in是mod剩余物不是rem或!=或者~=>=RAISE必须与异常一起使用-这里您将它与VARCHAR2参数一起使用,这是一个问题。另一个我可以看到的是,在异常块中有一个字符串(“价格上涨大于10%,更新已取消”),其中需要某种函数调用。我建议将您的触发器改写为:
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;
分享和享受。啊,我遇到了一些旧教程,它们将例外声明为varchar2。非常感谢,就这样!这些教程可能使用了RAISE_应用程序_错误过程来引发异常。我建议你在文档中找到它并仔细阅读。分享和享受。