✒️ABAP El lenguaje SQL y la sentencia SELECT
ABAP El lenguaje SQL y la sentencia SELECT
1 | La sentencia SELECT
Existen en ABAP un conjunto de sentencias que se utilizan para acceder a las bases de datos. La principal sentencia es SELECT, cuya sintaxis es la siguiente:
Imagen 1.1 - La sentencia SELECT
Si quisiéramos obtener todos los registros de la tabla ZTABLA_USUARIOS usaríamos el siguiente código:
Imagen 1.2 - La sentencia SELECT *
Donde TI_USUARIOS es una tabla interna del mismo tipo de la tabla ZTABLA_USUARIOS. El asterisco indica que se obtendrán todos los campos de la tabla. La cláusula INTO TABLE se utiliza cuando el resultado de la consulta se guarda en una tabla interna.
Evitar el uso del * cuando solo se requiera obtener algunos campos de la tabla origen.
En la sentencia anterior, en caso de existir registros en la tabla ZTABLA_USUARIOS, estos pisarán el contenido de la tabla interna TI_USUARIOS.
Podría ocurrir que queramos conservar el contenido de la tabla interna TI_USUARIOS luego de reiteradas selecciones. En este caso tendríamos que usar la cláusula APPENDING TABLE en lugar de INTO TABLE.
Es recomendable hacer CLEAR y REFRESH de la tabla interna antes de realizar la selección.
Si quisiéramos obtener de todos los campos de la tabla ZTABLA_USUARIOS el campo DNI deberíamos crear una tabla auxiliar solo con el campo DNI para alojar el resultado de la consulta.
Imagen 1.3 - SELECT de un solo campo almacenado en una estructura
Siempre después de un SELECT se debe preguntar por el SY-SUBRC para saber como proseguir.
Si quisiéramos obtener la primera ocurrencia de la tabla ZTABLA_USUARIOS donde se cumpla determinada condición debemos usar la cláusula SINGLE como vemos a continuación:
Imagen 1.4 - La sentencia SELECT SINGLE
El resultado de esta consulta será guardado en la estructura WA_USUARIOS que es del mismo tipo que la tabla ZTABLA_USUARIOS.
Si quisiéramos hacer la misma consulta anterior pero necesitamos obtener solo el campo DNI entonces ya no sería necesaria la estructura WA_USUARIOS sino que guardaríamos el resultado en la variable V_DNI tal como vemos en el siguiente ejemplo:
Imagen 1.5 - SELECT de un solo campo almacenado en una variable
Si quisiéramos obtener de una tabla los registros que cumplan una condición pero queremos guardarlos en una tabla interna que no tiene la misma estructura que la tabla, entonces tenemos que usar la cláusula INTO CORRESPONDING FIELDS OF TABLE.
Imagen 1.6 - La sentencia SELECT INTO CORRESPONDING FIELDS OF TABLE
En el ejemplo anterior, la tabla interna TI_USUARIOS2 está compuesta por los campos NOMBRE_APE y ESTADO_USU.
Supongamos que tenemos un reporte que tiene la pantalla de selección:
Imagen 1.7 - Pantalla de selección de un reporte
Donde Nombre y Apellido es el parameter P_NOMAPE y Estado Usuario es el select-options S_ESTADO. Si quisiéramos hacer una selección a la tabla ZTABLA_USUARIOS en base a lo que los usuarios ingresan por pantalla haríamos lo siguiente:
Imagen 1.8 - Selección utilizando los parámetros de la pantalla de selección
La cláusula IN se utiliza para los select-options en las condiciones de un select.
Ahora, si quisiéramos obtener el usuario activo con DNI más alto tendríamos que usar la cláusula MAX de la siguiente forma:
Imagen 1.9 - La sentencia SELECT SINGLE MAX
Si quisiéramos saber la cantidad de usuarios con estado = "activo", debemos usar la cláusula COUNT de la siguiente manera:
Imagen 1.10 - La sentencia SELECT SINGLE COUNT
Si quisiéramos obtener de una tabla todos los registros que existan en una tabla interna cargada con datos, entonces debemos utilizar la sentencia FOR ALL ENTRIES IN que nos permite especificar condiciones en tiempo de ejecución. Veamos un ejemplo:
Imagen 1.11 - La sentencia FOR ALL ENTRIES
Si quisiéramos obtener todos los registros que cumplan con un patrón de texto en alguno de sus campos, debemos utilizar la sentencia LIKE como vemos en el siguiente ejemplo:
Imagen 1.12 - La sentencia LIKE
 
 
 
Sobre el autor
Publicación académica de Alex Francisco Lemos Collazos, en su ámbito de estudios para la Carrera Consultor ABAP.
Alex Francisco Lemos Collazos
Profesión: Ingeniero en Sistemas - Colombia - Legajo: QS36A
✒️Autor de: 174 Publicaciones Académicas
🎓Cursando Actualmente: Master S/4HANA Material Management
🎓Egresado de los módulos:
- Máster Material Management en SAP S/4HANA LOGISTIC
- Carrera Consultor ABAP Nivel Avanzado
- Carrera Consultor ABAP Nivel Inicial
- Carrera Consultor en SAP SD Nivel Inicial