Oracle
 sql >> Datenbank >  >> RDS >> Oracle

PRÜFEN SIE EINSCHRÄNKUNG in Oracle SQL

Verwenden Sie eine Out-of-Line-Einschränkung:

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

Wenn die Wagon_ID ist nicht zwischen 90 und 99 besteht die Einschränkung. Wenn es zwischen 90 und 99 liegt, das Total_Weight muss größer als 10 sein.

Eine Out-of-Line-Einschränkung wie diese ermöglicht es Ihnen, die Einschränkungslogik auf Zeilenebene anzuwenden, was bedeutet, dass sie jeden der Spaltenwerte verwenden kann.

Nachtrag So handhaben Sie die aktualisierte Frage mit Bereichen von Wagon_ID und Total_Weight . Es gibt wahrscheinlich andere Wege, aber dieser fühlte sich am "saubersten" an, was bedeutet, dass es für mich persönlich am einfachsten zu lesen war :)

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