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) */ 有关?

解决方案 »

  1.   

     select DP.Seq_Issue_Policy_Veh.nextval FROM dual;
     select DP.Seq_Issue_Policy_Veh.nextval FROM dual;你只需要执行以上两句就可以看出来了,不是sequence 错了,是你用错了
      

  2.   

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

  3.   


    这还有什么可解释的,脑袋里有虫。
    验证数据你就老老实实查询最新插入的数据,还自己写个SQL,
    自己写个SQL也没事,还写个错的SQL,从这个SQL你能查出来什么?
      

  4.   

    是的 SQL写错了 
    select 
      * 
    from dp.issue_policy_nonveh_t 
    where mod(serialno,2) = 0 
    ; 这样的话是0记录  但是 如果mod(serialno,2) = 1 的话  是全纪录 
      

  5.   

    序列本身不保证任何的连续性,它就是个生成自增整数的工具。要想验证步长很简单,
    select DP.Seq_Issue_Policy_Veh.nextval seqno FROM dual;
    连续运行两次,看看两次之间差几。
      

  6.   

    RAC服务器,进程都可能影响到SEQ
    因为有Cache参数的存在,故SEQ完全可能出现不连续的现象
    如果需要连续的数值,应将cache设置为0,但是这样效率很低