sql >> Database >  >> RDS >> Oracle

Oracle:trigger voor automatisch verhogen.

Oké, ik denk dat ik snap wat er aan de hand is. Het antwoord op je vraag is een absoluut massaal ja . Er kan een grote impact zijn als u deze trigger uitschakelt.

De reden dat deze trigger lijkt te bestaan, is om de situatie aan te pakken waarin een primaire sleutelwaarde niet is geleverd op een inzetstuk in uw tafel. Als dit overal gebeurt in uw code zal het verwijderen van de trigger die invoegingen breken.

Je moet twee dingen doen.

  1. Corrigeer de trekker, deze is duidelijk kapot; repareer het:

    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; 
    

    Als u Oracle 11G of hoger gebruikt, kunt u dit in plaats daarvan gebruiken:

      if :NEW.PRIVILEGE_ID is null then 
        :NEW.PRIVILEGE_ID := PRIVILEGE_SEQ.nextval; 
      end if; 
    
  2. Ga na of dit ook daadwerkelijk gebeurt. Als u records zonder primaire sleutel invoegt, moet u weten waarom dit gebeurt en of het gedrag correct is. Als dit het geval is, zit je vast aan de trigger, anders los je dat op. Als u nooit records zonder een primaire sleutel invoegt, kunt u de trigger uitschakelen.

    De snelste manier om erachter te komen is misschien om de trigger toch uit te schakelen, maar het zou je inserts breken. Als dit een productiedatabase is, kunt u alleen zien of het de moeite waard is. Ik zou het persoonlijk niet doen.



  1. Hoe te ontsnappen aan enkele aanhalingstekens in Doctrine

  2. MySql-afsluittabel ondersteunt geen dubbele subcategorie voor verschillende ouders

  3. MySQL-kolomnamen en aliassen

  4. Hoe verbinding maken met een externe MySQL-server via SSH met behulp van JPA?