程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> Oracle數據庫 >> Oracle數據庫基礎 >> Oracle:存取器不是參數存取器或列值被截斷

Oracle:存取器不是參數存取器或列值被截斷

編輯:Oracle數據庫基礎
 

最近寫一個vba程序的時候不間歇的出現 「存取器不是參數存取器 」或者「列值被截斷」的錯誤。後來發現對於我等不專業人士,遇到這樣的錯誤還挺e的。下面是綜合各種資料了解到的一些東西。

問題多出現在有乘法或者除法或者其它產生高精度小數的時候,這類錯誤應該是Oracle和vba裡的數據精度不一致導致的,Oracle裡的數據精度為38位,而微軟VB ADO系統的精度最高只能支持28位的精度,導致對接出了問題。具體可見http://support.microsoft.com/?scid=kb;en-us;327557&x=16&y=11

目前兩個解決方案:

1. 不要用Oracle客戶端自帶的 Ole驅動,用微軟的 Old驅動。
Provider=MSDAORA
這個應該是微軟提供的驅動解決了數據連接的問題。這個方法基本上解決了大部分問題,但麻煩在於微軟自帶的驅動不支持Oracle一些功能,比如調用某些存儲過程。

2. 直接改查詢語句,利用trunc和round函數,將所有可能產生高精度數值的結果主動截斷。
select trunc(1.11231234122312, 3) from dual

這個方法是有效的,但是我覺得很奇怪,上面的截斷是用十進制位數,但保存的時候應該是二進制的,十進制的截斷代表什麼意思呢?

 
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved