Oracle SQL函数体使用between关键字报错,第6行错误如何解决?
Oracle函数报错的解决方法
触发报错的核心原因并非between关键字本身的语法兼容问题,问题全部出在你编写的select查询语句块(也就是系统提示的第6行):
- 完全写错了FROM子句结构:你把本该写在WHERE条件里的
between minn and maxx逻辑错拆分到FROM后面,生成了from weight minn and maxx item这种完全不符合SQL语法的内容,既不存在名为weight的关联表,也没有正确指定主查询表为item - 丢失了核心过滤逻辑:你定义的两个入参minn、maxx是用来筛选重量区间的,但原SQL里完全没有将这两个参数接入判断逻辑,仅保留了color字段的过滤条件
- 表名逻辑前后矛盾:你在函数入参定义时用了
item.weight%type、item.color%type的锚定类型写法,说明要查询的主表就是item,但写查询逻辑时完全混淆了表名归属
修正后的可运行函数代码
create or replace function fweight (minn in item.weight%type ,maxx in item.weight%type ,colour in item.color%type) return number is total number(5); begin select count(itemno) into total from item where color = colour and weight between minn and maxx; dbms_output.put_line('The item whose weight is between '||minn||' and '||maxx ||' is '); return total; end; /
额外注意事项
- Oracle的
between为闭区间判断,会同时统计重量等于minn、maxx边界值的记录,符合常规重量类统计的业务需求 - 如果修正语法后仍报字段不存在的错误,需要核对item表的实际字段名:Oracle默认以大写形式存储未加双引号的表名、字段名,如果建表时用双引号指定了小写字段名,查询时需要匹配对应大小写规则
内容的提问来源于stack exchange,提问作者Android Architect
相关产品推荐
相关产品推荐

