Ao usar SQLcl com Oracle Database, você pode exportar os resultados de sua consulta para um arquivo JSON com o
SPOOL comando. Exemplo
Aqui está um exemplo que exporta uma tabela inteira:
SET SQLFORMAT json;
SPOOL '/Users/barney/data/regions.json';
SELECT * FROM regions;
SPOOL off;
SET SQLFORMAT ansiconsole; Aqui está o que ele fez, linha por linha:
- A primeira linha define
SQLFORMATparajson. Isso garante que nosso.jsonresultante arquivo de fato contém JSON. Você também pode usarjson-formattedpara gerar o JSON em um formato mais amigável (mais sobre isso posteriormente). - A segunda linha usa o
SPOOLcomando para especificar onde o arquivo de saída será gravado. Certifique-se de alterar/Users/barney/data/regions.jsonpara um local em seu sistema e um nome de arquivo apropriado. - Na terceira linha, executei a consulta SQL – os resultados para os quais estou exportando. Nesse caso, exportei todas as
regionstabela. - Em seguida, virei
SPOOLdesligado. - Por último, configurei
SQLFORMATde volta à minha configuração original, que eraansiconsole. Isso é opcional – você pode deixar emjsonse preferir, ou altere para outra coisa.
Aqui está a aparência do arquivo resultante:
{"results":[{"columns":[{"name":"REGION_ID","type":"NUMBER"},{"name":"REGION_NAME","type":"VARCHAR2"}],"items":
[
{"region_id":1,"region_name":"Europe"}
,{"region_id":2,"region_name":"Americas"}
,{"region_id":3,"region_name":"Asia"}
,{"region_id":4,"region_name":"Middle East and Africa"}
]}]}
4 rows selected. Como mencionado, você também tem a opção de usar
json-formatted para gerar o JSON em um formato mais amigável, com recuos, etc. Incluí um exemplo disso na parte inferior deste artigo. Remover comentários
Você pode remover o
X rows selected com SET FEEDBACK off :SET SQLFORMAT json;
SET FEEDBACK off;
SPOOL '/Users/barney/data/regions_feedback_off.json';
SELECT * FROM regions;
SPOOL off;
SET FEEDBACK on;
SET SQLFORMAT ansiconsole; Resultado:
{"results":[{"columns":[{"name":"REGION_ID","type":"NUMBER"},{"name":"REGION_NAME","type":"VARCHAR2"}],"items":
[
{"region_id":1,"region_name":"Europe"}
,{"region_id":2,"region_name":"Americas"}
,{"region_id":3,"region_name":"Asia"}
,{"region_id":4,"region_name":"Middle East and Africa"}
]}]}
Neste caso eu virei
FEEDBACK novamente após exportar o arquivo. Anexar os resultados
Por padrão,
SPOOL usa REPLACE , que substitui o arquivo se ele já existir. No entanto, podemos usar o
APPEND argumento para anexar os resultados ao arquivo. Exemplo:
SET SQLFORMAT json;
SET FEEDBACK off;
SPOOL '/Users/barney/data/regions_feedback_off.json' APPEND;
SELECT * FROM regions;
SPOOL off;
SET FEEDBACK on;
SET SQLFORMAT ansiconsole; Arquivo resultante:
{"results":[{"columns":[{"name":"REGION_ID","type":"NUMBER"},{"name":"REGION_NAME","type":"VARCHAR2"}],"items":
[
{"region_id":1,"region_name":"Europe"}
,{"region_id":2,"region_name":"Americas"}
,{"region_id":3,"region_name":"Asia"}
,{"region_id":4,"region_name":"Middle East and Africa"}
]}]}
{"results":[{"columns":[{"name":"REGION_ID","type":"NUMBER"},{"name":"REGION_NAME","type":"VARCHAR2"}],"items":
[
{"region_id":1,"region_name":"Europe"}
,{"region_id":2,"region_name":"Americas"}
,{"region_id":3,"region_name":"Asia"}
,{"region_id":4,"region_name":"Middle East and Africa"}
]}]}
Este exemplo anexou os resultados ao arquivo que foi criado (e preenchido) no exemplo anterior. Isso resultou na duplicação da saída da consulta no arquivo.
Substituir o arquivo existente
Podemos usar
REPLACE para substituir o arquivo existente com os resultados de uma nova consulta:SET SQLFORMAT json;
SET FEEDBACK off;
SPOOL '/Users/barney/data/regions_feedback_off.json' REPLACE;
SELECT * FROM regions;
SPOOL off;
SET FEEDBACK on;
SET SQLFORMAT ansiconsole; Arquivo resultante:
{"results":[{"columns":[{"name":"REGION_ID","type":"NUMBER"},{"name":"REGION_NAME","type":"VARCHAR2"}],"items":
[
{"region_id":1,"region_name":"Europe"}
,{"region_id":2,"region_name":"Americas"}
,{"region_id":3,"region_name":"Asia"}
,{"region_id":4,"region_name":"Middle East and Africa"}
]}]}
Como mencionado,
REPLACE é a configuração padrão, então poderíamos simplesmente omitir esse argumento completamente. JSON formatado
Você também pode usar
json-formatted para gerar o JSON em um formato mais amigável:SET SQLFORMAT json-formatted;
SPOOL '/Users/barney/data/regions_formatted.json';
SELECT * FROM regions;
SPOOL off;
SET SQLFORMAT ansiconsole; Resultado:
{
"results" : [
{
"columns" : [
{
"name" : "REGION_ID",
"type" : "NUMBER"
},
{
"name" : "REGION_NAME",
"type" : "VARCHAR2"
}
],
"items" : [
{
"region_id" : 1,
"region_name" : "Europe"
},
{
"region_id" : 2,
"region_name" : "Americas"
},
{
"region_id" : 3,
"region_name" : "Asia"
},
{
"region_id" : 4,
"region_name" : "Middle East and Africa"
}
]
}
]
}