gpt4 book ai didi

Java 的准备语句与 Oracle Merge

转载 作者:行者123 更新时间:2023-12-01 18:44:55 24 4
gpt4 key购买 nike

我已经为 Oracle 准备了一个使用 Merge 的 SQL 查询。但是,当我尝试使用 Java 的准备语句时,出现以下错误。

java.sql.SQLSyntaxErrorException: ORA-00923: FROM keyword not found where expected

at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:439)
at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:395)
at oracle.jdbc.driver.T4C8Oall.processError(T4C8Oall.java:802)
at oracle.jdbc.driver.T4CTTIfun.receive(T4CTTIfun.java:436)
at oracle.jdbc.driver.T4CTTIfun.doRPC(T4CTTIfun.java:186)
at oracle.jdbc.driver.T4C8Oall.doOALL(T4C8Oall.java:521)
at oracle.jdbc.driver.T4CPreparedStatement.doOall8(T4CPreparedStatement.java:205)
at oracle.jdbc.driver.T4CPreparedStatement.executeForRows(T4CPreparedStatement.java:1008)
at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:1307)
at oracle.jdbc.driver.OraclePreparedStatement.executeInternal(OraclePreparedStatement.java:3449)
at oracle.jdbc.driver.OraclePreparedStatement.execute(OraclePreparedStatement.java:3550)
at oracle.jdbc.driver.OraclePreparedStatementWrapper.execute(OraclePreparedStatementWrapper.java:1374)
at ke.co.smart.MemberResponse.memberUpdater(MemberResponse.java:267)
at ke.co.smart.MemberResponse.<init>(MemberResponse.java:184)
at ke.co.smart.Switch.serviceProcessor(Switch.java:181)
at ke.co.smart.Switch.run(Switch.java:359)

下面是我准备执行的SQL语句。

String sql = "MERGE INTO smart.tmp_switch_membership dest USING (SELECT "
+ membershipNumber + " member," + prevMembershipNumber + "," + schemeCode
+ "," + schemePlan + "," + memberPlan + "," + primaryCareProvider
+ "," + employeeNumber + "," + employerCode + "," + employerDesc
+ "," + brokerCode + "," + brokerDesc + "," + numberOfBeneficiaries.intValue()
+ " FROM DUAL) src ON (src.member = dest.membership_number) "
+ "WHEN NOT MATCHED THEN "
+ "INSERT(membership_number, prev_member_number, scheme_code,"
+ "scheme_plan, member_plan, primary_care_prov, correspondence_ind,"
+ "employee_number, employer_code, employer_desc, broker_agent_code,"
+ "broker_agent_desc, beneficiary_count) "
+ "VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)";
PreparedStatement ps = con.prepareStatement(sql);
ps.setString(1, membershipNumber);
ps.setString(2, prevMembershipNumber);
ps.setString(3, schemeCode);
ps.setString(4, schemePlan);
ps.setString(5, memberPlan);
ps.setString(6, primaryCareProvider);
ps.setString(7, employeeNumber);
ps.setString(8, employerCode);
ps.setString(9, employerDesc);
ps.setString(10, brokerCode);
ps.setString(11, brokerDesc);
ps.setInt(12, numberOfBeneficiaries.intValue());
ps.execute();
con.commit();
ps.close();

任何提供的帮助将不胜感激。

最佳答案

SELECT 关键字后没有空格。你应该有空间

"... dest USING (SELECT "
^^^

关于Java 的准备语句与 Oracle Merge,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18201453/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com