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. 私のお気に入りのPostgreSQLクエリの詳細-そしてなぜそれらも重要なのか

    2. SQL-2つの外部キーを1つの主キーに左結合します

    3. SQLiteで文字列を連結する方法

    4. Varchar2とcharの主な違いは何ですか