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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- oracle學習(2)-Oracle約束的關鍵字Enable/Disable/Validate/NovalidateOracle
- 主鍵約束設定Enable Novalidate時報錯
- [20240228]約束novalidate.txt
- Oracle約束constraint的三個屬性應用OracleAI
- Oracle約束Oracle
- oracle 約束Oracle
- oracle中的約束Oracle
- Oracle定義約束 外來鍵約束Oracle
- oracle的延遲約束Oracle
- oracle 約束詳解Oracle
- Oracle約束簡介Oracle
- oracle鍵約束控制Oracle
- 修改oracle的約束欄位Oracle
- 【SQL】15 SQL 約束(Constraints)、NOT NULL 約束、UNIQUE 約束、PRIMARY KEY 約束、FOREIGN KEY 約束、CHECK 約束、DEFAULT約束SQLAINull
- oracle 註釋和約束Oracle
- 新增/刪除約束(Oracle)Oracle
- Oracle主鍵約束、唯一鍵約束、唯一索引的區別(轉)Oracle索引
- oracle外來鍵約束的總結Oracle
- Oracle約束的學習與測試Oracle
- Oracle 11g系列:約束Oracle
- Oracle如何管理帶約束的B樹索引Oracle索引
- Oracle唯一約束中NULL的處理OracleNull
- oracle約束學習經典案例Oracle
- oracle 約束 enable validate 檢查Oracle
- 用函式索引構造特殊的約束函式索引
- Oracle中的約束簡單入門試驗Oracle
- Oracle外來鍵約束中NULL的處理OracleNull
- Oracle constraints type 約束型別OracleAI型別
- Oracle基礎 11 約束 constraintsOracleAI
- oracle主外來鍵鎖_lock_約束Oracle
- Oracle 9i 約束條件(轉)Oracle
- SQL約束SQL
- 綜合約束
- 啟用約束時使用exceptions表來跟蹤不符合約束的資料並修正Exception
- NULL和唯一約束UNIQUE的對應關係Null
- 查詢oracle表的資訊(表,欄位,約束,索引)Oracle索引
- 如何在ORACLE中修改表的約束條件啊Oracle
- oracle 表遷移方法 (二) 約束不失效Oracle