在OracleDB11.2.0.4和ojdbc6.jar中,是否有方法避免从序列预取ID以批量插入记录
我有一个为表生成主键的序列。使用jdbc,我试图批量插入到表中。有没有办法避免预取序列 Oracle数据库11.2.0.4 ojdbc6.jar在OracleDB11.2.0.4和ojdbc6.jar中,是否有方法避免从序列预取ID以批量插入记录,jdbc,batch-processing,oracle11gr2,Jdbc,Batch Processing,Oracle11gr2,我有一个为表生成主键的序列。使用jdbc,我试图批量插入到表中。有没有办法避免预取序列 Oracle数据库11.2.0.4 ojdbc6.jar 一些堆栈溢出帖子表明Oracle 12c不支持语句上的“getGeneratedKeys”方法。您可以使用表上的触发器从数据库内部填充主键列,从而避免了获取键然后插入键的往返过程 例如,如果您的表名为MYTABLE,则 CREATE OR REPLACE TRIGGER MYTABLE before insert on MYTABLE for
一些堆栈溢出帖子表明Oracle 12c不支持语句上的“getGeneratedKeys”方法。您可以使用表上的触发器从数据库内部填充主键列,从而避免了获取键然后插入键的往返过程 例如,如果您的表名为MYTABLE,则
CREATE OR REPLACE TRIGGER MYTABLE
before insert on MYTABLE
for each row
begin
if :NEW.MYTABLE_ID is null then
select MYTABLE_SEQ.nextval into :NEW.MYTABLE_ID from dual;
end if;
end;
如果在insert之后需要应用程序中的密钥值,可以在insert语句中使用RETURNING INTO子句来执行insert并在单个语句中将密钥返回到应用程序层
如果要避免触发,可以在insert语句中使用sequence.nextval
INSERT INTO MYTABLE (my_id, first_name, last name) value (MYSEQUENCE.nextval, ?, ?) RETURNING MY_ID into ?
我不喜欢使用触发器,因为它是应用层不知道的副作用。是的,使用MYSEQUENCE.nexval是最好的选择。但是,如果我在我的表中使用INSERT,我的id、名字、姓氏值为MYSEQUENCE.nextval?并使用jdbc编写的语句。我可以使用JDBC 4.0规范指定的getGeneratedKeys获取所有生成的主键吗?文档与其他问题一致,因此批量更新不支持该功能。您是否考虑过使用全局临时表作为解决方法。。。插入GTT,选择返回主键,然后插入。。从…起将GTT复制到主表。然后提交以清空GTT在提交时使用的删除行应答。考虑到我计划插入的记录量,500k,GTT相当于使用序列。再多浏览一点,我想,要么我应该更改数据定义并使用应用程序生成的UUID来避免额外的往返,要么我可以使用。