2015-09-10 58 views
0

我有一個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 

在此先感謝。

+1

第二個查詢只能產生零行。 – joop

+0

你的兩個查詢是不同的。您的第二個查詢應返回0行,因爲'batch_num'不能同時爲1000 _和_ 1001 _和_ 1002。它只能有1個值。 – Ben

+0

對不起,我真的很愚蠢,我犯了一個多麼愚蠢的錯誤。謝謝。但是,如果第一個查詢出現問題,請告訴我嗎? –

回答

1
select count(*) 
FROM schema1.emp 
WHERE batch_num in ('1000' ,'1001','1002') stat NOT IN ('NEW','DUPLICATE'); 

第一個查詢是語法不正確,並不會在所有執行。 stat之前有一個AND關鍵字丟失。

select count(*) 
FROM schema1.emp 
WHERE batch_num = '1000' 
AND batch_num = '1001' 
AND batch_num = '1002' 
AND stat <> 'NEW' 
AND stat <> 'DUPLICATE' ; 

第二個查詢將總是返回零行。條件batch_num = '1000' AND batch_num = '1001' AND batch_num = '1002'怎麼會是真的?只有當它是IN,或使用條件擴展它。

+0

謝謝,抱歉,因爲寫這個問題時出現錯誤,但實際查詢中有AND。和第二個查詢的問題,我明白了。 –

相關問題