11
votes

Problème exécutant le script Oracle à partir de la ligne de commande à l'aide de SQLPLUS

J'ai un problème à essayer d'exécuter mon script SQL dans Oracle en utilisant SQLPlus. Le script publie simplement des données factices:

sqlplus username/password@server/dbname @Setup.sql


1 commentaires

Que se passe-t-il lorsque vous vous connectez à votre DB via SQLPlus, puis à l'invite, appelez le script?


6 Réponses :


15
votes

Vous devez soit mettre un EXIT à la fin du script, ou exécutez-le comme nom d'utilisateur / mot de passe SQLPLUS / dbname (c'est-à-dire redirigé entrée, << / code> au lieu de @ ). Vous pouvez vérifier si c'est le problème en tapant simplement «sortie» dans la session de suspension.

Si c'est vraiment suspendu, avez-vous été commis ou renvoyé l'exécution du développeur?


6 commentaires

Même sans le Quitter , il devrait faire quelque chose , c.-à-d. Complete et afficher une invite.


vrai, je cours habituellement avec -s quand je fais cette erreur


Ouais désolé de ma faute, c'est la transaction qui n'est pas commue. Première fois que j'ai utilisé Oracle ou l'un de ces outils!


Pour moi, cela semble juste jeter des charges de nombres à l'écran. Toute idée de quoi c'est à propos ?! Ils augmentent fondamentalement jusqu'au numéro de ligne, mais cela les écrit dans une matrice


@Jonnyleeds - Si vous n'avez pas -s sur la ligne de commande, vous voyez les numéros de ligne de script. Vous serez laissé à une invite numérotée; Si la touche de frappe génère un nouveau numéro, vous écrivez un bloc PL / SQL, sinon vous obtiendrez une invite SQL> . De toute façon, vous ne l'avez pas dit d'exécuter. Vous avez besoin d'un / sien sur la ligne après la finale de la finale de bloc de bloc .


Merci c'est utile de savoir. À ce stade, je devais avoir un comportement différent fonctionnant manuellement de la ligne de commande et une ligne de commande de commande scriptée



14
votes

Je voyais ce problème aussi avec certains scripts qui exécuteraient bien dans un client comme TOAD, mais lorsqu'il est exécuté via SQLPlus avec la directive @script au lieu de suspendre, le client SQLPlus retournerait une invite à un numéro. qui correspond au nombre de lignes dans le script exécuté (+1).

Par exemple, si nous avons exécuté un script nommé «DOIT.SQL» qui comptait 70 lignes, nous démarrerons SQLPlus avec la commande appropriée et entrez:

> @ drawit.sql

alors nous verrions:

71:

Appuyez sur Entrée à ce stade retournerait

72:

Nous avons pu obtenir ces scripts exécutés en entrant / à l'invite et en appuyant sur Entrée.


1 commentaires

J'avais la similoire, accroché à un numéro, je pouvais incrémenter en appuyant sur Entrée. J'ai redirigé mon script dans ma commande sqlplus, en utilisant << / code> au lieu de @ et le script s'est terminé et renvoyé à l'invite de commande, conformément à la suggestion dans L'article d'Alex-Poole , ci-dessus. Malheureusement, je ne pouvais pas simplement ajouter Quitter , car mon importation a conduit à un certain nombre de scripts tiers, partagés autour de l'entreprise dans notre référentiel de code.



0
votes

au lieu d'utiliser le / à l'invite, assurez-vous que votre requête dans le DOIT.SQL se termine par un point-virgule.


1 commentaires

Cela aurait dû être un commentaire à la réponse de CLAK, mais il est faux de toute façon; Obtenir les invites de numéro de ligne indique qu'il s'agissait d'un bloc PL / SQL, qui nécessiterait le / (ainsi que le ; , qui doit déjà être là ou il ne serait toujours pas possible t Travaux).



7
votes

La réponse simple

Assurez-vous de mettre les deux "fin"; et en ligne finale, mettre '/'

Il fonctionnera avec facilité.


2 commentaires

corrigé pour moi.


@ Yoav24 aussi pour moi. Oracle est ... au-delà de l'aggravant.



1
votes

la ligne de commande xxx

mentionnée ci-dessus signifie que sqlplus doit exécuter le script setup.sql et attendre des commandes supplémentaires de manière interactive (si Le script ne fait pas sortie explicitement). Ceci est un comportement normal de sqlplus .

sqlplus se termine dans trois cas:

  • échec (pour certaines erreurs que vous pouvez modifier si elle se termine ou non. Voir chaque fois que plsql-commande)
  • Explicit EXIT (interactif et SRIPT)
  • FIN DE STDIN (EOF)

    à partir du mode interactif ou du script, vous pouvez envoyer le caractère ^ z pour terminer doucement le flux d'entrée. Interactivement, vous appuyez simplement sur Ctrl + Z, entrez .

    et, bien sûr, vous pouvez rediriger stdin et le prendre à partir du fichier, et non du clavier. Il existe deux manières similaires de faire ceci: xxx

    dans les deux cas sqlplus se terminera après l'exécution du script à cause de eof dans le flux d'entrée.


0 commentaires

0
votes

problème est dû à SQLPlus d'exécuter de la maison Oracle Client Home et qu'il écrut sur la commande de mise à niveau de démarrage.

Exécutez le SQLPlus de la maison Oracle non client et essayé les commandes, alors cela fonctionne comme prévu. Donc, la résolution consiste à exécuter le SQLPlus de la maison principale Oracle au lieu d'Oracle Client Home.


0 commentaires