Du gör en trigger "före insättning". I en sådan trigger sätter du inte in i samma tabell -- annars kan du få en oändlig loop. Tilldela bara variabelvärdet:
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 triggern är klar kommer den att infoga rätt värden från new
variabel.
Låt mig bara säga att sekvenser finns av en anledning, och du bör använda dem för detta ändamål. Att försöka efterlikna deras funktionalitet leder sannolikt till fel.