<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

    簡(jiǎn)介

    當(dāng)特定事件在 IBM® DB2® Universal Database™ 數(shù)據(jù)庫(kù)中發(fā)生時(shí),您就可以激活 觸發(fā)器來(lái)執(zhí)行其他一些操作。在本文中,您將在觸發(fā)器的世界里遨游,看看如何通過(guò)觸發(fā)器來(lái)增強(qiáng)數(shù)據(jù)庫(kù)中的業(yè)務(wù)規(guī)則。您還將學(xué)習(xí)如何使用 DB2 UDB Version 8.1 的控制中心來(lái)幫助您創(chuàng)建一個(gè)應(yīng)用于簡(jiǎn)單業(yè)務(wù)場(chǎng)景的簡(jiǎn)單觸發(fā)器。

    什么是觸發(fā)器

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

    業(yè)務(wù)場(chǎng)景

    將一項(xiàng)技術(shù)應(yīng)用于真實(shí)世界的一個(gè)場(chǎng)景總是有益的。出于教學(xué)的目的,讓我們?cè)谝粋€(gè)銀行相關(guān)環(huán)境中研究觸發(fā)器,在該模擬環(huán)境中,我們僅僅建立了一張表。再次強(qiáng)調(diào),這是被簡(jiǎn)化了的!我們將要做的是,運(yùn)用觸發(fā)器來(lái)促進(jìn)銀行提供的透支保護(hù)。例如,一個(gè)銀行客戶有一個(gè)支票帳戶(checking account)和一個(gè)儲(chǔ)蓄帳戶(saving account)。當(dāng)從支票帳戶中取款的金額超過(guò)了該帳戶的余額時(shí),就會(huì)發(fā)生一次自動(dòng)的轉(zhuǎn)帳(叫做透支保護(hù)),即自動(dòng)從客戶的儲(chǔ)蓄帳戶轉(zhuǎn)帳過(guò)來(lái)。當(dāng)然,這必須符合一定的條件,即儲(chǔ)蓄帳戶中必須有足夠多的錢來(lái)補(bǔ)償透支的金額。

    開(kāi)始

    像上面所提及的,我們的銀行僅僅包含一張表。在這張表中,我們將存入客戶的支票帳戶和儲(chǔ)蓄帳戶的余額等信息。每個(gè)客戶通過(guò)其社會(huì)保險(xiǎn)號(hào)碼來(lái)標(biāo)識(shí)。下面是對(duì)該表的描述:

    表 1. 對(duì) ACCTTABLE 的描述

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

    請(qǐng)使用 DB2 命令行處理器為上面的表創(chuàng)建一個(gè)數(shù)據(jù)庫(kù)。將數(shù)據(jù)庫(kù)命名為 bnkdb。

    db2 => create database bnkdb

    接下來(lái),連接到該數(shù)據(jù)庫(kù)。我假設(shè)您已經(jīng)在您的機(jī)器上有了一個(gè)用戶名為 db2admin , 密碼為 db2admin 的帳號(hào)。

    db2 => connect to bnkdb user db2admin using db2admin

    現(xiàn)在,創(chuàng)建 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)

    現(xiàn)在向所創(chuàng)建的表中加入兩條記錄:

    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)

    觸發(fā)器可以在對(duì)表的一次 INSERT、 DELETE 或者 UPDATE 操作 之前或 之后啟動(dòng)。在我們的例子中,您將創(chuàng)建一個(gè)在對(duì)ACCTTABLE 表執(zhí)行 UPDATE 操作之前啟動(dòng)的觸發(fā)器。在觸發(fā)器術(shù)語(yǔ)中,INSERT、 DELETE 或者 UPDATE 這些使得觸發(fā)器啟動(dòng)的事件被稱作 觸發(fā)事件。觸發(fā)器的啟動(dòng)是在觸發(fā)事件之前還是之后則稱為觸發(fā)器的 激活時(shí)間。

    使用 Control Center 創(chuàng)建觸發(fā)器

    打開(kāi) DB2 Control Center 開(kāi)始創(chuàng)建觸發(fā)器,展開(kāi)您創(chuàng)建的數(shù)據(jù)庫(kù)(即 bnkdb),鼠標(biāo)右鍵點(diǎn)擊 Triggers 選項(xiàng)并且選擇 Create.....

    圖 1. 創(chuàng)建觸發(fā)器

    在DB2中創(chuàng)建第一個(gè)觸發(fā)器(1)(圖一)

    在 Create Trigger 屏幕中,可以指定觸發(fā)器所在的模式。請(qǐng)選擇 DB2ADMIN 模式。記住,觸發(fā)器是與表相關(guān)的,所以我們需要選擇相關(guān)表的模式。然后請(qǐng)?jiān)俅芜x擇 DB2ADMIN 模式:

    圖 2. 選擇模式

    在DB2中創(chuàng)建第一個(gè)觸發(fā)器(1)(圖二)

    在同一個(gè)屏幕中, 需要指定一個(gè)觸發(fā)器的名字。將觸發(fā)器命名為 OVERDRAFT。而且,需要指定與該觸發(fā)器相關(guān)的表的名字。這里選擇您創(chuàng)建的 ACCTTABLE。

    圖 3. 選擇您創(chuàng)建的表

    在DB2中創(chuàng)建第一個(gè)觸發(fā)器(1)(圖三)

    在 Time to trigger action區(qū)域中,選擇 Before。

    圖 4. 選擇 Before

    在DB2中創(chuàng)建第一個(gè)觸發(fā)器(1)(圖四)

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

    圖 5.

    在DB2中創(chuàng)建第一個(gè)觸發(fā)器(1)(圖五)

    點(diǎn)擊 Triggered action標(biāo)簽頁(yè)來(lái)創(chuàng)建該觸發(fā)器:

    圖 6. 構(gòu)建觸發(fā)器

    在DB2中創(chuàng)建第一個(gè)觸發(fā)器(1)(圖六)

    指定臨時(shí)變量

    DB2 UDB 能夠跟蹤在啟動(dòng)觸發(fā)器的那條語(yǔ)句之前和之后的一行的狀態(tài)。請(qǐng)?jiān)?Correlation name for the old rows 一欄中填入 OLDROW, 在 Correlation name for the new rows 一欄中填入 NEWROW :

    圖 7. 指定 NEWROW

    在DB2中創(chuàng)建第一個(gè)觸發(fā)器(1)(圖七)

    注意,您也許無(wú)法指定其中的一個(gè) correlation name,因?yàn)樗蕾囉谝鹩|發(fā)器啟動(dòng)的特定操作和激活時(shí)間的組合。例如,假設(shè)您的觸發(fā)器選擇的 Time to trigger action 是 Before,觸發(fā)事件是 DELETE 語(yǔ)句。在這種情況下,我們就無(wú)法指定一個(gè) "Correlation name for the new rows"。為什么呢?因?yàn)樵趫?zhí)行了一個(gè)刪除操作以后,新行是不存在的。

    因?yàn)槟鷦?chuàng)建的觸發(fā)器是在 UPDATE 之前被激活,所以不能編輯 Temporary table for the old rows 和 Temporary table for the new rows選項(xiàng)。

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

     

    簡(jiǎn)介

    當(dāng)特定事件在 IBM® DB2® Universal Database™ 數(shù)據(jù)庫(kù)中發(fā)生時(shí),您就可以激活 觸發(fā)器來(lái)執(zhí)行其他一些操作。在本文中,您將在觸發(fā)器的世界里遨游,看看如何通過(guò)觸發(fā)器來(lái)增強(qiáng)數(shù)據(jù)庫(kù)中的業(yè)務(wù)規(guī)則。您還將學(xué)習(xí)如何使用 DB2 UDB Version 8.1 的控制中心來(lái)幫助您創(chuàng)建一個(gè)應(yīng)用于簡(jiǎn)單業(yè)務(wù)場(chǎng)景的簡(jiǎn)單觸發(fā)器。

    什么是觸發(fā)器

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

    業(yè)務(wù)場(chǎng)景

    將一項(xiàng)技術(shù)應(yīng)用于真實(shí)世界的一個(gè)場(chǎng)景總是有益的。出于教學(xué)的目的,讓我們?cè)谝粋€(gè)銀行相關(guān)環(huán)境中研究觸發(fā)器,在該模擬環(huán)境中,我們僅僅建立了一張表。再次強(qiáng)調(diào),這是被簡(jiǎn)化了的!我們將要做的是,運(yùn)用觸發(fā)器來(lái)促進(jìn)銀行提供的透支保護(hù)。例如,一個(gè)銀行客戶有一個(gè)支票帳戶(checking account)和一個(gè)儲(chǔ)蓄帳戶(saving account)。當(dāng)從支票帳戶中取款的金額超過(guò)了該帳戶的余額時(shí),就會(huì)發(fā)生一次自動(dòng)的轉(zhuǎn)帳(叫做透支保護(hù)),即自動(dòng)從客戶的儲(chǔ)蓄帳戶轉(zhuǎn)帳過(guò)來(lái)。當(dāng)然,這必須符合一定的條件,即儲(chǔ)蓄帳戶中必須有足夠多的錢來(lái)補(bǔ)償透支的金額。

    開(kāi)始

    像上面所提及的,我們的銀行僅僅包含一張表。在這張表中,我們將存入客戶的支票帳戶和儲(chǔ)蓄帳戶的余額等信息。每個(gè)客戶通過(guò)其社會(huì)保險(xiǎn)號(hào)碼來(lái)標(biāo)識(shí)。下面是對(duì)該表的描述:

    表 1. 對(duì) ACCTTABLE 的描述

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

    請(qǐng)使用 DB2 命令行處理器為上面的表創(chuàng)建一個(gè)數(shù)據(jù)庫(kù)。將數(shù)據(jù)庫(kù)命名為 bnkdb。

    db2 => create database bnkdb

    接下來(lái),連接到該數(shù)據(jù)庫(kù)。我假設(shè)您已經(jīng)在您的機(jī)器上有了一個(gè)用戶名為 db2admin , 密碼為 db2admin 的帳號(hào)。

    db2 => connect to bnkdb user db2admin using db2admin

    現(xiàn)在,創(chuàng)建 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)

    現(xiàn)在向所創(chuàng)建的表中加入兩條記錄:

    >

    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)

    觸發(fā)器可以在對(duì)表的一次 INSERT、 DELETE 或者 UPDATE 操作 之前或 之后啟動(dòng)。在我們的例子中,您將創(chuàng)建一個(gè)在對(duì)ACCTTABLE 表執(zhí)行 UPDATE 操作之前啟動(dòng)的觸發(fā)器。在觸發(fā)器術(shù)語(yǔ)中,INSERT、 DELETE 或者 UPDATE 這些使得觸發(fā)器啟動(dòng)的事件被稱作 觸發(fā)事件。觸發(fā)器的啟動(dòng)是在觸發(fā)事件之前還是之后則稱為觸發(fā)器的 激活時(shí)間。

    使用 Control Center 創(chuàng)建觸發(fā)器

    打開(kāi) DB2 Control Center 開(kāi)始創(chuàng)建觸發(fā)器,展開(kāi)您創(chuàng)建的數(shù)據(jù)庫(kù)(即 bnkdb),鼠標(biāo)右鍵點(diǎn)擊 Triggers 選項(xiàng)并且選擇 Create.....

    圖 1. 創(chuàng)建觸發(fā)器

    在DB2中創(chuàng)建第一個(gè)觸發(fā)器(1)(圖一)

    在 Create Trigger 屏幕中,可以指定觸發(fā)器所在的模式。請(qǐng)選擇 DB2ADMIN 模式。記住,觸發(fā)器是與表相關(guān)的,所以我們需要選擇相關(guān)表的模式。然后請(qǐng)?jiān)俅芜x擇 DB2ADMIN 模式:

    圖 2. 選擇模式

    在DB2中創(chuàng)建第一個(gè)觸發(fā)器(1)(圖二)

    在同一個(gè)屏幕中, 需要指定一個(gè)觸發(fā)器的名字。將觸發(fā)器命名為 OVERDRAFT。而且,需要指定與該觸發(fā)器相關(guān)的表的名字。這里選擇您創(chuàng)建的 ACCTTABLE。

    圖 3. 選擇您創(chuàng)建的表

    在DB2中創(chuàng)建第一個(gè)觸發(fā)器(1)(圖三)

    在 Time to trigger action區(qū)域中,選擇 Before。

    圖 4. 選擇 Before

    在DB2中創(chuàng)建第一個(gè)觸發(fā)器(1)(圖四)

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

    圖 5.

    在DB2中創(chuàng)建第一個(gè)觸發(fā)器(1)(圖五)

    點(diǎn)擊 Triggered action標(biāo)簽頁(yè)來(lái)創(chuàng)建該觸發(fā)器:

    圖 6. 構(gòu)建觸發(fā)器

    在DB2中創(chuàng)建第一個(gè)觸發(fā)器(1)(圖六)

    指定臨時(shí)變量

    DB2 UDB 能夠跟蹤在啟動(dòng)觸發(fā)器的那條語(yǔ)句之前和之后的一行的狀態(tài)。請(qǐng)?jiān)?Correlation name for the old rows 一欄中填入 OLDROW, 在 Correlation name for the new rows 一欄中填入 NEWROW :

    圖 7. 指定 NEWROW

    在DB2中創(chuàng)建第一個(gè)觸發(fā)器(1)(圖七)

    注意,您也許無(wú)法指定其中的一個(gè) correlation name,因?yàn)樗蕾囉谝鹩|發(fā)器啟動(dòng)的特定操作和激活時(shí)間的組合。例如,假設(shè)您的觸發(fā)器選擇的 Time to trigger action 是 Before,觸發(fā)事件是 DELETE 語(yǔ)句。在這種情況下,我們就無(wú)法指定一個(gè) "Correlation name for the new rows"。為什么呢?因?yàn)樵趫?zhí)行了一個(gè)刪除操作以后,新行是不存在的。

    因?yàn)槟鷦?chuàng)建的觸發(fā)器是在 UPDATE 之前被激活,所以不能編輯 Temporary table for the old rows 和 Temporary table for the new rows選項(xiàng)。

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

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

    只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


    網(wǎng)站導(dǎo)航:
     
    <2025年5月>
    27282930123
    45678910
    11121314151617
    18192021222324
    25262728293031
    1234567




    常用鏈接

    留言簿(10)

    隨筆分類(95)

    隨筆檔案(97)

    文章檔案(10)

    相冊(cè)

    J2ME技術(shù)網(wǎng)站

    java技術(shù)相關(guān)

    mess

    搜索

    •  

    最新評(píng)論

    閱讀排行榜

    校園夢(mèng)網(wǎng)網(wǎng)絡(luò)電話,中國(guó)最優(yōu)秀的網(wǎng)絡(luò)電話
    主站蜘蛛池模板: 曰批全过程免费视频在线观看无码| 美女内射无套日韩免费播放 | 国产乱子伦片免费观看中字| 看成年女人免费午夜视频| 国产亚洲AV夜间福利香蕉149| 日韩电影免费观看| 亚洲国产成人综合精品| 不卡精品国产_亚洲人成在线| 0588影视手机免费看片| 免费夜色污私人影院网站| 久久亚洲日韩看片无码| 国产免费久久精品久久久| 久久国产精品免费视频| 久久久亚洲精华液精华液精华液 | 亚洲色大成网站www| 亚洲精品一品区二品区三品区| 青娱乐免费在线视频| 男女拍拍拍免费视频网站| 国产成人亚洲精品| 国产精品亚洲片在线观看不卡 | 色网站在线免费观看| 99久久亚洲精品无码毛片| 国产视频精品免费| 黄色成人免费网站| 久久一区二区免费播放| 亚洲综合在线一区二区三区| 亚洲国产日韩在线视频| 九月婷婷亚洲综合在线| 可以免费看黄的网站| 任你躁在线精品免费| 国产成人综合亚洲| 精品国产成人亚洲午夜福利| 亚洲AV人人澡人人爽人人夜夜| 又粗又大又猛又爽免费视频| 中文字幕av无码无卡免费| 久热免费在线视频| 你懂的免费在线观看| 成人精品综合免费视频| 久久精品国产亚洲av品善| 亚洲精品福利你懂| 亚洲成a人片7777|