質問: concat('insert into procedure_log values (', quote(procedure_name), ',', quote(sql_text), ', null)'); prepare stmt from @sql; execute stmt; end // delimiter ;
回答: stored function からは procedure 経由でも prepared 文は発行できないようです。function自体がprepared に近い機構で動作してて多重prepareは出来ないんだとかいう理由だったような?細かい理由は英文マニュアル参照。 とりあえず、日本語マニュアルには、一文ですまされてますが。 http://dev.mysql.com/doc/refman/5.1-olh/ja/sql-syntax-prepared-statements.html 後半に以下の一文 「準備済みステートメントの sql 構文はストアドプロシージャー内で利用できますが、ストアドファンクションやトリガー内では利用できません。」 procedure 側へ、データ取りだしsql文も渡して、procedure内で完結させるしかないのでは? procedure の連鎖は可能なんだし。 それとも、以下の記事のように、 gearman mysql udf をインストールしたうえでさらに、別アプリケーションから実行とか? http://d.hatena.ne.jp/heavenshell/20100610/1276161261 上記は、自前mysqlサーバーでないと無理かと思うけど、どういう状況における何のログなのかによっても、取り得る方法は変わってくるでしょう。