Oracle
 sql >> Database >  >> RDS >> Oracle

CONTROLLA VINCOLI in Oracle SQL

Usa un vincolo fuori linea:

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

Se il Wagon_ID è non tra 90 e 99, il vincolo passa. Se è compreso tra 90 e 99, il Total_Weight deve essere maggiore di 10.

Un vincolo fuori linea come questo ti consente di applicare la logica del vincolo a livello di riga, il che significa che può utilizzare qualsiasi valore di colonna.

Appendice Ecco come gestire la domanda aggiornata con intervalli di Wagon_ID e Total_Weight . Probabilmente ci sono altri modi, ma questo mi è sembrato il "più pulito", il che significa che è stato più facile per me personalmente leggere :)

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