2

SQL ALTER TABLE ステートメントを使用して、DB2/400 v6r1 のテーブル (物理ファイル) に新しい列を追加しました。そのテーブルに基づく論理ファイルがあり、新しいフィールドが表示されません。その論理ファイルを削除して再作成せずに更新する方法はありますか?

4

2 に答える 2

3

いいえ。

論理を再コンパイルする必要があります。

フィールドがレコードの最後に追加された場合、レベル チェックをオフにすることで回避できる場合がありLVLCHK(*NO)ます。これにより、一部のプログラムを再コンパイルしなくても済むようになる可能性があります (それらが入力のみに使用し、新しいフィールドを必要としない場合)。このオプションは、多くの開業医をかなり神経質にしますが、他の開業医はそれが素晴らしいと考えています。注意して使用してください。SQL 経由でのみファイルにアクセスするプログラムは免除される場合があります。ネイティブ I/O で論理または物理を使用する他のすべてのプログラムは、再コンパイルする必要があります。

プログラムで SQL のみを使用することの副次的な利点の 1 つは、必要な再コンパイルが少なくて済むことです。

編集

明確にするために-

変更された物理を参照するすべての論理を再コンパイルする必要があります。

ネイティブ I/O を使用して物理または論理のいずれかのレコードを書き込みまたは更新するプログラムは、再コンパイルする必要があります。

多く (おそらくほとんど) は、ファイル (PF または LF) のみを読み取るプログラムも再コンパイルするように指示します。

新しいフィールドをレコード形式の最後に追加するだけであれば、ネイティブ I/O のみを使用してファイルを読み取るプログラムを再コンパイルする必要はないかもしれないと言う人もいます。これを行う場合は、a) これらのプログラムを呼び出そうとしているときにのみ OVRDBF LVLCHK(*NO) を使用し、後で DLTOVR を使用するか、b) LVLCHK(*NO) を持つようにファイルを作成または変更する必要があります。

どちらもリスクがあります。警告: これらのスタントはプロによって実行されています。家で試さないでください。

言い換えれば、あなたのショップが問題を注意深く完全に理解し、適切に対処するのに十分な経験を積んでいない場合は、安全策を取ってください。絶対。この質問をしなければならなかった場合、あなたはまだほとんどそこにいません.

レコード レイアウトの最初または途中に新しいフィールドを追加した場合、または既存のフィールドのサイズまたはタイプを変更した場合は、GO! をパスしないでください。ファイルを使用するすべてのプログラムを再コンパイルする必要があります。

于 2013-07-11T00:10:17.687 に答える
1

LF を再コンパイルするか (DDS で作成されたと仮定)、ALTER VIEW を実行して SQL で更新します。

于 2013-07-10T18:35:31.930 に答える