sql >> Databasteknik >  >> RDS >> Oracle

maximalt antal rekursiva SQL-nivåer (50) har överskridits

Du gör en trigger "före insättning". I en sådan trigger sätter du inte in i samma tabell -- annars kan du få en oändlig loop. Tilldela bara variabelvärdet:

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 ;

När triggern är klar kommer den att infoga rätt värden från new variabel.

Låt mig bara säga att sekvenser finns av en anledning, och du bör använda dem för detta ändamål. Att försöka efterlikna deras funktionalitet leder sannolikt till fel.



  1. python anslut till postgresql med libpq-pgpass

  2. formel för beräknad kolumn baserad på olika tabellkolumner

  3. Hur man räknar distinkta värden i SQL

  4. Spring JDBC - Senast infogade id