自己編寫預存程序對Oracle中的序列進行重設

來源:互聯網
上載者:User

     SQL Server和Oracle資料庫在設定表的主鍵的時候有一個很重要的區別,SQL Server可以通過內建的自增資料類型設定一個表的主鍵,而Oracle則必須藉助於資料庫中的序列實現自增的資料類型,這兩種方式有以下幾種區別:

SQL Server

Oracle

自增列隸屬於它所在的表對象。

序列和欄位分別為不同的資料庫物件,它們之間沒有直接的聯絡。

自增列由DB自動管理,無需手動指定值。

通過[序列名稱].nextval命令將序列的當前值遞增。

每個表只能允許設定一個自增列。

同一個序列可以被多個表使用,但同一時刻序列的當前值只能被應用到一個表中。

     同時 ,它們之間有一個共同的特點,那就是值只能向下遞增,不能向上遞減。不過,由於Oracle中的序列是獨立於表欄位而存在的資料庫物件,所以,我們可以單獨對它進行設定,如將它的當前值遞減,或將值設定為初始狀態。值得說明的是,在我們重設序列的值之前,需要確定該序列是否正在被資料庫中的其它對象使用,否則會導致正在使用該序列的資料庫物件的值混亂。

     下面是用於重設Oracle序列的預存程序的代碼: 

seq_Reset
 1Create or Replace Procedure seq_Reset(v_seqname vatchar2) As n number(10);
 2tsql varchar2(100);
 3Begin
 4  tsql := 'Select ' || v_sqlname || '.nextval From dual';
 5  Execute Immediate tsql into n;
 6
 7  --如果序列本身是初始狀態則不進行數值計算
 8  if n <> 1 then
 9    n := -(n-1);
10  end if;
11
12  tsql := 'Alter Sequence ' || v_seqname || ' Increment By ' || n;
13  Execute Immediate tsql;
14  tsql := 'Select ' || v_seqname || '.nextval From dual';
15  Execute Immediate tsql into n;
16  tsql := 'Alter Sequence ' || v_seqname || ' Increment By 1';
17  Execute Immediate tsql;
18End seq_Reset;
19    
20

      例如你有一個名稱為seq_Instance的序列,你可以直接調用該預存程序對這個序列進行重設:

Call seq_Reset('seq_Instance')

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.