1

我正在努力完成我的实验室,但我找不到丢失的右括号,它说我失踪了。我已经完成了课程表,一切都是正确的,但是我在其他每个表上都出现错误,有人可以帮忙吗?

CREATE TABLE COURSE(
  CRS_CODE VARCHAR(8) NOT NULL,
  CRS_DESCRIPTION VARCHAR(35) NOT NULL,
  CRS_CREDIT INTEGER DEFAULT 4 NOT NULL CHECK(CRS_CREDIT IN (1,2,3,4)),
  PRIMARY KEY (CRS_CODE));

CREATE TABLE CLASS (
  CRS_CODE VARCHAR(8) NOT NULL,
  CLASS_CODE INTEGER (5) NOT NULL,
  CHECK (CLASS_SECTION IN (0,1,2,3,4,5,6,7,8)),
  CLASS_TIME VARCHAR(25) NOT NULL,
  CLASS_ROOM CHAR(6),
  CRS_CODE REFERENCES COURSE(CRS_CODE),
  PRIMARY KEY (CLASS_CODE));

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

CREATE TABLE ENROLL(
  ENROLL_GRADE VARCHAR(1) DEFAULT 'Z' CHECK (ENROLL_GRADE IN('A','B','C','D','F','I','W','Z')),
  STU_NUM INTEGER REFERENCES STUDENT(STU_NUM),
  CLASS_CODE INTEGER (5) REFERENCES CLASS(CLASS_CODE));
4

3 回答 3

1

评论太长了。

实验室的部分目的是让您学习如何调试代码。学术环境中的试错比“现实世界”中的试错效率高得多。

调试,简化!第一个问题是:错误发生在哪里?它是否发生在第一个表创建中?在第二?等等。您可以通过创建第一个表来确定这一点。然后是前两个表,依此类推。

一旦有了表格,您就可以快速发现错误。如果没有,您可以一次注释掉一个列定义。

当你这样做时,你会发现至少两个错误:

  • 在约束中引用但未定义的列。
  • 错误地赋予长度参数的数据类型。

此外,如果您使用的是 Oracle,建议的字符串类型是varchar2(),而不是varchar()

于 2019-10-20T12:02:40.283 回答
0

我想你忘记了一个专栏

CREATE TABLE CLASS (
  CRS_CODE VARCHAR(8) NOT NULL,
  CLASS_CODE INTEGER (5) NOT NULL,
  CHECK (CLASS_SECTION IN (0,1,2,3,4,5,6,7,8)),
  CLASS_TIME VARCHAR(25) NOT NULL,
  CLASS_ROOM CHAR(6),
  CRS_CODE REFERENCES COURSE(CRS_CODE),
  PRIMARY KEY (CLASS_CODE));

ORA-00904: "CLASS_SECTION": 无效标识符

于 2019-10-20T14:19:11.030 回答
0

这是对您的代码问题的逐表分析。

COURSE好的

CLASS

CLASS_CODE INTEGER(5) NOT NULL

数据INTEGER类型不接受长度

CHECK (CLASS_SECTION IN (0,1,2,3,4,5,6,7,8))

CLASS_SECTION表中不存在列。我想你的意思是CLASS_CODE

CRS_CODE REFERENCES COURSE(CRS_CODE)

外键约束的声明应直接放在定义引用列的行中。

STUDENT

STU_PHONE INTEGER(4)

看上面

ENROLL

CLASS_CODE INTEGER (5)

看上面。


解决这些问题后,就可以成功创建 4 个表。

DB Fiddle 上的演示

CREATE TABLE COURSE(
  CRS_CODE VARCHAR(8) NOT NULL,
  CRS_DESCRIPTION VARCHAR(35) NOT NULL,
  CRS_CREDIT INTEGER DEFAULT 4 NOT NULL CHECK(CRS_CREDIT IN (1,2,3,4)),
  PRIMARY KEY (CRS_CODE));

CREATE TABLE CLASS (
  CRS_CODE VARCHAR(8) NOT NULL REFERENCES COURSE(CRS_CODE),
  CLASS_CODE INTEGER NOT NULL CHECK (CLASS_CODE IN (0,1,2,3,4,5,6,7,8)),
  CLASS_TIME VARCHAR(25) NOT NULL,
  CLASS_ROOM CHAR(6),
  PRIMARY KEY (CLASS_CODE)
);

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

CREATE TABLE ENROLL(
  ENROLL_GRADE VARCHAR(1) DEFAULT 'Z' CHECK (ENROLL_GRADE IN('A','B','C','D','F','I','W','Z')),
  STU_NUM INTEGER REFERENCES STUDENT(STU_NUM),
  CLASS_CODE INTEGER REFERENCES CLASS(CLASS_CODE)
);
于 2019-10-21T23:30:46.580 回答