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

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

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

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

どちらの場合でも、JDBC アプリケーションは、不変のアクセス・パスと可能なパフォーマンス向上という、静的 SQL の 2 つの主要な利点を失います。

IBM は、SQL Outline とともに使用するアプリケーションでは DDL ステートメントを実行しないことを推奨しています。

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

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

関連概念
VALUES ステートメント
XQuery ステートメント
関連資料
DB2 パッケージに対する EXECUTE の付与
同一の SELECT ステートメントに対して同時に開かれている複数の ResultSet オブジェクト
特殊レジスターを設定する SQL ステートメント

フィードバック