• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • MsSql
  • Mysql
  • oracle
  • MariaDB
  • DB2
  • SQLite
  • PostgreSQL
  • MongoDB
  • Redis
  • Access
  • 数据库其它
  • sybase
  • HBase
您的位置:首页 > 数据库 >DB2 > DB2 基础: 在 DB2 Universal Database 中创建第一个触发器

DB2 基础: 在 DB2 Universal Database 中创建第一个触发器

作者:匿名 字体:[增加 减小] 来源:互联网 时间:2017-06-28

匿名通过本文主要向大家介绍了db2 create database,db2 catalog database,db2 drop database,db2 backup database,db2 restore database等相关知识,希望本文的分享对您有所帮助
</div>

简介

当特定事件在 IBM® DB2® Universal Database™ 数据库中发生时,您就可以激活 触发器来执行其他一些操作。在本文中,您将在触发器的世界里遨游,看看如何通过触发器来增强数据库中的业务规则。您还将学习如何使用 DB2 UDB Version 8.1 的控制中心来帮助您创建一个应用于简单业务场景的简单触发器。

什么是触发器

当一个指定的 SQL 操作(如 DELETE,INSERT,或者是 UPDATE 操作)作用于某张表时,一个定义了一组操作的触发器就可以被激活。触发器并不像参照完整性约束和检查约束那样,我们甚至可以使用对其他表来进行更新。

业务场景

将一项技术应用于真实世界的一个场景总是有益的。出于教学的目的,让我们在一个银行相关环境中研究触发器,在该模拟环境中,我们仅仅建立了一张表。再次强调,这是被简化了的!我们将要做的是,运用触发器来促进银行提供的透支保护。例如,一个银行客户有一个支票帐户(checking account)和一个储蓄帐户(saving account)。当从支票帐户中取款的金额超过了该帐户的余额时,就会发生一次自动的转帐(叫做透支保护),即自动从客户的储蓄帐户转帐过来。当然,这必须符合一定的条件,即储蓄帐户中必须有足够多的钱来补偿透支的金额。

开始

像上面所提及的,我们的银行仅仅包含一张表。在这张表中,我们将存入客户的支票帐户和储蓄帐户的余额等信息。每个客户通过其社会保险号码来标识。下面是对该表的描述:

表 1. 对 ACCTTABLE 的描述

Column Name Column Type Nullable?
SSN*Varchar(11)NO
LastNameVarchar(30)NO
FirstNameVarchar(30)NO
SavingBalanceDecimal (Precision: 7, Scale: 2)NO
CheckingBalanceDecimal (Precision: 7, Scale: 2)NO
* 表示主键

请使用 DB2 命令行处理器为上面的表创建一个数据库。将数据库命名为 bnkdb。

db2 => create database bnkdb

接下来,连接到该数据库。我假设您已经在您的机器上有了一个用户名为 db2admin, 密码为 db2admin 的帐号。

db2 => connect to bnkdb user db2admin using db2admin

现在,创建 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) 

现在向所创建的表中加入两条记录:

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) 

触发器可以在对表的一次 INSERT、 DELETE 或者 UPDATE 操作 之前或 之后启动。在我们的例子中,您将创建一个在对ACCTTABLE 表执行 UPDATE 操作之前启动的触发器。在触发器术语中,INSERT、 DELETE 或者 UPDATE 这些使得触发器启动的事件被称作 触发事件。触发器的启动是在触发事件之前还是之后则称为触发器的 激活时间。

使用 Control Center 创建触发器

打开 DB2 Control Center 开始创建触发器,展开您创建的数据库(即 bnkdb),鼠标右键点击 Triggers 选项并且选择 Create.....


图 1. 创建触发器
DB2 基础: 在 DB2 Universal Database 中创建第一个触发器

在 Create Trigger 屏幕中,可以指定触发器所在的模式。请选择 DB2ADMIN 模式。记住,触发器是与表相关的,所以我们需要选择相关表的模式。然后请再次选择 DB2ADMIN 模式:


图 2. 选择模式
DB2 基础: 在 DB2 Universal Database 中创建第一个触发器

在同一个屏幕中, 需要指定一个触发器的名字。将触发器命名为 OVERDRAFT。而且,需要指定与该触发器相关的表的名字。这里选择您创建的 ACCTTABLE。


图 3. 选择您创建的表
DB2 基础: 在 DB2 Universal Database 中创建第一个触发器

在 Time to trigger action区域中,选择 Before。


图 4. 选择 Before
DB2 基础: 在 DB2 Universal Database 中创建第一个触发器

