2015-04-17 49 views
0

我們有一個包含複合鍵(varchar(64)和Date)的表。這在我們的其他測試環境中工作得很好,但在我們的驗收測試環境(和數據庫)中,當更新一行時,我們得到一個錯誤,說沒有行受到影響。就我們可以告訴環境中的所有內容而言,數據庫與其他數據庫相同。調用客戶端是.NET(使用ODP.NET),數據庫是Oracle 11g。有任何想法嗎?更新行時導致問題的日期類型的主鍵

+1

可以包含完整的oracle版本(11.nnn)和CREATE TABLE和INSERT INTO語句 – davegreen100

回答

1

Oracle DATE數據類型內部存儲DATE和TIME。如果您使用WHERE子句進行更新,只指定DATE,則時間組件默認爲午夜時間。

因此,由於時間差異,您在WHERE子句中提供更新的DATE可能與表中存儲的DATE不匹配。

我認爲這可能是問題。你能否請你確認一下。

如果你只是想驗證日期組件,而不在它的時間價值,那麼你可以使用TO_CHAR函數只得到它在這裏 -

UPDATE ... SET ... WHERE TO_CHAR( SYSDATE,'DD-MON-YYYY')= '10 -DEC-2014'

+1

Oracle建議「不要使用TO_DATE函數char參數的DATE值。返回的DATE值的前兩位數字可能與原始char不同,具體取決於fmt或缺省日期格式「。 TO_DATE - http://docs.oracle.com/cd/B19306_01/server.102/b14200/functions183.htm – michaos

+0

@michaos我很抱歉。我實際上打算使用TO_CHAR,以便只獲取日期組件作爲字符。我現在修改了評論。謝謝。 – Manish

+0

@Manish忘了提及我們也在使用時間組件。 (事後看來,使用代理可能會更聰明。)無論如何,它必定是導致問題的一些設置,我們無法弄清楚。 – Rubio