Oracle序列重置

2022-03-09 04:20:08 字數 1036 閱讀 3671

oracle 中的序列我們一般用來生成流水號,所以需要進行重置(如每天凌晨重置一次),我們雖然可以通過重新編譯的方式重置序列,可是這種方法會有弊端,比如導致與該序列相關的儲存過程或函式失效等等,需要重新編譯;於是就需要一種不編譯也可以重置序列的方法——

這種方式,不用刪除,利用步長引數,先查出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 or replace procedure seq_reset(v_seqname varchar2) as n number(10);

tsql varchar2(100);

begin

execute immediate 'select '||v_seqname||'.nextval from dual' into n; 1

n:=-(n-1);

tsql:='alter sequence '||v_seqname||' increment by '|| n; 2

execute immediate tsql;

execute immediate 'select '||v_seqname||'.nextval from dual' into n; 3

tsql:='alter sequence '||v_seqname||' increment by 1'; 4

execute immediate tsql;

end seq_reset;

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

ORACLE通過JOB每天重置序列

場景 某個業務表單裡有個合同編號,需求要求是合同類別 年月日 流水號,流水號需要每天重置,於是就用上了oracle裡的序列通過job每天進行重置。1.建立序列 create sequence create sequence fotc relocate projectcode seq minvalue...