ORA-00904: "ID": 无效标识符

3

我正在尝试创建一个带有外键的表格。但是我一直收到ORA-00904错误信息。我做错了什么?是因为外键所对应的表还没有被创建吗?

CREATE TABLE ingredients( 
   ingredient_id       number(2,0),
   ingredient          VARCHAR2(55) NOT NULL,
   quantity_required   VARCHAR2(15) NOT NULL,
   optional_ingredient VARCHAR2(30) NOT NULL,
   CONSTRAINT pk_ingr_id PRIMARY KEY(ingredient_id),
   CONSTRAINT fk_ingredient_list FOREIGN KEY(id) REFERENCES ingredient_list(id)
);
3个回答

6
请看下面这行代码:
CONSTRAINT fk_ingredient_list FOREIGN KEY(id) REFERENCES ingredient_list(id)

您的表中没有名为“id”的列。我猜您想写的是:
CONSTRAINT fk_ingredient_list FOREIGN KEY(ingredient_id) REFERENCES ingredient_list(id)

编辑:
另外,正如您自己所怀疑的那样,如果您想引用ingredient_list表,则必须在创建引用它的ingredients表之前先创建它。


感谢快速的回复,那我应该先创建表,然后在创建完所有表后再向表中添加外键对吗? - user2199351
在为表X创建引用表Y的约束之前,确保X和Y都存在。不一定需要这样做,但是要记住顺序。 - Mureinik

1
在我的情况下,我在表格创建中使用了引号,如下所示:
CREATE TABLE MY_TABLE (
"ID"                   NUMBER(19, 0) NOT NULL ENABLE,
"OPT_LOCK_VERSION"     NUMBER(19, 0),
-- etc.

然后尝试创建与问题中类似的约束。结果出现了相同的ORA-00904错误。当我修改了我的表创建脚本,删除了那些不必要的引号后,约束创建开始工作。


0

我们永远不知道,但在我的情况下,无论我给列取什么名字,都会出现这个异常。

我有一个使用 EF 的库,它指向正确的数据库。实体是正确的。

但在客户端部分(一个 Web 应用程序),连接字符串指向另一个数据库!

一个愚蠢的错误,很难找到这个愚蠢的错误......

所以,请首先查看连接字符串 :)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接