2013-05-01 63 views
2

有沒有辦法使用,如果邏輯在oracle sql檢查約束?檢查約束與如果邏輯oracle sql

這是我的僞代碼表:

create table child 
(
    name, 
    behaviour, 
    treat, 
); 

現在我想的是,如果孩子= 'bad'然後treat != 'lollies'behaviour

回答

0

試試這個

create table children ( 
     childname VARCHAR2(50), behaviour VARCHAR2(50),treats VARCHAR2(50), 
     constraint behave_treat check (behaviour = 'bad' AND treats != 'lollies') 
     ) 
+1

這意味着*所有*孩子必須是壞的,不能有冰棍! – 2013-05-01 15:13:26

0
ALTER TABLE child 
    ADD CONSTRAINT bad_behaviour_CK 
    CHECK (NOT (behaviour = 'bad' AND treat = 'lollies')) ; 

Tesed在SQL-Fiddle

3

有時更容易使用NOT定義什麼是不允許的表達:

CHECK (NOT (behaviour = 'bad' AND treat = 'lollies')) 

...意思相同:

CHECK (behaviour != 'bad' OR treat != 'lollies') 

很容易得到這個錯誤,因爲其他答案顯示!

+0

'孩子'是桌子。該列名爲'behaviour' – 2013-05-01 15:22:59

+0

@ypercube:謝謝 - 更正 – 2013-05-01 15:24:12

+0

謝謝!這個答案看起來像是最好的一個,並且有效。當我嘗試插入一些測試值時,我已經測試過它。 我仍然不理解完全背後的邏輯,我很驚訝我可以得到結果我只是布爾邏輯反對使用if/then – user2339718 2013-05-01 15:28:38