<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    posts - 97,  comments - 93,  trackbacks - 0

    簡介

    當特定事件在 IBM® DB2® Universal Database™ 數據庫中發生時,您就可以激活 觸發器來執行其他一些操作。在本文中,您將在觸發器的世界里遨游,看看如何通過觸發器來增強數據庫中的業務規則。您還將學習如何使用 DB2 UDB Version 8.1 的控制中心來幫助您創建一個應用于簡單業務場景的簡單觸發器。

    什么是觸發器

    當一個指定的 SQL 操作(如 DELETE,INSERT,或者是 UPDATE 操作)作用于某張表時,一個定義了一組操作的觸發器就可以被激活。觸發器并不像參照完整性約束和檢查約束那樣,我們甚至可以使用對其他表來進行更新。

    業務場景

    將一項技術應用于真實世界的一個場景總是有益的。出于教學的目的,讓我們在一個銀行相關環境中研究觸發器,在該模擬環境中,我們僅僅建立了一張表。再次強調,這是被簡化了的!我們將要做的是,運用觸發器來促進銀行提供的透支保護。例如,一個銀行客戶有一個支票帳戶(checking account)和一個儲蓄帳戶(saving account)。當從支票帳戶中取款的金額超過了該帳戶的余額時,就會發生一次自動的轉帳(叫做透支保護),即自動從客戶的儲蓄帳戶轉帳過來。當然,這必須符合一定的條件,即儲蓄帳戶中必須有足夠多的錢來補償透支的金額。

    開始

    像上面所提及的,我們的銀行僅僅包含一張表。在這張表中,我們將存入客戶的支票帳戶和儲蓄帳戶的余額等信息。每個客戶通過其社會保險號碼來標識。下面是對該表的描述:

    表 1. 對 ACCTTABLE 的描述

    Column Name Column Type Nullable? SSN*Varchar(11)NOLastNameVarchar(30)NOFirstNameVarchar(30)NOSavingBalanceDecimal (Precision: 7, Scale: 2)NOCheckingBalanceDecimal (Precision: 7, Scale: 2)NO* 表示主鍵

    請使用 DB2 命令行處理器為上面的表創建一個數據庫。將數據庫命名為 bnkdb。

    db2 => create database bnkdb

    接下來,連接到該數據庫。我假設您已經在您的機器上有了一個用戶名為 db2admin , 密碼為 db2admin 的帳號。

    db2 => connect to bnkdb user db2admin using db2admin

    現在,創建 accttable 表:

    db2 => create table accttable(ssn varchar(30) not null primary key, lastname varchar(30) not null, firstname varchar(30) not null, savingbalance decimal(7,2) not null, checkingbalance decimal(7,2) not null)

    現在向所創建的表中加入兩條記錄:

    db2 => insert into accttable values('111-11-1111','Bhogal','Kulvir',1500.00,1000)
    db2 => insert into accttable values('222-22-2222','Guy','Someother',2000.00,4000)

    觸發器可以在對表的一次 INSERT、 DELETE 或者 UPDATE 操作 之前或 之后啟動。在我們的例子中,您將創建一個在對ACCTTABLE 表執行 UPDATE 操作之前啟動的觸發器。在觸發器術語中,INSERT、 DELETE 或者 UPDATE 這些使得觸發器啟動的事件被稱作 觸發事件。觸發器的啟動是在觸發事件之前還是之后則稱為觸發器的 激活時間。

    使用 Control Center 創建觸發器

    打開 DB2 Control Center 開始創建觸發器,展開您創建的數據庫(即 bnkdb),鼠標右鍵點擊 Triggers 選項并且選擇 Create.....

    圖 1. 創建觸發器

    在DB2中創建第一個觸發器(1)(圖一)

    在 Create Trigger 屏幕中,可以指定觸發器所在的模式。請選擇 DB2ADMIN 模式。記住,觸發器是與表相關的,所以我們需要選擇相關表的模式。然后請再次選擇 DB2ADMIN 模式:

    圖 2. 選擇模式

    在DB2中創建第一個觸發器(1)(圖二)

    在同一個屏幕中, 需要指定一個觸發器的名字。將觸發器命名為 OVERDRAFT。而且,需要指定與該觸發器相關的表的名字。這里選擇您創建的 ACCTTABLE。

    圖 3. 選擇您創建的表

    在DB2中創建第一個觸發器(1)(圖三)

    在 Time to trigger action區域中,選擇 Before。

    圖 4. 選擇 Before

    在DB2中創建第一個觸發器(1)(圖四)

    在 Operation that causes the trigger to be executed區域中選擇 Update of columns 操作并且指定被操作列為 CHECKINGBALANCE:

    圖 5.

    在DB2中創建第一個觸發器(1)(圖五)

    點擊 Triggered action標簽頁來創建該觸發器:

    圖 6. 構建觸發器

    在DB2中創建第一個觸發器(1)(圖六)

    指定臨時變量

    DB2 UDB 能夠跟蹤在啟動觸發器的那條語句之前和之后的一行的狀態。請在 Correlation name for the old rows 一欄中填入 OLDROW, 在 Correlation name for the new rows 一欄中填入 NEWROW :

    圖 7. 指定 NEWROW

    在DB2中創建第一個觸發器(1)(圖七)

    注意,您也許無法指定其中的一個 correlation name,因為它依賴于引起觸發器啟動的特定操作和激活時間的組合。例如,假設您的觸發器選擇的 Time to trigger action 是 Before,觸發事件是 DELETE 語句。在這種情況下,我們就無法指定一個 "Correlation name for the new rows"。為什么呢?因為在執行了一個刪除操作以后,新行是不存在的。

    因為您創建的觸發器是在 UPDATE 之前被激活,所以不能編輯 Temporary table for the old rows 和 Temporary table for the new rows選項。

    您將注意到,在這種情況下(一個在 UPDATE 之前被激活的觸發器),您只能指定觸發器針對 每 行而不是針對每個 語句觸發。

     

    簡介

    當特定事件在 IBM® DB2® Universal Database™ 數據庫中發生時,您就可以激活 觸發器來執行其他一些操作。在本文中,您將在觸發器的世界里遨游,看看如何通過觸發器來增強數據庫中的業務規則。您還將學習如何使用 DB2 UDB Version 8.1 的控制中心來幫助您創建一個應用于簡單業務場景的簡單觸發器。

    什么是觸發器

    當一個指定的 SQL 操作(如 DELETE,INSERT,或者是 UPDATE 操作)作用于某張表時,一個定義了一組操作的觸發器就可以被激活。觸發器并不像參照完整性約束和檢查約束那樣,我們甚至可以使用對其他表來進行更新。

    業務場景

    將一項技術應用于真實世界的一個場景總是有益的。出于教學的目的,讓我們在一個銀行相關環境中研究觸發器,在該模擬環境中,我們僅僅建立了一張表。再次強調,這是被簡化了的!我們將要做的是,運用觸發器來促進銀行提供的透支保護。例如,一個銀行客戶有一個支票帳戶(checking account)和一個儲蓄帳戶(saving account)。當從支票帳戶中取款的金額超過了該帳戶的余額時,就會發生一次自動的轉帳(叫做透支保護),即自動從客戶的儲蓄帳戶轉帳過來。當然,這必須符合一定的條件,即儲蓄帳戶中必須有足夠多的錢來補償透支的金額。

    開始

    像上面所提及的,我們的銀行僅僅包含一張表。在這張表中,我們將存入客戶的支票帳戶和儲蓄帳戶的余額等信息。每個客戶通過其社會保險號碼來標識。下面是對該表的描述:

    表 1. 對 ACCTTABLE 的描述

    Column Name Column Type Nullable? SSN*Varchar(11)NOLastNameVarchar(30)NOFirstNameVarchar(30)NOSavingBalanceDecimal (Precision: 7, Scale: 2)NOCheckingBalanceDecimal (Precision: 7, Scale: 2)NO* 表示主鍵

    請使用 DB2 命令行處理器為上面的表創建一個數據庫。將數據庫命名為 bnkdb。

    db2 => create database bnkdb

    接下來,連接到該數據庫。我假設您已經在您的機器上有了一個用戶名為 db2admin , 密碼為 db2admin 的帳號。

    db2 => connect to bnkdb user db2admin using db2admin

    現在,創建 accttable 表:

    db2 => create table accttable(ssn varchar(30) not null primary key, lastname varchar(30) not null, firstname varchar(30) not null, savingbalance decimal(7,2) not null, checkingbalance decimal(7,2) not null)

    現在向所創建的表中加入兩條記錄:

    >

    db2 => insert into accttable values('111-11-1111','Bhogal','Kulvir',1500.00,1000)
    db2 => insert into accttable values('222-22-2222','Guy','Someother',2000.00,4000)

    觸發器可以在對表的一次 INSERT、 DELETE 或者 UPDATE 操作 之前或 之后啟動。在我們的例子中,您將創建一個在對ACCTTABLE 表執行 UPDATE 操作之前啟動的觸發器。在觸發器術語中,INSERT、 DELETE 或者 UPDATE 這些使得觸發器啟動的事件被稱作 觸發事件。觸發器的啟動是在觸發事件之前還是之后則稱為觸發器的 激活時間。

    使用 Control Center 創建觸發器

    打開 DB2 Control Center 開始創建觸發器,展開您創建的數據庫(即 bnkdb),鼠標右鍵點擊 Triggers 選項并且選擇 Create.....

    圖 1. 創建觸發器

    在DB2中創建第一個觸發器(1)(圖一)

    在 Create Trigger 屏幕中,可以指定觸發器所在的模式。請選擇 DB2ADMIN 模式。記住,觸發器是與表相關的,所以我們需要選擇相關表的模式。然后請再次選擇 DB2ADMIN 模式:

    圖 2. 選擇模式

    在DB2中創建第一個觸發器(1)(圖二)

    在同一個屏幕中, 需要指定一個觸發器的名字。將觸發器命名為 OVERDRAFT。而且,需要指定與該觸發器相關的表的名字。這里選擇您創建的 ACCTTABLE。

    圖 3. 選擇您創建的表

    在DB2中創建第一個觸發器(1)(圖三)

    在 Time to trigger action區域中,選擇 Before。

    圖 4. 選擇 Before

    在DB2中創建第一個觸發器(1)(圖四)

    在 Operation that causes the trigger to be executed區域中選擇 Update of columns 操作并且指定被操作列為 CHECKINGBALANCE:

    圖 5.

    在DB2中創建第一個觸發器(1)(圖五)

    點擊 Triggered action標簽頁來創建該觸發器:

    圖 6. 構建觸發器

    在DB2中創建第一個觸發器(1)(圖六)

    指定臨時變量

    DB2 UDB 能夠跟蹤在啟動觸發器的那條語句之前和之后的一行的狀態。請在 Correlation name for the old rows 一欄中填入 OLDROW, 在 Correlation name for the new rows 一欄中填入 NEWROW :

    圖 7. 指定 NEWROW

    在DB2中創建第一個觸發器(1)(圖七)

    注意,您也許無法指定其中的一個 correlation name,因為它依賴于引起觸發器啟動的特定操作和激活時間的組合。例如,假設您的觸發器選擇的 Time to trigger action 是 Before,觸發事件是 DELETE 語句。在這種情況下,我們就無法指定一個 "Correlation name for the new rows"。為什么呢?因為在執行了一個刪除操作以后,新行是不存在的。

    因為您創建的觸發器是在 UPDATE 之前被激活,所以不能編輯 Temporary table for the old rows 和 Temporary table for the new rows選項。

    您將注意到,在這種情況下(一個在 UPDATE 之前被激活的觸發器),您只能指定觸發器針對 每 行而不是針對每個 語句觸發。

    posted on 2007-08-02 11:24 wqwqwqwqwq 閱讀(355) 評論(0)  編輯  收藏

    只有注冊用戶登錄后才能發表評論。


    網站導航:
     
    <2025年5月>
    27282930123
    45678910
    11121314151617
    18192021222324
    25262728293031
    1234567




    常用鏈接

    留言簿(10)

    隨筆分類(95)

    隨筆檔案(97)

    文章檔案(10)

    相冊

    J2ME技術網站

    java技術相關

    mess

    搜索

    •  

    最新評論

    閱讀排行榜

    校園夢網網絡電話,中國最優秀的網絡電話
    主站蜘蛛池模板: 久久99毛片免费观看不卡| 特级一级毛片免费看| 亚洲免费视频网站| 亚洲精品午夜国产VA久久成人| 国产免费AV片在线观看播放| 亚洲第一页综合图片自拍| 免费国产va在线观看| 久久精品国产亚洲Aⅴ蜜臀色欲| www永久免费视频| 亚洲精品蜜桃久久久久久| 一区二区三区福利视频免费观看| 久久精品国产亚洲AV高清热 | 久久精品免费一区二区| 亚洲成A∨人片在线观看无码| 青娱分类视频精品免费2| 亚洲色大成网站WWW国产| 全免费一级午夜毛片| 免费一级毛片在线播放放视频 | 国产亚洲精品影视在线| 日本免费一区尤物| 国产成人精品免费大全| 亚洲精品成人av在线| 久久精品女人天堂AV免费观看| 久久人午夜亚洲精品无码区| 亚洲色偷偷偷鲁综合| 18女人毛片水真多免费| 亚洲av日韩av永久无码电影| 亚洲最大激情中文字幕| 亚洲香蕉免费有线视频| 免费无遮挡无码视频在线观看 | xxxxx免费视频| 久久人午夜亚洲精品无码区| 国产国拍亚洲精品mv在线观看 | 精品国产免费一区二区| 精品国产呦系列在线观看免费| 亚洲黄色免费网址| 国产免费AV片无码永久免费| 亚洲精品免费观看| 国产精品无码亚洲一区二区三区| 情人伊人久久综合亚洲| 日本特黄特色免费大片|