You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

创建vod_classification表触发ORA-00907错误:缺失右括号,求解决

解决ORA-00907: missing right parenthesis错误及表创建顺序问题

咱们一步一步来拆解你的问题:

首先,你遇到的ORA-00907: missing right parenthesis错误,根源是在创建vod_classification表时,最后一行的REFERENCES vod_film (dbClass)写法完全错误。外键约束必须通过CONSTRAINT关键字明确定义,而且更关键的是——你要引用的vod_film表还没创建呢! 数据库根本找不到这个表,同时语法上也不符合Oracle的外键定义规则。

其次,你的表创建逻辑搞反了:vod_film里的外键dbClass是引用vod_classification的主键dbClassId,所以应该先创建父表vod_classification,再创建子表vod_film,而不是反过来尝试让父表引用子表。

给你修正后的正确SQL:

第一步:创建父表vod_classification

CREATE TABLE vod_classification (
    dbClassId CHAR(4),
    dbDescription VARCHAR2(90),
    CONSTRAINT vod_classification_PK PRIMARY KEY (dbClassId)
);

这里去掉了错误的REFERENCES语句,因为这个表是被引用的一方,不需要引用其他未创建的表。

第二步:创建子表vod_film

CREATE TABLE vod_film (
    dbFilmId NUMBER(4) NOT NULL,
    dbTitle VARCHAR2(50) NOT NULL,
    dbDirector_firstname VARCHAR2(10) NOT NULL,
    dbDirector_lastname VARCHAR2(10) NOT NULL,
    dbGenre VARCHAR2(10),
    dbUK_release_date DATE,
    dbFilename VARCHAR2 (15),
    dbRuntime NUMBER (10),
    dbClass CHAR(8),
    CONSTRAINT vod_film_PK PRIMARY KEY (dbFilmId),
    CONSTRAINT vod_film_class_FK FOREIGN KEY (dbClass) 
        REFERENCES vod_classification (dbClassId) 
        ON DELETE SET NULL
);

这部分的外键约束是正确的,因为此时vod_classification已经存在,数据库可以找到对应的主键列。

另外提醒你一下:vod_film里的dbClass是CHAR(8),而父表的dbClassId是CHAR(4),长度不一致,这可能会导致后续数据插入或关联查询时出现问题,建议统一两者的长度哦。

内容的提问来源于stack exchange,提问作者Seba

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 03:32:09