程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> DB2數據庫 >> DB2教程 >> 用 Data Studio Developer 在 DB2 z/OS 上調試存儲過程,第 1 部分

用 Data Studio Developer 在 DB2 z/OS 上調試存儲過程,第 1 部分

編輯:DB2教程

簡介

IBM Data Studio Developer V1.2 包含一個 UnifIEd Debugger 客戶機,支持調試 SQL 存儲過程。如果您熟悉用 Eclipse 平台調試應用程序,會發現調試 DB2 SQL 過程的步驟是很相似的。在本文中,介紹如何使用 IBM Data Studio Developer V1.2 中的調試特性調試一個示例 DB2 for z/OS SQL 存儲過程。本文中的許多步驟也可以應用於在 DB2 for Linux®, UNIX®, and Windows® 和 DB2 for i 上創建的 SQL 存儲過程。本文中使用的示例存儲過程專門針對 DB2 for z/OS v9。

要想從本文獲得最大收益,您應該熟悉使用 IBM Data Studio Developer 創建數據庫連接以及操作表和存儲過程等數據庫對象。熟悉 IBM Data Studio Developer 的好方法是下載試用版並閱讀它的教程系列。

了解不同 DB2 版本中的調試器技術

DB2 for z/OS 有兩種 IBM 調試器技術:

老式技術稱為 SQL Debugger,支持 DB2 for z/OS V8(包含與 LUW V8 FP7 同時發布的 V8 PTF UK03933)。它只為外部 SQL 存儲過程提供調試器支持。

Unified Debugger 是最新的調試器技術,支持 DB2 for z/OS V8(包含與 DB2 for Linux, UNIX, and Windows V9 FP2 同時發布的 PTF UK25860)和 DB2 for z/OS V9。對於 DB2 for z/OS V8,可以使用 UnifIEd Debugger 調試外部 SQL 存儲過程。但是,對於 DB2 for z/OS V9,它支持調試 Java 存儲過程、原生 SQL 過程和外部 SQL 存儲過程。

這兩種技術之間的主要差異是,UnifIEd Debugger 同時支持調試 Java 和 SQL 過程,而且繼續支持調試嵌套的過程調用。本文討論 UnifIEd Debugger。

准備示例表

本文中創建的存儲過程是用原生 SQL 編寫的,以商品 ID 作為輸入,使用 PRODUCT 表中存儲的成本、送貨費用和客戶付款信息計算商品的利潤。存儲過程的輸出稱為 PROFIT,這一數據被存儲回 PRODUCT 表。

清單 1 給出創建和填充 PRODUCT 表所需的 DDL。如果希望檢驗過程中的 SQL 語句,需要先運行這個 DDL。

清單 1. 創建示例 product 表的 DDL

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); 
 

創建和部署存儲過程

在本節中,使用 Stored Procedure 向導生成示例存儲過程的簡單版本。需要修改生成的存儲過程,添加計算利潤的邏輯。然後,學習如何指定在啟用調試選項的情況下部署存儲過程。如果不這樣做,就無法調試存儲過程。

創建過程

調試現有的存儲過程

如果在服務器上有任何現有的 SQL 存儲過程,那麼可以把它從 Database Explorer 拖入數據開發項目中,然後進行調試。但是,需要確保存儲過程為調試做好了准備,這意味著存儲過程在部署時要啟用調試選項。

如果存儲過程在部署時沒有 啟用調試選項,就無法調試它;必須選擇 Enable debugging 並再次部署它。

按照以下步驟創建名為 PROFITUPDATE 的示例存儲過程:

首先,在 Data Studio Developer 中使用 DB2 for z/OS 數據庫連接創建一個新的數據開發項目。選擇 File > New > Data Development Project。向導要求指定一個數據庫連接。如果還沒有數據庫連接,那麼可以使用數據庫連接向導創建一個 DB2 for z/OS 數據庫連接。

圖 1. 選擇數據庫連接
用 Data Studio Developer 在 DB2 z/OS 上調試存儲過程,第 1 部分

接下來,使用 New Stored Procedure 向導創建一個 SQL 存儲過程。可以右鍵單擊剛才創建的項目,選擇 New > Stored Procedure(見圖 2),從而啟動 New Stored Procedure 向導。把存儲過程命名為 PROFITUPDATE 並指定原生 SQL 作為它的語言。

圖 2. 創建新的 SQL 存儲過程
用 Data Studio Developer 在 DB2 z/OS 上調試存儲過程,第 1 部分

在 SQL Statements 頁面上,在 Statement details 框中添加清單 2 所示的 SQL 語句。注意,變量名前面有一個冒號 (:),這把它定義為主機變量。

