oracle sequence 不连续、相差太大问题

逐兔郎 2014-06-27 01:10:06
我用 sequence 生成主键,cache 值设为20 。发现了一个异常,那就是生成的主键不连续,比如说上个数字是4551552,下个就成了4552838 ,差别实在是太大了。我的代码里调用该 sequence.nextval 只有一处啊,没有其他地方调用 nextval 。
这期间数据库没挂掉过、也没宕机过。
这应该不是正常的跳号的现象吧,毕竟相差太大了啊?请问各位,这有可能是什么原因呢?
拜谢。。。
...全文
842 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
逐兔郎 2014-06-30
  • 打赏
  • 举报
回复
注: 上面的写的是在 ibatis 配置文件中。
逐兔郎 2014-06-30
  • 打赏
  • 举报
回复
引用 3 楼 wmxcn2000 的回复:
[quote=引用 2 楼 zhutulang 的回复:] [quote=引用 1 楼 wmxcn2000 的回复:] 看看你的步长,设置的是多少 ?


select  sequence_name, increment_by from user_sequences 

-- 看看 
是1 啊 会不会是 merge into 语句引起的啊?[/quote] 你提到了 Merge into ,那就有可能是这个问题。 比如你

select myseq.nextval from user_objects 这样一下子就会用 count(*) 这么多个。

-- 4551552,下个就成了4552838 
-- 这样解决就是通的。
[/quote] 结贴喽,可以确定是merge into 语句的问题了,如下这么写是有问题的: <insert id="updateOrInsertTableName" parameterClass="HashMap"> <![CDATA[ merge into tablename using (select count(*) count from tablename where condition1) numcount on (numcount.count <> 0) when matched then UPDATE SET A=A+1 WHERE condition2 when not matched then INSERT (ID,A,B,C,D) VALUES(tablename_SEQUENCE.NEXTVAL, #a#, #b#, #c#, #d# ) ]]> </insert> 正确的写法是这样: <insert id="updateOrInsertTableName" parameterClass="HashMap"> <selectKey resultClass="java.lang.Long" keyProperty="tableid"> <![CDATA[select tablename_SEQUENCE.NEXTVAL as tableid from dual]]> </selectKey> <![CDATA[ merge into tablename using (select count(*) count from tablename where condition1) numcount on (numcount.count <> 0) when matched then UPDATE SET A=A+1 WHERE condition2 when not matched then INSERT (ID,A,B,C,D) VALUES(tablename_SEQUENCE.NEXTVAL, #a#, #b#, #c#, #d# ) ]]> </insert> 虽然还不是很清楚,为什么第一种写法会造成那样的现象。。。
卖水果的net 2014-06-27
  • 打赏
  • 举报
回复
引用 2 楼 zhutulang 的回复:
[quote=引用 1 楼 wmxcn2000 的回复:] 看看你的步长,设置的是多少 ?


select  sequence_name, increment_by from user_sequences 

-- 看看 
是1 啊 会不会是 merge into 语句引起的啊?[/quote] 你提到了 Merge into ,那就有可能是这个问题。 比如你

select myseq.nextval from user_objects 这样一下子就会用 count(*) 这么多个。

-- 4551552,下个就成了4552838 
-- 这样解决就是通的。
逐兔郎 2014-06-27
  • 打赏
  • 举报
回复
引用 1 楼 wmxcn2000 的回复:
看看你的步长,设置的是多少 ?


select  sequence_name, increment_by from user_sequences 

-- 看看 
是1 啊 会不会是 merge into 语句引起的啊?
卖水果的net 2014-06-27
  • 打赏
  • 举报
回复
看看你的步长,设置的是多少 ?


select  sequence_name, increment_by from user_sequences 

-- 看看 
AcHerat 2014-06-27
  • 打赏
  • 举报
回复
only a single sequence number can be generated for each row. In other words, if NEXTVAL is referenced more than once in a single statement, then the first reference generates the next number, and all subsequent references in the statement return the same number. 一些文档里的解释。
AcHerat 2014-06-27
  • 打赏
  • 举报
回复
要连续的话,不建议用这个,这个序列只要有用到都会自动去改变值,而且借用到的都是同样的值,你可以试试

create sequence t1;
create sequence t2;

select t1.nextval,t2.nextval from dual;
select t2.nextval from dual;
select t1.nextval from dual;

select t1.nextval,t2.nextval from dual;
select t1.nextval from dual;
select t2.nextval from dual;
看看就了解了。
  • 打赏
  • 举报
回复
1、 sequence.nextval 的使用 2、手动修改sequence的当前值
内容概要:本文聚焦于高维多阶段随机规划问题,深入研究了正则化分解方法与马尔可夫过程在刻画不确定性动态演化中的应用,并提供了完整的Python代码实现。通过引入正则化技术有效降低了高维随机优化问题的计算复杂度,结合马尔可夫链建模多阶段决策过程中的不确定性传播机制,提升了模型在复杂动态环境下的求解效率与鲁棒性。研究涵盖了问题建模、算法设计、数值求解及结果分析全过程,具有较强的理论深度与工程实践价值; 适合人群:具备一定运筹学、优化理论基础及Python编程能力,从事智能决策、人工智能、能源系统优化、金融工程等相关领域的科研人员、高校研究生以及工业界研发工程师; 使用场景及目标:①应用于电力系统调度、供应链管理、金融资产配置等存在多阶段不确定性的复杂决策场景;②掌握高维随机规划的建模思路与高效求解技术,深入理解正则化方法与马尔可夫过程在实际优化算法中的融合机制与实现路径; 阅读建议:建议结合提供的Python代码进行动手实践,重点关注算法实现细节、参数敏感性分析与收敛性验证,鼓励在不同应用场景中迁移和改进该方法,进一步探索其在分布鲁棒优化、动态规划等前沿方向的扩展潜力。
内容概要:本文系统研究了离散时间线性系统中基于共识的分布式滤波器的稳定性与最优性问题,深入探讨了KF(卡尔曼滤波)、DKF(分布式卡尔曼滤波)、SMDKF(基于平方根的最大熵分布式卡尔曼滤波)、CI(协方差交叉)、ICF(信息共识滤波)和HCMCI(基于高阶交叉协方差的信息融合)等多种滤波算法的理论基础、数学推导与实现机制。通过Matlab平台构建多传感器网络仿真环境,实现了各类算法在不同噪声统计特性和通信拓扑结构下的状态估计仿真,重点分析了各算法在估计精度、收敛速度、鲁棒性及一致性方面的性能差异,并对融合策略中的协方差传播、信息权重分配与共识迭代过程进行了细致对比,旨在为复杂环境下多智能体系统的分布式状态估计提供可复现的技术方案与理论支撑。; 适合人群:具备控制理论、信号处理、线性系统理论及Matlab编程基础的研究生、科研人员,以及从事多传感器融合、分布式估计算法开发、无人系统导航与智能电网监控等领域的工程技术人员。; 使用场景及目标:① 掌握主流分布式滤波算法的核心思想与数学建模方法;② 在多节点传感网络中实现高效可靠的状态估计;③ 对比分析不同共识融合策略在非理想通信条件下的性能表现;④ 支持学术论文复现、算法改进与工程化验证,服务于科研创新与系统优化设计。; 阅读建议:建议结合Matlab代码逐模块解析算法实现流程,重点关注状态预测、局部更新、信息融合与一致性达成的关键步骤;可通过调整系统噪声、观测噪声、网络连接拓扑等参数开展扩展性仿真实验,深入理解算法的稳定边界与最优性条件,进一步探索其在实际应用场景中的适应性与改进空间。

17,134

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