在脚本中运行SQL查询时抑制消息

时间:2010-12-07 20:08:23

标签: sql oracle shell scripting sqlplus

我正在尝试编写一个简单的查询脚本,它可以让我获取表中的行数。但是我面临着压制各种oracle消息的问题。我感兴趣的只是输出:

这是我的剧本:

#!/usr/bin/ksh
sqlplus /nolog <<EOF
connect user/pswd@databse
set serveroutput on
set heading off
set feedback off
select count(*) from table;
exit;
EOF

我的输出如下:

.desktop% sh sql.ksh 
SQL*Plus: Release 10.2.0.2.0 - Production on Tue Dec 7 12:00:42 2010
Copyright (c) 1982, 2005, Oracle.  All Rights Reserved.
SQL> Connected.
SQL> SQL> SQL> SQL> 
        70
SQL> Disconnected from Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options

我想要的只是没有任何消息的数字70,所以我可以定期将它写入日志等。我知道我可以解析数字,但每次我的查询或模式更改时我都必须更改它。我不能只要求mysqlplus来压制所有这些消息吗?

3 个答案:

答案 0 :(得分:10)

您必须将大写S选项添加到sqlplus

帮助消息(Oracle 11.2.0.4.0附带的sqlplus)指定:

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

类似

$ sqlplus -S /nolog << EOF
connect user/pswd@databse
set serveroutput on
set heading off
set feedback off
exec package.procedure($1); -- procedure that calls DBMS_OUTPUT procedures ...
select 2 from dual;
-- ...
exit;
EOF

只能获取DBMS_OUTPUT缓冲区的输出和select语句的结果。

答案 1 :(得分:7)

您需要使用sqlplus -s进行静音模式

#!/usr/bin/ksh
sqlplus -s /nolog <<EOF
connect user/pswd@databse
set serveroutput on
set heading off
set feedback off
select count(*) from table;
exit;
EOF

答案 2 :(得分:4)

尝试-s标志。如,

sqlplus /s /nolog <<EOF

...