Pregunta 9 – Preparación Examen ABAP

La siguiente pregunta es:

pregunta 9.png

Traducción:

SELECT fld1 fld2 FROM tab1 APPENDING TABLE itab WHERE fld1 in sfld1. ¿Qué hace?

A) Seleccione las filas de tab1 cuyas entradas sean coincidentes con itab
B) Añadir filas a las ya existentes en itab
C) Añadir filas a itab después de primero eliminar las filas existentes de itab
D) Nada, se trata de un error de sintaxis

Para resolver esta pregunta debemos saber primero que es lo que realiza la palabra clave APPENDING TABLE en la consulta SELECT realizada.

Como ya sabemos al hacer uso de una consulta SELECT estamos recopilando información de la Base de Datos para traerla a una tabla interna y usar dicha tabla para el tratamiento que se le necesite. Esto se realiza para evitar un consumo excesivo de acceso a Base de Datos, lo cual puede incurrir en problemas de performance.

Hay muchas formas de hacer uso del comando SELECT, en este post nos centraremos en 2 formas:

La primera es usando el comando SELECT junto con la palabra clave INTO TABLE, la cual es usada para ingresar la información recopilada en la Base de Datos pero con la opción de primero limpiar la tabla para reemplazar el valor por lo consultado. Si lo consultado no devuelve información la tabla que se obtiene se encontrará en blanco.

Se realiza un ejemplo para ver su funcionamiento

Se realiza una búsqueda en la tabla BKPF para obtener los 5 primeros documentos financieros y luego se consulta a la misma tabla para obtener el número de documento “1”, el cual no existe, pero deseamos ver que obtiene la consulta.

REPORT ZLI_PRUEBA.

TYPESBEGIN OF TY_BKPF,
  BUKRS TYPE BKPFBUKRS,
  BELNR TYPE BKPFBELNR,
  GJAHR TYPE BKPFGJAHR,
END OF TY_BKPF.

DATAT_BKPF TYPE TABLE OF TY_BKPF WITH HEADER LINE.

SELECT BUKRS BELNR GJAHR INTO TABLE T_BKPF UP TO 5 ROWS FROM BKPF.

SELECT BUKRS BELNR GJAHR INTO TABLE T_BKPF FROM BKPF WHERE BELNR ‘1’.

LOOP AT T_BKPF.
  WRITE:/1 T_BKPFBELNR.
ENDLOOP.

El programa no genera resultado, y ello porque la tabla interna T_BKPF al no tener información no ingresa al bucle LOOP y como no genera pantallas, el programa no devuelve resultados.

Pero veamos por debug lo acontecido:

Primero en la consulta de los cinco primeros documentos de la BKPF vemos que si trae resultados

pregunta 9a

Si vemos el detalle aparecen las cinco líneas

pregunta 9b

Sin embargo, al hacer la segunda consulta a la tabla BKPF vemos que no devuelve resultados, por ello la variable de sistema SY-SUBRC devuelve 4, indicando que el valor no se encontró en la BD

pregunta 9d

Y la tabla interna T_BKPF ahora aparece sin ningún registro

pregunta 9c

Con lo cual se concluye que el complemento INTO TABLE primero limpia la tabla interna y luego, con los resultados que encuentre tras la consulta a la Base de Datos, inserta las líneas encontradas.

La segunda forma que veremos de usar el comando SELECT es junto al complemento APPENDING TABLE, el cual cumple la misma función que la anterior, pero con la diferencia que este complemento no borra la tabla interna, sino que agrega los nuevos valores encontrados. Si la consulta no encuentra valores, la tabla mantiene los registros que ya anteriormente contenía.

Modificamos el ejercicio anterior con el nuevo complemento

REPORT ZLI_PRUEBA.

TYPESBEGIN OF TY_BKPF,
  BUKRS TYPE BKPFBUKRS,
  BELNR TYPE BKPFBELNR,
  GJAHR TYPE BKPFGJAHR,
END OF TY_BKPF.

DATAT_BKPF TYPE TABLE OF TY_BKPF WITH HEADER LINE.

SELECT BUKRS BELNR GJAHR APPENDING TABLE T_BKPF UP TO 5 ROWS FROM BKPF.

SELECT BUKRS BELNR GJAHR APPENDING TABLE T_BKPF FROM BKPF WHERE BELNR ‘1’.

LOOP AT T_BKPF.
  WRITE:/1 T_BKPFBELNR.
ENDLOOP.

Esta vez el programa si devuelve resultado:

pregunta 9e

Como se puede ver, imprime lo encontrado en la primera consulta. No tuvo impacto que la segunda consulta no haya devuelto resultados, pues los anteriores se mantuvieron intactos.

Si ahora modificamos la segunda consulta por la siguiente línea:

SELECT BUKRS BELNR GJAHR APPENDING TABLE T_BKPF UP TO 5 ROWS FROM BKPF WHERE GJAHR ‘2016’.

Obtendremos como resultado los cinco documentos obtenidos anteriormente y además otros nuevos 5 documentos pertenecientes al año 2016

pregunta 9F

Con lo que se concluye que el complemento APPENDING TABLE anexa los resultados de cada consulta a la tabla interna, sin afectar los datos que ya puede contener.

Por lo tanto, la clave correcta es la B – Añadir filas a las ya existentes en itab.

 

Anuncios

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión /  Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión /  Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión /  Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión /  Cambiar )

Conectando a %s