首页 > 解决方案 > 调用oracle过程而不放置所有参数

问题描述

我正在使用看起来像这样的 oracle 程序

CREATE PROCEDURE spName (
    pCurosr OUT refcursor,
    par2 IN VARCHAR := NULL,
        ....
        ....
    par98 IN VARCHAR := NULL,
    error OUT NUMBER
) AS
BEGIN
    ....
    ....
END

问题是,一些程序采用了太多的参数,这些参数已经设置为 NULL 作为默认值。我想知道的是,是否可以像这样执行程序?

exec spName(:refcur, :par5 = 'value', :error);

仅将我想要的供应参数和所有其他参数设置为默认值。

标签: oracleplsql

解决方案


例如,使用这样的过程

create or replace procedure testProc ( pOut OUT number,
                                       pIn1 IN  number := null,
                                       pIn2 IN  number := null,
                                       pIn3 IN  number := null,
                                       pIn4 IN  number := null
                                     ) is ...

您可以使用命名参数赋值:

declare
    vOut number;
begin
    testProc (pOut => vOut,
              pIn3 => 3
             );             
end;

未命名的参数将采用默认值。

命名参数的顺序在这里并不重要,所以你可以这样做,例如,

testProc (pIn1 => 1,
          pOut => vOut,
          pIn3 => 3
         );             

推荐阅读