12.3 問い合わせの実行
_sql => 式で定義された問い合わせ関数にデータベー ス接続を適用すれば,データベースをアクセスできます. そのために,以下の構文と関数が用意されています.
-
•
データベースサーバー式.
_sqlserver :
この式は,データベースサーバーを指定します. はデータベースサーバーの場所と名前です. その具体的な内容は,使用するデータベースシステムのデータベース指 定構文に従います. はデータベースの構造です. テーブルの名前とその構造をレコード型の文法で指定します. この式を評価すると, SQL.server型をもつデータベースサー バー定義が得られます. 詳細は22.3節をご覧ください.
-
•
データベースへの接続プリミティブ関数.
SQL.connect : [’a. ’a SQL.server -> ’a SQL.conn]
SML#コンパイラは, SQL.server型のデータベース定義 を受け取り,その中に指定されたデータベースに接続しその構造をチェックし と一致していることを確認した後, SQL.connの型をもつ 型のデータベースへの接続を返します.
-
•
問い合わせの実行. _sql式そのものが,データベースで問い合わせを実行する 関数を表します. データベース問い合わせ関数にデータベース接続を 適用すると,その問い合わせがその接続を通じてデータベース上で実行され, その結果にアクセスするための SQL.cursor型のカーソルを 返します.
-
•
問い合わせ結果の取得. 以下の2つの手続き的な関数が提供されています.
SQL.fetchAll : [’a. ’a SQL.cursor -> ’a option]
SQL.fetch : [’a. ’a SQL.cursor -> ’a list]SQL.fetchは先頭のレコードを返し,カーソルを次のレコードに 進めます. SQL.fetchAllは,問い合わせによって得られた関係をすべて 読み込み,リストに変換します.
-
•
問い合わせの後処理.
SQL.closeCursor : [’a. ’a SQL.cursor -> unit]
SQL.closeConn : [’a. ’a SQL.conn -> unit]SQL.closeCursorは問い合わせ処理の終了を,SQL.closeConn はデータベース接続の終了をそれぞれ データベースサーバに通知します.