mardi 27 novembre 2012

ORACLE : renuméroter la séquence d'une table


Pour renuméroter une table en ORACLE, il est nécessaire de créer une procédure stockée anonyme et se baser sur un curseur.

Ici nous avons une table  LOG_ACTIONS. Nous voulons renuméroter la colonne SEQ_NB avec un compteur incrémental basé sur l'ordre de la colonne LOG_ID

Attention, pour passer ce script nous devons utiliser SQL developper. 

declare
cursor c_f is
select LOG_ID from LOG_ACTIONS ORDER BY LOG_ID for update;
v_logId LOG_ACTIONS.LOG_ID%type;
v_nb int;

begin
v_nb := 0;
open c_f;
loop
fetch c_f into v_logId;
exit when c_f%notfound;

update LOG_ACTIONS set SEQ_NB=v_nb where LOG_ID=v_logId;
v_nb := v_nb+1;
end loop;
close c_f;
end;

Aucun commentaire: