<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

    搜索

    •  

    最新評論

    閱讀排行榜

    校園夢網網絡電話,中國最優秀的網絡電話
    主站蜘蛛池模板: 亚洲va中文字幕| 色猫咪免费人成网站在线观看| 国产区卡一卡二卡三乱码免费| 狠狠热精品免费观看| 亚洲视频免费在线观看| 四虎影院在线免费播放| 国产精品成人啪精品视频免费| 亚洲视频免费播放| 日韩免费观看的一级毛片| 国产日韩精品无码区免费专区国产 | 亚洲一区二区三区免费观看| 国产男女猛烈无遮挡免费网站| a在线视频免费观看在线视频三区 a毛片成人免费全部播放 | 亚洲精品白色在线发布| 国产一级做a爱免费视频| 久久久久久AV无码免费网站下载| 亚洲日韩一区精品射精| 亚洲中文字幕无码永久在线 | 青娱乐免费在线视频| 免费无码一区二区| 亚洲另类图片另类电影| 亚洲国产午夜中文字幕精品黄网站 | sss在线观看免费高清| 91亚洲国产成人久久精品| 亚洲成a人在线看天堂无码| 在线免费观看亚洲| 一区二区三区在线免费观看视频| 亚洲婷婷天堂在线综合| 国产亚洲精品福利在线无卡一| 国产精品成人免费视频网站京东 | 一个人看www免费高清字幕| 色噜噜亚洲男人的天堂| 亚洲av综合av一区| 久久久久亚洲av毛片大| 妞干网在线免费视频| 1000部禁片黄的免费看| 在线观看免费无码视频| 国产AV无码专区亚洲AV琪琪| 国产成人亚洲精品| 久久国产亚洲精品无码| 久久亚洲综合色一区二区三区|