小编典典

在Oracle SQL中检查约束

sql

我有下表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中这是否可行,如果我该如何实现呢?


阅读 151

收藏
2021-04-07

共1个答案

小编典典

使用离线约束:

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)
    )
)
2021-04-07