暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

如何在oracle pl sql中使用sys_refcursor返回标头和数据

ASKTOM 2020-10-19
634

问题描述

我想在使用refcursor返回结果的同时返回列的标题和数据。

create table fetch_header_rows
(
company_name varchar2(500),
Company_id number,
ammount number(20,8),
data_commnets varchar2(500)
);

insert into fetch_header_rows values('company1' , 1, 128.80,'test data1');

insert into fetch_header_rows values('company2' , 2, 129.80,'test data1');

insert into fetch_header_rows values('company3' , 3, 128,'test data1');

insert into fetch_header_rows values('company4' , 4, 100.80,'test data1');


create or replace procedure SP_fetch_header_rows(data_fetch  out sys_refcursor )
as

begin

open data_fetch for 
select * from fetch_header_rows;

end;
复制



这里我们在文件中获取光标结果。因此,我们需要标头作为数据中的第一行。
(在当前情况下,我们有150多个列)

专家解答

您可以使用dbms_sql.to_cursor_number将其转换为dbms_sql游标,然后使用describe_columns获取列名:

declare
  cur        sys_refcursor;
  cur_handle number;
  rec_tab    dbms_sql.desc_tab;
  col_cnt    integer;
begin
  SP_fetch_header_rows ( cur );
  cur_handle := dbms_sql.to_cursor_number ( cur ) ;
  
  dbms_sql.describe_columns ( cur_handle, col_cnt, rec_tab );
  
  for i in 1 .. rec_tab.count loop
    dbms_output.put_line ( rec_tab(i).col_name );
  end loop;
  
  dbms_sql.close_cursor ( cur_handle );
end;
/

COMPANY_NAME
COMPANY_ID
AMMOUNT
DATA_COMMNETS
复制

文章转载自ASKTOM,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论