SQL*Plus ORA-00904 无效标识符 & ORA-00905 缺少关键字(外键)

布拉克船

我已尝试尽我所能调试此代码,以消除出现这些错误的原因的小错误的可能性,但我在三个 create table 语句中不断收到两个不同的错误。

CREATE TABLE SECTION 语句在指向 course# 的第 7 行给出了一个无效的标识符错误,这是我的代码:

CREATE TABLE SECTION
(SECTION#   VARCHAR2(8) constraint pk_section# primary key,
TIME   CHAR(5),
MAXST   NUMBER(2),
ROOM   VARCHAR2(14),
constraint chk_maxst check(maxst<=35),
constraint fk_crs foreign key(course#)
REFERENCES course(course#),
constraint fk_pro foreign key(empid)
REFERENCES professor(empid));

CREATE TABLE TAKES 语句在指向 section# 的第 4 行给出了一个无效的标识符错误,这是我的代码:

CREATE TABLE TAKES
(GRADE   CHAR(5) constraint nn_grade not null,
constraint chk_grade check(grade IN ('A','B','C')),
constraint fk_sec foreign key(section#)
REFERENCES section (section#),
constraint fk_stu foreign key(sid)
REFERENCES student(sid));

完整上下文:

drop table professor cascade constraints;
drop table course cascade constraints;
drop table student cascade constraints;
drop table section cascade constraints;
drop table takes cascade constraints;

CREATE TABLE PROFESSOR
(NAME  CHAR(15) constraint nn_name not null,
EMPID VARCHAR2(8) constraint pk_empid primary key,
PHONE NUMBER(10),
DATEHIRED DATE,
SALARY NUMBER);

CREATE TABLE COURSE
(NAME   CHAR(24) constraint nn_names not null,
COURSE# CHAR(10) constraint pk_course# primary key,
CREDIT  CHAR(6) constraint nn_credit not null,
COLLEGE CHAR(20),
HRS   NUMBER(1),
constraint chk_credit check(credit IN('U','G')),
constraint chk_college check(college IN ('Arts and Sciences','Education','Engineering','Business')),
constraint chk_course check((credit='U' AND hrs<=4) OR (credit = 'G' AND hrs=3)),
constraint unq_course unique(name, college));

CREATE TABLE STUDENT
(SID   VARCHAR2(7) constraint pk_sid primary key,
NAME    CHAR(14),
ADDRESS  CHAR(22),
BIRTHDATE DATE,
GRADELEVEL CHAR(2) constraint nn_glvl not null);

CREATE TABLE SECTION
(SECTION#   VARCHAR2(8) constraint pk_section# primary key,
TIME   CHAR(5),
MAXST   NUMBER(2),
ROOM   VARCHAR2(14),
constraint chk_maxst check(maxst<=35),
constraint fk_crs foreign key(course#)
REFERENCES course(course#),
constraint fk_pro foreign key(empid)
REFERENCES professor(empid));

CREATE TABLE TAKES
(GRADE   CHAR(5) constraint nn_grade not null,
constraint chk_grade check(grade IN ('A','B','C')),
constraint fk_sec foreign key(section#)
REFERENCES section (section#),
constraint fk_stu foreign key(sid)
REFERENCES student(sid));

Textbook references:
[https://drive.google.com/open?id=1eDdBShzgnSjISqxByJ7FKgbkLCEwXzpd][1]
[https://drive.google.com/open?id=1WhDsgQy2xSwjxVMqDzaGOcBh7zSokneT][2]
[https://drive.google.com/open?id=12N51OCEucRn_unagqHYsqufEGK3tKJH_][3]
小脚怪

你是否遵循了描述你应该如何做你正在做的事情的文档?因为,您似乎没有在课堂上多加注意,也没有阅读文档并倾向于编造东西,做一些错误或根本不存在的事情。

考虑删除所有这些混乱并重新开始。

以下是一些指导方针;尝试修复这些错误,如果仍然不起作用,请返回。

课程表中:

  • 不要使用 CHAR 而是使用 VARCHAR2 数据类型
  • 您不能对不存在的列创建约束(例如,对 CRS_CREDIT 列的检查约束,而您将该列命名为 CREDIT)

SECTION表中:

  • 不要使用 CHAR 数据类型
  • 您不能使用在 SECTION 表(例如 SEC_CRS_COURSE#)中不存在的列(在 FOREIGN KEY 约束中),也不在您引用的表中(例如 COURSE 表中的 CRS_COURSE#)
  • Oracle 中没有 ON UPDATE CASCADE 或 ON DELETE RESTRICT

TAKES也是如此


[编辑,在你几乎让它工作之后]

恭喜!你现在离得很近了!SECTION 和 TAKES 表需要一些调整(缺少列 - 看看,我用注释标记了它们)然后成功创建了表。

再一次(因为你不会听):摆脱 CHAR 数据类型列 - 使用 VARCHAR2 代替。

SQL> CREATE TABLE PROFESSOR
  2  (
  3     NAME        CHAR (15) CONSTRAINT nn_name NOT NULL,
  4     EMPID       VARCHAR2 (8) CONSTRAINT pk_empid PRIMARY KEY,
  5     PHONE       NUMBER (10),
  6     DATEHIRED   DATE,
  7     SALARY      NUMBER
  8  );

Table created.

SQL>
SQL> CREATE TABLE COURSE
  2  (
  3     NAME      CHAR (24) CONSTRAINT nn_names NOT NULL,
  4     COURSE#   CHAR (10) CONSTRAINT pk_course# PRIMARY KEY,
  5     CREDIT    CHAR (6) CONSTRAINT nn_credit NOT NULL,
  6     COLLEGE   CHAR (20),
  7     HRS       NUMBER (1),
  8     CONSTRAINT chk_credit CHECK (credit IN ('U', 'G')),
  9     CONSTRAINT chk_college CHECK
 10        (college IN ('Arts and Sciences',
 11                     'Education',
 12                     'Engineering',
 13                     'Business')),
 14     CONSTRAINT chk_course CHECK
 15        ( (credit = 'U' AND hrs <= 4) OR (credit = 'G' AND hrs = 3)),
 16     CONSTRAINT unq_course UNIQUE (name, college)
 17  );

Table created.

SQL>
SQL> CREATE TABLE STUDENT
  2  (
  3     SID          VARCHAR2 (7) CONSTRAINT pk_sid PRIMARY KEY,
  4     NAME         CHAR (14),
  5     ADDRESS      CHAR (22),
  6     BIRTHDATE    DATE,
  7     GRADELEVEL   CHAR (2) CONSTRAINT nn_glvl NOT NULL
  8  );

Table created.

SQL>
SQL> CREATE TABLE SECTION
  2  (
  3     SECTION#   VARCHAR2 (8) CONSTRAINT pk_section# PRIMARY KEY,
  4     TIME       CHAR (5),
  5     MAXST      NUMBER (2),
  6     ROOM       VARCHAR2 (14),
  7     course#    CHAR (10),                                        -- added by LF
  8     empid      VARCHAR2 (8),                                     -- added by LF
  9     CONSTRAINT chk_maxst CHECK (maxst <= 35),
 10     CONSTRAINT fk_crs FOREIGN KEY (course#) REFERENCES course (course#),
 11     CONSTRAINT fk_pro FOREIGN KEY (empid) REFERENCES professor (empid)
 12  );

Table created.

SQL>
SQL> CREATE TABLE TAKES
  2  (
  3     GRADE      CHAR (5) CONSTRAINT nn_grade NOT NULL,
  4     section#   VARCHAR2 (8),                                     -- added by LF
  5     sid        VARCHAR2 (7),                                     -- added by LF
  6     CONSTRAINT chk_grade CHECK (grade IN ('A', 'B', 'C')),
  7     CONSTRAINT fk_sec FOREIGN KEY (section#) REFERENCES section (section#),
  8     CONSTRAINT fk_stu FOREIGN KEY (sid) REFERENCES student (sid)
  9  );

Table created.

SQL>

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

ORA-00904-无效的标识符

来自分类Dev

'ORA-00905:缺少关键字'

来自分类Dev

缺少关键字ORA-00905

来自分类Dev

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

来自分类Dev

ORA-00904解码别名上的无效标识符

来自分类Dev

ORA-00904:子查询中的标识符无效

来自分类Dev

SQL错误:ORA-00904:“ CATEGORYID”:无效的标识符”

来自分类Dev

ORA-00904嵌套选择的无效标识符

来自分类Dev

SQL错误:ORA-00904:“ TIMESTAMP”:标识符无效

来自分类Dev

Oracle无效标识符ORA-00904

来自分类Dev

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

来自分类Dev

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

来自分类Dev

ORA-00904:“ DISCIPLINE”。“ SPORT_NO”:无效的标识符

来自分类Dev

ORA-00904无效的标识符和列歧义

来自分类Dev

SQL错误:ORA-00904:“ TIMESTAMP”:标识符无效

来自分类Dev

ORA-00904:无效的标识符(SP)

来自分类Dev

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

来自分类Dev

SQL错误:ORA-00904 ::无效的标识符3

来自分类Dev

模糊的ORA-00904无效的标识符错误

来自分类Dev

TOAD 无效标识符错误 ORA-00904

来自分类Dev

ORA-00904 无效标识符错误 Teradata

来自分类Dev

无效的标识符 SQL ORA-00904

来自分类Dev

Impdp ora-00904 无效标识符

来自分类Dev

ORA-00904: 映射问题导致标识符无效

来自分类Dev

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

来自分类Dev

ORA-00904“无效标识符”,用于group by子句中的标识符

来自分类Dev

ORA-00904“无效的标识符”但查询中存在标识符

来自分类Dev

收到ORA-00904无效的标识符错误,但标识符已创建

来自分类Dev

如何修复“ ORA-00904:“ Y”:无效的标识符00904。00000-“%s:无效的标识符”“?

Related 相关文章

热门标签

归档