Oracle 数据库查询问题 - 插入数据的问题
Posted
技术标签:
【中文标题】Oracle 数据库查询问题 - 插入数据的问题【英文标题】:Oracle database query issue - issues inserting data 【发布时间】:2015-03-08 19:53:39 【问题描述】:我目前正在做一个数据库练习练习,但我在输入数据时遇到了问题,因为我收到了外键错误。
这里列出了我的成功
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','731 Fondren,Houston,TX','M',30000,'333445555',5) 错误报告 SQL 错误:ORA-02291:违反完整性约束 (PA96.FK_D_NUM) - 未找到父键 02291. 00000 - “违反完整性约束 (%s.%s) - 未找到父键” 原因:外键值没有匹配的主键值。 行动:删除外键或添加匹配的主键。
好的,看来我需要先处理部门表。仍然遇到同样的问题
我得出一个结论,我需要引用我插入的每个数据。
我得到的示例查询提示是:
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】:就像您注意到需要在员工之前插入部门一样:
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
【讨论】:
以上是关于Oracle 数据库查询问题 - 插入数据的问题的主要内容,如果未能解决你的问题,请参考以下文章