【问题标题】:Why am I getting an ORA-00936 error for my composite primary key on my sqlplus code?为什么我的 sqlplus 代码中的复合主键出现 ORA-00936 错误?
【发布时间】:2017-01-23 00:34:24
【问题描述】:

错误出现在此代码块的最后。

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 oracle sqlplus composite-primary-key ora-00936


    【解决方案1】:

    这是因为您遗漏了 DISCOUNT 的 DEFAULT 值/表达式。

    【讨论】:

    • 非常感谢您的帮助,非常感谢!
    【解决方案2】:

    嗯,错误就在这里:

    ,discount    DECIMAL(2,2)DEFAULT
    

    如果您在列定义中启动 DEFAULT 子句 - 您应该指定构成默认值的表达式 - 或者不要使用 DEFAULT 关键字......

    还是我错过了什么?

    马可

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-10-25
      • 1970-01-01
      • 1970-01-01
      • 2023-03-14
      • 2021-10-18
      相关资源
      最近更新 更多