使用超出線的約束:
CREATE TABLE Goods_In_Wagon (
Goods_ID NUMBER(whatever),
Wagon_ID NUMBER(whatever),
Total_Weight NUMBER(whatever),
CONSTRAINT Check_WagID_Weight
CHECK (Wagon_ID NOT BETWEEN 90 AND 99 OR Total_Weight > 10)
)
如果Wagon_ID
是90和99之間不 ,約束通過。如果它在90到99之間,那麼Total_Weight
必須大於10.
這樣的一個外部約束允許您在行級應用約束邏輯,這意味着它可以使用任何列值。
附錄下面是如何處理與Wagon_ID
和Total_Weight
範圍內更新的問題。可能有其他的方法,但這種感覺就像「最乾淨」,這意味着它是最簡單的對我個人閱讀:)
CREATE TABLE Goods_In_Wagon(
Goods_ID NUMBER(whatever),
Wagon_ID NUMBER(whatever),
Total_Weight NUMBER(whatever),
CONSTRAINT Check_WagID_Weight
CHECK (
(Wagon_ID < 90) OR
(Wagon_ID BETWEEN 90 AND 99 AND Total_Weight > 10) OR
(Wagon_ID BETWEEN 100 AND 110 AND Total_Weight > 20) OR
(Wagon_ID BETWEEN 111 AND 120 AND Total_Weight > 30) OR
(Wagon_ID > 120)
)
)
+1。但我認爲應該修改約束來處理'NULL',例如'... OR NVL(Total_Weight,0)> 10)' – a1ex07 2013-05-06 14:40:50
抱歉,我剛剛更新了 – Almanzt 2013-05-06 14:41:24
@ a1ex07這個問題 - 很好的調用。 user2154840 - 你有處理空值的特殊要求嗎?如果這樣做會改變一些事情。至於你的編輯:沒問題。 Oracle可以處理這個問題。我會盡快發佈更新。 – 2013-05-06 14:43:21