清單 2. PROFITUPDATE 存儲過程的 SQL 語句

SELECT COST, SHIPPING, PAYMENT FROM PRODUCT 
  WHERE ITEM = :itemID; 


圖 3. SQL Statements 頁面
用 Data Studio Developer 在 DB2 z/OS 上調試存儲過程,第 1 部分

單擊 Validate 按鈕檢查 SQL 語法。如果語法有錯誤,它會在把語句寫入過程之前指出錯誤。另外,它還幫助格式化 SQL 語句。圖 3 給出檢查之後語句的樣子。單擊 Next。

在 Parameters 頁面上(圖 4),會注意到已經基於主機變量 :itemID 創建了輸入變量 itemID。在這個頁面上,可以修改現有的參數、添加新參數和刪除不再需要的參數。

圖 4. Parameters 頁面
用 Data Studio Developer 在 DB2 z/OS 上調試存儲過程,第 1 部分

現在,必須通過單擊 Add… 按鈕添加第二個參數(輸出參數)。這個參數名為 itemProfit,模式為 OUT。類型為 Decimal (8,2),見圖 5。單擊 OK。

圖 5. 添加參數
用 Data Studio Developer 在 DB2 z/OS 上調試存儲過程,第 1 部分

在向導的 Deploy Options 頁面上,可以通過選中 Enable debugging 復選框啟用調試,見圖 6。單擊 Finish。

圖 6. 確保選中 Enable debugging 復選框
用 Data Studio Developer 在 DB2 z/OS 上調試存儲過程,第 1 部分

現在,應該會在圖 6-1 所示的編輯器中打開創建的存儲過程。

圖 6-1. 生成的過程
用 Data Studio Developer 在 DB2 z/OS 上調試存儲過程,第 1 部分

查看原圖(大圖)

在查看源代碼時,會注意到它不包含計算利潤的邏輯。需要修改存儲過程的過程體,添加這種邏輯。為了節省時間,可以復制並粘貼清單 3 所示的示例過程體。

清單 3. 計算利潤的存儲過程

   
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 

單擊 Save 保存存儲過程。現在要部署存儲過程了。

部署存儲過程

為了部署存儲過程,在 Data Project Explorer 中右鍵單擊過程並選擇 Deploy。因為前面在創建這個過程時啟用了調試,它在部署時會啟用調試選項。如果還沒有啟用調試選項,仍然可以在部署向導的 Routine Options 部分中選中 Enable debugging 復選框(圖 7)。

圖 7. Deploy Routines 向導中的 Enable debugging 選項
用 Data Studio Developer 在 DB2 z/OS 上調試存儲過程,第 1 部分

設置調試器會話管理程序

在調試存儲過程之前,了解調試器框架會有幫助。UnifIEd Debugger 有三個組件:服務器、客戶機和會話管理程序,見圖 8。在這個框架中,客戶機與會話管理程序通信,會話管理程序與服務器通信,從而交換調試信息和請求。

圖 8. UnifIEd Debugger 框架
用 Data Studio Developer 在 DB2 z/OS 上調試存儲過程,第 1 部分

查看原圖(大圖)

可以看出會話管理程序非常重要,它是一個中間件,負責通過 TCP/IP 連接協調客戶機和服務器之間的通信。在使用調試器之前,需要在網絡上某個地方(客戶機、服務器或其他地方)啟動會話管理程序進程。如果還沒有正確地設置它,那麼由於會話管理程序不可用,在使用 IBM Data Studio Developer 時會遇到問題(圖 9),因此無法使用 UnifIEd Debugger。

圖 9. 會話管理程序不可用
用 Data Studio Developer 在 DB2 z/OS 上調試存儲過程,第 1 部分

如果在環境中的服務器上運行會話管理程序,就不需要在客戶端做任何設置。但是,服務器端設置很復雜(尤其是在 z/OS 環境中),所以本文只關注在客戶端上使用調試器,服務器端設置留到另一篇文章中討論。

如果會話管理程序不在本地運行,應該怎麼辦?

如果會話管理程序在網絡上的某個地方運行,那麼仍然可以使用本節描述的步驟,但是需要找到駐留它的服務器上的 db2dbgm.bat。

使用會話管理程序的最簡便方法是在客戶機上運行它,然後配置 debugger Preferences 頁面。在客戶機上運行會話管理程序的步驟如下:

找到 Data Studio Developer v1.2 附帶的會話管理程序。這個文件名為 db2dbgm.bat。它位於以下目錄中:

[DS install directory] \dsdev\bin 

在命令提示窗口中執行 db2dbgm.bat。它會提供一個主機 IP 地址和端口號,您應該記住它們。它的設置還包括超時信息。圖 10 所示的 db2dbgm.bat 示例輸出表明,如果會話管理程序空閒了 50 分鐘,它就會超時。(指定零值表示沒有會話管理程序超時)。可以通過編輯 db2dbgm.bat 修改空閒時間和端口號。

圖 10. 啟動會話管理程序並獲得 IP 地址和端口號
用 Data Studio Developer 在 DB2 z/OS 上調試存儲過程,第 1 部分

查看原圖(大圖)

既然已經得到了正在運行的會話管理程序的 IP 地址和端口號,就需要在調試器首選項的會話管理程序部分中輸入這些信息:

選擇 Window>Preferences…。

在 Run/Debug > DB2 Stored Procedure Debugger 下面找到 debugger preferences 頁面。

單擊 debugger preferences 頁面上的 Use already running session manager 單選按鈕,輸入前面記下的 IP 地址和端口號。


圖 11. 在首選項中指定會話管理程序的 IP 地址和端口號
用 Data Studio Developer 在 DB2 z/OS 上調試存儲過程,第 1 部分

查看原圖(大圖)

注意:不要關閉會話管理程序窗口,因為這會結束會話管理程序會話。因此,應該繼續調試並讓會話管理程序窗口在後台運行。

設置其他調試器首選項

除了會話管理程序之外,還可以在開始調試之前配置其他調試器首選項。本節簡要介紹其中兩個選項,見圖 12。

圖 12. DB2 存儲過程調試器首選項
用 Data Studio Developer 在 DB2 z/OS 上調試存儲過程,第 1 部分

Inactivity setting:在讓調試器停在一個斷點上時,如果不執行任何進一步的調試操作,就認為調試是空閒的。為了避免無限期地持有服務器資源,調試器假設在經過指定的無活動時間段之後應該結束調試,讓過程自動地運行完。可以在 Debugger preference 頁面上指定調試器的無活動時間長度。默認值是 300 秒。

Error trace setting:為了幫助判斷問題,IBM 服務代表可能要求您在服務器上啟用診斷跟蹤。值 2 在 DB2 服務器上啟用完整的診斷跟蹤。除非 IBM 服務代表明確要求啟用服務器診斷跟蹤,否則應該保持這個設置為 0(零)。

可選:在進行調試之前設置運行設置

最後,作為開始調試之前的最後一個可選步驟,指定應用於本次運行的設置,包括:

指定在調試之前或之後運行的某些 SQL 語句(對這些語句不進行調試)

設置一個輸入參數值

指定是否把更改提交到數據庫

為 DB2 for z/OS 連接設置集合 ID

示例存儲過程在最後更新 PRODUCT 表。為了檢查更新,可以用一個運行後語句顯示對 PRODUCT 表執行 SELECT 語句的結果。本節介紹具體做法。

在 Data Project Explorer 中右鍵單擊存儲過程並選擇 Run Settings,打開 Run Settings 對話框,見圖 13。

圖 13. Run settings 菜單
用 Data Studio Developer 在 DB2 z/OS 上調試存儲過程,第 1 部分

Run settings 窗口有多個選項卡。選擇 After Run 選項卡並輸入 select * from PRODUCT 語句,見圖 14。

圖 14. Run settings 對話框窗口
用 Data Studio Developer 在 DB2 z/OS 上調試存儲過程,第 1 部分

在運行或調試存儲過程之後,會執行這個 SQL 語句。利潤更新的結果會顯示在輸出視圖中。

注意:在 Run Settings 對話框中,還可以在 Parameter Values 選項卡中指定參數值。但是,如果不在這裡指定,在調試過程中仍然有機會指定參數值。

開始調試

現在,已經完成了所有設置活動,可以開始調試存儲過程了。

開始調試的方法是在 Data Project Explorer 中右鍵單擊存儲過程名,然後選擇 Debug…,見圖 15。

圖 15. 在 Data Project Explorer 中從過程啟動調試器
用 Data Studio Developer 在 DB2 z/OS 上調試存儲過程,第 1 部分

調試器首先啟動標准的 Eclipse 調試配置頁面,見圖 16。所有配置項都預先設置了。單擊 Debug 繼續。

圖 16. 調試配置頁面
用 Data Studio Developer 在 DB2 z/OS 上調試存儲過程,第 1 部分

因為示例存儲過程有一個輸入變量,所以調試器會打開 Specify Parameter Values 對話框,可以在其中輸入參數值。如果前面在 Run Settings 對話框中輸入了參數值,這個值會再次顯示出來,可以檢查或修改它。

圖 17. Specify Parameter Values 對話框
用 Data Studio Developer 在 DB2 z/OS 上調試存儲過程,第 1 部分

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