PL / sql函数返回许多行错误

时间:2019-07-03 05:06:25

标签: oracle plsql stored-functions

此函数仅返回VAC_NAME(但不返回这些名称的列表)

create or replace function FCT_VAC(NO_VAC in number)
return varchar2
is
V_lNAME varchar2(30);
begin
    select u.UTI_NAME ||' '|| u.UTI_L_NAME into V_lNAME  
    from USER_TAB u
      join DEAL_TAB d on u.USERNAME = d.USERNAME
;

return V_lNAME;
end FCT_VAC_NAME;
/
set serveroutput on;
select FCT_VAC_NAME(3) as Vacantion_Name from dual;

但是如果我简单选择

 select u.UTI_NAME, u.UTI_L_NAME  
 from USER_TAB u 
    join DEAL_TAB d on u.USERNAME = d.USERNAME
;

它按预期工作,功能有什么问题?

1 个答案:

答案 0 :(得分:0)

查询返回两行(或更多行);它们不能放入标量v_lname varchar2(30)变量中。

问题是:您期望得到什么结果?只有一个值?然后确保该查询返回它; WHERE子句可能会有所帮助(尤其是当您传递参数但从不使用它时),例如

select u.UTI_NAME ||' '|| u.UTI_L_NAME 
into V_lNAME  
from USER_TAB u
  join DEAL_TAB d on u.USERNAME = d.USERNAME
where u.no_vac = p_no_vac;                      --> this

请注意,我已经重命名了参数;我不知道其中的任何表是否包含no_vac列,但是-如果包含,则最好为该参数使用其他名称。一种选择是在其前面加上p_

否则,重写函数,使其返回其他内容(自定义类型,表格等)。