2011-06-17 30 views
0

我很驚訝地發現oracle沒有「自動編號」數據類型。有沒有辦法使用自動編號數據類型,因爲我們在MS訪問中有這種數據類型?oracle是否有「自動編號」數據類型

+0

大多數更大的RDBMS不具備被稱爲 「自動編號」 的數據類型。主要是因爲一個自動編號通常是一個整數。在SQL Server中,您可以執行其他操作來自動修改數字,而不是將其數據類型設置爲神奇的「自動編號」。 –

+0

序列比自動編號更靈活/功能強大/可伸縮 –

+0

序列謝謝現在ANSI。 SQL Server「Denali」最終將支持Oracle,PostgreSQL和DB2。 –

回答

6

This blog post描述了該功能的選項。

關鍵要素在下面引用,但帖子進入更深入。

create sequence test_seq 
start with 1 
increment by 1 
nomaxvalue; 

其次

insert into test values(test_seq.nextval, 'voila!'); 

OR

create trigger test_trigger 
before insert on test 
for each row 
begin 
select test_seq.nextval into :new.id from dual; 
end; 
+0

您提供的鏈接未打開。 – Adnan

+0

鏈接爲我打開並討論序列(通過觸發器等實現) – Harrison

+0

它也適用於我;更新包含引號的答案。 –

3

我n你使用一個序列的oracle。您可以擁有任意數量的序列,並使用它們中的任何一個將唯一編號分配給任何表中的任何字段,或者只需調用一個將一個編號分配給變量。

SQL> CREATE SEQUENCE demo_seq INCREMENT BY 1 MAXVALUE 999999999999999999999999999 MINVALUE 0 NOCACHE; 

Sequence created. 

SQL> select demo_seq.nextval from dual; 
    NEXTVAL                  
----------                  
     0 

SQL> select demo_seq.nextval from dual; 

    NEXTVAL                  
----------                  
     1 

SQL> select demo_seq.nextval from dual; 
    NEXTVAL                  
----------                  
     2 

SQL> select demo_seq.currval from dual; 
    CURRVAL                  
----------                  
     2 

參考文獻:

http://www.techonthenet.com/oracle/sequences.php

http://download.oracle.com/docs/cd/B19306_01/server.102/b14200/statements_6015.htm

+0

爲什麼不是nomaxvalue? –

+1

NOMAXVALUE在我的特定示例中更有意義,但我想表明此參數存在(如果讀者決定不遵循我的鏈接),因此它可用於任何必要的目的。 –