プログラミング言語SML#解説 4.1.0版
22 SQL式とコマンド

22.2 SQLクエリのためのML式の拡張構文

第19章で定義されている通り, SML#ではSQLクエリのために以下の拡張構文を導入している.

⟨exp⟩ ::= ⋯
 | _sqlserver (⟨appexp⟩)? : ⟨ty⟩ SQLサーバ
 | _sql ⟨pat⟩ => ⟨sqlfn⟩ SQL実行関数
 | _sql ⟨sql⟩ SQLクエリ断片
⟨atexp⟩ ::= ⋯
 | _sql (⟨sql⟩) SQLクエリ断片

⟨sql⟩および⟨sqlfn⟩は以下の通りである.

⟨sql⟩ ::= ⟨sqlexp⟩ SQL評価式
 | ⟨sqlselect⟩ SELECTクエリ
 | ⟨sqlclause⟩ SQLクエリ句
 | ⟨sqlcommand⟩ SQLコマンド
⟨sqlfn⟩ ::= ⟨sqlselect⟩ SELECTクエリ
 | ⟨sqlclause⟩ SQLクエリ句
 | ⟨sqlcommand⟩ SQLコマンド

⟨sqlexp⟩は 22.4節で, ⟨sqlselect⟩および⟨sqlclause⟩は 22.5節で, ⟨sqlcommand⟩は 22.6節で, それぞれ定義する.

これらの構文のうち_sqlで始まる式に現れる ⟨pat⟩および⟨sql⟩の中では, ...(⟨exp⟩)または (...⟨exp⟩)という形で囲われる⟨exp⟩の中を除き (22.4節, 22.5節,および 22.6節参照), 以下は予約語として扱われる (この予約語のリストは 第17.2節からの再掲である). これらの予約語をSQL予約語と呼ぶ.

asc all begin by commit cross default delete desc distinct fetch first from group inner insert into is join limit natural next not null offset only on or order rollback row rows select set update values where

また,これらの構文には以下の制限がある.

  • •

    _sqlに続く⟨pat⟩は開き丸括弧“(”から 始まってはならない.

  • •

    式(トップレベル)の _sql ⟨sql⟩の ⟨sql⟩は, SQL予約語で始まらなければならない.

  • •

    式(トップレベル)の _sql ⟨sql⟩は, 以下の位置以外に現れてはならない.

    • –

      valやfun宣言の=の右側

    • –

      let式のinとendの間

    • –

      逐次実行式(⋯;⋯)の中

    • –

      組ではない式を囲う丸括弧の中

    • –

      上記4つの位置にあるfn式の=>の右側