我想执行一个将另一个过程作为参数的过程,该过程具有其他一些参数或参数。例如
ProcA(Proc_B(Name Varchar2, ID Varchar2))
这可能吗?如果是这样,请给我建议可能的解决方案。
答案 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;
/
但是您不能在调用另一个程序的调用中嵌套一个程序。