2015-03-02 1410 views
1

我试着在表上创建一个自动递增列,因为我在这个post看到有2种方式,第二种实现与标识列关键字一个更优雅的解决方案,但是当我试图实现它,我得到以下错误:SQL错误:ORA-02000:始终缺少在创建标识列基于表

Error at Command Line : 3 Column : 31 
    Error report - 
    SQL Error: ORA-02000: missing ALWAYS keyword 
    02000. 00000 - "missing %s keyword" 

实际的表脚本执行:

CREATE TABLE "PLATFORM"."AUTH_PERMISSION" 
(
    ID NUMBER(19,0) GENERATED BY DEFAULT ON NULL AS IDENTITY, 
    -- ID NUMBER(19,0) PRIMARY KEY NOT NULL, 
    NAME VARCHAR2(50) UNIQUE NOT NULL, 
    ACTION_ID NUMBER(19,0) NOT NULL, 
    RESOURCE_ID NUMBER(19,0) NOT NULL, 
    ENVIRONMENT_ID NUMBER(19,0) NOT NULL, 
    CONSTRAINT "ACTION_ID" FOREIGN KEY ("ACTION_ID") 
     REFERENCES "AUTH_ACTION" ("ID") ENABLE, 
    CONSTRAINT "ENVIRONMENT_ID" FOREIGN KEY ("ENVIRONMENT_ID") 
     REFERENCES "AUTH_ENVIRONMENT" ("ID") ENABLE, 
    CONSTRAINT "RESOURCE_ID" FOREIGN KEY ("RESOURCE_ID") 
     REFERENCES "AUTH_RESOURCE" ("ID") ENABLE, 
    UNIQUE (ACTION_ID, ENVIRONMENT_ID, RESOURCE_ID) 
); 

可以蜜蜂看出,我尝试列自动 - 增量是表格的主键。

This是我从哪里得到解决方案的参考。

问题是我使用的是旧版本的Oracle 11g。

+0

'GENERATED BY DEFAULT'陈述是无效的。在这里查看更多信息http://oracle-base.com/articles/11g/virtual-columns-11gr1.php。它存在于oracle 12c中,指定你的数据库版本?你的oracle版本为 – Exhausted 2015-03-02 09:38:00

+1

? – Prashant 2015-03-02 09:43:06

+0

oracle版本是12c – aurelius 2015-03-02 09:44:55

回答

3

完全适用于我在版本12.1.0.1

SQL> select banner from v$version where rownum = 1; 

BANNER 
-------------------------------------------------------------------------------- 
Oracle Database 12c Enterprise Edition Release 12.1.0.1.0 - 64bit Production 

SQL> CREATE TABLE AUTH_PERMISSION 
    2 (
    3  ID NUMBER(19,0) GENERATED BY DEFAULT ON NULL AS IDENTITY, 
    4  -- ID NUMBER(19,0) PRIMARY KEY NOT NULL, 
    5  NAME VARCHAR2(50) UNIQUE NOT NULL, 
    6  ACTION_ID NUMBER(19,0) NOT NULL, 
    7  RESOURCE_ID NUMBER(19,0) NOT NULL, 
    8  ENVIRONMENT_ID NUMBER(19,0) NOT NULL 
    9 ); 

Table created. 

SQL> 
+0

你是对的,谢谢:) – aurelius 2015-07-31 12:42:51

+0

@aurelius不客气! – 2015-07-31 13:17:04