Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

VERIFICAR RESTRIÇÃO no Oracle SQL


Use uma restrição fora de linha:
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 o Wagon_ID é não entre 90 e 99, a restrição passa. Se estiver entre 90 e 99, o Total_Weight deve ser maior que 10.

Uma restrição fora de linha como essa permite que você aplique a lógica de restrição no nível da linha, o que significa que ela pode usar qualquer um dos valores da coluna.

Adendo Veja como lidar com a pergunta atualizada com intervalos de Wagon_ID e Total_Weight . Provavelmente existem outras maneiras, mas essa parecia a "mais limpa", o que significa que foi mais fácil para mim ler pessoalmente :)
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)
    )
)