[ https://issues.apache.org/jira/browse/FLINK-15728?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17156592#comment-17156592 ]
Jark Wu commented on FLINK-15728: --------------------------------- Hi [~dasbh], I will continue this work based on the {{NamedPrepareStatement}} solution. > JDBCUpsertOutputFormat does not set bind parameter keyFields in > updateStatement > ------------------------------------------------------------------------------- > > Key: FLINK-15728 > URL: https://issues.apache.org/jira/browse/FLINK-15728 > Project: Flink > Issue Type: Bug > Components: Connectors / JDBC, Table SQL / Ecosystem > Affects Versions: 1.9.1 > Reporter: Bhagavan > Assignee: Bhagavan > Priority: Critical > Fix For: 1.12.0 > > > When using JDBCUpsertOutputFormat custom dialect e.g. H2/Oracle which uses > UpsertWriterUsingInsertUpdateStatement, code fails with below error. > {code:java} > Caused by: org.h2.jdbc.JdbcSQLDataException: Parameter "#6" is not set > [90012-200] > at org.h2.message.DbException.getJdbcSQLException(DbException.java:590) > at org.h2.message.DbException.getJdbcSQLException(DbException.java:429) > at org.h2.message.DbException.get(DbException.java:205) > at org.h2.message.DbException.get(DbException.java:181) > at org.h2.expression.Parameter.checkSet(Parameter.java:83) > at > org.h2.jdbc.JdbcPreparedStatement.addBatch(JdbcPreparedStatement.java:1275) > at > org.apache.flink.api.java.io.jdbc.writer.UpsertWriter$UpsertWriterUsingInsertUpdateStatement.processOneRowInBatch(UpsertWriter.java:233) > > at > org.apache.flink.api.java.io.jdbc.writer.UpsertWriter.executeBatch(UpsertWriter.java:111) > {code} > This is due to UpsertWriterUsingInsertUpdateStatement#processOneRowInBatch > does not set all bind paramters in case of Update. > This bug does get surfaced while using Derby DB. > In JDBCUpsertOutputFormatTest if we replace Derby with H2 we can reproduce > the bug. > The fix is trivial. Happy to raise PR. > {code:java} > //for update case replace below > setRecordToStatement(updateStatement, fieldTypes, row); > //with > setRecordToStatement(updateStatement, fieldTypes + pkTypes, row + pkRow); > //NOTE: as prepared updateStatement contains additional where clause we need > pass additional bind values and its sql Types > {code} -- This message was sent by Atlassian Jira (v8.3.4#803005)