12. カーソル
- 12.1. 外部アプリケーションからの SQL 呼び出し
- 12.2. カーソル
12.1. 外部アプリケーションからの SQL 呼び出し
SQL は、C や JAVA 等の手続き型言語とは異なり、一つの命令が完結した意味を持ち、それだけでデータベースを処理することができます。コマンド入力により、対話方式でデータベースに処理が行えるのは、非手続き型言語である SQL の特徴です。裏を返せば、SQL は一つの命令で一つの処理しかできず、データベースの処理しか行うことしかできません。しかし、データベースを利用したアプリケーションを開発しようとすると、データベースから取り出したデータに対して、条件判断やループなどの様々な処理を行う必要があります。このような場合、SQL だけでは対処できる範囲は限られていますが、C や JAVA などの手続き型言語と組み合わせることにより実現することができます。
他の言語と組み合わせて SQL を呼び出すには、次の3つの方法があります。これ以降の説明で出てくるホスト言語というのは、SQL を呼び出す C や JAVA 等の言語のことをいいます。
- モジュール呼び出し
- 静的 SQL
- 動的 SQL
モジュール呼び出しは、SQL によって作成されたモジュールを、ホスト言語からサブルーチンとして呼び出す方法です。ホスト言語側にモジュールを呼び出す機能が必要ですが、モジュールを独立した形で作成することができます。
静的 SQL は、ホスト言語によって書かれるプログラムソース内に、直接 SQL 文を記述するものです。これは埋め込み SQL とも呼ばれていますが、例えばプログラムソースの中に EXEC SQL ~ ; と記述することにより、プログラム実行時に SQL が実行され、データベースを処理することができるようになります。これは、一度プログラムをコンパイルしてバイナリにしてしまえば、SQL は変化することがないことから静的 SQL と呼ばれています。
これに対して、SQL が変化するものを動的 SQL といいます。動的 SQL はホスト言語のプログラム実行時に、SQL を生成する方法です。
動的 SQL は静的 SQL に比べて、用途に応じた SQL をその都度生成できることから、柔軟性の高いアプリケーションを開発することができます。しかし、パフォーマンスは静的 SQL のほうが優れています。
SQL は、データベースからまとめてデータを取り出し、一括して処理することが得意な言語です。しかし、ここで説明したような他のアプリケーションとの連携では、まとめて取り出したデータに対して、1つずつ処理することが必要になることが多いと考えられます。SQL92 にはデータを 1つずつ取り出すための構文も用意されています。これにはカーソルという考え方が必要になりますが、カーソルについては、次の節で説明します。