Tablas equi, eqbs

Colapsar
X
 
  • Tiempo
  • Mostrar
Limpiar Todo
nuevos mensajes
  • gdmj1107
    Member
    • mar
    • 93

    #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
  • mysmb2
    Senior Member
    • ene
    • 406

    #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
    http://www.programacionabap.com.ar

    Comentario

    • K-MUS
      Member
      • feb
      • 87

      #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

      Comentario

      • gdmj1107
        Member
        • mar
        • 93

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

        Gracias

        Comentario

        • beltsoft
          Member
          • sep
          • 99

          #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 ...

          Comentario

          • gdmj1107
            Member
            • mar
            • 93

            #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

            Comentario

            Trabajando...