關(guān)于sql腳本導(dǎo)入Oracle時(shí)重復(fù)生成check約束的問題解決
前言
最近在工作中一位細(xì)心的同事發(fā)現(xiàn)產(chǎn)品的全量sql腳本中有一些重復(fù)的check約束檢查,就像下圖這樣的
重復(fù)腳本
怪異之處還在于,每次執(zhí)行一遍該腳本,然后導(dǎo)出腳本,在導(dǎo)出腳本中重復(fù)的次數(shù)就會(huì)增加一遍。通過navicat,最終確認(rèn)每導(dǎo)入一次就會(huì)新增加一條重復(fù)的check約束,如下圖所示
navicat
這個(gè)全量腳本是直接從數(shù)據(jù)庫中導(dǎo)出的,為了方便導(dǎo)入其他的Oracle數(shù)據(jù)庫中,從產(chǎn)品的出貨庫導(dǎo)出時(shí)手動(dòng)去掉了服務(wù)名、雙引號(hào)。
通過如下步驟可復(fù)現(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的標(biāo)識(shí),執(zhí)行完后在navicat中可以看到結(jié)果是這樣的
navicat
注意看,這里的check約束是帶雙引號(hào)的。
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í)行了兩遍后,結(jié)果如圖所示
navicat
測試到這里,以為最終終于找到了原因,確認(rèn)為雙引號(hào)的問題。抱著嚴(yán)謹(jǐn)?shù)膽B(tài)度,再次確認(rèn)了一下
3.執(zhí)行帶雙引號(hào)的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);
結(jié)果如圖所示:
navicat
靠!居然還是會(huì)重復(fù)生成!
解決方法
驗(yàn)證到這里,算是找出了原因。
在全量導(dǎo)出的腳本中,創(chuàng)建表的腳本中已經(jīng)隱含了檢查約束,如果再顯示的添加檢查約束就會(huì)重復(fù)生成。所以,解決辦法為需要手動(dòng)刪除所有顯示的檢查約束。
總結(jié)
以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作能帶來一定的幫助,如果有疑問大家可以留言交流,謝謝大家對(duì)腳本之家的支持。
相關(guān)文章
PL/SQL?Developer15和Oracle?Instant?Client安裝配置詳細(xì)圖文教程
PL/SQL Developer是一種集成的開發(fā)環(huán)境,專門用于開發(fā)、測試、調(diào)試和優(yōu)化Oracle PL/SQL存儲(chǔ)程序單元,比如觸發(fā)器等,這篇文章主要給大家介紹了關(guān)于PL/SQL?Developer15和Oracle?Instant?Client安裝配置的詳細(xì)圖文教程,需要的朋友可以參考下2024-04-04Drop、Delete與Trunc的區(qū)別和應(yīng)用方式
這篇文章主要介紹了Drop、Delete與Trunc的區(qū)別和應(yīng)用方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-08-08Oracle數(shù)據(jù)庫如何更改數(shù)據(jù)文件位置
這篇文章主要給大家介紹了關(guān)于Oracle數(shù)據(jù)庫如何更改數(shù)據(jù)文件位置的相關(guān)資料,Oracle數(shù)據(jù)庫的數(shù)據(jù)文件的位置和信息都被記錄在控制文件中,需要的朋友可以參考下2023-08-08Oracle查詢中OVER (PARTITION BY ..)用法
這篇文章主要介紹了Oracle查詢中OVER (PARTITION BY ..)用法,內(nèi)容和代碼大家參考一下。2017-11-11Oracle SqlPlus設(shè)置Login.sql的技巧
sqlplus在啟動(dòng)時(shí)會(huì)自動(dòng)運(yùn)行兩個(gè)腳本:glogin.sql、login.sql這兩個(gè)文件,接下來通過本文給大家介紹Oracle SqlPlus設(shè)置Login.sql的技巧,對(duì)oracle sqlplus設(shè)置相關(guān)知識(shí)感興趣的朋友一起學(xué)習(xí)吧2016-01-01Oracle中查看引起Session阻塞的2個(gè)腳本分享
這篇文章主要介紹了Oracle中查看引起Session阻塞的2個(gè)腳本分享,本文給出了2個(gè)腳本來查詢導(dǎo)致Session阻塞的原因,并給出Kill引起阻塞的Session方法,需要的朋友可以參考下2014-10-10