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

Oracle:Auto-increment trigger.

Okay, jeg tror, ​​jeg forstår, hvad der foregår. Svaret på dit spørgsmål er et absolut massivt ja . Det kan have stor indflydelse, hvis du deaktiverer denne trigger.

Grunden til, at denne trigger synes at eksistere, er for at håndtere situationen, hvor en primær nøgleværdi ikke er leveres på en indsats i dit bord. Hvis dette sker hvor som helst i din kode, hvis du fjerner triggeren, vil disse indsættelser brydes.

Du skal gøre to ting.

  1. Ret aftrækkeren, den er åbenbart ødelagt; rette det:

    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; 
    

    Hvis du bruger Oracle 11G eller nyere, kan du bruge dette i stedet:

      if :NEW.PRIVILEGE_ID is null then 
        :NEW.PRIVILEGE_ID := PRIVILEGE_SEQ.nextval; 
      end if; 
    
  2. Find ud af, om dette rent faktisk sker. Hvis du indsætter poster uden en primær nøgle, skal du finde ud af, hvorfor dette sker, og om adfærden er korrekt. Hvis det er du sidder fast med aftrækkeren, ellers fiks det. Hvis du aldrig indsætter poster uden en primær nøgle, kan du deaktivere triggeren.

    Den hurtigste måde at finde ud af det kan være at deaktivere triggeren alligevel, men det ville knække dine indsatser. Hvis dette er en produktionsdatabase, kan du kun se, om det er det værd. Det ville jeg personligt ikke.



  1. Fortolkning af resultater fra Explain Analyse i Postgres

  2. refererer fremmednøgle altid til en unik nøgle i en anden tabel?

  3. FEJL 1064 (42000) i MySQL

  4. mysql_num_fields():det leverede argument er ikke en gyldig MySQL-resultatressource