ORACLE之莫名---ORA-02290: 違反檢查約束條件


  最近碰到一個十分棘手的問題,Java程序插入空數據到oracle時報ORA-02290: 違反檢查約束條件(NAMIBIAWEB.SYS_C0069731),【ORA-02290: check constraint (NAMIBIAWEB.SYS_C0069731) violated】這明顯是在設置不可為空的字段上插入為空內容導致,但是檢查數據庫表后發現,字段設置為可為空,又查看了建表語句發現該字段依然是可以為空,同時有一個奇怪的現象,報錯信息中的SYS_C0069731在數據庫表中查詢不到信息。

  針對這一莫名問題的報錯,我開始查看程序中關於數據庫插入處是否存在字段非空約束的內容,結果並未發現任何約束信息。

  我使用SQL語句直接在數據庫中插入空數據,報錯信息為ORA-xxx:check xxxx,這里捕捉到一個關鍵信息check,check約束也是oracle數據庫中的一種約束條件,對於oracle數據庫來說約束有五種類型: 1、主鍵約束( Primary key, 簡稱 PK) 、 2、非空約束( not null , 簡稱 NN ) 、 3、唯一約束( Unique , 簡稱 UK ) 、4、檢查約束( Check , 簡稱 CK ) 、 5、外鍵( Foreign key, 簡稱 FK ),此處出現的check屬於其中。

  解決方法:

  首先要確定約束在哪一字段上,使用sql:select * from user_constraints where table_name='TABLENAME',(這里要注意TABELNAME必須是大寫,表示業務表名稱),這樣數據表所有的約束都會呈現出來,如圖紅框中即為該報錯對應的約束條件

  找到報錯中SYS_C00105792約束條件,若本sql確能查詢出該SYS_C00105792,刪除該check約束問題也就可以解決,查看search_condition字段可以確定該約束使用在哪個字段上。

  刪除check語句:ALTER TABLE TABLENAME DROP CONSTRAINT SYS_C0069731。【注:這里不需要使用引號


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM