Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

número máximo de níveis de SQL recursivos (50) excedido


Você está fazendo um gatilho "antes de inserir". Nesse gatilho, você não insere na mesma tabela - caso contrário, você pode obter um loop infinito. Basta atribuir ao valor da variável:
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 ;

Quando o gatilho terminar, ele inserirá os valores corretos do new variável.

Deixe-me apenas dizer que as sequências existem por um motivo, e você deve usá-las para esse propósito. Tentar imitar sua funcionalidade provavelmente levará a erros.