【发布时间】:2015-12-06 13:03:43
【问题描述】:
我有一个查询数据库并返回计数的 shell 脚本。下面是代码。查询返回错误的结果。但是当我在一些 sql 客户端(SQL 工具和 SQL 开发人员)中运行时,结果符合预期。shell 脚本中相同查询的行为不一致的实际原因是什么?预期结果为零,但在 shell 脚本中返回的值为 4。这应该是 select count(*) FROM schema1.emp WHERE batch_num in ('1000' ,'1001','1002') 的结果。当我通过 shell 脚本运行时,不知何故缺少 where 条件的第二部分。
#!/bin/ksh
run_query() {
(
"$SQLPLUS" -SILENT /NOLOG @/dev/stdin <<EndOfSQL
WHENEVER OSERROR EXIT FAILURE
WHENEVER SQLERROR EXIT FAILURE
CONNECT $USER/$PWD@$MY_SID
SET SERVEROUTPUT OFF;
SET TERMOUT OFF
SET TRIMSPOOL ON
SET PAGESIZE 0
SET LINESIZE 32767
SET FEEDBACK OFF
SET VERIFY OFF
SET TAB OFF
SPOOL /dev/stderr
$1
SPOOL OFF
EndOfSQL
) 3<&1 1<&2 2<&3 3<&-
}
rec_count=$(run_query " select count(*) FROM schema1.emp WHERE batch_num in ('1000' ,'1001','1002') AND stat NOT IN ('NEW','DUPLICATE');")
echo $rec_count
提前致谢。
【问题讨论】:
-
第二个查询只能产生零行。
-
您的两个查询不同。您的第二个查询应返回 0 行,因为
batch_num不能同时为 1000 和 1001 和 1002。它只能有 1 个值。 -
哦,对不起,我犯了一个多么愚蠢的错误。谢谢你。但是你能告诉我第一个查询是否有问题吗?
-
您实际上并没有说出 shell 脚本给您的结果,而不是您在 Toad/SQL Developer 中运行 sql 语句时得到的结果。如果您可以将该信息添加到您的问题中,将会很有帮助。
-
再次抱歉,我已经编辑了问题。
标签: sql oracle shell sqlplus ksh