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
)