电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術文章
文章詳情頁

將XML應用程序從DB2 8.x遷移到Viper(1)

瀏覽:9日期:2023-11-10 18:43:53
簡介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" cvfdb2xmlfunctions.jar com/ibm/db2/xml/functions/*.class 上一頁12345678910下一頁 注重:上述命令假定使用 sh 或 bash shell。根據需要更改為 csh、tsh 等。在 DB2 中安裝存儲過程:DB2 -tconnect 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 0LANGUAGE JAVAPARAMETER STYLE JAVANO DBINFOFENCEDNULL CALL MODIFIES SQL DATAPROGRAM TYPE SUBEXTERNAL 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="http://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="http://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下一頁
標簽: DB2 數據庫
主站蜘蛛池模板: 权威废金属|废塑料|废纸|废铜|废钢价格|再生资源回收行情报价中心-中废网 | 锡膏喷印机-全自动涂覆机厂家-全自动点胶机-视觉点胶机-深圳市博明智控科技有限公司 | 探伤仪,漆膜厚度测试仪,轮胎花纹深度尺厂家-淄博创宇电子 | 无线讲解器-导游讲解器-自助讲解器-分区讲解系统 品牌生产厂家[鹰米讲解-合肥市徽马信息科技有限公司] | 瑞典Blueair空气净化器租赁服务中心-专注新装修办公室除醛去异味服务! | 步进驱动器「一体化」步进电机品牌厂家-一体式步进驱动 | 新中天检测有限公司青岛分公司-山东|菏泽|济南|潍坊|泰安防雷检测验收 | 奇酷教育-Python培训|UI培训|WEB大前端培训|Unity3D培训|HTML5培训|人工智能培训|JAVA开发的教育品牌 | 莱州网络公司|莱州网站建设|莱州网站优化|莱州阿里巴巴-莱州唯佳网络科技有限公司 | 无菌检查集菌仪,微生物限度仪器-苏州长留仪器百科 | 碳化硅,氮化硅,冰晶石,绢云母,氟化铝,白刚玉,棕刚玉,石墨,铝粉,铁粉,金属硅粉,金属铝粉,氧化铝粉,硅微粉,蓝晶石,红柱石,莫来石,粉煤灰,三聚磷酸钠,六偏磷酸钠,硫酸镁-皓泉新材料 | 电动垃圾车,垃圾清运车-江苏速利达机车有限公司 | 变色龙PPT-国内原创PPT模板交易平台 - PPT贰零 - 西安聚讯网络科技有限公司 | 模温机-油温机-电加热导热油炉-工业冷水机「欧诺智能」 | 耐高温电缆厂家-远洋高温电缆| 武汉高温老化房,恒温恒湿试验箱,冷热冲击试验箱-武汉安德信检测设备有限公司 | 蒜肠网-动漫,二次元,COSPLAY,漫展以及收藏型模型,手办,玩具的新媒体.(原变形金刚变迷TF圈) | 视频教程导航网_视频教程之家_视频教程大全_最新视频教程分享发布平台 | 蜂蜜瓶-玻璃瓶-玻璃瓶厂-玻璃瓶生产厂家-徐州贵邦玻璃制品有限公司 | 杭州公司变更法人-代理记账收费价格-公司注销代办_杭州福道财务管理咨询有限公司 | 京港视通报道-质量走进大江南北-京港视通传媒[北京]有限公司 | 微水泥_硅藻泥_艺术涂料_艺术漆_艺术漆加盟-青岛泥之韵环保壁材 武汉EPS线条_EPS装饰线条_EPS构件_湖北博欧EPS线条厂家 | 东莞ERP软件_广州云ERP_中山ERP_台湾工厂erp系统-广东顺景软件科技有限公司 | 自动检重秤-动态称重机-重量分选秤-苏州金钻称重设备系统开发有限公司 | 滚珠丝杆升降机_螺旋升降机_丝杠升降机-德迈传动 | 蜜蜂职场文库_职场求职面试实用的范文资料大全 | 珠海网站建设_响应网站建设_珠海建站公司_珠海网站设计与制作_珠海网讯互联 | 点焊机-缝焊机-闪光对焊机-电阻焊设备生产厂家-上海骏腾发智能设备有限公司 | CPSE安博会 | 干式变压器厂_干式变压器厂家_scb11/scb13/scb10/scb14/scb18干式变压器生产厂家-山东科锐变压器有限公司 | 长沙中央空调维修,中央空调清洗维保,空气能热水工程,价格,公司就找维小保-湖南维小保环保科技有限公司 | 代办建筑资质升级-建筑资质延期就找上海国信启航 | 国资灵活用工平台_全国灵活用工平台前十名-灵活用工结算小帮手 | UV固化机_UVLED光固化机_UV干燥机生产厂家-上海冠顶公司专业生产UV固化机设备 | 杭州公司变更法人-代理记账收费价格-公司注销代办_杭州福道财务管理咨询有限公司 | 冷却塔减速机器_冷却塔皮带箱维修厂家_凉水塔风机电机更换-广东康明冷却塔厂家 | ALC墙板_ALC轻质隔墙板_隔音防火墙板_轻质隔墙材料-湖北博悦佳 | 礼仪庆典公司,礼仪策划公司,庆典公司,演出公司,演艺公司,年会酒会,生日寿宴,动工仪式,开工仪式,奠基典礼,商务会议,竣工落成,乔迁揭牌,签约启动-东莞市开门红文化传媒有限公司 | 理化生实验室设备,吊装实验室设备,顶装实验室设备,实验室成套设备厂家,校园功能室设备,智慧书法教室方案 - 东莞市惠森教学设备有限公司 | 运动木地板厂家_体育木地板安装_篮球木地板选购_实木运动地板价格 | 常州企业采购平台_常州MRO采购公司_常州米孚机电设备有限公司 |