2017-08-30 18 views
1

雖然我執行查詢,ORA-01797:此操作必須遵循的任何或所有錯誤

select * 
from file_log f 
where F.DCP_SRCE_FILENM_FK in ('ABC','DEF') and 
     F.TRANS_DT>=to_date('08/25/2017','mm/dd/yyyy') and 
     F.TRANS_DT<=('08/30/2017','mm/dd/yyyy') 

正在以下錯誤:

ORA-01797: this operator must be followed by ANY or ALL.

難道大家請幫幫我在寫正確的查詢,以便這個錯誤會去?

回答

2

只需使用date關鍵字和ISO常數:

select * 
from file_log f 
where F.DCP_SRCE_FILENM_FK in ('ABC','DEF') and 
     F.TRANS_DT >= date '2017-08-25' and 
     F.TRANS_DT <= date '2017-08-30'; 

因爲第二恆定缺少to_date()你所得到的錯誤。但是你也可以使用適當的日期常量語法。

+0

to_date也是根據[文檔]指定日期文字的最佳方法:(https://docs.oracle.com/cd/E11882_01/server.112/e41084/sql_elements003.htm#SQLRF51062) 'DATE文字是Oracle數據庫接受TO_DATE表達式代替字符串文字的唯一情況.' – Boneist

2

你缺少TO_DATE

select * 
from file_log f 
where F.DCP_SRCE_FILENM_FK in ('ABC','DEF') and 
     F.TRANS_DT>=to_date('08/25/2017','mm/dd/yyyy') and 
     F.TRANS_DT<=TO_DATE('08/30/2017','mm/dd/yyyy')  -- Missing on this line 

爲什麼它是拋出該異常

的SQL語法分析程序不能識別你打算使用TO_DATE功能,並假設最後一行試圖將F.TRANS_DT與一個(ANY)或兩者(ALL)的值('08/30/2017','mm/dd/yyyy')進行比較,假設查詢應該具有以下語法:

select * 
from file_log f 
where F.DCP_SRCE_FILENM_FK in ('ABC','DEF') and 
     F.TRANS_DT>=to_date('08/25/2017','mm/dd/yyyy') and 
     F.TRANS_DT<= ANY ('08/30/2017','mm/dd/yyyy') 

這是一個語法上有效的查詢。但是,它不會執行,因爲試圖解析F.TRANS_DT <= 'mm/dd/yyyy'比較會導致嘗試隱式地將右側的字符串轉換爲幾乎肯定會失敗的日期,其中ORA-01858: a non-numeric character was found where a numeric was expected。但是SQL解析器已經盡力建議缺少使查詢有效的內容。

相關問題