Вы можете использовать конвейерную функцию (вместо процедуры):
Установка Oracle :
CREATE TYPE KeyValuePair AS Object(
key VARCHAR2(20),
value NUMBER(8)
);
/
CREATE TYPE KeyValuePairList AS TABLE OF KeyValuePair;
/
CREATE FUNCTION function1 RETURN NUMBER AS BEGIN RETURN 10; END;
/
CREATE FUNCTION function2 RETURN NUMBER AS BEGIN RETURN 20; END;
/
CREATE FUNCTION mainFunc RETURN KeyValuePairList PIPELINED
AS
BEGIN
PIPE ROW ( KeyValuePair( 'FUNCTION1', function1() ) );
PIPE ROW ( KeyValuePair( 'FUNCTION2', function2() ) );
END;
/
Запрос :
SELECT *
FROM TABLE( mainFunc() );
Выход :
KEY | VALUE
:-------- | ----:
FUNCTION1 | 10
FUNCTION2 | 20
дБ <> скрипка здесь
иликак процедура:
CREATE PROCEDURE mainFunc (
o_cursor OUT SYS_REFCURSOR
)
AS
BEGIN
OPEN o_cursor FOR
SELECT 'FUNCTION1' AS key, function1() AS value FROM DUAL UNION ALL
SELECT 'FUNCTION2' AS key, function2() AS value FROM DUAL;
END;
/
дБ <> скрипка здесь