Oracle
 sql >> Base de données >  >> RDS >> Oracle

Oracle :déclencheur d'auto-incrémentation.

D'accord, je pense que je comprends ce qui se passe. La réponse à votre question est un oui absolument massif . Il peut y avoir un impact important si vous désactivez ce déclencheur.

La raison pour laquelle ce déclencheur semble exister est de faire face à la situation où une valeur de clé primaire n'est pas fourni sur un encart dans votre tableau. Si cela se produit n'importe où dans votre code, la suppression du déclencheur cassera ces insertions.

Vous devez faire deux choses.

  1. Corrigez la gâchette, elle est visiblement cassée; corrigez-le :

    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 vous utilisez Oracle 11G ou supérieur, vous pouvez utiliser ceci à la place :

      if :NEW.PRIVILEGE_ID is null then 
        :NEW.PRIVILEGE_ID := PRIVILEGE_SEQ.nextval; 
      end if; 
    
  2. Déterminez si cela se produit réellement. Si vous insérez des enregistrements sans clé primaire, vous devez savoir pourquoi cela se produit et si le comportement est correct. Si c'est le cas, vous êtes coincé avec la gâchette, sinon corrigez cela. Si vous n'insérez jamais d'enregistrements sans clé primaire, vous pouvez désactiver le déclencheur.

    Le moyen le plus rapide de le savoir peut être de désactiver la gâchette de toute façon, mais cela casserait vos inserts. S'il s'agit d'une base de données de production, vous seul pouvez dire si cela en vaut la peine. Je ne le ferais pas personnellement.