Это невозможно.
Процедура напрямую не возвращает значение. Это отличается от функции, которая возвращает значение.
Чтобы вы могли сделать:
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;
/
Но вы не можете вложить одну процедуру в вызов, вызывающий другую.