2010-12-07 45 views
6

J'essaie d'écrire un script de requête simple qui me permet d'obtenir un nombre de lignes dans une table. Cependant, je suis confronté à un problème pour supprimer toutes sortes de messages d'Oracle. Tout ce que je suis intéressé est la sortie:Suppression de messages lors de l'exécution de requêtes SQL dans un script

Voici mon script:

#!/usr/bin/ksh 
sqlplus /nolog <<EOF 
connect user/[email protected] 
set serveroutput on 
set heading off 
set feedback off 
select count(*) from table; 
exit; 
EOF 

Ma sortie ressemble à ceci:

.desktop% sh sql.ksh 
SQL*Plus: Release 10.2.0.2.0 - Production on Tue Dec 7 12:00:42 2010 
Copyright (c) 1982, 2005, Oracle. All Rights Reserved. 
SQL> Connected. 
SQL> SQL> SQL> SQL> 
     70 
SQL> Disconnected from Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production 
With the Partitioning, OLAP, Data Mining and Real Application Testing options 

Tout ce que je veux est le numéro 70 sans aucun message pour que je Je peux l'écrire régulièrement dans les journaux, etc. Je sais que je peux analyser le nombre mais je vais devoir le changer chaque fois que ma requête ou mon schéma changent. Je ne peux pas demander à mysqlplus de supprimer tous ces messages?

Répondre

7

Vous devez utiliser sqlplus -s pour le mode silencieux

#!/usr/bin/ksh 
sqlplus -s /nolog <<EOF 
connect user/[email protected] 
set serveroutput on 
set heading off 
set feedback off 
select count(*) from table; 
exit; 
EOF 
+0

Je suis d'accord qu'en ajoutant -s il n'y a pas de messages même ceux que je veux voir. La question est de savoir comment cacher tous ces messages et n'afficher que les messages que je voudrais voir, par exemple si j'ajoute dbms_output.put_line ('Bonjour mot') Je voudrais seulement voir Hello Word. COMMENT PUIS JE FAIRE ÇA??? – vogash

+0

@vogash, voir ma réponse pour plus de détails – maxschlepzig

4

Essayez le drapeau -s. par exemple,

sqlplus /s /nolog <<EOF 

...

6

Vous devez ajouter l'option majuscule S-sqlplus.

Le message d'aide (de sqlplus qui vient avec Oracle 11.2.0.4.0) spécifie:

-S Sets silent mode which suppresses the display of 
     the SQL*Plus banner, prompts, and echoing of 
     commands. 

Avec quelque chose comme

$ sqlplus -S /nolog << EOF 
connect user/[email protected] 
set serveroutput on 
set heading off 
set feedback off 
exec package.procedure($1); -- procedure that calls DBMS_OUTPUT procedures ... 
select 2 from dual; 
-- ... 
exit; 
EOF 

vous obtenez seulement la sortie de la DBMS_OUTPUT buffer et les résultats des instructions select.