2011-12-20 16 views
0

我有一張桌子。它有一個數據類型爲NUMBER(38,20)的列。它是一個id列。 out應用程序生成該id。我正嘗試插入105.00010的id值的記錄。但它只能插入105.0001。我可以知道它爲什麼截斷一個值(0)的原因。它適當地插入從105.00001到105.00009的記錄。插入105.00010時會截斷。請幫幫我。oracle在使用精度保存id後截斷值?

列大小**NUMBER(38,20)**

謝謝!

+3

'105.00010' **正好**與'105.0001'相同。沒有被截斷。 – 2011-12-20 13:08:58

+0

嗨,謝謝你的回覆。現在如果我用105.0001的ID保存記錄,那麼它是否會覆蓋以前的記錄? – user1016403 2011-12-20 13:11:24

+1

當您更新列中的值時,當然以前的值將被覆蓋。你的問題到底是什麼? – 2011-12-20 13:14:11

回答

2

參見下測試用例:

WITH data_values 
    AS (SELECT 105.0001 AS test_val FROM dual 
     UNION ALL 
     SELECT 105.00010 AS test_val FROM dual) 
SELECT test_val, 
     TO_NUMBER(test_val, '999.99999') AS NUM, 
     TO_CHAR(test_val, '999.99999') AS STR 
    FROM data_values; 

結果:

TEST_VAL NUM  STR 
105.0001 105.0001 105.00010 
105.0001 105.0001 105.00010 

最後非零數字後的值是無關緊要到Oracle。你的號碼是相同的。

2

小數點後面的最右邊的零不重要,所以值不會被截斷,它仍然是相同的值。

如果您需要它保持不變,您可能需要將該值視爲varchar2。

+0

感謝您的回覆。我正在查看這個ID在sqldeveloper。這裏看起來好像被截斷了。但同樣我有使用pl/sql開發人員的查詢。我在這裏得到所有的精度。爲什麼sqldeveloper是這樣顯示的?請幫幫我。 – user1016403 2011-12-20 13:30:53

+0

您需要設置默認字符掩碼以在您的SQLDeveloper首選項中顯示數字數據。 – Ollie 2011-12-20 13:35:22

+0

請分享我設置它的步驟嗎?請回復.. – user1016403 2011-12-20 13:36:12