8.3.3 データベース作成ユティリティの入力用ファイルの形式
-Wオプションを指定した場合,作成されたアンロードデータファイルは,データベース作成ユティリティの入力データファイルとして使用できます。
(1) DAT形式,及び拡張DAT形式の場合
DAT形式,及び拡張DAT形式の場合,データは文字データで出力します。DAT形式と拡張DAT形式の相違点については,「DAT形式と拡張DAT形式の相違点」を参照してください。この相違点以外は,DAT形式と拡張DAT形式は同じになります。
規則を次に示します。
-
表の1行に対して,ファイルの1行を出力します(行の終わりには改行文字を出力します)。
-
列データ間にはセパレータ文字が入ります。各データ型に対する列データの出力形式(DAT形式)については,「DAT形式の場合」を参照してください。
文字データ,各国文字データ,混在文字データ,及びBINARYデータの出力形式は,引用符(")で囲んだ形となります。
抽象データ型の出力形式は,コンストラクタパラメタ逆生成関数の指定数文のデータを,セパレータ文字で区切った形となります。ただし,コンストラクタパラメタ逆生成関数の戻り値がBLOB型の場合は,ナル値としてセパレータ文字を連続して出力します。
-
LOB列のデータは,-jオプションの指定に関係なくナル値として出力します。
-
抽象データ型の列のデータは,コンストラクタパラメタ逆生成関数の戻り値がBLOB型の場合はナル値として出力します。
-
変換後の行長が512メガバイトを超える場合はエラーとなります。また,アンロードデータファイルにストリーミングテープ装置を割り当てた場合は,行長が32キロバイトを超えるとエラーになります。
-
option文にspacelvl=3を指定していて,更にsupオプションを指定している場合,NCHAR型の半角空白2バイトを空白変換してから,半角空白2バイト分を一組として出力抑止します。
-
列のデータ型が文字データ,各国文字データ,混在文字データ,又はバイナリの場合,列値中に囲み文字(")+セパレータ文字,又はセパレータ文字+囲み文字(")の組み合わせの文字の並びがあるときは,それらを列データの終了位置,開始位置とみなしてデータロードすることがあります。これを防ぐには,-Wオプションでセパレータ文字を変更してアンロードするか,又はバイナリ形式で出力するかしてください。
-
予備列が定義されたFIX属性の表の場合,予備列は出力できません。
(a) 繰返し列の場合の形式
繰返し列の場合は,各要素のデータをセパレータ文字で区切って出力します。
ただし,制御情報ファイルのarray文の指定によって行データ形式が異なります。array文にffを指定した場合の行データ出力形式とvvを指定した場合の行データ出力形式を次の図に示します。
(b) supオプションを指定した場合の形式
アンロード時にsupオプションを指定すると,表定義の列長に満たない部分の空白を圧縮した形式でアンロードデータファイルに出力します。supオプションを指定した場合の形式と,指定しない場合の形式を次に示します。
-
データ型がCHAR,又はMCHARの場合
- (例1) 表定義 CREATE TABLE T1(C1 INTEGER,C2 CHAR(10),…);
-
入力したデータ 1,AA,…
- supオプションを指定した場合:
1,"AA",…
[説明]
表定義長に満たない部分(8文字分)の空白を圧縮して出力します。
- supオプションを指定しない場合:
1,"AA........",… 注 「.」は半角空白を示します。
[説明]
表定義長に満たない部分(8文字分)に半角空白(.)を埋めて出力します。
- (例2) 表定義 CREATE TABLE T1(C1 INTEGER,C2 MCHAR(10),…);
-
入力したデータ 1,..........,…(.は半角空白を示します)
- supオプションを指定した場合:
1,".",…
[説明]
半角空白を1バイト出力します。
- supオプションを指定しない場合:
1,"..........",…
[説明]
表定義長分半角空白を出力します。
-
データ型がNCHARの場合
- (例1) 表定義 CREATE TABLE T1(C1 INTEGER,C2 NCHAR(10),…);
-
入力したデータ 1,AA,…
- supオプションを指定した場合:
1,"AA",…
[説明]
表定義長に満たない部分(8文字分)の空白を圧縮して出力します。
- supオプションを指定しない場合:
1,"AA△△△△△△△△",… 注 「△」は2バイトの空白を示します。
[説明]
表定義長に満たない部分(8文字分)に2バイトの空白を出力します。
- (例2) 表定義 CREATE TABLE T1(C1 INTEGER,C2 NCHAR(10),…);
-
入力したデータ 1,△△△△△△△△△△,…
(△は2バイトの空白を示します)
- supオプションを指定した場合:
1,"△",…
[説明]
2バイトの空白を一つ出力します。
- supオプションを指定しない場合:
1,"△△△△△△△△△△",…
[説明]
表定義長分に2バイトの空白を出力します。
-
データ型がNCHARの場合(option文にspacelvl=3を指定した場合)
- (例1) 表定義 CREATE TABLE T1(C1 INTEGER,C2 NCHAR(10),…);
-
入力したデータ 1,AA....,…(.は半角空白を示します)
- supオプションを指定した場合:
1,"AA",…
[説明]
表定義長に満たない部分(8文字分)の空白を圧縮して出力します。
- supオプションを指定しない場合:
1,"AA................",…
[説明]
表定義長に満たない部分(8文字分)に半角空白を出力します。
- (例2) 表定義 CREATE TABLE T1(C1 INTEGER,C2 NCHAR(10),…);
-
入力したデータ 1,△△△△△△△△△△,…
(△は2バイトの空白を示します)
- supオプションを指定した場合:
1,"..",… 注 「.」は半角空白を示します。
[説明]
半角空白を2バイト分出力します。
- supオプションを指定しない場合:
1,"....................",… 注 「.」は半角空白を示します。
[説明]
表定義長分に半角空白を出力します。
(c) DAT形式と拡張DAT形式の相違点
DAT形式と拡張DAT形式の相違点を次に示します。
項目 |
DAT形式 |
拡張DAT形式 |
---|---|---|
データ中にNULL文字(\0),又は改行文字(\n)がある場合 |
該当する列データ値を含む行は出力しません。 |
該当する列データ値を含む行を出力します(\0及び\nはそのまま出力します)。 |
データ中に囲み文字(")と同じデータがある場合 |
該当する列データ値としての囲み文字は,そのまま出力します。 |
該当する列データ値としての囲み文字を,二重にして出力します。※ (例)「"」→「""」 |
- 注※
-
マルチバイト文字も変換対象になるため,APなどでファイルの内容を参照する場合は注意が必要です。なお,pdloadでは,マルチバイト文字に関係なく「""」を「"」に変換するため,データロードはできます。
(d) 文字コードがUTF-16の拡張DAT形式のpdload用アンロードファイルを作成する場合
文字コードがUTF-16の拡張DAT形式のpdload用アンロードファイルを作成する場合,次のデータが表に格納されているときは,アンロード時に対処が必要となります。
列のデータ型 |
データの内容 |
---|---|
BINARY型 |
奇数バイト長のデータ |
BINARY型データを返却するコンストラクタパラメタ逆生成関数を使用してアンロードする抽象データ型 |
コンストラクタパラメタ逆生成関数の返却値が奇数バイト長のデータ |
上記のデータが表に格納されているかどうかは,次のSQL文を実行することで確認できます。BINARY型,及びBINARY型データを返却するコンストラクタパラメタ逆生成関数を使用してアンロードする抽象データ型のすべての列に対して実行してください。
SELECT COUNT(*) FROM [認可識別子.]表識別子 WHERE 制約式 [OR 制約式 ...] 制約式 ::= { MOD(LENGTH(BINARY型列名),2)=1 | MOD(LENGTH(関数名(列名[,列名 ...])),2)=1 } 関数名 ::= BINARY型データを返却するコンストラクタパラメタ逆生成関数の名称
-
SQL文の実行結果が0件の場合
特に対処は必要ありません。そのままアンロードしてください。
-
SQL文の実行結果が0件でない場合
次のどちらかの方法でアンロードしてください。
-
文字コードをUTF-8(option文のcharsetオペランド指定なし)にして,アンロードしてください。
-
バイナリ形式(-W bin指定)でアンロードしてください。
-
(2) バイナリ形式の場合
バイナリ形式の場合,データはデータベースの列定義に合わせた内部形式で出力します。このため,このファイルをデータベース作成ユティリティの入力とする場合は,アンロードした表とデータロード先の表の列定義は同じでなければなりません。また,非FIX表をアンロードした場合は,列定義が同じであってもFIX表にはデータロードできません。
出力形式を次に示します。
●CMTヘッダ
CMTに出力する場合は,最初に512バイト分のCMTヘッダを付けて出力します。
●行データ
FIX表と非FIX表では行データの出力形式が異なります。なお,各データ型に対する列データの出力形式(バイナリ形式)については,「バイナリ形式の場合」を参照してください。
- ・FIX表の場合
-
列の定義順に,列のデータ値をバウンダリしないで詰めて出力します。FIX表の出力形式を次の図に示します。
図8‒14 FIX表の出力形式 - ・非FIX表の場合
-
各部を順に,バウンダリしないで詰めて出力します。非FIX表の出力形式を次の図に示します。
図8‒15 非FIX表の出力形式 制御部の出力形式を次の図に示します。
図8‒16 非FIX表の制御部の出力形式 -
データの長さ部
データの長さ部の先頭から,データ部の最後までの長さを2進数(4バイト)で出力します。図「非FIX表の制御部の出力形式」では,Lになります。
-
データのオフセット部
データのオフセット部は,列定義順にバウンダリしないで詰めて出力します。対象列が抽象データ型の場合は,コンストラクタ逆生成関数の関数分(unld_func文に指定した数),関数指定順(unld_func文に指定した順)にオフセット値をバウンダリしないで詰めて出力します。
-
オフセット値
データの長さ部の先頭から,各列(コンストラクタパラメタ逆生成関が生成したデータ値)のデータ値の先頭までの長さを2進数(4バイト)で出力します。データ値がナル値の場合は,0を出力します。
データ部は,図「非FIX表の出力形式」に示すように,基本データ部,BINARY属性データ部,BINARY列データ部,BLOB属性データ部,及びBLOB列データ部から成ります。
- 基本データ部
-
制御部(データのオフセット値)の後からデータの長さ(図「非FIX表の制御部の出力形式」のL)分まで,データの長さ列のデータ値,及びコンストラクタパラメタ逆生成関数が返却したデータ値を出力します。なお,該当列のオフセット値が0(ナル値)の場合は出力しません。また,各列のデータ値及びコンストラクタパラメタ逆生成関数が返却したデータ値の出力順は保障しません(各データ値の先頭位置はオフセット値で参照できます)。基本データ部に出力する,各列及びコンストラクタパラメタ逆生成関数が返却したデータ値を次の表に示します。
表8‒3 基本データ部に出力する値 列の属性
列のデータ型
コンストラクタパラメタ逆生成関数が返却するデータ型
基本データ部に出力する値
繰返し列
−
−
※
上記以外
抽象データ型
BINARY型
コンストラクタパラメタ逆生成関数が返却したデータ値の長さ
BLOB型
コンストラクタパラメタ逆生成関数が返却したデータ値の長さ
上記以外
コンストラクタパラメタ逆生成関数が返却したデータ値
BINARY型
−
列のデータ値の長さ
BLOB型
−
列のデータ値の長さ
上記以外
−
列のデータ値
(凡例)−:該当しません。
- 注※
-
繰返し列の場合,基本データ部に出力する値は要素数,要素データで構成し,バウンダリしないで詰めて出力します。繰返し列の場合の基本データ部の出力形式を次の図に示します。
図8‒17 繰返し列の場合の基本データ部の出力形式 -
要素数
繰返し列のデータ中の要素の数を2進数(2バイト)で1〜30,000の範囲で出力します。pdloadは要素数が0の場合はエラーデータとして扱うため,要素数を0にするのではなく,オフセット値を0(ナル値)としてください。
-
要素データ
要素値(ナルフラグとデータ値)を要素ごとに,データベース格納順にバウンダリしないで詰めて出力します。なお,要素数が0の場合は出力しません。
-
要素値
ナルフラグとして,先頭1バイトに該当する要素がナル値かどうかを示す値を2進数(1バイト)で出力します。ナル値の場合は「0x01」を,ナル値以外の場合は「0x00」を出力します。
ナルフラグに続けてデータ値をデータ値の長さ分,バウンダリしないで出力します。
-
- BINARY属性データ部及びBLOB属性データ部
-
抽象データ型の列を含む表の場合,その抽象データ型に対してunld_func文に指定したコンストラクタパラメタ逆生成関数が返却するデータ型がBINARY型又はBLOB型のとき,返却したBINARYデータ値又はBLOBデータ値(長さを含まない)を出力します。unld_func文にコンストラクタパラメタ逆生成関数を指定していないときは,BINARY属性データ部又はBLOB属性データ部は存在しません。
BINARY属性データ部又はBLOB属性データ部は,列定義順及びコンストラクタパラメタ逆生成関数関数の指定順に,バウンダリしないで詰めて,基本データ部に出力した長さ分出力します。コンストラクタパラメタ逆生成関数が返却する値がナル値のときはそのデータ値は出力しません。
次に示す例の場合の,BINARY属性データ部の出力形式を図「BINARY属性データ部の出力形式(例)」に示します。
(例)
表定義: CREATE TABLE T1(c1 ADT1,C2 INTEGER,C3 ADT2)
ADT1:抽象データ型(ADT1)
ADT2:抽象データ型(ADT2)
unld_func文の指定: unld_func type=ADT1,func=adt1_func1(ADT1),adt1_func2(ADT1),adt1_func3(ADT1) unld_func type=ADT2,func=adt2_func1(ADT2),adt2_func2(ADT2),adt2_func3(ADT2)
adt1_func1/adt1_func3:BINARY型のデータを返却するコンストラクタパラメタ逆生成関数
adt1_func2:INTEGER型のデータを返却するコンストラクタパラメタ逆生成関数
adt2_func1/adt2_func3:BINARY型のデータを返却するコンストラクタパラメタ逆生成関数
adt2_func2:INTEGER型のデータを返却するコンストラクタパラメタ逆生成関数
図8‒18 BINARY属性データ部の出力形式(例) - BINARY列データ部及びBLOB列データ部
-
BINARY型又はBLOB型の列が含まれる表の場合,BINARY型又はBLOB型の列のデータ値(長さを含まない)を出力します。BINARY型の列がない表のときはBINARY列データ部は存在しません。また,BLOB型の列がない表のとき,及びコマンドラインに-jオプションを指定していないときはBLOB列データ部は存在しません。
BINARY型又はBLOB型の列のデータ値は,列定義順にバウンダリしないで詰めて,基本データ部に出力した長さ分出力します。なお,該当する列の値がナル値のときはそのデータ値は出力しません。
-
(3) 固定長データ形式の場合
固定長データ形式の場合,データは固定長の文字データで出力します。
(a) 出力形式
-
出力単位
データベース中の1行に対して,1行のデータを出力します。
-
1行の出力形式
-
1行の長さ
固定長で出力します。
-
列データの出力順序
列定義順に出力します。
-
列間のセパレータ
列データと列データの間には,セパレータ文字を出力しません。
-
改行
オプションを指定すれば,1行の終端に改行文字を入れられます。
-
-
各列の出力形式
各列のデータの出力形式については,表「各列のデータの出力形式」を参照してください。
-
繰返し列の出力形式
各要素のデータを,定義されている要素数分繰り返して出力します。各要素のデータの出力形式については,表「各列のデータの出力形式」を参照してください。
-
特殊な列データの出力形式
-
列データがナル値
列データの出力長分のパディング文字を埋めて出力します。繰返し列の場合,(列データの出力長×定義されている要素数)分のパディング文字を埋めて出力します。
-
繰返し列の要素がナル値
列データの出力長分のパディング文字を埋めて出力します。
-
列データ中の制御文字
文字データ型,混在文字データ型,及び各国文字データ型の場合,制御文字があったときの動作をfixtext_option文で指定できます。デフォルトは,制御文字があるかどうかをチェックしません。
表8‒4 各列のデータの出力形式 列のデータ型
出力形式
出力長
(単位:バイト)※1
数データ
INTEGER
-
fixtext_option文でformat=integer,type1を指定した場合,又はfixtext_option文を省略した場合
・数値を右詰めで出力します。
・先頭1バイトを符号部とし,プラスの値の場合は空白文字(0x20),マイナスの値の場合は"-"を出力します。
・空いた部分は"0"で埋めて出力します。
- (例)
-
△0000000001
-0000000001
注 △は空白文字です。
-
fixtext_option文でformat=integer,type2を指定した場合
・数値を右詰めで出力します。
・数値の左隣を符号部とし,プラスの値の場合は空白文字(0x20),マイナスの値の場合は"-"を出力します。
・空いた部分は空白文字(0x20)で埋めて出力します。
- (例)
-
△△△△△△△△△△2
△△△△△△△△△-2
注 △は空白文字です。
11
SMALLINT
-
fixtext_option文でformat=smallint,type1を指定した場合,又はfixtext_option文を省略した場合
・数値を右詰めで出力します。
・先頭1バイトを符号部とし,プラスの値の場合は空白文字(0x20),マイナスの値の場合は"-"を出力します。
・空いた部分は"0"で埋めて出力します。
- (例)
-
△00003
-00003
注 △は空白文字です。
-
fixtext_option文でformat=smallint,type2を指定した場合
・数値を右詰めで出力します。
・数値の左隣を符号部とし,プラスの値の場合は空白文字(0x20),マイナスの値の場合は"-"を出力します。
・空いた部分は空白文字(0x20)で埋めて出力します。
- (例)
-
△△△△△3
△△△△-3
注 △は空白文字です。
6
DECIMAL
-
整数.小数の形式で,数値を右詰めで出力します。
-
先頭1バイトを符号部とし,プラスの値の場合は空白文字(0x20),マイナスの値の場合は"-"を出力します。
-
空いた部分は"0"で埋めて出力します。
- (例1)
-
DEC(6,2)
△0003.14
-0003.14
- (例2)
-
DEC(6,0)
△000314.
-000314.
- (例3)
-
DEC(6,6)
△.000314
-.000314
注 △は空白文字です。
けた数+2
FLOAT
-
仮数部E指数部の形式で,左詰めで出力します。
-
先頭1バイトを符号部とし,プラスの値の場合は"+",マイナスの値の場合は"-"を出力します。
-
空いた部分は空白文字(0x20)で埋めて出力します。
- (例1)
-
20E10
+2.000000000000000E+011
- (例2)
-
-30E222
-3.000000000000000E+223
注 △は空白文字です。
23
SMALLFLT
-
仮数部E指数部の形式で,左詰めで出力します。
-
先頭1バイトを符号部とし,プラスの値の場合は"+",マイナスの値の場合は"-"を出力します。
-
空いた部分は空白文字(0x20)で埋めて出力します。
- (例)
-
20E10
+2.000000000000000E+011
注 △は空白文字です。
23
文字データ
CHARACTER
-
左詰めで定義長分出力します。
-
fixtext_option文のencloseオペランドで囲み文字の付加有無を指定できます。
- (例1)
-
enclose指定なし,定義長:8
AIKO△△△△
- (例2)
-
enclose=",定義長:8
"AIKO△△△△"
注 △は空白文字です。
条件によって変わります※2
VARCHAR
-
左詰めで実長分出力します。
-
fixtext_option文のencloseオペランドで囲み文字の付加有無を指定できます。
-
-W fixtextオプションを指定すると,定義長より短い可変長文字列の場合は,定義長までパディング文字を埋めて出力します。
- (例1)
-
enclose指定なし,定義長:8,実長:4
AIKO△△△△
- (例2)
-
enclose=",定義長:8,実長:4
"AIKO"△△△△
注 △はパディング文字です。
条件によって変わります※2
混在文字データ
MCHAR
CHARACTERと同じです。
定義長※3
MVARCHAR
VARCHARと同じです。
定義長※3
各国文字データ
NCHAR
CHARACTERと同じです。
定義長×2※3
NVARCHAR
VARCHARと同じです。
定義長×2※3
日付データ
DATE
yyyy-mm-ddの形式で出力します(yyyy:西暦,mm:月,dd:日)。
- (例)
-
2004-03-12
10
時刻データ
TIME
hh:mm:ss の形式で出力します(hh:時,mm:分,ss:秒)。
- (例)
-
12:12:12
8
日間隔データ
INTERVAL YEAR TO DAY
-
[△|-]yyyymmdd.の形式で出力します(△:空白文字,-:マイナス符号,yyyy:西暦,mm:月,dd:日)。
-
先頭1バイトを符号部とし,プラスの値の場合は空白文字(0x20),マイナスの値の場合は"-"を出力します。
- (例)
-
△00010101.
-00010101.
注 △は空白文字です。
10
時間隔データ
INTERVAL HOUR TO SECOND
-
[△|-]hhmmss.の形式で出力します(△:空白文字,-:マイナス符号,hh:時,mm:分,ss:秒)。
-
先頭1バイトを符号部とし,プラスの値の場合は空白文字(0x20),マイナスの値の場合は"-"を出力します。
- (例)
-
△010101.
-010101.
注 △は空白文字です。
8
時刻印データ
TIMESTAMP
yyyy-mm-dd△hh:mm:ss[.nnnnnn]の形式で出力します(yyyy:西暦,mm:月,dd:日,△:空白文字,hh:時,mm:分,ss:秒,nnnnnn:小数秒部)。なお,小数秒部は,定義によって0,2,4,又は6けたで出力します。0けたの場合,'.'は出力しません。
- (例)
-
1970-03-12△12:12:12
注 △は空白文字です。
19
小数秒部
0:+0
2:+3
4:+5
6:+7
長大データ
BLOB
データを出力しません。
0
バイナリデータ
BINARY
データを出力しません。
0
抽象データ型
−
データを出力しません。
0
-
-
- (凡例)
-
−:該当しません。
- 注※1
-
アンロードデータファイルをHiRDBの既定文字コード以外の文字コードで出力する場合,2倍のバイト長で出力します。
- 注※2
-
文字データ型の出力長を次に示します。
項番
アンロードデータファイルの文字コード
列の文字集合
encloseオペランド指定
出力長(バイト)
1
HiRDBの既定文字コード
UTF-16
なし
定義長×2
2
あり
定義長×2+2
3
上記以外(指定なしも含む)
なし
定義長
4
あり
定義長+2
5
上記以外
UTF-16
なし
定義長
6
あり
定義長+2×2
7
上記以外(指定なしも含む)
なし
定義長×2
8
あり
定義長×2+2×2
- 注※3
-
fixtext_option文にencloseオペランドを指定した場合,出力長に2バイトを加算してください。
(b) 規則
-
1行(改行含む)は最大512メガバイト(536,870,912バイト)まで出力できます。
-
抽象データ型列がある表の場合,unld_func文を指定する必要があります。
-
FLOAT型又はSMALLFLT型のデータを文字形式に変換した場合,データ値が切り上げられることがあります。データ値が切り上げられると,データベース作成ユティリティ(pdload)でデータ変換エラーとなる場合があります。その場合は,pdloadのオプションに-Fを指定することでデータロードができます。
-
予備列が定義されたFIX表の場合,予備列は出力できません。