La adición PACKAGE SIZE permite en la sentencia SELECT…ENDSELECT iterar el resultado que devuelve el gestor de base de datos en paquetes, es decir en más de un registro. Esta lección trata de explicarle cómo implementar esta instrucción.
- Sintaxis
SELECT result
[CORRESPONDING FIELDS OF] TABLE itab [PACKAGE SIZE n] }
…
[ENDSELECT].
- Efecto
Con la adición PACKAGE SIZE la sentencia SELECT abre un bucle, que debe cerrarse con ENDSELECT. En cada iteración de bucle, la instrucción SELECT asigna una fila o un paquete de filas a los objetos de datos especificados en el destino. Si se ha asignado la última fila o el conjunto de resultados está vacío, SELECT salta a ENDSELECT. Un cursor de base de datos se abre implícitamente para procesar un bucle SELECT, y se cierra de nuevo cuando el bucle ha terminado. Puede salir del bucle utilizando las mismas instrucciones que se utilizan para salir de los bucles LOOP. Si el conjunto de resultados totales se pasa al objeto de datos en un solo paso, no se abre un bucle y no se puede especificar la sentencia ENDSELECT.
Con la excepción de las adiciones INTO y APPENDING, las entradas de la sentencia SELECT especifican qué datos deben ser leídos por la base de datos y en qué forma. Este requisito se implementa en la interfaz de la base de datos para la interfaz de programación del sistema de base de datos y luego se pasa al sistema de base de datos. Los datos se leen en paquetes desde la base de datos y se transportan desde el servidor de base de datos al servidor de aplicaciones actual. En el servidor de aplicaciones, los datos se pasan a los objetos de datos del programa ABAP de acuerdo con los ajustes especificados en las adiciones INTO y APPENDING.
- Aplicación práctica
En un programa ejecutable realizamos una lectura de la tabla de base de datos ZSCARRSA00001 obteniendo todo el contenido en paquetes de dos registros. Para entender el proceso mostramos en la salida los valores de los campos CARRID y CARRNAME de cada paquete dejando una línea en blanco en cada iteración con la sentencia SKIP.
- Implementamos el código fuente.
- Ejecutamos el programa.
¿El uso de PACKAGE SIZE afecta al performance? ¿En que casos es recomendable usar esta adición?
Hola Jeremias,
El tamaño del paquete no afecta directamente el tiempo de ejecución del programa, se utiliza para dividir grandes volúmenes de datos en fragmentos que se pueden manejar sin desbordamientos de memoria. Puede haber un efecto indirecto, por ejemplo el manejo de tablas internas más pequeñas puede ser más rápido que el manejo de tablas más grandes. El tamaño de paquete recomendado es 10.000 o hasta 50.000.
Un saludo.