有没有办法避免从序列中预取id到Oracle db 11.2.0.4中使用ojdbc6.jar批量插入记录

时间:2015-11-07 14:19:01

标签: jdbc batch-processing oracle11gr2

我有一个生成表的主键的序列。使用jdbc,我试图批量插入到表中。有没有办法可以避免预取序列?

Oracle数据库11.2.0.4 ojdbc6.jar

某些堆栈溢出帖子表明Oracle 12c不支持语句中的“#getGeneratedKeys()”方法。

1 个答案:

答案 0 :(得分:0)

您可以使用表上的触发器从数据库内部填充主键列,从而无需往返获取键然后插入它们。

例如,如果您的表名为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语句中使用RETURNING INTO子句来执行insert并在单个语句中将键返回到应用程序层

http://docs.oracle.com/cd/B19306_01/appdev.102/b14261/returninginto_clause.htm

如果你想避免触发,你可以在insert语句中使用sequence.nextval,例如

INSERT INTO MYTABLE (my_id, first_name, last name) value (MYSEQUENCE.nextval, ?, ?) RETURNING MY_ID into ?