Sql 00904,00000-创建表时“%s:无效的标识符”

izkcnapc  于 2022-09-18  发布在  Java
关注(0)|答案(3)|浏览(204)

当我创建这样一个表时:

CREATE TABLE "Movie_list" (
  "Movie_id"             NUMBER(8) NOT NULL,
  "Company"              VARCHAR2(30) NOT NULL,
  "Rating"               DECIMAL(5,1) NOT NULL,
  "Storyline"            VARCHAR2(255) NOT NULL,
  "Award_id"             VARCHAR2(255) NOT NULL,
  "Cast_and_Crew_id"     VARCHAR2(255) NOT NULL,
  CONSTRAINT Movie_pk PRIMARY KEY (Movie_id),
  );

生成错误报告-

SQL Error: ORA-00904: : invalid identifier
00904. 00000 -  "%s: invalid identifier"

我看不出有什么问题,请帮忙。

11dmarpk

11dmarpk1#

错误:

  • 用引号引起来的表名和列名
  • NUMBER和VARCHAR2不是有效的MySQL类型
  • A,位于无效的约束规范的末尾
gtlvzcf8

gtlvzcf82#

主要问题存在于您的主键规范中,该规范如下

CONSTRAINT Movie_pk PRIMARY KEY (Movie_id),

但是,在表定义中,您引用了该字段的名称,即

"Movie_id"             NUMBER(8) NOT NULL,

由于此字段的名称(以及表中的每个字段以及表本身的名称)都用引号括起来,因此数据库会将名称存储为指定的大小写混合名称,并且因为Oracle会将所有未加引号的标识符转换为UPPER_CASE,这意味着每次引用此表及其字段时,必须对它们进行引号。所以你的约束条件应该是

CONSTRAINT Movie_pk PRIMARY KEY ("Movie_id")

我的建议是去掉引号中的“大小写混合”名称。去掉引号,Oracle将在内部将名称存储在UPERPICE_CASE中。如果你愿意的话,你仍然可以用Mix_Case来引用它们,但你不需要“Quote_Them_Each_Time_You_Use_Them”,因为它会变得非常陈旧,读起来也很糟糕。我建议您将表定义更改为

CREATE TABLE Movie_list (
  Movie_id             NUMBER(8) NOT NULL,
  Company              VARCHAR2(30) NOT NULL,
  Rating               DECIMAL(5,1) NOT NULL,
  Storyline            VARCHAR2(255) NOT NULL,
  Award_id             VARCHAR2(255) NOT NULL,
  Cast_and_Crew_id     VARCHAR2(255) NOT NULL,
  CONSTRAINT Movie_pk PRIMARY KEY (Movie_id)
  );

祝你好运。

oipij1gg

oipij1gg3#

当我试图使用某种关键字作为列名时,也会发生这种情况。我试图创建一个列名为“uid”的表(显然没有“”),结果收到以下错误:
ORA-00904::无效的标识符00904。00000-“%s:无效的标识符”

更改列的名称解决了该错误。

相关问题