我正在使用一个带有插入触发器的oracle表,该触发器从序列中获取下一个值并将其用作主键ID。
我无法更改数据库,因此我想知道是否有办法从新插入的行中检索分配的ID。
如果只有一个用户,则选择max(id)将起作用,但事实并非如此。
有办法做到这一点吗?
版本:
NLSRTL 11.2.0.3.0 Production
Oracle Database 11g Enterprise Edition 11.2.0.3.0 64bit Production
PL/SQL 11.2.0.3.0 Production
TNS for Linux: 11.2.0.3.0 Production
答案 0 :(得分:2)
一些选择: 如果有一个自然键与您生成的ID一起使用(您插入了包含唯一键的列),那么选择具有这些键值的行将起作用。
您可以在insert语句上使用RETURNING子句来返回ID列值,但是并非所有中间件连接都支持此值。
如果触发器检查您是否已在insert上设置了id字段,并且仅在为该列传入null时仅提取sequence.nextvalue,那么请自行获取ID序列并将该值包含在您的插入声明。
如果表格设置了审核列(created_user / created_Date类似的东西),那么您始终可以选择最后插入的行。
答案 1 :(得分:2)
您可以使用sequence pseudocolumn CURRVAL
获取序列的当前值:
SELECT sequence_name.CURRVAL
FROM DUAL;