ページの先頭行へ戻る
HA Database Ready 業務開発ガイド(Native SQL編)
FUJITSU Integrated System

4.1.4 データベースの外部ファイルへの出力

データベースのデータを外部ファイルに出力するには、以下の3通りの方法があります。

4.1.4.1 DSIのデータをそのまま外部ファイルに出力する

rdbunlコマンドを使用して、データベースのデータを外部ファイルへ出力することができます。

参照

rdbunlコマンドの指定方法の詳細については、“Symfoware Server コマンドリファレンス”を参照してください。

データを1つのファイルに出力する

すべてのデータを1つの外部ファイルに出力する場合の機能概要と指定例を以下に示します。

$ rdbunl -i 在庫管理DB.在庫表DSI /disk3/rdb/data/stockdsi1.data
                                                 (1)

(1) 出力ファイル名

出力ファイル名

データベースの出力先の外部ファイル名を指定します。

任意の列のデータを出力する

任意の列を選択し、この列で構成するデータを外部ファイルに出力する場合の機能概要と指定例を以下に示します。

$ rdbunl -i 在庫管理DB.在庫表DSI -c 倉庫番号,製品名
                                               (1)
         /disk3/rdb/data/stockdsi2.data

(1) 列指定

列指定

表を構成する列のうち、任意の列を選択し、この列で構成するデータを外部ファイルに出力する場合に指定します。

データを任意のデータ件数ごとに分割して複数のファイルに出力する

任意のデータ件数ごとに分割して複数のファイルに出力する場合の機能概要と指定例を以下に示します。

$ rdbunl -i 在庫管理DB.在庫表DSI -v /disk3/rdb/data/part.data
                                                (1)

(1) 分割指定ファイル名

分割指定ファイル名

任意の行数単位にデータを別々のファイルに分割して出力する場合に指定します。ファイルには、分割するデータの行数と、分割したデータの出力先のファイル名を記述します。

ある条件で絞り込んだデータのみを出力する

ある条件で絞り込んだデータのみを外部ファイルに出力する場合の機能概要と指定例を以下に示します。

$ rdbunl -i 在庫管理DB.在庫表DSI -f /disk3/rdb/data/term.data
                                                 (1)

(1) 条件指定ファイル名

条件指定ファイル名

ある条件で絞り込んだデータのみを外部ファイルに出力する場合に指定します。ファイルには、データを抽出するための条件と、抽出したデータの出力先のファイル名を記述します。

外部ファイルのデータ形式

rdbunlコマンドが出力する外部ファイルのデータ形式には、以下の2種類があります。

データ形式の詳細は、“4.1.1.1 外部ファイルの形式”を参照してください。

バイナリ形式でデータベースのデータを外部ファイルに出力した場合の例を以下に示します。

NULL値

データベースの出力対象データ中にNULL値が存在した場合の処理は、nオプションの指定により異なります。

nオプション省略時:

NULL値を含む行を出力対象とします。このときには、データベースの各列に対応する各出力データの先頭にNULL表示域(2バイト)が常に追加されます。

nオプション指定時:

NULL表示域は出力されません。したがって、NULL値を含む行は出力されません。

例1

NULL値を含む行を出力する場合の、外部ファイルのデータ形式例

例2

NULL値を含む行を出力しない場合の、外部ファイルのデータ形式例

可変長文字列

可変長文字列属性の列に対しては、データの有効長を示す2バイトの領域がデータの前に追加されて出力されます。データの有効長を示す領域には、データの有効長が2進数で格納されています。

列データの出力域は、oオプションの指定により異なります。

oオプション省略時:

データの有効長を示す領域と、可変長属性の定義で指定した長さ(最大長)分の領域です。有効長が最大長未満の場合は、データの有効な部分以降の内容は不定です。

oオプション指定時:

データの有効長を示す領域と、有効長分の領域です。

データの有効長を示す領域と最大長分の領域を出力した場合の、外部ファイルのデータ形式

4.1.4.2 SQL文による検索結果を外部ファイルに出力する

目的に応じたアプリケーションを作成しなくてもrdbunlsqlコマンドを使用して、SQL文によるデータベースの検索結果を外部ファイルに出力することができます。また、検索結果を編集して外部ファイルに出力することもできます。

