oracle 重置序列從指定數字開始的方法詳解

2021-09-22 06:51:24 字數 3558 閱讀 8822

原文 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 ...