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?
Une autre façon consiste à utiliser cette commande dans le fichier batch:
echo exit | sqlplus user/pass@connect @scriptname
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
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.)
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.
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 \.
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.
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
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
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
sortie | SQLPLUS/@ @
C'est la bonne solution, j'ai essayé ça marche