nextval
和 currval
是 Oracle 数据库中用于处理序列(sequence)的两个函数。
nextval
: 当你调用 nextval
函数时,它会返回序列的下一个值,并为该序列递增 1。这意味着每次调用 nextval
时,都会生成一个新的、递增后的序列值。通常,nextval
用于为表中的新记录分配唯一的 ID。示例:
INSERT INTO employees (employee_id, name)
VALUES (emp_seq.nextval, 'John Doe');
currval
: 当你调用 currval
函数时,它会返回序列的当前值,而不会递增序列。这意味着如果在调用 nextval
之前调用 currval
,它将返回序列的上一个值。如果在给定会话中从未调用过 nextval
,则调用 currval
会引发错误。示例:
-- 假设 emp_seq.nextval 已经被调用过一次,且生成了值 100
SELECT emp_seq.currval FROM dual; -- 结果为 100
总结:nextval
用于获取序列的下一个值并递增序列,而 currval
用于获取序列的当前值,不会递增序列。在使用这两个函数时,请确保正确地处理序列值以避免数据完整性问题。