Wykonujesz wyzwalacz „przed wstawieniem”. W takim wyzwalaczu nie wstawiasz do tej samej tabeli — w przeciwnym razie możesz uzyskać nieskończoną pętlę. Po prostu przypisz do wartości zmiennej:
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 ;
Po zakończeniu wyzwalacza wstawi właściwe wartości z new
zmienna.
Powiem tylko, że sekwencje istnieją nie bez powodu i należy ich do tego celu używać. Próba naśladowania ich funkcjonalności może prowadzić do błędów.