首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Oracle 19C数据库问题

Oracle 19C数据库问题
EN

Stack Overflow用户
提问于 2020-02-14 19:17:30
回答 1查看 575关注 0票数 1

我有一个在11g版本中工作正常的包。

但是当我在19c版本中部署相同的包时,行为是不同的。

PFB描述。

包规范有一个游标,并创建了一个游标为%rowtype的表类型。具有返回表类型的流水线函数。

使用function with table子句

代码语言:javascript
复制
select * from table(function)

这样返回值就可以作为一个表,我可以用列名来读取结果。

在11g中,该函数返回与游标列名称相同的列标题。但在19c中,该函数返回的列标题类似于'Attr_1,Attr_2,etc‘。

我需要该函数以游标列名的形式返回列标题。

注意:代码不能共享,因为它非常敏感。

样本:对样本进行PFB。

代码语言:javascript
复制
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中,上面的select给出的列标题是"id,description",但在19c中,我得到的是"ATTR_1,ATTR_2“。

请帮帮忙。

EN

回答 1

Stack Overflow用户

发布于 2020-02-14 21:22:13

您问题的解决方案可能是:

代码语言:javascript
复制
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. 能够重现解释过的行为。在19c -> Attr_1上,在11 -> ID上的Attr_2上,我发现使用的是base table/view%rowtype而不是cursor%rowtype.
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60225275

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档