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
相关产品推荐
相关产品推荐

