sql >> Base de Datos >  >> RDS >> Oracle

número máximo de niveles de SQL recursivo (50) excedido

Estás haciendo un disparador "antes de insertar". En tal activador, no se inserta en la misma tabla; de lo contrario, puede obtener un ciclo infinito. Simplemente asigne al valor 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 ;

Cuando finalice el disparador, insertará los valores correctos del new variables.

Déjame decirte que las secuencias existen por una razón y debes usarlas para este propósito. Es probable que tratar de imitar su funcionalidad conduzca a errores.