#1
|
|||
|
|||
Tablas equi, eqbs
Hola a todos, les comento que realizo un select de estas tablas y debo leer aproximadamente 17 millones de registros los que tengo que guardar en una tabla interna. Los parámetros que tengo es el material, el centro y el almacen. Es un solo material en este caso.
Sin embargo he tenido problemas de memoria y el proceso nunca termina, se ha ampliado el espacio de memoria pero ni aun asi se soluciona el problema. Lo que me podia a pensar es que si en el select haya una forma de leer del primer registro al numero 10 por decir algo llevarlo a la tabla interna, trabajarlo, luego seleccionar del registro 11 al 20, llevarlo a la tabla interna, etc. Es decir hacer un select controlado aparte de los parámetro que se tiene? Adjunto mi sentencia select. SELECT EQUI~erdat EQUI~CHARGE EQUI~EQUNR EQUI~LAGER EQUI~MATNR EQUI~SERNR EQUI~WERK EQBS~B_CHARGE EQBS~B_LAGER EQBS~B_WERK EQBS~EQUNR INTO CORRESPONDING FIELDS OF TABLE TABLA FROM ( EQUI INNER JOIN EQBS ON EQBS~EQUNR = EQUI~EQUNR ) WHERE EQUI~MATNR IN MATERIAL AND EQUI~SERNR IN NSERIE AND EQBS~B_LAGER IN ALMACEN AND EQBS~B_WERK IN CENTRO. Gracias por su ayuda |
#2
|
||||
|
||||
hola lo que podes hacer es paquetizar tu consulta pero si el problema es de memoria por mas eficiente que hagas la consulta el error esta en la cantidad de registros en la tabla interna.
proba con select xxx up to n rows haces el append a la tabla interna endselect donde xxx son los campos y las condiciones y n es la cantidad de registros por operacion. espero te sirva, saludos!
__________________
Sebastián Chiavia |
#3
|
|||
|
|||
Hola gdmj1107
1 - Elimina el INNER JOIN 2 - Proba barriendo toda la tabla interna o por un índice, muchas veces es mejor traer más registros de lo necesario ya que el acceso es más lentoq ue trabajar con memoria interna. y te aconsejo usar la técnica de "cursor paralelo" (Parallel Cursor) para loopear tablas internas con muchos registros, si no sabes lo que es ... buscalo y vas a encontrar mucha info en inet. 3 - No existe una Base de datos lógica que te sirva, pero una opción podría hacer una. Nuevamente si no sabes que es una base de datos lógicas busca info, te lo digo porque funcionan bien con reportes de muchos registros (casi todos los reportes de FI por ejemplo los fbl3n y demas... usan base de datos lógicas) 4 - Si igualmente barriendo las tablas, usando índices o base de datos lógicas, no se puede correr online. Tendrán que correr de fondo el reporte. Saludos |
#4
|
|||
|
|||
Gracias por la ayuda, probaré las sugerencias que me dan
Gracias |
#5
|
|||
|
|||
Las sugerencia de K-MUS son muy buenas adicional te sugiero:
1. Quitar esto: INTO CORRESPONDING FIELDS OF TABLE TABLA, Por: INTO TABLE TABLA. 2. Utiliza Hashed tables. 3. Muy importante lo de INDICE, ya comentado. Saludos.
__________________
SSE BeltSoft México Your Business, our motivation ... |
#6
|
|||
|
|||
Hola a todos, reformé mi consulta utilizando una vista que utiliza las dos tablas que necesitaba. El tiempo de consulta se redujo. Lo que ahora requiero es saber si utilizando el
select xxx up to n rows puedes seleccionar una cantidad n de filas y luego en una segunda vez puedes seleccionar una cantidad también n de filas pero a partir de una determinada fila en la que te quedaste en la primera consulta. Necesito leer toda la vista secuencialmente porque requiero las existencias de los respectivos materiales por número de serie. Si me pueden ayudar les agradezco mucho Salu2 |
Herramientas | Buscar en Tema |
Desplegado | |
|
|