DB2 最佳实践: 使用 DB2 pureXML 管理 XML 数据的最佳实践,第 2 部分:向 DB2 数据库中添加 XML 数据指南
2009-11-12 00:00:00 来源:WEB开发网这种方法的缺点是每个应用程序的每个插入语句都需要使用 XMLVALIDATE 函数并涉及正确的 XML 模式标识(这是在一个模式注册时分配的)。换句话说,用这个方法来保证数据质量是分散的责任而且没有集中控制。不过,DB2 有几个功能可以在允许的 XML 数据上添加更多的集中控制。
你可以定义检查约束来保证 XML 文档在它们未能通过 XMLVALIDATE 函数正确验证的情况下被拒绝。在图 13 中的第一个检查约束只有在使用 XMLVALIDATE 函数根据在 DB2 中注册的某个 XML 模式验证成功后才允许插入 XML 文档。验证失败的插入将被拒绝。第二个检查约束更强大,因为它只允许已经通过了被 IN 子句中列出的模式验证过的文档插入。如果在数据库中注册的仅有的 XML 模式是 matthias.fpml41、 matthias.fpml43、 matthias.fpml50 的话,这两种验证是等价的。
清单 5. 检查约束拒绝未验证文档 alter table trades add constraint chkvalidated1
check (tradedoc is validated)
alter table trades add constraint chkvalidated2
check (tradedoc is validated according to xmlschema id
IN (matthias.fpml41, matthias.fpml43, matthias.fpml50)
检查约束他们自己不会执行或触发模式验证。他们只检查是否一个被插入(或更新)的文档已经被正确的验证过。
提示:不过,你可以使用 BEFORE 触发器来自动强制进行文档验证(图 14)。为了避免两次验证,我们推荐你在插入语句中显式的进行验证,或使用一个触发器,但不要同时用。
清单 6. BEFORE 触发器强制进行文档验证create trigger tr1 before insert on trades
referencing new as n
for each row mode db2sql
begin atomic
set (n.tradedoc) = xmlvalidate(n.tradedoc according to
xmlschema id matthias.fpml43 );
end
如果你已经在你的数据库中根据不同的模式验证了不同的文档,你可能碰到这样的情形,当你想找到用于验证一个文档的模式;或者,你希望找到一个确定模式来验证的所有文档。标量函数 XMLXSROBJECTID 可以为你做这些。你用一个 XML 文档(或者其中任意一个片段)作为一个数据被返回用于验证这个文档的 XML 模式的 ID 。有了这个 ID,你可以在 DB2 的 XML 模式库(XSR)找到 XML 模式。考虑下面的情况:
清单 7. 使用 XMLXSROBJECTID 函数select xmlxsrobjectid(tradedoc)
from trades
where xmlexists...;
select T.tradedoc
from trades T, syscat.xsrobjects X
where xmlxsrobjectid(T.tradedoc) = X.objectid
and X.objectname = 'fpml43';
更多关于管理的个 XML 模式的文档的信息,请参见参考资源部分。
- ››db2 对float类型取char后显示科学计数法
- ››DB2中出现SQL1032N错误现象时的解决办法
- ››DB2 锁升级示例
- ››db2诊断系列之---定位锁等待问题
- ››db2 命令选项解释
- ››最佳ASP.NET编程习惯
- ››DB2 最佳实践: 使用 DB2 pureXML 管理 XML 数据的...
- ››DB2 9.5 SQL Procedure Developer 认证考试 735 准...
- ››DB2 9.5 SQL Procedure Developer 认证考试 735 准...
- ››DB2 9.5 SQL Procedure Developer 认证考试 735 准...
- ››DB2 基础: 表空间和缓冲池
- ››DB2 XML 编程,第 1 部分: 理解 XML 数据模型
更多精彩
赞助商链接