【发布时间】:2011-06-24 13:08:33
【问题描述】:
我是使用 Oracle 的新手,所以我将放弃之前在 this SO question 中已经回答的内容。我似乎无法让它工作。这是我正在使用的语句:
declare
lastId number;
begin
INSERT INTO "DB_OWNER"."FOO"
(ID, DEPARTMENT, BUSINESS)
VALUES (FOO_ID_SEQ.NEXTVAL, 'Database Management', 'Oracle')
RETURNING ID INTO lastId;
end;
当我调用 executeQuery 我所做的 PreparedStatement 时,它会将所有内容都插入数据库中。但是,我似乎无法弄清楚如何检索 ID。返回的 ResultSet 对象对我不起作用。调用
if(resultSet.next()) ...
产生一个讨厌的 SQLException,内容如下:
无法对 PLSQL 语句执行提取:下一个
我如何获得lastId?显然我做错了。
【问题讨论】:
-
您可以随时查询
SELECT FOO_ID_SEQ.CURRVAL FROM DUAL。 -
发布函数或存储过程 -- 需要知道是否将
lastid设置为INOUT参数。 -
如果我必须执行另一个查询,我不能保证它是我刚刚插入的元素的 id。那里可能还有另一个查询。
-
CURRVAL是会话安全的,但RETURNING子句允许您在一个语句中做两件事。 -
@OMGPonies 崭露头角的 Oracle 开发人员可以体验到的最大“灯泡”时刻之一 ;)
标签: java oracle jdbc oracle11g