Vous faites un déclencheur "avant insertion". Dans un tel déclencheur, vous n'insérez pas dans la même table -- sinon, vous pouvez obtenir une boucle infinie. Attribuez simplement à la valeur de la variable :
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 ;
Lorsque le déclencheur est terminé, il insère les bonnes valeurs du new
variables.
Permettez-moi de dire que les séquences existent pour une raison et que vous devez les utiliser à cette fin. Essayer d'imiter leur fonctionnalité est susceptible de conduire à des erreurs.