为什么我在我的sqlplus代码上为我的复合主键获得ORA-00936错误?

问题描述:

错误在代码块的最后。为什么我在我的sqlplus代码上为我的复合主键获得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> 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 

我真的不明白为什么这不起作用,因为语法很好。我假设逻辑是错误的,但我相对较新,所以我不确定。我真的很欣赏一些反馈。

这是因为您忽略了DEFAULT值/表达式以获得折扣。

+0

非常感谢您的帮助,我真的很感激它! – tragicProgrammer

那么,错误是在这里:

,discount DECIMAL(2,2)DEFAULT 

如果您在列定义启动DEFAULT条款 - 你应该指定拼成的默认表情 - 或离开DEFAULT关键字走....

或者我错过了什么?

Marco