首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ORA-00907让我发疯

ORA-00907让我发疯
EN

Stack Overflow用户
提问于 2019-10-20 19:54:10
回答 3查看 93关注 0票数 1

我正在努力完成我的实验室,但我找不到丢失的右括号,它显示我丢失了。我已经完成了课程表,它是正确的,但我得到了一个错误,在每个其他的表,有人可以帮助吗?

代码语言:javascript
复制
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));
EN

回答 3

Stack Overflow用户

发布于 2019-10-20 20:02:40

这篇评论太长了。

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

要调试,请简化!第一个问题是:错误发生在哪里?在第一次创建表时会发生这种情况吗?在第二个?诸若此类。可以通过创建第一个表来确定这一点。然后是前两个表,等等。

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

执行此操作时,您将发现至少两个错误:

  • 在约束中引用但未定义的列。
  • 错误地指定了length参数的数据类型。

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

票数 1
EN

Stack Overflow用户

发布于 2019-10-20 22:19:11

我想你忘了一篇专栏

代码语言:javascript
复制
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":无效的标识符

票数 0
EN

Stack Overflow用户

发布于 2019-10-22 07:30:47

下面是对代码问题的逐表分析。

COURSE**:**确定的

CLASS**:**的

代码语言:javascript
复制
CLASS_CODE INTEGER(5) NOT NULL

INTEGER数据类型不接受长度

代码语言:javascript
复制
CHECK (CLASS_SECTION IN (0,1,2,3,4,5,6,7,8))

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

代码语言:javascript
复制
CRS_CODE REFERENCES COURSE(CRS_CODE)

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

STUDENT**:**的表

代码语言:javascript
复制
STU_PHONE INTEGER(4)

见上文

ENROLL**:**的表

代码语言:javascript
复制
CLASS_CODE INTEGER (5)

请参见上面的。

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

代码语言:javascript
复制
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)
);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58472741

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档