使用函数oracle PL / SQL的输出参数之一

时间:2011-12-13 17:05:42

标签: sql oracle plsql

我有一个带有以下签名的ORACLE函数。

Function function1(parameter1 in number,
              parameter2 in number,
              parameter3 in number,
              parameter4 out number,
              parameter5 out varchar(20),
              parameter6 out varchar(20))
             RETURN number is

我想在像这样的SQL中使用这个函数,

Select parameter5 
from table1 ti 
where function1(t1.parameter1,t1.parameter2,t1.parameter3)

如何在Select语句中访问输出参数5?由于我想批量执行上面的选择操作,我不习惯使用变量并循环遍历结果集。

我不想使用数组,因为我必须使用上面的SQL Query批量执行一些操作。

提前致谢!

干杯, Dwarak

3 个答案:

答案 0 :(得分:1)

你不能直接,但你可以在它周围放一个包装函数,如:

function function1_wrap(parameter1 in number,
    parameter2 in number,
    parameter3 in number)
    return varchar2 is
declare
    rc number;
    parameter4 number;
    parameter5 out varchar(20);
    parameter6 out varchar(20);
begin
    rc := function1(parameter1, parameter2, parameter3, parameter4, parameter5);
    return parameter5;
end;

虽然这可能不适合批量操作;你最好尝试复制函数如何获取值并将其组合到你的选择中,而不是多次调用函数。您可以删除找到参数4和6的值的部分,以便开始。

答案 1 :(得分:1)

我假设你需要参数5和返回的数字,所以如果你创建一个类型并重新调整它可能会更好。

类似的东西:

create type res_type as object
(
rc number,
parameter5 varchar2(20)
);

Function function1(parameter1 in number,
              parameter2 in number,
              parameter3 in number,
              parameter4 out number,
              parameter5 out varchar(20),
              parameter6 out varchar(20))
             RETURN res_type is

更新:

然后在您的选择中,您可以执行以下操作:

select function1(t1.parameter1,t1.parameter2,t1.parameter3).parameter5 
from table1 ti 
where function1(t1.parameter1,t1.parameter2,t1.parameter3).rc = ....

答案 2 :(得分:-1)

你可以使用下面的子查询,

select * from(select t1.parameter1,t1.parameter2,t1.parameter3 function1(t1.parameter1,t1.parameter2,t1.parameter3)func_result from table1 t1)其中func_result = 1