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

ORA-00907: 缺失右括号错误排查请求(附SQL建表语句)

Oracle建表报错ORA-00907: missing right parenthesis的排查与修复

你的SQL语句在Oracle中执行报错,核心是用了Oracle不支持的语法,且表创建顺序有误,具体问题和修复方案如下:

问题1:Oracle不支持AUTO_INCREMENT关键字

MySQL的AUTO_INCREMENT在Oracle中对应GENERATED AS IDENTITY(Oracle 12c及以上版本支持),这是简化自增主键的最优方式。

问题2:Oracle无ENUM数据类型

你在Actor表中使用的ENUM('M', 'F', 'Other')是MySQL专属语法,Oracle不支持。需替换为VARCHAR2并添加检查约束,以此限制取值范围。

问题3:外键引用的表创建顺序错误

Movie表中引用了Genre表的外键,但你先创建Movie再创建Genre,Oracle会找不到被引用的表,导致报错。需调整顺序,先创建Genre表。

修正后的完整SQL语句

CREATE TABLE Actor (
  actor_id INT GENERATED AS IDENTITY PRIMARY KEY,
  actor_name VARCHAR2(255) NOT NULL,
  actor_gender VARCHAR2(10) NOT NULL CHECK (actor_gender IN ('M', 'F', 'Other')),
  actor_birthdate DATE NOT NULL
);

CREATE TABLE Director (
  director_id INT GENERATED AS IDENTITY PRIMARY KEY,
  director_name VARCHAR2(255) NOT NULL,
  director_birthdate DATE NOT NULL
);

CREATE TABLE Genre (
  genre_id INT GENERATED AS IDENTITY PRIMARY KEY,
  genre_name VARCHAR2(255) NOT NULL
);

CREATE TABLE Movie (
  movie_id INT GENERATED AS IDENTITY PRIMARY KEY,
  movie_title VARCHAR2(255) NOT NULL,
  movie_release_date DATE NOT NULL,
  movie_runtime INT NOT NULL,
  movie_rating DECIMAL(3,1) NOT NULL,
  genre_id INT NOT NULL,
  FOREIGN KEY (genre_id) REFERENCES Genre(genre_id)
);

CREATE TABLE MovieCast (
  movie_id INT NOT NULL,
  actor_id INT NOT NULL,
  PRIMARY KEY (movie_id, actor_id),
  FOREIGN KEY (movie_id) REFERENCES Movie(movie_id),
  FOREIGN KEY (actor_id) REFERENCES Actor(actor_id)
);

CREATE TABLE DirectorOf (
  movie_id INT NOT NULL,
  director_id INT NOT NULL,
  PRIMARY KEY (movie_id, director_id),
  FOREIGN KEY (movie_id) REFERENCES Movie(movie_id),
  FOREIGN KEY (director_id) REFERENCES Director(director_id)
);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 21:37:12