此函数仅返回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
;
它按预期工作,功能有什么问题?
答案 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_
。
否则,重写函数,使其返回其他内容(自定义类型,表格等)。