问题
今天在进行Oracle视图优化时,创建了一个函数,其函数SQL描述如下:
create or replace function fun_get_usage_name (usage_id VARCHAR2) return varchar2 is
usageName VARCHAR2(50);
BEGIN
select a.usage_name
into usageName
from bd_med_usage a
where a.usage_id = usage_id;
RETURN usageName;
end fun_get_usage_name;
调用该函数时,出现了如下的错误:
ORA-01422:实际返回的行数超出了请求的行数
ORA-06512:在"FUN_GET_USAGE_NAME",line6
需要注意的时,bd_med_usage
的usage_id
是主键。
经过一番调试后,发现这个错误出现的原因是因为函数参数的名称与表字段的名称相同,导致参数无法赋值,Where语句无效,进而进行了全表查询。
解决方案
修改函数形参的名称,不要与表字段名称相同。