固定長形式の定義

固定長形式のファイルを使用する場合は、形式の定義が必要です。 このトピックでは、一般的なデータ型のための一般的な固定長形式定義の例を紹介します。

エンド・オブ・レコード

固定形式のエンド・オブ・レコード文字が改行文字である場合は、何も行う必要はありません。 改行文字が、デフォルトのエンド・オブ・レコード区切り文字です。 レコード分離文字がない場合は、以下の例のように単一引用符を並べて使用してください。
RecordDelim ''
エンド・オブ・レコード区切り文字は、最後のレコードにも必要です。

RecordDelim オプションには、最大 8 バイトのリテラル・シーケンスを指定します。一般的なエスケープ表記の変換は行われず、char(8) のような関数もサポートされません。

レコード長

レコード長はオプションですが、使用すれば、形式定義の長さが正しいかどうかについてのフィードバックを得ることできます。 この長さにエンド・オブ・レコード区切り文字は含まれません。 以下に例を示します。
Recordlength 72

フィールドのスキップ

以下の節を指定すると、 4 バイトがスキップされます。
“filler char(4)  bytes 4” 
ただし、 以下の例のように、フィールドをスキップすることを示す方式をお勧めします。
“filler fld_name char(4) bytes 4”

時間値

固定長形式ファイルでは、多くの場合、時間値 の区切り文字を省略します。 以下の表に、区切り文字無しの日付、時刻、およびタイムスタンプをロードする場合に使用する節を示します。
表 1. 時間値
データ・タイプ 形式節
日付 20101231 date1 date YMD'' bytes 8
時刻 231559 time1 time(6) 24hour '' bytes 6
タイムスタンプ 0101231231559 stamp1 timestamp(6) 24hour '' bytes 14
タイムスタンプ 20101231231559000001 char(24) としてロードした後 insert-select 文を使用

to_timestamp(col,'YYYYMMDDHH24MISSUS')

日付 2010-12-31 date2 date YMD'-' bytes 10
時刻 23.15.59 time2 time(6) 24hour '.' bytes 8
タイムスタンプ 2010-12-31 23:15:59 tms2 timestamp(6) YMD '-' 24hour ':' bytes 19
タイムスタンプ 2010-12-31 23:15:59.0001 tms3 timestamp(6) YMD '-' 24hour ':' bytes 26
timetz 12:30:45+03:00 Tz1 TIMETZ(6) 24HOUR ':' bytes 14
timetz 123045+-0300 (char(11) としてロードした後 insert-select 文を使用

(substring(col1,1,2)||':'|| substring(col1,3,2)||':'||substring(col1,5,5)||':'|| substring(col1,10,2))::timetz

数値

以下の表に、 数値を示します。
表 2. 数値
データ・タイプ 形式節
整数 32767 int1 int2 bytes 5
int8 9123456789123456 int2 int8 bytes 16
数値 2315.59 num1 numeric(6,2) bytes 7
数値 231559 char(6)としてロードし、insert-selectステートメント (col/100)::numeric(6,2)を使用する。
フローティング 1.2345678 flt1 floating bytes 9
フローティング 12345678 char(8)としてロードし、insert-selectステートメント(substring(col1,1,1)||'.'||substring(col1,2,7))::floatを使用する。
double 1.2345678 flt1 double bytes 9
double 12345678 char(8)としてロードし、insert-selectステートメント (substring(col1,1,1)||'.'||substring(col1,2,7))::doubleを使用する。

論理値

以下の表に、論理値を示します。
テーブル3。 論理値
データ・タイプ 形式節
ブール値 Y または y、N または n BOOL Y_N BYTES 1
ブール値 1, 0 BOOL 1_0 BYTES 1
ブール値 T または t、F または f BOOL T_F BYTES 1

NULL 値

固定長形式ファイルでは、一般的に、「マジック」値を使用して NULL を表します。 nullif 節を指定に追加すると、その列について NULL かどうかを検査できるようになります。 nullif 節は以下の要素で構成されます。
  • キーワード nullif
  • 列参照
  • 判別式
例えば、field1 が日付で、値が '99991231' の場合に NULL と見なされる場合、以下のような特性を持つファイル指定になります。
  • nullif 指定は以下のようになります。
    “nullif &=’99991231’”
  • 全体的な指定は以下のようになります。
    “fld1 date YMD'' bytes 8 nullif &=’99991231’”
  • すべての形式指定で nullif 節はサポートされます。

「ストリングが正確に一致している」かどうかを評価する &= の他にも、nullif 節は、サブストリングの突き合わせが可能な &&= をサポートしています。 これは、スペースが埋め込まれたフィールドのどこかにストリングが出現している場合などに 便利です。 例えば nullif &&=’N’は、“ N “、“N “、“ N”というさまざまな表記と一致します。

以下の表に、NULL 値を示します。
テーブル4。 Null 値
データ・タイプ NULL 値 形式節
ブール値 ' ' (1 スペース) BOOL Y_N BYTES 1 NULLIF &=' '(1 space)
日付 000000 DATE YMD '' BYTES 6 NULLIF &='000000'
int '      ' (6 スペース) INT BYTES 6 NULLIF &='      ' (6 spaces)