Oracle创建Tasks/TimeSheet/TimeSheetHour表报错 遗漏哪些关键字
错误点汇总
- 核心错误:外键定义关键字拼写错误,所有外键声明中你使用的
REFERENCE为错误写法,正确的外键引用关键字是REFERENCES(末尾需加s),这也是三张表报错完全一致的原因。 - 第二处错误:
TimeSheetHour表的部分外键声明格式错误,引用表时不允许加括号,且必须明确指定被引用的字段名,你现有写法中REFERENCE (TimeSheet)、REFERENCE (User_T)、REFERENCE (TimeCategory)均不符合语法要求。 - 第三处隐患:全局约束名重复,同一个数据库实例中约束名不允许重复,你现有代码中不同表的外键使用了
IdProject_FK、IdUser_FK等同名约束,修正拼写错误后执行仍会触发命名冲突报错,建议给约束名增加对应表名前缀做区分。
修正后的完整建表代码
-- 修正后Tasks表建表语句 CREATE TABLE Tasks( IdTask NUMBER(10,0) NOT NULL, IdProject NUMBER(10,0) NOT NULL, Task_Name VARCHAR2(100) NOT NULL, Task_Description VARCHAR2(100), StartDate DATE NOT NULL, EndDate DATE NOT NULL, CreatedAt VARCHAR2(50), UpdatedAt VARCHAR2(50), Enabled CHAR(10), CONSTRAINT IdTask_PK PRIMARY KEY (IdTask), CONSTRAINT FK_Tasks_IdProject FOREIGN KEY (IdProject) REFERENCES Project_T(IdProject) ); -- 修正后TimeSheet表建表语句 CREATE TABLE TimeSheet( IdTimeSheet NUMBER(10,0) NOT NULL, IdUser NUMBER(10,0) NOT NULL, IdProject NUMBER(10,0) NOT NULL, TimeSheet_Name VARCHAR2(100) NOT NULL, TimeSheet_Description VARCHAR2(200), CreatedAt VARCHAR2(50), UpdatedAt VARCHAR2(50), Enabled CHAR(10), CONSTRAINT IdTimeSheet_PK PRIMARY KEY (IdTimeSheet), CONSTRAINT FK_TimeSheet_IdProject FOREIGN KEY (IdProject) REFERENCES Project_T(IdProject), CONSTRAINT FK_TimeSheet_IdUser FOREIGN KEY (IdUser) REFERENCES User_T(IdUser) ); -- 修正后TimeSheetHour表建表语句 CREATE TABLE TimeSheetHour( IdTimeSheetHour NUMBER(10,0) NOT NULL, IdTimeSheet NUMBER(10,0) NOT NULL, IdUser NUMBER(10,0) NOT NULL, IdTimeCategory NUMBER(10,0) NOT NULL, IdTask NUMBER(10,0) NOT NULL, Quantity NUMBER(5,0) NOT NULL, TimeSheetHour_Description VARCHAR2(200), CONSTRAINT IdTimeSheetHour_PK PRIMARY KEY (IdTimeSheetHour), CONSTRAINT FK_TimeSheetHour_IdTimeSheet FOREIGN KEY (IdTimeSheet) REFERENCES TimeSheet(IdTimeSheet), CONSTRAINT FK_TimeSheetHour_IdUser FOREIGN KEY (IdUser) REFERENCES User_T(IdUser), CONSTRAINT FK_TimeSheetHour_IdTimeCategory FOREIGN KEY (IdTimeCategory) REFERENCES TimeCategory(IdTimeCategory), CONSTRAINT FK_TimeSheetHour_IdTask FOREIGN KEY (IdTask) REFERENCES Tasks(IdTask) );
内容的提问来源于stack exchange,提问作者Renzm.6958
相关产品推荐
相关产品推荐

