multiple last ejemplos columns sql oracle sql-order-by sql-insert

last - sql order by date



Oracle Insert Select con orden por (4)

El caso típico de uso para una inserción ordenada es para coubicar el valor particular en los mismos bloques (reduciendo de manera efectiva el factor de agrupación en los índices en las columnas por las que ha ordenado los datos).

Esto generalmente requiere una inserción de ruta directa ...

insert /*+ append */ into ... select ... from ... order by ...

No hay nada de malo en esto, siempre y cuando acepte que solo vale la pena para los datos masivos, que los datos se cargarán solo por encima de la marca de agua máxima, y ​​que hay problemas de bloqueo involucrados.

Otro enfoque que logra principalmente el mismo efecto, pero que es más conveniente para los sistemas OLTP, es crear la tabla en un clúster.

Estoy trabajando en un procedimiento plsql en el que estoy usando una declaración de inserción-selección. Necesito insertar en la mesa de manera ordenada. pero el orden por el que utilicé en el sql seleccionado no está funcionando.

¿Hay alguna forma específica en Oracle de insertar filas de forma ordenada?


Estoy bastante seguro de que Oracle no garantiza insertar filas en una tabla en un orden específico (incluso si las filas se insertaron en ese orden).

Las consideraciones de rendimiento y almacenamiento superan con creces las consideraciones de ordenamiento (ya que cada usuario puede tener una preferencia diferente para el pedido)

¿Por qué no simplemente usar una cláusula "ORDER BY" en su declaración SELECT?

O mejor aún, ¿cree una VISTA que ya tenga la cláusula ORDER BY?

CREATE VIEW your_table_ordered SELECT * FROM your_table ORDER BY your_column


La tabla estándar de Oracle es una tabla organizada por montones . Una tabla organizada por el montón es una tabla con filas almacenadas sin ningún orden en particular .

La ordenación no tiene nada que hacer al insertar filas. y es completamente sin sentido. Solo necesita un ORDEN BY mientras proyecta / selecciona las filas.

Así es como está diseñado Oracle RDBMS .


El uso de un ORDER BY dentro de un INSERT SELECT no tiene sentido siempre que pueda cambiar el contenido de los datos insertados, es decir, con una secuencia NEXTVAL incluida en la cláusula SELECT . Y esto incluso si las filas insertadas no se ordenarán cuando se capten, esa es la función de su cláusula ORDER BY en su cláusula SELECT al acceder a las filas.

Para tal objetivo, puede usar una ORDER BY colocando su cláusula ORDER BY en una sub consulta , y funciona:

INSERT INTO myTargetTable ( SELECT mySequence.nextval, sq.* FROM ( SELECT f1, f2, f3, ...fx FROM mySourceTable WHERE myCondition ORDER BY mySortClause ) sq )