从PL-SQL函数返回2个值

shi*_*rel 4 oracle plsql

如何从PL-SQL函数返回2个值?

Ton*_*ews 13

我不主张为第二个值创建一个带OUT参数的函数,因为我喜欢将函数看作一个纯概念:函数对一个或多个输入执行操作以产生一个输出.它不应改变任何论点或任何其他"副作用".

因此,如果您需要两个输出,请编写一个过程:

procedure get_sqrt_and_half
   ( p_input number
   , p_sqrt OUT number
   , p_half OUT number
   )
is
begin
   p_sqrt := sqrt(p_input);
   p_half := p_input/2;
end;
Run Code Online (Sandbox Code Playgroud)

  • 我同意托尼的观点.任何具有多个输出或使用IN OUT参数的东西都应该是一个过程.通过保持函数清洁(没有外部副作用),将函数调用链接在一起变得更加容易,当存在输入/输出参数时,您无法轻松完成.请记住,函数的输出可以是复杂类型 - %ROWTYPE,用户定义的记录,对象类型,集合或引用游标 - 有很多方法可以返回复杂数据. (2认同)

Gar*_*ers 6

函数只能返回单个SQL类型,但可以是具有多个值的用户定义类型.在我建议将其作为解决方案之前,我需要了解更多有关实际最终要求的信息,但这是可能的.

create or replace type a_b is object (a number, b number);
/

create or replace function ret_a_b return a_b is
begin
  return a_b(1,2);
end;
/

select ret_a_b from dual;

select d.rab.a, d.rab.b from (select ret_a_b rab from dual) d;
Run Code Online (Sandbox Code Playgroud)


Eri*_*ler 5

您可以直接返回一个值,也可以将另一个值作为 OUT 参数返回。或者您返回包含这两个值的记录。在大多数情况下,第一个选项更容易实现。

  • 在函数签名中包含 OUT 参数通常被认为是不好的做法。 (7认同)