アプリケーション移行の課題 - AWS 規範ガイダンス

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

アプリケーション移行の課題

アプリケーションを EBCDIC から ASCII に移行する場合、アプリケーション内の EBCDIC 依存関係を分析し軽減することを推奨します。これには、ソースコードの依存関係の分析とシーケンスの照合が含まれます。

ソースコードの依存関係

数値を表す文字はソースコードが EBCDIC から ASCII に変換されると変更されるため、数値を表すために使用される文字を確認することが重要です。メインフレームプログラマーの中には、以下に示す例のように、コピーブックや作業用ストレージの COMP フィールドの数値データを表現する手法を使用する人もいます。

01 CHAR-74        PIC 99 COMP VALUE "¢".

EBCDIC では、前述の例の値は X"41" (数値は "74") です。ソースデータが ASCII に変換されると、この文字は X"5B" (数値は "91") に変更されます。この変更によってコンパイラの問題は発生しませんが、デバッグが困難なプログラミング上の問題が発生する可能性があります。次の例は、ソースを実際の数値を含むように変更する効果的なソリューションを示しています。

01 CHAR-74        PIC 99 COMP VALUE 74.

また、次の例のように、埋め込まれた 16 進文字が使用されているかどうかを確認することを推奨します。

IF WS-DATA(1:1) = X"5B" …

EBCDIC では、前述の例ではフィールドの最初の文字が「$」かどうかをテストしています。「$」の ASCII 表現は X"24" です。次の例は、目的の文字を使用する効果的なソリューションを示しています。

IF WS-DATA(1:1) = "$" …

すべての X"nn" 値が問題を引き起こすわけではありません。例えば、定数の低い値は X"00" で、高い値は X"FF" です。通常、符号なしバイナリフィールドを初期化するには、低い値 (X"00") が使用されます。例えば、次のステートメントは変更の必要がありません。

MOVE ALL X"00" TO WS-DATA

高い値 (X"FF") は、レコードが SORT の末尾に確実に配置されるように、またはファイルの末尾を示すように、データマーカーとして使用されることがあります。例えば、次のステートメントは変更の必要がありません。

MOVE ALL X"FF" TO WS-DATA

前述のステートメントはいずれも、EBCDIC 環境または ASCII 環境で同じように機能します。

照合順序

EBCDIC では、アルファベット文字が数値の前に置かれます。ASCII では、数値はアルファベット文字よりも優先されます。そのため、VSAM の英数字キーフィールドや、アルファベットと数値が混在するデータベースでは、移行後にデータが異なる順序で返されます。照合順序の影響をアプリケーションレベルで分析して、正しい修復戦略を決定することを推奨します。

次の表は、英数字データの簡単な例と、このデータが EBCDIC と ASCII でどのようにソートされるかを示しています。

EBCDIC

ASCII

A1

1A

A2

2B

1A

A1

2B

A2

 照合順序は、以下の結果に影響します。

  • VSAM キー付きアクセス (: VSAM ファイルは、ファイルの作成時に使用した照合順序の順にデータを返します。COBOL プログラムが EBCDIC の照合順序を使用するようにコンパイルされている場合でも、ASCII の照合順序で構築された VSAM ファイルは ASCII の照合順序を使用してデータを返します。ASCII の照合順序はアプリケーションの問題を引き起こす可能性があります。)

  • 内部または外部の SORT 関数

  • 条件ステートメント

  • SQL カーソル (: SQL カーソルは、DECLARE ステートメントで照合順序が定義されていない限り、データベースが作成された照合順序の順序でデータを返します。COBOL プログラムが EBCDIC の照合順序を使用するようにコンパイルされている場合でも、ASCII の照合順序で構築されたデータベースは ASCII の照合順序を使用してデータを返します。ASCII の照合順序はアプリケーションの問題を引き起こす可能性があります。)

照合順序の依存関係は、アプリケーションだけでなく物理世界にも及ぶ可能性があります。例えば、倉庫の保管箱のバーコードは EBCDIC 値を使用してオーダーできます。アプリケーションを ASCII に変更するには、保管箱のバーコードを物理的に変更しなければならない場合があります。