Oracle
 sql >> Database >  >> RDS >> Oracle

Oracle:trigger di incremento automatico.

Ok, penso di aver capito cosa sta succedendo. La risposta alla tua domanda è assolutamente un enorme . Potrebbe esserci un grande impatto se disabiliti questo attivatore.

Il motivo per cui questo trigger sembra esistere è per affrontare la situazione in cui un valore di chiave primaria non fornito su un inserto nella tua tabella. Se ciò si verifica ovunque nel tuo codice la rimozione del trigger interromperà quegli inserti.

Devi fare due cose.

  1. Correggi il grilletto, ovviamente è rotto; aggiustalo:

    CREATE OR REPLACE TRIGGER  BI_PRIVILEGE
      before insert on PRIVILEGE              
      for each row  
    begin   
      if :NEW.PRIVILEGE_ID is null then 
        select PRIVILEGE_SEQ.nextval into :NEW.PRIVILEGE_ID from dual; 
      end if; 
    end; 
    

    Se stai utilizzando Oracle 11G o versioni successive, puoi invece utilizzare questo:

      if :NEW.PRIVILEGE_ID is null then 
        :NEW.PRIVILEGE_ID := PRIVILEGE_SEQ.nextval; 
      end if; 
    
  2. Scopri se questo accade davvero. Se inserisci record senza una chiave primaria, devi scoprire perché ciò accade e se il comportamento è corretto. Se sei bloccato con il grilletto, altrimenti risolvilo. Se non inserisci mai record senza una chiave primaria, puoi disabilitare il trigger.

    Il modo più rapido per scoprirlo potrebbe essere disabilitare comunque il trigger, ma romperebbe i tuoi inserti. Se questo è un database di produzione solo tu puoi dire se ne vale la pena. Personalmente non lo farei.