科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道在DB2 UDB中使用SQL过程语言来操作触发器

在DB2 UDB中使用SQL过程语言来操作触发器

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

本文将简要介绍为何使用触发器,并用几个例子来阐述如何充分利用这些特性。

来源:IT专家网 2008年6月10日

关键字: IBM 数据库 DB2

  • 评论
  • 分享微博
  • 分享邮件

首先,触发器是与表相关联的对象,它定义了一些在 INSERT、UPDATE 或者是 DELETE 时自动发生的操作。下面是一些可能需要用到触发器的例子:

1.当插入时,在允许插入操作发生之前验证或者操纵数据。
2.当更新时,通过比较新值与原值来验证操作的正确性。如果您用表中的一列来存储状态信息并且希望定义有效的状态转换时,这样做特别有用。
3.执行删除操作之后,自动地将日志信息插入另一个用于审计追踪的表中。

触发器能在数据库层面上可用于集中业务规则的实施,使所有的应用程序和用户不必再去检查数据的有效性。同样地,如果业务规则发生改变,这些改变在数据库层上就被集中了,而不需要通过所有正在执行的应用程序来传播。

例子
为了说明上述功能,下面的例子为一个虚构的饰品公司的数据库创建表和触发器,该数据库保存了公司的订单和客户信息。要求实施以下业务规则:

1.当该饰品公司接到订单时,订单的价格和客户未结帐的物料清单价格的总和不能超过提供给该客户的赊购最高限额。
2.一份订单可以有几种状态:PENDING、CANCELLED、SHIPPED、DELIVERED 和 COMPLETED。只有以下状态转换才是合法的:


PENDING -> SHIPPED -> DELIVERED 
            -> COMPLETED
              
PENDING -> CANCELLED

3.只有当订单被取消后才能删除。同时,我们也要将删除的订单的信息记录到另一表中以备审计之用。

我们将定义下面的表来说明这个例子。

create table customer_t (
    cust_id INT NOT NULL PRIMARY KEY,
    company_name VARCHAR(100),
    credit DECIMAL(10,2))

create table product_t (
    product_id INT NOT NULL PRIMARY KEY,
    product_name VARCHAR(100))

create table orders_t (
    order_id INT NOT NULL PRIMARY KEY,
    cust_id INT NOT NULL,
    product_id INT NOT NULL,
    quantity INT NOT NULL,
    price DECIMAL(10,2) NOT NULL,
    status CHAR(9) NOT NULL,
  FOREIGN KEY (cust_id) REFERENCES customer_t,
  FOREIGN KEY (product_id) REFERENCES product_t)

create table delete_log_t (
      Text varchar(1000))

我们还将定义以下序列对象(DB2 UDB 7.2 中新增的)来生成唯一的 ID:

create sequence cust_seq
create sequence prod_seq
create sequence ord_seq

接下来,我们将插入下列数据:

insert into customer_t values
    (NEXTVAL FOR cust_seq, 'Nancys Widgets', 100)

insert into product_t values
    (NEXTVAL FOR prod_seq, 'Blue Widgets')

最后,我们将创建触发器来实施前面定义的业务逻辑,并解释该过程。

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章