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 自增序列
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 自增序列
先检查seq_auto_post_voucher的缓存大小Cache Size.如果不是1 就设置为1。
如果大于1,每次访问的时候就会生成多个序列,这些序列如果没有用完,你在第二次插入的时候就不连续了
181和182是连续的,感觉还有可能出现异常,回滚了,sequence回滚不了
181和182是连续的,感觉还有可能出现异常,回滚了,sequence回滚不了
181和182 这里是直接select出来的
select SEQ_AUTO_POST_VOUCHER.Nextval from dual
直接这样查询是自增1的,通过存储过程自增的就为20了
存储刚开始阶段代码:
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;
minvalue 1
maxvalue 9999999999999999999999999999
start with 1
increment by 1
cache 20;你都保证不了是一个会话当然会跳,否则会重号。