如何从 returns 多个 OUT 值的过程中仅访问一个 OUT 值?
How to access just one OUT value from a Procedure that returns multiple OUT values?
我有一个 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);
这显然是简化了,但返回的一些值实际上是自定义类型和自定义 table/record 类型,因此可能会很大。
我不想创建变量来存储我此时不需要处理的所有这些数据 - 我只对其中一个返回值感兴趣。
如何调用过程并只获取我感兴趣的一个值?
你不能。查看完整 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.
为此,您必须为每个参数组合定义一个 wrapper 过程。
例如,要仅获取您必须定义的最后一个参数:
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;
/
每个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;
/
我有一个 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);
这显然是简化了,但返回的一些值实际上是自定义类型和自定义 table/record 类型,因此可能会很大。
我不想创建变量来存储我此时不需要处理的所有这些数据 - 我只对其中一个返回值感兴趣。
如何调用过程并只获取我感兴趣的一个值?
你不能。查看完整 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.
为此,您必须为每个参数组合定义一个 wrapper 过程。
例如,要仅获取您必须定义的最后一个参数:
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;
/
每个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;
/