2016-02-03 51 views
0

我想知道是否有一种方法可以创建一个表格列,其中的主键可以在不使用序列的情况下自动递增。Oracle DB - 没有序列的主键自动增量列

我看到它在MySQL上使用微软SQL Server和AUTO_INCREMENT上的IDENTITY工作,但无法获得可与Oracle DB一起工作的东西。

这是我目前的做法:

CREATE TABLE test 
( id NUMBER(6) IDENTITY, 
    CONSTRAINT pk_id PRIMARY KEY (id) 
) 
+0

数据库版本?标识列是在Oracle 12c中引入的。 Pre-12c,你将不得不使用一个序列。 –

+0

哦,那么这可能是问题,我使用Express版本11g。我会如何描述12c?感谢您的快速响应:) –

+0

非常接近...虽然语法有点不同。蒂姆·霍尔在这里的身份专栏有一篇很好的文章:https://oracle-base.com/articles/12c/identity-columns-in-oracle-12cr1。无论如何,你的选择是要么使用序列,要么升级到12C(我不认为12c可用于快速版)。蒂姆·霍尔在12节前的这篇文章中写下了很好的auto_increment:https://oracle-base.com/articles/misc/autonumber-and-identity –

回答

0

在Oracle身份列将满足您的要求,但他们在Oracle数据库12c中进行了介绍。

由于您使用的是Oracle数据库11g,因此最好的方法是使用序列+触发器方法。蒂姆·霍尔有这个here的一个很好的写了起来:

摘录:

用合适的主键列,并 支持它的序列创建一个表。

CREATE TABLE departments (
    ID   NUMBER(10) NOT NULL, 
    DESCRIPTION VARCHAR2(50) NOT NULL); 

ALTER TABLE departments ADD (
    CONSTRAINT dept_pk PRIMARY KEY (ID)); 

CREATE SEQUENCE dept_seq; 

创建触发器,如果​​它不是在 插入指定的填充ID列。

CREATE OR REPLACE TRIGGER dept_bir 
BEFORE INSERT ON departments 
FOR EACH ROW 
WHEN (new.id IS NULL) 
BEGIN 
    SELECT dept_seq.NEXTVAL 
    INTO :new.id 
    FROM dual; 
END;