如何通过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>