觸發器為資料庫物件,在資料表發生修改操作 (INSERT/UPDATE/DELETE) 時自動執行業務邏輯。本實驗使用控制中心建立觸發器,針對 SALES 表的 UPDATE 操作維護稽核日誌,記錄修改使用者 ID 與時間戳記。
saleslog:userid VARCHAR(128) NOT NULL, daytime TIMESTAMP NOT NULLCREATE TABLE 或建立表精靈)
audit_salesSalesAFTERUPDATE OF COLUMNS (不指定欄位,任一欄位更新即觸發)Logs all update actions on Sales table.
WHEN (1=1)
BEGIN ATOMIC
INSERT INTO DB2ADMIN.saleslog (userid, daytime)
VALUES (CURRENT USER, CURRENT TIMESTAMP);
END
說明:陳述式觸發器於觸發陳述式執行完後執行一次;列觸發器則每影響一列執行一次。
audit_salessaleslog → 更新 sales 表一筆記錄 → 再查 saleslog 應新增一筆日誌

使用 IBM Data Studio (原 DB2 Developer Workbench) 建立標量 SQL UDF,熟悉 SQL PL 語法與開發流程。
CREATE FUNCTION booktitle(p_bid INTEGER)
RETURNS VARCHAR(300)
SPECIFIC booktitle
F1: BEGIN ATOMIC
DECLARE v_book_title VARCHAR(300);
DECLARE v_err VARCHAR(70);
SET v_book_title = (SELECT title FROM books WHERE p_bid = book_id);
SET v_err = 'Error: The book with ID ' || CHAR(p_bid) || ' was not found.';
IF v_book_title IS NULL THEN
SIGNAL SQLSTATE '80000' SET MESSAGE_TEXT = v_err;
END IF;
RETURN v_book_title;
END
80002 查看結果,再試 1002 觀察錯誤訊息 (Output 視窗 Messages 區)