Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Oracle:Auto-Increment-Trigger.

Okay, ich glaube, ich verstehe, was los ist. Die Antwort auf Ihre Frage ist ein absolut massives Ja . Es kann große Auswirkungen haben, wenn Sie diesen Auslöser deaktivieren.

Der Grund, warum dieser Auslöser zu existieren scheint, ist die Situation, in der ein Primärschlüsselwert nicht ist auf einem Einsatz in Ihrem Tisch bereitgestellt. Wenn dies irgendwo auftritt In Ihrem Code wird das Entfernen des Triggers diese Einfügungen unterbrechen.

Sie müssen zwei Dinge tun.

  1. Korrigieren Sie den Abzug, er ist offensichtlich kaputt; beheben:

    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; 
    

    Wenn Sie Oracle 11G oder höher verwenden, können Sie stattdessen Folgendes verwenden:

      if :NEW.PRIVILEGE_ID is null then 
        :NEW.PRIVILEGE_ID := PRIVILEGE_SEQ.nextval; 
      end if; 
    
  2. Überlegen Sie, ob dies tatsächlich der Fall ist. Wenn Sie Datensätze ohne Primärschlüssel einfügen, müssen Sie herausfinden, warum dies geschieht und ob das Verhalten korrekt ist. Wenn dies der Fall ist, stecken Sie mit dem Auslöser fest, andernfalls beheben Sie das. Wenn Sie niemals Datensätze ohne Primärschlüssel einfügen, können Sie den Trigger deaktivieren.

    Der schnellste Weg, dies herauszufinden, besteht möglicherweise darin, den Trigger trotzdem zu deaktivieren, aber dies würde Ihre Inserts beschädigen. Wenn es sich nur um eine Produktionsdatenbank handelt, können Sie feststellen, ob es sich lohnt. Ich persönlich würde es nicht tun.