✒️ABAP El lenguaje SQL y la sentencia SELECT
ABAP El lenguaje SQL y la sentencia SELECT
Unidad 3. Lección 6. Instrucciones SQL: La sentencia SELECT
1. Sentencia SELECT
Sintaxis:
SELECT <campos>
FROM <tabla>
INTO <tabla interna o estructura>
WHERE <condiciones>.
El FROM puede ir antes o despúes del INTO.
- Select a toda la tabla: Si se quieren obtener todos los datos de la tabla se emplea el siguiente código:
SELECT * FROM ztabla_usuarios INTO TABLE ti_usuarios.
Se emplea INTO TABLE cuando el resultado de la consulta se guarda en una tabla interna. La clausula INTO TABLE sobreescribe los datos que pudiesen existir en la tabla ti_usuarios, por lo qui se desea conservar el contenido y añadir al final los nuevos registros se debe emplear 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. La sentencia CLEAR borra la cabecera de la tabla interna. La sentencia REFRESH borra el contenido de la tabla interna. Son dos cosas distintas y ambas son necesarias por lo que siempre se deben hacer.
- Select a unos campos de la tabla: Para obtener todos los campos de una tabla ztabla_usuarios se debe crear una tabla auxiliar solo con el campo DNI para alojar el resultado de la consulta.
SELECT dni FROM ztabla_usuarios INTO TABLE ti_usuarios_aux.
Nota. Siempre despues de un SELECT se debe preguntar por el SY-SUBRC para saber como proseguir.
- Para obtener la primera ocurrencia de la tabla ztabla_usuarios donde se cumpla determinada condicion, se debe emplear la clausula SINGLE:
CLEAR wa_usuarios.
SELECT SINGLE * FROM ztabla_usuarios INTO wa_usuarios WHERE nombre_ape NE space.
El resultado de esta consulta es guardado en la estructura wa_usuarios que es del mismo tipo que la tabla ztabla_usuarios. Si solo se requiere un campo, entonces no es necesario emplear una estructura, sino una variable:
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 con una condición y guardarlos en una tabla interna que no tiene la misma estructura de la tabla, entonces se emplea la clausula INTO CORRESPONDING FIELDS OF TABLE. En este caso los campos que se consultan en el SELECT deben ser del mismo tipo y estar en el mismo orden de la tabla donde se almacenarán los campos en la clausula.
SELECT nombre_ape estado_usu
FROM ztabla_usuarios
INTO CORRESPONDING FIELDS OF TABLE ti_usuarios2
WHERE nombre_ape NE space AND estado_usu = 'A'.
- Where Parameter o Select-Options: si se quiere hacer un select a partir de datos obtenidos desde un parameter (Ej. p_nomape) y un select-options (s_estado):
SELECT * FROM ztabla_usuarios INTO TABLE ti_usuarios
WHERE nombre_ape = p_nomape
AND estado_usu IN s_estado.
Para los select-options se emplea la clausula IN en las condiciones del SELECT.
- Obtener Maximo Valor: Se emplea la clausula MAX:
SELECT SINGLE MAX (dni) INTO v_dni FROM ztabla_usuarios
WHERE estado_usu = 'A'.
- Contar: Se emplea la clausula COUNT
SELECT COUNT (*) INTO v_activos FROM ztabla_usuarios WHERE estado_usu = 'A'.
- Subconsulta a otra tabla: se emplea la sentencia FOR ALL ENTRIES IN (Si se emplea no se pueden usar las condiciones LIKE , BETWEEN e IN):
SELECT * INTO TABLE ti_usuarios FROM ztabla_usuarios
FOR ALL ENTRIES IN ti_proveedores
WHERE dni= ti_proveedores-dni.
- SELECT a un patron: Se emplea la sentencia LIKE:
SELECT * FROM ztabla_usuarios INTO TABLE ti_usuarios WHERE nombre_ape LIKE 'A%'.
 
 
 
Sobre el autor
Publicación académica de Kelly Rocio Nino Ramirez, en su ámbito de estudios para la Carrera Consultor ABAP.
Kelly Rocio Nino Ramirez
Profesión: Ingeniero de Sistemas - Colombia - Legajo: PW14Z
✒️Autor de: 30 Publicaciones Académicas
🎓Egresado del módulo:
Certificación Académica de Kelly Nino