SQL 解説書

SQL ステートメントの呼び出し方法

この章で説明する SQL ステートメントは、実行可能、 または実行不能 のいずれかに類別されます。 各ステートメントの説明の呼び出し の項は、 そのステートメントが実行可能か否かを示しています。

実行可能ステートメント には、 以下の 4 つの呼び出し方法があります。

注:REXX に組み込んだステートメントは、動的に準備され実行されます。

ステートメントによっては、これらのいくつかまたはすべての方式を使用することができます。 各ステートメントの説明の呼び出し の項では、 どの方式を使用できるかを示しています。

実行不能ステートメント は、 アプリケーション・プログラムに組み込む方式だけが可能です。

この章で説明しているステートメントに加えて、 さらにもう 1 つの SQL ステートメント構成として、 選択 (SELECT) ステートメント があります。 (選択ステートメント を参照。) これは、他のステートメントと使用法が異なるので、この章では説明していません。

選択ステートメント には、以下の 3 つの呼び出し方法があります。

最初の 2 つの方法は、 それぞれ選択ステートメント静的 呼び出し および動的 呼び出しと呼ばれます。

SQL ステートメントの各呼び出し方式について、以下で詳しく説明します。 各方式ごとに、実行のメカニズム、ホスト変数との対話、 および実行が正常に行われたかどうかのテストについて説明しています。

アプリケーション・プログラムへのステートメントの組み込み

SQL ステートメントは、 プリコンパイラーに実行依頼されるソース・プログラムに組み込むことができます。 このようなステートメントは、 プログラムに組み込まれている と呼ばれます。 組み込むステートメントは、 そのプログラムの中でホスト言語のステートメントが可能な場所であればどこにでも組み込むことができます。 各組み込みステートメントの前には、キーワード EXEC と SQL を付ける必要があります。

実行可能ステートメント

アプリケーション・プログラムに組み込まれた実行可能ステートメントは、 それと同じ場所にホスト言語のステートメントを指定した場合にそれが実行される時点と同じ時点に実行されます。 したがって、ループ内のステートメントは、ループが行われるたびに実行され、 条件構文内のステートメントは、その条件が満たされた場合にのみ実行されます。

組み込まれたステートメントには、ホスト変数への参照を含むことができます。 参照されるホスト変数は、次の 2 つの方法で使用することができます。

特に、式および述部の中のホスト変数に対する参照はすべて、 変数の現在値により置き換えられます。つまり、変数は入力として使用されます。 その他の参照の取り扱いについては、各ステートメントごとに個々に説明しています。

実行可能なすべてのステートメントの後で、必ず SQL 戻りコードのテストを行う必要があります。 別の方法として、WHENEVER ステートメント (それ自体は実行不能) を使用して、 組み込みステートメントの実行直後の制御の流れを変更することができます。

DML ステートメントで参照されるオブジェクトはすべて、 ステートメントが DB2 ユニバーサル・データベースにバインドされる時点で存在している必要があります。

実行不能ステートメント

組み込まれた実行不能ステートメントは、プリコンパイラーによってのみ処理されます。 プリコンパイラーはステートメントにエラーを検出すると、それを報告します。 このようなステートメントは、 プログラムの実行時に処理されることはありません。 したがって、このようなステートメントの後で SQL 戻りコードのテストを行ってはなりません。

SQL プロシージャーでのステートメントの組み込み

CREATE PROCEDURE ステートメントの SQL プロシージャー本体にステートメントを組み込むことができます。 このようなステートメントは、 SQL プロシージャーに組み込まれている といいます。 SQL プロシージャーに組み込まれるステートメントは、SQL プロシージャー・ステートメントで指定されています。 アプリケーションに組み込まれているステートメントとは異なり、 SQL ステートメントの前になんらかのキーワードを付ける必要はありません。 SQL ステートメントの説明で ホスト変数 が参照されるときはいつでも、 ステートメントが SQL プロシージャーに組み込まれる場合に SQL 変数 を使用できます。

動的な準備と実行

アプリケーション・プログラムでは、 ホスト変数に入った文字ストリングの形式の SQL ステートメントを動的に構築することができます。 一般にステートメントは、 プログラムが入手可能な何らかのデータから構築されます (たとえば、 ワークステーションからの入力)。 このようにして構成されたステートメント (SELECT ステートメントを除く) は、 組み込みステートメントの PREPARE によって準備され、 組み込みステートメントの EXECUTE によって実行することができます。 あるいは、組み込みステートメントの EXECUTE IMMEDIATE を使用して、 1 つのステップでステートメントを準備し実行することもできます。

動的に準備されるステートメントには、ホスト変数への参照が含まれていてはなりません。 パラメーター・マーカーは含めることができます。 (パラメーター・マーカーの規則については、PREPARE を参照してください。) 準備済みのステートメントが実行される時点で、パラメーター・マーカーは、 実際には EXECUTE ステートメントで指定されたホスト変数の現行値に置き換えられます。 (この置き換えの規則については、EXECUTE を参照してください。) 一度準備したステートメントは、ホスト変数の他の値を用いて何回も実行することができます。 パラメーター・マーカーは、EXECUTE IMMEDIATE では使用できません。

ステートメントが正しく実行されたか否かは、 EXECUTE (または EXECUTE IMMEDIATE) ステートメントの後の SQLCA への SQL 戻りコードの設定値によって示されます。 前述のように、SQL 戻りコードは必ず検査する必要があります。 詳細については、SQL 戻りコード を参照してください。

選択ステートメントの静的呼び出し

選択ステートメント は、 実行不能ステートメントである DECLARE CURSOR の一部として含めることができます。 このようなステートメントは、 組み込みステートメント OPEN によってカーソルがオープンされるたびに実行されます。 カーソルがオープンされた後で、一連の FETCH ステートメントを実行することにより、 結果表を一度に 1 つの行ずつ取り出すことができます。

このように使用する場合、 選択ステートメント にホスト変数への参照を含めることができます。 これらの参照は、実際には、OPEN 実行時点での変数の値によって置き換えられます。

選択ステートメントの動的呼び出し

アプリケーション・プログラムは、ホスト変数に入った文字ストリングの形式で、 選択 (SELECT) ステートメント を動的に構築することができます。 一般に、ステートメントはプログラムが入手可能な何らかのデータから構築されます (たとえば、 ワークステーションから入手した照会)。 このように構成されたステートメントは、 組み込みステートメント PREPARE によって実行の準備が行われ、 実行不能ステートメント DECLARE CURSOR によって参照することができます。 このようなステートメントは、 組み込みステートメント OPEN によってカーソルがオープンされるたびに実行されます。 カーソルがオープンされた後で、一連の FETCH ステートメントを実行することにより、 結果表を一度に 1 つの行ずつ取り出すことができます。

このように使用する場合、 選択ステートメント にホスト変数への参照を含めることはできません。 パラメーター・マーカーは含めることができます。 (パラメーター・マーカーの規則については、PREPARE を参照してください。) パラメーター・マーカーは、実際には、 OPEN ステートメントに指定されたホスト変数の値によって置き換えられます。 (この置き換えの規則については、OPEN を参照してください。)

対話式呼び出し

ワークステーションから SQL ステートメントを入力する機能は、 データベース・マネージャーのアーキテクチャーの一部です。 この方法で入力されたステートメントは、「対話式に発行される」と呼ばれます。

対話式に発行されるステートメントは、アプリケーション・プログラムの文脈でのみ認識されるので、 パラメーター・マーカーやホスト変数への参照を含まない実行可能ステートメントでなければなりません。


[ ページのトップ | 前ページ | 次ページ | 目次 | 索引 ]