簡體   English   中英

SQL 錯誤:ORA-02000:創建基於標識列的表時缺少 ALWAYS 關鍵字

[英]SQL Error: ORA-02000: missing ALWAYS keyword when create identity column based table

我嘗試在表上創建一個自動遞增列,正如我在這篇文章中看到的,有兩種方法,使用 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)
);

可以看出,我嘗試自動遞增的列是表的主鍵。

是我得到解決方案的參考。

問題是我使用了舊版本的 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.

我遇到了同樣的錯誤,但是當我嘗試在編輯器中作為腳本運行時,它起作用了。 我后來粘貼在 .sql 文件中以運行腳本@<path>\\<filename>

代碼:

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

這對我有用。 我使用的是 Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64 位生產 PL/SQL Release 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)
  );

開始於:是從你想要開始你的計數器的地方(我用了 101) maxvalue 是直到它應該增加的值 minvalue 是由 nocycle 增加的 cashe 是你想在 ram 中保留多少數字

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM