sequence 设置每次自增 1 ,存储过程中使用
var$process_id := seq_auto_post_voucher.nextval;
再将 var$process_id 插入表中UUID字段(var$process_id变量后续没有操作),该字段每次却自增了 20
求高手帮忙分析一下问题可能出在哪里
创建sequence 脚本如下:
create sequence SEQ_AUTO_POST_VOUCHER
minvalue 1
maxvalue 9999999999999999999999999999
start with 1
increment by 1
cache 20;oracle sequence 自增序列

解决方案 »

  1.   

    贴一点相关的存储看看 1、可能是循环 2、可能是后序操作删除了..3、还有可能受Cache影响  
       先检查seq_auto_post_voucher的缓存大小Cache Size.如果不是1 就设置为1。
       如果大于1,每次访问的时候就会生成多个序列,这些序列如果没有用完,你在第二次插入的时候就不连续了
      

  2.   


    181和182是连续的,感觉还有可能出现异常,回滚了,sequence回滚不了
      

  3.   


    181和182是连续的,感觉还有可能出现异常,回滚了,sequence回滚不了
    181和182 这里是直接select出来的
    select SEQ_AUTO_POST_VOUCHER.Nextval from dual 
    直接这样查询是自增1的,通过存储过程自增的就为20了
      

  4.   


      存储刚开始阶段代码:
        BEGIN    LOCK TABLE cbs_inv_auto_post_voucher IN EXCLUSIVE MODE;
      
        -- 检查是否允许开始处理【避免重复触发】
        SELECT COUNT(1) INTO var$count
          FROM cbs_inv_auto_post_voucher v WHERE v.process_flg = 'PROCESS';
        -- 如果发现正有其他线程处理计划任务,则本次处理失败
        IF (var$count > 0) THEN
            po$flg := -1;
            po$msg := '尚有未处理完成的自动记账任务,禁止再次启动新的任务!';
            ROLLBACK;
            RETURN;
        END IF;
        
        -- 插入头表
        var$process_id := seq_auto_post_voucher.nextval;
        INSERT INTO cbs_inv_auto_post_voucher(
            auto_post_uuid,                process_flg,    
            start_time,                    end_time,
            success_cnt,                   failed_cnt
        ) VALUES (
            var$process_id,                'PROCESS',
            SYSDATE,                       NULL,
            0,                             0
        );
        COMMIT;
      

  5.   

    第9和第10行就是增1了,是不是另外有job也在引用这个序列
      

  6.   

    create sequence SEQ_AUTO_POST_VOUCHER
    minvalue 1
    maxvalue 9999999999999999999999999999
    start with 1
    increment by 1
    cache 20;你都保证不了是一个会话当然会跳,否则会重号。