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

时间:2009-03-12 13:54:12

标签: oracle command-line sqlplus

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

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

但是,是否可以使用类似的语法运行单一命令,而无需单独的脚本文件?如:

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

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

6 个答案:

答案 0 :(得分:66)

我可以通过将它传递给SQL * Plus来运行SQL查询:

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

提供

@echo execute some_procedure | sqlplus username/password@databasename
试一试。

答案 1 :(得分:15)

你尝试过这样的事吗?

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

在UNIX中你可以这样做:

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

但是我不确定窗户的等价物是什么。

答案 2 :(得分:8)

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

答案 3 :(得分:7)

sqlplus user/password@sid < sqlfile.sql

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

答案 4 :(得分:-1)

@find /v "@" < %0 | sqlplus -s scott/tiger@orcl & goto :eof

select sysdate from dual;

答案 5 :(得分:-8)

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

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