正在看的ORACLE教程是:Oracle約束管理指令碼。
作為一個Oracle資料庫管理員,會碰到這樣的資料庫管理需求,停止或者開啟目前使用者(模式)下所有表的約束條件和觸發器。這在資料庫的合并以及對資料庫系統的代碼錶中某些代碼的修改時需要做的工作之一。
我們來看這樣一種實際資料庫工作業務需求,這在目前的許多應用中是非常實際的。某地區銀行資料,目前採用市級資料集中,隨著電腦網路技術的不斷提高以及對服務水平的要求,提出了省級乃至國家級的資料集中。除了應用需要修改以外,對於資料庫管理員來講,最重要的工作就是對各地分散管理的資料庫統一集中到一個或者幾個集中資料庫中。此時就需要整理以前各地各自為政的代碼錶為一個統一的代碼錶以及資料庫的最後集中合并。
對Oracle資料庫管理員來講,這樣的資料維護工作,在更新代碼錶中代碼或者合并資料之前,首先要作的工作就是將系統中某使用者下所有的外鍵或觸發器停止,處理完資料後,再開啟這些關閉的外鍵和觸發器。針對這樣的工作需求,本文給出了下面兩個SQL指令碼:(1) 系統中某模式或使用者下外鍵或者觸發器的管理指令碼;(2) 外鍵錯誤自動尋找指令碼。下面就來詳細介紹這兩個指令碼。
一、約束管理指令碼
該指令碼可用來管理當前登入使用者下的所有外鍵和觸發器的開啟和關閉,此處沒有處理主鍵和唯一約束條件,該指令碼稍加修改就可以處理主鍵和唯一約束條件,但這裡建議最好不要在隨意停止主鍵或唯一約束條件後,進行資料維護。
指令碼運行方法如下(SQL/PLUS):
其中,參數as_alter只能是“ENABLE”或者“DISABLE”,否則程式提示錯誤。當參數為“ENABLE”時,表示將當前模式下所有的外鍵和觸發器開啟,相反“DISABLE”就是將當前模式下所有的外鍵和觸發器關閉。
附預存程序指令碼:
判斷輸入參數是否為DISABLE或者是ENABLE,如果是的話,就繼續處理,否則退出過程,給出提示
IF (UPPER(AS_ALTER) = 'DISABLE' OR UPPER(AS_ALTER) = 'ENABLE') THEN
OPEN C_CON;
[NextPage]
目前使用者下外鍵的處理 ENABLE或者 DISABLE
二、約束錯誤自動尋找指令碼
一般,資料庫管理員在對資料進行維護時,如新資料的匯入前,首先要關閉所有的外鍵和觸發器,資料成功匯入後,再開啟匯入前關閉的外鍵和觸發器。這時經常會遇到錯誤號碼為ORA-02298的“未找到父項關鍵字”的錯誤。該錯誤的原因就是資料庫表中出現了不能滿足外鍵約束條件的記錄。這裡,另外給出了一個指令碼(P_CON_ERR)用來自動尋找造成這類錯誤的原因,也就是找出不滿足外鍵約束條件的欄位值。
該預存程序可單獨運行,同時在前面介紹的預存程序P_ALTERCONS中也進行了調用,在預存程序P_ALTERCONS中,可以看到在開啟外鍵時,如果出現錯誤號碼為ORA-02298的錯誤,就調用該預存程序,自動尋找造成外鍵不能啟動的原因。
下面是單獨運行該預存程序的例子,在SQL/PLUS環境下:
PL/SQL過程已成功完成。
其中,FK_SB_HJJL_RELATION__SB_PZXH為出現錯誤的外鍵名稱。
附預存程序指令碼:
上一頁