DB2 9.5 SQL Procedure Developer 认证考试 735 准备,第4部分:触发器
2010-02-18 15:01:13 来源:WEB开发网用触发器处理XML数据
CREATE TRIGGER 可用于针对XML列创建 BEFORE和AFTER UPDATE触发器。此外,您可以针对拥有XML列的表创建 INSERT或DELETE触发器。
针对预定义的XML模式验证XML文档始终是确保数据完整性的优秀实践。BEFORE触发器可以首先自动验证XML文档,然后再更新或插入到带有XML数据类型的列。如果不需要自动验证XML,则可以针对XML列使用BEFORE触发器的WHEN 子句。您可以设置一个条件,这样 XML文档就被设置为 VALIDATED 或者不能由将要激活的触发器执行验证。
清单 7将显示如何创建 BEFORE触发器???从而在将 XML文档插入到purchaseorder表之前先进行验证。该触发器总是在更新 XML文档之前激活的。
注:引用XML模式的任何一个触发器都与该模式存在依赖关系。在引用XML模式之前,必须先在XML模式库中注册该模式。如果稍后从 XML模式库中删除触发器依赖的XML模式,则触发器将被标记为无效。
清单 7. 创建触发器以验证XML文档中的数据CREATE TRIGGER new_order
BEFORE INSERT ON purchaseorder
REFERENCING NEW AS n
FOR EACH ROW
SET (n.porder) = xmlvalidate(n.porder
ACCORDING TOXMLSCHEMA URI 'http://posample.org/order.xsd')
使用SQL PL语句扩展触发器主体
清单 8中的语法图列出了一些 SQL PL语句,可用于扩展触发器主体,从而提供更复杂的逻辑情形:
清单 8. CREATE TRIGGER 的一般语法图(续)
General Syntax Diagram for CREATE TRIGGER cont.
SQL-procedure-statement
|--+-CALL----------------------------------------------+--------|
+-Compound SQL (Dynamic)----------------------------+
+-FOR-----------------------------------------------+
+-+-----------------------------------+--fullselect-+
| | .-,-----------------------. | |
| | V | | |
| '-WITH----common-table-expression-+-' |
+-GET DIAGNOSTICS-----------------------------------+
+-IF------------------------------------------------+
+-INSERT--------------------------------------------+
+-ITERATE-------------------------------------------+
+-LEAVE---------------------------------------------+
+-MERGE---------------------------------------------+
+-searched-delete-----------------------------------+
+-searched-update-----------------------------------+
+-SET Variable--------------------------------------+
+-SIGNAL--------------------------------------------+
'-WHILE---------------------------------------------'
清单 9将演示如何从触发器主体中嵌入 CALL语句,调用存储过程。在本例中,参数是通过值传递给调用的过程 write_audit 的。这个简单示例将演示从触发器调用存储过程的好处。您现在应当能够使用SQL PL语句扩展触发器主体并实现更复杂的逻辑。
清单 9. 从触发器中调用存储过程
CREATE PROCEDURE write_audit( IN p_empno CHAR(6),
IN p_txt CHAR(6),
IN p_salary DECIMAL(9,2),
IN p_user CHAR(8),
IN p_curtime TIMESTAMP )
BEGIn
INSERT INTO audit_emp VALUES ( p_empno, p_txt, p_salary, p_user, p_curtime )
END
CREATE TRIGGER new_emp
AFTER INSERT ON employee
REFERENCING NEW AS n
FOR EACH ROW
CALL write_audit( n.empno, 'Insert', 0.0, current user, current timestamp)
清单 10将演示如何对被插入到数据库的数据实施业务规则。本例将建立 empprojact表的业务规则。示例将引用emendate列并针对被插入到数据库中的数据执行几项业务规则。它还将把 SQLSTATE 的值 90000 赋给 Business Rule Two。这将允许您强行调用处理程序。使用SIGNAL语句允许您通过设置 SQLSTATE 强行显示错误或警告。
清单 10. 使用SQL PL 的BEFORE INSERT触发器
CREATE TRIGGER business_rules
BEFORE INSERT ON empprojact
REFERENCING NEW AS n
FOR EACH ROW
BEGIN ATOMIC
-- Business Rule One (Project ending date Can't be NULL)
IF (n.emendate IS NULL) THEn
SET n.emendate = CURRENT date;
END IF;
-- Business Rule Two (Project ending date Can't end in last month of the year)
IF (n.emendate BETWEEN '2009-12-01' AND '2009-12-31') THEn
SIGNAL SQLSTATE '90000'
SET MESSAGE_TEXT = 'Business Rule violation - 90000';
END IF;
END!
结束语
本教程简要介绍了如何创建触发器,以及应用触发器处理各种业务规则和要求的方法、原因和时机,现在应当已经为您理解触发器奠定了坚实的基础,理解触发器是准备 IBM Certified Solution Developer - DB2 9.5 SQL Procedure Developer 认证考试(考试 735)的重要部分。
- ››sql server自动生成批量执行SQL脚本的批处理
- ››sql server 2008亿万数据性能优化
- ››SQL Server 2008清空数据库日志方法
- ››sqlserver安装和简单的使用
- ››SQL Sever 2008 R2 数据库管理
- ››SQL SERVER无法安装成功,sqlstp.log文件提示[未发...
- ››Sql Server中通过父记录查找出所有关联的子记录
- ››SqlServer触发器、存储过程和函数
- ››SQL Server 中的事务(含义,属性,管理)
- ››Sqlite数据库插入和读取图片数据
- ››Sql server 2005拒绝了对对象 'xx表' (数...
- ››Sql server 2005拒绝了对对象 'xx表' (数...
更多精彩
赞助商链接