Почему я получаю ошибку ORA-00936 для моего составного первичного ключа в моем коде sqlplus?
Ошибка находится в самом конце этого блока кода.
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
Я не очень понимаю, почему это не работает, потому что синтаксис хороший. Я предполагаю, что логика неверна, но я относительно новичок в этом, поэтому я не уверен. Я действительно ценю некоторые отзывы.
2 ответа
Решение
Это потому, что вы пропустили значение / выражение DEFAULT для DISCOUNT.
Ну, ошибка здесь:
,discount DECIMAL(2,2)DEFAULT
Если вы инициируете DEFAULT
в определении столбца - вы должны указать выражение, которое составляет значение по умолчанию - или оставить DEFAULT
Ключевое слово прочь....
Или я что-то упустил?
Marco