入出力命令中の CCSID 変換
英数字フィールド、グラフィック・フィールド、または UCS2 フィールド
が入力命令または出力命令で使用されている場合、フィールド内のデータと、ファイル用の入力バッファーまたは出力バッファー内のデータとの
間で、CCSID 変換が実行されることがあります。入力命令または出力命令でフィールドが使用されるケースは次のとおりです。
- フィールドが、命令に使用される入力仕様または出力仕様に含まれている。
- フィールドが、キー付き命令の検索引数に含まれている。
- フィールドが、%FIELDS 組み込み関数によって指定されるフィールド・リスト中に含まれている。
- フィールドが、%KDS 組み込み関数で使用されるデータ構造のサブフィールドである。
- フィールドが、入力命令または出力命令の結果のデータ構造で使用されるデータ構造のサブフィールドである。
CCSID 変換はデータベースによって実行されることもあります。 その場合の変換は、レコードからのデータを入力バッファーに入れるとき、出力バッファーからの データをレコードに入れるとき、または、キー付き命令の 検索引数を解釈するときに、英数字フィールドおよびグラフィック・フィールドに対して行われます。
- ファイルに対して DATA(*NOCVT) が有効になっている場合、CCSID 変換は行われません。
- ジョブ CCSID が 65535 である場合、CCSID 変換は行われません。
- ジョブ CCSID が 65535 ではなく、ファイルに対して DATA(*NOCVT) が有効になっていない 場合、65535 以外の CCSID の英数字フィールドはジョブ CCSID に変換され、 65535 以外の CCSID のグラフィック・フィールドはジョブ CCSID に関連する DBCS CCSID に変換されます。 データベース・レベルでの CCSID 変換に影響する DATA キーワードについて詳しくは、DATA(*CVT | *NOCVT) を 参照してください。
以下のすべての条件が真の場合、入力バッファーまたは出力バッファー内のデータ
とプログラム・フィールドとの間で CCSID 変換が実行されます。
- プログラム・フィールドの CCSID が 65535 (*HEX) ではない。
- ファイル内のフィールドの CCSID が 65535 ではない。
- 入力バッファーまたは出力バッファー内のフィールドの CCSID が、フィールドの CCSID と異なる。
- プログラム・フィールドの CCSID が既知であるか、ファイルに対して DATA キーワードが有効になっている。 UCS-2 フィールドの CCSID は常に既知です。 グラフィック・フィールドの CCSID は、CCSID(*GRAPH:*IGNORE) が有効になっている場合を除いて、既知です。 英数字フィールドの CCSID について詳しくは、データの CCSID を参照してください。 ファイルに対して DATA キーワードが有効かどうかについて詳しくは、DATA(*CVT | *NOCVT) を参照してください。
警告: ファイルに対して DATA キーワードが有効になっていないか、
または、英数字フィールドの CCSID が既知であると見なされない場合、RPG は、実行時にジョブ CCSID が 65535 で
あると、プログラム内の英数字データの CCSID について誤った想定をすることがあります。
