静的 SQL ステートメントが参照するデータベース・オブジェクトに影響する SQL DDL ステートメント

SQL データ定義言語 (DDL) ステートメントは、DML ステートメントが参照する DBMS オブジェクトを DDL ステートメントが作成、ドロップ、または変更する場合に、静的に実行されるデータ操作言語 (DML) ステートメントに対して問題を起こす可能性があります。 DDL および DML ステートメントをバインドした後に DDL ステートメントが一度だけ実行される場合でも、この問題は起きる可能性があります。

DDL ステートメントはその実行時に、DDL ステートメントが作成、変更、またはドロップするオブジェクトを参照するすべての静的 SQL DML ステートメントのアクセス・プランを無効にします。 DML ステートメントは、そのアクセス・プランが無効にされた場合でも、引き続き実行できます。 DML ステートメントを実行しても、警告またはエラー・メッセージは生成されません。

アクセス・プランが無効にされると、以下の 2 とおりの結果があり得ます。

どちらの場合にも、pureQuery 以外の API アプリケーションは、固定したアクセス・パスおよびパフォーマンス向上の可能性という、静的 SQL の 2 つの主要な利点を失います。

IBM® は、クライアントの最適化 とともに使用するアプリケーションでは DDL ステートメントを実行しないことを推奨しています。

バインドされていて executionMode の値が STATIC である DDL ステートメントをアプリケーションで使用している場合、pureQuery はその DDL ステートメントを実行します。

また、バインドはされておらず、executionMode の値は STATIC、allowDynamicSQL の値は TRUE である DDL ステートメントをアプリケーションで使用している場合も、pureQuery はその DDL ステートメントを実行します。ただし、バインドはされておらず、executionMode の値は STATIC、allowDynamicSQL の値は FALSE である DDL ステートメントをアプリケーションで使用している場合、pureQuery はその DDL ステートメントを実行しますが、"静的ステートメントが見つかりません (Static statement not found)" という例外をスローします。


フィードバック