バインド後のSQLについて

デバッグ時にバインド後のSQLが知りたいケースが多々ありますが、通常はバインド前のSQL文しか取得できません。

DBサーバーの機能を使えば、バインド後のSQLを出力できるものもあるようですが、DBサーバーは触れないケースも多々あるでしょう。

そんな時に、自前でバインド後のSQLを作ってしまおうというのがここでの趣旨です。

 

方法

パラメータリストをfor each でループして値に置き換える。

その際、文字列系の型の場合は引用符で囲む

ただし、パラメータ名1がパラメータ名2を内包する場合、例えば、「:」と「:」の場合、「」から置換すると上手くいかない。

正規表現を使って区切りを見つけるか、パラメータの長いものから順に置換する等の工夫が必要。

また、値がNullの場合も単純に置換できない。

  • = Null → Is Null
  • >= Null → そのまま

 

注意点

なお、SQL Serverのパラメータは「@para」のように「@」を付けて表すが、パラメータ名に「@」を含む。

Oracleのパラメータは「:para」のように「:」を付けて表すが、パラメータ名に「:」を含まない