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

PL/SQL存储过程编译报PLS-00103错误,请求排查问题原因

PL/SQL存储过程编译错误及问题分析
  • 语法错误1:不可见特殊字符
    错误提示中的¿是存储过程最后一行end;末尾的不可见特殊字符,通常是复制粘贴时带入的非ASCII字符,PL/SQL编译器无法识别该字符,导致编译失败。

  • 语法错误2:字符串拼接冗余连接符
    第17行dbms_output.put_line(departments||' '||groups||' '||disciplines||' '||schrow.teacher||);末尾多了一个||,没有后续拼接内容,违反PL/SQL语法规则。

  • 语法错误3:游标定义未闭合
    游标cur的定义语句结束后未添加分号,PL/SQL要求游标定义必须以;闭合,否则编译器无法识别游标定义的结束位置。

  • 逻辑冗余与参数未生效

    • 存储过程接收的grad参数传递给了游标cur,但游标对应的查询语句未使用该参数做过滤条件,导致参数形同虚设,无法实现按grad筛选数据的预期功能。
    • 额外定义的departments、groups、disciplines变量完全冗余,直接使用schrow游标行的对应字段即可,无需额外赋值。

修正后的存储过程代码

create or replace procedure shedule(grad IN varchar2) as
    cursor cur(p_grad varchar2) is 
        select s.departments dep, s.groups gr, dis.disc_name diname, t.teach_fio teacher, s.type, s.exam_date,s.exam_time, s.kabinet
        from sessions10 s, disciplines10 dis, teachers10 t
        where dis.disc_id = s.disc_id 
          and t.teach_id = s.teach_id
          and s.grad = p_grad -- 假设sessions10表存在grad字段,添加参数过滤逻辑
        order by s.groups; -- 补上游标定义的闭合分号
begin 
    DBMS_OUTPUT.enable;
    for schrow in cur(grad) LOOP
        -- 直接使用游标行字段输出,移除冗余变量
        dbms_output.put_line(schrow.dep||' '||schrow.gr||' '||schrow.diname||' '||schrow.teacher);
    end LOOP;
end;
/

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 07:12:52