2009-03-12 5 views
38

En utilisant SQL Plus, vous pouvez exécuter un script avec l'opérateur « @ » de la ligne de commande, comme dans:Comment puis-je exécuter une commande unique à partir de la ligne de commande via sql plus?

c:\>sqlplus username/[email protected] @"c:\my_script.sql" 

Mais est-il possible de simplement exécuter une seule commande avec une syntaxe similaire , sans un fichier script entier séparé? Comme dans:

c:\>sqlplus username/[email protected] @execute some_procedure 

Je suis intéressé par cela parce que je veux écrire un fichier batch qui exécute simplement une commande, sans générer un groupe de deux lignes fichiers « Sql ».

Répondre

59

Je suis en mesure d'exécuter une requête SQL en canalisant à SQL * Plus:

@echo select count(*) from table; | sqlplus username/[email protected] 

Donnez

@echo execute some_procedure | sqlplus username/[email protected] 

essayer.

+0

Fonctionne bien. Merci! – JosephStyons

+1

Que fait le symbole @ avant echo dans ce cas? – ivanatpr

+4

@IvanG; Pour les fichiers de commandes Windows, le symbole @ avant une commande écrase la commande pour qu'elle soit répercutée sur la console. C'est utile dans les situations où vous ne voulez pas désactiver l'écho, mais vous ne voulez pas voir la commande répercutée sur l'écran. Dans ce cas, c'est nécessaire pour que ce qui est redirigé vers la commande sqlplus soit le SQL que nous voulons exécuter, pas le texte de la commande. –

13

Avez-vous essayé quelque chose dans quelque chose comme ça?

sqlplus username/[email protected] < "EXECUTE some_proc /" 

On dirait que sous UNIX vous pouvez faire:

sqlplus username/[email protected] <<EOF 
EXECUTE some_proc; 
EXIT; 
EOF 

Mais je ne suis pas sûr de ce que les fenêtres équivalent de ce serait.

+0

Note, sur unix (et probablement Windows), vous shouldn vraiment » t jamais la syntaxe de nom d'utilisateur/mot de passe, qui exposera votre mot de passe à chaque utilisateur sur le système. Utilisez l'authentification externe si nécessaire. –

+1

Le symbole JosephStyons

+2

cette ligne de commande sera visible pour les autres utilisateurs avec (par exemple) 'ps -ef', si vous devez inclure le nom d'utilisateur et mot de passe, mieux exécuter" sqlplus/nolog << EOF "et avoir la première ligne être" connect username /mot de passe". Pas la solution idéale, mais c'est mieux en ce sens qu'il n'expose pas le nom d'utilisateur et le mot de passe en texte clair dans la sortie de 'ps -ef' – spencer7593

5

sqlplus user/password @ sid < sqlfile.sql

travaillera également à partir de la ligne de commande DOS. Dans ce cas, le fichier sqlfile.sql contient le code SQL que vous souhaitez exécuter.

-6

Voilà comment je résolu le problème:

<target name="executeSQLScript"> 
    <exec executable="sqlplus" failonerror="true" errorproperty="exit.status"> 
     <arg value="${dbUser}/${dbPass}@<DBHOST>:<DBPORT>/<SID>"/> 
     <arg value="@${basedir}/db/scripttoexecute.sql"/> 
    </exec> 
</target> 
+4

Décrivez votre réponse plus précisément où placer ceci et comment il arrangera l'erreur etc. – Ravimallya

8

Pour UNIX (AIX):

export ORACLE_HOME=/oracleClient/app/oracle/product/version 
export DBUSER=fooUser 
export DBPASSWD=fooPW 
export DBNAME=fooSchema 

echo "select * from someTable;" | $ORACLE_HOME/bin/sqlplus $DBUSER/[email protected]$DBNAME 
-1
@find /v "@" < %0 | sqlplus -s scott/[email protected] & goto :eof 

select sysdate from dual; 
+1

Veuillez ajouter plus de détails font votre réponse. – maxshuty

Questions connexes