繁体   English   中英

JDBC SqlSyntaxErrorException 但语句在 SQL 工具中有效

[英]JDBC SqlSyntaxErrorException but statement works in SQL tool

I have a DB2 MERGE INTO statement that gives me a sql syntax exception when I try to execute it from Java, but when I put in the parameters in my SQL tool it runs just fine. 我已经在我的 SQL 工具和 Java 中反复运行了这个,它总是在前者中工作,但在后者中失败。 这是 SQL(表和列名已更改以保护无辜):

merge INTO sales_table AS target 
USING (VALUES ( CAST('2020' AS CHAR(4)), CAST('12' AS CHAR(2)), CAST('AB01' AS CHAR(4)), CAST 
      (0555.0 AS 
      DECIMAL(9)), CAST(0.000 AS DECIMAL(9)), CAST('DP079616' AS CHAR(8)) )) AS input_data ( 
      year, month, location, no, orig_no, last_upd_userid ) 
ON ( target.year = input_data.year 
     AND target.month = input_data.month 
     AND target.location = input_data.location ) 
WHEN matched THEN 
  UPDATE SET no = input_data.no, 
             orig_no = input_data.orig_no, 
             last_upd_userid = input_data.last_upd_userid, 
             last_upd_tmstmp = CURRENT TIMESTAMP 
WHEN NOT matched THEN 
  INSERT ( year, 
           month, 
           location, 
           no, 
           orig_no, 
           creation_userid, 
           creation_tmstmp, 
           last_upd_userid, 
           last_upd_tmstmp ) 
  VALUES ( input_data.year, 
           input_data.month, 
           input_data.location, 
           input_data.no, 
           input_data.orig_no, 
           input_data.last_upd_userid, 
           CURRENT TIMESTAMP, 
           input_data.last_upd_userid, 
           CURRENT TIMESTAMP )

在上面的查询中,我用 Java 用set...方法设置的硬编码参数替换了?s。

I get this exception in Java: com.ibm.db2.jcc.am.SqlSyntaxErrorException: DB2 SQL Error: SQLCODE=-270, SQLSTATE=42997, SQLERRMC=null, DRIVER=4.21.29

这是相关的 Java 部分:

req.setString(i++, roaa.getYear());
req.setString(i++, roaa.getMonth());
req.setString(i++, roaa.getLocatoin());
req.setFloat(i++, Float.parseFloat(roaa.getSalesNumber()));
req.setFloat(i++, Float.parseFloat(roaa.getOrigSalesNumber()));
req.setString(i++, userId);
req.executeUpdate();

关于为什么我会在我的 SQL 工具中得到语法异常的任何想法? 显然,如果它有效,语法是正确的。 我用谷歌搜索了 SQL 代码 -270,各种结果表明这是因为它在某处违反了约束,但同样,它在 SQL 工具中有效,所以我不禁认为我忽略了一些简单的东西,应该很明显我。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM