亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > XML > 正文

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

2024-07-21 02:41:28
字體:
來源:轉載
供稿:網友
  簡介  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 功能相比較?! ”疚氖顷P于將 XML 應用程序從 DB2 8.x 遷移到 DB2 Viper 的三篇系列文章中的第一篇。該系列從描述一個基于 java 的存儲過程開始,您可以使用該存儲過程來對 XML 數據執行子文檔更新。您可以下載更新后的存儲過程的源代碼和 jar 文件,并根據說明安裝它?! 〉诙恼卤容^ DB2 Version 8.x 中和 DB2 Viper 中的 XML 特性。然后簡要討論 DB2 Viper 中引入的新 XML 特性,并具體介紹新 XML 支持對于遷移現有基于 XML 的應用程序的重大意義。這篇文章還包括基于 Java 的實用工具的源代碼,該工具用于幫助生成遷移數據庫對象時所需的腳本?! ”鞠盗械淖詈笠黄恼陆榻B分步示例遷移場景。它包括示例場景的源代碼?! 「麓鎯^程  對于本機存儲在 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 文檔?! ≡撁畹慕Y構是:<updates namespaces="">
<update using="" col="" action="" path="">update value</update>
</updates>
  —— 這是用于包裝所有更新命令元素的根元素?! namespace —— 該屬性的值應該是由分號分隔的 “前綴:名稱空間” 字符串。前綴然后用于在 XML 文檔中導航時使用的任何路徑表達式中。  Essential —— 否(僅當在任何路徑中使用名稱空間時才需要它)。  即使是默認名稱空間也必須用一個前綴進行限定。 上一頁1234567下一頁   —— 該元素定義需要在目標 XML 文檔上執行的每個修改?! ccurrence —— 可以定義這些元素中的一個或多個?! ∶看纬霈F處理文檔的一個修改?! col —— 該屬性的值應該是對應于要在 querySQL 中修改的列位置的編號?! ssential —— 是?! alid value —— 列位置從 1 開始?! path —— 該屬性的值是目標 XML 文檔中節點的 XPath 位置。假如路徑無效,則存儲過程將中止?! ssential —— 是?! alid value —— XPath 表達式?! 〖偃缫?Xpath 中使用名稱空間,請確保設置名稱空間屬性?! 〔荒軐⑼ㄅ浞糜诿Q空間?! using —— 該屬性的惟一有效值是 SQL。假如該屬性存在并設置為 SQL,那么 update value( 元素的子節點)被視為一個 SQL 查詢。查詢結果的第一行中的第一列將用作新的 update value。假如查詢失敗,那么存儲過程將中止?! ssential —— 否?! alid value —— SQL?! τ?Xquery,可以使用要害字 Xquery,也可以使用 SQL/XML 函數將 XQuery 嵌入 SQL?! action —— 該屬性定義將在 XML 文檔中的目標節點(使用 @path 屬性中定義的 XPath 來定位)上進行的操作。假如操作失敗,那么存儲過程將中止。  Essential —— 否。假如未設置操作,則假定是一個替換操作。  Valid value —— 替換、追加、刪除和計算:  replace —— 使用 update value 替換目標節點?! ppend —— 將 update value 作為子節點追加到目標節點。 上一頁12345678下一頁   delete —— 刪除目標節點?! ompute —— 將 update value 當作參數化的表達式。表達式中的問號 (?) 將由目標節點的現有文本值替換。然后,計算表達式,得到的值將替換目標節點中的現有值。計算出的值的 XPath 只能是葉節點?! pdate value —— 這為每個更新命令 (//update/*) 的子節點。它可以是文本節點,也可以是元素?! ssential —— 否。對于 action=delete,不需要它?! alid value —— 當 @using 屬性被設置為 SQL 時,子節點應該是文本值。它被當作 SQL 表達式。當 @action 屬性被設置為 compute 時,子節點應該是文本值。它被當作參數化表達式。在所有其他情況下,子節點都視為要替換的值?! uerySQL —— 任何用于檢索需要更新的 XML 文檔的有效 SQL 選擇語句。  Essential —— 是。  Valid value —— 只能選擇 XML 文檔。假如選擇了其他列,存儲過程就會中止?! pdateSQL —— 它表示參數化的更新 SQL。修改的 XML 文檔作為運行時參數被綁定到更新 SQL。它答應將修改的 XML 文檔保存到數據庫中的其他 XML 列中。  Essential —— 否。假如該參數為 null,則使用可更新的游標來修改所選的列?! ≈匾马棧簭拿钚刑幚砥?(CLP) 執行更新存儲過程時,始終需要設置 updateSQL 參數的值。假如將這個值設置為 null 或空字符串,CLP 會拋出 JCC 異常:Column not updatable。當您從應用程序代碼 (Java) 內部調用更新存儲過程時,將發生此情況(即 updateSQL 設置為 null)?! rrorCode —— 值為 -1 指示存儲過程因發生某種錯誤而中止。假如更新成功,則返回指示已更新的記錄數的正值。 上一頁123456789下一頁   errorMsg —— 錯誤消息,包括 XML 解析器和 JCC 驅動程序拋出的任何異常?! ∽⒅兀杭偃绲玫?java.lang.OutOfMemoryError,應該增加 java 堆大?。骸 b2 update dbm cfg using JAVA_HEAP_SZ 1024  設置存儲過程  首先需要將更新存儲過程 jar 安裝到 DB2 中。這個過程僅需執行一次。下一步,對于每個數據庫,需要分別注冊存儲過程?! ≈匾马棧杭偃缦M诖鎯^程中執行 Xqueries,那么需要為 DB2 設置 JCC 驅動程序。確保 DB2 在運行,然后從 DB2 命令窗口執行以下命令:  db2set DB2_USE_DB2JCCT2_JROUTINE=on  設置更新存儲過程的步驟  通過執行以下步驟編譯 java 代碼并創建 db2xmlfunctions.jar 文件?! ∽⒅兀篸b2xmlfunctions.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 文檔,所以您需要為某些查詢而刪除插入的文檔,并重新插入它?! ∈纠樵儭 ∠旅媸鞘纠樵儯骸 √鎿Q節點: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下一頁
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产日本欧美视频| 高清亚洲成在人网站天堂| 91九色在线视频| 亚洲第一国产精品| 亚洲国产精品成人av| 国产精品欧美一区二区| www.日韩视频| 91精品在线国产| 青青草精品毛片| 在线看福利67194| 欧美性色视频在线| 久久久国产精彩视频美女艺术照福利| 在线成人中文字幕| 日韩精品极品在线观看| 午夜伦理精品一区| 日韩精品在线看| 欧美一级在线亚洲天堂| 成人中文字幕在线观看| 欧美成人黑人xx视频免费观看| 亚洲人精品午夜在线观看| 欧美亚洲国产另类| 日韩有码在线观看| 日韩亚洲欧美中文高清在线| 欧美日韩aaaa| 隔壁老王国产在线精品| 欧美中文字幕第一页| 国产va免费精品高清在线观看| 国产精品福利网站| 97av在线影院| 日日噜噜噜夜夜爽亚洲精品| 国产精品91久久久| 伊人亚洲福利一区二区三区| 亚洲欧美日韩国产中文专区| 亚洲男人天堂2023| 国产美女精品免费电影| 欧美日韩亚洲一区二区| 日韩在线免费观看视频| 日韩国产欧美精品在线| 日韩欧美一区二区在线| 久久精品99久久久久久久久| 国产精品久久婷婷六月丁香| 69av在线播放| 亚洲电影免费在线观看| 欧美黄色片视频| 欧美成人在线网站| 国产精品欧美激情在线播放| 国产精品一区av| 精品国产精品三级精品av网址| 欧美理论电影网| 国产精品久久久久久久久久久久久| 国产综合在线看| 久久久国产91| 久久精品国产v日韩v亚洲| 成人黄色免费片| 国产一区在线播放| 欧美日韩中文字幕在线| 成人久久18免费网站图片| 亚洲精品在线不卡| 久久99精品久久久久久噜噜| 亚洲国产成人在线视频| 欧美成人精品在线视频| 久久人人爽人人爽人人片亚洲| 北条麻妃99精品青青久久| 国产91色在线|免| 国产精品99蜜臀久久不卡二区| 欧美日韩午夜剧场| 国产精品欧美日韩久久| 久久综合88中文色鬼| 永久免费毛片在线播放不卡| 伦伦影院午夜日韩欧美限制| 国产有码在线一区二区视频| 国产精品一区二区三区免费视频| 国产精品91在线观看| 91精品在线国产| 中文字幕视频一区二区在线有码| 亚洲网址你懂得| 久久视频在线播放| 欧美激情在线狂野欧美精品| 久久九九精品99国产精品| 亚洲人成啪啪网站| 欧美寡妇偷汉性猛交| 亚洲天堂开心观看| 国产精品黄视频| 欧美国产日韩一区二区在线观看| 亚洲成**性毛茸茸| 一区二区欧美亚洲| 91av中文字幕| 久久人人爽人人| 亚洲福利视频久久| 中文字幕在线成人| 亚洲成人久久久| 国产欧美最新羞羞视频在线观看| 92国产精品久久久久首页| 日韩成人在线播放| 久久好看免费视频| 亚洲免费视频观看| 欧美激情精品久久久久久| 国模视频一区二区三区| 情事1991在线| 国产精品视频永久免费播放| 亚洲精品福利在线| 亚洲综合中文字幕68页| 亚洲精品网址在线观看| 久久国产精品影视| 欧美激情一区二区三区高清视频| 欧美极度另类性三渗透| 亚洲图中文字幕| 国语自产精品视频在免费| 亚洲视频第一页| 国产精品日韩久久久久| 中文字幕一区二区精品| 久久精品一偷一偷国产| 日韩在线不卡视频| 久久国产精品视频| 久久精品中文字幕一区| 欧美成人网在线| 亚洲精品视频免费在线观看| 国产精品免费视频xxxx| 91精品久久久久久久久久入口| 欧美精品在线第一页| 国产精品永久在线| 欧美激情精品久久久久| 国产精品网址在线| 国产精品美女免费| 欧美日韩精品二区| 国产欧美日韩中文字幕| 中文字幕少妇一区二区三区| 亚洲精品国产综合久久| 亚洲偷欧美偷国内偷| 久久久免费观看| 国产不卡在线观看| 久久久国产一区二区| 欧美在线免费观看| 色噜噜狠狠狠综合曰曰曰88av| 精品动漫一区二区三区| 91亚洲精品久久久| 亚洲图片欧洲图片av| 国产精品视频久久| 亚洲一区999| 欧美性高潮床叫视频| 亚洲第一av网站| 久久久人成影片一区二区三区观看| 国产91色在线|| 亚洲电影免费观看| 久久精品视频免费播放| 欧美午夜久久久| 欧美激情精品久久久久久免费印度| 欧美巨猛xxxx猛交黑人97人| 国产有码一区二区| 大胆欧美人体视频| 久久久精品视频在线观看| 亚洲综合日韩在线| 欧美大秀在线观看| 日韩在线免费视频| 亚洲人在线观看| 亚洲一区二区久久久| 国产精品久久久久av| 日韩在线视频免费观看高清中文| 亚洲综合色激情五月| 91精品国产乱码久久久久久久久| 亚洲精品有码在线| 欧美午夜性色大片在线观看| 国产免费一区二区三区在线能观看| 国产免费一区二区三区香蕉精|