【发布时间】:2016-04-13 19:49:37
【问题描述】:
我有一个应用程序应该从订单表中删除订单并将已删除订单的详细信息插入到两个表中:一个包含订单的详细信息,第二个包含订单的详细信息。问题来自表 DELETE_ORDERS_D,因为它引发了以下异常:
02292. 00000 - "integrity constraint (%s.%s) violated - child record
found"
*Cause: attempted to delete a parent key value that had a foreign
dependency.
订单
create table orders (
ono number(5) not null primary key,
cno number(5) references customers,
eno number(4) references employees,
received date,
shipped date);
订单详情
create table odetails (
ono number(5) not null references orders,
pno number(5) not null references parts,
qty integer check(qty > 0),
primary key (ono,pno));
零件
create table parts(
pno number(5) not null primary key,
pname varchar2(30),
qoh integer check(qoh >= 0),
price number(6,2) check(price >= 0.0),
olevel integer);
样本数据
insert into orders values
(1020,1111,1000,'10-DEC-11','12-DEC-11');
insert into orders values
(1021,1111,1000,'12-JAN-12','15-JAN-12');
insert into orders values
(1022,2222,1001,'13-FEB-12','20-FEB-12');
insert into orders values
(1023,3333,1000,'12-MAR-12',null);
insert into odetails values
(1020,10506,1);
insert into odetails values
(1020,10507,1);
insert into odetails values
(1020,10508,2);
insert into odetails values
(1020,10509,3);
insert into odetails values
(1021,10601,4);
insert into odetails values
(1022,10601,1);
insert into odetails values
(1022,10701,1);
insert into odetails values
(1023,10800,1);
insert into odetails values
(1023,10900,1);
insert into parts values
(10506,'Land Before Time I',200,19.99,20);
insert into parts values
(10507,'Land Before Time II',156,19.99,20);
insert into parts values
(10508,'Land Before Time III',190,19.99,20);
insert into parts values
(10509,'Land Before Time IV',60,19.99,20);
insert into parts values
(10601,'Sleeping Beauty',300,24.99,20);
insert into parts values
(10701,'When Harry Met Sally',120,19.99,30);
insert into parts values
(10800,'Dirty Harry',140,14.99,30);
insert into parts values
(10900,'Dr. Zhivago',100,24.99,30);
表格生成错误如下
CREATE TABLE DELETE_ORDERS_D (
ONO number(5) not null references orders,
PNO number(5) not null references parts,
QTY integer check(qty > 0),
CONSTRAINT DEL_ODETAILS_pk PRIMARY KEY (ONO,PNO));
约束优化问题
select * from all_constraints
where owner = 'SCOTT'
and constraint_name = 'SYS_C007539';
CONSTRAINT_TYPE TABLE_NAME
------------------ -----------------
R DELETE_ORDERS_D
你能帮我解决这个问题吗!
【问题讨论】:
-
你能实际显示你使用的删除命令吗?
-
我将订单号传递给删除订单和订单详细信息的过程,并将它们的详细信息插入到两个不同的表中,其中一个是 Delete_orders_D。程序太长,无法发布问题!
-
好吧,如果没有实际引发此错误的代码,除了猜测之外,没有人能给出答案。尽管错误非常简单,但在您的过程中的某处,您正试图删除 DELETE_ORDERS_D 上的订单或部件上的注册表,
-
您好 Jorge,感谢您的帮助,如果我们可以打开一个聊天室,然后我可以将程序发送给您,会更好吗?但是,如果我发布程序,它看起来不会很好,因为它太长了!
-
不需要(您对 Bob 的回答的评论提供了线索)。我建议您在 (1020,1021,1022,1023) 中 ONO 的 DELETE_ORDERS_D 表上运行选择命令,看看那里是否有注册表。如果是,这是您的问题,您必须查看您的程序并在删除订单表之前执行此检查。请注意,由于您的示例数据,我建议了这些 ID,它可能是其他 ID。我建议您查看您的程序并获取订单表上发生删除的行并将其添加到您的问题中,前后几行。不需要整个代码。