關于sql腳本導入Oracle時重復生成check約束的問題解決
前言
最近在工作中一位細心的同事發(fā)現(xiàn)產(chǎn)品的全量sql腳本中有一些重復的check約束檢查,就像下圖這樣的

重復腳本
怪異之處還在于,每次執(zhí)行一遍該腳本,然后導出腳本,在導出腳本中重復的次數(shù)就會增加一遍。通過navicat,最終確認每導入一次就會新增加一條重復的check約束,如下圖所示

navicat
這個全量腳本是直接從數(shù)據(jù)庫中導出的,為了方便導入其他的Oracle數(shù)據(jù)庫中,從產(chǎn)品的出貨庫導出時手動去掉了服務名、雙引號。
通過如下步驟可復現(xiàn)該問題:
1.創(chuàng)建表
CREATE TABLE PD_WEB_FILEUPLOAD_CHUNK ( ID VARCHAR2(32 BYTE) NOT NULL , MD5 VARCHAR2(32 BYTE) DEFAULT NULL NULL , CHUNK NUMBER DEFAULT NULL NULL , FILE_DIR VARCHAR2(200 BYTE) NOT NULL )
可以看到上面的腳本中有NOT NULL的標識,執(zhí)行完后在navicat中可以看到結果是這樣的

navicat
注意看,這里的check約束是帶雙引號的。
2.執(zhí)行增加check約束的腳本
ALTER TABLE PD_WEB_FILEUPLOAD_CHUNK ADD CHECK (ID IS NOT NULL); ALTER TABLE PD_WEB_FILEUPLOAD_CHUNK ADD CHECK (FILE_DIR IS NOT NULL);
執(zhí)行了兩遍后,結果如圖所示

navicat
測試到這里,以為最終終于找到了原因,確認為雙引號的問題。抱著嚴謹?shù)膽B(tài)度,再次確認了一下
3.執(zhí)行帶雙引號的check約束的腳本
ALTER TABLE PD_WEB_FILEUPLOAD_CHUNK ADD CHECK ("ID" IS NOT NULL);
ALTER TABLE PD_WEB_FILEUPLOAD_CHUNK ADD CHECK ("FILE_DIR" IS NOT NULL);
結果如圖所示:

navicat
靠!居然還是會重復生成!
解決方法
驗證到這里,算是找出了原因。
在全量導出的腳本中,創(chuàng)建表的腳本中已經(jīng)隱含了檢查約束,如果再顯示的添加檢查約束就會重復生成。所以,解決辦法為需要手動刪除所有顯示的檢查約束。
總結
以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學習或者工作能帶來一定的幫助,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。
相關文章
oracle數(shù)據(jù)庫的基本使用教程(建表,操作表等)
這篇文章主要給大家介紹了關于oracle數(shù)據(jù)庫的基本使用(建表,操作表等)的相關資料,包含了Oracle創(chuàng)建表(create table as)使用方法、操作技巧、實例演示和注意事項,需要的朋友可以參考下2024-01-01
Windows系統(tǒng)下Oracle數(shù)據(jù)庫每天自動備份
linux和unix下面使用shell可以很方便實現(xiàn),如果windows環(huán)境下可以結合計劃任務實現(xiàn)自動備份,下面通過本文給大家介紹實現(xiàn)方法,需要的朋友參考下吧2016-12-12
深入探討:oracle中方案的概念以及方案與數(shù)據(jù)庫的關系
本篇文章是對oracle中方案的概念以及方案與數(shù)據(jù)庫的關系進行了詳細的分析介紹,需要的朋友參考下2013-05-05
Oracle ORA 07445 evaopn2()+128錯誤問題的解決方案
這篇文章主要介紹了Oracle ORA 07445 evaopn2()+128錯誤問題的解決方案,非常不錯,具有參考借鑒價值,需要的朋友可以參考下2016-09-09

