2011-05-28 43 views
6

我想添加約束表,但加入我要檢查的是,約束在表中的現有或添加約束「CHK_DATES_VALID」我以前不 像檢查在表中增加約束(Oracle)的

IF NOT EXISTS(some condition) 

ADD CONSTRAINT CHK_DATES_VALID 
CHECK ((DATE_NORMAL != 'n' AND DATE_NORMAL != 'N') OR 
     (DATE_SCHEDULED != 'n' AND DATE_SCHEDULED != 'N') OR 
     (DATE_WINDOW != 'n' AND DATE_WINDOW != 'N')); 

前需要檢查的是,是否存在或不約束 請引導我做出這種鎮靜。

回答

7

你不能像那樣使用IF。

您需要檢查系統視圖ALL_CONSTRAINTS,以找出是否如果已經定義了約束:因爲你不能在PL/SQL塊直接運行DDL

DECLARE 
    num_rows integer; 
BEGIN 
    SELECT count(*) 
     INTO num_rows 
    FROM all_constraints 
    WHERE constraint_name = 'CHK_DATES_VALID'; 

    IF num_rows = 0 THEN 
     EXECUTE IMMEDIATE 'ALTER TABLE the_table 
     ADD CONSTRAINT CHK_DATES_VALID 
     CHECK ((to_upper(DATE_NORMAL) != ''N'') OR 
       (to_upper(DATE_SCHEDULED) != ''N'') OR 
       (to_upper(DATE_WINDOW) != ''N''))'; 
    END IF; 
END; 
/

的EXECUTE IMMEDIATE是必要的。

更簡單的解決方案是簡單地添加約束並捕獲發生的任何錯誤。

+0

嗨它的服用時間,因爲我有一千個表和一千個約束,請告訴我任何其他soln – jaiswal 2011-05-28 20:24:49

+0

沒有其他解決方案來添加約束 – 2011-05-28 21:09:12

+0

謝謝,它的工作現在 – jaiswal 2011-05-29 08:15:16