Ciao ho una tabella clienti con i campi id (chiave primaria), nome e cognome. Voglio che il trigger, dopo una delete di un solo record, mi modifichi gli id dei record seguenti, in modo che se ho cancellato il settimo record (id = 7), l'ottavo assume id=7, il nono assume id=8, ...., quello n assume id=n-1. Gli altri attributi vengono invece conservati. In questo modo il trigger garantisce che nella colonna id ci siano sempre interi consecutivi (1,2,3,4....) senza salti. Io ci ho provato così:

CREATE OR REPLACE TRIGGER del_mod
after delete ON clienti referencing OLD as old
for each row
DECLARE PRAGMA AUTONOMOUS_TRANSACTION;
c number := ld.id;
idmax number;
err_msg VARCHAR2(100);
begin
select max(clenti.id) into idmax from clienti;
while (c <= idmax) loop
update clienti set id = c where id = c+1;
c := c+1;
COMMIT;
end loop;
EXCEPTION
when OTHERS then
err_msg := substr(SQLERRM, 1, 200);
dbms_output.put_line('Error message = ' || err_msg);
ROLLBACK;
end;

va in eccezione sull'update con questo messaggio:
ORA-00060: deadlock ottenuto in attesa della risorsa
Chi mi può aiutare?
Grazie