Array Fetch

Colapsar
X
 
  • Tiempo
  • Mostrar
Limpiar Todo
nuevos mensajes
  • acontreras
    Junior Member
    • oct
    • 16

    #1

    Array Fetch

    Amigos:

    Miren tengo problemas con un Array Fetch, me piden seleccionar los registros de la tabla BKPF de una solas vez ( ARRAY FETCH ), luego procesar los datos en la tabla interna. La idea es que mejore la performance.El código es el siguiente:

    LOOP AT i_output .
    CONCATENATE i_output-belnr i_output-gjahr INTO clave .
    SELECT SINGLE bldat xblnr waers
    INTO (i_output-bldat, i_output-xblnr, i_output-waers_i)
    FROM bkpf
    WHERE awtyp = 'RMRP'
    AND bukrs = i_output-bukrs
    AND gjahr = i_output-gjahr
    AND awkey = clave .

    IF sy-subrc EQ 0 .
    MODIFY i_output.
    SELECT SINGLE wrbtr
    INTO i_output-importe
    FROM bseg
    WHERE bukrs = i_output-bukrs
    AND belnr = i_output-knbelnr
    AND gjahr = i_output-gjahr .

    IF sy-subrc EQ 0 .
    MODIFY i_output .
    ENDIF .

    SELECT SINGLE augbl
    INTO i_output-augbl
    FROM bsak
    WHERE belnr = i_output-knbelnr
    AND xblnr = i_output-xblnr
    AND bukrs = i_output-bukrs
    AND gjahr = i_output-gjahr
    AND lifnr = i_output-lifnr .
    IF sy-subrc EQ 0 .
    i_output-pagado = 'Pagado' .
    MODIFY i_output .
    CLEAR i_output-augbl .
    CLEAR i_output-pagado .
    ENDIF .
    CLEAR i_output-xblnr .
    CLEAR i_output-bldat .
    ENDIF .
    ENDLOOP .
  • ballan
    Senior Member
    • oct
    • 671

    #2
    Hay muchos mensajes referentes al performance en este foro, puedes buscar algun para ampliar un poco mas de informacion pero como norma general no se debe utilizar

    LOOP

    Select single ...

    ENDLOOP

    es mejor utilizar

    Select..
    FOR ALL ENTRIES ..

    o si la tabla del for all entries es muy grande puedes partirla en trozos que vas metiendo en rangos y acumulando los select, algo asi

    data: lv_conta type i.

    ranges: s_rango for...

    LOOP tabla

    add 1 to lv_conta

    if lv_conta = 500

    select ...
    APPENDING TABLE...
    WHERE campo in S_RANGO

    clear lv_conta.

    else.

    s_rango-sign = 'I'.
    s_rango-option = 'EQ'.
    s_rango-low = tabla-valor

    append s_rango.
    clear s_rango.

    endif.

    ENDLOOP

    Comentario

    Trabajando...