MERGE INTO TEST T1
USING TEST1 T2
ON(T1.ID=T2.ID AND FLAG='1')
WHEN MATCHED THEN
SET DTIME=SYSDATE
WHEN NOT MATCHED THEN
INSERT
(ID,FALG,DTIME)
VALUES
(TEST_SEQ.NEXTVAL,SYSDATE);注:test_seq的定义为:create sequence test_seq start with 1,increment by 1 minvalue 1 maxvalue 999999 nocache;问题:不知道为什么,无论是否matched,test_sequence的序号都会增加,请高手分析一下原因,谢谢
USING TEST1 T2
ON(T1.ID=T2.ID AND FLAG='1')
WHEN MATCHED THEN
SET DTIME=SYSDATE
WHEN NOT MATCHED THEN
INSERT
(ID,FALG,DTIME)
VALUES
(TEST_SEQ.NEXTVAL,SYSDATE);注:test_seq的定义为:create sequence test_seq start with 1,increment by 1 minvalue 1 maxvalue 999999 nocache;问题:不知道为什么,无论是否matched,test_sequence的序号都会增加,请高手分析一下原因,谢谢
-- 你了解merge into 的真正目的吗?
-- 你是怎么插入的?是用的存储过程插入?还是直接用merge into 语句?
-- 也就是想问:你在插入的时候,是否接收到了报错信息呢?-- 假如:你的test表的主键是ID字段,当你执行一个merge into的语句的时候,正好不符合插入要求,
-- 但当你取test_seq.nextval插入test表中时,此时:test表中正好有一ID与test_seq.nextval相等,这个时候:插入还会成功吗?插入不成功,同时:test_seq.nextval是不是也就变了呢?
注:程序正确,无报错及警告信息。
对于通过merge语句合并的行,可以在insert语句或者update语句中,
或者两个语句中,引用一个序列的nextval;
对于每一行的update和insert,序列的nextval值都会自增,
即使序列的值没有被引用到。