Plsql 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

如果价格上涨超过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 

错误(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_应用程序_错误过程来引发异常。我建议你在文档中找到它并仔细阅读。分享和享受。