Salve a tutti, sto impazzendo per un errore su un trigger, il quale funziona correttamente in inserimento sulla tabella, ma in cancellazione e modifica dà l'errore, sebbene il trigger non debba essere innescato sulla cancellazione ma solo sull'inserimento e modifica, il codice del trigger è il seguente:
l'errore è il seguente: error ORA-04091: La tabella SYSTEM.DB_POLIGONO_LACUNA è in fase di modifica, il trigger/funzione non può leggerla ORA-06512: a "SYSTEM.DB_POLIGONO_LACUNA_T1", line 7 ORA-06512: a "SYSTEM.DB_POLIGONO_LACUNA_T1", line 21 ORA-04088: errore durante esecuzione del trigger 'SYSTEM.DB_POLIGONO_LACUNA_T1'codice:create or replace trigger "DB_POLIGONO_LACUNA_T1" BEFORE insert or update ON "DB_POLIGONO_LACUNA" for each row declare LACUNA_N EXCEPTION; LACUNA_Y EXCEPTION; LACUNA_C EXCEPTION FLAG_ERROR EXCEPTION; cursor ID_POLIGONI_CUR is select ID_POL_LAC FROM DB_POLIGONO_LACUNA WHERE ID_POL_LAC = :new.POLIGONO_ASSOCIATO and FLAG_LACUNA = 1; ID_POLIGONI ID_POLIGONI_CUR%ROWTYPE; begin if INSERTING or UPDATING then if :new.FLAG_LACUNA = 0 or :new.FLAG_LACUNA = 1 THEN if :new.FLAG_LACUNA = 0 and :new.POLIGONO_ASSOCIATO IS NOT NULL THEN RAISE LACUNA_Y; end if; open ID_POLIGONI_CUR; fetch ID_POLIGONI_CUR into ID_POLIGONI; if :new.FLAG_LACUNA = 1 THEN if :new.POLIGONO_ASSOCIATO IS NULL THEN RAISE LACUNA_N; end if; if :new.ID_POL_LAC = :new.POLIGONO_ASSOCIATO or ID_POLIGONI.ID_POL_LAC IS NOT NULL THEN RAISE LACUNA_C; end if; end if; else RAISE FLAG_ERROR; close ID_POLIGONI_CUR; end if; end if; EXCEPTION WHEN LACUNA_N THEN RAISE_APPLICATION_ERROR (-20001, 'la lacuna deve essere associata ad un poligono'); WHEN LACUNA_Y THEN RAISE_APPLICATION_ERROR (-20002, 'il poligono non è una lacuna non può essere associato ad un altro poligono'); WHEN LACUNA_C THEN RAISE_APPLICATION_ERROR (-20003, 'la lacuna fa riferimento ad un altra lacuna'); WHEN FLAG_ERROR THEN RAISE_APPLICATION_ERROR (-20004, 'flag può essere uguale soltanto a 0 o a 1'); end;
a quanto pare l'errore viene dato sulle linee di codice in cui compare :new...... è come se il trigger venisse innescato anche per la cancellazione, mi sfugge qualcosa?
grazie mille per l'aiuto

Rispondi quotando