首页 > 解决方案 > 我在 STU_GPA 行或附近不断收到错误。我不明白问题是什么

问题描述

这是我的代码:

CREATE TABLE STUDENT 
(
    STU_NUM INTEGER NOT NULL,
    STU_LNAME VARCHAR(25) NOT NULL,
    STU_FNAME VARCHAR(20) NOT NULL,
    STU_INIT CHAR(1),
    STU_DOB DATE NOT NULL,
    STU_HRS INTEGER DEFAULT 0 CHECK(STU_HRS IN (STU_HRS >= 0 AND STU_HRS <=1000)),
    STU_CLASS CHAR(2) NOT NULL CHECK(STU_CLASS IN ('Fr', 'So', 'Jr', 'Sr', 'Gr')),
    STU_GPA NUMBER(3,2) DEFAULT 0.00 NOT NULL CHECK(STU_GPA IN (STU_GPA >= 0.00 AND STU_GPA <= 4.00)),
    STU_PHONE NUMBER(4,0) NOT NULL,
    PRIMARY KEY (STU_NUM)
);

我不断收到一条错误消息,指出我在行或行附近缺少括号STU_GPA

ORA-00907: 缺少右括号

但我其实不是。我错过了什么?谢谢你的帮助!

标签: sqloracle

解决方案


所以你在表中有一个字段

STU_GPA NUMBER(3,2) DEFAULT 0.00 NOT NULL

现在你想要check它来获取有效值。如果您有它们的枚举(例如,如果仅0, 1, 2, 3, 3.5, 4是有效的),请输入IN

 CHECK(STU_GPA IN (0, 1, 2, 3, 3.5, 4))

但是,如果您想声明range,例如其中的任何STU_GPA0..4 都是有效的,那么直接不使用 any IN

 CHECK(STU_GPA >= 0.00 AND STU_GPA <= 4.00)

清除查询可以

CREATE TABLE STUDENT (
  STU_NUM INTEGER NOT NULL,
  STU_LNAME VARCHAR(25) NOT NULL,
  STU_FNAME VARCHAR(20) NOT NULL,
  STU_INIT CHAR(1),
  STU_DOB DATE NOT NULL,
  -- Range of valid values
  STU_HRS INTEGER DEFAULT 0 CHECK(STU_HRS >= 0 AND STU_HRS <= 1000),
  -- Enumeration of valid values
  STU_CLASS CHAR(2) NOT NULL CHECK(STU_CLASS IN ('Fr', 'So', 'Jr', 'Sr', 'Gr')),
  -- Range of valid values
  STU_GPA NUMBER(3,2) DEFAULT 0.00 NOT NULL CHECK(STU_GPA >= 0.00 AND STU_GPA <= 4.00),
  STU_PHONE NUMBER(4,0) NOT NULL,

  PRIMARY KEY (STU_NUM)
);

推荐阅读