PL/sql 函数返回多行错误
Posted
技术标签:
【中文标题】PL/sql 函数返回多行错误【英文标题】:PL/sql function return an error of many rows 【发布时间】:2019-07-03 05:06:25 【问题描述】:此函数仅返回 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
;
按预期工作,功能有什么问题?
【问题讨论】:
因为在函数中一次只能返回一个(out)参数。在您的情况下,有两个连接。要单独返回它们,您需要一个过程。 @BarbarosÖzhan: 或流水线函数 【参考方案1】:查询返回两(或更多)行;它们不适合标量 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_
。
否则,重写函数,使其返回其他内容(自定义类型、表格等)。
【讨论】:
它必须从 u.UTI_NAME 返回值与 u.UTI_L_NAME 连接,所以我可以说,它需要返回两个合并的值 这不是问题。我解释了什么是;查询返回多个行。 好的,我需要从函数中删除什么,所以它会返回 1 行? 我已经告诉过你了。添加 WHERE 子句。你不看人家说什么吗?以上是关于PL/sql 函数返回多行错误的主要内容,如果未能解决你的问题,请参考以下文章