Oracle 存储过程调试出错:ORA-06550

handsome1234 2013-12-05 07:57:25
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 均有正常值
...全文
28701 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
CT_LXL 2013-12-06
  • 打赏
  • 举报
回复
引用 12 楼 handsome1234 的回复:
[quote=引用 10 楼 chenjiang89 的回复:] [quote=引用 9 楼 handsome1234 的回复:] 老大,谦虚了,老大是严谨的。值得我辈学习。
end CP_UPDATE_DTL_YHJ_SUM; 改为end;[/quote] 我按照你说的方法,故障依旧。[/quote] 把UPDATE 拿到外面单独执行,将拿出了UPDATE的procedure也单独执行,如果两者都正常,就实在没办法了
handsome1234 2013-12-06
  • 打赏
  • 举报
回复
引用 10 楼 chenjiang89 的回复:
[quote=引用 9 楼 handsome1234 的回复:] 老大,谦虚了,老大是严谨的。值得我辈学习。
end CP_UPDATE_DTL_YHJ_SUM; 改为end;[/quote] 我按照你说的方法,故障依旧。
  • 打赏
  • 举报
回复
直接复制你的过程结构然后替换了一下我的表名,完全木有问题额!
大话EPM 2013-12-06
  • 打赏
  • 举报
回复
引用 9 楼 handsome1234 的回复:
老大,谦虚了,老大是严谨的。值得我辈学习。
end CP_UPDATE_DTL_YHJ_SUM; 改为end;
handsome1234 2013-12-06
  • 打赏
  • 举报
回复
老大,谦虚了,老大是严谨的。值得我辈学习。
handsome1234 2013-12-06
  • 打赏
  • 举报
回复
我单独执行:
        UPDATE DINV_DTL_YHJ D_D_Y
           SET D_D_Y.REDEEMWAY =66;
是没有问题的,执行返回1000多行。
  • 打赏
  • 举报
回复
引用 6 楼 handsome1234 的回复:
老大,是有空格,我是作为别名来用的。
我好菜啊~~
handsome1234 2013-12-06
  • 打赏
  • 举报
回复
老大,是有空格,我是作为别名来用的。
  • 打赏
  • 举报
回复
UPDATE DINV_DTL_YHJ D_D_Y SET D_D_Y.REDEEMWAY 红色跟蓝色之前有空格
handsome1234 2013-12-06
  • 打赏
  • 举报
回复
1、这就是整个存储过程。 2、

UPDATE DINV_DTL_YHJ D_D_Y SET D_D_Y.REDEEMWAY  =  (RUR1.SUM_REDEEMVALUES/INT_COUNT_DINV_COUPON_BY_INV);
这句如果改成: UPDATE DINV_DTL_YHJ D_D_Y SET D_D_Y.REDEEMWAY =66; 仍然报上面的错误。 看来是结构的问题?
handsome1234 2013-12-06
  • 打赏
  • 举报
回复
问题解决了: 我的那个UPDATE 语句没有where条件,导致程序长时间执行,不知死活。 当然把上一个逗号去掉。 WHERE TRIM(DDY.INV_NUM) = TRIM(RUR1.INV_NUM); 顺便说一下用: 调试存储过程还是要在SQLGate或PLSQL里的PLSQL模块里面,其他模块误导,以为编译没问题,其实根本没编译成功。 还是要多试试。
大话EPM 2013-12-05
  • 打赏
  • 举报
回复
引用 楼主 handsome1234 的回复:
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 均有正常值
把你整个过程贴上来看看
CT_LXL 2013-12-05
  • 打赏
  • 举报
回复
引用 1 楼 handsome1234 的回复:
这行到:

UPDATE DINV_DTL_YHJ D_D_Y SET D_D_Y.REDEEMWAY  =  (RUR1.SUM_REDEEMVALUES/INT_COUNT_DINV_COUPON_BY_INV);
这里出错。
语法没找到错,不知道是不是你的数据有问题,D_D_Y.REDEEMWAY 这个字段和要更改的值匹配吗(类型)?
handsome1234 2013-12-05
  • 打赏
  • 举报
回复
这行到:

UPDATE DINV_DTL_YHJ D_D_Y SET D_D_Y.REDEEMWAY  =  (RUR1.SUM_REDEEMVALUES/INT_COUNT_DINV_COUPON_BY_INV);
这里出错。

17,082

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