web-dev-qa-db-ja.com

SQLエラー:ORA-02000:ID列ベースの表を作成するときにALWAYSキーワードがありません

テーブルに自動インクリメント列を作成しようとしていますが、これに見られるように post 2つの方法があり、Identity列を使用した2番目の実装はより洗練されたソリューションですが、実装しようとすると次のエラーが発生します:

    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 は、私が解決策を得た場所からの参照です。

問題は、古いバージョンのOracle11gを使用していたことです。

6
aurelius

おそらく、接続しようとしているOracleデータベース(server)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.
6
Lalit Kumar B