PL/SQL函数语法错误及‘PL/SQL: Statement ignored’错误修复求助
错误修复方案
核心错误原因
游标c1查询的是reg表的stuno字段,在FOR循环中,循环变量i是游标记录类型,并非单个字段值,直接用i = num_stu比较会触发类型不匹配错误,进而导致c_c := c_c + 1;语句被忽略。
修复后的代码
方案1:修正游标循环的字段访问
create or replace function number_of_course(num_stu STUDENTS.STUNO%TYPE) return number is c_c number :=0; cursor c1 is SELECT stuno from reg; begin for i in c1 loop -- 访问游标记录中的stuno字段进行比较 if i.stuno = num_stu then c_c := c_c + 1 ; end if; end loop; RETURN c_c; end number_of_course;
方案2:用SQL直接统计(更高效推荐)
无需通过游标循环逐行判断,直接借助SQL聚合函数统计匹配记录数,性能更优:
create or replace function number_of_course(num_stu STUDENTS.STUNO%TYPE) return number is c_c number :=0; begin SELECT COUNT(*) INTO c_c FROM reg WHERE stuno = num_stu; RETURN c_c; end number_of_course;
验证说明
- 方案1通过修正字段访问方式解决了类型不匹配问题,消除了语句被忽略的错误;
- 方案2彻底避免了游标循环,利用Oracle内置聚合函数完成统计,代码更简洁且执行效率更高,更适合这类统计场景。
内容的提问来源于stack exchange,提问作者Dana Almameh
相关产品推荐
相关产品推荐

