sqlplus在静默模式下不起作用

时间:2014-11-20 16:12:05

标签: shell sqlplus

我在shell脚本中使用sqlplus并且它工作(没有静默模式的sqlplus)但我可以在终端中看到输出。我尝试使用不同的组合以静默模式运行它,但它不起作用 -

sqlplus -s“$ DBUSER / $ DBPWD @(DESCRIPTION =(ADDRESS =(PROTOCOL = TCP)(Host = $ DBHOST)(Port = $ DBPORT))(CONNECT_DATA =(SID = $ DBSID)))”@ $ SCRHOME / getCsv $ sqlFile.sql

它可以工作,但我可以在控制台上看到输出。我也尝试过:

 sqlplus \-s "....
 sqlplus \-s \ "...
 sqplus -S
 sqlplus -s \ << EOF "...

我尝试删除双引号,但在那种情况下,即使sqlplus命令也不起作用。我在shell脚本中使用此命令。

2 个答案:

答案 0 :(得分:2)

正确的格式是:

sqlplus -S LOGIN_INFO @SCRIPT_TO_RUN

&#34;沉默&#34;模式不会阻止终端输出。它所做的就是:

-S             Sets silent mode which suppresses the display of
               the SQL*Plus banner, prompts, and echoing of
               commands.

如果要抑制所有终端输出,那么您需要执行以下操作:
sqlplus ... > /dev/null 2>&1

答案 1 :(得分:1)

如果要抑制终端输出,可以在SQLPlus脚本中使用spool并将终端输出转移到/ dev / null。以下是我的表现方式:

首先是SQLPlus:

spool ${HOME}/output.dat;
select
... <your query here> ...
;
spool off;

假设将其放在文件$HOME/my.sql中。这可以在bash脚本中调用,如下所示:

echo "$(sqlplus -s /nolog << EOF
CONNECT <your DB connnect string>
whenever sqlerror exit sql.sqlcode;
set echo off
@${HOME}/my.sql
exit;
EOF) " > /dev/null

查询的输出将发送到${HOME}/output.dat,并且没有SQLPlus输出将发送到您的终端(或者在我的情况下是日志文件)。