Inc*_*ito 6 sql oracle oracle10g
最近,我遇到了一个与在merge语句中递增序列值相关的问题.
MERGE INSERT子句正在访问一个序列以填充其中一列.我注意到,无论实际有多少行符合插入条件,序列最终会增加源SELECT子句中的记录总数.
为什么会这样?
我正在研究Oracle 10gR2
谢谢,
我找到了答案。根据 Oracle 文档,每个合并记录的序列将递增,实际插入多少记录并不重要。
http://download.oracle.com/docs/cd/B19306_01/server.102/b14200/pseudocolumns002.htm#sthref809
小智 6
您可以通过使用函数来增加这样的值来解决这个问题
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;
Run Code Online (Sandbox Code Playgroud)
只有在真正使用合并语句的“插入”分支时才调用逻辑函数。
进一步参考这个 http://alex-td.blogspot.in/2012/07/sequences-nextval-in-merge-operator.html