144 votes

Exécuter Oracle SQL script et quitter sqlplus.exe via l'invite de commande

Je voudrais exécuter un script d'Oracle par SQL Plus via une invite de commande Windows. Le script ne contient pas de commande "exit", mais je voudrais quand même que SQL Plus se termine, en rendant le contrôle à l'invite de commande à la fin du script. Mon objectif est de faire ceci sin en modifiant le script. Est-ce possible ?

0 votes

L'exécutez-vous avec "sqlplus ...." ? <nom du script" ou "sqlplus ... @scriptname" ? ? Je constate que les comportements varient en fonction de la méthode utilisée sous Unix.

175voto

Dave Costa Points 1756

Une autre façon est d'utiliser cette commande dans le fichier batch :

echo exit | sqlplus user/pass@connect @scriptname

1 votes

Cool ! Savez-vous comment le "exit" est ajouté à la session sqlplus ?

6 votes

La commande sqlplus exécute le script puis tente de lire d'autres commandes à partir de l'entrée standard. Avec ce pipeline, la lecture de l'entrée standard lira la chaîne "exit" de la commande echo, ce qui entraînera la sortie de sqlplus.

0 votes

Excellent - c'est exactement ce que je cherchais. Je vous remercie.

22voto

Moose Factory Points 2075

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

1 votes

Bien que cela puisse techniquement répondre à la question, il s'agit essentiellement d'une répétition d'autres réponses et cela n'apporte que peu de valeur ajoutée. De plus, cela aiderait les autres si vous expliquiez ce que font ces commandes. Je vous remercie de votre attention.

9 votes

Cette solution a fonctionné pour moi et je la trouve plus élégante que la réponse précédente, car elle évite la "sortie".

17voto

Chris Noe Points 297

En réalisant maintenant que votre problème peut être avec le fichier sql lui-même, réalisez que sqlplus a besoin d'être dit de quitter. La façon dont je le fais est la suivante :

select \* from dual;

quit;
/

(La barre oblique est importante. Il indique à sqlplus d'exécuter le ou les états qui le précèdent).

0 votes

Notez que la réponse de Dave Costa fonctionne également : insérer exit (ou quit) dans la commande sqlplus.

0 votes

Merci pour l'astuce, j'étais à la recherche de cette information !

4 votes

La barre oblique signifie qu'il faut exécuter ce qui se trouve dans la mémoire tampon SQL. Elle ne permet pas d'exécuter plusieurs instructions et n'est pas nécessaire pour exécuter des commandes de contrôle SQLPlus telles que "quit". Si vous tapez "quit"<Entrée> à une invite interactive de SQLPlus, il quittera immédiatement.

17voto

girish Points 159

La meilleure façon de cacher les informations et les sorties de l'utilisateur est :

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

exit est fourni à la sortie de sqlplus pour le forcer à quitter. -S supprime toute sortie du serveur autre que la requête sql dans le script.

2 votes

Si vous utilisez ssh, faites quit | au lieu de exit | afin de ne pas fermer votre session ssh si le fichier est édité ultérieurement pour contenir un exit ou un quit. Cela fonctionne également si le fichier n'est pas trouvé.

11voto

Alex319 Points 2872

Vous pouvez également le faire dans votre Shell Shell.

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

Vous pourriez avoir besoin d'échapper au " ;" avec un \.

0 votes

Cela fonctionne, c'est une bouée de sauvetage !

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X