尝试进行分配但卡在ORA-00906上:缺少左括号

时间:2018-11-30 19:23:26

标签: sql oracle11g

我正在上DB课程,这是我要做的第一批作业之一,但是我的REL_CURSOS_ALUMNOS查询中某处存在一个问题,最终导致ORA-00906错误。

REL_CURSOS_ALUMNOS是“一对多” 1'CURSOS(Id_Curso)ALUMNOS(NIF_Alumno)的关系表。

这是我到目前为止的查询:

CREATE TABLE PROFESORES(
  NIF_Profesor VARCHAR2(15) CONSTRAINT Prof_NIF_PK PRIMARY KEY,
  Nombre VARCHAR2(30),
  Apellido1 VARCHAR2(30),
  Apellido2 VARCHAR2(30),
  Direccion VARCHAR2(4000),
  Titulacion VARCHAR2(500),
  Salario FLOAT(10) CONSTRAINT Prof_sal_NN NOT NULL
);

CREATE TABLE ALUMNOS(
    NIF_Alumno VARCHAR2(15) CONSTRAINT Alum_NIF_PK PRIMARY KEY,
    Nombre VARCHAR2(30),
    Apellido1 VARCHAR2(30),
    Apellido2 VARCHAR2(30),
    Direccion VARCHAR2(4000),
    Sexo CHAR(1),
    Fecha_Nacimiento DATE
    );

CREATE TABLE CURSOS (
    Id_Curso VARCHAR2(15) CONSTRAINT Curs_Id_PK PRIMARY KEY,
    Nombre VARCHAR2(400) UNIQUE,
    NIF_Profesor VARCHAR2(15) REFERENCES PROFESORES (NIF_Profesor),
    Max_Alumnos NUMBER(5),
    Inicio_Fecha DATE,
    Final_Fecha DATE,
    Num_Horas NUMBER(10) NOT NULL,
    CONSTRAINT Curs_FechasIncorrectas CHECK (Final_Fecha > Inicio_Fecha));

CREATE TABLE REL_CURSOS_ALUMNOS (
  Id_Curso VARCHAR2(15) REFERENCES CURSOS(Id_Cursos),
  NIF_Alumno VARCHAR2(15) REFERENCES ALUMNOS(NIF_Alumno) CONSTRAINT RCA_NIFAlum_UQ UNIQUE,
UNIQUE KEY (Id_Curso, NIF_Alumno));

谢谢。

1 个答案:

答案 0 :(得分:2)

最终表定义中有一些小错误:

CREATE TABLE REL_CURSOS_ALUMNOS (
  Id_Curso VARCHAR2(15) REFERENCES CURSOS(Id_Curso),
  NIF_Alumno VARCHAR2(15) REFERENCES ALUMNOS(NIF_Alumno) CONSTRAINT RCA_NIFAlum_UQ UNIQUE,
  UNIQUE (Id_Curso, NIF_Alumno)
);

您的特定问题是由KEY引起的。唯一约束定义不需要这样做。此外,CURSOS的引用是id_curso,而不是id_cursos

我同时保留了两个unique定义。但是,如果NIF_Alumno是唯一的,那么(Id_Curso, NIF_Alumno)对也是唯一的,因此约束是多余的。