Si bien su lógica y las soluciones anteriores son buenas para pequeña escala, si está hablando de más de 65 000 elementos, necesita una solución que sea escalable.
Mi sugerencia es dividir esta tarea en 2 pasos.
Cree una tabla temporal, esta tabla temporal tendrá un mínimo de 3 columnas
TEMP_ITEM_ORDER_TABLE (
session_key varchar2(50),
item_id number,
item_report_order number
)
Cada vez que el usuario solicite una consulta de este tipo, inserte datos, es decir, ID de elementos y su número de secuencia en esta tabla temporal con alguna clave única para identificar la sesión del usuario (posiblemente ID de usuario o ID de sesión). Este truco es para evitar la colisión de listas de elementos cuando varios usuarios disparan informes simultáneamente.
Paso 2
Ahora active su consulta de informe uniéndose a su tabla principal, tabla temporal con session_key
. En los datos del pedido de consulta basados en su pedido de entrada (ya almacenados en la tabla temporal)
SELECT
T1.* , T2.item_report_order
FROM ITEM T1, TEMP_ITEM_ORDER_TABLE T2
WHERE T1.ITEM_ID = T2.ITEM_ID
AND T2.session_key = :input_session_key
ORDER BY t2.item_report_order
Este método es
- independiente de la base de datos
- escalable con cualquier número de entradas
- Ofrece el mejor rendimiento posible
Nota:Para mejorar aún más el rendimiento de las consultas, cree un índice en session_key, item_id en la tabla temporal y también cree un índice en item_id en la tabla ITEM (si aún no existe)
Editar:Oracle ofrece Tabla temporal global función, que crea funciones para permitir registros solo dentro de la sesión y la limpieza automática al confirmar/finalizar la sesión, etc. Puede utilizar esta función y evitar la clave de sesión, pero esta solución no se puede replicar en otros productos de base de datos a menos que admite una función similar.