oracle约束应用实例,oracle 约束的novalidate 应用
在項目開發過程中,遇到這樣一個需求:
在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;
總結
以上是生活随笔為你收集整理的oracle约束应用实例,oracle 约束的novalidate 应用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: php %3f,PHP
- 下一篇: oracle dba笔试,一个好资企业的