Oracle建表报ORA-00907缺失右括号错误,正确括号位置如何放置?
ORA-00907报错原因及修复方案
核心问题定位
报错并非右括号放置错误导致,实际是两个语法和逻辑问题触发了误报:
- 列定义末尾缺失分隔逗号:
Customer_ID NUMBER NOT NULL行末尾没有加逗号,SQL解析器会将后续的约束定义识别为当前列的属性,读到不符合语法规则的内容时就会误报缺失右括号 - 外键引用的字段未在本表声明:约束里用到的
Owner_ID、Payment_ID两个字段,没有在Trips表的列定义中出现;同时你已经定义的Payment字段,和外键引用的Payment表主键Payment_ID命名不匹配
修正后的建表语句
CREATE TABLE Trips ( Trips_ID NUMBER NOT NULL, Date_of_Trip DATE NOT NULL, Payment_ID NUMBER NOT NULL, -- 调整字段名和外键引用的目标主键保持一致 Destination_Town VARCHAR2(50) NOT NULL, Source_Town VARCHAR2 (50) NOT NULL, Customer_ID NUMBER NOT NULL, Owner_ID NUMBER NOT NULL, -- 新增外键约束需要用到的Owner_ID字段 CONSTRAINT Trip_pk PRIMARY KEY (Trips_ID), CONSTRAINT Customer_fk FOREIGN KEY (Customer_ID) REFERENCES Customer (Customer_ID), CONSTRAINT Owner_fk FOREIGN KEY (Owner_ID) REFERENCES Vehicle_Owners (Owner_ID), CONSTRAINT Payment_fk FOREIGN KEY (Payment_ID) REFERENCES Payment (Payment_ID) );
补充说明
如果Owner_ID、Payment_ID允许为空,可以自行删除对应字段定义后的NOT NULL约束。
内容的提问来源于stack exchange,提问作者SGA-AllStar
相关产品推荐
相关产品推荐

