ITPub博客

首页 > Linux操作系统 > Linux操作系统 > oracle 约束的novalidate 应用

oracle 约束的novalidate 应用

原创 Linux操作系统 作者:paulyibinyi 时间:2008-03-05 09:25:14 0 删除 编辑

在项目开发过程中,遇到这样一个需求:

在tb_test表中加入触发器,实现如下规则检查
MIN>0,
MAX>MIN

如果insert或update时,数据违反规则,则抛出错误,sql语句执行不成功

这个功能用触发器可以实现,脚本如下:

create or replace trigger t_tb_test
  before insert or update on TB_test
  for each row
declare
  v_min number;

 v_diff number;

begin
  v_min:=:NEW.min;

 v_diff:=:NEW.MAX-:NEW.MIN

if v_MIN<=0 then
 RAISE_APPLICATION_ERROR(-20001,'min must bigger zero');
end if;

if v_diff<=0 then
 RAISE_APPLICATION_ERROR(-20001,'diff must bigger zero');
end if;
end t_tb_test;

但是考虑触发器对性能影响比较大,

改用oracle 自带的约束功能也可以实现 ,而且脚本简单

alter table TB_test
  add constraint GAME_TABle_test
  check (max>min);
alter table TB_test
  add constraint GAME_TABLE_test
  check (min>0);

但是在实施脚本时,报错:

ora-02290:check_constraint(gr.tb_test) violated

一检查发现有发现有历史数据不符合约束规则;

所以必须用 novalidate 功能,才能加上去 脚本如下:

alter table TB_test
  add constraint GAME_TABLE_test
  check (min>0) NOVALIDATE;

 

 

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/7199859/viewspace-200321/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
学习数据库

注册时间:2007-12-11

  • 博文量
    903
  • 访问量
    6523695