PreparedStatement UPSERT返回“ ORA-00923:在期望的位置找不到FROM关键字”

问题描述 投票:0回答:1

我正在设置一个PreparedStatement,将其用于Kafka消费者。在运行addBatch()之前,该程序自身会运行executeBatch() 500次。

我的问题是以下PreparedStatement(对格式很抱歉):

PreparedStatement medlemStatement = conn.prepareStatement("MERGE INTO TABLENAME S USING " +
    "(SELECT ? COLUMN1, ? COLUMN2, ? COLUMN3, ? COLUMN4, ? COLUMN5, ? COLUMN6, ? COLUMN7, ? COLUMN8, ? COLUMN9" +
    "? COLUMN10, ? COLUMN11, ? COLUMN12, ? COLUMN13, ? COLUMN14, ? COLUMN15, ? COLUMN16, ? COLUMN17, ? COLUMN18, ? COLUMN19, ? COLUMN20 FROM DUAL) R " +
    "ON (S.COLUMN1=R.COLUMN1 AND S.COLUMN19=R.COLUMN19) " +
    "WHEN MATCHED THEN " +
        "UPDATE SET " +
        "S.COLUMN2=R.COLUMN2, S.COLUMN3=R.COLUMN3, S.COLUMN4=R.COLUMN4, S.COLUMN5=R.COLUMN5, S.COLUMN6=R.COLUMN6, S.COLUMN7=R.COLUMN7, " +
        "S.COLUMN8=R.COLUMN8, S.COLUMN9=R.COLUMN9, S.COLUMN10=R.COLUMN10, S.COLUMN11=R.COLUMN11, S.COLUMN12=R.COLUMN12, S.COLUMN13=R.COLUMN13, " +
        "S.COLUMN14=R.COLUMN14, S.COLUMN15=R.COLUMN15, S.COLUMN16=R.COLUMN16, S.COLUMN17=R.COLUMN17, S.COLUMN18=R.COLUMN18, S.COLUMN20=R.COLUMN20 " +
    "WHEN NOT MATCHED THEN " +
        "INSERT (COLUMN1, COLUMN2, COLUMN3, COLUMN4, COLUMN5, COLUMN6, COLUMN7, COLUMN8, COLUMN9, COLUMN10, COLUMN11" +
        "COLUMN12, COLUMN13, COLUMN14, COLUMN15, COLUMN16, COLUMN17, COLUMN18, COLUMN19, COLUMN20  " +
        "VALUES (R.COLUMN1, R.COLUMN2, R.COLUMN3, R.COLUMN4, R.COLUMN5, R.COLUMN6, R.COLUMN7, R.COLUMN8, R.COLUMN9, R.COLUMN10, R.COLUMN11" +
        "R.COLUMN12, R.COLUMN13, R.COLUMN14, R.COLUMN15, R.COLUMN16, R.COLUMN17, R.COLUMN18, R.COLUMN19, R.COLUMN20)"
);

执行executeBatch()时,出现以下错误信息:

java.sql.BatchUpdateException:ORA-00923:在预期的位置找不到FROM关键字

就我而言,SQL查询看起来正确,但是显然这里有些问题。预先谢谢!

java sql oracle jdbc prepared-statement
1个回答
-2
投票

SQL查询看起来正确,但是在executeBatch()中出了点问题。

© www.soinside.com 2019 - 2024. All rights reserved.