カーソル (データベース)
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2022/04/29 06:34 UTC 版)
ナビゲーションに移動 検索に移動データベースにおけるカーソル(英: cursor)は、一連のデータに順にアクセスする際の検索条件および「現在位置」を保持するデータ要素である。
概要
一般にデータベースは、同じ種類のデータを数多く蓄積しており、利用者が求めるデータも1件だけではなく複数件になる可能性がある。このようなケースは、カーソルを使って以下のようにイテレータの要領で実現できる。
- 利用者は検索条件やソート順序を指定してカーソルを定義する。
- パラメータを利用している場合は値を決定し、データへのアクセスを開始する。
- カーソル位置のデータを取得する。検索結果の終端なら7へ。
- 必要に応じてカーソル位置のデータを変更・削除する。
- カーソルを「次のデータ」へと進める。
- 3から繰り返し。
- 繰り返しの終了後、カーソルを解放する。
システムによっては5において、次のデータに進む以外に、ひとつ前のデータに戻ることも許している。
カーソルを使う理由の一つとして、クエリの結果が多数の行を持つことによる メモリのオーバーランを防ぐことが挙げられる。PL/pgSQLではメモリ問題を引き起こさないようにforループが内部で自動的に カーソルを用いるため、この心配がない。
具体例
SQL
関係データベース用の問い合わせ言語として広く使われているSQLでは、カーソルを用いたアクセスのために一連のステートメントを提供している。「DECLARE CURSOR
」でカーソルを宣言し、「FETCH
」でカーソル位置のデータを取得するとともに次のデータに進む。データを変更する「UPDATE
」や削除する「DELETE
」は、「WHERE CURRENT OF カーソル名
」を指定することで、カーソル位置のデータを操作できる。使用後は「CLOSE
」で解放する。具体的な文法はSQL#カーソル定義・操作を参照。
ODBC
C言語プログラムからSQLを使ってデータベースにアクセスするためのライブラリのひとつとしてODBCがある。ODBCはMicrosoft Windowsで広まった後、業界標準のSQL/CLIやJDBCのベースとなった。
カーソル操作に係るSQLステートメントには、以下のように個別のODBC関数が対応している。
ODBC関数 | 対応するSQLステートメント |
---|---|
SQLPrepare | DECLARE CURSOR |
SQLExecute | OPEN |
SQLFetch | FETCH |
SQLFreeStmt | CLOSE |
ODBCでは、アプリケーションプログラムがカーソルを直接指定することは、ほとんどない。上記の関数はいずれも「ステートメントハンドル」(Statement Handle)を引数としており[1]、このハンドルが指し示すデータ構造の中にカーソルも含まれているという扱いになる。すなわち、ステートメントハンドルがイテレータの役割を果たしている。
dbm
dbmは関係データベースより単純な、キーと値の対応だけからなるデータベース機能を提供する。ここでもデータベース上の「現在位置」を指し示すために「カーソル」の語が使われている[2]。
注意点
- カーソルは実行中の検索条件や現在位置を保持するために、メモリ容量などの資源を必要とする。カーソルの解放漏れはメモリリークにつながる可能性がある。
- 標準SQL規格では、トランザクションを終了するとカーソルは破棄される仕様である。しかし、DBMSによっては破棄されずそのままデータにアクセスすることができる。標準SQL規格に準拠した使い方をするのであれば、トランザクション終了後はカーソルを破棄するべきである。
脚注
- ^ Microsoft. “ODBC Function Summary” (英語). 2008年6月7日閲覧。
- ^ JMプロジェクト. “dbopen” (日本語). 2008年6月7日閲覧。
「カーソル (データベース)」の例文・使い方・用例・文例
- カーソル_(データベース)のページへのリンク