Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql ORA-02270:此列列表没有匹配的唯一键或主键_Sql_Oracle - Fatal编程技术网

Sql ORA-02270:此列列表没有匹配的唯一键或主键

Sql ORA-02270:此列列表没有匹配的唯一键或主键,sql,oracle,Sql,Oracle,我有以下SQL代码 CREATE TABLE EMPLOYEES ( empID NUMBER NOT NULL, ssn CHAR(10) NOT NULL, fname VARCHAR(20) NOT NULL, minit VARCHAR(15), lname VARCHAR(30) NOT NULL, gender CHAR(2), email VARCHAR(40), street

我有以下SQL代码

CREATE TABLE EMPLOYEES
(
empID       NUMBER     NOT NULL,
ssn         CHAR(10)    NOT NULL,
fname       VARCHAR(20) NOT NULL,
minit       VARCHAR(15),
lname       VARCHAR(30) NOT NULL,
gender      CHAR(2),
email       VARCHAR(40),
street      VARCHAR(40),
postalCode  NUMBER,
city        VARCHAR(20),
country     VARCHAR(20),
job         VARCHAR(20),
salary      NUMBER(*,2),
birthdate   DATE,
specialization   VARCHAR(30),
username         VARCHAR(25),
password         VARCHAR(25),
levelOfClearance VARCHAR(20),

PRIMARY KEY (empID),
UNIQUE      (ssn)
);

CREATE TABLE PATIENTS
(
patientID   NUMBER NOT NULL,
healthInsID NUMBER,
fname       VARCHAR(20) NOT NULL,
minit       VARCHAR(15),
lname       VARCHAR(30) NOT NULL,
gender      CHAR(1),
email       VARCHAR(40),
street      VARCHAR(40),
postalCode  CHAR(4),
city        VARCHAR(20),
country     VARCHAR(20),

PRIMARY KEY  (patientID),
FOREIGN KEY  (healthInsID) REFERENCES HEALTH_INSURANCES (healthInsID)
ON DELETE SET NULL    
);

CREATE TABLE APPOINTMENTS
(
appointmentID NUMBER NOT NULL,
empID NUMBER NOT NULL,
appointmentDate DATE,
cost NUMBER(*,2),
patientID NUMBER,

PRIMARY KEY (appointmentID),
FOREIGN KEY (empID) REFERENCES EMPLOYEES (empID)
ON DELETE SET NULL,
FOREIGN KEY (patientID) REFERENCES PATIENTS
ON DELETE SET NULL
);

CREATE TABLE SYMPTOMS
(
appointmentID NUMBER  NOT NULL,
description VARCHAR(100),

PRIMARY KEY (appointmentID),
FOREIGN KEY (appointmentID) REFERENCES APPOINTMENTS (appointmentID)
ON DELETE SET NULL
);

前3个表创建时没有问题,但最后一个表显示错误“ORA-02270:此列列表没有匹配的唯一或主键”。我已经搜索了很多,但还没有找到任何解决方案。

不确定,但我认为问题可能出在您的
症状表的最后一行

CREATE TABLE SYMPTOMS
(
appointmentID NUMBER  NOT NULL,  <-- it's NOT NULL
description VARCHAR(100),

PRIMARY KEY (appointmentID),
**FOREIGN KEY (appointmentID) REFERENCES APPOINTMENTS (appointmentID)
ON DELETE SET NULL** <-- here you are saying -- set to null on delete 
);
看到这个提琴样本了吗


问题在于症状表,您的PK可以设置为null(这是不可能的) 我建议您执行以下操作:

  • 添加症状ID列作为主键(或将description和appointmentID的组合设置为主键)
  • 设置删除级联或不设置删除策略:如果删除约会,将导致错误,并引发需要在代码中处理的异常 sql fiddle:


    你看到了吗?你确定吗?我尝试创建与您相同的表(除了表PATIENTS中的外键-您不定义HEALTH_INSURANCES表),但没有任何问题。他是小提琴手:@user3118957,那么有件事你没有提到。根据你的帖子,应该没问题。如果您希望我们进一步帮助,请提供更多详细信息。
    CREATE TABLE SYMPTOMS
    (
    appointmentID number  NOT NULL,
    description VARCHAR(100),
    FK_APT_APTID number null,  
    
    PRIMARY KEY (appointmentID),
    FOREIGN KEY (FK_APT_APTID) REFERENCES APPOINTMENTS (appointmentID)
    ON DELETE set null
    );
    
    CREATE TABLE SYMPTOMS
    (
    SymptomID     NUMBER NOT NULL,
    appointmentID NUMBER  NOT NULL,
    description VARCHAR(100),
    
    PRIMARY KEY (appointmentID),
    FOREIGN KEY (appointmentID) REFERENCES APPOINTMENTS (appointmentID)
    );