在 Operation that causes the trigger to be executed区域中选择 Update of columns 操作并且指定被操作列为 CHECKINGBALANCE:


图 5.
DB2 基础: 在 DB2 Universal Database 中创建第一个触发器

点击 Triggered action标签页来创建该触发器:


图 6. 构建触发器
DB2 基础: 在 DB2 Universal Database 中创建第一个触发器

指定临时变量

DB2 UDB 能够跟踪在启动触发器的那条语句之前和之后的一行的状态。请在 Correlation name for the old rows 一栏中填入 OLDROW, 在 Correlation name for the new rows 一栏中填入 NEWROW :


图 7. 指定 NEWROW
DB2 基础: 在 DB2 Universal Database 中创建第一个触发器

图片看不清楚?请点击这里查看原图(大图)。

注意,您也许无法指定其中的一个 correlation name,因为它依赖于引起触发器启动的特定操作和激活时间的组合。例如,假设您的触发器选择的 Time to trigger action 是 Before,触发事件是 DELETE 语句。在这种情况下,我们就无法指定一个 "Correlation name for the new rows"。为什么呢?因为在执行了一个删除操作以后,新行是不存在的。

因为您创建的触发器是在 UPDATE 之前被激活,所以不能编辑 Temporary table for the old rows 和 Temporary table for the new rows选项。

您将注意到,在这种情况下(一个在 UPDATE 之前被激活的触发器),您只能指定触发器针对 每 行而不是针对每个 语句触发。


图 8. 触发器触发于每行
DB2 基础: 在 DB2 Universal Database 中创建第一个触发器

引起触发事件的语句可能会同时影响数据库中的多行。"For each Row" 选项意味着触发器将在每一行被修改时激活。另一方面,"For each statement" 选项("before" 型触发器是不允许的)则意味着触发器定义的操作只在调用一次 SQL 语句后执行一次。

可以点击 Show SQL按钮来看看底层的 SQL 语句到目前为止是什么样子:


图 9. Show SQL 框
DB2 基础: 在 DB2 Universal Database 中创建第一个触发器

构建触发动作

现在该创建触发动作了。我们的业务规则是支票帐户的余额必须低于 0 才能激活该触发器。也就是说,我们需要指定 search-condition 为 NEWROW.CHECKINGBALANCE<0 。我们之所以指定 NEWROW.CHECKINGBALANCE 是因为需要分析在 update 操作之后支票帐户的余额将会是多少。

创建触发器主体

现在我们将要在 Triggered Action 文本区域中替换 triggered-SQL-statement (参见下面)。


图 10. 创建触发器语句
DB2 基础: 在 DB2 Universal Database 中创建第一个触发器

分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • DB2 基础: 在 DB2 Universal Database 中创建第一个触发器
  • 在DB2上建立database Partition

相关文章

  • 2017-06-28DB2 最佳实践: DB2 数据库存储机制
  • 2017-06-28为 Linux 或 UNIX 版本 SAP 安装多个 DB2 9 数据库服务器
  • 2017-06-28Linux3.0系统下安装DB28.2
  • 2017-06-28IBM DB2 Universal Database 的 ETL 解决方案
  • 2017-06-28在数据库应用项目的生命周期中充分利用 DB2 目录视图的最佳实践
  • 2017-05-11DB2编程序技巧 (九)
  • 2017-06-28解决 DB2 UDB Java 存储过程的常见问题(下)
  • 2017-06-28DB2 基础: 如何从 DB2 UDB 系统编目中获得有用的信息
  • 2017-06-28DB2 V9.1新功能:联合体数据库支持两阶段提交
  • 2017-06-28Linux平台下DB2 UDB V8.1的安装与卸载

文章分类

  • MsSql
  • Mysql
  • oracle
  • MariaDB
  • DB2
  • SQLite
  • PostgreSQL
  • MongoDB
  • Redis
  • Access
  • 数据库其它
  • sybase
  • HBase

最近更新的内容

    • 在 WebSphere Federation Server V9.1 中使用联邦过程
    • DB2数据同步方面的经验
    • DB2 最佳实践: 使用 Rational Data Architect V7 实现信息建模(上)
    • 打造更强的Java支持
    • 如何在 SAP 系统中监控和分析 DB2 UDB 性能
    • 数据架构师: 当数据不再受欢迎
    • DB2数据库使用经验漫谈
    • SQL Server 2008与IBM DB2对比
    • DB2新手使用的一些小笔记:新建实例、数据库路径不存在、客户端连接 .
    • DB2数据库归档日志的管理方案简介

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有