我有一個shell腳本查詢數據庫並返回計數。以下是代碼。查詢返回錯誤的結果。但是當我運行一些SQL客戶端(SQL工具和SQL Developer)時,結果如預期的那樣。究竟是在shell腳本中相同查詢的行爲不一致的原因是什麼?預期結果爲零,但在shell腳本中返回的值爲4.這應該是select count(*) FROM schema1.emp WHERE batch_num in ('1000' ,'1001','1002')
的結果。不知何故,當我通過shell腳本運行時,缺少條件的第二部分。在shell腳本中sql查詢行爲不一致的原因是什麼?
#!/bin/ksh
run_query() {
(
"$SQLPLUS" -SILENT /NOLOG @/dev/stdin <<EndOfSQL
WHENEVER OSERROR EXIT FAILURE
WHENEVER SQLERROR EXIT FAILURE
CONNECT $USER/[email protected]$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
在此先感謝。
第二個查詢只能產生零行。 – joop
你的兩個查詢是不同的。您的第二個查詢應返回0行,因爲'batch_num'不能同時爲1000 _和_ 1001 _和_ 1002。它只能有1個值。 – Ben
對不起,我真的很愚蠢,我犯了一個多麼愚蠢的錯誤。謝謝。但是,如果第一個查詢出現問題,請告訴我嗎? –