ページの先頭行へ戻る
Symfoware Server V11.0.x SQLリファレンス
Symfoware

4.1 動的SQL文の概要

動的SQLは、アプリケーションの実行時に、SQL文を動的に指定することを可能にします。

ホストプログラムに直接SQL文を記述しないので、動的SQL文を使用すると、対話的に入力したSQL文を実行したり、ある情報から生成したSQL文を実行するアプリケーションを作成することができます。

アプリケーションの実行時に入力するSQL文を準備可能文といいます。準備可能文として扱うことのできるSQL文を以下に示します。なお、動的SELECT文は、カーソル宣言のカーソル指定に対応し、動的単一行SELECT文は、単一行SELECT文に対応します。

準備可能文はPREPARE文で準備します。PREPARE文で準備されたSQL文を被準備文といいます。被準備文はPREPARE文で指定したSQL文識別子によって識別されます。被準備文が動的SELECT文の場合、動的カーソル宣言でカーソルを定義し、動的OPEN文、動的FETCH文、動的CLOSE文、動的DELETE文:位置づけおよび動的UPDATE文:位置づけで操作します。また、準備可能動的DELETE文:位置づけおよび準備可能動的UPDATE文:位置づけでも操作します。被準備文が動的単一行SELECT文、DELETE文:探索、UPDATE文:探索、INSERT文、準備可能動的DELETE文:位置づけ、または準備可能動的UPDATE文:位置づけの場合は、EXECUTE文で実行します。

被準備文に含まれる動的パラメタ指定の値の設定や行の値の取出しには、SQL記述子域、SQLDA構造体または引数を使用します。DESCRIBE文により被準備文の選択リストの情報や動的パラメタ指定の情報を、SQL記述子域またはSQLDA構造体に設定することができます。SQL記述子域の情報は、DESCRIPTOR取得文で取得し、DESCRIPTOR設定文で設定することができます。動的OPEN文およびEXECUTE文では、SQL記述子域、SQLDA構造体または引数を介して動的パラメタ指定の値を指定することができます。動的FETCH文および動的単一行SELECT文を被準備文とするEXECUTE文では、SQL記述子域、SQLDA構造体または引数を介して行の値を取り出すことができます。また、被準備文がDELETE文:探索、UPDATE文:探索、INSERT文、準備可能動的DELETE文:位置づけ、または準備可能動的UPDATE文:位置づけで、動的パラメタ指定を含まないときは、EXECUTE IMMEDIATE文で直接実行することができます。

さらに、被準備文がスキーマ定義文、スキーマ操作文、格納構造定義文、格納構造操作文の場合は、EXECUTE文またはEXECUTE IMMEDIATE文で実行することができます。

通常、動的SQLで指定するカーソル名やSQL文識別子は、識別子として静的に指定します。しかし、操作するカーソルの数や実行するSQL文の数が動的に変化する場合は、カーソル名やSQL文識別子を静的に指定することが困難です。この場合は、カーソル名やSQL文識別子をホスト変数で指定し、アプリケーションの実行時にカーソル名やSQL文識別子の値を動的に指定します。ホスト変数で指定するカーソル名を拡張カーソル名、SQL文識別子を拡張SQL文識別子といいます。拡張カーソル名でカーソルを定義する場合は、ALLOCATE CURSOR文を実行します。拡張カーソル名や拡張SQL文識別子を使用すると、動的OPEN文などのカーソル操作文やPREPARE文をカーソル名やSQL文識別子ごとに指定する必要がなくなり、共通化できます。このため、アプリケーションのコーディング量を削減する効果も期待できます。