sql >> Base de Datos >  >> RDS >> Oracle

Oracle:activador de incremento automático.

Está bien, creo que entiendo lo que está pasando. La respuesta a su pregunta es un rotundo . Puede haber un gran impacto si deshabilita este activador.

La razón por la que este activador parece existir es para tratar la situación en la que un valor de clave principal no provisto en un inserto en su mesa. Si esto ocurre en cualquier lugar en su código, quitar el gatillo romperá esas inserciones.

Tienes que hacer dos cosas.

  1. Corrija el gatillo, obviamente está roto; arreglarlo:

    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; 
    

    Si está usando Oracle 11G o superior, puede usar esto en su lugar:

      if :NEW.PRIVILEGE_ID is null then 
        :NEW.PRIVILEGE_ID := PRIVILEGE_SEQ.nextval; 
      end if; 
    
  2. Averigüe si esto realmente sucede. Si inserta registros sin una clave principal, debe averiguar por qué sucede esto y si el comportamiento es correcto. Si es así, está atascado con el gatillo, de lo contrario, arréglelo. Si nunca inserta registros sin una clave principal, puede desactivar el disparador.

    La forma más rápida de averiguarlo puede ser deshabilitar el gatillo de todos modos, pero rompería sus inserciones. Si se trata de una base de datos de producción, solo usted puede saber si vale la pena. Yo personalmente no lo haría.