Pl/SQL- Get column names from a query

后端 未结 2 2019
再見小時候
再見小時候 2021-02-06 11:12

I\'m using Pl/SQL with Oracle Database 11g.

I\'m writing a function that takes in a select statement as a parameter (varchar2). The function uses a for loop to go over

2条回答
  •  囚心锁ツ
    2021-02-06 11:46

    Based on dseibert's answer, I created function for usage:

    create type cols_name
        as table of varchar2(32767)
    /
    
    CREATE OR REPLACE FUNCTION GET_COLUMNS_NAME(p_selectQuery IN VARCHAR2) RETURN cols_name PIPELINED IS
        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, p_selectQuery, dbms_sql.native);
        dbms_sql.describe_columns(v_cursor_id, v_col_cnt, v_columns);
    
        for i in 1 .. v_columns.count loop
            pipe row(v_columns(i).col_name);
        end loop;
    
        dbms_sql.close_cursor(v_cursor_id);
        return;
    exception when others then
        dbms_sql.close_cursor(v_cursor_id);
        raise;
    end;
    /
    

    Using it:

    select * from TABLE(get_columns_name('select 1 column1, 2 column2 from dual'));
    

    Results:

    **COLUMN_VALUE**
    COLUMN1
    COLUMN2
    

提交回复
热议问题