我有下表Goods_In_Wagon(Goods_ID,Wagon_ID,Total_Weight)。我需要创建一些if语句检查约束,说
“如果WAGON_ID在90到99之间,则Total_Weight必须大于10。” AND“如果WAGON_ID在100到110之间,则Total_Weight必须大于20。” AND“如果WAGON_ID在111到120之间,则Total_Weight必须大于30。”
SQL Oracle中这是否可行,如果我该如何实现呢?
使用离线约束:
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
这样的离线约束使您可以在行级别应用约束逻辑,这意味着它可以使用任何列值。
附录 这是处理范围为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) ) )