web-dev-qa-db-fra.com

Exécutez le script Oracle SQL et quittez sqlplus.exe via l'invite de commande

Je voudrais exécuter un script Oracle via SQL Plus via une invite de commande Windows. Le script ne contient pas de commande "exit", mais j'aimerais quand même que SQL Plus se termine, en retournant le contrôle à l'invite de commandes à la fin du script. Mon objectif est de le faire sans modifier le script. Est-ce possible?

118
JoshL

Une autre façon consiste à utiliser cette commande dans le fichier batch:

echo exit | sqlplus user/pass@connect @scriptname
147
Dave Costa

J'ai trouvé que c'était la meilleure solution et cela fonctionne dans un terminal ou dans un script:

echo @scriptname | sqlplus username/password@connect
15
user142847

Réalisant maintenant que votre problème peut être avec le fichier sql lui-même, sachez qu'il faut dire à sqlplus de quitter. La façon dont je fais cela est:

 sélectionnez * parmi double; 
 
 quittez; 
/

(La barre oblique est importante. Elle indique à sqlplus d'exécuter le ou les statemet (s) au-dessus.)

13
Chris Noe

La meilleure façon de masquer les informations utilisateur et les sorties est:

exit | sqlplus -S user/pwd@server @script.sql

exit est fourni à la sortie de sqlplus le forçant à quitter. -S surpasse toutes les sorties du serveur autres que la requête SQL dans le script.

13
girish

Vous pouvez également le faire dans votre script Shell.

sqlplus /nolog <<EOF
connect user/pass
@run_some_file.sql
select * from dual;
EOF

Vous devrez peut-être échapper au ";" avec un \.

6
Ethan Post

Oui, c'est possible - générez un script wrapper qui configure SQLPlus de manière appropriée, inclut votre script (par exemple. @YourTargetScript.sql), puis effectue une sortie.

Cela dit, je ne recommande pas du tout cette approche - SQLPlus a un grand nombre d'accrochages pour une utilisation programmatique; lors de l'écriture de scripts Shell dans le passé qui utilisaient Oracle, j'ai construit un wrapper Python autour de lui (en ajoutant un comportement de gestion des erreurs plus raisonnable, une séparation saine de la sortie entre stdout/stderr, un support de sortie CSV natif, et autres goodies similaires), et cela a fonctionné beaucoup mieux.

3
Charles Duffy

Comme ça:

sqlplus/nolog userid/password @ tnsname @filename

Si vous le placez dans un fichier de commandes, le contrôle continuera avec les instructions qui le suivent.

EDIT: Mon mauvais, essayez à nouveau avec/nolog flag

3
Chris Noe

Pour ceux qui s'inquiètent de la sécurité d'inclure votre mot de passe dans le script, AskTom a un article sur "identifié en externe" http://asktom.Oracle.com/pls/apex/f?p=100:11:0 :::: P11_QUESTION_ID: 142212348066

1
user128494

Dans votre script SQL, ajoutez EXIT. Voici un exemple de mon fichier test.bat:

sqlplus user/pwd @ server @ test.SQL> myLOG.LOG

mon fichier test.sql a ce qui suit: sélectionnez * parmi dual; sortie

0
Ameen

sortie | SQLPLUS/@ @

C'est la bonne solution, j'ai essayé ça marche

0
user60947