ORA-00907疯狂驾驶我

时间:2019-10-20 11:54:09

标签: sql parentheses ora-00907

我正在尝试完成我的实验室,但找不到找不到的右括号,这表示我正在丢失。我已经完成了课程表,而且一切正确,但是我在其他所有表上都遇到了错误,有人可以帮忙吗?

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));

3 个答案:

答案 0 :(得分:1)

这个评论太长了。

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

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

有了表后,您也许可以快速发现错误。如果没有,则可以一次注释掉列定义。

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

  • 在约束中引用但未定义的列。
  • 未正确指定长度参数的数据类型。

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

答案 1 :(得分:0)

我认为您忘记了专栏

let pls a b = max a b
let r = pls 4 5

;;

ORA-00904:“ CLASS_SECTION”:无效的标识符

答案 2 :(得分: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个表。

Demo on 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)
);