バインド後のSQLについて
デバッグ時にバインド後のSQLが知りたいケースが多々ありますが、通常はバインド前のSQL文しか取得できません。
DBサーバーの機能を使えば、バインド後のSQLを出力できるものもあるようですが、DBサーバーは触れないケースも多々あるでしょう。
そんな時に、自前でバインド後のSQLを作ってしまおうというのがここでの趣旨です。
方法
パラメータリストをfor each でループして値に置き換える。
その際、文字列系の型の場合は引用符で囲む
ただし、パラメータ名1がパラメータ名2を内包する場合、例えば、「:」と「:」の場合、「」から置換すると上手くいかない。
正規表現を使って区切りを見つけるか、パラメータの長いものから順に置換する等の工夫が必要。
また、値がNullの場合も単純に置換できない。
- = Null → Is Null
- >= Null → そのまま
注意点
なお、SQL Serverのパラメータは「@para」のように「@」を付けて表すが、パラメータ名に「@」を含む。
Oracleのパラメータは「:para」のように「:」を付けて表すが、パラメータ名に「:」を含まない