首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> DB2 資料庫 >> DB2 教學

DB2 基礎:透過 Control Center 建立第一個觸發器——透支保護實戰

     編輯:DB2 教學

前言

觸發器可在資料表發生 INSERT/UPDATE/DELETE 時自動執行預定義邏輯,將業務規則封裝於資料庫層,確保所有應用程式一致遵守。本文以銀行透支保護為例,示範使用 DB2 Control Center 建立 BEFORE UPDATE 觸發器的完整流程。

業務場景與資料模型

客戶擁有支票帳戶與儲蓄帳戶,當支票帳戶提款導致餘額為負,自動從儲蓄帳戶轉入差額(前提是儲蓄餘額足夠)。資料表 ACCTTABLE 結構:

欄位型別說明
SSNVARCHAR(11) PK社會安全號
LastName / FirstNameVARCHAR(30)姓名
SavingBalanceDECIMAL(7,2)儲蓄餘額
CheckingBalanceDECIMAL(7,2)支票餘額

建立測試環境

CREATE DATABASE bnkdb;
CONNECT TO bnkdb USER db2admin USING db2admin;
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
);
INSERT INTO accttable VALUES ('111-11-1111','Bhogal','Kulvir',1500.00,1000);
INSERT INTO accttable VALUES ('222-22-2222','Guy','Someother',2000.00,4000);

使用 Control Center 建立觸發器

  1. 開啟 Control Center,展開資料庫 bnkdb,右鍵 Triggers → Create。
  2. Schema 選 DB2ADMIN,觸發器名 OVERDRAFT,關聯表 ACCTTABLE。
  3. Activation Time:BEFORE;Triggering Event:UPDATE OF CHECKINGBALANCE。
  4. 切換 Triggered Action 分頁:
    • Old Row 相關名:OLDROW;New Row 相關名:NEWROW。
    • Granularity:FOR EACH ROW(BEFORE 僅支援行級)。
  5. 點選 Show SQL 預覽生成語句。

編寫觸發器主體

在 Triggered Action 文字區輸入:

DECLARE overage DECIMAL(7,2);
SET overage = (NEWROW.CHECKINGBALANCE * -1);
IF overage > OLDROW.SAVINGBALANCE THEN
  SIGNAL SQLSTATE '70001' ('Overdraft Protection Unsuccessful');
ELSE
  SET NEWROW.SAVINGBALANCE = OLDROW.SAVINGBALANCE - overage,
      NEWROW.CHECKINGBALANCE = 0;
END IF;

邏輯解析:

  • overage 為支票帳戶透支金額(負值轉正)。
  • 若透支額超過儲蓄餘額,拋出自訂 SQLSTATE 70001,回滾 UPDATE 與觸發器內變更。
  • 否則將儲蓄餘額扣減透支額,支票餘額歸零,實現自動轉帳。

驗證與測試

點選 Close 完成建立。執行測試:

UPDATE accttable SET checkingbalance = -500 WHERE ssn = '111-11-1111';
SELECT * FROM accttable WHERE ssn = '111-11-1111';
-- 結果:checkingbalance = 0.00, savingbalance = 1000.00 (1500 - 500)

進階主題與效能考量

  • 觸發器僅能關聯基底表,視圖需使用 INSTEAD OF 觸發器(DB2 UDB 8.1+ 支援)。
  • 觸發器可調用 UDF,實現如寄送郵件通知等副作用操作。
  • 多應用共用資料庫時,觸發器確保業務規則集中強制執行,避免應用層邏輯不一致。

結語

透過 Control Center 視覺化建立觸發器,配合 SQL PL 靈活表達業務邏輯,即可將透支保護等規則下沉至資料庫層,達成資料完整性與應用解耦的雙重目標。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved