54

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

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

但是是否可以只运行一个具有类似语法的命令,而不需要一个完整的单独脚本文件?如:

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

我对此感兴趣,因为我想编写一个简单地执行命令的批处理文件,而不生成一堆两行的“.sql”文件。

4

6 回答 6

74

我可以通过将 SQL 查询通过管道传输到 SQL*Plus 来运行它:

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

@echo execute some_procedure | sqlplus username/password@databasename

试一试。

于 2009-03-12T16:15:18.630 回答
17

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

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

似乎在 UNIX 中你可以这样做:

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

但我不确定 Windows 相当于什么。

于 2009-03-12T14:27:57.307 回答
10

对于 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
于 2014-10-06T19:42:13.927 回答
6
sqlplus user/password@sid < sqlfile.sql

这也适用于 DOS 命令行。在这种情况下,文件 sqlfile.sql 包含您希望执行的 SQL。

于 2013-11-19T20:56:41.363 回答
-1
@find /v "@" < %0 | sqlplus -s scott/tiger@orcl & goto :eof

select sysdate from dual;
于 2015-10-20T18:22:37.907 回答
-10

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

<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>
于 2014-09-30T23:03:07.247 回答