sql >> Database >  >> RDS >> Oracle

Een trigger gebruiken om een ​​beperking voor een externe sleutelcontrole te implementeren

Vermoedelijk moet de racedatum tussen de start- en einddatum van de vergadering liggen, dus je zou beide tegelijk kunnen controleren; en vermoedelijk wilt u dit ook controleren op nieuwe records, niet alleen op updates. Dus je zou iets kunnen gebruiken als:

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;

Voor alleen de einddatum:

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. PHP:mysql_fetch_array() verwacht dat parameter 1 resource is, boolean gegeven

  2. E-mail verzenden naar Yahoo- en Hotmail-gebruikers?

  3. Vensterfuncties of algemene tabeluitdrukkingen:tel vorige rijen binnen bereik

  4. Toon alleen uren in MYSQL DATEDIFF