oracle 处于静默模式的Sqlplus不静默

4sup72z8  于 2023-10-16  发布在  Oracle
关注(0)|答案(4)|浏览(201)

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

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

<顺便说一句,-s是黄色的,而不是黑色的,就像shell脚本中的echo命令一样>
它工作,但我可以看到控制台上的输出。我也试过:

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

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

kokeuurv

kokeuurv1#

正确的格式是:

sqlplus -S LOGIN_INFO @SCRIPT_TO_RUN

“静音”模式不会阻止终端输出。它所做的就是:

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

如果你想禁止所有的终端输出,那么你需要做一些类似的事情:
sqlplus ... > /dev/null 2>&1

zzoitvuj

zzoitvuj2#

必须使用set termout off
这将是:
sqlplus -S "$DBUSER/$DBPWD@(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(Host=$DBHOST)(Port=$DBPORT))(CONNECT_DATA=(SID=$DBSID)))" @$SCRHOME/getCsv$sqlFile.sq l
并将此行添加到getCsv$sqlFile.sql的开头(它必须在任何SQL命令之前)。

set termout off
wwwo4jvm

wwwo4jvm3#

如果您想禁止终端输出,可以在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输出将发送到您的终端(或日志文件,就像我的情况一样)。

toiithl6

toiithl64#

取消设置ORACLE_PATH,使其不执行login.sql的内容

then sqlplus -S , or sqlplus -s

[oracle]$ unset ORACLE_PATH
[oracle]$ OUTPUT=$( sqlplus -S / as sysdba <<EOF
> set heading OFF termout ON trimout ON feedback OFF
> set pagesize 0
> select sysdate from dual;
> exit;
> EOF
> )
[oracle]$ echo $OUTPUT
05/09/23

相关问题