首页 > 解决方案 > 作为 PL/SQL 中的参数的过程

问题描述

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

ProcA(Proc_B(Name Varchar2, ID Varchar2))

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

标签: oraclestored-proceduresplsql

解决方案


这是不可能的。

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

所以你可以这样做:

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;
/

另一种方法是使用输出参数 fromProcedureA和中间变量:

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;
/

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


推荐阅读