Hacer uso del IN en SQL NATIVO (NATIVE SQL) con variante

Colapsar
X
 
  • Tiempo
  • Mostrar
Limpiar Todo
nuevos mensajes
  • rafa_fonseca
    Junior Member
    • abr
    • 12

    #1

    Hacer uso del IN en SQL NATIVO (NATIVE SQL) con variante

    Buenos días, quisiera saber lo siguiente, para una prueba del sistema necesito USAR SQL Nativo. Estoy usando el siguiente ejemplo. Capturo los valores de la planta de pantalla.

    data: w_chars(255) type c.
    data: w_counter type i,
    w_counter2 type i.

    loop at s_werks.
    if s_werks-low ne space.
    w_counter = w_counter + 1.
    if w_counter lt w_counter2.
    concatenate w_chars
    ''''
    s_werks-low
    ''''
    c_comma2
    into w_chars.
    else.
    concatenate w_chars
    ''''
    s_werks-low
    ''''
    into w_chars.
    endif.

    endif.
    endloop.

    En variable w_chars debería tener algo así: '1000','RAF' (plantas imaginarias)

    Después procedo a ejecutar el siguiente código:

    Código:
          exec sql performing save_sql_command4.
               select ebeln,
                      ebelp,
                      zekkn,
                      vgabe,
                      gjahr,
                      belnr,
                      buzei,
                      budat,
                      matnr,
                      werks
                 into :wa_ekbe
                 from ekbe
                where mandt = :sy-mandt
                  and vgabe = '1'
                  and bewtp = 'E'
                  and bwart = '101'
                  and budat between :t_12start_date and :t_12end_date
                 and werks in (:w_chars)
          endexec.
    
    
    **********************************************************
    *Form save_SQL_command
    * save query into internal table.
    **********************************************************
    form save_sql_command4.
       move wa_ekbe to int_ekbe.
       append int_ekbe.
    endform.

    siempre da sy-subrc eq 4, por lo que no se ejecuta el SQL nativo.


    en cambio si lo ejecuto de esta manera:

    Código:
          exec sql performing save_sql_command4.
               select ebeln,
                      ebelp,
                      zekkn,
                      vgabe,
                      gjahr,
                      belnr,
                      buzei,
                      budat,
                      matnr,
                      werks
                 into :wa_ekbe
                 from ekbe
                where mandt = :sy-mandt
                  and vgabe = '1'
                  and bewtp = 'E'
                  and bwart = '101'
                  and budat between :t_12start_date and :t_12end_date
                  and werks in ('1000','RAF')
    
          endexec.

    Si funciona. Si le quito a mi variante :w_chars ':' , el programa da un shortdump. y si lo intento hacer con un loop y pasar los valores de la planta y material toma demasiado tiempo.



    Mi pregunta es puedo pasar dentro del SQL nativo mi variante (:w_chars) pero que internamente se comporte como ('1000','RAF').

    Si esto funciona, después agrego una lista de materiales.


    Este ejemplo lo ocupo de esta forma, ya que NECESITO pasar la instrucción de SQL directo a la base de datos, por que nuestro sistema a nivel de BASIS se configuró extrañamente (en 1995 jaja ) que por cada consulta a nivel de base de datos se pase como OR y no como AND o UNION ALL y con este ejemplo lo puedo forzar para demostrar una mejora en el desempeño y ver si nos dejan cambiar eso al menos en el sitema de pruebas de la compañía.


    Saludos.
Trabajando...