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

【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;
/

 

转载于:https://www.cnblogs.com/chriskwok/p/9959076.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值