oracle约束应用实例,oracle 约束的novalidate 应用

本文探讨了在项目开发中如何通过Oracle的约束功能和触发器实现数据规则检查,比较了两者性能影响和处理历史数据冲突的方法。作者介绍了使用约束直接添加`MIN>0`和`MAX>MIN`条件,以及遇到历史数据问题时采用`NOVALIDATE`解决的过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

在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;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值