sql >> Database >  >> RDS >> Oracle

CONTROLEER BEPERKING in Oracle SQL

Gebruik een out-of-line beperking:

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

Als de Wagon_ID is niet tussen 90 en 99, de beperking passeert. Als het tussen 90 en 99 ligt, is de Total_Weight moet groter zijn dan 10.

Met een dergelijke out-of-line beperking kunt u de beperkingslogica op rijniveau toepassen, wat inhoudt dat deze alle kolomwaarden kan gebruiken.

Aanvulling U kunt als volgt omgaan met de bijgewerkte vraag met bereiken van Wagon_ID en Total_Weight . Er zijn waarschijnlijk andere manieren, maar dit voelde als de "schoonste", wat betekent dat het voor mij persoonlijk het gemakkelijkst te lezen was :)

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. Hoe krijg ik ASCII-waarde in Oracle?

  2. MySQL selecteer UTF-8 string met '=' maar niet met 'LIKE'

  3. Barman gebruiken voor PostgreSQL Disaster Recovery

  4. Hoe gegevens van een samengevoegde tabel te krijgen met behulp van de methode query()