2009-12-09 12 views
0

J'ai le script batch suivant:Erreur DOS/sqlplus "Handle is invalid"?

sqlplus ms/[email protected] < drop.sql 
sqlplus ms/[email protected] < create.1.0.sql 

Cela fonctionne bien quand je double clic sur le fichier de chauve-souris dans l'Explorateur Windows et l'exécuter.

Mais quand je tape le nom de la commande à partir de l'invite DOS je reçois une erreur:

C:\>create.bat 

C:\>sqlplus ms/[email protected] 0<drop.sql 
The handle is invalid. 

C:\>sqlplus ms/[email protected] 0<create.1.0.sql 
The handle is invalid 

Toutes les idées?


Mise à jour: a fait le changement d'utiliser @ au lieu de <. Cela contourne l'erreur mais maintenant le script n'exécute que le premier fichier et vous laisse à l'invite SQL>. Pour obtenir le deuxième fichier à exécuter, vous devez taper exit à l'invite, puis le deuxième fichier s'exécute. Vous ne savez pas comment obtenir les deux fichiers à exécuter. ??

+0

On dirait que le script batch que vous exécutez depuis la ligne de commande a quelques 0 supplémentaires. 0 est un handle invalide, donc les messages d'erreur. Utilisez la solution de shoover - le @ est un paramètre de sqlplus qui lui dit d'exécuter le script sql donné. –

+0

Essayé, pas de chance. Mise à jour post. –

+0

Voir mon commentaire ci-dessous La réponse de Jason. – shoover

Répondre

4

Si vous voulez SQL * PLUS pour exécuter un script, une meilleure façon que la redirection de ligne de commande est la syntaxe @:

sqlplus ms/[email protected] @drop.sql 
sqlplus ms/[email protected] @create.1.0.sql 

également lire sur la syntaxe @@, que vous pouvez utiliser pour exécuter un script .sql d'un autre script .sql dans le même répertoire.

SQL> help @ 
SQL> help @@ 
+0

Essayé, ne fonctionne pas entièrement. Mise à jour post. –

+0

Ce que j'ai fait était de créer un nouveau script 'create.sql' qui appelle mes deux scripts. J'exécute 'create.sql' en utilisant le signe' @ '. –

0

Made the change to use @ instead of <. This gets around the error but now the script only executes the first file and then leaves you at the SQL> prompt. To get the second file to execute you have to type exit at the prompt, then the second file runs. Not sure how to get both files to execute. ??

Je fini par écrire un script python pour exécuter plus de sql puis quittez pour contourner ce problème. Je n'ai pas encore trouvé de solution à cette limitation. Bien que vous ne deviez traiter le problème qu'une seule fois si vous utilisez @@ comme cela a été suggéré. Vous devrez juste exécuter le deuxième script du premier script.

+0

Si vous savez que vous allez exécuter vos scripts à partir de SQL * PLUS uniquement, vous pouvez ajouter QUIT; commande au bas de vos scripts. Cela provoque SQL * PLUS pour quitter. – shoover