12
返回列表 发新帖
楼主: zw_java

完整性约束死锁问题 请帮忙解决???

[复制链接]
论坛徽章:
1
授权会员
日期:2005-10-30 17:05:33
11#
 楼主| 发表于 2002-1-28 14:06 | 只看该作者

谢谢你们!!!

我用了这些trigger 已经解决了问题! 谢谢
对父级修改和本级修改区别对待简单,就是有点儿不方便,
我有好几十个关联表,那要类似包好几十个,虽说可集成在
一个包中,也是不晓得工作量!

使用道具 举报

回复
论坛徽章:
1
管理团队2006纪念徽章
日期:2006-04-16 22:44:45
12#
发表于 2002-1-29 09:50 | 只看该作者
其实对于关联表的处理可以把触发器变成用程序控制。
比如在关联表之间加上完整性约束,即alter table CUST
    add constraint FK_CUST_DPTID_DEPT foreign key  (DPT_ID)
       references DEPT (DPT_ID) on delete cascade
插入操作:跟触发器一样,先判断父表中是否存在;
删除操作:可不用考虑;
修改操作:其实可加一个状态字段来控制;
这样减少表的复杂程度,便于维护和管理。
(个人想法,仅供参考)

使用道具 举报

回复
论坛徽章:
1
授权会员
日期:2005-10-30 17:05:33
13#
 楼主| 发表于 2002-1-29 15:57 | 只看该作者

加标识字段也好! 你给我的方法改进了些,加了个数组

CREATE TYPE "NAVTECH"."TABLENO_VA" AS VARRAY (30) OF NUMBER(30);
/
CREATE OR REPLACE  PACKAGE "NAVTECH"."IFNESTUPDATE"       AS
  PROCEDURE InitNestLevel(TABLENO NUMBER);
  FUNCTION GetNestLevel(TABLENO NUMBER) return number;
  PROCEDURE NextNestLevel(TABLENO NUMBER);
  PROCEDURE PreviousNestLevel(TABLENO NUMBER);
END IfNestUpdate;
/
CREATE OR REPLACE  PACKAGE BODY "NAVTECH"."IFNESTUPDATE"  AS
  I NUMBER;
  NestLevel TABLENO_VA :=TABLENO_VA(NULL,NULL,NULL,NULL,NULL,
                                    NULL,NULL,NULL,NULL,NULL,
                                    NULL,NULL,NULL,NULL,NULL,
                                    NULL,NULL,NULL,NULL,NULL,
                                    NULL,NULL,NULL,NULL,NULL);

  PROCEDURE InitNestLevel(TABLENO NUMBER) IS
  BEGIN
    NestLevel(TABLENO) :=0;
  END;


-- Function to return the trigger nest level
  FUNCTION GetNestLevel(TABLENO NUMBER) RETURN NUMBER AS
  BEGIN
  IF NestLevel(TABLENO) IS NULL THEN
    NestLevel(TABLENO) := 0;
  END IF;
  RETURN(NestLevel(TABLENO));
  END;

-- Procedure to increase the trigger nest level
  PROCEDURE NextNestLevel(TABLENO NUMBER) AS
  BEGIN
    IF NestLevel IS NULL THEN
      NestLevel(TABLENO) := 0;
    END IF;
    NestLevel(TABLENO) := NestLevel(TABLENO) + 1;
  END;

-- Procedure to decrease the trigger nest level
  PROCEDURE PreviousNestLevel(TABLENO NUMBER) AS
  BEGIN
    NestLevel(TABLENO) := NestLevel(TABLENO) - 1;
  END;

END IfNestUpdate;

使用道具 举报

回复
论坛徽章:
0
14#
发表于 2002-1-29 20:53 | 只看该作者
在8i里面好象可以设置defer constraint(延迟约束),constraint在commit的时候检查。具体用法你可以查一下手册。

使用道具 举报

回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

TOP技术积分榜 社区积分榜 徽章 团队 统计 知识索引树 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 未成年人举报专区 
京ICP备16024965号-8  北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表