Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Verwenden eines Triggers zum Implementieren einer Fremdschlüsselprüfungseinschränkung

Vermutlich muss das Renndatum zwischen dem Start- und Enddatum des Meetings liegen, sodass Sie beide gleichzeitig überprüfen können. und vermutlich möchten Sie dies auch auf neue Datensätze und nicht nur auf Aktualisierungen überprüfen. Sie könnten also etwas verwenden wie:

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;

Nur für das Enddatum:

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;