gpt4 book ai didi

java - 在一条语句中使用 getGenerateKeys() 从 java 向 Oracle 数据库中插入多行

转载 作者:太空宇宙 更新时间:2023-11-04 10:01:29 24 4
gpt4 key购买 nike

我已经了解了 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 command not properly ended

Caused by: Error : 933, Position : 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) VALUES (5, 31, 6) INTO bpos(artnr, bstnr, menge) VALUES (1, 31, 2) SELECT * FROM dual RETURNING artnr INTO ?, Error Msg = ORA-00933: SQL command not properly ended

是否可以在 INSERT ALL 语句后检索所有插入的 id?

最佳答案

嗯,据我所知,这是可能的,但不是直接的(因为你可以通过更新或删除来做到这一点);必须使用一些解决方法

这是一个例子:

SQL> create table test (id number, name varchar2(20));

Table created.

SQL> declare
2 type tt_test is table of test%rowtype index by binary_integer;
3 l_test tt_test;
4 l_id sys.odcinumberlist;
5 begin
6 select id, name
7 bulk collect into l_test
8 from (select 111 id, 'Little' name from dual union all
9 select 222 id, 'Foot' name from dual
10 );
11
12 forall i in l_test.first .. l_test.last
13 insert into test (id, name) values (l_test(i).id, l_test(i).name)
14 returning l_test(i).id bulk collect into l_id;
15
16 for i in l_id.first .. l_id.last loop
17 dbms_output.put_line('Inserted ID = ' || l_id(i));
18 end loop;
19 end;
20 /
Inserted ID = 111
Inserted ID = 222

PL/SQL procedure successfully completed.

SQL>

不过,我不知道你能在你的(Java?)代码中使用它吗,因为我不会说那种语言。

关于java - 在一条语句中使用 getGenerateKeys() 从 java 向 Oracle 数据库中插入多行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53400680/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com