2011-06-17 28 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在我的特定示例中更有意义,但我想表明此参数存在(如果读者决定不遵循我的链接),因此它可用于任何必要的目的。 –