Oracle SQL创建多对多关系中间表失败,报ORA-00936错误
ORA-00936: missing expression 错误解决(创建Appointment中间表失败)
错误原因
你的Appointment表创建语句存在两处问题:
- 主键约束的字段列表写错:你在主键中使用了Oracle关键字
Date和Time,但这两个不是你定义的实际字段名(实际字段为date_Created和time_Created),Oracle无法识别关键字作为字段名,因此抛出"缺少表达式"错误。 - 数据类型不兼容:Oracle SQL没有单独的
TIME数据类型,若要存储时间部分,建议改用TIMESTAMP类型,或者直接用DATE(Oracle的DATE类型本身包含日期和时间信息)。
修正后的完整代码
CREATE TABLE Doctor ( Doctor_ID int, Doctor_FName VARCHAR(30) NOT NULL, Doctor_LName VARCHAR(30) NOT NULL, Department_ID int, Doctor_Phone_Number VARCHAR(15), CONSTRAINT PK_Doctor_ID PRIMARY KEY (Doctor_ID), CONSTRAINT FK_Doctor_DepartmentID FOREIGN KEY (Department_ID) REFERENCES Department(Department_ID) ); CREATE TABLE Patient ( Patient_ID int, Patient_FName VARCHAR(20) NOT NULL, Patient_LName VARCHAR(20) NOT NULL, Patient_Address VARCHAR(50), Patient_Phone_Number VARCHAR(15), CONSTRAINT PK_Patient_ID PRIMARY KEY (Patient_ID) ); CREATE TABLE APPOINTMENT ( Patient_ID int, Doctor_ID int, date_Created Date, -- 替换Time为TIMESTAMP,适配Oracle数据类型规范 time_Created TIMESTAMP, -- 修正主键字段为实际定义的字段名 CONSTRAINT PK_PatientDoctorID_Appointment PRIMARY KEY (Patient_ID, Doctor_ID, date_Created, time_Created), CONSTRAINT FK_PatientID_Appointment FOREIGN KEY (Patient_ID) REFERENCES Patient(Patient_ID), CONSTRAINT FK_DoctorID_Appointment FOREIGN KEY (Doctor_ID) REFERENCES Doctor(Doctor_ID) );
关键修改说明
- 主键约束:将
(Patient_ID, Doctor_ID, Date, Time)改为(Patient_ID, Doctor_ID, date_Created, time_Created),使用实际字段名而非Oracle关键字。 - 数据类型:将
time_Created Time调整为time_Created TIMESTAMP,符合Oracle的数据类型规范。如果不需要高精度时间,也可以直接用DATE类型存储时间。
内容的提问来源于stack exchange,提问作者user23307603
相关产品推荐
相关产品推荐

