2012-08-30 72 views
3

使用PL/SQL,我構建了一個包含配置的表格,該表格根據比率定義了樣本分佈到兩個不同的集合中。它有4列:sample_type,set_1,set_2,ratio(樣本去set_1的百分比)。例如,如果一行是('走','左','右',50),這意味着對於類型爲「走路」的樣本,其中50%是「離開」,而其餘的走向「正確」。PL/SQL檢查約束:一列的值取決於另一列

我想添加一個檢查約束條件,它確保只有比例爲100時set_2爲空,即100%的樣本轉到set_1。我嘗試這樣的:

ALTER TABLE CONFIG 
ADD CONSTRAINT CHK 
CHECK (
    NOT EXISTS (SELECT 1 FROM CONFIG WHERE SET_2 IS NULL AND RATIO <> 0) 
) 

但是,Oracle不允許檢查子查詢。那麼,是否有另一種方法爲這種情況添加檢查約束?

謝謝

回答

4
ALTER TABLE CONFIG 
ADD CONSTRAINT CHK 
CHECK (
    (RATIO = 100) OR (SET_2 IS NOT NULL AND RATIO != 100) 
) 

,我不完全確定,如果它是一個必要條件,但如果終端SET_2需要在100的情況下空,那麼你會希望這樣的:

ALTER TABLE CONFIG 
ADD CONSTRAINT CHK 
CHECK (
    (SET_2 IS NULL AND RATIO = 100) OR (SET_2 IS NOT NULL AND RATIO != 100) 
) 
1

ALTER TABLE CONFIG 
ADD CONSTRAINT CHK 
CHECK (
    SET_2 IS NULL AND RATIO <> 0 
) 

工作?

+0

這將迫使終端SET_2到爲零並且比率始終爲非零。我需要一個檢查,如果只有比率爲100,那麼允許set_2爲空,即當比率不爲100時,set_2必須不爲空 –

+0

ALTER TABLE CONFIG ADD CONSTRAINT CHECK_SET_2 CHECK((SET_2 IS NULL AND RATIO = 100)OR(SET_2 IS NOT NULL AND RATIO <> 100))'。 –