客戶端與OCI編譯:10.2.0.4.0
服務器:Oracle9i企業版發行9.2.0.4.0甲骨文OCI:與日期字段查詢
有問題的查詢是:
SELECT CODIGO FROM LOG WHERE TEL = :telnumber AND DATE_PROC = '05-JUL-08'
表說明:
SQL>describe LOG;
TEL NOT NULL VARCHAR2(15)
CODIGO NOT NULL VARCHAR2(20)
DATE_PROC NOT NULL DATE
簡單,因爲它看起來,當用sqlplus直接在服務器上執行,它會返回一個結果,但如果從應用程序執行的使用OCI,該查詢返回OCI_NO_DATA
總是。在開始時,日期值也是一個佔位符,但是我發現即使給出像'05-JUL-08'
這樣的字面值也不起作用。我曾嘗試以下內容:
- 我試過基本知識:從客戶端查詢數據庫確實有效。這是這一個,讓我的麻煩
下不工作:
SELECT CODIGO FROM LOG WHERE TEL = :telnumber
執行
ALTER SESSION SET NLS_DATE_FORMAT="DD-MM-YYYY";
在服務器端和客戶端的查詢之前。相同的結果:服務器返回數據,客戶OCI_NO_DATA
- 試圖更改
DATE_PROC
格式,結合使用TO_DATE()
。同樣的結果。 - 搜查,搜查,搜查。沒有答案
我有點絕望找到答案,希望有任何幫助,並可根據需要提供更多的細節。謝謝。
--- 更多信息 ---
update log set DATE_PROC = TO_DATE('20080705162918', 'YYYYMMDDHH24MISS') where CODIGO='BancoOne';
我一直在使用TRUNC()和 「改變會話設置NLS_DATE_FORMAT」 嘗試不同的組合......這是我所得到的:
SELECT CODIGO FROM LOG WHERE TEL = 11223344 AND DATE_PROC = TO_DATE('20080705162918', 'YYYYMMDDHH24MISS');
在服務器:返回: 「BancoOne」(物有所值)
在OCI應用:返回OCI_NO_DATA
SELECT CODIGO FROM LOG WHERE TEL = 11223344 AND trunc(DATE_PROC) = TO_DATE('20080705', 'YYYYMMDD');
在服務器:返回:「BancoOne」
在OCI應用:返回「BancoOne」
所以問題是,爲什麼是OCI應用給予不同的結果,如果兩者都訪問同一個數據庫服務器?
此外,澄清OCI應用的目的:它必須由用戶來配置的查詢。這個想法是,根據需要以適合存在於目標DB日期字段的用戶會適應的查詢,這就是爲什麼我不應該包括「改變會話集NLS_DATE_FORMAT」語句在我的代碼,因爲我不知道的日期格式。這樣我想爲用戶提供靈活性,而不依賴於特定的日期格式。這有意義嗎?有什麼建議麼?
嗨Vincent, 查詢的第一個版本是使用TO_DATE()函數。這就是問題的開始。 我的代碼中沒有字母,但我不知道日期的具體格式。關於OCI應用程序的工作原理,我在問題中增加了更多信息。 – AntonioHerraizS 2010-01-15 15:03:04