rdbunlxコマンドを実行することで、データベースに格納されたXMLデータからXML検索式に一致したデータを検索し、結果をファイルに出力します。
rdbunlxコマンドは、一度に複数のXML検索式を指定して、検索処理を実行することができます。
参照
rdbunlxコマンドの詳細については、“コマンドリファレンス”を参照してください。
XML検索式の詳細については、“XQueryリファレンス”を参照してください。
なお、検索対象のXMLデータは、格納構造がSEQUENTIAL構造の表のBLOB型列に格納してください。また、格納するXMLデータの文字コード系は、UTF-8にしてください。
注意
XMLデータをデータベースに格納する場合には、XMLの形式が正しいことを確認してください。XMLの形式が正しくない場合、検索対象外のデータとして扱われます。
正しいXMLの形式に関しては、“付録A XMLデータの形式”を参照してください。
XML検索式をファイルに記述して検索結果を外部ファイルに出力する
XML検索式をファイルに記述して、検索結果を外部ファイルに出力する場合の機能概要と指定例を以下に示します。
ここでは、伝票DBの2007年1月のDSIに対して、以下の3つの検索条件に一致するデータを検索し、検索結果を出力定義ファイルに指定されたそれぞれの出力ファイルに出力します。
$ rdbunlx -i 伝票DB.DSI_2007_01 -c 伝票 -v /home/rdb2/cfg/selquery.txt -o /home/rdb2/cfg/seloutput.txt
(1) (2)
(1) 検索定義ファイル名
(2) 出力定義ファイル名
検索定義ファイルは、XMLデータを検索するための検索条件を記述したXML検索式を指定したファイルです。
上記の例では、検索定義ファイルは以下のような内容になっています。
1 /受注伝票[契約日/text() = "2007-01-01" and 受注先/コード/text() = "B001"]% 2 /受注伝票[受注先/社名/text() = "ABC銀行"]% 3 /受注伝票[受注先/社名/text() = "ABC銀行" and 商品/個数/text() > 100]%
出力定義ファイルは、検索定義ファイルで記述した検索式に対し、検索結果を出力するファイルを絶対パスで定義します。
上記の例では、出力定義ファイルは以下のような内容になっています。
1 /home/rdb2/outdata/001kekka.xml 2 /home/rdb2/outdata/002kekka.xml 3 /home/rdb2/outdata/003kekka.xml
注意
格納データを暗号化している場合でも、出力したファイルは暗号化されません。
外部ファイルが不要となった際には、rdbclrfコマンドまたはOSのコマンドで削除してください。
rdbclrfコマンドは、Symfoware Server Enterprise Extended Editionかつ標準セキュリティ運用の場合に使用可能です。それ以外の場合は、下記のOSのコマンドを使用して削除してください。
shredコマンドを実行して、出力ファイルを削除します。ここでは、“001kekka.xml”を削除する例を示します。
$ shred -x -u /home/rdb2/outdata/001kekka.xml
XML検索式に複数件のレコードが一致した場合の出力例は、以下のようになります。
/home/rdb2/outdata/001kekka.xml
形式が正しくないXMLデータを外部ファイルに出力する
データベースに、形式が正しくないXMLデータが格納されている場合、検索対象外のデータとして取り扱われます。これらのデータは、rdbunlxコマンドにrオプションを指定することにより、エラーデータを含むレコードを外部ファイルに出力することができます。
注意
本機能は、整形式の条件に一致しているかの検証をするための機能ではありません。
rdbunlxコマンドによる検索処理で、形式が正しくないXMLデータを検出した場合に、エラーデータ出力ファイルにエラーデータを出力する場合の例を以下に示します。
rdbunlxコマンドのrオプションにエラーデータ出力ファイル名を指定します。
$ rdbunlx -i 伝票DB.DSI_2007_01 -c 伝票 -v /home/rdb2/cfg/selquery.txt -o /home/rdb2/cfg/seloutput.txt
-r /home/rdb2/outdata/err.xml
qdg25046i:エラーデータ出力ファイル'/home/rdb2/outdata/err.xml'に2件のデータを抽出しました (システム名=rdbsys1)
qdg25020i:検索番号1の出力ファイル'/home/rdb2/outdata/001kekka.xml'に100件のデータを抽出しました(システム名=rdbsys1)
qdg25020i:検索番号2の出力ファイル'/home/rdb2/outdata/002kekka.xml'に120件のデータを抽出しました(システム名=rdbsys1)
qdg25020i:検索番号3の出力ファイル'/home/rdb2/outdata/003kekka.xml'に130件のデータを抽出しました(システム名=rdbsys1)
qdg12074i:rdbunlxが正常終了しました 復帰コード 00 (システム名=rdbsys1)
備考.rオプション指定時は、出力件数が0件の場合でもqdg25046iのメッセージを出力します。
rdbunlxコマンド実行中に、正しくないXMLデータを検出した場合、エラーデータ出力ファイルには以下のようにデータが出力されます。
/home/rdb2/outdata/err.xml
XMLデータを生成したプログラムを見直してください。
正しくないXMLデータを修復する場合、エラーデータ出力ファイルに出力された情報から対応する行を特定して、rdbexecsqlコマンドやアプリケーションなどでデータを修復してください。
注意
rdbunlxコマンドに指定したDSIに対して、他のアプリケーション等からデータの追加、更新、削除のいずれも動作していない状態で実行してください。
データの追加、更新、削除のいずれかが動作中に、本コマンドを実行した場合には、エラー終了します。
rdbunlxコマンドでは、検索結果を出力するファイルとエラーデータ出力ファイルで、それぞれ出力範囲が異なります。
出力範囲 | |
---|---|
検索結果を出力するファイル | ルートと呼ばれる要素の終了タグまで出力 |
エラーデータ出力ファイル | レコード全体を出力 |
rdbunlxコマンドは、レコード内でエラーデータを検出した場合であっても、ルートと呼ばれる要素の終了タグまでが正しい形式であれば、ルートと呼ばれる要素の終了タグまでを検索対象とし、検索結果を出力します。この時rdbunlxコマンドのrオプションを指定した場合には、エラーデータ出力ファイルにも出力されます。
以下にその例を示します。
開始タグ数よりも終了タグ数の方が多い、誤ったXMLデータを格納した場合
上記のデータのように終了タグ“</受注伝票>”を記述した場合、ルートと呼ばれる要素の終了タグはデータの途中になります。rdbunlxコマンドは、ルートと呼ばれる要素の終了タグを見つけた地点で検索式に一致していた場合、検索結果を出力するファイルに出力します。
この場合、検索結果は以下のように出力されます。
[検索結果を出力するファイル]
このデータはエラーデータであるため、rdbunlxコマンドのrオプションを指定した場合、以下に示すようにエラーデータ出力ファイルにも、エラーデータとして出力されます。
[エラーデータ出力ファイル]
上記のように誤ったXMLデータをデータベースに格納した場合、検索結果を出力するファイルとエラーデータ出力ファイルの両方に結果が出力される場合があります。