MySQLのストアドファンクションを使ってみた

まー、二点間の距離でソートしたいなーと思いつつ、PHPでソートしてたんですよね。遅いし、メンテナンス性低いしってことで。

そしたら、ストアドプロシージャ的なものがあるってことで。って、前から存在は知っていたんですけど、サボってたと。

この辺りを参考にさせていただいて。

MySQL ストアドファンクション - kozy.heteml.jp

で、速攻つまずいて。CREATE FUNCTION...とかやるとエラー。上のリンク先にも書かれているエラー。

ERROR 1418 (HY000): This function has none of DETERMINISTIC, NO SQL, or READS SQL DATA
in its declaration and binary logging is enabled (you *might* want to use the less safe
log_bin_trust_function_creators variable)

と言うことで、

mysql> SET GLOBAL log_bin_trust_function_creators = 1;

で、回避。

そして、コマンドラインからは動作を確認。んが、今度はWebアプリから実行しようとしたら「Unknown Error」。なぜじゃー?とログを見てたら、ユーザの権限不足。

ストアドほにゃららを実行するには「EXECUTE」権限が必要なんですね。知らなんだ。

MySQL :: MySQL 5.1 リファレンスマニュアル :: 12.5.1.3 GRANT 構文

と言うことで、

GRANT EXECUTE ON database_name.* TO ''@'localhost' ...

とやって、権限追加で上手く行きました。

厳密に性能測定した訳じゃないですけど、速くなっているような。何よりも、DB操作をDBレイヤにまとめられたのが嬉しかったり。


実験@2008/12/16 22:41 | 0 comments | 0 trackbacks |

コメント

コメントの投稿


秘密にする

«  | HOME |  »

いろいろ作ったり

今感じていること

プロフィール

Author:icot
ふつーの会社員。お酒、ジョギング、音楽、本、料理をこよなく愛してます。ここでは、日々感じた事を書き連ねるとともに、いろいろ実験してみたりしてます。
icotfeels[at]gmail.com