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
用于获取序列的当前值,不会递增序列。在使用这两个函数时,请确保正确地处理序列值以避免数据完整性问题。