Pola khusus ini sebenarnya cukup berbahaya karena memungkinkan seseorang untuk memasukkan ID baru secara manual yang mungkin berbenturan dengan kunci pengganti yang sudah ada atau yang mungkin dihasilkan oleh urutan Anda di masa mendatang.
Pemicu Anda harus benar-benar terlihat seperti ini untuk memastikan bahwa untuk setiap catatan baru mendapatkan kunci unik. Jika Anda menggunakan 11.2 atau lebih tinggi, tidak perlu select ... into ...
CREATE OR REPLACE TRIGGER TEST_TRIG
BEFORE INSERT ON my_table
FOR EACH ROW
BEGIN
:new.column1 := my_table_seq.NEXTVAL;
END;
Manfaat dari pendekatan ini adalah selalu selesai. Nilai apa pun yang dimasukkan seseorang untuk kolom ini akan ditimpa ke sesuatu yang akan berfungsi dan yang menggunakan urutan yang benar; jika seseorang lupa menambahkannya dalam pernyataan itu akan tetap berfungsi.
Itu membuatnya tidak mungkin untuk memecahkan kunci pengganti Anda.
Dengan apa yang Anda sarankan, bayangkan seseorang menempatkan 1 sebagai gantinya; Anda mendapatkan pelanggaran kunci utama. Jika seseorang lupa maka ada lebih banyak kesalahan. Anda tidak akan pernah menjamin bahwa setiap pembaruan ke tabel Anda akan melalui satu titik masuk sehingga pemicu menjamin bahwa PK diisi dengan benar.
Perlu dicatat bahwa dari 12c Anda dapat menggunakan identitas kolom , yang membuat eksplisit tautan antara tabel dan peningkatan otomatis; tidak perlu pemicu atau urutan. Sintaks untuk DDL pembuatan tabel adalah:
create table <table_name> ( <column_name> generated as identity );