Anda melakukan pemicu "sebelum memasukkan". Dalam pemicu seperti itu, Anda tidak memasukkan ke dalam tabel yang sama -- jika tidak, Anda bisa mendapatkan loop tak terbatas. Tetapkan saja ke nilai variabel:
CREATE OR REPLACE TRIGGER trig_deptno2
BEFORE INSERT ON dept2
FOR EACH ROW
DECLARE v_deptno NUMBER(2) ;
BEGIN
SELECT coalesce(MAX(deptno) + 1, 1) INTO :new.deptno
FROM dept2 ;
END trig_deptno2 ;
Ketika pemicu selesai, itu akan menyisipkan nilai yang benar dari new
variabel.
Izinkan saya mengatakan bahwa urutan ada karena suatu alasan, dan Anda harus menggunakannya untuk tujuan ini. Mencoba meniru fungsinya kemungkinan akan menyebabkan kesalahan.