Oracle
 sql >> база данни >  >> RDS >> Oracle

предимството на използването на тригер за попълване на сурогатен ключ в oracle plsql

Този конкретен модел всъщност е доста опасен, тъй като позволява на някой ръчно да въведе нов идентификатор, който може да се сблъска с вече съществуващ сурогатен ключ или такъв, който вашата последователност може да генерира в бъдеще.

Вашият тригер наистина трябва да изглежда така, за да сте сигурни, че всеки нов запис получава уникален ключ. Ако използвате 11.2 или по-нова версия, няма нужда от select ... into ...

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

Предимството на този подход е, че е винаги Свършен. Каквато и стойност да постави някой за тази колона, се презаписва с нещо, което ще работи и което използва правилната последователност; ако някой забрави да го добави в изявлението, пак ще работи.

Това прави невъзможно разбиването на вашия сурогатен ключ.

С това, което предлагате, представете си, че някой поставя 1 вместо това; получавате нарушение на първичен ключ. Ако някой забрави, има още грешки. Никога няма да гарантирате, че всяка актуализация на вашата таблица ще бъде през една точка на влизане, така че тригерът гарантира, че PK е попълнен правилно.

Струва си да се отбележи, че от 12c можете да използвате идентификация колона , което прави изрична връзката между таблицата и автоматичното нарастване; няма нужда от тригер или последователност. Синтаксисът за DDL за създаване на таблица би бил:

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. INSERT от 10 милиона заявки под 10 минути в Oracle?

  2. Колона нееднозначно дефинирана

  3. промяна на формата на датата 'гггг/мм/дд' на 'мм-дд-гггг' в Oracle

  4. Функция SOUNDEX() в Oracle

  5. Функция за агрегиране на Oracle за разпределяне на суми