0

oracle でテーブルを作成しようとしているときに、ORA-00904 無効な識別子が表示される理由がわかりません。

CREATE TABLE animals
(
   CONSTRAINT animal_id NUMBER(6) PRIMARY_KEY,
   name VARCHAR2(25),
   CONSTRAINT license_tag_number NUMBER(10) UNIQUE,
   admit_date DATE NOT NULL,
   adoption_id NUMBER(5),
   vaccination_date DATE NOT NULL
);
4

3 に答える 3

7

Oracle でテーブルを作成する場合CREATE TABLE、少なくとも 4 つの方法で制約を指定できます。

インライン仕様

CREATE TABLE animals
(
   animal_id NUMBER(6) PRIMARY KEY,
   name VARCHAR2(25),
   license_tag_number NUMBER(10) UNIQUE,
   admit_date DATE NOT NULL,
   adoption_id NUMBER(5),
   vaccination_date DATE NOT NULL
);

明示的な制約の名前によるインライン指定

CREATE TABLE animals
(
   animal_id NUMBER(6) CONSTRAINT animal_id_pk PRIMARY KEY,
   name VARCHAR2(25),
   license_tag_number NUMBER(10) CONSTRAINT animal_tag_no_uq UNIQUE,
   admit_date DATE NOT NULL,
   adoption_id NUMBER(5),
   vaccination_date DATE NOT NULL
);

概略仕様

CREATE TABLE animals
(
   animal_id NUMBER(6) ,
   name VARCHAR2(25),
   license_tag_number NUMBER(10),
   admit_date DATE NOT NULL,
   adoption_id NUMBER(5),
   vaccination_date DATE NOT NULL,
   PRIMARY KEY (animal_id),
   UNIQUE (license_tag_number)
);

明示的な制約の名前による概略仕様

CREATE TABLE animals
(
   animal_id NUMBER(6) ,
   name VARCHAR2(25),
   license_tag_number NUMBER(10),
   admit_date DATE NOT NULL,
   adoption_id NUMBER(5),
   vaccination_date DATE NOT NULL,
   CONSTRAINT animal_id_pk PRIMARY KEY (animal_id),
   CONSTRAINT animal_tag_no_uq UNIQUE (license_tag_number)
);

制約名を明示的に指定しない場合、それらはシステムによって自動的に生成され、SYS_C0013321. 最後の方法が最も読みやすいと思います。なぜなら、どの制約が作成されたかを確認でき、わかりやすい名前を使用して (たとえば、 view を使用してuser_constraints) それらを管理できるからです。

ところで、あなたのコードにはタイプミスがあります:PRIMARY KEYの代わりに を使用する必要がありPRIMARY_KEYます。

于 2013-05-17T08:27:15.910 に答える
2

これは正しいコードです。CONSTRAINT単語を削除する必要があります:

CREATE TABLE animals
(
   animal_id NUMBER(6) PRIMARY KEY,
   name VARCHAR2(25),
   license_tag_number NUMBER(10) UNIQUE,
   admit_date DATE NOT NULL,
   adoption_id NUMBER(5),
   vaccination_date DATE NOT NULL
);

ただし、次のように PK と UNIQUE の制約を使用することもできます。

CREATE TABLE animals
(
   animal_id NUMBER(6) not null,
   name VARCHAR2(25),
   license_tag_number NUMBER(10) UNIQUE,
   admit_date DATE NOT NULL,
   adoption_id NUMBER(5),
   vaccination_date DATE NOT NULL,
   CONSTRAINT animals_PK PRIMARY KEY (animal_id) ,
   CONSTRAINT l_tag_number_uq UNIQUE (license_tag_number) 
);

わかりやすい名前/簡単な説明が付けられるため、制約を使用することをお勧めします。

SQL フィドルのデモ

于 2013-05-17T08:05:34.010 に答える
0

ここに間違いがあると思います:

この例をキャッチ:

CREATE TABLE "name_of_table"

    ("column_1" "data_type",

    "column_2" "data_type",

    "column_3" "data_type",

    CONSTRAINT column_name PRIMARY KEY (column_1, column_2)

    ... );

あなたのコードは次のように仮定します:

CREATE TABLE 動物(

CREATE TABLE animals
(
   animal_id NUMBER(6) PRIMARY_KEY,
   name VARCHAR2(25),
   license_tag_number NUMBER(10) UNIQUE,
   admit_date DATE NOT NULL,
   adoption_id NUMBER(5),
   vaccination_date DATE NOT NULL
);

ここで例を確認できます

于 2013-05-17T08:07:33.683 に答える