Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Como faço spool para um arquivo formatado em CSV usando SQLPLUS?


Você também pode usar o seguinte, embora introduza espaços entre os 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;

A saída será como:
    TABLE_PRIVILEGE_MAP           ,SYSTEM                        
    SYSTEM_PRIVILEGE_MAP          ,SYSTEM                        
    STMT_AUDIT_OPTION_MAP         ,SYSTEM                        
    DUAL                          ,SYSTEM 
...

Isso seria muito menos tedioso do que digitar todos os campos e concatená-los com as vírgulas. Você pode seguir com um script sed simples para remover o espaço em branco que aparece antes de uma vírgula, se quiser.

Algo assim pode funcionar ... (minhas habilidades no sed estão muito enferrujadas, então isso provavelmente precisará de trabalho)
sed 's/\s+,/,/' myfile.csv