Hola,
Esta semana estoy anti-cursores, no es que sean malos o que no cumplan con su trabajo, es solo que se utilizan en exceso y son mucho mas lentos.
Código:
oracle@10G> create sequence s1 start with 1 increment by 1;
Secuencia creada.
oracle@10G> select * from t1;
ID DATA
---------- ----------
data1
data2
data3
data4
data5
data6
6 filas seleccionadas.
oracle@10G> update t1 set id = s1.nextval;
6 filas actualizadas.
oracle@10G> select * from t1;
ID DATA
---------- ----------
1 data1
2 data2
3 data3
4 data4
5 data5
6 data6
6 filas seleccionadas.
Despues tienes que actualizar las tablas hijas pasando el valor de la nueva PK y haciendo un JOIN con la antigua PK.
Saludos