Lorsque vous utilisez SQLcl avec Oracle Database, vous pouvez exporter les résultats de votre requête vers un fichier JSON avec le SPOOL commande.
Exemple
Voici un exemple qui exporte une table entière :
SET SQLFORMAT json;
SPOOL '/Users/barney/data/regions.json';
SELECT * FROM regions;
SPOOL off;
SET SQLFORMAT ansiconsole; Voici ce qu'il a fait, ligne par ligne :
- La première ligne définit
SQLFORMATenjson-formatted. Cela garantit que notre résultat.jsonle fichier contient en fait du JSON. Vous pouvez également utiliser le formatjson-formattedpour afficher le JSON dans un format plus convivial (plus à ce sujet plus tard). - La deuxième ligne utilise le
SPOOLcommande pour spécifier où le fichier de sortie sera écrit. Assurez-vous de modifier/Users/barney/data/regions.jsonà un emplacement sur votre système et un nom de fichier approprié. - Sur la troisième ligne, j'ai exécuté la requête SQL - les résultats pour lesquels j'exporte. Dans ce cas, j'ai exporté l'ensemble des
regionstableau. - Ensuite, j'ai tourné
SPOOLéteint. - Enfin, j'ai défini
SQLFORMATretour à mon paramètre d'origine, qui étaitansiconsole. Ceci est facultatif - vous pouvez le laisser àjson-formattedsi vous préférez, ou remplacez-le par autre chose.
Voici à quoi ressemble le fichier résultant :
{"results":[{"columns":[{"name":"REGION_ID","type":"NUMBER"},{"name":"REGION_NAME","type":"VARCHAR2"} ],"items":[{"region_id":1,"region_name":"Europe"},{"region_id":2,"region_name":"Amériques"},{"region_id":3,"region_name":"Asia"},{"region_id":4,"region_name":"Moyen-Orient et Afrique"}]}]}4 lignes sélectionnées.
Comme mentionné, vous avez également la possibilité d'utiliser le format json-formatted pour sortir le JSON dans un format plus convivial, avec des retraits, etc. J'ai inclus un exemple de cela au bas de cet article.
Supprimer les commentaires
Vous pouvez supprimer le X rows selected avec 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; Résultat :
{"results":[{"columns":[{"name":"REGION_ID","type":"NUMBER"},{"name":"REGION_NAME","type":"VARCHAR2"} ],"items":[{"region_id":1,"region_name":"Europe"},{"region_id":2,"region_name":"Amériques"},{"region_id":3,"region_name":"Asie"},{"region_id":4,"region_name":"Moyen-Orient et Afrique"}]}]}
Dans ce cas, j'ai activé FEEDBACK de nouveau après l'exportation du fichier.
Ajouter les résultats
Par défaut, SPOOL utilise REPLACE , qui remplace le fichier s'il existe déjà.
Cependant, nous pouvons utiliser le APPEND argument pour ajouter les résultats au fichier.
Exemple :
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; Fichier résultant :
{"results":[{"columns":[{"name":"REGION_ID","type":"NUMBER"},{"name":"REGION_NAME","type":"VARCHAR2"} ],"items":[{"region_id":1,"region_name":"Europe"},{"region_id":2,"region_name":"Amériques"},{"region_id":3,"region_name":"Asie"},{"region_id":4,"region_name":"Moyen-Orient et Afrique"}]}]}{"results":[{"columns":[{"name":"REGION_ID","type ":"NUMBER"},{"name":"REGION_NAME","type":"VARCHAR2"}],"items":[{"region_id":1,"region_name":"Europe"},{"region_id ":2,"region_name":"Amériques"},{"region_id":3,"region_name":"Asie"},{"region_id":4,"region_name":"Moyen-Orient et Afrique"}]}] }
Cet exemple a ajouté les résultats au fichier qui a été créé (et rempli) dans l'exemple précédent. Cela a entraîné la duplication de la sortie de la requête dans le fichier.
Ecraser le fichier existant
Nous pouvons utiliser REPLACE pour écraser le fichier existant avec les résultats d'une nouvelle requête :
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;
Fichier résultant :
{"results":[{"columns":[{"name":"REGION_ID","type":"NUMBER"},{"name":"REGION_NAME","type":"VARCHAR2"} ],"items":[{"region_id":1,"region_name":"Europe"},{"region_id":2,"region_name":"Amériques"},{"region_id":3,"region_name":"Asie"},{"region_id":4,"region_name":"Moyen-Orient et Afrique"}]}]}
Comme mentionné, REPLACE est le paramètre par défaut, nous aurions donc pu simplement omettre cet argument.
JSON formaté
Vous pouvez également utiliser le format json-formatted pour afficher le JSON dans un format plus convivial :
SET SQLFORMAT json-formatted;
SPOOL '/Users/barney/data/regions_formatted.json';
SELECT * FROM regions;
SPOOL off;
SET SQLFORMAT ansiconsole;
Résultat :
{ "results" :[ { "columns" :[ { "name" :"REGION_ID", "type" :"NUMBER" }, { "name" :"REGION_NAME", "type" :"VARCHAR2" } ], "items" :[ { "region_id" :1, "region_name" :"Europe" }, { "region_id" :2, "region_name" :"Amériques" }, { "region_id" :3, "region_name" :"Asie" }, { "region_id" :4, "region_name" :"Moyen-Orient et Afrique" } ] } ]}