EXEC SQL con condicion IN

Colapsar
X
 
  • Tiempo
  • Mostrar
Limpiar Todo
nuevos mensajes
  • J e f f
    Member
    • nov
    • 90

    #1

    EXEC SQL con condicion IN

    Buenas gente!
    Una consulta netamente técnica de la que no puedo encontrarle la vuelta.
    Tengo que hacer una consulta sobre una tabla externa a SAP. A partir de N materiales y N centros, tengo que recuperar el stock de los mismos. Lo quiero hacer en un solo acceso/lectura (por un tema de performance).

    COMO hago?

    Estuve probando usar el IN, pero me da un error con el parámetro.

    Código:
    Se ha producido un error SQL: Sintaxis incorrecta cerca de '@P1'.
    Alguna idea??
    Dejo el código debajo:

    Código:
    EXEC SQL PERFORMING get_datos.
    
    SELECT centro,
                material,
                stock
    
    INTO :e_data-centro,
            :e_data-material,
            :e_data-stock
    
    FROM v_Stock
    
    WHERE material IN :p_matnr
        AND centro    IN :p_werks
    
    ENDEXEC.
    
    FORM get_datos.
      gt_data-centro     = e_data-centro.
      gt_data-material  = e_data-material.
      gt_data-stock      = e_data-stock.
      APPEND gt_data.
      CLEAR  e_data.
    ENDFORM.
    Donde los parametros contienen:

    p_matnr = ('528', '960', '1014', '1045', '1046')
    p_werks = ('N002', 'N003', 'N004', 'N005', 'N006', 'N007')

    Ideas? Me estoy rompiendo la cabeza!
    Gracias!!!
    Código:
    [B]*** ABAP Developer (since 2007)[/B]
  • vanesamacri
    Senior Member
    • jun
    • 146

    #2
    Hola.

    ¿El contenido de los parámetros utilizados para filtrar en los IN están definidos como cadena literal? ¿O son rangos convencionales definidos en ABAP (ejemplo: tabla interna de SELECT-OPTION)?

    Un saludo.
    Iván

    Comentario

    • J e f f
      Member
      • nov
      • 90

      #3
      Originalmente publicado por vanesamacri
      Hola.

      ¿El contenido de los parámetros utilizados para filtrar en los IN están definidos como cadena literal? ¿O son rangos convencionales definidos en ABAP (ejemplo: tabla interna de SELECT-OPTION)?

      Un saludo.
      Iván
      Buenas Vanesa! Los parámetros están definidos como literal, pasa que al ser "dinámicos" no se si eso estoy usando bien la condición IN.

      Yo hago

      WHERE material IN _matnr
      AND centro IN _werks

      donde en p_matnr concateno una cadena literal -> ('528', '960', '1014', '1045', '1046') y p_werks igual. No se si me falta algún espacio después del paréntesis, o que. No he trabajado mucho con SQL nativo en ABAP, por eso las dudas de como pasarle parámetros, y como recuperar la info de la query!

      Básicamente estoy queriendo recuperar muchos datos, para muchos parámetros de entrada.

      Alguna otra idea de como hacer esto?? Cualquier cosa ayudaría, siempre que sea UNA sola consulta, por la performance.

      GRACIAS!
      Código:
      [B]*** ABAP Developer (since 2007)[/B]

      Comentario

      • J e f f
        Member
        • nov
        • 90

        #4
        Buenas,

        Finalmente pude resolver la consulta. Estaba haciendo mal la misma, ya que estaba pasando todos mis datos en un solo parametro, y lo correcto es hacerlo en parametros separados. No se si le servira a alguien esto, pero lo que hice, fue crear varios parametros, y asignarle valor si los necesito, en caso que haga la consulta con los parametros vacios, solo me devolvera aquelos que si estan completos.

        El codigo final me quedo asi para el caso que YO estaba necesitando:

        Código:
              EXEC SQL PERFORMING get_datos2.
        
                SELECT centro,
                       material,
                       stock
        
                  INTO :e_data-centro,
                       :e_data-material,
                       :e_data-stock
        
                  FROM v_Stock
                 WHERE centro   IN ( :p_werks01, :p_werks02, :p_werks03, :p_werks04, :p_werks05,
                                     :p_werks06, :p_werks07, :p_werks08, :p_werks09, :p_werks10,
                                     :p_werks11, :p_werks12, :p_werks13, :p_werks14, :p_werks15 )
        
                   AND material IN ( :p_matnr01, :p_matnr02, :p_matnr03, :p_matnr04, :p_matnr05,
                                     :p_matnr06, :p_matnr07, :p_matnr08, :p_matnr09, :p_matnr10,
                                     :p_matnr11, :p_matnr12, :p_matnr13, :p_matnr14, :p_matnr15 )
        
              ENDEXEC.
        De esta manera, puedo pasarle hasta 15 materiales y 15 centros, y la consulta funciona correctamente. Mi error inicial tenia que ver con el tipo de parametro que le estaba pasando a la consulta.

        Gracias y Saludos!
        Código:
        [B]*** ABAP Developer (since 2007)[/B]

        Comentario

        Trabajando...