プログラミング言語SML#解説 3.7.1版
12 SML#の拡張機能:SQLの統合

12.4 データベース問い合わせ実行例

以上の構文を使いデータベースの問い合わせを行なってみましょう. SML#の通常のインストールでは,データベースサーバは PostgreSQLと接続するように設定されています. データベースをアクセスするためには,PostgreSQLサーバをインストー ルし起動しておく必要があります.

まず以下の手順で,PostgreSQLサーバでデータベースを構築しましょう. 以下に簡単な手順を示します. 詳しくはPostgreSQLドキュメントを参照してください.

  1. 1.

    PostgreSQLサーバを起動します. 例えばpg_ctl start -D /usr/local/pgsql/data ようにすると起動できるはずです.

  2. 2.

    コマンドラインでcreateuser myAccountを実行し PostgreSQLのユーザのロールを作成する. myAccountは,使用するユーザの名前です.

  3. 3.

    コマンドラインでcreatedb mydbを実行しデータベースを作成する.

  4. 4.

    SQL言語インタープリタを起動し,データベースの中にテーブルを作成す る. 例えば,第12.1節の例のデータベースは,以下 のようにすれば作成できます.

    $ psql mydb
    mydb# CREATE TABLE Persons (
        name text not null, age int not null, salary int not null
      );
    mydb# INSERT INTO Persons VALUES (’Joe’, 21, 10000);
    mydb# INSERT INTO Persons VALUES (’Sue’, 31, 20000);
    mydb# INSERT INTO Persons VALUES (’Bob’, 41, 30000);

自分のアカウント(ここではmyAccount)に戻り,データベース にアクセスできるか確認してみましょう. 以下のような結果が得られれば,成功です.

$ psql mydb
mydb=# SELECT * FROM Persons;
mydb=# SELECT * FROM Persons;
 name | age | salary
------+-----+--------
 Joe  |  21 |  10000
 Sue  |  31 |  20000
 Bob  |  41 |  20000
(3 行)

ではいよいよ,このデータベースをSML#からアクセスしてみま しょう. 第12.2節で定義した問い合わせ関数をmyQueryとします. 対話型セッションで以下のような結果が得られるはずです.

$ smlsharp
# val myServer = _sqlserver SQL.postgresql "dbname=mydb" : {Persons:{name:string, age:int, salary :int} list};
val myServer = _ : {Persons: {age: int, name: string, salary: int} list} SQL.server
# val conn = SQL.connet myServer;
val conn = _ : {Persons: {age: int, name: string, salary: int} list} SQL.conn
# val rel = myQuery conn;
val rel = {Persons: {age: int, name: string, salary: int}} list SQL.conn
# SQL.fetchAll rel;
val it = {{age=32, name="Sue"}, {age=41, name="Bob"}} : {age:int, name: string} list