sql >> Databáze >  >> RDS >> Oracle

CHECK CONSTRAINT v Oracle SQL

Použijte podmínku mimo čáru:

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

Pokud Wagon_ID není mezi 90 a 99, omezení přejde. Pokud je mezi 90 a 99, Total_Weight musí být větší než 10.

Omezení mimo čáru, jako je toto, vám umožňuje použít logiku omezení na úrovni řádku, což znamená, že může používat jakoukoli hodnotu sloupce.

Dodatek Zde je návod, jak zpracovat aktualizovanou otázku s rozsahy Wagon_ID a Total_Weight . Pravděpodobně existují i ​​jiné způsoby, ale toto mi přišlo jako "nejčistší", což znamená, že pro mě osobně bylo nejsnazší číst :)

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


  1. Oracle vytvoří tabulku jako výběr s podmínkou maximálního počtu

  2. MySql vloží binární data do db bez chyb

  3. Oracle DROP TABLE, POKUD EXISTUJE Alternativy

  4. Referenční datový vzor:rozšiřitelný a flexibilní