Oracle
 sql >> база данни >  >> RDS >> Oracle

Използване на тригер за прилагане на ограничение за проверка на външен ключ

Предполага се, че датата на състезанието трябва да е между началната и крайната дата на срещата, така че можете да проверите и двете едновременно; и също така вероятно искате да проверите това за нови записи, а не само за актуализации. Така че можете да използвате нещо като:

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;

Само за крайната дата:

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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. четене на множество стойности от поле на петно ​​PL/SQL

  2. Как да разберете кога е създадена определена таблица в Oracle?

  3. Има ли начин да ограничите или ограничите ресурсите, използвани от потребител в Oracle?

  4. Как да отпечатам резултата в различен ред с помощта на SQL заявка?

  5. Предаване на името на таблицата към курсора