問題: COBOL-DB2 プログラムは、変数の長さを PIC X(5) から PIC X(8) に増やすように変更されました。ただし、プログラムの SQL には変更はありません。プログラムのプラン/パッケージがこれらの変更に拘束されなかったらどうなるでしょうか?
PIC X(5) から PIC X(8) への可変長の変更は DB2 の変更ではないため、プログラム内の SQL ステートメントを変更する必要はありません。ただし、そのプラン/パッケージをバインドする必要があります。そうしないと、「ロードされたモジュールのプリコンパイラーによって生成されたタイムスタンプ x は、DBRM z から構築されたバインディング タイムスタンプ y と異なります」という SQL エラー コード -818 が返されます。 p>
この SQL エラーの理由は次のとおりです。COBOL-DB2 プログラムが実行されるたびに、ロードされたモジュールとパッケージ/DBRM のタイムスタンプが比較されます。プログラム内で変数の長さが変更され (SQL は変更されない)、コンパイルされた場合、ロードされたモジュールには新しく生成されたタイムスタンプが付けられます。一方、BIND が実行されない場合、ロードされたモジュールには新しく生成されたタイムスタンプが付けられます。 。パッケージ/DBRM には古いタイムスタンプが付きます。プログラムを実行すると、プログラムを呼び出す JCL ステップが SQL エラー コード -818 で失敗します。
SQL ステートメントが今後も変更されない COBOL-DB2 プログラムがある場合は、オプション LEVEL を使用してプログラムをプリコンパイルできます。以下は、LEVEL オプションを使用した BIND ステップの例です。
//BIND EXEC PGM=IKJEFT01 //STEPLIB DD DSN=DIS.TEST.LOADLIB,DISP=SHR //SYSOUT DD SYSOUT=* //SYSTSIN DD * DSN SYSTEM(TB3) BIND PLAN(PLANA) - PKLIST(PACKA) - LEVEL - ACQUIRE(ALLOCATE) - ISOLATION (RS) /*
以上がBIND を使用せずにプログラムで SQL 以外の変更を行った場合の実行結果はどうなりますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。