sql >> Database teknologi >  >> RDS >> Oracle

CHECK CONSTRAINT i Oracle SQL

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

Hvis Wagon_ID er ikke mellem 90 og 99 passerer begrænsningen. Hvis den er mellem 90 og 99, er Total_Weight skal være større end 10.

En out-of-line begrænsning som denne giver dig mulighed for at anvende begrænsningslogikken på rækkeniveau, hvilket betyder, at den kan bruge enhver af kolonneværdierne.

Tillæg Her er, hvordan du håndterer det opdaterede spørgsmål med intervaller på Wagon_ID og Total_Weight . Der er sikkert andre måder, men dette føltes som den "reneste", hvilket betyder, at det var lettest for mig personligt at læse :)

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. Tovejs synkronisering mellem lokal mysql-database og AWS RDS

  2. PID fejl på mysql.server start?

  3. Oracle - Sådan håndhæves regler for relationer afhængigt af attributposter (simpelt eksempel)

  4. Sådan planlægger du databasesikkerhedskopier med ClusterControl