Search notes:

Oracle: DBMS_SQL.DESCRIBE_COLUMNS

set serveroutput on
declare

   sql_stmt   varchar2(32000) := 'select ''Hello world'' "A text", 42 a_number, dummy from dual';
   c          number;
   cntCols    number;
   cols       dbms_sql.desc_tab2;

   datatype varchar2(8);
begin
   dbms_output.new_line;

   c := dbms_sql.open_cursor;

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

   for i in 1 .. cntCols loop
    
      datatype := case cols(i).col_type
         when dbms_sql.varchar2_type then 'varchar2'
         when dbms_sql.char_type     then 'char'
         when dbms_sql.number_type   then 'number'
         else to_char(cols(i).col_type)
      end;

      dbms_output.put_line('  ' || rpad(cols(i).col_name, 10) || datatype);
      
   end loop;

   dbms_sql.close_cursor(c);

end;
/

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

Fatal error: Uncaught PDOException: SQLSTATE[HY000]: General error: 8 attempt to write a readonly database in /home/httpd/vhosts/renenyffenegger.ch/php/web-request-database.php:78 Stack trace: #0 /home/httpd/vhosts/renenyffenegger.ch/php/web-request-database.php(78): PDOStatement->execute(Array) #1 /home/httpd/vhosts/renenyffenegger.ch/php/web-request-database.php(30): insert_webrequest_('/notes/developm...', 1758201057, '216.73.216.150', 'Mozilla/5.0 App...', NULL) #2 /home/httpd/vhosts/renenyffenegger.ch/httpsdocs/notes/development/databases/Oracle/installed/packages/dbms/sql/describe_columns/index(102): insert_webrequest() #3 {main} thrown in /home/httpd/vhosts/renenyffenegger.ch/php/web-request-database.php on line 78