参照

rdbunlsqlコマンドの指定方法の詳細については、“Symfoware Server コマンドリファレンス”を参照してください。

SQL文をファイルに記述して検索結果を外部ファイルに出力する

SQL文をファイルに記述して、検索結果を外部ファイルに出力する場合の機能概要と指定例を以下に示します。

$ rdbunlsql -d 在庫管理DB -v /disk3/rdb/data/select.data /disk3/rdb/data/result.data 
                                      (1)                        (2)

(1) SQL文記述ファイル名

(2) 出力ファイル名

SQL文記述ファイル名

データベースを検索するためのSQL文を記述したファイル名を指定します。

SQL文をコマンドのオプションに指定して検索結果を外部ファイルに出力する

SQL文記述ファイルを作成しなくても、rdbunlsqlコマンドのsオプションにSQL文を指定して、検索結果を外部ファイルに出力することができます。以下に例を示します。

$ rdbunlsql -d 在庫管理DB 
            -s "SELECT 製品名,在庫数量 FROM 在庫スキーマ.在庫表 WHERE 製品番号 < 350"
                                              (1) 

            /disk3/rdb/data/result.data

(1)SQL文

SQL文

データベースを検索するためのSQL文を直接記述します。

SQL文中に、シェルで特別な意味を持つ文字列を含む場合、シェルの規則に従って、それが通常の文字として扱われるように指定してください。たとえば、空白を含むSQL文をオプションに指定するには、二重引用符(”)または引用符(')で囲むなどの指定が必要です。

データベースの検索で使用するSQL

SQL文記述ファイルまたはオプションには、以下のSQL構文が指定できます。

問合せ式 [ORDER BY句] [更新可能性句] [並列指定] [実行オプション指定]

SQL文記述ファイルに指定できるSQL文は1つだけです。

参照

指定方法の詳細については、“Symfoware Server SQLリファレンス”を参照してください。

外部ファイルのデータ形式

rdbunlsqlコマンドが出力する外部ファイルのデータ形式には、以下の2種類があります。

これらのデータ形式は、rdbunlコマンドが出力する外部ファイルのデータ形式と同じです。データ形式の概要は、“4.1.4.1 DSIのデータをそのまま外部ファイルに出力する”を参照してください。また、データ形式の詳細は、“4.1.1.1 外部ファイルの形式”を参照してください。

4.1.4.3 XML検索式による検索結果を外部ファイルに出力する

rdbunlxコマンドを実行することで、データベースに格納されたXMLデータからXML検索式に一致したデータを検索し、結果をファイルに出力します。

rdbunlxコマンドは、一度に複数のXML検索式を指定して、検索処理を実行することができます。

参照

  • rdbunlxコマンドの詳細については、“Symfoware Server コマンドリファレンス”を参照してください。

  • XML検索式の詳細については、“Symfoware Server XQueryリファレンス”を参照してください。

なお、検索対象のXMLデータは、格納構造がSEQUENTIAL構造の表のBLOB型列に格納してください。また、格納するXMLデータの文字コード系は、UTF-8にしてください。

注意

XMLデータをデータベースに格納する場合には、XMLの形式が正しいことを確認してください。XMLの形式が正しくない場合、検索対象外のデータとして扱われます。
正しいXMLの形式に関しては、“XMLデータの形式”を参照してください。

XML検索式をファイルに記述して検索結果を外部ファイルに出力する

XML検索式をファイルに記述して、検索結果を外部ファイルに出力する場合の機能概要と指定例を以下に示します。

ここでは、伝票DBの2007年1月のDSIに対して、以下の3つの検索条件に一致するデータを検索し、検索結果を出力定義ファイルに指定されたそれぞれの出力ファイルに出力します。

rdbunlxコマンドの指定例
$ rdbunlx -i 伝票DB.DSI_2007_01  -c 伝票 
          -v /disk3/rdb/data/cfg/selquery.txt -o /disk3/rdb/data/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 /disk3/rdb/data/outdata/001kekka.xml
2 /disk3/rdb/data/outdata/002kekka.xml
3 /disk3/rdb/data/outdata/003kekka.xml
出力ファイル例

XML検索式に複数件のレコードが一致した場合の出力例は、以下のようになります。

/disk3/rdb/data/outdata/001kekka.xml

形式が正しくないXMLデータを外部ファイルに出力する

データベースに、形式が正しくないXMLデータが格納されている場合、検索対象外のデータとして取り扱われます。これらのデータは、rdbunlxコマンドにrオプションを指定することにより、エラーデータを含むレコードを外部ファイルに出力することができます。

注意

本機能は、整形式の条件に一致しているかの検証をするための機能ではありません。

rdbunlxコマンドの指定例

rdbunlxコマンドによる検索処理で、形式が正しくないXMLデータを検出した場合に、エラーデータ出力ファイルにエラーデータを出力する場合の例を以下に示します。
rdbunlxコマンドのrオプションにエラーデータ出力ファイル名を指定します。

$ rdbunlx -i 伝票DB.DSI_2007_01 -c 伝票 -v /disk3/rdb/data/cfg/selquery.txt -o /disk3/rdb/data/cfg/seloutput.txt 
-r /disk3/rdb/data/outdata/err.xml

qdg25046i:エラーデータ出力ファイル/disk3/rdb/data/outdata/err.xml'に2件のデータを抽出しました (システム名=DBAP)
qdg25020i:検索番号1の出力ファイル'/disk3/rdb/data/outdata/001kekka.xml'に100件のデータを抽出しました(システム名=DBAP)
qdg25020i:検索番号2の出力ファイル'/disk3/rdb/data/outdata/002kekka.xml'に120件のデータを抽出しました(システム名=DBAP)
qdg25020i:検索番号3の出力ファイル'/disk3/rdb/data/outdata/003kekka.xml'に130件のデータを抽出しました(システム名=DBAP)
qdg12074i:rdbunlxが正常終了しました 復帰コード 00 (システム名=DBAP)

備考.rオプション指定時は、出力件数が0件の場合でもqdg25046iのメッセージを出力します。

エラーデータ出力ファイル例

rdbunlxコマンド実行中に、正しくないXMLデータを検出した場合、エラーデータ出力ファイルには以下のようにデータが出力されます。

/disk3/rdb/data/outdata/err.xml

正しくないXMLデータを検出した場合の対処

XMLデータを生成したプログラムを見直してください。
正しくないXMLデータを修復する場合、エラーデータ出力ファイルに出力された情報から対応する行を特定して、rdbexecsqlコマンドやアプリケーションなどでデータを修復してください。


注意

  • rdbunlxコマンドに指定したDSIに対して、他のアプリケーションなどからデータの追加、更新、削除のいずれも動作していない状態で実行してください。
    データの追加、更新、削除のいずれかが動作中に、本コマンドを実行した場合には、エラー終了します。

  • rdbunlxコマンドでは、検索結果を出力するファイルとエラーデータ出力ファイルで、それぞれ出力範囲が異なります。

    出力範囲

    検索結果を出力するファイル

    ルートと呼ばれる要素の終了タグまで出力

    エラーデータ出力ファイル

    レコード全体を出力

  • rdbunlxコマンドは、レコード内でエラーデータを検出した場合であっても、ルートと呼ばれる要素の終了タグまでが正しい形式であれば、ルートと呼ばれる要素の終了タグまでを検索対象とし、検索結果を出力します。この時rdbunlxコマンドのrオプションを指定した場合には、エラーデータ出力ファイルにも出力されます。
    以下にその例を示します。

    開始タグ数よりも終了タグ数の方が多い、誤ったXMLデータを格納した場合

    上記のデータのように終了タグ“</受注伝票>”を記述した場合、ルートと呼ばれる要素の終了タグはデータの途中になります。rdbunlxコマンドは、ルートと呼ばれる要素の終了タグを見つけた地点で検索式に一致していた場合、検索結果を出力するファイルに出力します。

    この場合、検索結果は以下のように出力されます。

    [検索結果を出力するファイル]

    このデータはエラーデータであるため、rdbunlxコマンドのrオプションを指定した場合、以下に示すようにエラーデータ出力ファイルにも、エラーデータとして出力されます。

    [エラーデータ出力ファイル]

    上記のように誤ったXMLデータをデータベースに格納した場合、検索結果を出力するファイルとエラーデータ出力ファイルの両方に結果が出力される場合があります。