Web教材一覧データベース

SQLの動作環境(動的SQLと静的SQL)


独立言語方式と親言語方式

独立言語方式

独立言語方式とは、SQLを単独で使用する方式です。
 対話式SQL、コマンド方式とは、利用者がクライアント(パソコン)からSQL命令(コマンド)を1命令ずつ入力する方式です。サーバにあるDBMSがそれを解析し、誤りがあればエラーメッセージを表示、誤りがなければ直ちに実行して、その結果をクライアントに表示します。
 通常のプログラミング言語と同様に、SQL文をテキストファイルで作成しておき、それを起動して実行できます。このような場合も対話型SQLといいます。

WindowsではAccessというRDB処理ソフトがあります。SQL命令を直接記述する方法もあるし、画面のフォームで選択条件や照合条件を指定して内部的にSQL命令を生成する機能もありますが、いずれにせよ、「実行」をクリックすることにより対話式にSQLが実行されます。

親言語方式

そもそもSQLは、問合せ言語(query language)であり、関係データベースを操作して、新しい表を導出することが主目的で、SQLだけで複雑なアプリケーションを作成するのは困難です。また逆に、CやCOBOLのような手続き型言語では、関係データベースを直接操作する機能が欠けています。

それを解決するために、手続き型言語を親言語(ホスト言語)として、それからSQLを呼び出す方式を親言語方式といいます。次の二つの方法があります。

多くの言語がこのような機能をもっています。また、言語により方法に違いがあるのは不便ですので、インタフェースが標準規格化されています。

静的SQLと動的SQL

埋込みSQLは、静的SQLと動的SQLに分けられます。

静的SQL

静的SQLでは、親言語のソースプログラムを通常のコンパイルをする前に、SQL命令文の構文解析をして、DBMSを呼出してSQL命令を通常の親言語に変換します。この処理をプレコンパイルといいます。これ以降は通常の親言語プログラムと同様にコンパイルされ、実行プログラムが生成されます。

すなわち、静的SQLでは、プログラムを作る段階で、処理内容が確定しており、SQL命令にデータベースの表や項目の名称などの誤りがないことが前提になります。

動的SQL

動的SQLは、親言語を実行することにより、SQL文を生成する方式です。実行するたびにSQLを解析して実行形式に変換するため,処理効率が悪くなります(静的SQLはコンパイラ、動的SQLはインタプリタのようなイメージです)。

埋め込みSQLの例

商品表から親言語で与えた商品Aと等しい商品の価格を1.1倍する例を示します(あくまでも説明用で正確ではありません)。

 ① EXEC SQL DECLARE カーソル CURSOR FOR
 ②   SELECT 商品, 価格 FROM 商品表
 ③     WHERE 商品 = :商品A;
 ④ EXEC SQL OPEN カーソル;
 ⑤   EXEC SQL FETCH カーソル INTO :商品A, :価格B;
 ⑥   価格B = 価格B * 1.1;
 ⑦ EXEC SQL CLOSE カーソル;

EXEC SQL は、この命令がSQL文であることを示します。
 ここでは連続行になってきますが、EXEC SQLの間に親言語の文があってもかまいません。
①~③で、商品表から親言語で与えた商品Aと等しい行の商品と価格を取り出します。
③の :商品Aの「:」は、この変数が親言語で定義した変数であることを示します。
①は、CURSORの定義です。CURSORは、ここで導出した表の1行を指すポインタのようなものです。
 ここではカーソルという名称にしました。
④でカーソルを使うこと、⑦で終了することを示します。④~⑦の間は、①での導出表の行数だけ繰り返します。
⑤の FETCH は表から1行取り出す機能です。
 1行読んで列の商品, 価格を親言語で定義した変数である商品A、価格Bに入れる処理になります。
⑥親言語の文です。


本シリーズの目次へ