【发布时间】:2022-01-22 03:59:28
【问题描述】:
我有
PLS-00103:在期待其中一个时遇到符号“END” 以下:(开始 case 声明退出 goto if loop mod null pragma raise return select update while with
我到处搜索,但找不到解决方法
CREATE TABLE UPAYMENT AS SELECT * FROM PAYMENT ;
DROP TRIGGER A;
CREATE OR REPLACE TRIGGER A
after insert ON Upayment
FOR EACH ROW
DECLARE
ERROR_ EXCEPTION ;
h varchar2(20);
NOFOUND EXCEPTION ;
CURSOR Y3 IS
SELECT PAYMENT_DATE FROM UPAYMENT ;
BEGIN
OPEN Y3;
loop fetch Y3 into h;
IF Y3%NOTFOUND THEN RAISE NOTFOUND;
IF (:NEW.PAYMENT_DATE >= '01-JAN-22'and INSERTING)
THEN
:NEW.AMOUNT := :NEW.AMOUNT * 1.5;
ELSE
END LOOP;
END IF;
CLOSE Y3;
END IF;
exception when ERROR_
then DBMS_OUTPUT.PUT_LINE('ERROR');
END;
【问题讨论】:
-
您在内部
IF的ELSE分支中有一个END LOOP。 -
在关系数据库中,游标通常是一个坏主意,它擅长基于集合的操作。尤其是在可能导致严重性能问题的触发器中。你没有解释你想要达到的目标。所以只是一个一般性的建议。
-
命令
DROP TRIGGER A;是多余的,因为CREATE TRIGGER语句的REPLACE选项已经可以做到这一点。
标签: oracle plsql triggers database-cursor