✒️ABAP El lenguaje SQL y la sentencia SELECT
ABAP El lenguaje SQL y la sentencia SELECT
SENTENCIA SELECT
Principal sentencia para acceder a la base de datos.
SELECT<resultado>
FROM<tabla>
INTO<destino>
WHERE<condiciones>
Ejemplo Select * From ztabla_usuarios INTO TABLE ti_usuarios. "ti_usuarios ->tabla interna
Es una buena practica usar CLEAR y REFRESH en la tabla interna antes de realizar el select. Además si queremos enviar de manera "Permanente los datos" a la tabla interna debemos usar APPENDING TABLE en lugar de INTO TABLE.
Siempre después de un SELECT se debe preguntar por el SY-SUBRC para saber como proseguir.
Si queremos que la consulta SELECT tome la primera ocurrencia dada una condición utilizaremos SINGLE.
*Seleccionando el primer registro que cumpla la condición
CLEAR wa_usuarios.
SELECT SINGLE *
FROM ztabla_usuarios
INTO wa_usuarios
WHERE nombre_ape NE space.
Si quisieramos obtener solo el camop DNI
*Selecciono el primer registro que cumpla la condición
CLEAR v_dni.
SELECT SINGLE dni
FROM ztabla_usuarios
INTO v_dni
WHERE nombre_ape NE space.
Si quisieramos obtener de una tabla los registros que cumplan una condición pero queremos guardarlos en una ti que no tiene la misma estructura que la tabla, entonces tenemos que usar la cláusula INTO CORRESPONDING FIELDS OF TABLE.
*Seleccionando los registros que cumplan la condición
SELECT nombre_ape estado_usu
FROM ztabla_usuarios
INTO CORRESPONDING FIELDS OF TABLE ti_usuarios2
WHERE nombre_ape NE space
AND estado_usu = 'A'.
EJEMPLO.
Supongamos que tenemos un reporte que tiene la pantalla de selección
Nombre apellido, PARAMETER, P_NOMAPE
Estado Usuario , SELECT OPTIONS, S_ESTADO
Si queremos hacer un SELECT a la tabla ZTABLA_USUARIOS, que es donde se almacenan los registros de este reporte:
*Selecciono los registros que 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 clausula IN se utiliza para los select-options en las condiciones de un select.
En el caso de que queramos obtener el usuario activo con DNI mas alto tendríamos que usar la clausula MAX de la siguiente forma:
*Obtener el usuario activo con DNI más alto.
SELECT SINGLE MAX( dni )
INTO v_dni
FROM ztabla_usuarios
WHERE estado_usu = 'A'.
Si queremos saber la cantidad de usuarios con estado = 'activo', se usa 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'.
Para obtener los registros de los usuarios que 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.
Con FOR ALL ENTRIES se selecciona todos los registros de la tabla ztabla_usuarios que se encuentren en la ti_proveedores, siendo el campo dni sea igual en ambas tablas, y se almacenan las coindicincias en la tabla ti_usuarios. Esta sentencia minimiza los tiempos de ejecución de los programas.
Si quisieramos obtener todos los registros que cumpla con un patrón de texto en algunos de sus campos, debemos utilizar la sentencia LIKE como vemos a continuación.
*Recuperando los usuarios cuyo nombre empiece con A
SELECT *
FROM ztabla_usuarios
INTO TABLE ti_usuarios
WHERE nombre_ape LIKE 'A%'.
Yendo un poco mas allá sobre este tema me importante hablar sobre el performance y la optimización de las consultas a tablas dado que el volumen de información que en ocasiones deben procesar los programas es bastante elevado.
En mi experiencia el uso de indices y hints puede ayudar mucho a los tiempos de ejecución por ejemplo de un selecy, por lo que decidí buscar cual era el papel que desempeñaban estos dos temas en ABAP.
INDEX: Por defecto las llaves primarias de las tablas forman los primeros indices. Como sea que una query SELECT es ejecutada, el sistema revisa si el campo de selección (SELECT) o el (WHERE) forman parte de las llaves primarias. Si es cierto, entonces el costo de ejecutar la query es menor. En ABAP tenemos la opción de crear un segundo indice para que el costo de la operación sea menor, este segundo indice puede incluir los campos que hacen parte del SELECT.
HINTS: Los HINTS sirven para forzar a la consulta para que considere el segundo indice creado. Los HINTS necesitan ser agregados en la sentencia SQL.
Esta información la extraje del SAP COMMUNITY NETWORK, Performance Improvement using Idexes and ABAP Hints, 2010. Author : Ranjeeta Nair.
Quisiera profundizar mas en este tema, son recibidas todas las aclaraciones con respecto a este tema.
 
 
 
Sobre el autor
Publicación académica de Walter Giovanny Montoya García, en su ámbito de estudios para la Carrera Consultor ABAP.
Walter Giovanny Montoya García
Profesión: Administrador de Sistemas Informáticos - Colombia - Legajo: UX58H
✒️Autor de: 55 Publicaciones Académicas
🎓Cursando Actualmente: Consultor ABAP Nivel Inicial
🎓Egresado de los módulos:
Certificación Académica de Walter Montoya