关于oracle sequence步长 为1 但实际上显示的步长是2 求解释

SEQ_ISSUE_POLICY_NONVEH 序列的写法

-- Create sequence

create sequence SEQ_ISSUE_POLICY_NONVEH

minvalue 1

maxvalue 9999999999999999999999999999

start with 3931941

increment by 1

cache 20

order;

触发器的写法

CREATE OR REPLACE TRIGGER "trg_issue_policy_nonveh_insert"

BEFORE INSERT ON "DP"."ISSUE_POLICY_NONVEH_T"

FOR EACH ROW

DECLARE

seqno NUMBER;

BEGIN

select DP.Seq_Issue_Policy_nonVeh.nextval into seqno FROM dual;

:NEW.serialno := seqno ;

END;

验证sql的写法

select

*

from dp.issue_policy_nonveh_t

where serialno /2 = 0

查询不到任何行,也就是说 所有的serialno都是奇数

实际上相对的 还有一组

查询出来的却是偶数

CREATE OR REPLACE TRIGGER "trg_issue_policy_veh_insert" BEFORE INSERT ON "DP"."ISSUE_POLICY_VEH_T" FOR EACH ROW

DECLARE

seqno NUMBER;

BEGIN

select DP.Seq_Issue_Policy_Veh.nextval into seqno FROM dual;

:NEW.serialno := seqno ;

END;

那么实际上这两张ISSUE_POLICY_VEH_T\ISSUE_POLICY_NONVEH_T是在一个存储过程里插入的  但是他们的触发器和序列 都是独立的  为什么会有这种步长为2的情况发生?难道和我在主表insert into xxx

select  select  /*+parrallel (a,4) (m,4) (pa,4) (pt,4) */ 有关?

------最佳解决方案--------------------

RAC服务器,进程都可能影响到SEQ

因为有Cache参数的存在,故SEQ完全可能出现不连续的现象

如果需要连续的数值,应将cache设置为0,但是这样效率很低

------其他解决方案--------------------

select DP.Seq_Issue_Policy_Veh.nextval FROM dual;

select DP.Seq_Issue_Policy_Veh.nextval FROM dual;

你只需要执行以上两句就可以看出来了,不是sequence 错了,是你用错了

------其他解决方案--------------------

引用:select DP.Seq_Issue_Policy_Veh.nextval FROM dual;

select DP.Seq_Issue_Policy_Veh.nextval FROM dual;

你只需要执行以上两句就可以看出来了,不是sequence 错了,是你用错了

关键我分别是两个序列啊 Seq_Issue_Policy_Veh和Seq_Issue_Policy_NONVeh

------其他解决方案--------------------

引用:验证sql的写法

select

*

from dp.issue_policy_nonveh_t

where serialno /2 = 0

查询不到任何行,也就是说 所有的serialno都是奇数

这还有什么可解释的,脑袋里有虫。

验证数据你就老老实实查询最新插入的数据,还自己写个SQL,

自己写个SQL也没事,还写个错的SQL,从这个SQL你能查出来什么?

------其他解决方案--------------------

引用:引用:验证sql的写法

select

*

from dp.issue_policy_nonveh_t

where serialno /2 = 0

查询不到任何行,也就是说 所有的serialno都是奇数

这还有什么可解释的,脑袋里有虫。

验证数据你就老老实实查询最新插入的数据,还自己写个SQL,

自己写……

是的 SQL写错了

select

*

from dp.issue_policy_nonveh_t

where mod(serialno,2) = 0

; 这样的话是0记录  但是 如果mod(serialno,2) = 1 的话  是全纪录

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