Oracle
 sql >> Database >  >> RDS >> Oracle

numero massimo di livelli SQL ricorsivi (50) superato

Stai eseguendo un trigger "prima dell'inserimento". In un tale trigger, non si inserisce nella stessa tabella, altrimenti è possibile ottenere un ciclo infinito. Basta assegnare al valore della variabile:

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 il trigger è terminato, inserirà i valori corretti dal new variabile.

Lasciatemi dire solo che le sequenze esistono per una ragione e dovreste usarle per questo scopo. È probabile che il tentativo di imitare la loro funzionalità porti a errori.