【问题标题】:SQL Error: ORA-02000: missing ALWAYS keyword when create identity column based tableSQL 错误:ORA-02000:创建基于标识列的表时缺少 ALWAYS 关键字
【发布时间】:2015-05-02 14:31:49
【问题描述】:

我尝试在表上创建一个自动递增的列,正如我在post 中看到的那样,有两种方法,第二个使用 Identity 列的实现是一个更优雅的解决方案,但是当我尝试实现它时,我得到了以下错误:

    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。

【问题讨论】:

  • GENERATED BY DEFAULT 声明无效。在这里查看更多信息oracle-base.com/articles/11g/virtual-columns-11gr1.php。它存在于 oracle 12c,请指定您的数据库版本??
  • 你的预言机版本??
  • oracle版本是12c
  • 您确定服务器是 12c,而不仅仅是您的客户端?看起来很像您的服务器是 11g。 select * from product_component_versionselect * from v$version 报告什么?

标签: java oracle oracle12c


【解决方案1】:

也许您尝试连接的 Oracle 数据库 (服务器)12c,但是您正在使用的客户端 (本地安装)不支持该功能。请检查您的 Oracle 客户端版本,它可能是 11g 或更低,不支持它。您需要下载更高版本的客户端。

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.

【讨论】:

  • Oracle 11 给出错误:cx_Oracle.DatabaseError: ORA-02000: missing ALWAYS 关键字
  • 可能您使用的是不支持它的 11g 客户端版本。您需要下载更高版本的客户端。
【解决方案2】:

我遇到了同样的错误,但是当我尝试在编辑器中作为脚本运行时,它起作用了。我后来粘贴在.sql文件中以@<path>\<filename>运行脚本

代码:

CREATE TABLE TESTING(
  ID NUMBER GENERATED BY DEFAULT ON NULL AS IDENTITY,
  NAME VARCHAR2(20)
  );

这对我有用。我在用 Oracle Database 12c 企业版 12.2.0.1.0 - 64 位生产 PL/SQL 版本 12.2.0.1.0

你也可以试试:

CREATE TABLE TESTING(
  ID NUMBER GENERATED BY DEFAULT ON NULL AS IDENTITY(START WITH 101 MAXVALUE 9999999 
       MINVALUE 1 NOCYCLE CACHE 20) NOT NULL, 
  NAME VARCHAR2(20)
  );

start with : 是你想从哪里开始你的计数器(我用 101) maxvalue 是直到它应该增加什么值 minvalue 递增 nocycle Cashe 是你想在 ram 中保留多少个数字

【讨论】:

    猜你喜欢
    • 2018-06-23
    • 1970-01-01
    • 2021-07-20
    • 1970-01-01
    • 2016-07-25
    • 1970-01-01
    • 1970-01-01
    • 2018-07-24
    • 2016-03-12
    相关资源
    最近更新 更多