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;
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/7199859/viewspace-200321/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- [20240228]約束novalidate.txt
- [20231115]建立enable novalidate約束2.txt
- 10、Oracle中的約 束constraintOracleAI
- oracle 註釋和約束Oracle
- oracle外來鍵約束的總結Oracle
- 【SQL】15 SQL 約束(Constraints)、NOT NULL 約束、UNIQUE 約束、PRIMARY KEY 約束、FOREIGN KEY 約束、CHECK 約束、DEFAULT約束SQLAINull
- Oracle如何管理帶約束的B樹索引Oracle索引
- 約束
- 用函式索引構造特殊的約束函式索引
- Javaweb-約束-外來鍵約束JavaWeb
- MySQL 約束MySql
- 03約束
- SQL約束SQL
- 約束CONSTRAINTAI
- 聊聊Oracle外來鍵約束(Foreign Key)的幾個操作選項Oracle
- 泛型的約束理解泛型
- (10)邏輯綜合新增約束(環境約束)
- 主鍵約束、唯一約束和唯一索引索引
- 差分約束
- 約束介紹
- 綜合約束
- 用Keras中的權值約束緩解過擬合Keras
- 表的完整性約束
- Javaweb-約束的分類JavaWeb
- 約束優化的拉格朗日乘子(KKT)優化
- Eclipse中引入spring的約束EclipseSpring
- 支援向量機(SVM)的約束和無約束優化、理論和實現優化
- Javaweb-約束案例JavaWeb
- IDELAY約束測試IDE
- MySQL 欄位約束MySql
- MySQL自增約束MySql
- 完整性約束
- 外來鍵約束
- SQLServer約束介紹SQLServer
- 《學習》6約束
- 約束最佳化的拉格朗日乘子(KKT)
- Flutter原理:三棵重要的樹(渲染過程、佈局約束、應用檢視的構建等)Flutter
- mysql資料庫約束MySql資料庫
- 約束定理+質數篩