首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> DB2 資料庫 >> DB2 教學

WebSphere Federation Server V9.1 聯邦存儲過程開發指南

     編輯:DB2 教學

聯邦過程簡介

WebSphere Federation Server 使用「昵稱」代理遠程表,聯邦過程則代理遠程存儲過程。創建與調用極簡單:

CREATE PROCEDURE my_fed_proc SOURCE rem_schema.rem_proc FOR SERVER s;
CALL my_fed_proc(3, ?);

為何使用聯邦過程?

存儲過程優勢

  • 性能:減少客戶端-服務端往返,多 SQL 合為一呼叫。
  • 封裝:實現業務邏輯底層。
  • 安全:DBA 可禁止直接訪問表,強制走過程,保障一致性。
  • SQL 語義:共享事務、錯誤、安全模型,簡化開發。

聯邦過程額外優勢

  • 位置透明:單一連接、事務、SQL 語句訪問多源對象。
  • 介面統一:同 DB2 本地過程,共用 SQL 方言、數據類型、結果集處理。
  • 異構支援:調用不同源 (Oracle, Sybase) 過程,聯邦層屏蔽差異(特別是結果集)。
  • 自治性:無需在源端安裝/配置,直接使用現有過程。

替代方案對比

直接用 JDBC 等客戶端介面需自行處理分布式事務、安全、位置感知、異構差異。Web 服務雖解決客戶端庫,仍需處理其餘。聯邦服務器將除客戶端庫外所有層面虛擬化為 SQL 介面。結合 Web 服務提供者可進一步隱藏 SQL 客戶端。

限制事項

  • 支援源:Oracle、Sybase。
  • 不支援 fenced wrapper。
  • 外部 UDF 中調用聯邦過程不可有 READS SQL DATA 或 MODIFIES SQL DATA 存取級別。
  • 僅支援 CALL RESOLUTION IMMEDIATE。
  • Oracle 輸出緩衝區/標準輸出不可見。
  • 參數不支援 LOB。
  • 觸發器、動態複合語句、標量/表/行函數、方法中不可調用 MODIFIES SQL DATA 聯邦過程;發出 SAVEPOINT 後亦不可調用。
  • 遠程過程不可發出 COMMIT/ROLLBACK,否則可能數據不一致。
  • 不支援 ALTER PROCEDURE。
  • Sybase 12.0 所有參數為 IN,無法返回 OUT 值 (12.5+ 無此限制)。
  • 結果集:僅返回第一個;Sybase 同時有 OUT 參數與結果集時丟棄結果集;Sybase 返回狀態固定為 0;不支援 Sybase 游標參數、Oracle REFCURSOR IN 參數;遠程可持有/可捲動游標屬性喪失,返回只讀結果集。

創建聯邦過程語法詳解

CREATE PROCEDURE (Sourced) 支援:

  • 基於 Oracle 函數創建過程,返回值成第一個 OUT 參數 (名為 DEFAULT)。
  • 支援 Oracle 包,SOURCE 三部份名稱中間為包名。
  • Oracle REFCURSOR OUT 參數映射為 DB2 結果集(計入參數數量但不顯示)。
  • 重載過程:同名不同參數數量用 NUMBER OF PARAMETERS;同名同參數數量用 UNIQUE ID (Oracle ALL_ARGUMENTS.OVERLOAD)。
  • 聲明返回結果集:WITH RETURN TO CALLER/CLIENT。
  • 指定存取級別、確定性、外部動作屬性(若與源端衝突報錯 SQL1255N,未指定則取源端值或預設 MODIFIES SQL DATA, NOT DETERMINISTIC, EXTERNAL ACTION)。

結果集處理差異

  • DB2:無需聲明參數,RETURN TO CLIENT 穿透嵌套,RETURN TO CALLER 僅調用者可用。
  • Sybase:一般結果集類似 RETURN TO CLIENT,游標參數僅源端可用。
  • Oracle:所有結果集顯式聲明為 REFCURSOR 參數,需顯式傳遞。
  • 聯邦層用 WITH RETURN TO CALLER/CLIENT 映射語義。

參數與結果集數據類型映射

使用預設轉發類型映射。Oracle 無精度/長度類型映射為最大長度字串或 DOUBLE。可用 CREATE TYPE MAPPING 覆蓋參數映射,但結果集列映射不受影響。

編目視圖

  • SYSCAT.ROUTINES:聯邦過程信息 (源名、遠程過程/模式名)。
  • SYSCAT.ROUTINEPARMS:參數信息(首查)。
  • SYSCAT.ROUTINEOPTIONS:選項值 (源名、參數數量、REFCURSOR 數)。
  • SYSCAT.ROUTINEPARMOPTIONS:參數選項 (遠程參數名/類型)。

調用、權限、刪除

  • 用 CALL 調用,整數返回碼映射至 GET DIAGNOSTICS DB2_RETURN_STATUS (Sybase 僅無結果集時返回)。
  • 需源端 EXECUTE 權限與有效用戶映射(間接調用亦需)。
  • GRANT/REVOKE 控制聯邦過程權限。
  • DROP PROCEDURE 刪除本地編目條目,不影響源端,依賴包失效。

工具支援

  • 控制中心:創建/刪除、授權、發現遠程過程、手工指定屬性。
  • DB2 Workbench:執行控制中心創建的過程,查看狀態、OUT 參數、結果集。

範例場景

券商 XYZ 的 Oracle 包 StockOptions:

  • StockInfo(username IN CHAR) 返回用戶持股結果集 (數量、名稱),Oracle 中常由調用者使用 → 聯邦過程用 WITH RETURN TO CALLER。
  • StockInfo(accountNum IN INTEGER) 返回持股數量、市值、名稱,Oracle 中常傳給客戶端 → 聯邦過程用 WITH RETURN TO CLIENT。

Sybase 過程:StockQuote(stockName IN CHAR, transDate IN DATE) 以 OUT 參數返回報價。Sybase OUT 參數在 DB2 視為 INOUT,調用時可能需提供初始值。

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