作者:lixinleslee | 来源:互联网 | 2023-09-23 18:18
Oracle 存储过程调试:
ORA-06550
PLS-00103:出现符号"END"在需要下列之一时:
:=.(@;
符号":"被替换为"END"后继续。
CREATE OR REPLACE procedure BEFOR_VIP_RESET.CP_UPDATE_DTL_YHJ_SUM
is
cursor cur IS SELECT TRIM(DC.INV_NUM) INV_NUM ,SUM(DC.REDEEMVALUE) SUM_REDEEMVALUES FROM DINV_COUPON DC GROUP BY DC.INV_NUM;
INT_COUNT_DINV_COUPON_BY_INV number;
begin
for RUR1 in cur LOOP
BEGIN
SELECT COUNT(*) INTO INT_COUNT_DINV_COUPON_BY_INV FROM DINV_DTL_YHJ DDY WHERE TRIM(DDY.INV_NUM) =TRIM(RUR1.INV_NUM);
IF (INT_COUNT_DINV_COUPON_BY_INV !=0) THEN
UPDATE DINV_DTL_YHJ D_D_Y SET D_D_Y.REDEEMWAY = (RUR1.SUM_REDEEMVALUES/INT_COUNT_DINV_COUPON_BY_INV);
ORA-06550
PLS-00103:出现符号"END"在需要下列之一时:
:=.(@;
符号":"被替换为"END"后继续。
END IF ;
END;
END LOOP;
end CP_UPDATE_DTL_YHJ_SUM;
debug时发现INT_COUNT_DINV_COUPON_BY_INV、RUR1.INV_NUM 均有正常值
14 个解决方案
直接复制你的过程结构然后替换了一下我的表名,完全木有问题额!
问题解决了:
我的那个UPDATE 语句没有where条件,导致程序长时间执行,不知死活。
当然把上一个逗号去掉。
WHERE TRIM(DDY.INV_NUM) = TRIM(RUR1.INV_NUM);
顺便说一下用:
调试存储过程还是要在SQLGate或PLSQL里的PLSQL模块里面,其他模块误导,以为编译没问题,其实根本没编译成功。
还是要多试试。