【问题标题】:ORA-00904: "ID": invalid identifierORA-00904: "ID": 无效标识符
【发布时间】:2013-10-20 19:01:14
【问题描述】:

尝试使用外键创建表。我不断收到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)
);

【问题讨论】:

    标签: sql oracle foreign-keys ddl


    【解决方案1】:

    看看下面一行:

    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 表之前创建它。

    【讨论】:

    • 感谢您的快速响应,所以我应该先创建表,然后在创建所有表后将外键添加到表中?
    • 不一定,但您应该牢记顺序。在对表 X 创建约束以引用表 Y 之前,请确保 X 和 Y 都存在。
    【解决方案2】:

    就我而言,我在创建表格时使用了引号,如下所示:

    CREATE TABLE MY_TABLE (
    "ID"                   NUMBER(19, 0) NOT NULL ENABLE,
    "OPT_LOCK_VERSION"     NUMBER(19, 0),
    -- etc.
    

    然后尝试创建与问题中类似的约束。这导致了相同的 ORA-00904 错误。当我通过删除那些不必要的引号来修改我的表创建脚本时,约束创建开始起作用。

    【讨论】:

      【解决方案3】:

      我们永远不知道,但就我而言,无论我给我的专栏起什么名字,我都有这个例外。 我有一个带有 EF 的库,它指向正确的数据库。实体是正确的。

      但在客户端部分(Web 应用程序),连接字符串指向另一个数据库! 一个愚蠢的错误,很难确定这个愚蠢的错误......

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-08-08
        • 2022-01-22
        • 2011-08-27
        • 2011-04-21
        • 2019-06-29
        • 2017-12-29
        相关资源
        最近更新 更多