Хранимая процедура Oracle для возврата набора строк в качестве параметра out - PullRequest
0 голосов
/ 18 февраля 2019

Мне нужна некоторая помощь относительно моей процедуры, когда мне нужно вернуть структуру, похожую на таблицу, из хранимой процедуры Oracle.

Мои требования следующие:

  1. В моем проекте будет одна основная процедура, которая будет вызываться из внешней системы
  2. Процедура вызовет несколько функций изнутри.который вернет значение.Например, Функция_1 возвращает 10 & Функция_2 возвращает 20
  3. Теперь после получения этого значения мне нужно вернуть данные в вызывающий метод процедуры в виде структуры KEY VALUE,Как и

    KEY        | VALUE
    -----------+-----------
    Function_1 |  10
    Function_2 |  20
    

Мое ограничение: я не могу создать временную таблицу для достижения этой функциональности.Итак, я видел один вариант с ref курсором, но как заполнить курсор этим значением.

Заранее спасибо.

1 Ответ

0 голосов
/ 18 февраля 2019

Вы можете использовать конвейерную функцию (вместо процедуры):

Установка 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;
/

дБ <> скрипка здесь

...