You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Oracle 12c中如何查询Identity列的当前值(currval)

在Oracle 12c里要获取Identity列的当前值,有几个实用的方法,我给你拆解清楚:

1. 用IDENTITY_CURRVAL函数(专门针对Identity列)

Oracle为Identity列提供了专属的IDENTITY_CURRVAL函数,但使用前你得先找到该列背后绑定的系统序列名——因为Oracle的Identity列本质是自动创建了一个序列来生成值。

先查序列名:

SELECT sequence_name
FROM user_tab_identity_cols
WHERE table_name = 'YOUR_TABLE_NAME' AND column_name = 'YOUR_IDENTITY_COLUMN';

⚠️ 注意:Oracle默认对象名是大写的,如果创建表/列时用了双引号区分大小写,这里也要对应写对大小写。

拿到序列名后,直接调用函数获取当前值:

SELECT identity_currval('YOUR_SEQUENCE_NAME') FROM dual;
2. 直接查询序列的CURRVAL

既然Identity列依赖序列,你也可以像操作普通序列一样,直接用序列的CURRVAL属性:

SELECT YOUR_SEQUENCE_NAME.currval FROM dual;

这个方法和上面的本质是一样的,只是调用形式不同,看你个人习惯。

3. 插入后立即返回(适合刚执行插入的场景)

如果你刚完成一条插入操作,还在当前会话里,用RETURNING子句可以直接拿到刚生成的Identity值,不用再查序列。

比如在PL/SQL块里:

DECLARE
  v_id NUMBER;
BEGIN
  INSERT INTO your_table(other_column) VALUES('test_data')
  RETURNING your_identity_col INTO v_id;
  DBMS_OUTPUT.PUT_LINE('刚生成的ID是: ' || v_id);
END;
/

如果是在SQL*Plus或者SQL Developer里,也可以用变量接收:

VAR new_id NUMBER;
INSERT INTO your_table(other_column) VALUES('test_data')
RETURNING your_identity_col INTO :new_id;
PRINT new_id;
重要注意事项
  • CURRVAL和IDENTITY_CURRVAL都只能在当前会话中使用,而且必须先执行过NEXTVAL(也就是至少插入过一条由系统生成Identity值的记录),否则会抛出"序列未在此会话中定义"的错误。
  • 如果你的Identity列是GENERATED BY DEFAULT类型(允许手动插入值),手动插入的数值不会触发序列的NEXTVAL,这时候CURRVAL还是会返回序列上次生成的值,不是你手动插入的那个数,这点要特别留意。

内容的提问来源于stack exchange,提问作者tester tester

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 03:56:21