过程作为PL / SQL中的参数

时间:2019-06-18 12:19:09

标签: oracle stored-procedures plsql

我想执行一个将另一个过程作为参数的过程,该过程具有其他一些参数或参数。例如

ProcA(Proc_B(Name Varchar2, ID Varchar2))

这可能吗?如果是这样,请给我建议可能的解决方案。

1 个答案:

答案 0 :(得分:2)

这不可能。

过程不会直接返回值。这与返回值的函数不同。

所以您可以这样做:

ProcedureA( FunctionB( name, id ) )

(注意:这不是将函数作为参数传递,而是将函数的结果作为参数传递。)

赞:

DECLARE
  FUNCTION FunctionB(
    name   IN  VARCHAR2,
    id     IN  NUMBER
  ) RETURN VARCHAR2
  IS
  BEGIN
    RETURN name || id;
  END;

  PROCEDURE ProcedureA(
    value IN VARCHAR2
  )
  IS
  BEGIN
    DBMS_OUTPUT.PUT_LINE( value );
  END;
BEGIN
  ProcedureA(
    FunctionB(
      name   => 'A',
      id     => 1
    )
  );
END;
/

一种替代方法是使用ProcedureA的输出参数和一个中间变量:

DECLARE
  temp VARCHAR2(50);

  PROCEDURE ProcedureB(
    name   IN  VARCHAR2,
    id     IN  NUMBER,
    result OUT VARCHAR2
  )
  IS
  BEGIN
    result := name || id;
  END;

  PROCEDURE ProcedureA(
    value IN VARCHAR2
  )
  IS
  BEGIN
    DBMS_OUTPUT.PUT_LINE( value );
  END;
BEGIN
  ProcedureB(
    name   => :name,
    id     => :id,
    result => temp
  );
  ProcedureA( temp );
END;
/

但是您不能在调用另一个程序的调用中嵌套一个程序。