首页 文章

sqlplus在静默模式下不起作用

提问于
浏览
1

我在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 回答

  • 1

    正确的格式是:

    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

  • 2

    如果要抑制终端输出,可以在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输出将转到您的终端(或者在我的情况下是日志文件) .

相关问题