5.5.3 固定長データ形式の場合
固定長データ形式の場合,入力データは文字,又はデータベースに格納される形で記述します。
抽象データ型に格納するデータをコンストラクタ関数で生成する場合は,入力パラメタを文字データ,又は関数の引数の型で記述します。
なお,文字列形式の数値データ,及び文字列形式の文字データとは,それぞれ次の表に示すデータ型の列に格納する文字列データのことです。
文字列形式の数値データ |
文字列形式の文字データ |
---|---|
|
|
- 〈この項の構成〉
(2) 規則
-
1行の長さは固定です。
-
各列値の開始位置は統一してください。また,数値に変換して格納する文字列は左詰めでも右詰めでもよいですが,文字のまま格納するときは左詰めにしてください(可変長文字列の場合は,空白などを埋めて次の列の開始位置を統一してください)。
-
ナル値は列構成情報ファイルの指定に従います。
-
CHAR,VARCHAR,NCHAR,NVARCHAR,MCHAR,及びMVARCHARに対して固定長の文字列データを入力した場合(type=char(n)を指定した場合),先頭1バイトを除いて,列値の終端から連続する半角空白,タブ,及び\0を削除します。その後,ナル比較値の比較,及びデータベースへのデータの格納をします。
そのため,タブと\0はCHAR及びMCHARには格納できません。半角空白,タブ,及び\0は,VARCHAR,NCHAR,NVARCHAR,及びMVARCHARには格納できません。また,半角文字を入力できないデータ型(NCHAR及びNVARCHAR)に対して半角空白,タブ,及び\0があるデータを入力した場合,次のようになります。
- (a) すべて半角空白,タブ,又は¥0のデータの場合
-
半角空白,タブ,及び\0を取り除いた結果,先頭1バイトだけが残ります。ただし,NCHAR型,及びNVARCHAR型は,データ長が必ず偶数バイトでなければならないため,データ長が不正なデータとしてエラーになります。
- (b) 半角空白,タブ,又は¥0と,それ以外のデータが混在する場合
-
列値の終端から連続する半角空白,タブ,及び\0を削除した結果,データ長が奇数バイトの場合,(a)と同様にデータ長が不正なデータとしてエラーになります。半角空白,タブ,及び\0を削除した結果,データ長が偶数バイトの場合はデータベースにデータを格納します。
以上の点から,NCHAR型,及びNVARCHAR型へ格納する固定長文字列の入力データの後方を埋める文字は,半角空白,タブ,及び\0ではなく,全角空白を使用するようにしてください。
また,表のデータ型がNCHARの場合,入力対象外としたデータのために格納する入力データが表の定義長に満たない部分には,全角空白が仮定されます。
-
入力データファイルの列データの形式を,必ず列構成情報ファイルに指定してください。なお,固定長データ形式の場合,ほかの入力データファイルにはない固有の入力データ型があります。詳細については,「固定長データ形式固有の入力データ型」を参照してください。
-
入力データ側の文字データの長さと格納表の定義長が異なる場合,DAT形式ファイルの固定長データの場合と同様の扱いとなります。ただし,可変長文字データの長さ部が列構成情報ファイルに指定した定義長を超える場合,データは格納されません。また,可変長文字データの長さ部が負の値でも処理は続行します。
-
データベースに格納されるデータ形式で入力データを記述する場合,バイナリ形式のフォーマットで記述してください。バイナリ形式のフォーマットについては,「バイナリ形式の場合」を参照してください。
-
文字列形式の数値データでデータを記述する場合,格納先の列のデータ型に変換可能な文字列でデータを記述してください。
-
列名文のmodeオペランドの指定がtextの場合だけ,文字列形式の文字データでは囲み文字が使用できます。入力データの先頭1バイト目が「"」で始まり,末尾が「"」で終わっているとき,「"」を囲み文字と判断し,囲まれているデータを入力データとして扱います。
-
文字列形式で入力データを記述する場合の空白(0x20)と囲み文字(0x22)の扱いと,文字列形式で入力データを記述した場合に,データベースに格納されるデータを次の表に示します。
表5‒31 文字列形式で入力データを記述する場合の空白(0x20)と囲み文字(0x22)の扱い(固定長データ形式) 表の列のデータ型,又はコンストラクタ関数のパラメタのデータ型
列名文及びoption文の指定内容
空白(0x20)
囲み文字(")
囲み文字で囲まれていない場合
囲み文字で囲まれている場合
INTEGER,SMALLINT,DECIMAL,FLOAT,及びSMALLFLT
option文allspaceオペランドの指定あり
先頭から後方へ連続する空白,及び終端から前方へ連続する空白を除いた値が入力データとなります。数値と数値の間や,符号と数値の間の空白は除かないため,数値や符号の途中に空白を指定しないでください。データがすべて空白の場合は指定値「0」となります。
入力データエラーとなります。
option文allspaceオペランドの指定なし
先頭から後方へ連続する空白,及び終端から前方へ連続する空白を除いた値が入力データとなります。数値と数値の間や,符号と数値の間の空白は除かないため,数値や符号の途中に空白を指定しないでください。データがすべて空白の場合は入力データなしとなり,入力データエラーとなります。
CHAR及びMCHAR
mode=text
終端から前方へ連続する空白を除いた値が入力データとなります。
空白を含めた値が入力データとなります。
「"」を囲み文字として扱います。「"」を除いた値が入力データとなります。
mode=bin
空白を含めた値が入力データとなります。
「"」を囲み文字として扱いません。「"」を含めた値が入力データとなります。
NCHAR
−
終端から前方へ連続する空白を除いた値が入力データとなります。
空白を含めた値が入力データとなります。
「"」を囲み文字として扱います。「"」を除いた値が入力データとなります。
VARCHAR及びMVARCHAR
enclose_del=yes
終端から前方へ連続する空白を除いた値が入力データとなります。データがすべて空白の場合は1バイトの空白データとなります。
空白を含めた値が入力データとなります。
「"」を囲み文字として扱います。「"」を除いた値が入力データとなります。連続する囲み文字の「""」は0長データとなります。
enclose_del=no
「"」を囲み文字として扱いません。「"」を含めた値が入力データとなります。
NVARCHAR
−
終端から前方へ連続する空白を除いた値が入力データとなります。データがすべて空白の場合は1バイトの空白(奇数バイト)となり,入力データエラーとなります。
空白を含めた値が入力データとなります。
「"」を囲み文字として扱います。「"」を除いた値が入力データとなります。連続する囲み文字の「""」は0長データとなります。
DATE,INTERVAL YEAR TO DAY,TIME,INTERVAL HOUR TO SECOND,及びTIMESTAMP
−
先頭から後方へ連続する空白,及び終端から前方へ連続する空白を除いた値が入力データとなります。
入力データエラーとなります。
BLOB
−
終端から前方へ連続する空白を除いた値が入力データとなります。
空白を含めた値が入力データとなります。
「"」を囲み文字として扱いません。「"」を含めた値が入力データとなります。
BINARY(7)
−
空白を含めた値が入力データとなります。
「"」を囲み文字として扱いません。「"」を含めた値が入力データとなります。
XML型のBINARY属性パラメタ(ファイルパスを指定する場合)
−
終端から前方へ連続する空白を除いた値がファイルパス名となります。
終端から前方へ連続する空白を除いた値がファイルパス名となります。囲み文字もファイルパス名の一部とみなされます。
「"」を囲み文字として扱いません。「"」を含めた値がファイルパス名となります。
(凡例)−:該当しません。
表の列のデータ型,又はコンストラクタ関数のパラメタのデータ型 |
列名文及びoption文の指定内容 |
入力データファイルの記述データ |
格納データ |
|
---|---|---|---|---|
INTEGER,SMALLINT,DECIMAL,FLOAT,及びSMALLFLT |
type=char(3) |
1△△ |
各データ型の1 |
|
△△1 |
||||
△1△ |
||||
+△1 |
入力データエラー |
|||
1△1 |
||||
type=char(3) |
option文allspaceオペランドの指定あり |
△△△ |
各データ型の「0」 |
|
option文allspaceオペランドの指定なし |
△△△ |
入力データエラー |
||
CHAR(7)及びMCHAR(7) |
type=char(7)又はtype=char(7),mode=text |
ABC△△△△ |
ABC△△△△ |
|
"ABC"△△ |
||||
"ABC△△" |
||||
""ABC"" |
"ABC"△△ |
|||
△△△△△△△ |
△△△△△△△ |
|||
""△△△△△ |
||||
△"△A△"△ |
△"△A△"△ |
|||
type=char(7),mode=bin |
ABC△△△△ |
ABC△△△△ |
||
"ABC"△△ |
"ABC"△△ |
|||
"ABC△△" |
"ABC△△" |
|||
""ABC"" |
""ABC"" |
|||
△△△△△△△ |
△△△△△△△ |
|||
""△△△△△ |
""△△△△△ |
|||
△"△A△"△ |
△"△A△"△ |
|||
NCHAR(3) |
type=char(6) |
あ▲▲ |
あ▲▲ |
|
"あ"▲ |
"あ"▲ |
|||
"あ▲" |
あ▲▲ |
|||
""あ"" |
"あ"▲ |
|||
▲▲▲ |
▲▲▲ |
|||
""▲▲ |
""▲▲ |
|||
VARCHAR(7)及びMVARCHAR(7) |
type=char(7)又はtype=char(7),enclose_del=yes |
ABC△△△△ |
ABC(3バイト) |
|
"ABC"△△ |
||||
"ABC△△" |
ABC△△(5バイト) |
|||
""ABC"" |
"ABC"(5バイト) |
|||
△△△△△△△ |
△(1バイト) |
|||
""△△△△△ |
(0バイト) |
|||
△"△A△"△ |
△"△A△" |
|||
type=char(7),enclose_del=no |
ABC△△△△ |
ABC(3バイト) |
||
"ABC"△△ |
"ABC"(5バイト) |
|||
"ABC△△" |
"ABC△△"(7バイト) |
|||
""ABC"" |
""ABC""(7バイト) |
|||
△△△△△△△ |
△(1バイト) |
|||
""△△△△△ |
""(2バイト) |
|||
△"△A△"△ |
△"△A△"△ |
|||
NVARCHAR(3) |
type=char(6) |
あ▲▲ |
あ▲▲(6バイト) |
|
"あ"▲ |
"あ"▲(6バイト) |
|||
"あ▲" |
あ▲(4バイト) |
|||
""あ"" |
"あ"(4バイト) |
|||
▲▲▲ |
▲▲▲(6バイト) |
|||
""▲▲ |
""▲▲(6バイト) |
|||
DATE |
type=char(12) |
2003-12-31△△ |
2003-12-31 |
|
△△2003-12-31 |
||||
△2003-12-31△ |
||||
INTERVAL YEAR TO DAY |
type=char(11) |
00010101.△△ |
+00010101. |
|
△△00010101. |
||||
△00010101.△ |
||||
TIME |
type=char(10) |
08:45:00△△ |
08:45:00 |
|
△△08:45:00 |
||||
△08:45:00△ |
||||
INTERVAL HOUR TO SECOND |
type=char(9) |
010101.△△ |
+010101. |
|
△△010101. |
||||
△010101.△ |
||||
TIMESTAMP |
type=char(21) |
1991-01-01△11:22:33△△ |
1991-01-01△11:22:33 |
|
△△1991-01-01△11:22:33 |
||||
△1991-01-01△11:22:33△ |
||||
BLOB |
type=char(13) |
c:\pdload\file01△△ |
c:\pdload\file01のデータ |
|
△△c:\pdload\file01 |
エラー |
|||
△c:\pdload\file01△ |
||||
BINARY(7) |
type=char(7) |
△△△△△△△ |
△△△△△△△ |
- (凡例)
-
△:半角の空白(0x20)
▲:全角の空白
-
入力データファイルに予備列のデータを記述しないでください。入力データファイルに予備列のデータが記述された場合,pdloadは,次のどちらかの動作をします。
-
エラーが発生し,論理エラー番号の1,2,4,5,7,8,9又は10を出力します。
論理エラー番号については,「エラー情報ファイルの内容」を参照してください。
-
リターンコード0で正常終了します。
ただし,KFPL00703-Iメッセージで示した格納行数が,入力したデータ行数より多くなります。
-
(3) 固定長データ形式固有の入力データ型
固定長データ形式の入力データファイルは,表の列データ型と同じデータ形式,又は列データ型にデータ変換可能な文字列で作成しますが,DECIMAL型の列に格納する入力データ型として,ADEC(ASCII CODE DECIMAL)型とBDEC(BINARY DECIMAL)型を使用できます。
(a) ADEC型(ASCII CODE DECIMAL)
ADEC型は,文字列形式で数値データを記述します。データ中には小数点を持たないで,列構成情報ファイルで小数点の位置を指定するデータ型です。ADEC型の形式を次に示します。
- <規則>
-
-
使用できる文字を次に示します。
+,−,空白(0x20),タブ(0x09),ナル文字(0x00),0〜9
ただし,データ中に1バイト以上の空白,タブ,又はナル文字を含むと,小数点を持たない整数値と解釈します。そのため,typeオペランドで指定した精度と位取りで小数点位置を解釈するデータを作成する場合は,「0」でパディングする必要があります。
-
符号(+又は−)だけの入力データは,入力データエラーとなります。
-
option文のallspaceオペランド指定ありの場合だけ,空白だけの入力データを許可します。この場合,0が格納されます。allspaceオペランド指定なしの場合は入力データエラーとなります。
-
入力データ中には小数点は記述しません。列構成情報ファイルのtypeオペランドで精度と位取りを指定します。精度(m)と位取り(n)の関係を次に示します。
1≦m≦38 0≦n≦38 m≧n
-
入力データに符号(+又は−)を持つ場合,精度(m)には符号部1バイトを含めたけた数を指定します。
-
typeオペランドで指定した精度と位取りは,格納する列のDECIMAL型にデータ変換可能(けた落ちが発生しない)値を指定します。データ変換不可の場合,制御文エラーとなります。
-
- <データの格納例>
-
次の場合のデータの格納例を次の表に示します。
-
格納する表の列定義:DECIMAL(10,4)
-
入力データ:ADEC型
-
列構成情報ファイルの指定:type=adec(10,4)
表5‒33 ADEC型で記述したデータをDECIMAL(10,4)に格納した場合の例 入力データファイルに記述したデータ
DECIMAL(10,4)に格納するデータ
説明
1△△△△△△△△△
+000001.0000
1バイトでも空白を含むと,typeオペランドに指定した精度と位取りは無視され,小数点がない値と解釈します。
△△△△△△△△△1
+000001.0000
△△△△△1△△△△
+000001.0000
△△△△△10000
+010000.0000
000001△△△△
+000001.0000
1000000000
+100000.0000
0〜9だけの場合,typeオペランドに指定した精度と位取りで小数点の位置を決定します。
0000000001
+000000.0001
0000010000
+000001.0000
+000010000
+000001.0000
0〜9の値と符号部の場合,小数点の位置はデータの後方から解釈します。
-000010000
-000001.0000
- (凡例)
-
△:空白(0x20)
-
(b) BDEC型(BINARY DECIMAL)
BDEC型は,2進数で記述されたバイナリデータを10進数で記述し,10進数のけた数に合わせて,表の列データ型から小数点の位置を決定するデータ型です。BDEC型は先頭1ビットを符号として扱います。形式を次に示します。
- <規則>
-
-
列構成情報ファイルのtypeオペランドでバイナリデータの長さを指定します。
-
BDEC型のけた数(m)を次に示します。
32ビットモードの場合:1〜4バイト
64ビットモードの場合:1〜8バイト
-
BDEC型に実際に指定できる値を次に示します。
32ビットモードの場合:-2147483648〜2147483647
64ビットモードの場合:-9223372036854775808〜9223372036854775807
-
DECIMAL列に実際に格納できる値を次に示します。
32ビットモードの場合:精度は10けたまで
64ビットモードの場合:精度は19けたまで
-
- <データの格納例>
-
次の場合のデータの格納例を次の表に示します。
-
入力データ:4バイトの2進数
-
列構成情報ファイルの指定:type=bdec(4)
表5‒34 BDEC型で記述したデータをDECIMAL列に格納した場合の例 入力データファイルに記述したデータ
格納先の列定義
格納するデータ
0xff 0xff 0xfc 0xf7
DECIMAL(10,0)
-0000000777
DECIMAL(10,2)
-00000007.77
DECIMAL(10,10)
-0.0000000777
このように,同じ値でも格納先のDECIMAL列の精度と位取りによって,格納するデータが異なります。
-
(4) 記述例
固定長データ形式のデータ記述例を次の図に示します。