Problema con Consulta

Colapsar
X
 
  • Tiempo
  • Mostrar
Limpiar Todo
nuevos mensajes
  • schrizophrenia

    #1

    Problema con Consulta

    Hola que tal.
    Les comento q yo hago la siguiente consyulta, y me trae los datos correctos pero tarda demasiado alguien sabe como podria agilizarla?
    gracias!!!

    LOOP AT it_aux_bkpf INTO wa_aux_bkpf.

    SELECT belnr bukrs gjahr buzei lifnr dmbtr shkzg budat bldat
    FROM bsik
    APPENDING CORRESPONDING FIELDS OF TABLE it_bsik
    WHERE belnr = wa_aux_bkpf-belnr AND
    bukrs = p_bukrs AND
    gjahr = p_gjahr AND
    buzei = '1' AND
    lifnr IN s_lifnr AND
    hkont IN s_cuenta.

    IF sy-subrc <> 0.

    SELECT belnr bukrs gjahr buzei lifnr dmbtr shkzg budat bldat
    FROM bsak
    APPENDING CORRESPONDING FIELDS OF TABLE it_bsak
    WHERE belnr = wa_aux_bkpf-belnr AND
    bukrs = p_bukrs AND
    gjahr = p_gjahr AND
    buzei = '1' AND
    lifnr IN s_lifnr AND
    hkont IN s_cuenta.


    ENDIF.
  • stormshadow
    Senior Member
    • jun
    • 117

    #2
    claro, por cada iteración estas haciendo una llamada a la base de datos por eso tarda bastante, bueno lo que a mi se me ocurre es que primero saques todos tus datos de la base de datos y los metas a otra ti, ya despues ahora si loopeas y con un field symbol puedes ir metiendo tus datos de una ti a la otra a la que en realidad quieres, o también podrías utilizar un for all entries que creo que sería el más viable, bueno esa es una solución tal vez halla otra más óptima
    "Si quieres resultados distintos, no hagas siempre lo mismo" .... Einstein

    Comentario

    • schrizophrenia

      #3
      Si lo pense con un For all entries, pero tengo dudas...

      Xq yo lo q tengo q hacer es: Preguntar por cada Belnr q saco de BKPF si aparece en la BSIK y si no esta buscarlo en la BSAK



      Gracias por responder!

      Comentario

      • Gatini28
        Junior Member
        • ago
        • 23

        #4
        Mejora de Performance

        Hola Schrizophrenia,
        de hecho que tu consulta demora por la cantidad de conexiones que tienes a la BD, yo te recomiento lo siguiente:

        1. Realiza un SELECT..FOR ALL ENTRIES a la tabla BSIK con los datos de la tabla it_aux_bkpf.

        2.Realiza un SELECT..FOR ALL ENTRIES a la tabla BSAK con los datos de la tabla it_aux_bkpf.

        3. Loopea la tabla it_aux_bkpf y por cada vuelta realiza READ TABLE a las tablas que obtuviste del punto 1 y punto 2.

        Con ello habras realizado solo 2 conexion a la BD en lugar de realizar una por cada registro dentro de la TI.

        Espero haberte ayudado.

        Saludos,
        Erick Oré.

        Comentario

        • ivan888
          Junior Member
          • oct
          • 5

          #5
          Hola,

          ¿accedes a la BSIK, BSAK con el select-option "s_lifnr" relleno?

          En caso de que esté vacio o que tenga un rango de valores muy grande quizá deberías plantearte ir a la tabla BSEG

          Saludos.

          Comentario

          • schrizophrenia

            #6
            1ero gracias por responder,
            2do, pense hacerlo con la Bseg pero el funcional me dijo q no, Yo solo obedezco! jajajaj
            Gracias!

            Comentario

            Trabajando...