V7R1 XML データ処理のいろいろ

V7R1 XML サポートの基本 (チュートリアルの紹介)」で、DB2 for IBM i の XML サポートについてごく基本的な使い方を確認しましたが、今回はいくつかその他のちょっとした使い方などを紹介してみたいと思います。

今回は EOL/400 の得意先マスター(TOKMSP)を使用してみましょう。日本語も処理できるところが確認できますね。


XML カラムを持ったテーブルの作成

まず、準備として XML 型のカラムを持ったテーブルを作成しましょう。

CREATE TABLE QEOLDB.TOKMSP_XML
                      (tokid CHAR (10 ) NOT NULL WITH DEFAULT, 
                       xmldata XML NOT NULL WITH DEFAULT) ;           

RDB テーブルのデータから XML データを生成

テーブルに存在しているデータを使って、XML データを生成することができます。

XML_SERIALIZE 関数を使用します。

SELECT tkbang,                                               
       XMLSERIALIZE(                                         
          XMLELEMENT(NAME "customer",                         
                     XMLATTRIBUTES(T.tknakj AS "name"),       
          XMLELEMENT(NAME "address" , T.tkadr1 || T.tkadr2), 
          XMLELEMENT(NAME "phone"   , T.tktele)               
          )  AS CLOB(1000)                                                  
       )                                                 
  FROM QEOLDB.TOKMSP T                                   
 WHERE tkbang = '01010' ;  

XML データ自体は CLOB としてキャストする必要があります。

ちなみに、WHERE 句を削ってしまえば全件を同じかたちで出力することもできますね。

RDB テーブルから生成した XML データを XML カラムに挿入

↑のように生成したデータを、そのまま XML カラムに格納することができます。

INSERT INTO QEOLDB.TOKMSP_XML 
       (tokid,                                                
        xmldata) 
SELECT tkbang,                                               
       XMLSERIALIZE(                                         
          XMLELEMENT(NAME "customer",                         
                     XMLATTRIBUTES(T.tknakj AS "name"),       
          XMLELEMENT(NAME "address" , T.tkadr1 || T.tkadr2), 
          XMLELEMENT(NAME "phone"   , T.tktele)               
          )  AS CLOB(1000)                                                  
       )                                                 
  FROM QEOLDB.TOKMSP T                                   
 WHERE tkbang = '01010' ;  

SELECT 文で見てみると、ちゃんと XML データが挿入されていることが確認できます。

XML カラムの XML データを IFS に XML ファイルとして保管

XML カラムに存在している XML データを、IFS 上に XML ファイルとして出力することができます。
とってもカンタンな ILE RPG の埋め込みSQL プログラムですが、↓のようなかんじになりますね。

     D DOC             S                   SQLTYPE(XML_CLOB_FILE)                                   
      /free                                                                                         
                                                                                                    
          DOC_NAME = '/temp/doc1.xml' ;                                                             
          DOC_NL   = 14 ;                                                                           
          DOC_FO = SQFCRT ;                                                                         
                                                                                                    
          exec sql SELECT XMLDATA INTO :DOC  FROM TOKMSP_XML ;                                      
                                                                                                    
          *inLR = *on ;                                                                             
          return ;                                                                                  
                                                                                                    
      /end-free                                                                                     

特別なコンパイルオプションなどは必要ありません。

実行してみましょう。

まず実行前に、保管先のディレクトリの中を見てみましょう。
XML ファイルがまだ存在していないことがわかります。

↑のプログラムを実行します。

再度先ほど確認したディレクトリを見てみると、指定したとおりの名前("doc1.xml")で XML ファイルが新しくできていることが確認できます。

作成されたファイルの内容を見てみましょう。

ファイルの属性を見てみると、CCSID には 1208 が指定されていることがわかります。

IFS にある XML ファイルから XML カラムへの XML データの挿入

今度は逆に IFS 上に存在している XML ファイルから、XML データを XML カラムに保管してみましょう。

GET_XML_FILE 関数と XMLPARSE 関数を使用します。

INSERT INTO QEOLDB.TOKMSP_XML 
       (tokid,                                                
        xmldata) 
VALUES ('01011',
        XMLPARSE(DOCUMENT GET_XML_FILE('/temp/doc1.xml'))) ;

SELECT 文で確かめてみましょう。

[Top Pageに戻る]

Ads by TOK2