关于级联删除个人总结

级联删除在系统开发中是很常见的处理方法,应用系统中很多以业务逻辑建立起来的实体集合形成一个整体,但是他们分布在不同的表中,一个实体消失了(或这是被软删除了),那么跟他对应的(或者隶属于它)一切其他属性都应盖被删除(正常情况下 :( )。
这里姑且举一个例子:
[b]删除酒店。[/b]
酒店拥有:酒店法人(user),酒店房间(room),该酒店的房间类型(rtypes),
酒店房间的照片(rphtoto),酒店照片(hphoto),床位(beds)。
他们的结构是;
1,酒店法人。
:?:
2,酒店本体。
:?: :?:
3,酒店房间 , 酒店照片。
:?: :?: :?:
4,房间类型 , 房间照片 , 床位。
因此,删除酒店应该,自底向上的删除,这样才能将酒店一切信息删除干净,不会出现断层而遗留报废数据。
[code]
procedure deletehotel(p_USERID NUMBER,
P_RESULT OUT NUMBER
)
AS
BEGIN
P_RESULT:=-1;
---删除照片
update photoes p
set p.valid=1
where exists(

select /*+RULE*/ 1
from hotel h
where h.hotelid=p.hotelid
and h.valid=0
and h.userid=p_userid
)
and p.valid=0;
---删除房间类型
update roomtype rt
set rt.valid=1
where exists(
select /*+RULE*/ 1
from hotel h
where h.hotelid=rt.hotelid
and h.valid=0
and h.userid=p_userid
)
and rt.valid=0;

----删除床位
delete from beds b
where exists(
select 1
from hotel h,rooms r
where r.hotelid=h.hotelid
and h.valid=0
and r.valid=0
and b.roomid=r.roomid
and h.userid=p_USERID
);
----删除房间
update rooms t
set t.valid=1
where t.valid=0
and exists(select /*+RULE*/1
from hotel h
where h.hotelid=t.hotelid
and h.valid=0
and h.userid=p_userid
);
---删除饭店
update hotel h
set h.valid=1
where h.valid=0
and h.userid=p_userid;
---删除用户
update emsuser u
set u.valid=1
where (u.valid=0 or u.valid=2)
and u.userid=p_userid;
p_result:=0;
END deletehotel;
[/code]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值