sql >> データベース >  >> RDS >> Oracle

チェック制約で日付を使用する、Oracle

    残念ながら、チェック制約はSYSDATEのような関数を参照できません。 DMLが発生したときにこれらの値をチェックするトリガーを作成する必要があります。つまり

    CREATE OR REPLACE TRIGGER trg_check_dates
      BEFORE INSERT OR UPDATE ON table1
      FOR EACH ROW
    BEGIN
      IF( :new.CloseDate <= SYSDATE )
      THEN
        RAISE_APPLICATION_ERROR( -20001, 
              'Invalid CloseDate: CloseDate must be greater than the current date - value = ' || 
              to_char( :new.CloseDate, 'YYYY-MM-DD HH24:MI:SS' ) );
      END IF;
      IF( :new.CloseDate > add_months(SYSDATE,12) )
      THEN
        RAISE_APPLICATION_ERROR( -20002, 
             'Invalid CloseDate: CloseDate must be within the next year - value = ' || 
             to_char( :new.CloseDate, 'YYYY-MM-DD HH24:MI:SS' ) );
      END IF;
      IF( :new.StartDate <= add_months(:new.CloseDate,24) )
      THEN
        RAISE_APPLICATION_ERROR( -20002, 
              'Invalid StartDate: StartDate must be within 24 months of the CloseDate - StartDate = ' || 
              to_char( :new.StartDate, 'YYYY-MM-DD HH24:MI:SS' ) ||
              ' CloseDate = ' || to_char( :new.CloseDate , 'YYYY-MM-DD HH24:MI:SS' ) );
      END IF;
    END;
    


    1. データベースの増分変更の検出(OracleからMongoDB ETLへ)

    2. oraclejdbcドライバーバージョンの狂気

    3. 動的SQLステートメントでテーブル変数を使用する方法は?

    4. MySQL、MariaDB、PostgreSQL、MongoDBの運用レポート