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

zaleta używania wyzwalacza do wypełniania klucza zastępczego w Oracle plsql

Ten konkretny wzorzec jest w rzeczywistości dość niebezpieczny, ponieważ pozwala komuś na ręczne wprowadzenie nowego identyfikatora, który może kolidować z już istniejącym kluczem zastępczym lub takim, który twoja sekwencja może wygenerować w przyszłości.

Twój wyzwalacz powinien naprawdę wyglądać tak, aby zapewnić, że dla każdego nowego rekordu otrzyma unikalny klucz. Jeśli używasz wersji 11.2 lub nowszej, nie ma potrzeby select ... into ...

CREATE OR REPLACE TRIGGER TEST_TRIG
BEFORE INSERT ON my_table
FOR EACH ROW
BEGIN
   :new.column1 := my_table_seq.NEXTVAL;
END;

Zaletą tego podejścia jest to, że zawsze Gotowe. Jakakolwiek wartość, którą ktokolwiek wprowadzi do tej kolumny, zostanie nadpisana na coś, co będzie działać i które używa prawidłowej sekwencji; jeśli ktoś zapomni dodać to w zestawieniu nadal będzie działać.

Uniemożliwia złamanie klucza zastępczego.

Z tym, co sugerujesz, wyobraź sobie, że ktoś zamiast tego umieszcza 1; otrzymasz naruszenie klucza podstawowego. Jeśli ktoś zapomni, błędów jest więcej. Nigdy nie możesz zagwarantować, że każda aktualizacja Twojej tabeli będzie przechodzić przez jeden punkt wejścia, więc wyzwalacz gwarantuje, że plik PK jest wypełniony poprawnie.

Warto zauważyć, że od 12c możesz używać tożsamości kolumna , który wyraźnie pokazuje powiązanie między tabelą a automatycznym przyrostem; nie ma potrzeby wyzwalania ani sekwencji. Składnia DDL do tworzenia tabeli będzie wyglądać następująco:

create table <table_name> ( <column_name> generated as identity );


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak radzić sobie z oszczędzaniem światła dziennego w bazie danych Oracle

  2. Oracle:ORA-12154:Problem z TNS:64-bitowy Excel/Windows 10 64-bitowy

  3. Uruchom zapytanie sql z limitem czasu w PHP lub Jak w PHP, aby zatrzymać zapytanie sql już rozpoczęte?

  4. kolumny w osi Oracle

  5. Oracle XMLQuery przekazująca wartość parametru