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
[説明]
-
T1のC1データを,T2のC4に格納することを意味します。C1とC4のデータ型は同じであるため,データ型の指定は省略します。
-
T1のC2データを,T2のC5に格納することを意味します。プラグインが提供する抽象データ型列SGMLBINにデータを格納するため,コンストラクタ関数sgmlbinと属性のデータ型binaryをfuncオペランドで指定します。入力データは,プラグインが提供する抽象データ型列SGMLTEXTのLOB属性のデータのため,typeオペランドでLOB属性であること(blobprm)を指定します。
-
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出力バイナリ形式の入力データファイルのデータの並びを次の図に示します。
- [説明]
-
pdloadでは,入力データ領域として少なくともMの領域を確保します。領域は,格納先の表定義からMの最大長を算出して確保します(source文のmaxreclenオペランドで,任意にこの長さを指定することもできます)。
データがこの並びのままデータロードする場合は,データを順番に処理するため,pdloadはこれ以上入力データを保持するための領域は確保しません。
列構成情報ファイルでデータの変換を指定した場合,pdloadはM+M2+Kの領域を確保します。入力データ領域として,M+M2の領域を確保しますが,更にBINARY型に変換した部分より前のBLOBデータ部分も保持する必要があるため,Kの領域も確保します。Kの部分の領域は,option文のbloblimitオペランドで指定できます。格納先の表定義から算出した値,又はoption文のbloblimitオペランドの指定値のうち,小さい方の値で領域を確保します。