岩本隆史の日記帳(アーカイブ)

はてなダイアリーのサービス終了をうけて移行したものです。更新はしません。

MySQLのストアドで少しはまった

id:habuakihiroさんが書かれた『楽々ERDレッスン』を今さらながら買って読んだ。イベント系のテーブルから考えるという方法論を学べたのが大きな収穫。

私は以前からO/Rマッパーというものになじめず、Railsライクのフレームワークを(少なくとも趣味的な活動では)使う気になれないでいる。SQLを書くのに抵抗がないというか、プログラムを書くよりSQLを書くほうが好きなのかもしれない(えー)。

前掲書ではストアドの積極的な利用を勧めていて、それは私の性質とぴったんこなので、今作っているWebアプリでバリバリ活用してやろうと思い、書き始めている。

XAMPP環境なのでDBはMySQL。ストアドをMySQLで書くのは初めてで、何箇所かはまったのでメモしておく。

ストアド内では「LOCK TABLES」できない
ストアド内で「LOCK TABLES」しようとしたらエラーが出た。マニュアルを調べると、ストアドの制約だとしっかり書かれていた。もともとInnoDBなので、トランザクションで対応することにした。
RAISERRORのような仕組がない
エラー情報をクライアントに返したいのだが、RAISERRORのような仕組がない。エラー情報以外にも戻り値を返したい場面もあるので、単純にストアドファンクションを使うわけにもいかない。仕方がないので、ストアドプロシージャのOUTパラメータで対応することにした。

PostgreSQLならもっと自由にストアドが書けるのだが、制約があるほど燃える性格なので、MySQLでできる限り頑張ってみようと思っている。