Oracle 19 C проблема с базой данных - PullRequest
1 голос
/ 14 февраля 2020

У меня пакет работает нормально в версии 11g.

Но когда я развертываю тот же пакет в версии 19 c, поведение меняется.

PFB описание.

В спецификации пакета есть курсор и создан тип таблицы с курсором% rowtype. Наличие конвейерной функции, которая возвращает тип таблицы.

Использование функции с предложением таблицы

select * from table(function)

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

В 11g функция возвращает заголовки столбцов, такие же, как имена столбцов курсора. Но в 19 c функция возвращает заголовки столбцов, такие как 'Attr_1, Attr_2, et c'.

Мне нужна функция для возврата заголовков столбцов в качестве имен столбцов курсора.

Примечание. Код нельзя передать, так как он очень чувствительный.

Образец: образец PFB.

Create table tb_test (id number, description varchar2 (50));  

create or replace package pkg_test is 
    cursor cur_test is 
        select * 
        from tb_test 
        where 1=2; 
    type typ_cur_test is table of cur_test%rowtype; 
    function fn_test(p_rows in number) return typ_cur_test pipelined; 
end;

create or replace package body pkg_test is 
    function fn_test(p_rows in number) return typ_cur_test pipelined as 
    l_tab typ_cur_test := cur_typ_test(); 
    begin 
        for i in 1..p_rows loop l_tab.extend; 
            l_tab(i).Id := i; 
            l_tab(i). Description := 'test'; 
            pipe roe(l_tab(i)); 
        end loop; 
    return ; 
    end; 
end pkg_test;


Select * from table(pkg_test.fn_test(2));

В 11g вышеупомянутый выбор дает заголовки столбцов как "id, description", но в 19 c я получаю как "ATTR_1, ATTR_2".

Пожалуйста, помогите.

1 Ответ

1 голос
/ 14 февраля 2020

Решение вашей проблемы может быть:

create or replace package pkg_test is 
    cursor cur_test is 
        select * 
        from tb_test 
        where 1=2; 
    type typ_cur_test is table of {tb_test}%rowtype; 
    function fn_test(p_rows in number) return typ_cur_test pipelined; 
end;
  1. Был в состоянии воспроизвести объясненное поведение. На 19 c -> Attr_1, Attr_2 на 11 -> ID, Описание

  2. Обходное решение, которое я нашел, использует base table/view%rowtype вместо cursor%rowtype.

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