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

时间:2015-03-03 16:57:44

标签: java sql database oracle jdbc

当我使用以下查询时,它可以正常工作。

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命令未正确结束

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

2 个答案:

答案 0 :(得分:4)

ResultSet rs = stmt.getGeneratedKeys();

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

  

ORA-00933:SQL命令未正确结束

退货。 。 。仅支持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'行,而不显示在'subquery'行。

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

您可以在以下网址阅读更多内容:

  

http://database.developer-works.com/article/16369238/INSER+INTO+with+SELECT+is+throwing+error

     

https://community.oracle.com/thread/1325790

答案 1 :(得分:-3)

我认为语法不正确。你可能需要添加' VALUES'在您的查询中。插入查询应如下所示 - INSERT INTO TABLE_NAME VALUES();