sql >> Databasteknik >  >> RDS >> Oracle

KONTROLLERA CONSTRAINT i Oracle SQL

Använd en out-of-line-begränsning:

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

Om Wagon_ID är inte mellan 90 och 99 passerar begränsningen. Om den är mellan 90 och 99 visas Total_Weight måste vara större än 10.

En out-of-line begränsning som denna låter dig tillämpa begränsningslogiken på radnivå, vilket innebär att den kan använda vilket som helst av kolumnvärdena.

Tillägg Så här hanterar du den uppdaterade frågan med intervallen Wagon_ID och Total_Weight . Det finns säkert andra sätt men det här kändes som det "renaste", vilket betyder att det var lättast för mig personligen att läsa :)

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. Förberedda uttalanden finns redan

  2. Minnesläcka i PHP vid hämtning av stor datamängd från MySQL

  3. Lagrad procedur för att få indexstatus i alla databaser

  4. postgresql returnerar 0 om det returnerade värdet är null