Relatórios em Formato CSV no SQL Plus - Oracle Database 12c R2

Olá pessoal,

Agora no Oracle Database 12c Release 2 podemos utilizar o comando: SET MARKUP com a opção CSV para devolver a saída dos dados no formato CSV.

Para serem eficazes, os comandos SET MARKUP que alteram valores na saída do relatório dinâmico devem ser emitidos antes da instrução que produz a saída da consulta refletindo também as configurações de DELIMITER e QUOTE se forem informadas.

O CSV é um argumento obrigatório do SET MARKUP que especifica o tipo de saída a ser gerado que é CSV. Os argumentos CSV opcionais, ON e OFF, especificam se deve ou não gerar saída CSV. O padrão é OFF.

Você pode especificar o caractere delimitador usando a opção DELIMITER e você também pode produzir texto sem aspas usando QUOTE OFF.

Vamos a exemplos:

Vamos pegar uma consulta simples, como a abaixo:

[oracle@serv01 ~]$ sqlplus / as sysdba

SQL*Plus: Release 12.2.0.1.0 Production on Wed Aug 1 15:40:37 2018

Copyright (c) 1982, 2016, Oracle.  All rights reserved.


Connected to:
Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production

SQL> col username format a30
col account_status format a20
select user_id, username, account_status from dba_users where account_status = 'OPEN';

USER_ID USERNAME                       ACCOUNT_STATUS
---------- ------------------------------ --------------------
0 SYS                            OPEN
9 SYSTEM                         OPEN

SQL>

Agora vamos devolver o resultado no formato CSV, ativando com set markup csv on:

SQL> set markup csv on

SQL> col username format a30
col account_status format a20
select user_id, username, account_status from dba_users where account_status = 'OPEN';

"USER_ID","USERNAME","ACCOUNT_STATUS"
0,"SYS","OPEN"
9,"SYSTEM","OPEN"

SQL>

Veja abaixo que podemos também retirar as aspas da coluna username e account_status com a opção QUOTE OFF e também podemos informar um delimitador de dados/colunas com a opção DEMILITER que neste caso informamos |:

SQL> set markup csv on quote off
SQL> set markup csv on delimiter |

SQL> col username format a30
col account_status format a20
select user_id, username, account_status from dba_users where account_status = 'OPEN';

USER_ID|USERNAME|ACCOUNT_STATUS
0|SYS|OPEN
9|SYSTEM|OPEN

SQL>

Maiores informações:

https://docs.oracle.com/en/database/oracle/oracle-database/12.2/sqpug/generating-HTML-reports-from-SQL-Plus.html#GUID-1743F2F2-EBF3-48F7-9620-4F72B8988335

https://docs.oracle.com/en/database/oracle/oracle-database/12.2/sqpug/SET-system-variable-summary.html#GUID-0AA910C4-C22A-4A9E-BE13-AAA059CC7919

Ronaldo

Nenhum comentário:

Postar um comentário