动态网站制作指南
[  QQ表情  ]
[ 投票调查 ]
[ 企业邮箱 ]
[ 网站空间 ]
网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
ASP源码 | .Net源码 | PHP源码 | JSP源码 | JAVA源码 | CGI源码 | VB源码 | C++源码 | Delphi源码 | PB源码 | VF源码 | 汇编 | 服务器
电脑书籍下载:程序设计书籍 | 数据库教程书籍 | 平面与多媒体书籍 | 网络通讯书籍 | 系统管理书籍 | 网络安全书籍 | 认证考试书籍
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网络编程 > 数据库学院 > DB2教程
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程
数据库:数据库教程,数据库技巧,Oracle教程,MySQL教程,Access教程,DB2教程,数据库安全,数据库文摘
文章搜索服务
邮件订阅
输入你的邮件地址,
你将不会错过任何关于:
[ DB2教程 ]的信息



本月文章推荐
.讲解IBM DB2数据库性能调整的相关.
.DB2中创建一个汉字拼音首字母的S.
.DB2 数据库应用中使用受信任上下.
.深入了解DB2 Universal Database.
.用AWK实现DB2 数据库 Schema的同.
.DB2 Web 服务提供者的安全性(2)(.
.DB2和Visual Studio .NET开发慨述.
.轻松解决IBM DB2数据库锁等待的相.
.实例讲解DB2数据库性能监控的具体.
.抛砖引玉,实例讲解DB2中的表空间.
.定制DB2通用数据库命令行处理器.
.利用VS2005构建针对DB2的应用程序.
.使用DB2look重新创建优化器访问计.
.为DB2数据库创建表空间.
.提高商业智能环境中DB2查询的性能.
.DB2中多种常用功能的解决方法(1.
.讲解IBM DB2数据库的常用日期操作.
.讲解DB2数据库编程所应掌握的基本.
.DB2建立nickname导致CRASH解决方.
.了解有关DB2数据库优化的几条策略.

将XML应用程序从DB2 8.x迁移到Viper(1)

文章类别:DB2教程 | 发表日期:2008-2-9 |


  简介  DB2 Universal Database (UDB) Version 8.x 中的 XML 支持基于 DB2 的关系基础设施。在 DB2 Viper 版本之前,XML 数据要么原样存储为字符大对象 (CLOB),要么被分解到关系表中。  相反,DB2 UDB Version 9.1 具有对 XML 数据的真正本机支持。XML 现在被当作新的数据类型,XML 数据存储在经过解析的带注释的树中,独立于关系数据存储。基于 XML 模式的 XML 索引已经引入,同时还引入了对用于查询和发布 XML 数据的语言 XQuery 和 SQL/XML 的支持。为了理解这些新的 XML 特性对迁移的重大意义,需要将 DB2 8.x 中用于存储和查询 XML 数据的不同技术与 DB2 UDB Version 9 中可用的类似的或新的 XML 功能相比较。  本文是关于将 XML 应用程序从 DB2 8.x 迁移到 DB2 Viper 的三篇系列文章中的第一篇。该系列从描述一个基于 Java 的存储过程开始,您可以使用该存储过程来对 XML 数据执行子文档更新。您可以下载更新后的存储过程的源代码和 jar 文件,并根据说明安装它。  第二篇文章比较 DB2 Version 8.x 中和 DB2 Viper 中的 XML 特性。然后简要讨论 DB2 Viper 中引入的新 XML 特性,并具体介绍新 XML 支持对于迁移现有基于 XML 的应用程序的重大意义。这篇文章还包括基于 Java 的实用工具的源代码,该工具用于帮助生成迁移数据库对象时所需的脚本。  本系列的最后一篇文章介绍分步示例迁移场景。它包括示例场景的源代码。  更新存储过程  对于本机存储在 DB2 中的 XML 文档,不存在用于执行子文档更新的开箱即用的功能。缺少该功能的原因是,目前还没有定义 Xquery 中更新的标准。  该问题的一种解决方案是,将文档交给客户机,修改它,然后再将其保存到数据库中。该方法受到客户机环境的 XML 功能的限制,并且还要求专家级的人员编写基于文档对象模型 (DOM) 的客户机。 12345678910下一页   通过创建更新存储过程,可以更新数据库中的 XML 文档而无需将其交给客户机。该存储过程支持对本机存储在数据库中的 XML 文档进行部分更新。  存储过程答应:  更改目标 XML 文档中任何文本或属性节点的值  使用另一个 XML 元素替换 XML 文档中的元素节点(及其所有子节点)  删除 XML 文档中的节点  插入新元素  多次更新源文档  更新多个源文档  使用修改的 XML 文档替换另一个 XML 文档  将修改的文档插入新记录  更新信息可以:  静态地嵌入更新调用中  使用 SQL 在运行时动态地创建  使用算术表达式基于初始文本或属性值进行计算  注重:在后台,更新存储过程仍然执行完整的文档更新。  XMLUPDATE 命令  DB2XMLFUNCTIONS.XMLUPDATE (commandXML、querySQL、updateSQL、errorCode、errorMsg)  commandXML —— 该参数是一个用于封装更新命令的 XML 字符串。这些命令将应用到由 querySQL 所选择的 XML 文档。  该命令的结构是:<updates namespaces="">
<update using="" col="" action="" path="">update value</update>
</updates>
  —— 这是用于包装所有更新命令元素的根元素。  @namespace —— 该属性的值应该是由分号分隔的 “前缀:名称空间” 字符串。前缀然后用于在 XML 文档中导航时使用的任何路径表达式中。  Essential —— 否(仅当在任何路径中使用名称空间时才需要它)。  即使是默认名称空间也必须用一个前缀进行限定。 上一页1234567下一页   —— 该元素定义需要在目标 XML 文档上执行的每个修改。  Occurrence —— 可以定义这些元素中的一个或多个。  每次出现处理文档的一个修改。  @col —— 该属性的值应该是对应于要在 querySQL 中修改的列位置的编号。  Essential —— 是。  Valid value —— 列位置从 1 开始。  @path —— 该属性的值是目标 XML 文档中节点的 XPath 位置。假如路径无效,则存储过程将中止。  Essential —— 是。  Valid value —— XPath 表达式。  假如要在 Xpath 中使用名称空间,请确保设置名称空间属性。  不能将通配符用于名称空间。  @using —— 该属性的惟一有效值是 SQL。假如该属性存在并设置为 SQL,那么 update value( 元素的子节点)被视为一个 SQL 查询。查询结果的第一行中的第一列将用作新的 update value。假如查询失败,那么存储过程将中止。  Essential —— 否。  Valid value —— SQL。  对于 Xquery,可以使用要害字 Xquery,也可以使用 SQL/XML 函数将 XQuery 嵌入 SQL。  @action —— 该属性定义将在 XML 文档中的目标节点(使用 @path 属性中定义的 XPath 来定位)上进行的操作。假如操作失败,那么存储过程将中止。  Essential —— 否。假如未设置操作,则假定是一个替换操作。  Valid value —— 替换、追加、删除和计算:  replace —— 使用 update value 替换目标节点。  append —— 将 update value 作为子节点追加到目标节点。 上一页12345678下一页   delete —— 删除目标节点。  compute —— 将 update value 当作参数化的表达式。表达式中的问号 (?) 将由目标节点的现有文本值替换。然后,计算表达式,得到的值将替换目标节点中的现有值。计算出的值的 XPath 只能是叶节点。  update value —— 这为每个更新命令 (//update/*) 的子节点。它可以是文本节点,也可以是元素。  Essential —— 否。对于 action=delete,不需要它。  Valid value —— 当 @using 属性被设置为 SQL 时,子节点应该是文本值。它被当作 SQL 表达式。当 @action 属性被设置为 compute 时,子节点应该是文本值。它被当作参数化表达式。在所有其他情况下,子节点都视为要替换的值。  querySQL —— 任何用于检索需要更新的 XML 文档的有效 SQL 选择语句。  Essential —— 是。  Valid value —— 只能选择 XML 文档。假如选择了其他列,存储过程就会中止。  updateSQL —— 它表示参数化的更新 SQL。修改的 XML 文档作为运行时参数被绑定到更新 SQL。它答应将修改的 XML 文档保存到数据库中的其他 XML 列中。  Essential —— 否。假如该参数为 null,则使用可更新的游标来修改所选的列。  重要事项:从命令行处理器 (CLP) 执行更新存储过程时,始终需要设置 updateSQL 参数的值。假如将这个值设置为 null 或空字符串,CLP 会抛出 JCC 异常:Column not updatable。当您从应用程序代码 (Java) 内部调用更新存储过程时,将发生此情况(即 updateSQL 设置为 null)。  errorCode —— 值为 -1 指示存储过程因发生某种错误而中止。假如更新成功,则返回指示已更新的记录数的正值。 上一页123456789下一页   errorMsg —— 错误消息,包括 XML 解析器和 JCC 驱动程序抛出的任何异常。  注重:假如得到 java.lang.OutOfMemoryError,应该增加 java 堆大小:  db2 update dbm cfg using JAVA_HEAP_SZ 1024  设置存储过程  首先需要将更新存储过程 jar 安装到 DB2 中。这个过程仅需执行一次。下一步,对于每个数据库,需要分别注册存储过程。  重要事项:假如希望在存储过程中执行 Xqueries,那么需要为 DB2 设置 JCC 驱动程序。确保 DB2 在运行,然后从 DB2 命令窗口执行以下命令:  db2set DB2_USE_DB2JCCT2_JROUTINE=on  设置更新存储过程的步骤  通过执行以下步骤编译 java 代码并创建 db2xmlfunctions.jar 文件。  注重:db2xmlfunctions.jar 还可以从 下载 部分下载。假如您选择下载该文件,则跳过 第 2 步。  创建目录 /temp/samples。  将 XMLUpdate_code.zip(可以在 下载 部分找到)复制到 temp 目录。  将 XMLUpdate.java 和 XMLParse.java 文件解压到 /temp/samples 目录。  编译 java 文件并为 UDF 创建 jar 文件。  在 Microsoft Windows 上,打开 DB2 命令窗口:SET CLASSPATH= .;%DB2PATH%javadb2java.zip;
%DB2PATH%javadb2jcc.jar;
%DB2PATH%javadb2jcc_license_cisuz.jar;
"%DB2PATH%javajdkinjavac.exe" -d . *.java
"%DB2PATH%javajdkinjar" cvf db2xmlfunctions.jar com/ibm/db2/xml/functions/*.class
  在 AIX 上,将 DB2PATH 设置为 DB2 SQLLIB 目录:CLASSPATH=$DB2PATH/java/sqlj.zip:$DB2PATH/java/db2java.zip
$DB2PATH/java/jdk/bin/javac.exe" -d . *.java
$DB2PATH/java/jdk/bin/jar" cvf
db2xmlfunctions.jar com/ibm/db2/xml/functions/*.class
上一页12345678910下一页   注重:上述命令假定使用 sh 或 bash shell。根据需要更改为 csh、tsh 等。  在 DB2 中安装存储过程:DB2 -t
connect to your_dbname&yuml;
CALL SQLJ.INSTALL_JAR('file:/temp/samples/db2xmlfunctions.jar' ,
db2xmlfunctions,0);
  在数据库中注册存储过程:CREATE PROCEDURE db2xmlfunctions.XMLUPDATE(
IN COMMANDSQL VARCHAR(32000),
IN QUERYSQL VARCHAR(32000),
IN UPDATESQL VARCHAR(32000),
OUT errorCode INTEGER, OUT errorMsg VARCHAR(32000))
DYNAMIC RESULT SETS 0
LANGUAGE JAVA
PARAMETER STYLE JAVA
NO DBINFO
FENCED
NULL CALL MODIFIES SQL DATA
PROGRAM TYPE SUB
EXTERNAL NAME 'db2xmlfunctions:com.ibm.db2.xml.functions.XMLUpdate.Update' ;
TERMINATE;
  删除存储过程  假如更改了存储过程,那么在注册新版本之前应该首先从 DB2 卸载它:DROP PROCEDURE DB2XMLFUNCTIONS.XMLUPDATE(VARCHAR(32000),
VARCHAR(32000),VARCHAR(32000),INTEGER, VARCHAR(32000));
CALL SQLJ.REMOVE_JAR(DB2XMLFUNCTIONS);
  XMLUpdate 示例  对于 XMLUpdate 示例,请执行以下步骤:  创建测试表:Create table XMLCustomer(cid integer not null PRIMARY KEY, info XML );  将示例 XML 文档插入表中:Insert into XMLCustomer (cid, info ) values (1006 ,
XMLPARSE ( DOCUMENT '
<customerinfo xmlns="
http://posample.org
      " Cid="1006">
<name>Hardeep Singh</name>
<addr country="United States">
<street>555 Bailey Ave</street>
<city/>
<prov-state>CA</prov-state>
<pcode-zip> 95141</pcode-zip>
</addr>
<phone type="">543-4610</phone>
</customerinfo>'
PRESERVE WHITESPACE ) );
上一页234567891011下一页   注重:由于更新调用修改了初始的 XML 文档,所以您需要为某些查询而删除插入的文档,并重新插入它。  示例查询  下面是示例查询:  替换节点:action=replace。  通过使用复杂名称元素替换简单名称元素来更新测试文档:Call DB2XMLFUNCTIONS.XMLUPDATE (
'<updates namespaces="x:http://posample.org">
<update action="replace" col="1" path="/x:customerinfo/x:name">
<name><fname>Hardeep</fname><lname>Singh</lname></name>
</update>
</updates>',
'Select info from XMLCustomer where cid=1006',
'update XMLCustomer set info=? where cid=1006',?,?);
  使用 SQL 查询获取新值以进行更新:using=SQL。
Call DB2XMLFUNCTIONS.XMLUPDATE (
'<updates namespaces="x:http://posample.org">
<update using="sql" action="replace" col="1"
path="//x:customerinfo[@Cid=1006]/x:addr/x:pcode-zip/text()">
select cid from XMLCustomer where cid=1006
</update>
</updates>',
'Select info from XMLCustomer where cid=1006',
'update XMLCustomer set info=? where cid=1006',?,?);
  使用给定表达式来计算值:action=compute。
Call DB2XMLFUNCTIONS.XMLUPDATE (
'<updates namespaces="x:http://posample.org">
<update action="compute" col="1"
path="/x:customerinfo/x:addr/x:pcode-zip/text()">
(20+?)*32-?
</update>
</updates>',
'Select info from XMLCustomer where cid=1006',
'update XMLCustomer set info=? &yuml;here cid=1006',?,?);
上一页34567891011下一页   对目标 XML 文档执行多个操作:Call DB2XMLFUNCTIONS.XMLUPDATE (
'<updates namespaces="x:http://posample.org">
<update using="sql" action="replace" col="1"
path="/x:customerinfo/x:addr/x:pcode-zip/text()">
select cid from XMLCustomer where cid=1006
</update>
<update action="compute" col="1"
path="/x:customerinfo/x:addr/x:pcode-zip/text()">
(2+?)*10-?
</update>
<update action="delete" col="1" path="/x:customerinfo/x:name"/>
</updates>',
'Select info from XMLCustomer where cid=1006',
'update XMLCustomer set info=? where cid=1006',?,?);
  更新文档时对其进行验证。  为此,您需要创建模式并在 XSR 中注册。Call DB2XMLFUNCTIONS.XMLUPDATE (
'<updates namespaces="x:http://posample.org">
<update using="sql" action="replace" col="1"
path="/x:customerinfo/x:addr/x:pcode-zip/text()">
select cid from XMLCustomer where cid=1006
</update>
</updates>',
'Select info from XMLCustomer where cid=1006',
'update XMLCustomer set info=xmlvalidate(
? according to XMLSCHEMA ID test.schema2) where cid=1006',?,?)
上一页4567891011下一页   使用 XMLUpdate 替换属性值。Call DB2XMLFUNCTIONS.XMLUPDATE (
'<updates namespaces="x:http://posample.org">
<update action="replace" col="1"
path="/x:customerinfo/x:phone/@type">
tie line
</update>
</updates>',
'Select info from XMLCustomer where cid=1006',
'update XMLCustomer set info=? where cid=1006',?,?);
  使用 XMLUpdate 替换文本值。Call DB2XMLFUNCTIONS.XMLUPDATE (
'<updates namespaces="x:http://posample.org">
<update action="replace" col="1"
path="/x:customerinfo/x:addr/x:city/text()">
San Jose
</update>
</updates>',
'Select info from XMLCustomer where cid=1006',
'update XMLCustomer set info=? where cid=1006',?,?);
  重要事项:必须在路径的末尾指定 text()。这一步确保即使是空元素(即不具有现有文本节点的元素)也进行更新。假如省略了 text() 且不存在要替换的现有文本值,更新命令就会失败。  使用 XMLUpdate 追加子节点。Call DB2XMLFUNCTIONS.XMLUPDATE (
'<updates namespaces="x:http://posample.org">
<update action="append" col="1" path="/x:customerinfo/x:addr">
<county>Santa Clara</county>
</update>
</updates>',
'Select info from XMLCustomer where cid=1006',
'update XMLCustomer set info=? where cid=1006',?,?);
上一页567891011下一页   注重:新节点 不在任何名称空间中。  使用 XMLUpdate 将更新的 XML 插入新行。Call DB2XMLFUNCTIONS.XMLUPDATE (
'<updates namespaces="x:http://posample.org">
<update action="replace" col="1"
path="/x:customerinfo/x:name">
<name>Marja Soininen</name>
</update>
<update action="replace" col="1"
path="/x:customerinfo/@Cid">1008</update>
</updates>',
'Select info from XMLCustomer where cid=1006',
'insert into XMLCustomer (cid, info ) values (1008, cast( ? as xml))',?,?);
  使用 XMLUpdate 删除节点。Call DB2XMLFUNCTIONS.XMLUPDATE (
'<updates namespaces="x:http://posample.org">
<update action="delete" col="1" path="/x:customerinfo/x:name"/>
</updates>',
'Select info from XMLCustomer where cid=1006',
'update XMLCustomer set info=? where cid=1006',?,?);
  当更新元素中没有设置 @action 时,就默认执行替换操作。Call DB2XMLFUNCTIONS.XMLUPDATE (
'<updates namespaces="x:http://posample.org">
<update col="1" path="//x:customerinfo[@Cid=1006]/x:phone">
<phone><areacode>910</areacode></phone>
</update>
</updates>',
'Select info from XMLCustomer where cid=1006',
'update XMLCustomer set info=? where cid=1006',?,?);
上一页67891011下一页

上一篇:Windows环境下如何卸载DB2数据库 人气:457
下一篇:DB2的高可用性和灾难恢复概述 人气:309
点击此处浏览全部DB2教程的内容 Dreamweaver插件下载 常用网页广告代码全集
  最新网站源码 最新软件下载
2008-5-20 站长俱乐部新闻发布系统 v5.19
2008-5-20 DotNetTextBox网页编辑器 v3.4.7
2008-5-20 phpMyFAQ v2.5.0 多国语言版
2008-5-20 DreamArticle 文章管理系统 v2.0
2008-5-20 Drupal v7.xdev Build080518
2008-5-20 逐迹内容管理系统AspxNuke v2.0.
2008-5-20 ajax奥运留言本 v1.0
2008-5-20 QQ空间博客全自动挂机互踩好友
2008-5-20 网人采集 v1.2.0
2008-5-7 Windows XP SP3 官方英文版
2008-5-7 Windows XP SP3 官方香港中文版
2008-5-7 Windows XP SP3 官方繁体中文版
2008-5-7 Windows XP SP3 官方简体中文版
2008-4-30 Multiple Unzip Wizard 1.02
2008-4-30 Multiple Unrar Wizard 1.0.0
2008-4-30 WinZip Install/Try/Uninstall a
2008-4-30 ZIP压缩文件修复器WzipFix 2.0
2008-4-30 Pentazip 6.01 Build 189 For Wi
  发表评论
姓 名: 验证码: [ 全部贴吧 ] [ 浏览评论 ]
内 容:
[ 汉字翻译拼音 ] [ 广告代码 ] [ 符号对照表 ] [ 进制转换 ] [ 经典小工具 ] [ 个税计算 ] [ 汉字简繁转换 ] [ 普通单位换算 ] [ 公制单位换算 ]
[ 生辰老黄历 ] [ 国内电话区号 ] [ 国家代码与域名缩写 ] [ 文字加密解密 ] [ 健康查询 ] [ 万年历 ] [ 手机号码查询 ] [ ip搜索 ] [ Google PR查询 ]
业务联系 | 广告刊登 | 频道合作 | 投稿荐稿 | 联系方式 | 加入收藏 | RSS订阅
Copyright © 2000-2008 www.knowsky.com All rights reserved | 网络实名:动态网站制作指南 | 沪ICP备05001343号