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.

4voto

Charles Duffy Points 926

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

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

0 votes

Avec n'importe quel autre programme, je serais d'accord avec vous. MAIS j'ai trouvé que SQLPlus m'a donné un contexte utile sur une mauvaise requête que d'autres environnements (dans mon cas Perl/DBI/DBD::Oracle) n'ont pas donné. Si vous traitez soigneusement les erreurs, cela peut valoir la peine.

0 votes

En outre, selon le degré de contrôle que vous exercez sur le serveur, vous pouvez ou non supposer la disponibilité d'autres éléments que Shell et SQLPlus. Beaucoup d'ateliers unix plus importants utilisant Solaris, HP/UX, AIX et autres utilisent des installations très dépouillées et ne vous laisseront pas installer autre chose sur la boîte. Notez qu'il est parfois possible de contourner ce problème en intégrant un interpréteur minimal à votre application.

3voto

Chris Noe Points 297

Comme ça :

sqlplus /nolog userid/password@tnsname @filename

Si vous placez cette instruction dans un fichier batch, le contrôle se poursuivra avec la ou les instructions qui la suivent.

EDIT : Ma faute, réessayez avec le drapeau /nolog.

0 votes

Malheureusement, cela ne fonctionne pas. Lorsque j'exécute le fichier batch, SqlPlus attend l'entrée de l'utilisateur à l'invite SQL> au lieu de renvoyer le contrôle à l'invite de commande.

0 votes

Désolé, cela ne fonctionne pas non plus. /nolog permet à sqlplus de démarrer sans se connecter. Cela n'a rien à voir avec la sortie d'un script lorsqu'il se termine.

0 votes

Hmm, je commence à m'interroger sur les différences d'environnement. J'ai de nombreux scripts bat scripts qui utilisent sqlplus de cette manière.

2voto

Wolfie Points 281

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

2 votes

Bien que cela puisse théoriquement répondre à la question, il serait préférable d'inclure ici les éléments essentiels de la réponse et de fournir le lien pour référence.

1voto

Dans votre script SQL, ajoutez EXIT. Voici un exemple mon fichier test.bat contient ce qui suit :

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

mon fichier test.sql contient ce qui suit : select * from dual ; exit

0 votes

C'est très bien, mais cela ne répond pas à l'exigence de faire cela sans modifier le script pour inclure une instruction exit/quit. L'objectif est que ces script puissent être exécutés par un DBA à partir de SQL Plus, mais aussi à partir d'un fichier batch.

1voto

JesseTG Points 235

Un autre pour Linux sans tuyaux ou bifurcation d'un autre sousShell/processus

sqlplus -S dbuser/dbpasswd@dbsid @scriptname </dev/null

Après @scriptname est terminée, sqlplus attend l'entrée de l'utilisateur. Dans ce cas, sqlplus lit une fin de fichier à partir de /dev/null et les sorties, à cause de cela.

0 votes

La réponse la plus claire à cette question.

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