web-dev-qa-db-fra.com

Comment faire écho au texte lors de l'exécution d'un script SQL dans SQLPLUS

J'ai un fichier de commandes qui exécute un script SQL dans sqlplus et envoie la sortie dans un fichier journal:

sqlplus user/pw <RowCount.sql> RowCount.log

Mon fichier journal contient ceci:

Connected to:
Oracle Database 11g Express Edition Release 11.2.0.2.0 - Production

SQL> SQL> 
  COUNT(*)
----------
     0

SQL> 
  COUNT(*)
----------
     0

etc. mais c'est plusieurs milliers de lignes de sortie et il est donc difficile de déterminer quels résultats appartiennent à quelle déclaration.

J'aimerais ajouter un peu de formatage à la sortie, afin de pouvoir discerner ce qui s'est passé. Un écho de l'instruction exécutée ou l'insertion manuelle de certaines instructions "écho" dans le script conviendrait. Idéalement, cela ressemblerait à quelque chose comme ceci:

SQL> select(*) from TableA;
  COUNT(*)
----------
     0

SQL> select(*) from TableB;
  COUNT(*)
----------
     0
26
glenneroo

Vous pouvez utiliser SET ECHO ON au début de votre script pour y parvenir, vous devez toutefois spécifier votre script à l'aide de @ au lieu de < (il fallait aussi ajouter EXIT à la fin):

test.sql

SET ECHO ON

SELECT COUNT(1) FROM dual;

SELECT COUNT(1) FROM (SELECT 1 FROM dual UNION SELECT 2 FROM dual);

EXIT

terminal

sqlplus hr/Oracle@orcl @/tmp/test.sql > /tmp/test.log

test.log

SQL> 
 SQL> SELECT COUNT (1) FROM dual; 
 
 COUNT (1) 
 ---------- 
 1 1. (1) 
 ---------- 
 2 
 
 SQL> 
 SQL> EXIT
24

La commande Invite renvoie le texte à la sortie:

Prompt A useful comment.
select(*) from TableA;

Sera affiché comme:

SQL> A useful comment.
SQL> 
  COUNT(*)
----------
     0
42
glenneroo

Vous pouvez modifier le nom de la colonne. Par conséquent, au lieu de "COUNT (*)", vous obtiendrez quelque chose de significatif. Vous devrez pour cela mettre à jour votre script "RowCount.sql".

Par exemple:

SQL> select count(*) as RecordCountFromTableOne from TableOne;

Sera affiché comme:

RecordCountFromTableOne
-----------------------
           0

Si vous voulez avoir de l’espace dans le titre, vous devez le mettre entre guillemets

SQL> select count(*) as "Record Count From Table One" from TableOne;

Sera affiché comme:

Record Count From Table One
---------------------------
            0
1
Ted