我有一个生成表的主键的序列。使用jdbc,我试图批量插入到表中。有没有办法可以避免预取序列?
Oracle数据库11.2.0.4 ojdbc6.jar
某些堆栈溢出帖子表明Oracle 12c不支持语句中的“#getGeneratedKeys()”方法。
答案 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 ?