✒️ABAP / El lenguaje SQL y la sentencia SELECT Por Mayra Pino Rodriguez
ABAP El lenguaje SQL y la sentencia SELECT

INSTRUCCIONES SQL: LA SENTENCIA SELECT.
1.- LA SENTENCIA SELECT:
Sentencia de ABAP que se utiliza para acceder a las bases de datos de SAP.
Sintaxis: SELECT <resultado> FROM <tabla> INTO <target> WHERE <condiciones>.
dde: resultado: se colocan los campos q se quieren recuperar
tabla: es la tabla origen de dde se sacan los datos
target: es el destino dde serán alojados los datos
condiciones: condiciones de la busqueda.
Ej: Si queremos obtener todos los registros de la tabla ZTABLA_USUARIOS:
* Selecciono todos los registros
SELECT * FROM ztabla_usuarios INTO TABLE ti_usuarios.
Donde TI_USUARIOS es una tabla interna del mismo tipo de la tabla ZTABLA_USUARIOS. El asterisco indica q se obtendrán todos los campos de la tabla. La cláusula INTO TABLE se utiliza cdo el resultado de la consulta se guarda en una tabla interna.
Evitar el uso del * cdo solo se requiera obtener algunos campos de la tabla origen.
Podría ocurrir q queramos conservar el contenido de la tabla interna TI_USUARIOS luego de reiteradas selecciones. En este caso tendríamos q usar la clausula APPENDING TABLE en lugar de INTO TABLE.
Es recomendable hacer CLEAR y REFRESH de la tabla interna antes de realizar la selección.
Ej: si queremos 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.
* Selecciono de todos los registros el campo DNI
SELECT dni FROM ztabla_usuarios INTO TABLE ti_usuarios_aux.
Siempre después de un SELECT se debe preguntar por el SY-SUBRC para saber como proseguir.
- Cláusula SINGLE: para obtener la primera ocurrencia de la tabla ZTABLA_USUARIOS donde se cumpla determinada
condición.
Ej:
* Selecciono el primer registro q cumpla la condición
CLEAR wa_usuarios.
SELECT SINGLE *
FROM ztabla_usuarios INTO wa_usuarios where nombre_ape NE space.
el resultado se guardará en la estructura wa_usuarios q es del mismo tipo q 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 q guardaríamos el resultado en la variable V_DNI tal como vemos en el sgte ejemplo:
* Selecciono el primer registro q cumpla la condición
CLEAR v_dni.
SELECT SINGLE dni FROM ztabla_usuarios INTO v_dni WHERE nombre_ape NE space.
Si quisiéramos obtener de una tabla los registros q cumplan una condición pero queremos guardarlo en una tabla interna q no tiene la misma estructura q la tabla, entonces tenemos q usar la cláusula INTO CORRESPONDING FIELDS OF TABLE.
Ej:
* Selecciono los registros q cumpla la condición
SELECT nombre_ape estado_usu frm ztabla_usuarios INTO CORRESPONDING FIELDS OF TABLE ti_usuario2
WHERE nombre_ape NE space AND estado_usu = 'A'.
Si quisiéramos hacer una selección a la tabla ZTABLA_USUARIOS en base a q los usuarios ingresan por pantalla:
* Selecciono los registros q cumplan con los parámetros de pantalla
SELECT * FROM ztabla_usuarios INTO TABLE ti_usuarios
WHERE nombre_ape = p_nomape AND estado_usu IN s_estado.
la cláusula IN se utiliza para los select-options en las condiciones de un select.
Ej: si quisiéramos obtener el usuario activo con DNI más alto tendríamos q usar la cláusula MAX de la siguiente forma:
* Obtengo el usuario activo con DNI más alto
SELECT SINGLE MAX(dni) INTO v_dni FROM ztabla_usuarios WHERE estado_usu = 'A'.
Ej: si quisiéramos saber la cantidad de usuarios con estado = "activo", debemos usar la cláusula COUNT de la siguiente manera:
* Obtengo la cantidad de usuarios activos
SELECT COUNT(*) INTO v_activos FROM ztabla_usuarios WHERE estado_usu = 'A'.
Sentencia FOR ALL ENTRIES IN: obtener de una tabla todos los registros q existan en una tabla interna cargada con datos, esto nos permite especificar condiciones en tiempo de ejecución.
Ej:
* Obtengo los registros de los usuarios q existan en la tabla interna TI_PROVEEDORES
SELECT * INTO TABLE ti_usuarios FROM ztabla_usuarios FOR ALL ENTRIES IN ti_proveedores
WHERE dni = ti_proveedores-dni.
Sentencia LIKE: si quisiéramos obtener todos los registros q cumplan con un patrón de texto en alguno de sus campos.
Ej:
* Recupero los usuarios cuyo nombre empiece con A
SELECT * FROM ztabla_usuarios INTO TABLE ti_usuarios WHERE nombre_ape LIKE 'A%'.
Cdo escribimos la sentencia SELECT es totalmente igual para el compilador ABAP si colocamos primero la sección FROM y luego la sección INTO o al revés.
Con FOR ALL ENTRIES lo q hacemos es seleccionar todos los registros de la tabla ZTABLA_USUARIOS q se encuentra en la tabla interna TI_PROVEEDORES siendo q el campo DNI sea igual en ambos tablas y almacenamos la coincidencias en la tabla interna TI_USUARIOS. Esto mismo se podria realizar recorriendo la tabla interna TI_PROVEEDORES con un LOOK y por cada registro de esta tabla interna realizaríamos un select a la tabla ZTABLA_USUARIO, pero q sucede, debemos tener en cuenta la performar de los programas q realizamos ya q si la tabla interna TI_PROVEEDORES almacena solo 3 registros entonces al ejecutar nuestro programa estaríamos accediendo a la BD solo 3 veces pero si la tabla interna TI_PROVEEDORES almacena 100 000 registro entonces al ejecutar nuestro programa estaríamos accediendo a la BD 100 000 veces lo cual produciría un tiempo de espera enorme, para evitar estas situaciones nos aseguramos de acceder una sola vez a la BD utilizando FOR ALL ENTRIES
 
 
 
Sobre el autor
Publicación académica de Mayra Maria Pino Rodriguez, en su ámbito de estudios para la Carrera Consultor ABAP Nivel Inicial.
Mayra Maria Pino Rodriguez
Profesión: Licenciada Cibernética Matemática - Republica Dominicana - Legajo: RA62Z
✒️Autor de: 56 Publicaciones Académicas
🎓Egresado del módulo:
Certificación Académica de Mayra Pino






Disponibilidad Laboral: FullTime


















