SQL Error: ORA-02000: missing ALWAYS keyword when create identity column based table
SQL Error: ORA-02000: missing ALWAYS keyword when create identity column based table
我尝试在 table 上创建一个自动递增的列,正如我在这个 post 中看到的那样,有两种方法,第二种使用标识列的实现是一种更优雅的解决方案,但是当我尝试实现它时,出现以下错误:
Error at Command Line : 3 Column : 31
Error report -
SQL Error: ORA-02000: missing ALWAYS keyword
02000. 00000 - "missing %s keyword"
实际 table 脚本实现:
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)
);
可以看出我尝试自增的列是table的主键。
This 是我得到解决方案的参考。
问题是我使用了旧版本的 Oracle,11g。
您尝试连接的 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.
我遇到了同样的错误,但是当我在编辑器中尝试 运行ning 作为脚本时,它成功了。我后来将 .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
中保留多少数字
我尝试在 table 上创建一个自动递增的列,正如我在这个 post 中看到的那样,有两种方法,第二种使用标识列的实现是一种更优雅的解决方案,但是当我尝试实现它时,出现以下错误:
Error at Command Line : 3 Column : 31
Error report -
SQL Error: ORA-02000: missing ALWAYS keyword
02000. 00000 - "missing %s keyword"
实际 table 脚本实现:
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)
);
可以看出我尝试自增的列是table的主键。
This 是我得到解决方案的参考。
问题是我使用了旧版本的 Oracle,11g。
您尝试连接的 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.
我遇到了同样的错误,但是当我在编辑器中尝试 运行ning 作为脚本时,它成功了。我后来将 .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
中保留多少数字