sql >> Databasteknik >  >> RDS >> Oracle

Använda en utlösare för att implementera en begränsning för kontroll av främmande nyckel

Förmodligen måste tävlingsdatumet ligga mellan mötets start- och slutdatum, så du kan kontrollera båda samtidigt; och förmodligen vill du också kontrollera detta för nya rekord, inte bara uppdateringar. Så du kan använda något som:

CREATE OR REPLACE TRIGGER RaceDateCheck
BEFORE INSERT OR UPDATE ON Race
FOR EACH ROW
DECLARE
  meetingStart Meeting.MeetingStartDate%TYPE;
  meetingEnd Meeting.MeetingEndDate%TYPE;
BEGIN
  SELECT StartDate, EndDate
  INTO meetingStart, meetingEnd
  FROM Meeting
  WHERE MeetingID = :NEW.MeetingID;

  IF :NEW.RaceDate < meetingStart
    OR :NEW.RaceDate > meetingEnd THEN
      RAISE_APPLICATION_ERROR(-20001, 'Invalid race date');
  END IF;
END;

För bara slutdatum:

CREATE OR REPLACE TRIGGER RaceDateCheck
BEFORE INSERT OR UPDATE ON Race
FOR EACH ROW
DECLARE
  meetingEnd Meeting.MeetingEndDate%TYPE;
BEGIN
  SELECT EndDate
  INTO meetingEnd
  FROM Meeting
  WHERE MeetingID = :NEW.MeetingID;

  IF :NEW.RaceDate > meetingEnd THEN
    RAISE_APPLICATION_ERROR(-20001, 'Invalid race date');
  END IF;
END;



  1. MySQL WEEK() :Få alla veckor inom datumintervallet (med/utan poster)

  2. Hur man listar databaser och tabeller i PostgreSQL med psql

  3. subquery-fel och för många värden med xmllagg

  4. PHP konvertera från MySql till Excel Spreadsheet Autosize kolumner