原文 oracle 重置序列從指定數字開始的方法詳解
declare一般來講,序列在實際開發過程中是經常用到的一種物件,通過它來生成主鍵是非常方便的,但是有些時候我們需要將其重新置零,通常採用的方式就是刪除後重新建立。n number(10
);v_startnum
number(10):=
10000001;--
從多少開始
v_step number(10):=
1;--
步進tsql varchar2(200
);v_seqname
varchar2(200):=
'mip_jf_sequence
';--
序列名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;
sql>這樣可以通過隨時呼叫此過程,來達到序列重置的目的。create sequence seq_1 increment by
1 start with
1 maxvalue 999999999
;序列已建立。
sql>
create
orreplace
procedure seq_reset(v_seqname varchar2) as
2 n number(10
);3 tsql varchar2(100);4
begin
5execute immediate '
select
'||v_seqname||
'.nextval from dual
'into
n;6 n:=-(n-1);
7 tsql:=
'alter sequence
'||v_seqname||
'increment by '||
n;8execute
immediate tsql;
9execute immediate '
select
'||v_seqname||
'.nextval from dual
'into
n;10 tsql:=
'alter sequence
'||v_seqname||
'increment by 1';
11execute
immediate tsql;
12end
seq_reset;13/
過程已建立。
sql>
select seq_1.nextval from
dual;
nextval
---------
2sql
>
/nextval
---------
3sql
>
/nextval
---------
4sql
>
/nextval
---------
5sql
>
exec seq_reset('
seq_1');
pl/sql 過程已成功完成。
sql>
select seq_1.currval from
dual;
currval
---------
1sql
>
此儲存過程寫的比較倉促,還可以進一步完善,在此就不再進一步講述 。
oracle中一般將自增sequence重置為初始1時,都是刪除再重建,這種方式有很多弊端,依賴它的函式和儲存過程將失效,需要重新編譯。
不過還有種巧妙的方式,不用刪除,利用步長引數,先查出sequence的nextval,記住,把遞增改為負的這個值(反過來走),然後再改回來。
假設需要修改的序列名:seq_name
1、select seq_name.nextval from dual; //假設得到結果5656
2、alter sequence seq_name increment by -5655; //注意是-(n-1)
3、select seq_name.nextval from dual;//再查一遍,走一下,重置為1了
4、alter sequence seq_name increment by 1;//還原
可以寫個儲存過程,以下是完整的儲存過程,然後呼叫傳參即可:
create沒有整理與歸納的知識,一文不值!高度概括與梳理的知識,才是自己真正的知識與技能。 永遠不要讓自己的自由、好奇、充滿創造力的想法被現實的框架所束縛,讓創造力自由成長吧! 多花時間,關心他(她)人,正如別人所關心你的。理想的騰飛與實現,沒有別人的支援與幫助,是萬萬不能的。orreplace
procedure seq_reset(v_seqname varchar2) as n number(10
);tsql
varchar2(100
);begin
execute immediate '
select
'||v_seqname||
'.nextval from dual
'into
n;n:
=-(n-1);
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 1';
execute
immediate tsql;
end seq_reset;
ORACLE SEQUENCE重置從指定數字開始
1.首先從序列存放表中查出實體所對應的序列值 我的序列存放表在right庫中 select from sys sequence no where code like tmlinetel sys sequence no為序列表名,tmlinetel為實體名 查出後結果如下圖 2.取出序列的當前值 先執...
oracle 序列重置
問題一 如何重置oracle序列 oracle序列建立以後,如果想重置序列從 0 開始,逐漸遞增1,可以採用如下儲存過程 create or replace procedure reset seq p seq name in varchar2 isl val number begin execute...
oracle重置序列
檢視對應序列,一般seq開頭,模糊查詢表名 select from user sequences where sequence name like khroleaccess 此處查詢出來序列名為seq khroleaccess,下邊以此序列名為例,實際應用時改為自己序列名即可。select seq ...