Quiero rellenar una columna de tabla con un número entero en ejecución, así que estoy pensando en usar ROWNUM. Sin embargo, necesito poblarlo según el orden de otras columnas, algo así como ORDER BY column1, column2
. Esto es, por desgracia, no es posible ya que Oracle no se hace la siguiente declaración:Oracle: Actualización de una columna de tabla usando ROWNUM junto con la cláusula ORDER BY
UPDATE table_a SET sequence_column = rownum ORDER BY column1, column2;
Tampoco la siguiente afirmación (un intento de utilizar la cláusula WITH):
WITH tmp AS (SELECT * FROM table_a ORDER BY column1, column2)
UPDATE tmp SET sequence_column = rownum;
Entonces, ¿cómo lo hago usando una instrucción SQL y sin recurrir al método de iteración del cursor en PL/SQL?
Tan pronto a medida que se completa la instrucción y se produce otra operación DML, el 'sequence_col umn' será incorrecto/desactualizado. ¿Por qué no poner sequence_column (y la numeración) en una vista? Eso siempre será correcto. –
@Damien_The_Unbeliever No estoy seguro si te entiendo, pero no hay ninguna preocupación con la futura inserción de registros en la tabla porque la columna tiene un índice único y el script que realiza la inserción está garantizado, coloca el siguiente número en ejecución en la columna. Es solo que a veces cuando se eliminan los registros, la columna ya no es secuencial y debe volver a secuenciarse. – Lukman
@Lukman, estoy de acuerdo con Damien. Es mejor calcular 'ROWNUM' o' ROW_NUMBER() 'sobre la marcha –