Hitachi

ノンストップデータベース HiRDB Version 9 コマンドリファレンス(Windows(R)用)


5.7.4 記述例

列構成情報ファイルの記述例を次に示します。

〈この項の構成〉

(1) DAT形式

(a) 入力データファイル中に不要なデータが含まれる場合

表定義:
CREATE TABLE T1 (COL1 INTEGER,COL2 DATE,COL3 CHAR(10));
入力データファイル及び列構成情報ファイル:

[図データ]

(b) 順序数生成子を使用した場合

順序数生成子(USER01.SEQ_B01)から順序番号を生成し,COL03に格納する例について示します。

表定義:
CREATE TABLE T1 (COL1 INTEGER,
                 COL2 CHAR(10),
                 COL3 DECIMAL(10),
                 COL4 INTEGER);
入力データファイル:
1,ABC,2500
2,DEF,30000
3,GHI,10
   :
列構成情報ファイル:
COL1
COL2
COL4
*adddata*
COL3,sequence=(USER01.SEQ_B01)

(2) 固定長データ形式

表定義:
CREATE TABLE T1 (COL1 INTEGER,COL2 DATE,COL3 CHAR(10));
入力データファイル及び列構成情報ファイル:

[図データ]

(3) pdrorg出力バイナリ形式

LOB属性を含むSGMLTEXT型の列がある表T1と,BLOB型の列がある表T2を例にして,表T1のアンロードデータを表T2にデータロードする場合について説明します。なお,説明中の表定義は,列名及びデータ型の指定部分だけで,ほかの指定部分は省略しています。

(a) T1とT2の列定義の順序が異なる場合

  • アンロード時の表定義

    T1(C1 INT, C2 SGMLTEXT, C3 BLOB)
  • データロード時の表定義

    T2(C4 BLOB ,C5 INT, C6 SGMLTEXT)
  • 列構成情報ファイルの内容

    C5
    C6, func=(SGMLTEXT, param=blob)
    C4

(b) T2の列がT1より少ない場合

  • アンロード時の表定義

    T1(C1 INT, C2 SGMLTEXT, C3 BLOB)
  • データロード時の表定義

    T2(C4 INT ,C5 BLOB)
  • 列構成情報ファイルの内容

    C4
    *skipdata*, type=blobprm
    C5

(c) T2の列がT1より多い場合

  • アンロード時の表定義

    T1(C1 INT, C2 BLOB)
  • データロード時の表定義

    T2(C4 INT, C5 BLOB, C6 SGMLTEXT)
  • 列構成情報ファイルの内容

    C4
    C5

(d) 列データを入れ替える場合

T1のSGMLTEXT型列のLOB属性のデータ(C2)をT2のLOB列(C6)に,T1のLOB列のデータ(C3)をT2のSGMLTEXT型列のLOB属性(C5)に,それぞれ入れ替えます。

  • アンロード時の表定義

    T1(C1 INT, C2 SGMLTEXT, C3 BLOB)
  • データロード時の表定義

    T2(C4 INT ,C5 SGMLTEXT, C6 BLOB)
  • 列構成情報ファイルの内容

    C4
    C6, type=blobprm
    C5, func=(sgmltext, param=blob)

(e) 列のデータ型を変更する場合

SGMLTEXT型列のLOB属性のデータ(C2)をSGMLBIN型列のBINARY属性(C5)に,LOB列のデータ(C3)をBINARY型列(C6)にデータロードします。

  • アンロード時の表定義

    T1(C1 INT, C2 SGMLTEXT, C3 BLOB)
  • データロード時の表定義

    T2(C4 INT ,C5 SGMLBIN, C6 BINARY)
  • 列構成情報ファイルの内容

    C4   ................................................1
    C5, func=(sgmlbin, param=binary, type=blobprm)   ....2
    C6, type=blob   .....................................3

    [説明]

    1. T1のC1データを,T2のC4に格納することを意味します。C1とC4のデータ型は同じであるため,データ型の指定は省略します。

    2. T1のC2データを,T2のC5に格納することを意味します。プラグインが提供する抽象データ型列SGMLBINにデータを格納するため,コンストラクタ関数sgmlbinと属性のデータ型binaryをfuncオペランドで指定します。入力データは,プラグインが提供する抽象データ型列SGMLTEXTのLOB属性のデータのため,typeオペランドでLOB属性であること(blobprm)を指定します。

    3. T1のC3データをT2のC6に格納することを意味します。C3のデータ型とC6のデータ型が異なるため,typeオペランドに入力データのデータ型(blob)を指定します。

(f) T1とT2の列定義が異なる場合

CHARACTER型の定義長を,10から21に拡張してデータロードします。

  • アンロード時の表定義

    T1(C1 CHAR(10), C2 BLOB)
  • データロード時の表定義

    T2(C1 CHAR(21), C2 BLOB)
  • 列構成情報ファイルの内容

    C1,type=char(10)
    C2

(g) データ変換をする場合に必要となる領域

データ変換をする場合,データ変換後のBINARY型データ,抽象データ型のBINARYパラメタデータ,及び抽象データ型のBLOBパラメタデータのデータの間にBLOBデータが入るような並びになったときは,そのBLOBデータ保持するためにメモリを確保する必要があります。メモリを確保できない場合は,メモリ確保エラーで終了します。次のような場合に,メモリの確保が必要となります。

  • BLOBデータを,BLOB属性の抽象データ型列にデータロードする場合,そのBLOBデータよりも前にBLOB型の列へデータロードするデータがあるとき

  • 抽象データ型のBLOBパラメタデータをBLOB型の列にデータロードする場合,その抽象データ型のBLOBパラメタデータよりも後にBLOB属性の抽象データ型列へデータロードするデータがあるとき

  • BLOBデータ,又は抽象データ型のBLOBパラメタデータを,BINARY型の列,又はBINARY属性の抽象データ型列にデータロードする場合,対象となるBLOBデータ,又は抽象データ型のBLOBパラメタデータより前に,ほかのBLOB型の列へデータロードするデータがあるとき

BINARY型の列,BLOB属性の抽象データ型列,及びBLOB型の列を定義した表から出力した,pdrorg出力バイナリ形式の入力データファイルのデータの並びを次の図に示します。

図5‒27 pdrorg出力バイナリ形式の入力データファイルのデータの並び

[図データ]

[説明]

pdloadでは,入力データ領域として少なくともMの領域を確保します。領域は,格納先の表定義からMの最大長を算出して確保します(source文のmaxreclenオペランドで,任意にこの長さを指定することもできます)。

データがこの並びのままデータロードする場合は,データを順番に処理するため,pdloadはこれ以上入力データを保持するための領域は確保しません。

列構成情報ファイルでデータの変換を指定した場合,pdloadはM+M2+Kの領域を確保します。入力データ領域として,M+M2の領域を確保しますが,更にBINARY型に変換した部分より前のBLOBデータ部分も保持する必要があるため,Kの領域も確保します。Kの部分の領域は,option文のbloblimitオペランドで指定できます。格納先の表定義から算出した値,又はoption文のbloblimitオペランドの指定値のうち,小さい方の値で領域を確保します。