当我使用以下查询时,它可以正常工作。
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命令未正确结束
stmt
为java.sql.PreparedStatement
,代码合规性为1.6,JRE为1.7.67 Oracle驱动程序为odbc6,数据库为Oracle Database 11g企业版11.2.0.1.0
答案 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
答案 1 :(得分:-3)
我认为语法不正确。你可能需要添加' VALUES'在您的查询中。插入查询应如下所示 - INSERT INTO TABLE_NAME VALUES();