浙江20选5怎样算中奖号码:將XML應用程序從DB2 8.x遷移到Viper(1)

浙江20选5开奖结果走势图 www.kcvsu.com 2/9/2008來源:DB2教程人氣:5103

  簡介  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 在運行時動態地創建  使用算術表達式基于初始文本或屬性值進行計算  注重:在后臺,更新存儲過程仍然執行完整的文檔更新?! MLUPDATE 命令  DB2XMLFUNCTIONS.XMLUPDATE (commandXML、querySQL、updateSQL、errorCode、errorMsg)  commandXML —— 該參數是一個用于封裝更新命令的 XML 字符串。這些命令將應用到由 querySQL 所選擇的 XML 文檔?! 「妹畹慕峁故牽?code><updates namespaces="">
<update using="" col="" action="" path="">update value</update>
</updates>  —— 這是用于包裝所有更新命令元素的根元素?! namespace —— 該屬性的值應該是由分號分隔的 “前綴:名稱空間” 字符串。前綴然后用于在 XML 文檔中導航時使用的任何路徑表達式中?! ssential —— 否(僅當在任何路徑中使用名稱空間時才需要它)?! 〖詞故悄廈瓶占湟脖匭胗靡桓鑾白航邢薅?。 上一頁1234567下一頁   —— 該元素定義需要在目標 XML 文檔上執行的每個修改?! ccurrence —— 可以定義這些元素中的一個或多個?! ∶看緯魷執砦牡檔囊桓魴薷??! col —— 該屬性的值應該是對應于要在 querySQL 中修改的列位置的編號?! ssential —— 是?! alid value —— 列位置從 1 開始?! path —— 該屬性的值是目標 XML 文檔中節點的 XPath 位置。假如路徑無效,則存儲過程將中止?! ssential —— 是?! alid value —— XPath 表達式?! 〖偃繅?Xpath 中使用名稱空間,請確保設置名稱空間屬性?! 〔荒芙ㄅ浞糜諉瓶占??! using —— 該屬性的惟一有效值是 SQL。假如該屬性存在并設置為 SQL,那么 update value( 元素的子節點)被視為一個 SQL 查詢。查詢結果的第一行中的第一列將用作新的 update value。假如查詢失敗,那么存儲過程將中止?! ssential —— 否?! alid value —— SQL?! 《雜?Xquery,可以使用要害字 Xquery,也可以使用 SQL/XML 函數將 XQuery 嵌入 SQL?! action —— 該屬性定義將在 XML 文檔中的目標節點(使用 @path 屬性中定義的 XPath 來定位)上進行的操作。假如操作失敗,那么存儲過程將中止?! ssential —— 否。假如未設置操作,則假定是一個替換操作?! alid 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 選擇語句?! ssential —— 是?! alid value —— 只能選擇 XML 文檔。假如選擇了其他列,存儲過程就會中止?! pdateSQL —— 它表示參數化的更新 SQL。修改的 XML 文檔作為運行時參數被綁定到更新 SQL。它答應將修改的 XML 文檔保存到數據庫中的其他 XML 列中?! ssential —— 否。假如該參數為 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="
//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 文檔,所以您需要為某些查詢而刪除插入的文檔,并重新插入它?! ∈糾檠 ∠旅媸鞘糾檠骸 √婊喚詰悖篴ction=replace?! ⊥ü褂酶叢用圃靨婊患虻ッ圃乩錘虜饈暈牡擔?code>Call DB2XMLFUNCTIONS.XMLUPDATE (
'<updates namespaces="x://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://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://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://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://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://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://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://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://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://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://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下一頁