Search notes:

Oracle: DBMS_SQL.DESCRIBE_COLUMNS

declare

  sql_stmt   varchar2(32000) := 'select ''foo'' "Foo", 42 bar from dual';

  c          number;
  cntCols    number;
  cols       dbms_sql.desc_tab;

begin
  dbms_output.new_line;

  c := dbms_sql.open_cursor;

  dbms_sql.parse(c, sql_stmt, dbms_sql.native);
  dbms_sql.describe_columns (c, cntCols, cols);


  for i in 1 .. cntCols loop

      dbms_output.put_line('  ' || cols(i).col_name);

  end loop;

  dbms_sql.close_cursor(c);

  dbms_output.new_line;

end;
/
Github repository Oracle-Patterns, path: /Installed/dbms/sql/describe_columns.plsql

Four versions of desc_rec

There are four versions of the describe_columns procedure: describe_columns, describe_columns2, describe_columns3 and describe_columns4. Each of these returns a corresponding desc_tabdesc_tab4 which in turn is a table of a desc_recdesc_rec4 structure.

Differences of the desc_rec structures

The fields of the desc_rec structures are
Field name Differences
col_type
col_max_len
col_name Differs in length (desc_rec: varchar2(32), other three varchar2(32767))
col_name_len desc_recdesc_rec3: varchar2(32), desc_rec4: dbms_id
col_schema_name
col_schema_name_len
col_precision
col_scale
col_charsetid
col_charsetform
col_null_ok
col_type_name Only in desc_rec3 (varchar2(32767) and desc_rec4 (dbms_id))
col_type_name_len Only in desc_rec3 and desc_rec4

desc_tab

desc_tab is a collection (associative array) of desc_rec:
type desc_tab is table of desc_rec index by binary_integer;

See also

dbms_sql

Index