会社で隣の席にすわってるKさんから「DBIでexecuteする時に色々な値をbindするじゃないですか。その後で実際に投げられたSQL文を引っ張ってくる方法ないんですか?」と質問されちゃいました。 そう言えばDBIx::Classとかだと環境変数でなんかセットするんだったけど、素のDBIの場合どうするのかな?と思って調べてみました。 DBIの長い長いドキュメントをずーっと読み進んで行くと、下の方に「TRACING」というセクションがありまして、そこにヒントが隠されてました。 どうやらTrace Flagsで「SQL」と指定すると標準エラーにトレース情報が出力されるみたいです。 具体的にはこれでいいみたい。 $dbh->{TraceLevel} = "3|SQL"; これでSTDERRにバコバコっとトレース情報が出力されて行きます。 STDERRの中に、実際に投げられたSQL文も含まれている