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
相关产品推荐
相关产品推荐

