MUNDOSAP

MUNDOSAP (foro/index.php)
-   Programación ABAP IV (foro/forumdisplay.php?f=4)
-   -   Tablas equi, eqbs (foro/showthread.php?t=45647)

gdmj1107 04/10/11 14:02:38

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

mysmb2 04/10/11 14:21:31

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!

K-MUS 04/10/11 15:05:52

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

gdmj1107 05/10/11 15:11:05

Gracias por la ayuda, probaré las sugerencias que me dan

Gracias

beltsoft 05/10/11 15:31:29

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.

gdmj1107 12/10/11 21:41:47

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


Husos Horarios son GMT. La hora en este momento es 18:20:16.

www.mundosap.com 2006 - Spain
software crm, crm on demand, software call center, crm act, crm solutions, crm gratis, crm web