developerWorks 中国网站编辑团队, 编辑, IBM
2008 年 7 月 15 日 触发器是一种数据库对象,当在表上发生数据修改操作时,触发器会自动执行业务逻辑。在本次实验中,我们将使用 Control Center 创建一个触发器,并将用 DWB 创建一个标量用户定义函数。
概要
触发器是一种数据库对象,当在表上发生数据修改操作时,触发器会自动执行业务逻辑。在本次实验中,我们将使用 Control Center 创建一个触发器,并将用 DWB 创建一个标量用户定义函数。
前提条件
创建触发器(实验 11)
目标
 | |
IBM 为社区提供了 DB2 免费版本 DB2 Express-C,它提供了与 DB2 Express Edition 相同的核心数据特性,为构建和部署应用程序奠定了坚实的基础。
|
|
触发器是一种数据库对象,当在表上发生数据修改操作时,触发器会自动执行业务逻辑。在本次实验中,将使用 Control Center 创建一个触发器。这个触发器为 SALES 表上的修改(UPDATE)维护一个用于审计的日志。我们将在日志中记录进行修改的用户的 ID 以及修改时间。
步骤
1.打开“控制中心”。
2.对于本次实验,需要创建另一个用于日志记录的表。用以下设置创建一个表:
表名:saleslog
第一列:
名称:userid
数据类型:VARCHAR(128)
其他属性:NOT NULL
第二列:
名称:daytime
数据类型:TIMESTAMP
其他属性:NOT NULL
提示:在“命令编辑器”中使用 CREATE TABLE 语句创建这个表,也可以在“控制中心”中使用“创建表”向导。
3.在“控制中心”中,展开 EXPRESS 数据库文件夹。右击“触发器” (Triggers)文件夹并选择“创建”选项。这时会打开“创建触发器”对话框。
图 1. 打开“创建触发器”对话框
4.在对话框中填写以下信息:
Trigger Schema(触发器模式):您用来登录的用户 ID(这应该是默认设置)
Trigger Name(触发器名称):audit_sales
Table/View Schema(表或视图模式):您用来登录的用户 ID(这应该是默认设置)
Table/View Name(表或视图名称):Sales
Time to trigger action(触发器操作的时间):After
(之后)
Operation that causes the trigger to be executed(导致执行触发器的操作):Update of columns
(更新列)(因为我们希望在更新任何列时都触发这个触发器,所以不指定任何列)
Comment(注释):Logs all update actions on Sales table.
图 2. 设置触发器选项
5.在“已触发操作”选项卡上,选择“语句”( For Each
STATEMENT
)
选项。对于触发的动作,使用以下代码:
清单 1. 创建触发器
WHEN ( 1=1 )
BEGIN ATOMIC
INSERT INTO DB2ADMIN.saleslog (userid, daytime) VALUES (CURRENT USER,
CURRENT TIMESTAMP) ;
END
|
(注意:语句触发器在激活触发器的语句执行完之后执行一次。行触发器指定,每当触发的 SQL 语句影响到一行时,都执行触发的动作。)
图 3. 设置已触发选项
单击“确定”按钮创建触发器。
6.现在应该能够在“控制中心”中的“触发器”文件夹中看到这个触发器。
图 4. 查看创建的触发器
7.查询 saleslog 表,确定其中没有数据。删除其中可能存在的任何数据行(DELETE FROM saleslog)。
8.尝试更新 sales 表中的一个记录。(提示:使用 Command Editor 或 SQL Assist Wizard。)
9.再次查看 saleslog 表的内容。其中有多少个数据行?
创建用户定义函数(实验 12)
目标
DB2 Developer Workbench(DWB)(最新的版本叫做 IBM Data Studio)是一个用来编写存储过程和函数的 IDE。在本次实验中,将用 Data Studio 创建一个标量用户定义函数。这会帮助您了解 Data Studio 并熟悉编写用户定义函数所用的 SQL PL 语言。
前提条件
1.要完成这部分所提到的内容你需要下载并安装 IBM Data Studio。
2.你需要了解 SQL 和数据库函数的基本概念。
步骤
1.打开 Data Studio(提示:可以通过 Start 菜单访问它)。
2.在 Data Project Explorer 窗口中,选择前面创建的项目并选择 Open Project。
3.右键单击 User-Defined Functions 文件夹。选择 New 菜单项。选择 SQL User-Defined Function 菜单项。如果希望在 GUI 向导的带领下完成这个过程,也可以选择 User-Defined Function using Wizard 菜单项。
4.这时应该会打开 Editor 视图,其中包含一个函数的骨架。将代码改为:
清单 2. UDF 创建代码
CREATE FUNCTION booktitle(p_bid INTEGER)
RETURNS VARCHAR(300)
-----------------------------------------------------------------
-- SQL UDF (Scalar)
-----------------------------------------------------------------
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
|
5.右键单击这个函数并选择 Deploy 构建它。
6.单击工具栏中的 Run 按钮运行这个函数。
7.因为这个函数需要一个输入参数,所以会出现一个对话框,要求您为这个参数指定一个值。
输入值 80002。
结果是什么?
再用 1002 试一次。
这一次发生了什么情况?(提示:查看 Output 视图的 Messages 部分。)
8.完成后,关闭 DWB。
参考资源
关于作者  | |  | developerWorks 中国网站编辑团。 |
对本文的评价
|