Pregunta

Tengo esta tabla en una base de datos Oracle que tiene una clave principal definida en 3 de las columnas de datos. Quiero eliminar la restricción de la clave principal para permitir filas con datos duplicados para esas columnas, y crear una nueva columna, 'id', para contener un ID de entero de incremento automático para estas filas. Sé cómo crear una secuencia y un activador para agregar una ID de incremento automático para las nuevas filas agregadas a la tabla, pero ¿es posible escribir una declaración PL / SQL para agregar ID únicas a todas las filas que ya están en la tabla?

¿Fue útil?

Solución

Una vez que hayas creado la secuencia:

update mytable
set id = mysequence.nextval;

Otros consejos

Si solo estás utilizando un número entero para una secuencia, puedes actualizar la ID con el rownum. por ejemplo

update
table
set id = rownum

A continuación, deberá restablecer la secuencia a la siguiente ID válida.

¿Es esto lo que necesitas?

UPDATE your_table
   SET id = your_seq.nextval;

Esto supone que no te importa en qué orden están tus claves principales.

Primero debes revisar tu PCTFREE ... ¿hay espacio suficiente para que cada fila se alargue?

Si eligió un PCTFREE muy pequeño o sus datos tienen muchas actualizaciones que aumentan su duración, puede comenzar a encadenar cada fila para hacer esto como una actualización.

Es casi seguro que es mejor hacer esto como CTAS.

Cree la tabla t2 como seq.nextval select, t1. * from t1.

soltar t1

renombra t2 a t1.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top