как получить значения табличного типа plsql в refcursor - PullRequest
0 голосов
/ 06 октября 2018

Я пытаюсь создать процедуру, в которой вызывается другая процедура, и она возвращает тип таблицы pl / sql.Как собрать значения таблицы plsql в ref курсор и вернуть как refcursor типа OUT.Пожалуйста, помогите.

Спасибо!

У меня есть этот кусок кода: p_rec - это тип таблицы

DECLARE

p_rec PORTAL_LOAD_PKG.header_tab@test_link;
p_status VARCHAR2(200);

BEGIN

DASHBOARD_PRC@test_link('XYZ LIMITED', p_rec, p_status);

END;

Выше код работает нормально, но я должен создать процедурукоторый возвращает значения p_rec в refcursor.

1 Ответ

0 голосов
/ 08 октября 2018

Окончательно решено.

Сначала мы должны создать объект и тип таблицы локально.Определение объекта должно совпадать с типом вашей записи, который объявлен в удаленной БД.

CREATE OR REPLACE TYPE dashboard_obj AS OBJECT (
    i_num         VARCHAR2(500),
    desc          VARCHAR2(1000),
    od_num        VARCHAR2(200),
    i_amount      NUMBER,
    amount_paid   NUMBER,
    status        VARCHAR2(200),
    terms_date    DATE,
    i_id          NUMBER,
    v_id          NUMBER
);

После этого создайте тип таблицы этого объекта.

CREATE OR REPLACE TYPE tab1 IS
    TABLE OF dashboard_obj;

Теперь Процедура создания:

    CREATE OR REPLACE PROCEDURE proc_test (
        recordset OUT SYS_REFCURSOR
    ) IS

        p_rec      portal_load_pkg.header_tab@test_link;
        p_status   VARCHAR2(200);
        obj        dashboard_obj;
        v_tab      tab1 := tab1 ();
    BEGIN
        dashboard_prc@test_link ( 'XYZ LIMITED',p_rec,p_status );
        FOR i IN 1.._rec.count LOOP
            v_tab.extend;
            v_tab(v_tab.count) := dashboard_obj(p_rec(i).i_num,
                                                p_rec(i).desc,
                                                p_rec(i).od_num,
                                                p_rec(i).i_amount,
                                                p_rec(i).amount_paid,
                                                p_rec(i).status,
                                                p_rec(i).terms_date,
                                                p_rec(i).i_id,
                                                p_rec(i).v_id
                                               );

        END LOOP;

        OPEN recordset FOR SELECT
                              *
                          FROM
                              TABLE ( v_tab );

    END;

Если есть другое решение, пожалуйста, дайте мне знать.Спасибо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...