如何通过sql plus从命令行发出单个命令?

使用SQL Plus,您可以在命令行中使用“@”运算符运行脚本 ,如下所示:

c:\>sqlplus username/password@databasename @"c:\my_script.sql" 

但是,是否可以只用一个类似的语法来运行一个命令 ,而没有一个单独的脚本文件? 如:

 c:\>sqlplus username/password@databasename @execute some_procedure 

我对此感兴趣,因为我想编写一个只执行一个命令的batch file,而不会生成一堆两行“.sql”文件。

我可以通过pipe道到SQL * Plus来运行SQL查询:

 @echo select count(*) from table; | sqlplus username/password@database 

 @echo execute some_procedure | sqlplus username/password@databasename 

一试。

你有没有尝试过这样的事情?

 sqlplus username/password@database < "EXECUTE some_proc /" 

看起来像在UNIX上你可以这样做:

 sqlplus username/password@database <<EOF EXECUTE some_proc; EXIT; EOF 

但是我不确定那个窗户是什么。

对于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/$DBPASSWD@$DBNAME 

sqlplus用户/密码@ sid <sqlfile.sql

也将从DOS命令行工作。 在这种情况下,文件sqlfile.sql包含你想要执行的SQL。

 @find /v "@" < %0 | sqlplus -s scott/tiger@orcl & goto :eof select sysdate from dual; 

这就是我解决问题的方法:

 <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>