为什么我的sqlplus代码中的复合主键出现ORA-00936错误?
错误就在这个代码块的末尾为什么我的sqlplus代码中的复合主键出现ORA-00936错误?,sql,oracle,sqlplus,composite-primary-key,ora-00936,Sql,Oracle,Sqlplus,Composite Primary Key,Ora 00936,错误就在这个代码块的末尾 SQL> CREATE TABLE Hotel 2 (hotelNo INTEGER NOT NULL 3 ,hotelName VARCHAR2(50) NOT NULL 4 ,city VARCHAR2(50) NOT NULL 5 ,CONSTRAINT PKHotel PRIMARY KEY (hotelNo) 6 ); Table created. SQL> CR
SQL> CREATE TABLE Hotel
2 (hotelNo INTEGER NOT NULL
3 ,hotelName VARCHAR2(50) NOT NULL
4 ,city VARCHAR2(50) NOT NULL
5 ,CONSTRAINT PKHotel PRIMARY KEY (hotelNo)
6 );
Table created.
SQL> CREATE TABLE Room
2 (roomNo INTEGER NOT NULL
3 ,hotelNo INTEGER NOT NULL
4 ,type CHAR(6) NOT NULL
5 ,price DECIMAL (3,2) NOT NULL
6 ,CONSTRAINT PKRoom PRIMARY KEY (roomNo, hotelNo)
7 ,CONSTRAINT FKRoom FOREIGN KEY (hotelNo) REFERENCES Hotel (hotelNo)
8 ,CONSTRAINT chk_type CHECK (type IN ('Single', 'Double', 'Family'))
9 ,CONSTRAINT chk_roomNo CHECK(roomNo > 1 AND roomNo < 100)
10 ,CONSTRAINT chk_price CHECK(price > 10.00 AND price <100.00)
11 );
Table created.
SQL> -- Q3.
SQL> CREATE TABLE Guest
2 (guestNo INTEGER NOT NULL
3 ,guestName VARCHAR(50) NOT NULL
4 ,guessAddress VARCHAR(50) NOT NULL
5 ,CONSTRAINT PKGuest PRIMARY KEY (guestNo)
6 );
Table created.
SQL>
SQL> CREATE TABLE Booking
2 (hotelNo INTEGER NOT NULL
3 ,guestNo INTEGER NOT NULL
4 ,dateFrom DATE NOT NULL
5 ,dateTo DATE NOT NULL
6 ,roomNo INTEGER NOT NULL
7 ,discount DECIMAL(2,2)DEFAULT
8 ,CONSTRAINT PKBooking PRIMARY KEY (hotelNo,guestNo,dateFrom)
9 ,CONSTRAINT FKBooking_1 FOREIGN KEY (hotelNo, roomNo) REFERENCES Room (hotelNo, roomNo)
10 ,CONSTRAINT FKBooking_2 FOREIGN KEY (guestNo) REFERENCES Guest (guestNo)
11 );
,CONSTRAINT PKBooking PRIMARY KEY (hotelNo,guestNo,dateFrom)
*
ERROR at line 8:
ORA-00936: missing expression
SQL>createtable酒店
2(hotelNo整数不为空
3,hotelName VARCHAR2(50)不为空
4,城市VARCHAR2(50)不为空
5、酒店主键(酒店号)
6 );
表已创建。
SQL>创建桌子室
2(无整数不为空
3,hotelNo整数不为空
4,类型CHAR(6)不为空
5,价格小数(3,2)不为空
6,房间主键(房间号,酒店号)
7、房间外键(hotelNo)参考酒店(hotelNo)
8、约束chk_类型检查(输入('Single'、'Double'、'Family'))
9、约束chk炣Room No CHECK(Room No>1,Room No<100)
10,约束chk_价格检查(价格>10.00,价格--Q3。
SQL>创建表来宾
2(guestNo整数不为空
3,guestName VARCHAR(50)不为空
4,猜测地址VARCHAR(50)不为空
5,约束PKGuest主键(guestNo)
6 );
表已创建。
SQL>
SQL>创建表预订
2(hotelNo整数不为空
3,guestNo整数不为空
4、dateFrom日期不为空
5,dateTo日期不为空
6,roomNo整数不为空
7、折扣小数(2,2)默认值
8,预订主键(hotelNo、guestNo、dateFrom)
9,1号外键(hotelNo,roomNo)参考房间(hotelNo,roomNo)
10,U 2外键(guestNo)引用Guest(guestNo)
11 );
,约束PKBooking主键(hotelNo、guestNo、dateFrom)
*
第8行错误:
ORA-00936:缺少表达式
我真的不明白为什么这不起作用,因为语法是好的。我假设逻辑是错误的,但我在这方面相对较新,所以我不确定。我真的很感激一些反馈。这是因为您忽略了折扣的默认值/表达式。这是因为您忽略了折扣的默认值/表达式NT.嗯,错误在这里:
,discount DECIMAL(2,2)DEFAULT
如果在列定义中启动DEFAULT
子句,则应指定构成默认值的表达式,或将DEFAULT
关键字保留在一旁
还是我遗漏了什么
Marco嗯,错误在这里:
,discount DECIMAL(2,2)DEFAULT
如果在列定义中启动DEFAULT
子句,则应指定构成默认值的表达式,或将DEFAULT
关键字保留在一旁
还是我遗漏了什么
马可非常感谢你的帮助,我真的很感激!非常感谢你的帮助,我真的很感激!