¿Cómo hago cola en un archivo con formato CSV usando SQLPLUS?

Resuelto Daniel C. Sobral asked hace 15 años • 16 respuestas

Quiero extraer algunas consultas a un formato de salida CSV. Desafortunadamente, no puedo usar ningún cliente SQL sofisticado ni ningún lenguaje para hacerlo. Debo usar SQLPLUS.

¿Cómo lo hago?

Daniel C. Sobral avatar Mar 13 '09 22:03 Daniel C. Sobral
Aceptado

También puedes usar lo siguiente, aunque introduce espacios entre campos.

set colsep ,     -- separate columns with a comma
set pagesize 0   -- No header rows
set trimspool on -- remove trailing blanks
set headsep off  -- this may or may not be useful...depends on your headings.
set linesize X   -- X should be the sum of the column widths
set numw X       -- X should be the length you want for numbers (avoid scientific notation on IDs)

spool myfile.csv

select table_name, tablespace_name 
  from all_tables
 where owner = 'SYS'
   and tablespace_name is not null;

La salida será como:

    TABLE_PRIVILEGE_MAP           ,SYSTEM                        
    SYSTEM_PRIVILEGE_MAP          ,SYSTEM                        
    STMT_AUDIT_OPTION_MAP         ,SYSTEM                        
    DUAL                          ,SYSTEM 
...

Esto sería mucho menos tedioso que escribir todos los campos y concatenarlos con comas. Si lo desea, puede continuar con un script sed simple para eliminar los espacios en blanco que aparecen antes de una coma.

Algo como esto podría funcionar... (mis habilidades sed están muy oxidadas, por lo que probablemente necesitará mejorar)

sed 's/\s+,/,/' myfile.csv 
Gabe avatar Mar 17 '2009 15:03 Gabe

Si está utilizando 12.2, simplemente puede decir

set markup csv on
spool myfile.csv
BobC avatar Feb 14 '2017 21:02 BobC