2/9/10

Detectar dinámicamente los nombres de columna en PL/SQL

El paquete SYS.DBMS_SQL puede ser utilizado para obtener los nombres de columna de una consulta SQL. En el siguiente bloque PL/SQL se detectan los nombre de columna y se imprimen por pantalla.



DECLARE
  l_col_count  NUMBER;
  l_col_descs  dbms_sql.desc_tab;
  l_cursor     NUMBER;
  l_statement  VARCHAR2(50);
  l_table_name VARCHAR2(50);
BEGIN
  -- Definimos el nombre de la tabla
  l_table_name := 'scott.bonus';

  -- Costruimos la select
  l_statement  := 'select * from ' || l_table_name;
  --
  -- Abrimos un nuevo cursor
  l_cursor := dbms_sql.open_cursor;
  --
  -- Parse the SQL statement
  dbms_sql.parse( c             => l_cursor
               , statement     => l_statement
               , language_flag => dbms_sql.native
               );
  --            
  -- Obtenemos los nombres de las columnas
  dbms_sql.describe_columns( c       => l_cursor
                          , col_cnt => l_col_count
                          , desc_t  => l_col_descs
                          );      
  --
  -- Pasamos a imprimir la salida
  dbms_output.put_line(  'Description of table '
                     || l_table_name
                     || ':'
                     ) ;
  --
  -- Mostramos los nombre de las columnas
  FOR i in 1..l_col_count
  LOOP
    dbms_output.put_line(  'column '
                       || to_char(i)
                       || ': name='
                       || l_col_descs(i).col_name
                       );
  END LOOP;
END;

Salida:
Description of table scott.bonus:
column 1: name=ENAME
column 2: name=JOB
column 3: name=SAL
column 4: name=COMM

Fuente
http://www.oraxcel.com/cgi-bin/yabb2/YaBB.pl?num=1197575475

Referencias
EL paquete completo viene explicado aquí

No hay comentarios:

Publicar un comentario