如何从返回多个OUT值的过程中仅访问一个OUT值?

时间:2019-03-06 17:36:17

标签: oracle plsql plsql-package

我有一个PL / SQL过程,它具有一个IN / OUT值和多个OUT值。

该程序工作正常,我能够读取所有OUT值。

我现在想做的是从另一个过程中调用过程,但是只能访问返回的OUT值之一。

例如:

  PROCEDURE MyProc
    (
    --INPUT/OUTPUT PARAMETERS
    io_myVar IN OUT NUMBER,
    o_TestNum1 OUT NUMBER,
    o_TestNum2 OUT NUMBER,
    o_Test1 OUT VARCHAR2
    );

现在我要按以下方式调用此过程:

MyProc(v_Input, , , v_TestOutput);

这显然被简化了,但实际上返回的某些值是自定义类型和自定义表/记录类型,因此被责骂得很大。

我不想创建变量来存储所有我现在不需要处理的数据-我只对返回的值之一感兴趣。

如何调用过程,并且只获得我感兴趣的一个值?

3 个答案:

答案 0 :(得分:1)

要实现此目的,必须为每个参数组合定义一个包装器过程。

例如,仅获取必须定义的最后一个参数:

create PROCEDURE MyProc2
    (
    io_myVar IN OUT NUMBER,
    o_Test1 OUT VARCHAR2
    ) as
v2 NUMBER; /* will be ignored */
v3 NUMBER;    
begin
  MyProc(io_myVar,v2,v3,o_Test1);
end;
/

答案 1 :(得分:1)

必须设置每个OUT参数,但是您可以多次使用同一个哑变量来使用您不关心的输出。

例如,以下代码将我们关心的OUT变量分配给V_IMPORTANT。其他两个变量都分配给V_DUMMY。这不是一个完美的解决方案,但它至少减少了一些额外的代码。

declare
    v_important number;
    v_dummy     number;

    --Procedure with lots of OUT variables.
    procedure myProc(a out number, b out number, c out number) is
    begin
        a := 1; b := 2; c := 3;
    end;
begin
    myProc(v_important, v_dummy, v_dummy);
end;
/

答案 2 :(得分:0)

您不能。查看完整的Tom Kyte's answer here。引用:

Parameter Mode  Is Default?          Role

IN              Default mode         Passes a value to the subprogram.

OUT             Must be specified.   Returns a value to the invoker.

IN OUT          Must be specified.   Passes an initial value to the subprogram and returns an updated value to the invoker.