CONTINUEIF
は、結合する物理レコードの数が異なる場合に使用します。CONTINUEIF
句を使用する場合は、後に条件を指定します。この条件は、各物理レコードが読み込まれるたびに評価されます。たとえば、2つのレコードがあって、その最初のレコードの80バイト目にシャープ記号(#)がある場合、2つのレコードは結合されます。この場合、指定の位置に他の文字があると、2番目のレコードは最初のレコードに結合されません。
次に、CONTINUEIF
の完全な構文を示します。この構文で、さらに柔軟な処理を実行できます。
表9-2では、CONTINUEIF
句のパラメータについて説明します。
表9-2 CONTINUEIF句のパラメータ
パラメータ | 説明 |
---|---|
|
現在のレコードについて条件が真のとき、次の物理レコードを読み込んで現在のレコードに連結します。この処理は、条件が偽になるまで繰り返されます。条件が偽になると、現在の物理レコードが現在の論理レコードを構成する最後の物理レコードになります。 |
|
次のレコードで条件が真になると、現在の物理レコードを現在の論理レコードに連結します。この処理は、条件が偽になるまで繰り返されます。 |
|
サポートされているのは等号演算子(=)と不等号演算子(!= または<>)です。 等号演算子を指定すると、フィールドと比較文字列が完全に一致したときに、条件が真となります。不等号演算子を指定した場合は、どの文字が異なっていても、条件は真となります。 |
|
レコードの最後の文字(空白以外)に対して、
|
|
物理レコード中の列の開始番号と終了番号です。 列番号は1から始まります。ハイフンまたはコロンを使用することもできます(
|
|
startとendで定義された継続フィールドと比較する文字列です。比較演算の内容は、operatorで指定された演算子によって異なります。文字列は一重引用符または二重引用符で囲みます。文字列は1文字ずつ比較され、必要があれば、空白埋め文字が右側に追加されます。 |
|
16進形式で指定された文字列で、使用方法は |
|
論理レコードには' |
CONTINUEIF
句の中で指定する位置は、各物理レコード中の位置を示します。物理レコード中の位置が参照されるのは、この場合のみです。これ以外の場合、参照先は論理レコードとなります。
CONTINUEIF
THIS
およびCONTINUEIF
LAST
では、PRESERVE
パラメータを指定しない場合、論理レコードの作成時にすべての物理レコードから継続フィールドが削除されます。継続フィールドが読み込まれるまでは、データは同じ論理レコードに連結します。たとえば、CONTINUEIF
THIS(3:5)='***'
を指定すると、3
から5
までの位置がすべてのレコードから削除されます。つまり、レコードの3
から5
までの位置にある継続文字が削除されます。また、3
から5
までの位置にある文字は、継続文字が3
から5
までの位置にない場合でもレコードから削除されます。
CONTINUEIF
THIS
およびCONTINUEIF
LAST
では、PRESERVE
パラメータを使用した場合、論理レコードの作成時にすべての物理レコードに継続フィールドが保持されます。
CONTINUEIF
LAST
は、CONTINUEIF
THIS
およびCONTINUEIF
NEXT
とは異なります。CONTINUEIF
LAST
では、継続フィールドの位置がレコードごとに異なり、PRESERVE
が指定されていない場合でも、継続フィールドは削除されません。
例9-3から例9-6に、PRESERVE
パラメータの有無にかかわらず、CONTINUEIF THIS
およびCONTINUEIF NEXT
の使用例を示します。
例9-3 PRESERVEパラメータを使用しないCONTINUEIF THIS
ここで、物理レコードは次のような14バイトのレコードとします。また、ピリオドは空白を表します。
%%aaaaaaaa.... %%bbbbbbbb.... ..cccccccc.... %%dddddddddd.. %%eeeeeeeeee.. ..ffffffffff..
次の例では、CONTINUEIF THIS
句にPRESERVE
パラメータは使用されていません。
CONTINUEIF THIS (1:2) = '%%'
したがって、論理レコードは次のように作成されます。
aaaaaaaa....bbbbbbbb....cccccccc.... dddddddddd..eeeeeeeeee..ffffffffff..
列1および列2(たとえば、物理レコード1の%%)は、論理レコード作成時に物理レコードから削除されることに注意してください。
例9-4 PRESERVEパラメータを使用するCONTINUEIF THIS
例9-3の物理レコードと同じ物理レコードがあるとします。
次の例では、CONTINUEIF THIS
句にPRESERVE
パラメータが使用されています。
CONTINUEIF THIS PRESERVE (1:2) = '%%'
したがって、論理レコードは次のように作成されます。
%%aaaaaaaa....%%bbbbbbbb......cccccccc.... %%dddddddddd..%%eeeeeeeeee....ffffffffff..
列1および列2は、論理レコード作成時に物理レコードから削除されないことに注意してください。
例9-5 PRESERVEパラメータを使用しないCONTINUEIF NEXT
ここで、物理レコードは次のような14バイトのレコードとします。また、ピリオドは空白を表します。
..aaaaaaaa.... %%bbbbbbbb.... %%cccccccc.... ..dddddddddd.. %%eeeeeeeeee.. %%ffffffffff..
次の例では、CONTINUEIF NEXT
句にPRESERVE
パラメータは使用されていません。
CONTINUEIF NEXT (1:2) = '%%'
したがって、論理レコードは次のように作成されます(例9-3と同じ結果)。
aaaaaaaa....bbbbbbbb....cccccccc.... dddddddddd..eeeeeeeeee..ffffffffff..
例9-6 PRESERVEパラメータを使用するCONTINUEIF NEXT
例9-5の物理レコードと同じ物理レコードがあるとします。
次の例では、CONTINUEIF NEXT
句にPRESERVE
パラメータが使用されています。
CONTINUEIF NEXT PRESERVE (1:2) = '%%'
したがって、論理レコードは次のように作成されます。
..aaaaaaaa....%%bbbbbbbb....%%cccccccc.... ..dddddddddd..%%eeeeeeeeee..%%ffffffffff..
関連項目:
CONTINUEIF
句の例は、「事例4: 結合された物理レコードのロード」を参照してください。(事例の使用方法については、「SQL*Loaderの事例」を参照してください。)