最近,我遇到了一个与在merge语句中递增序列值相关的问题。
MERGE INSERT子句正在访问一个序列以填充其中一列。我注意到,无论实际有多少行符合插入条件,序列最终会增加源SELECT子句中的记录总数。
为什么会这样?
我正在研究Oracle 10gR2
谢谢,
答案 0 :(得分:2)
我找到了答案。根据Oracle文档,序列将针对每个合并记录递增,并且实际插入的记录数无关紧要。
http://download.oracle.com/docs/cd/B19306_01/server.102/b14200/pseudocolumns002.htm#sthref809
答案 1 :(得分:2)
你可以通过使用函数来增加像这样的值
来解决这个问题CREATE OR REPLACE
FUNCTION seq_nextval_on_demand (p_seq_name IN VARCHAR2)
RETURN NUMBER
IS
v_seq_val NUMBER;
BEGIN
EXECUTE IMMEDIATE 'select ' || p_seq_name || '.nextval from dual'
INTO v_seq_val;
RETURN v_seq_val;
END seq_nextval_on_demand;
只有在真正使用merge语句的“insert”分支时才调用逻辑函数。
进一步参考 http://alex-td.blogspot.in/2012/07/sequences-nextval-in-merge-operator.html