Oracle数据库查询问题 - 插入数据的问题

时间:2015-03-08 19:53:39

标签: sql oracle

我目前正在进行数据库练习,但由于出现外键错误,我在输入数据时出现问题。

以下是我的成功列表

CREATE TABLE EMPLOYEE 
(
    FNAME VARCHAR2(15) NOT NULL,
    MINIT CHAR,LNAME VARCHAR2(15) NOT NULL,
    SSN CHAR(9) NOT NULL,
    BDATE DATE,
    ADDRESS VARCHAR2(30),
    SEX CHAR(1),
    SALARY NUMBER(10,2),
    SUPER_SSN CHAR(9),
    DNO NUMBER NOT NULL,

    CONSTRAINT EMPPK PRIMARY KEY (SSN) DISABLE,
    CONSTRAINT EMPSUPERFK FOREIGN KEY (SUPER_SSN) REFERENCES EMPLOYEE(SSN) DISABLE
);
  

表创建成功

CREATE TABLE DEPARTMENT 
(
     DNAME VARCHAR2(15) NOT NULL,
     DNUMBER NUMBER  NOT NULL,
     MGR_SSN CHAR(9) NOT NULL,
     MGR_START_DATE DATE,
     CONSTRAINT DEPTPK PRIMARY KEY (DNUMBER) DISABLE,
     CONSTRAINT DEPTMGRFK FOREIGN KEY (MGR_SSN) REFERENCES EMPLOYEE(SSN) DISABLE
);
  

表创建成功

ALTER TABLE DEPARTMENT ENABLE constraint DEPTPK;
  

表格改变成功

alter table EMPLOYEE 
  add constraint fk_d_num 
  FOREIGN KEY (DNO) references DEPARTMENT (DNUMBER);
  

表格改变成功

select distinct(TABLE_NAME), constraint_name, constraint_type, status
from all_constraints 
where TABLE_NAME in('EMPLOYEE', 'DEPARTMENT');

成功显示包含状态和所有

的表格

现在是时候进行数据插入了

我使用了文档中的命令

insert into EMPLOYEE 
values ('Jonn', 'B', 'Smith','123456789', '09-FEB-1965', '731 Fondren, Houston, TX','M', 30000, '333445555', 5)

我得到的错误状态

  

从命令行中的第1行开始出错 -
  插入EMPLOYEE值(' Jonn',' B',' Smith',' 123456789',' 09-FEB-1965& #39;,' 731 Fondren,Houston,TX',' M',30000,' 333445555',5)
  错误报告
  SQL错误:ORA-02291:违反了完整性约束(PA96.FK_D_NUM) - 未找到父密钥

  02291. 00000 - "违反完整性约束(%s。%s) - 未找到父键"
  原因:外键值没有匹配的主键值   操作:删除外键或添加匹配的主键。

好的,好像我需要先使用department表。仍然会遇到同样的问题

我得出结论,我需要引用我插入的每个数据。

我给出的示例查询提示是:

INSERT INTO Employee (Fname, Minit, Lname, Ssn, Bdate, Address, Sex, Salary, Super_ssn, Dno)
VALUES ('Franklin', 'T', 'Wong', 333445555, '1955-12-08', '638 Voss, Houston, TX', M, 40000, 888665555, 5);

我尝试过的部门表仍然失败了:

INSERT INTO Department (Dname, Dnumber, Mgr_ssn, Mgr_start_date)
VALUES ('Research', 5, 333445555, To_date('1988-05-22', ‘YYYY-MM-DD’));

我仍然失败了。我该如何解决这个问题。日期格式是我需要的部门表和员工表,但我一直都是失败。

请有人帮忙解决这个问题。我需要将这些加载到

下面
INSERT INTO Employee (Fname, Minit, Lname, Ssn, Bdate, Address, Sex, Salary, Super_ssn, Dno) 
VALUES ('Jonn', 'B', 'Smith', 123456789, '1965-02-09', '731 Fondren, Houston, TX', M, 30000, 333445555, 5)

进入Employee

INSERT INTO Department (Dname, Dnumber, Mgr_ssn, Mgr_start_date)
VALUES ('Research', 5, 333445555, '1988-05-22')

进入Department表。

使用Oracle。

谢谢。

1 个答案:

答案 0 :(得分:1)

就像您注意到需要在员工面前插入部门:

INSERT INTO Department (Dname, Dnumber, Mgr_ssn, Mgr_start_date)
VALUES ('Research', 5, 333445555, To_date('1988-05-22', 'YYYY-MM-DD'));

INSERT INTO EMPLOYEE VALUES 
('Jonn', 'B', 'Smith','123456789', '09-FEB-1965', '731 Fondren, Houston, TX','M', 30000, '333445555', 5);

插入部门的问题是此部分To_date('1988-05-22', ‘YYYY-MM-DD’)包含无效字符(日期格式文字周围的引号)。它应该像上面一样。

Sample SQL Fiddle