Chr☆s Kwok 的技术笔记

.NET, C#, WPF, WCF, WF, .NetCore & LINQ ... I know how it works because I know why it works ...

博客园 首页 新随笔 订阅 管理
  130 随笔 :: 0 文章 :: 30 评论 :: 30万 阅读

【ORACLE】调整序列的当前种子值

复制代码
--必须用SYS用户执行脚本;或具有SYSDBA角色登录;
CREATE OR replace
PROCEDURE      seq_reset_startnum(v_seqname varchar2, v_startnum number) AS n number(10); 
v_step number(10):=1;--步进 
tsql varchar2(200); 
BEGIN 
EXECUTE immediate 'select '||v_seqname||'.nextval from dual' INTO n; 
n:=v_startnum - n - v_step;--从10000001开始 
tsql:='alter sequence '||v_seqname||' increment by '|| n; 
EXECUTE immediate tsql; 
EXECUTE immediate 'select '||v_seqname||'.nextval from dual' INTO n; 
tsql:='alter sequence '||v_seqname||' increment by '||v_step; 
EXECUTE immediate tsql; 
END seq_reset_startnum; 

--必须用SYS用户执行脚本;或具有SYSDBA角色登录;
EXEC seq_reset_startnum('"CONCEPT"."DOCMETADATA_METADATAID_SEQ"', 1110000000);
复制代码

当前值与最大ID值相差不是太大的可以使用下面脚本:
(注意:如果相差过大,譬如相差1个亿,则执行脚本脚本会很耗时)

复制代码
--重置"CONFIG"."DOCFIELD"序列的当前值
DECLARE
 indexnum number;
 seqnumber number;
 tablenum number;
 indexintr number;
 BEGIN
   SELECT MAX(DOCFIELDID) INTO indexnum FROM "CONFIG"."DOCFIELD";
   SELECT  "CONFIG"."DOCFIELD_DOCFIELDID_SEQ".nextval INTO seqnumber FROM DUAL;
   indexintr := indexnum - seqnumber;
   IF indexintr > 0 THEN
     FOR ind IN 1..indexintr loop
          SELECT "CONFIG"."DOCFIELD_DOCFIELDID_SEQ".nextval INTO tablenum FROM DUAL;
     END loop ;
   END if;
end;
/
复制代码

 

posted on   Chr☆s  阅读(729)  评论(0编辑  收藏  举报
(评论功能已被禁用)
编辑推荐:
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· .NET Core 托管堆内存泄露/CPU异常的常见思路
· PostgreSQL 和 SQL Server 在统计信息维护中的关键差异
· C++代码改造为UTF-8编码问题的总结
阅读排行:
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· 清华大学推出第四讲使用 DeepSeek + DeepResearch 让科研像聊天一样简单!
· 实操Deepseek接入个人知识库
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库
点击右上角即可分享
微信分享提示