IBM Data Studio Developer V1.2 內建 Unified Debugger 客戶端,支援對 SQL 存儲過程進行除錯。如果您習慣在 Eclipse 平台上調試應用程式,會發現調試 DB2 SQL 存儲過程的流程非常相似。本文將示範如何利用 Data Studio Developer V1.2 的除錯功能,對一個 DB2 for z/OS 的原生 SQL 存儲過程進行調試。文中的大部分步驟同樣適用於 DB2 for Linux、UNIX、Windows 以及 DB2 for i 上的 SQL 存儲過程。範例存儲過程專為 DB2 for z/OS V9 設計。
為了最大程度受益於本文,您應熟悉使用 IBM Data Studio Developer 建立資料庫連線、操作資料表與存儲過程等資料庫物件。快速上手的好方法是下載試用版並完成其教學系列。
DB2 for z/OS 提供兩種 IBM 除錯器技術:
兩者主要差異在於 Unified Debugger 同時支援 Java 與 SQL 過程除錯,並持續支援巢狀過程呼叫的調試。本文專注於 Unified Debugger。
本文建立的存儲過程以原生 SQL 撰寫,輸入商品 ID,利用 PRODUCT 表中儲存的成本、運費與客戶付款資訊計算利潤,並將結果寫回 PRODUCT 表的 PROFIT 欄位。
以下 DDL 用於建立並填充 PRODUCT 表,若要驗證過程中的 SQL 語句,請先執行此腳本。
CREATE TABLE ADMF001.PRODUCT (
ITEM VARCHAR(6) NOT NULL,
COST DECIMAL(8,2),
SHIPPING DECIMAL(8,2),
PAYMENT DECIMAL(8,2),
PROFIT DECIMAL(8,2)
);
INSERT INTO ADMF001.PRODUCT (ITEM, COST, SHIPPING, PAYMENT)
VALUES ('001', 100.00, 19.99, 150);
INSERT INTO ADMF001.PRODUCT (ITEM, COST, SHIPPING, PAYMENT)
VALUES ('002', 80, 8.99, 99.99);
本節使用「預存程序精靈」產生範例存儲過程的基本框架,再手動加入計算利潤的邏輯,最後學習如何在部署時啟用除錯選項——這是後續調試的前提條件。
若伺服器上已有現成的 SQL 存儲過程,可從 Database Explorer 拖入資料開發專案進行調試,前提是該過程在部署時已啟用除錯選項;否則必須重新部署並勾選「Enable debugging」。
以下步驟建立名為 PROFITUPDATE 的範例存儲過程:
File > New > Data Development Project,精靈會提示指定資料庫連線(若無連線可用連線精靈建立)。New > Stored Procedure 啟動精靈,命名為 PROFITUPDATE,語言選 Native SQL。Statement details 區塊輸入以下 SQL(變數前加冒號定義為主機變數):SELECT COST, SHIPPING, PAYMENT FROM PRODUCT WHERE ITEM = :itemID;:itemID 建立輸入參數 itemID。點擊 Add… 新增輸出參數 itemProfit,模式為 OUT,型別 DECIMAL(8,2)。精靈產生的過程本體不含計算利潤邏輯,需手動修改。為節省時間,可直接貼上以下完整過程本體:
CREATE PROCEDURE PROFITUPDATE (
IN itemID VARCHAR(6),
OUT itemProfit DECIMAL(8, 2)
)
VERSION VERSION1
ISOLATION LEVEL CS
LANGUAGE SQL
ALLOW DEBUG MODE
WLM ENVIRONMENT FOR DEBUG MODE WLMENV1
QUALIFIER ADMF001
COMMIT ON RETURN YES
-- SQL Stored Procedure
-- itemID
-- itemProfit
P1: BEGIN
-- Declare variables
DECLARE itemPayment DECIMAL(8,2) DEFAULT 0.0;
DECLARE total_cost DECIMAL(8,2) DEFAULT 0.0;
P2: BEGIN
DECLARE itemCost DECIMAL(8,2) DEFAULT 0.0;
DECLARE itemShippingFee DECIMAL(8,2) DEFAULT 0.0;
-- Declare cursor
DECLARE cursor1 CURSOR FOR
SELECT COST, SHIPPING, PAYMENT FROM PRODUCT
WHERE ITEM = itemID;
OPEN cursor1;
FETCH cursor1 INTO itemCost, itemShippingFee, itemPayment;
SET total_cost = itemCost + itemShippingFee;
END P2;
SET itemProfit = itemPayment - total_cost;
UPDATE PRODUCT SET PROFIT = itemProfit
WHERE ITEM = itemID;
END P1
儲存後,在 Data Project Explorer 右鍵選擇 Deploy 部署。若建立時已啟用除錯,部署時會自動帶入;否則可在部署精靈的 Routine Options 勾選 Enable debugging。
Unified Debugger 架構包含三大元件:伺服器端、客戶端 與 會話管理程式。客戶端與會話管理程式通訊,會話管理程式再與伺服器端交換除錯資訊與請求。會話管理程式扮演中介軟體角色,透過 TCP/IP 協調雙向通訊。
使用除錯器前,必須在網路某處(客戶端、伺服器或其他機器)啟動會話管理程式進程。若未正確設定,Data Studio Developer 會提示「會話管理程式不可用」,導致無法使用 Unified Debugger。
本文採用最簡單的方式:在客戶端機器上啟動會話管理程式。
db2dbgm.bat(路徑:[DS install directory]\dsdev\bin)。db2dbgm.bat,記下輸出的主機 IP 與埠號(預設閒置逾時 50 分鐘,可編輯批次檔調整)。Window > Preferences,展開 Run/Debug > DB2 Stored Procedure Debugger,選擇 Use already running session manager 並填入剛才記下的 IP 與埠號。注意:請保持會話管理程式視窗開啟,關閉視窗會終止會話。
在同一偏好設定頁面可調整兩項常用選項:
0(關閉伺服器端診斷追蹤)。在開始除錯前,可透過 Run Settings 指定執行前/後 SQL、輸入參數值、是否提交變更、DB2 for z/OS 的 Collection ID 等。範例過程最後會更新 PRODUCT 表,為了驗證結果,可在 After Run 分頁輸入 SELECT * FROM PRODUCT,執行後結果會顯示在 Output 視圖。
至此,所有前置作業完成,除錯器將進入原始碼編輯器,您可設定斷點、逐步執行、檢視變數值等,完整體驗 Unified Debugger 的強大功能。下一部分將深入介紹實際除錯操作與進階技巧。