PDA

Ver la Versión Completa : Array Fetch


acontreras
10/02/09, 17:51:06
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
11/02/09, 09:38:35
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