パラメーター・マーカー(変数バインド)の不思議
JDBC経由でsetStringして
INSERT INTO tableA (col1, col2 ) VALUES ( 'TEST' , CAST(REPLACE(?,'/','-') AS DATE );
を投げると
com.ibm.db2.jcc.b.SqlException: DB2 SQL error: SQLCODE: -418, SQLSTATE: 42610, SQLERRMC: null
でおっこちる。
これを
INSERT INTO tableA (col1, col2 ) VALUES ( 'TEST' , CAST(REPLACE(CAST(? AS VARCHAR(10),'/','-') AS DATE );
とかにして、パラメータを明示的に文字列変換すると大丈夫になる。getStringでセットされたパラメータはデフォルトだとCHARとかVARCHARとみなされないのか。数時間悩みました。