简体   繁体   English

在Oracle SQL中检查CONSTRAINT

[英]CHECK CONSTRAINT in Oracle SQL

I have the following table Goods_In_Wagon(Goods_ID,Wagon_ID,Total_Weight). 我有以下表Goods_In_Wagon(Goods_ID,Wagon_ID,Total_Weight)。 I need to create a number of if statement check constraint that says 我需要创建一些if语句检查约束

"IF WAGON_ID is between 90 and 99 THEN Total_Weight must be greater than 10." “如果WAGON_ID介于90和99之间,则Total_Weight必须大于10。” AND "IF WAGON_ID is between 100 and 110 THEN Total_Weight must be greater than 20." AND“如果WAGON_ID介于100和110之间那么Total_Weight必须大于20。” AND "IF WAGON_ID is between 111 and 120 THEN Total_Weight must be greater than 30." AND“如果WAGON_ID介于111和120之间那么Total_Weight必须大于30。”

is this possible in SQL Oracle, if it is how can I implement it 这可能在SQL Oracle中,如果它是我如何实现它

Use an out-of-line constraint: 使用外线约束:

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)
)

If the Wagon_ID is not between 90 and 99, the constraint passes. 如果Wagon_ID 不在 90和99之间,则约束通过。 If it is between 90 and 99, the Total_Weight must be greater than 10. 如果它介于90和99之间,则Total_Weight必须大于10。

An out-of-line constraint like this allows you to apply the constraint logic at the row level, meaning it can use any of the column values. 像这样的外部约束允许您在行级别应用约束逻辑,这意味着它可以使用任何列值。


Addendum Here's how to handle the updated question with ranges of Wagon_ID and Total_Weight . 附录以下是如何处理Wagon_IDTotal_Weight范围的更新问题。 There are probably other ways but this felt like the "cleanest", meaning it was easiest for me personally to read :) 可能有其他方式,但这感觉就像“最干净”,这意味着我个人最容易阅读:)

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)
    )
)

Revised to reflect the additional requirements 修订以反映额外要求

CREATE TABLE Goods_In_Wagon
(
    Goods_ID
    ,Wagon_ID
    ,Total_Weight
    CONSTRAINT check_Weight
    CHECK ( 
        WAGON_ID < 90
        OR
        (TOTAL_WEIGHT > 10 AND WAGON_ID >= 90 AND WAGON_ID <= 99)
        OR
        (TOTAL_WEIGHT > 20 AND WAGON_ID >= 100 AND WAGON_ID <= 110)
        OR
        (TOTAL_WEIGHT > 30 AND WAGON_ID >= 111 AND WAGON_ID <= 120)
        OR
        WAGON_ID > 120
    )
)

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM