Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Oracle:wyzwalacz automatycznej inkrementacji.

Dobra, myślę, że rozumiem, co się dzieje. Odpowiedź na twoje pytanie to zdecydowanie tak . Może to mieć duży wpływ, jeśli wyłączysz ten wyzwalacz.

Powodem, dla którego ten wyzwalacz wydaje się istnieć, jest radzenie sobie z sytuacją, w której wartość klucza podstawowego nie dostarczone na wkładce do twojego stołu. Jeśli zdarzy się to wszędzie w twoim kodzie usunięcie wyzwalacza spowoduje uszkodzenie tych wstawek.

Musisz zrobić dwie rzeczy.

  1. Popraw spust, najwyraźniej jest zepsuty; napraw to:

    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; 
    

    Jeśli używasz Oracle 11G lub nowszego, możesz użyć tego zamiast:

      if :NEW.PRIVILEGE_ID is null then 
        :NEW.PRIVILEGE_ID := PRIVILEGE_SEQ.nextval; 
      end if; 
    
  2. Sprawdź, czy tak się rzeczywiście dzieje. Jeśli wstawiasz rekordy bez klucza podstawowego, musisz dowiedzieć się, dlaczego tak się dzieje i czy zachowanie jest prawidłowe. Jeśli tak, utknąłeś na spuście, w przeciwnym razie napraw to. Jeśli nigdy nie wstawisz rekordów bez klucza podstawowego, możesz wyłączyć wyzwalacz.

    Najszybszym sposobem na sprawdzenie może być wyłączenie wyzwalacza i tak, ale złamałoby to twoje wstawki. Jeśli jest to produkcyjna baza danych, tylko Ty możesz stwierdzić, czy jest tego warta. Osobiście nie.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Nie można utworzyć sterownika z NHibernate.Driver.OracleDataClientDriver

  2. Połącz dwa stoły za pomocą kolumny z wieloma wpisami dla drugiego stołu

  3. Oracle - Dlaczego powinienem używać pakietów zamiast samodzielnych procedur lub funkcji?

  4. Jak korzystać z polecenia buforowania w Oracle Developer SQL?

  5. ORA-04091 — Jak zmienić tabelę, na której uruchamia się wyzwalacz?