Skip to content

Commit

Permalink
Merge pull request #50 from future-architect/feature/modify_batch_war…
Browse files Browse the repository at this point in the history
…ning_message

fix batch warning message
  • Loading branch information
HidekiSugimoto189 authored Jun 11, 2023
2 parents 049407f + 17f9ba4 commit 38a7f28
Showing 1 changed file with 3 additions and 3 deletions.
6 changes: 3 additions & 3 deletions src/basics/sql-file-api.md
Original file line number Diff line number Diff line change
Expand Up @@ -718,9 +718,9 @@ try (SqlAgent agent = config.agent()) {

::: danger batch/batchWith に指定するSQLの注意点
batch/batchWithの内部では `PreparedStatement` を作成し、渡されたパラメータをバインドしながら `PreparedStatement#executeBatch()` メソッドを呼び出すことでバッチ処理を行っています。
その際 `PreparedStatement` は、引数で渡されたSQLを**1件目のデータ**で評価したSQLを元に生成し、この `PreparedStatement` をバッチ処理が終了するまで利用します。
そのため、SQLの中に 条件分岐(`/*IF*/` など)や埋め込み文字(`/*# */` など)を記載していると、1件目のデータで条件分岐や埋め込みをしたSQLを元に `PreparedStatement` が生成されて2件目以降のデータでも利用されることになり、意図しない結果になります。
このことから、バッチ処理で使用するSQLには条件分岐やデータ毎に変化する埋め込み文字を **使用しないようにする必要があります**
その際 `PreparedStatement` は、引数で渡されたSQLを**定数パラメータとエスケープキャラクタ置換文字**で評価したSQLを元に生成し、この `PreparedStatement` をバッチ処理が終了するまで利用します。
そのため、SQLの中に 条件分岐(`/*IF*/` など)や埋め込み文字(`/*# */` など)を記載していると、条件分岐や埋め込み文字をnullで判定したSQLを元に `PreparedStatement` が生成されることになり、意図しない結果になります。
このことから、バッチ処理で使用するSQLには条件分岐や埋め込み文字を **使用しないようにする必要があります**

例)
下記のようなデータを
Expand Down

0 comments on commit 38a7f28

Please sign in to comment.