Oracle重置序列


oracle序列創建以后,如果想重置序列從 0 開始,逐漸遞增1,可以采用如下存儲過程:

 1 create or replace
 2 procedure reset_seq( p_seq_name in varchar2 )
 3 is
 4     l_val number;
 5 begin
 6     execute immediate
 7     'select ' || p_seq_name || '.nextval from dual' INTO l_val;
 8 
 9     execute immediate
10     'alter sequence ' || p_seq_name || ' increment by -' || l_val || 
11                                                           ' minvalue 0';
12 
13     execute immediate
14     'select ' || p_seq_name || '.nextval from dual' INTO l_val;
15 
16     execute immediate
17     'alter sequence ' || p_seq_name || ' increment by 1 minvalue 0';
18 end;

存儲過程創建以后,調用該存儲過程,參數是要重置的序列名稱:

call reset_seq(‘test_seq’);

使用下面的SQL語句查詢需要重置的序列:

 1 SELECT  a.sequence_name 序列名稱,
 2 a.min_value 序列最小值,
 3 to_char(to_number( a.max_value)) 序列最大值,
 4 a.last_number 序列當前值,
 5 CASE  a.last_number WHEN 1 THEN '--不需要重置;' ELSE 
 6 'CALL seq_reset(''' || a.sequence_name || ''');' END 重置序列腳本,
 7 'DROP SEQUENCE ' || a.sequence_name 刪除序列腳本,
 8 'RENAME ' || a.sequence_name || ' TO {newname}'  重命名腳本
 9 FROM USER_SEQUENCES a WHERE a.last_number<>1
10 ORDER BY a.sequence_name ASC;

重置序列腳本這列查詢出來的值就是調用存儲過程重置序列的SQL語句,直接執行SQL將重置序列。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM