You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

创建PL/SQL存储过程HK.PURGE_LAN_DOTS时遇PLS-00103错误求助

解决PL/SQL存储过程的PLS-00103错误

咱们来一步步拆解你遇到的问题:

错误根源分析

你收到的PLS-00103错误本质是语法解析失败,主要有两个核心问题:

  1. 多余的递归调用:你在存储过程逻辑块末尾写了HK.PURGE_LAN_DOTS;——这是试图递归调用当前正在定义的存储过程,不仅会引发无限循环(你没有设置递归终止条件),而且完全多余:你的循环逻辑已经能完成批量删除的工作,不需要再调用自身。
  2. 语法不完整:存储过程的结尾END缺少分号,PL/SQL要求所有块的结束必须以END;(带分号)收尾,否则解析器会报错。

修正后的完整代码

create or replace procedure HK.PURGE_LAN_DOTS AS 
    batchsize number := 15000; 
    deleteline timestamp := current_timestamp - interval '365' day; -- 用interval语法更规范
    counter number := 0; 
BEGIN 
    loop 
        DELETE FROM LAN.DOTS WHERE rownum <= batchsize AND TIMESTAMP < deleteline; 
        COMMIT; 
        counter := counter + SQL%rowcount; 
        exit when SQL%rowcount < batchsize; -- 当删除行数小于批量值时退出,或改为exit when SQL%rowcount = 0;更直观
    end loop; 
    -- 移除了多余的递归调用语句
END; -- 添加了必须的分号

额外优化提示

  • 计算过期时间时,用current_timestamp - interval '365' day比直接减数字更符合PL/SQL时间处理规范,能避免隐式类型转换的潜在问题。
  • 循环退出条件可以改成exit when SQL%rowcount = 0;,当没有任何行被删除时直接终止循环,逻辑更直白,和原条件效果一致但可读性更强。

内容的提问来源于stack exchange,提问作者Viimal

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.13 08:54:32