java.sql.SQLException:ORA-00933:使用getGeneratedKeys时SQL命令未正确结束

当我使用以下查询时,它的工作原理.

query = "INSERT INTO MLRL1_PSR_MASTER (PROJECT_ID,FROM_DATE,TO_DATE,TEMPLATE_ID,TEMPLATE_TYPE,UPLOADED_BY,PSR_SLABID) " +
        " select '"+projectId+"' , FROM_DATE , TO_DATE,'"+templateId+"','"+tempType+"','"+user.getUserID()+"', "+slabId+
        " from MLRL1_PSR_SLABS where SLAB_ID="+slabId+" ";

stmt = connection.prepareStatement(query, new String[] { "ID" });
stmt.executeUpdate();
stmt = connection.prepareStatement(query);

但如果我使用与getGeneratedKeys()相同的查询:

stmt = connection.prepareStatement(query, new String[] { "ID" });
stmt.executeUpdate();
ResultSet rs = stmt.getGeneratedKeys();

while (rs.next()) {
    masterId = rs.getInt(1);
}

我收到一个错误

ORA-00933: SQL command not properly ended

stmt是java.sql.PreparedStatement,代码合规性是1.6,JRE是1.7.67 Oracle驱动程序是odbc6,数据库是Oracle Database 11g企业版11.2.0.1.0版

最佳答案
ResultSet rs = stmt.getGeneratedKeys();

JDBC驱动程序将添加’RETURNING. . . INTO. . ‘到您提供的查询结束,以便返回要求的值.
在您的情况下,指定了始终为INSERT生成的SLAB_ID,因为您没有指定自己的列.
当“RETURNING ..”添加到查询末尾时,生成的语法无效,从而显示错误消息.

ORA-00933: SQL command not properly ended

回归. . .仅支持INSERT … VALUES;也就是说,对于使用VALUES子句提供要插入的值的INSERT语句.使用子查询的插入不支持该语法.

请参阅Oracle SQL参考https://docs.oracle.com/cd/B28359_01/server.111/b28286/statements_9014.htm#SQLRF01604中INSERT语句的语法图

请注意,’returning_clause’仅显示在’values_clause’行上,而不显示在’子查询’行上.

不支持您尝试使用的语法.

您可以阅读更多内容:

07001

07002

转载注明原文:java.sql.SQLException:ORA-00933:使用getGeneratedKeys时SQL命令未正确结束 - 代码日志