12.4 データベース問い合わせ実行例
以上の構文を使いデータベースの問い合わせを行なってみましょう. SML#の通常のインストールでは,データベースサーバは PostgreSQLと接続するように設定されています. データベースをアクセスするためには,PostgreSQLサーバをインストー ルし起動しておく必要があります.
まず以下の手順で,PostgreSQLサーバでデータベースを構築しましょう. 以下に簡単な手順を示します. 詳しくはPostgreSQLドキュメントを参照してください.
-
1.
PostgreSQLサーバを起動します. 例えばpg_ctl start -D /usr/local/pgsql/data ようにすると起動できるはずです.
-
2.
コマンドラインでcreateuser を実行し PostgreSQLのユーザのロールを作成する. は,使用するユーザの名前です.
-
3.
コマンドラインでcreatedb mydbを実行しデータベースを作成する.
-
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);
自分のアカウント(ここでは)に戻り,データベース にアクセスできるか確認してみましょう. 以下のような結果が得られれば,成功です.
$ 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