Select For All entries

La adición FOR ALL ENTRIES se utiliza para realizar lecturas en base de datos en base a los datos que existen en otra tabla interna, distinta a la que se utiliza para recoger los resultados del SELECT. Esta lección trata de explicarle todos los procesos que implica el uso de esta instrucción.

  • Sintaxis

SELECT result
FROM source
INTO|APPENDING target
[[FOR ALL ENTRIES IN itab] WHERE sql_cond] …
 

  • Efecto

La adición WHERE restringe el número de líneas incluidas en el conjunto de resultados por la sentencia SELECT, utilizando una expresión lógica sql_cond. La expresión lógica compara el contenido de las columnas de la base de datos con el contenido de los objetos de datos ABAP o con el contenido de otras columnas. La adición opcional FOR ALL ENTRIES puede utilizarse para comparar el contenido de una columna en la base de datos con un componente con todas las líneas de una tabla interna estructurada itab.
La expresión lógica sql_cond es verdadera, falsa o desconocida. La expresión es desconocida si una de las columnas implicadas en la base de datos contiene un valor nulo y se evalúa con otra comparación como IS NULL. Una fila sólo se incluye en el conjunto de resultados si la expresión lógica es verdadera.
Excepto para las columnas del tipo STRING o RAWSTRING más LCHR o LRAW, todas las columnas de las tablas de la base de datos o vistas listadas después de FROM pueden ser evaluadas después de la condición WHERE. Las columnas no necesariamente tienen que ser una parte del conjunto de resultados.

  • Aplicación práctica

Amplíe el programa ejecutable creado en la lección ABAP Open SQL – SELECT UP TO n ROWS . En la lógica de la ampliación realizamos una lectura en la tabla ZSPFLISA00001 obteniendo todos los registros que corresponden a los registros de la tabla interna que contiene la lectura de la primera tabla de base de datos ZSFLIGHTSA00001. En la lectura tenemos que filtrar algunas columnas de la primera tabla interna. Utilizamos las columnas CARRID y CONNID. Al finalizar mostramos en la salida el contenido de la tabla interna utilizando el método estático DISPLAY de la clase estándar CL_DEMO_OUTPUT.

  1. Implementamos el código fuente.
  2. Ejecutamos el programa.
  • Notas
  • Si la tabla interna del FOR ALL ENTRIES no contiene registros y en el filtro del WHERE se utiliza sólo la tabla interna, la sentencia SELECT devuelve todos los registros de la tabla de base de datos, sería lo mismo con realizar una lectura sin filtros.
  • El ID del mandante no se puede consultar en la condición WHERE, si la gestión automática del mandante no se desactiva mediante la adición CLIENT SPECIFIED después de FROM. Esto suele probarse mediante la comprobación de sintaxis. Si se consulta el ID del mandante en la condición WHERE y no se especifica CLIENT SPECIFIED (lo que a veces ocurre cuando se utilizan nombres de tabla alternativos, en combinaciones y cuando se especifica dinámicamente), la gestión automática del mandante no se desactiva. En este caso, hay dos condiciones para la columna de cliente: la condición implícita del controlador del mandante automático para el mandante actual y la condición explícitamente especificada. Si el mandante actual no se especifica en la condición explícitamente especificada, el conjunto de resultados está vacío.
  • Las expresiones lógicas de la condición WHERE también se pueden utilizar después de la adición HAVING y a veces en la condición ON de una expresión de unión JOIN después de la adición FROM.
  • Si se accede a la tabla de la base de datos con un almacenamiento intermedio SAP genérico, el área almacenada en el búfer debe especificarse completamente en la condición WHERE, de lo contrario se ignorará el búfer.
  • Si se accede a las tablas de la base de datos mediante el almacenamiento en búfer de registros individuales, se deben incluir las condiciones del JOIN utilizando AND en la condición WHERE para todos los campos clave de la clave principal, de lo contrario se ignorará el almacenamiento en búfer.

 

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *