SQL
SQLはその性質上、「宣言型」の言語である。
「カーソル」とは、SELECT文などによるデータベース検索による検索実行の結果を1行ずつ取得して処理するために、データベースサーバ側にある結果集合と行取得位置を示す概念をいう。 カーソルの定義とその操作は、主にアプリケーションプログラムなどの手続き型言語からのSQL実行において利用する。
DECLARE CURSOR (カーソル定義)
OPEN (カーソルのオープン)
FETCH (カーソルのポインタが指し示す位置の行データを取得し、ポインタを一行分進める。)
UPDATE (カーソルのポインタが指し示す位置の行データを更新する)
DELETE (カーソルのポインタが指し示す位置の行データを削除する)
CLOSE (カーソルのクローズ)
カーソル宣言例
※V開始値、V終了値は、埋め込み変数あるいはホスト変数と呼ばれ、埋め込みSQLの場合は、プログラム中のBEGIN DECLARE SECTION〜END DECLARE SECTIONの間で宣言する。
カーソルのオープン例
SQLで用いられる論理値は、コンピュータの世界でもっとも広く利用されている2値論理 (TRUE, FALSE) ではなく、3値論理 (TRUE, FALSE, UNKNOWN) となっている。 3値論理自体は古くから存在し、Fortran など数値計算においてはよく用いられる。
動的SQLは、通常SQL文をRDBMSに対して送信の度にデータベースエンジンで実行可能な内部中間コードに翻訳する作業を事前に行うことによって、翻訳済みSQLコードを再度利用してSQL解析のオーバーヘッドを削減することと、SQL文をソースコードで固定せずにデータベースへのアクセス毎に構文を書き換えたい場合に、有用である。データ操作言語 (DML) ももちろん実行できるが、データ定義言語 (DDL) のようにデータベース製品の機能アップによって新しい命令が追加されるものは、プリプロセッサの対応作業が重荷になるため、ほとんどのデータベース製品ではDDL文は動的SQLにて実行することが一般的となっている。
PREPARE (文字列で与えたSQL文を解析・翻訳する)
EXECUTE (PREPAREで翻訳したSQL文を実行する)
データベース言語SQLの文法の種別は、以下の3つに大別される。
データ定義言語 (DDL: data definition language)
データ操作言語 (DML: data manipulation language)
データ制御言語 (DCL: data control language)
その他に、これらの命令の適用範囲を補完するための機能として、SQL文を実行時に解釈する「動的SQL」や、埋め込みSQLのための命令などが用意されている。 関係データベース管理システム (RDBMS) 以前のデータベース管理システム (DBMS) では、これらは必ずしも同一の言語ではなかった。データ定義言語は存在せずにすべて専用のコマンドにパラメタを指定して実行する実装も存在した。