En nuestra anterior entrega hablamos tips para mejorar el
rendimiento de nuestras consultas ABAP usando OPEN SQL. En esta entrega
vamos a entrar un poco más a detalle sobre tablas de rangos.
ABAP nos permite trabajar con tablas de tipo rangos de valores,
siendo declaradas como tablas de rangos de forma implícita, ayudándonos
a crear consultas sencillas o complejas dependiendo de la
implementación que se le dé.
Antes de implementar este tipo de estructura hay que tener en cuenta los campos con los cuentas que son los siguientes:
- SIGN (Tipo de Señal): Este campo de tipo C de
longitud 1, este valor indica si es incluido o excluido el dato de la
fila. Los posibles valores son: ’I’ (incluido) y ‘E’ (excluido).
- OPTION (Opción): Campo de tipo C de longitud 2,
contiene el operador que vamos a utilizar. No puede estar vacio y sus
valores posibles son: ‘EQ’ (=), ‘NE’ (<>), ‘GT’ (>), ‘LT’
(<), ‘GE’ (>=), ‘LE’ (<=), ‘BT’ (Between) y ‘NB’ (Not
Between). El ‘CP’ (like ‘*’ o ‘+’) y ‘NP’ (not like ‘*’ o ‘+’) no
están completamente funciones.
- LOW (Bajo): Es el valor o el más bajo cuando es una selección por rango.
- HIGH (Alto): El valor más bajo del rango.
Estas estructuras son muy fáciles de observar cuando estamos depurando un programa ABAP.
Se pueden declarar como tipos TYPE o implementadas con DATA, aquí vemos las sentencias:
TYPES|DATA <rangetab> TYPE RANGE OF <type>.
o
TYPES|DATA <rangetab> LIKE RANGE OF <obj>.
Vamos a poner un ejemplo sencillo, consultemos en el maestro de
materiales el código anterior con la siguiente restricción: los que
tienen código entre 1900 y 1999 pero descartando el 1910.
TYPES: BEGIN OF TIT_MATNR,
CODIGO(18),
END OF TIT_MATNR.
DATA: IT_MATNR TYPE STANDARD TABLE OF TIT_MATNR WITH HEADER LINE.
DATA: R_MATNR TYPE RANGE OF MARA-MATNR,
W_MATNR LIKE LINE OF R_MATNR,
C_MATNR TYPE MARA-MATNR.
REFRESH R_MATNR.
W_MATNR-SIGN = 'I'.
W_MATNR-OPTION = 'BT'.
W_MATNR-LOW = '000000000000001900'.
W_MATNR-HIGH = '000000000000001999'.
APPEND W_MATNR TO R_MATNR.
W_MATNR-SIGN = 'E'.
W_MATNR-OPTION = 'EQ'.
W_MATNR-LOW = '000000000000001910'.
APPEND W_MATNR TO R_MATNR.
SELECT BISMT INTO TABLE IT_MATNR
FROM
MARA
WHERE
MATNR IN R_MATNR.
LOOP AT IT_MATNR.
WRITE:/, IT_MATNR-CODIGO.
ENDLOOP.
Ingresa tu comentario sobre cualquier interrogante del tema.
Actualmente calificado con 3.3 por 21 personas
- Currently 3,285714/5 Stars.
- 1
- 2
- 3
- 4
- 5