Du laver en "før indsættelse"-trigger. I en sådan trigger indsætter du ikke i den samme tabel - ellers kan du få en uendelig løkke. Tildel blot variabelværdien:
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 ;
Når triggeren er færdig, vil den indsætte de rigtige værdier fra new
variabel.
Lad mig bare sige, at sekvenser eksisterer af en grund, og du bør bruge dem til dette formål. At forsøge at efterligne deres funktionalitet vil sandsynligvis føre til fejl.