sql >> Database >  >> RDS >> Oracle

Datum gebruiken in een controlebeperking, Oracle

Een controlebeperking kan helaas niet verwijzen naar een functie als SYSDATE. U zou een trigger moeten maken die deze waarden controleert wanneer DML optreedt, d.w.z.

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. Veelvoorkomende fouten bij het migreren van PostgreSQL-databases van on-premises naar AWS RDS

  2. hoe cte-waarde toe te wijzen aan variabele

  3. Hoe Microsoft SQL Server-fout 926 te repareren? - Opgelost

  4. Zoekcriteria verschil tussen Like vs Bevat() in oracle