Oracle表创建错误ORA-00904无效标识符

时间:2013-05-17 08:03:12

标签: sql oracle

非常有趣的是,当我尝试使用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
);

3 个答案:

答案 0 :(得分:7)

在Oracle中使用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
);

带有显式约束名称的内联规范

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之类的内容。我发现最后一种方式最具可读性,因为您可以看到创建了哪些约束,并且可以使用用户友好的名称来管理它们(例如,使用视图user_constraints)。

顺便说一句,您的代码中存在拼写错误:您应该使用PRIMARY KEY代替PRIMARY_KEY

答案 1 :(得分: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 Fiddle DEMO

答案 2 :(得分: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 animals(

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
);

您可以查看示例here