dfa*_*dfa 10
使用getGeneratedKeys():
resultSet = pstmt.getGeneratedKeys();
if (resultSet != null && resultSet.next()) {
lastId = resultSet.getInt(1);
}
Run Code Online (Sandbox Code Playgroud)
您可以使用该RETURNING子句获取已更新或插入的任何列的值.它适用于触发器(即:您获得在执行触发器后实际插入的值).考虑:
SQL> CREATE TABLE a (ID NUMBER PRIMARY KEY);
Table created
SQL> CREATE SEQUENCE a_seq;
Sequence created
SQL> VARIABLE x NUMBER;
SQL> BEGIN
2 INSERT INTO a VALUES (a_seq.nextval) RETURNING ID INTO :x;
3 END;
4 /
PL/SQL procedure successfully completed
x
---------
1
SQL> /
PL/SQL procedure successfully completed
x
---------
2
Run Code Online (Sandbox Code Playgroud)
自动生成的 ID 的值直到执行 INSERT 后才知道,因为其他语句可能同时执行,并且 RDBMS 需要决定如何安排哪个语句先执行。
您在 INSERT 语句中的表达式中调用的任何函数都必须在插入新行之前进行计算,因此它无法知道生成了什么 ID 值。
我可以想到两个接近您所要求的选项:
编写一个在 INSERT 之后运行的触发器,以便您可以访问生成的 ID 键值。
编写一个过程来包装插入,以便您可以执行过程中的其他代码并查询最后生成的 ID。
但是,我怀疑您真正要问的是,即使其他会话也在插入行并生成自己的 ID 值,您是否可以查询当前会话最后生成的 ID 值。您可以放心,每个提供自动增量功能的 RDBMS 都提供了一种查询该值的方法,并且它会告诉您当前会话范围内生成的最后一个 ID。这不受其他会话中完成的插入的影响。
| 归档时间: |
|
| 查看次数: |
10027 次 |
| 最近记录: |