Pl / SQL-从查询中获取列名

我正在使用Pl / SQL和Oracle Database 11g.

我正在编写一个函数,它将select语句作为参数(varchar2).该函数使用for循环遍历行并将格式应用于特定列,并输出整个事物.基本上,我需要一些方法来获取列名称,以便我可以在顶部显示它们.我知道有多种方法可以为表执行此操作,但由于传入此查询,因此可能未选择所有列,可能已使用别名等.

有没有办法从这个查询中选择列名?
理想情况如下:
从(子查询)中选择column_names

最佳答案
我相信你可以使用DESCRIBE_COLUMNS来做到这一点.只需传入游标和其他必需参数即可.

http://docs.oracle.com/cd/B19306_01/appdev.102/b14258/d_sql.htm#i1026120

declare
    v_sql varchar2(32767) := 'select 1 column1, 2 column2 from dual';
    v_cursor_id integer;
    v_col_cnt integer;
    v_columns dbms_sql.desc_tab;
begin
    v_cursor_id := dbms_sql.open_cursor;
    dbms_sql.parse(v_cursor_id, v_sql, dbms_sql.native);
    dbms_sql.describe_columns(v_cursor_id, v_col_cnt, v_columns);

    for i in 1 .. v_columns.count loop
        dbms_output.put_line(v_columns(i).col_name);
    end loop;

    dbms_sql.close_cursor(v_cursor_id);
exception when others then
    dbms_sql.close_cursor(v_cursor_id);
    raise;
end;
/

Output:
COLUMN1
COLUMN2

转载注明原文:Pl / SQL-从查询中获取列名 - 代码日志