IBM®
跳转到主要内容
    中国 [选择]    使用条款
 
 
Select a scope: Search for:    
    首页    产品    服务与解决方案     支持与下载    个性化服务    
跳转到主要内容

developerWorks 中国  >  Information Management  >

DB2 Express-C 9 DBA 和开发人员实验教程,快速实验 11,12

创建触发器和用户自定义函数

developerWorks
文档选项

未显示需要 JavaScript 的文档选项


developerWorks 中国网站编辑团队, 编辑, IBM

2008 年 7 月 15 日

触发器是一种数据库对象,当在表上发生数据修改操作时,触发器会自动执行业务逻辑。在本次实验中,我们将使用 Control Center 创建一个触发器,并将用 DWB 创建一个标量用户定义函数。

概要

触发器是一种数据库对象,当在表上发生数据修改操作时,触发器会自动执行业务逻辑。在本次实验中,我们将使用 Control Center 创建一个触发器,并将用 DWB 创建一个标量用户定义函数。





回页首


前提条件





回页首


创建触发器(实验 11)

目标

IBM 为社区提供了 DB2 免费版本 DB2 Express-C,它提供了与 DB2 Express Edition 相同的核心数据特性,为构建和部署应用程序奠定了坚实的基础。

DB2 Express-C

触发器是一种数据库对象,当在表上发生数据修改操作时,触发器会自动执行业务逻辑。在本次实验中,将使用 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 中国网站编辑团。




对本文的评价










回页首


IBM 公司保留在 developerWorks 网站上发表的内容的著作权。未经IBM公司或原始作者的书面明确许可,请勿转载。如果您希望转载,请通过 提交转载请求表单 联系我们的编辑团队。
    关于 IBM 隐私条约 联系 IBM 使用条款