BIND を使用せずにプログラムで SQL 以外の変更を行った場合の実行結果はどうなりますか?

WBOY
リリース: 2023-09-06 15:05:02
転載
874 人が閲覧しました

BIND を使用せずにプログラムで SQL 以外の変更を行った場合の実行結果はどうなりますか?

問題: 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 サイトの他の関連記事を参照してください。

ソース:tutorialspoint.com
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート