首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

SQL Server Linked Server 連接 Oracle 元資料不一致錯誤排查

     編輯:Oracle 資料庫相關知識

錯誤現象

SELECT * FROM test..TEST.TEST1
-- 訊息 7356,層級 16
-- OLE DB Provider 'OraOLEDB.Oracle' 回傳元資料不一致:編譯期 DBTYPE 129,執行期 130

根因

Oracle Bug 3117040:查詢無精度定義的資料類型(如 NUMBER 無精度、VARCHAR2 無長度)時,OLE DB Provider 編譯期與執行期推斷的資料類型不一致。

已在 9.2.0.4.10 修正。

解決方案

  1. 升級 Oracle Client/Server 至 9.2.0.4.10 以上。
  2. 規避寫法:Linked Server 查詢的欄位清單中,避免直接選取無精度類型欄位,改用轉換函數明確指定精度:
    SELECT CAST(col AS NUMBER(10,2)), CAST(col2 AS VARCHAR2(100)) FROM ...
  3. 或建立 View 於 Oracle 端預先轉換,Linked Server 查詢 View。

驗證方式

-- 有精度定義的類型不會觸發此 Bug
SELECT col_with_precision FROM oracle_table;

小結

SQL Server 連接 Oracle 時,若遭遇元資料不一致錯誤,優先升級驅動程式;若無法升級,在查詢層面強制轉型規避無精度類型欄位。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved