小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

使用 IBM Data Studio 開發(fā)調(diào)試 DB2 存儲(chǔ)過(guò)程

 WindySky 2009-09-14

2009 年 2 月 10 日

本文主要介紹如何使用 IBM Data Studio 開發(fā)數(shù)據(jù)庫(kù)存儲(chǔ)過(guò)程和 Data Web Services 。 IBM Data Studio 對(duì)數(shù)據(jù)庫(kù)開發(fā)提供了完備的支持,同時(shí)提供了把存儲(chǔ)過(guò)程發(fā)布成 Web Services 的工具。通過(guò)本文,讀者可以學(xué)習(xí)到如何安裝 IBM Data Studio,如何簡(jiǎn)單高效地開發(fā)和調(diào)試數(shù)據(jù)庫(kù)應(yīng)用程序以及如何把它們發(fā)布成 Web Services 。

IBM Data Studio 是一款免費(fèi)的基于 Eclipse 的用于數(shù)據(jù)庫(kù)開發(fā)的工具。 IBM Data Studio 包含了開發(fā)數(shù)據(jù)庫(kù)存儲(chǔ)過(guò)程的所有功能,同時(shí)提供了對(duì) DB2 v9 的 XML 功能的支持。

本文將通過(guò)一個(gè)開發(fā)實(shí)例介紹 IBM Data Studio 是如何幫助我們進(jìn)行存儲(chǔ)過(guò)程開發(fā)的。

項(xiàng)目實(shí)例介紹

在開始使用 IBM Data Studio 之前,讓我們先來(lái)了解一下本文的項(xiàng)目實(shí)例。該項(xiàng)目實(shí)例是一個(gè)簡(jiǎn)化版的軟件開發(fā)管理系統(tǒng)。系統(tǒng)主要管理 User Story 和 Work Item 的信息。 User Story 就是以用戶的角度編寫的業(yè)務(wù)需求,是軟件需要實(shí)現(xiàn)的功能。我們需要記錄 User Story 的具體內(nèi)容和其狀態(tài)。這里的狀態(tài)是指該 User Story 是在草擬狀態(tài)還是完成狀態(tài)。 Work Item 用于記錄軟件開發(fā)的過(guò)程。 Work Item 可以是根據(jù)某個(gè) User Story 編寫的詳細(xì)設(shè)計(jì),也可以是一個(gè)編碼任務(wù),或者是一個(gè) bug 報(bào)告。我們需要記錄其狀態(tài)(未分配,處理中和完成等),結(jié)對(duì)編程人員的 Email 等信息。

本系統(tǒng)應(yīng)該實(shí)現(xiàn)如下功能 ( 未列出所有功能 ):

  1. 創(chuàng)建 User Story 。
  2. 修改 User Story 。
  3. 查詢所有草擬狀態(tài)的 User Story 。
  4. 創(chuàng)建 Work Item 。
  5. 修改 Work Item 。
  6. 查詢屬于某個(gè) User Story 的所有 Work Item 。

為此我們?cè)O(shè)計(jì)了相應(yīng)的數(shù)據(jù)庫(kù)表:USER_STORY 和 WORK_ITEM 。它們的詳細(xì)定義如下表所示:


圖 1. User story 和 Work item 的關(guān)系
圖 1. User story 和 Work item 的關(guān)系

表 1. User Story 的定義
USER_STORY
列名稱 類型 說(shuō)明
id INTEGER 表主鍵。
author VARCHAR 編寫人的 Email 地址。
status CHAR 表示 User Story 的狀態(tài),可以是草擬,完成等值。
txt VARCHAR User Story 的具體內(nèi)容


表 2. Work Item 的定義

WORK_ITEM
列名稱 類型 說(shuō)明
id INTEGER 表主鍵。
user_story_id INTEGER 記錄該 Work Item 對(duì)應(yīng)的 User Story 。
type CHAR 類型,分為:詳細(xì)設(shè)計(jì),編碼任務(wù),bug 報(bào)告。
status CHAR 狀態(tài),分為: 未分配,處理中,完成等。
txt VARCHAR Work Item 的具體說(shuō)明。
primaryStaff VARCHAR 首席工作人員 Email 地址
secondaryStaff VARCHAR 結(jié)對(duì)的開發(fā)人員 Email 地址

為了實(shí)現(xiàn)系統(tǒng)的功能,我們還需要下列存儲(chǔ)過(guò)程 :

  1. I_USER_STORY: 創(chuàng)建 User Story 。
  2. U_USER_STORY: 修改 User Story 。
  3. S_INIT_STORY: 查詢所有草擬狀態(tài)的 User Story 。
  4. I_WORK_ITEM: 創(chuàng)建 Work Item 。
  5. U_WORK_ITEM: 修改 Work Item 。
  6. S_ITEM_OF_STORY: 查詢屬于某個(gè) User Story 的所有 Work Item 。




回頁(yè)首


DB2 存儲(chǔ)過(guò)程開發(fā)

“工欲善其事,必先利其器”。現(xiàn)在我們明確了需求,為了開發(fā)出優(yōu)秀的軟件,我們還需要一個(gè)開發(fā)工具。 IBM Data Studio 就是一款非常好的存儲(chǔ)過(guò)程開發(fā)工具,我們可以從 IBM 官方網(wǎng)站上下載其安裝包。安裝完畢后啟動(dòng) IBM Data Studio,可以看到 IBM Data Studio 的界面主要由四個(gè)區(qū)域組成:

  1. Data Project Explorer中會(huì)列出所有的Data project
  2. Data Explorer中會(huì)列出所有的數(shù)據(jù)庫(kù)連接。
  3. 工作區(qū)用于編輯 SQL 文件和存儲(chǔ)過(guò)程源文件。
  4. Data Output是結(jié)果輸出區(qū),在我們執(zhí)行 SQL 語(yǔ)句后,數(shù)據(jù)庫(kù)返回的結(jié)果會(huì)顯示在該區(qū)域。

圖 2. IBM Data Studio 的主要界面
圖 2. IBM Data Studio  的主要界面

創(chuàng)建數(shù)據(jù)庫(kù)項(xiàng)目

首先創(chuàng)建一個(gè)數(shù)據(jù)庫(kù)連接:

  1. 右鍵單擊Data Explorer中的Connections, 選擇New Connections...,
  2. 在新建數(shù)據(jù)庫(kù)連接向?qū)е校钊霐?shù)據(jù)庫(kù)的信息 : 數(shù)據(jù)庫(kù)地址,端口,用戶名和密碼等,
  3. 單擊Test Connection按鈕來(lái)測(cè)試數(shù)據(jù)庫(kù)連接是否正常,
  4. 單擊Finish按鈕后,一個(gè)新的數(shù)據(jù)庫(kù)連接就創(chuàng)建完畢。我們可以在Data Explorer中看到新建的數(shù)據(jù)庫(kù)連接 DRAG 。

圖 3. 新建數(shù)據(jù)庫(kù)連接
圖 3. 新建數(shù)據(jù)庫(kù)連接

默認(rèn)情況下 IBM Data Studio 不會(huì)記錄連接數(shù)據(jù)庫(kù)的用戶密碼,為了避免每次連接數(shù)據(jù)庫(kù)時(shí)都輸入密碼,我們可以修改相應(yīng)設(shè)置,把數(shù)據(jù)庫(kù)的用戶和密碼存儲(chǔ)在電腦中:

  1. 從菜單上選擇Window > Preferences...,
  2. 在彈出窗口的左邊選定Data節(jié)點(diǎn),
  3. Password information設(shè)置為Persistence Scope

圖 4. 修改密碼保存選項(xiàng)
圖 4. 修改密碼保存選項(xiàng)

接著,我們創(chuàng)建一個(gè)數(shù)據(jù)庫(kù)項(xiàng)目。

  1. 右鍵單擊Data Project Explorer,在彈出菜單上選擇New > Data Development Project。
  2. 輸入項(xiàng)目名稱和 schema 名稱。這里我們輸入 Sample 作為項(xiàng)目的名稱,使用登錄用戶 ID 作為項(xiàng)目的 schema 。
  3. 選擇數(shù)據(jù)庫(kù)連接。您可以創(chuàng)建一個(gè)新連接,也可以使用已有的數(shù)據(jù)庫(kù)連接。這里我們選擇數(shù)據(jù)庫(kù) DRAG 。
  4. 點(diǎn)擊Finish,一個(gè) Data Development Project 就創(chuàng)建完畢了。

展開 Sample 項(xiàng)目,我們可以看到在項(xiàng)目的根目錄下有五個(gè)文件夾,分別用來(lái)存放 SQL 文件,存儲(chǔ)過(guò)程源文件,UDF 源文件,Web Service 文件和 XML 文件。


圖 5. 項(xiàng)目的結(jié)構(gòu)
圖 5. 項(xiàng)目的結(jié)構(gòu)

開發(fā)數(shù)據(jù)庫(kù)對(duì)象

創(chuàng)建完項(xiàng)目,我們就可以開始開發(fā)數(shù)據(jù)庫(kù)對(duì)象了,也就是要編寫建表語(yǔ)句和存儲(chǔ)過(guò)程。為了規(guī)范我們編寫的代碼和提高我們編碼的效率,我們首先要設(shè)置一下模板。

在 IBM Data Studio 中可以很方便地定義 SQL 模板:

  1. 選擇菜單Window > Preferences。
  2. 在彈出的參數(shù)配置頁(yè)面的左側(cè),選擇Data > SQL Editor > Templates

從下圖我們可以看到,IBM Data Studio 給我們提供了一些通用的模板。


圖 6. 通用模板
圖 6. 通用模板

這里我們?cè)俣x一些我們項(xiàng)目中使用的模板。

  1. 點(diǎn)擊New...按鈕,IBM Data Studio 會(huì)彈出一個(gè)模板定義窗口。
  2. 輸入模板的名稱和內(nèi)容 (Pattern) 等。在定義模板內(nèi)容的時(shí)候,需要替換的部分我們稱為變量,變量可以使用 ${} 進(jìn)行定義,例如 ${expression} 。

下面是我們定義的模板的具體內(nèi)容:


清單 1. 創(chuàng)建表的模板

					DROP TABLE ${table_name}
            @
            ----------------------------------------------------------------------------------
            --
            --  Table_Name:     ${table_name}
            --  File Name:      ${table_name}.SQL
            --  Author:         ${user}
            --  Date:           ${date}
            --
            --  Abstract:
            --
            --
            --  MAINTENANCE LOG
            --  who  date        comment
            --  ---  --------    ---------------------------------------------------------------
            -----------------------------------------------------------------------------------
            CREATE TABLE ${table_name}
            (
            )
            @
            --Primary Key
            ALTER TABLE ${table_name}
            ADD     CONSTRAINT ${table_name}_PK
            PRIMARY KEY (${pk} )
            @

 


清單 2. 創(chuàng)建存儲(chǔ)過(guò)程的模板

					DROP SPECIFIC PROCEDURE ${spName}
            @
            CREATE PROCEDURE ${spName} (
            OUT  poGenStatus      INTEGER
            , IN ${piArgu}  VARCHAR(8)
            )
            SPECIFIC ${spName}
            RESULT SETS 0
            LANGUAGE SQL
            ------------------------------------------------------------------------------
            --
            --  Procedure Name : ${spName}
            --  Specific Name:   ${spName}
            --  File Name:       ${spName}.SQL
            --  Author:          ${user}
            --  Date:            ${date}
            --
            --  Abstract:  ${description}
            --
            --
            --  Sample Calls:
            --    call ${spName} (?,'${piArgu}')
            --
            --  MAINTENANCE LOG
            --  who  date      comment
            --  ---  --------  ------------------------------------------------------------
            --  ${user}   ${date}  Initial version
            --
            -------------------------------------------------------------------------------
            BEGIN NOT ATOMIC
            -------------------------------------------------------------
            -- Variables declarations
            -------------------------------------------------------------
            -- Generic Variables
            DECLARE SQLCODE             INTEGER         DEFAULT 0;
            DECLARE SQLSTATE            CHAR(5)         DEFAULT '00000';
            -- Generic handler variables
            DECLARE hSqlcode            INTEGER         DEFAULT 0;
            DECLARE hSqlstate           CHAR(5)         DEFAULT '00000';
            -- error variables
            DECLARE ERR_MISSING_INPUT     INTEGER DEFAULT 34100;
            DECLARE ERR_GENERAL_SQL       INTEGER DEFAULT 1;
            DECLARE ERR_RECORD_EXISTS     INTEGER DEFAULT 4;
            DECLARE ERR_ROW_NOT_FOUND     INTEGER DEFAULT 5000;
            -- Local Variables
            DECLARE vCurrentTimestamp   TIMESTAMP;
            -------------------------------------------------------------
            -- CONDITION declaration
            -------------------------------------------------------------
            -- (80100~80199) SQLCODE & SQLSTATE
            DECLARE sqlReset CONDITION FOR SQLSTATE '80100';
            -------------------------------------------------------------
            -- CURSOR declaration
            -------------------------------------------------------------
            -------------------------------------------------------------
            -- EXCEPTION HANDLER declaration
            -------------------------------------------------------------
            -- Handy Handler
            DECLARE CONTINUE HANDLER FOR sqlReset
            BEGIN NOT ATOMIC
            SET hSqlcode   = 0;
            SET hSqlstate  = '00000';
            SET poGenStatus = 0;
            END;
            -- Generic Handler
            DECLARE CONTINUE HANDLER FOR SQLEXCEPTION, SQLWARNING, NOT FOUND
            BEGIN NOT ATOMIC
            -- Capture SQLCODE & SQLSTATE
            SELECT  SQLCODE, SQLSTATE
            INTO    hSqlcode, hSqlstate
            FROM    SYSIBM.SYSDUMMY1;
            -- Use the poGenStatus variable to tell the procedure what type
            -- of error occurred.  In some cases, it can be assigned to the
            -- poGenStatus variable to be returned to the client.
            CASE hSqlstate
            WHEN '02000' THEN  --row not found
            SET poGenStatus=5000;
            WHEN '42724' THEN  --missing llsp
            SET poGenStatus=3;
            ELSE
            IF (hSqlCode < 0) THEN  --trap only errors, not warnings
            SET poGenStatus=2;
            END IF;
            END CASE;
            END;
            -------------------------------------------------------------
            -- Initialization
            -------------------------------------------------------------
            -- reset all output parameters to NULL
            SET poGenStatus = 0;
            SET ${piArgu} = RTRIM(COALESCE(${piArgu}, ''));
            --------------------
            -- data validation
            --------------------
            IF (${piArgu}  = '') THEN
            SET poGenStatus = ERR_MISSING_INPUT;
            RETURN poGenStatus;
            END IF;
            SET vCurrentTimestamp = CURRENT TIMESTAMP;
            RETURN poGenStatus;
            END
            @

 

現(xiàn)在我們開始編寫代碼。右鍵單擊SQL Scripts文件夾,在彈出菜單中選擇New > SQL or Xquery Script。輸入名稱 USER_STORY,然后單擊Finish。在打開的 USER_STORY.SQL 中,單擊右鍵選擇Content Assist,然后選擇 create table 模板。模板的內(nèi)容被插入到文件中,需要修改的內(nèi)容被高亮顯示。我們依次修改表名和列的信息。在我們修改 SQL 文件的時(shí)候,IBM Data Studio 還在有語(yǔ)法錯(cuò)誤的語(yǔ)句下面顯示一條紅線,真是太棒了!

修改后的代碼如下:


清單 3. 建表語(yǔ)句

					-- <ScriptOptions statementTerminator="@" />
            DROP TABLE USER_STORY
            @
            ----------------------------------------------------------------------------------
            --
            --  Table_Name:     USER_STORY
            --  File Name:      USER_STORY.SQL
            --  Author:         will
            --  Date:           Sep 9, 2008
            --
            --  Abstract:
            --
            --
            --  MAINTENANCE LOG
            --  who  date        comment
            --  ---  --------    ---------------------------------------------------------------
            -----------------------------------------------------------------------------------
            CREATE TABLE USER_STORY
            (
            id  	    INTEGER NOT NULL,    -- 表主鍵。
            author 	 VARCHAR(80),    -- 編寫人的 Email 地址。
            status 	 CHAR(10),       -- 表示 User Story 的狀態(tài),可以是草擬,完成等值。
            txt 	    VARCHAR(500)    --User Story 的具體內(nèi)容
            )
            @
            --Primary Key
            ALTER TABLE USER_STORY
            ADD     CONSTRAINT USER_STORY_PK
            PRIMARY KEY (ID )
            @

 

編寫完建表文件后,我們需要把它裝載到數(shù)據(jù)庫(kù)中。

由于我們?cè)?USER_STORY.SQL 文件中使用 @ 符號(hào)作為分隔符。所以,我們需要在 IBM Data Studio 中把 @ 指定成分隔符。在工作區(qū),單擊右鍵,在彈出菜單中選擇Set Statement Terminator,然后輸入 @ 。

下面,我們開始執(zhí)行我們編寫的 USER_STORY.SQL 文件。右鍵單擊工作區(qū),選擇Run SQL。我們可以在Data Output視圖中看到 Run successful 的消息。

我們來(lái)查詢一下 USER_STORY 表里數(shù)據(jù)。新建一個(gè) query.sql 文件。在 query.sql 文件里鍵入 SELECT * FROM, 這時(shí)我突然忘記了表的名字(有時(shí)候,因?yàn)楸砻L(zhǎng),我們很容易不記得其名字),IBM Data Studio 可以幫助我們找到我們想要的表。首先鍵入 U (我記得表是以 U 開頭的),然后單擊右鍵選擇Content Assist或者使用快捷鍵 Alt+/ 。哦,IBM Data Studio 把所有以 U 開頭的表都列在了彈出框里。我們選擇 USER_STORY 這個(gè)表。然后,我們象執(zhí)行 USER_STORY.SQL 一樣執(zhí)行該語(yǔ)句,可以在 Data Output 視圖中看到,目前表里沒(méi)有任何數(shù)據(jù)。


圖 7. Data Output 視圖
圖 7. Data Output 視圖

Content Assist和模板的幫助下,我們很方便的完成了項(xiàng)目所需要的表和存儲(chǔ)過(guò)程。雖然 IBM Data Studio 也提供了創(chuàng)建存儲(chǔ)過(guò)程的向?qū)?,不過(guò)我更傾向于模板加手動(dòng)修改源文件的方式編寫存儲(chǔ)過(guò)程。您可以選擇您自己喜歡的方式去編寫存儲(chǔ)過(guò)程。

有時(shí)候,我們需要看一下數(shù)據(jù)庫(kù)中某個(gè)存儲(chǔ)過(guò)程的源代碼。我們可以在Database Explorer中,依次打開[database name]> Schemas > Stored Procedures。右鍵單擊存儲(chǔ)過(guò)程,在彈出菜單中選擇Open > With SQL Editor。然后存儲(chǔ)過(guò)程的源代碼就在 IBM Data Studio 中打開了。


圖 8. 打開源代碼
圖 8. 打開源代碼

調(diào)試存儲(chǔ)過(guò)程

我們已經(jīng)編寫完所有的存儲(chǔ)過(guò)程了,測(cè)試人員正在對(duì)這些存儲(chǔ)過(guò)程進(jìn)行測(cè)試,初步結(jié)論是這些存儲(chǔ)過(guò)程運(yùn)行正常。我們非常高興,認(rèn)為開發(fā)工作應(yīng)該是完成了??墒钦?dāng)我們暗自高興的時(shí)候,測(cè)試人員來(lái)找我們了。他們說(shuō),新增 User Story 這塊功能突然出問(wèn)題了,這塊功能在前幾天的測(cè)試都是正常的。這就奇怪了,我們最近沒(méi)有更新過(guò)代碼,為什么原來(lái)可以使用的功能突然就不能用了呢? 大家一邊看著代碼,一邊皺眉---代碼應(yīng)該沒(méi)有問(wèn)題啊。

幸好,IBM Data Studio 為我們提供了非常優(yōu)秀的調(diào)試功能,我們可以像調(diào)試 Java 程序那樣調(diào)試存儲(chǔ)過(guò)程。 在 IBM Data Studio 中針對(duì)存儲(chǔ)過(guò)程設(shè)置斷點(diǎn),單步執(zhí)行,查看存儲(chǔ)過(guò)程運(yùn)行時(shí)的某些變量值都變得非常簡(jiǎn)單。

現(xiàn)在我們就開始調(diào)試出問(wèn)題的存儲(chǔ)過(guò)程 I_USER_STORY 。

  1. Data Project Explorer窗口中,右鍵單擊存儲(chǔ)過(guò)程 I_USER_STORY,選擇Deploy...,
  2. 在彈出的部署向?qū)ы?yè)上選中Enable Debuging選項(xiàng),點(diǎn)擊Finish,把 I_USER_SOTRY 部署到數(shù)據(jù)庫(kù)中,
  3. 使用 SQL 編輯器打開項(xiàng)目中的存儲(chǔ)過(guò)程,雙擊左側(cè)欄設(shè)置斷點(diǎn)。
  4. Data Project Explorer窗口中右鍵單擊存儲(chǔ)過(guò)程,選擇彈出菜單中的Debug...。
  5. IBM Data Studio 詢問(wèn)我們是否使用調(diào)試視圖,選擇Yes。
  6. 在調(diào)試視圖中,我們可以點(diǎn)擊 Debug 窗口中的step into,step over進(jìn)行單步調(diào)試,可以在Variables窗口看到當(dāng)前所有變量的值。

    圖 9. 設(shè)置 debug 選項(xiàng)
    圖 9. 設(shè)置 debug 選項(xiàng)



    圖 10. Debug 視圖
    圖 10. Debug 視圖

通過(guò)單步執(zhí)行,我們很快的就找到了出錯(cuò)的代碼:


清單 4. 出錯(cuò)的代碼

            DECLARE vMaxId      SMALLINT;
            ...
            SELECT MAX(ID)+1 INTO vMaxId FROM USER_STORY;

 

原來(lái),我們把 vMaxId 聲明成 SMALLINT, 然而隨著表 USER_STORY 中數(shù)據(jù)的增加,MAX(ID) 很快就超過(guò)了 SMALLINT 的最大值,這時(shí)我們?cè)侔?MAX(ID) 賦值給 vMaxId,就會(huì)出現(xiàn)溢出的錯(cuò)誤??磥?lái) I_USER_SOTRY 中有一個(gè) bug 。我們應(yīng)當(dāng)把 vMaxId 聲明成 INTEGER 而不是 SMALLINT 。我們把修改后的代碼重新部署到數(shù)據(jù)庫(kù)中后,測(cè)試人員高興的告訴我們,新增 User Story 又重新可用了。

多虧 IBM Data Studio 的調(diào)試功能,使得我們很快的找到并修改了 bug 。

分析存儲(chǔ)過(guò)程性能

我們的系統(tǒng)順利的通過(guò)了功能測(cè)試,接下來(lái)我們要面臨性能測(cè)試的考驗(yàn)了。

在性能測(cè)試時(shí),測(cè)試人員抱怨說(shuō),在查詢 Work Item 的時(shí)候,系統(tǒng)的性能特別差。為了解決性能問(wèn)題,IBM Data Studio 為我們提供了 Visual explain 。 Visual explain 可以幫助我們編寫出高效率的 SQL 語(yǔ)句。這對(duì)于存儲(chǔ)過(guò)程的性能調(diào)優(yōu)非常重要。 IBM Data Studio 可以為我們提供圖形化的執(zhí)行計(jì)劃:在 SQL 編輯器中選中你需要分析的 SQL 語(yǔ)句,單擊右鍵,選擇Visual Explain,然后我們就得到了如下圖所示的 SQL 執(zhí)行計(jì)劃。


圖 11. SQL 執(zhí)行計(jì)劃
圖 11. SQL 執(zhí)行計(jì)劃

通過(guò)查看 Visual Explain,我們得出結(jié)論:由于 WORK_ITEM 表中的數(shù)據(jù)太多,對(duì)全表掃描花費(fèi)太多的時(shí)間,我們應(yīng)該建立合適的索引來(lái)提高性能。建立完索引后,我們?cè)俅螆?zhí)行 Visual Explain ?,F(xiàn)在,其性能就提高了很多。

當(dāng)然,本文中的例子只有兩個(gè)表,略顯簡(jiǎn)單。在實(shí)際項(xiàng)目中,我們往往需要查詢多個(gè)表,查詢條件也會(huì)非常復(fù)雜。通過(guò) Visual Explain 我們可以獲得 SQL 語(yǔ)句是否使用了索引,是否對(duì)某個(gè)表進(jìn)行了多次掃描等信息。這些信息對(duì)優(yōu)化我們的 SQL 語(yǔ)句非常有用。

Data Web Service

我們的系統(tǒng)經(jīng)過(guò)嚴(yán)格的測(cè)試后,終于上線了。用戶對(duì)我們的系統(tǒng)非常滿意。但是他們提出了一個(gè)要求,希望我們的系統(tǒng)可以跟他們另外的一個(gè)業(yè)務(wù)系統(tǒng)進(jìn)行集成。那個(gè)業(yè)務(wù)系統(tǒng)需要獲得 Work Item 的信息,但是它不能直接調(diào)用我們的存儲(chǔ)過(guò)程。經(jīng)過(guò)討論,我們決定把我們的存儲(chǔ)過(guò)程發(fā)布成 Web Service,以方便其業(yè)務(wù)系統(tǒng)的訪問(wèn)。

使用 IBM Data Studio,我們可以很方便的把存儲(chǔ)過(guò)程發(fā)布成 Web Service 。

  • 右鍵單擊項(xiàng)目中的文件夾,選擇New Web Service...。
  • 在彈出的頁(yè)面中輸入 Web Service 名稱 getWorkItem,點(diǎn)擊Finish
  • 把 Stored Procedures 文件夾下的 S_ITEM_OF_STORY 拖到 Web Service 文件夾下的 getWorkItem 上,這樣一個(gè) Web Service 就構(gòu)建完成了。

圖 12. 創(chuàng)建 web service
圖 12. 創(chuàng)建 web service

下面我們把這個(gè) Web Service 到出為 war 包。

  • 右鍵點(diǎn)擊 Web Service 文件夾下的 GetTasks,選擇Build and Deploy...,
  • 在彈出的向?qū)ы?yè)面中,指定 web server 的類型和 web service 的類型,點(diǎn)擊Finish, 完成 war 包的導(dǎo)出。

圖 13. 導(dǎo)出 war 包
圖 13. 導(dǎo)出 war 包




回頁(yè)首


結(jié)束語(yǔ)

文中的例子雖然簡(jiǎn)單,但是包含了開發(fā)存儲(chǔ)的各個(gè)方面??梢钥闯?IBM Data Studio 對(duì)存儲(chǔ)過(guò)程的開發(fā)的支持是非常全面的。

IBM Data Studio 還提供了很多有用的功能,例如:通過(guò)圖形方式生成 SELECT 語(yǔ)句,可以生成存儲(chǔ)過(guò)程的 Unit Test 程序等等。相信讀者在使用 IBM Data Studio 的過(guò)程中會(huì)不斷發(fā)現(xiàn)一些非常有用的功能。希望本文能促使您開始使用 IBM Data Studio,并且享受 IBM Data Studio 給我們帶來(lái)的開發(fā)存儲(chǔ)過(guò)程的便利。






回頁(yè)首


下載

描述 名字 大小 下載方法
本文用到的 SQL 腳本示例 sample.zip 10KB HTTP
關(guān)于下載方法的信息


參考資料

學(xué)習(xí)

獲得產(chǎn)品和技術(shù)


關(guān)于作者

 

常偉是一位工作在 IBM CSDL 的軟件工程師,具有四年的 j2ee 開發(fā)經(jīng)驗(yàn)和三年的 DB2 存儲(chǔ)過(guò)程開發(fā)經(jīng)驗(yàn),目前從事企業(yè)電子商務(wù)應(yīng)用的開發(fā)。您可以通過(guò) changwei@cn.ibm.com 和他聯(lián)系。

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多