sql >> Databáze >  >> RDS >> Oracle

Použití spouštěče k implementaci omezení kontroly cizího klíče

Pravděpodobně musí být datum závodu mezi datem zahájení a ukončení schůzky, takže byste mohli zkontrolovat obojí najednou; a také pravděpodobně chcete zkontrolovat nové záznamy, nejen aktualizace. Takže můžete použít něco jako:

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;

Pouze pro datum ukončení:

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. Entity Framework – mnoho k mnoha?

  2. vylučuje existence hvězdičky ve výběru jiné sloupce?

  3. Jak rozdělit DATE a TIME z DATETIME v MySQL

  4. MYSQL, velmi pomalé řazení