Oracle
 sql >> Base de données >  >> RDS >> Oracle

VÉRIFIER LA CONTRAINTE dans Oracle SQL

Utiliser une contrainte hors ligne :

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

Si le Wagon_ID n'est pas entre 90 et 99, la contrainte passe. S'il est compris entre 90 et 99, le Total_Weight doit être supérieur à 10.

Une contrainte hors ligne comme celle-ci vous permet d'appliquer la logique de contrainte au niveau de la ligne, ce qui signifie qu'elle peut utiliser n'importe quelle valeur de colonne.

Avenant Voici comment gérer la question mise à jour avec des plages de Wagon_ID et Total_Weight . Il existe probablement d'autres moyens, mais celui-ci semblait être le "plus propre", ce qui signifie qu'il était plus facile pour moi personnellement de lire :)

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