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

Oracle 如何通过sql plus从命令行发出单个命令?,oracle,command-line,sqlplus,Oracle,Command Line,Sqlplus,使用SQL Plus,您可以从命令行运行带有“@”运算符的脚本,如下所示: c:\>sqlplus username/password@databasename @"c:\my_script.sql" 但是,是否可以只运行一个语法类似的命令,而不使用一个单独的脚本文件?例如: c:\>sqlplus username/password@databasename @execute some_procedure 我对此感兴趣是因为我想编写一个只执行命令的批处理文件,而不生成一堆两行“

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

c:\>sqlplus username/password@databasename @"c:\my_script.sql"
但是,是否可以只运行一个语法类似的命令,而不使用一个单独的脚本文件?例如:

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

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

您尝试过类似的方法吗

sqlplus username/password@database < "EXECUTE some_proc /"
sqlplus用户名/password@database<“执行一些程序/”
在UNIX中,似乎可以执行以下操作:

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

sqlplus用户名/password@database我可以通过管道将SQL查询传输到SQL*Plus来运行SQL查询:

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

一次尝试。

sqlplus用户/password@sid

这也将在DOS命令行中工作。在本例中,文件sqlfile.sql包含您希望执行的sql。

我就是这样解决问题的:

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

用于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
@find/v“@”<%0| sqlplus-s scott/tiger@orcl&转到:eof
从双通道中选择sysdate;

注意,在unix(可能还有windows)上,您真的不应该使用用户名/密码语法,这将向系统上的每个用户公开您的密码。如果需要,请使用外部身份验证。<符号也是Windows中的管道。好主意,但它不起作用。使用(例如)
ps-ef
,其他操作系统用户可以看到该命令行,如果必须包含用户名和密码,最好执行该命令行“sqlplus/nolog在这种情况下,echo之前的@符号做了什么?”;对于Windows批处理文件,命令前的@符号将使命令不会回显到控制台。当您不想关闭echo,但又不想看到命令在屏幕上回响时,它非常有用。在本例中,需要使用它,以便通过管道传输到sqlplus命令的是我们要运行的SQL,不是命令文本。请更具体地描述您的答案在何处设置以及如何修复错误等。Apache Ant中的此解决方案仍然需要一个SQL脚本
scripttoexecute.SQL
与调用脚本分开存储。请添加更多详细信息。OP已经说过他知道他可以做到这一点。他正在寻求一种不需要单独的SQL脚本就可以运行单个命令的方法。
<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>
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
@find /v "@" < %0 | sqlplus -s scott/tiger@orcl & goto :eof

select sysdate from dual;