SQL 00904. 00000 - “%s:无效标识符”创建表时

时间:2016-12-10 01:55:12

标签: oracle

当我创建这样的表时:

private int eyeIdx = 0;
public void actionPerformed(ActionEvent e) {
  if (checkBox.Eyes.isSelected()) {
    label.setIcon(eyesImages[eyeIdx]);
    eyeIdx++;
    if (eyeIdx >= eyesImages.length) {
      eyeIdx = 0;
    }
  }
  ...
}

生成错误报告 -

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

我没有看到任何问题,请帮忙。

2 个答案:

答案 0 :(得分:1)

主要问题在于您的主键规范,即

CONSTRAINT Movie_pk PRIMARY KEY (Movie_id),

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

"Movie_id"             NUMBER(8) NOT NULL,

由于引用了该字段的名称(实际上是表中的每个字段以及表本身的名称),因此数据库将名称存储为指定的大小写混合的名称,并且因为Oracle会转换所有< UPPER_CASE的强>未加引号标识符表示您每次都要参考此表及其字段,您必须引用它们。所以你的约束应该是

CONSTRAINT Movie_pk PRIMARY KEY ("Movie_id")

我的建议是你免除引用的&#34; Mixed_case&#34;名。删除引号,Oracle将在内部将名称存储在UPPER_CASE中。如果你愿意,你仍然可以使用Mixed_Case 来引用它们,但是你不会得到##; Quote_Them_Every_Time_You_Use_Them&#34 ;,它会变得非常旧并且读取非常糟糕。我建议你将表格定义改为

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

祝你好运。

答案 1 :(得分:0)

错误:

  • 用引号括起来的表格和列名称
  • NUMBER和VARCHAR2不是有效的mysql类型
  • A,在约束规范的末尾无效