我有一个在 11g 版本中运行良好的包。
但是当我在 19c 版本中部署相同的包时,行为是不同的。
PFB 说明。
包规范有一个游标,并使用 cursor%rowtype 创建了一个表类型。具有返回表类型的流水线函数。
使用带有表子句的函数
select * from table(function)
这样返回值就可以作为一个表,我可以用列名读取结果。
在 11g 中,该函数返回与游标列名称相同的列标题。但在 19c 中,该函数返回列标题,如“Attr_1、Attr_2 等”。
我需要该函数将列标题作为光标列名称返回。
注意:代码非常敏感,不能共享。
样品: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,描述”,但在 19c 中,我得到的是“ATTR_1,ATTR_2”。
请帮忙。