【发布时间】:2019-04-23 08:24:36
【问题描述】:
我已经了解了 INSERT ALL 语法,只要我不想检索插入的 id 值,它就可以正常工作。
与 INSERT ALL 语法相反,我可以在一个事务中使用多个 INSERT INTO 语句,这会起作用但对性能不利,如下所述:Best way to do multi-row insert in Oracle?。
这是我当前的代码:
//Creation of INSERT INTO statement
//...
Statement statement = dbConnection.createStatement();
statement.executeUpdate(INSERT_SQL, new String[] {"someIDColumn"});
ResultSet idResulSet = statement.getGeneratedKeys();
//Usage of the generated keys
它适用于单行,但如果我尝试 INSERT ALL 语法,我会得到:
java.sql.SQLSyntaxErrorException: ORA-00933: SQL 命令未正确结束
原因:错误:933,位置:187,Sql = INSERT ALL INTO bpos(artnr, bstnr, menge) VALUES (3, 31, 4) INTO bpos(artnr, bstnr, menge) VALUES (5, 31, 6) INTO bpos(artnr, bstnr, menge) VALUES (1, 31, 2) SELECT * FROM dual RETURNING artnr INTO :1 , OriginalSql = INSERT ALL INTO bpos(artnr, bstnr, menge) VALUES (3, 31, 4) INTO bpos(artnr, bstnr, menge) 值 (5, 31, 6) INTO bpos(artnr, bstnr, menge) 值 (1, 31, 2) SELECT * FROM dual RETURNING artnr INTO ?, Error Msg = ORA-00933: SQL 命令未正确结束
是否可以在 INSERT ALL 语句之后检索所有插入的 id?
【问题讨论】:
-
您是否尝试过使用批处理执行?我不确定 Oracle 驱动程序是否支持批量执行生成的密钥检索(鉴于 JDBC 将其定义为可选/特定于实现),但它可能比生成自己的查询字符串更好。
标签: java sql oracle jdbc ojdbc