Operador FILTER – Eficiencia Consumo Memoria
Este operador nos permite hacer un mejor uso en cuanto al tratamiento de las tablas internas de un proceso, obtendremos un mejor consumo de memoria y dotará a nuestro código de una mayor eficiencia.
Es típico ver en procesos como listado con un gran volumen de datos un SORT a una tabla interna con un elevado nº de registros y justo seguido un DELETE por algún criterio.
Sería algo así:
SORT i_tab by campo1 campo2 descending.
DELETE i_tab WHERE fechafin NE ‘00000000’. (para quedarnos con vigentes por ejemplo)
Ambas sentencias siendo una tabla interna con 100.000 registros por poner, puede conllevar un alto consumo en memoria e incluso puede llegar a dar DUMP por desbordamiento.
La sentencia FILTER aúna ambas y es más rápida y eficiente en memoria.
Su uso sería:
Declaración de variables:
TYPES: BEGIN OF t_fechafin ,
fechafin TYPE zzeffest,
END OF t_fechafin ,
tt_fechafin TYPE HASHED TABLE OF t_fechafin WITH UNIQUE KEY ffest.
DATA: li_fechafin TYPE tt_fechafin .
USO:
li_fechafin = VALUE tt_fechafin ( ( fechafin = ‘00000000’ ) ).
i_tab2 = FILTER #( i_tab IN li_fechafin WHERE fechafin = fechafin ).
Hemos tenido casos crtitícos con el uso de memoria del sistema y con esto hemos podido paliarlos.
Saludos.