パラメーター・マーカー(変数バインド)の不思議

 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とみなされないのか。数時間悩みました。