Oracle
 sql >> Base de données >  >> RDS >> Oracle

nombre maximum de niveaux SQL récursifs (50) dépassé

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.