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
用于獲取序列的當前值,不會遞增序列。在使用這兩個函數時,請確保正確地處理序列值以避免數據完整性問題。