sql >> Base de Datos >  >> RDS >> Oracle

COMPROBAR RESTRICCIÓN en Oracle SQL

Use una restricción fuera de línea:

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 el Wagon_ID es no entre 90 y 99, la restricción pasa. Si está entre 90 y 99, el Total_Weight debe ser mayor que 10.

Una restricción fuera de línea como esta le permite aplicar la lógica de restricción a nivel de fila, lo que significa que puede usar cualquiera de los valores de columna.

Anexo Aquí se explica cómo manejar la pregunta actualizada con rangos de Wagon_ID y Total_Weight . Probablemente haya otras formas, pero esta se sintió como la "más limpia", lo que significa que personalmente fue más fácil de leer para mí :)

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