Instrucciones SQL: La sentencia SELECT
1| La sentencia SELECT
Existe en ABAP un conjunto de sentencias que se utilizan para acceder a las BD. La principal
sentencia es SELECT cuya sintaxis es la sig:
SELECT <resultado> "En resultado se colocan los campos que se quieren recuperar
FORM <tabla> "Tabla es la tabla origen de donde se sacan los datos
INTO <target> "Target es el destino donde seran alojado los datos
WHERE <condiciones> "Condiciones de la busqueda
Si queremos obtener todo los registros de la tabla ZTABLA_USUARIOS usamos sig.codigo:
*Selecciono todo los registros
SELECT *
FROM ztabla_usuarios
INTRO TABLE ti_usuarios.
* Selecciono de todos los registros el campo DNI
SELECT dni
FROM ztabla_usuarios
INTRO TABLE ti_usuarios_aux.
Siempre después de un SELECT se debe preguntar por el SY-SUBRC para saber como proseguir.
SINGLE- Si queremos obtener la primera ocurrencia de la TABLA
* Selecciono el primer registro que cumpla la condición
CLEAR wa_usuarios.
SELECT SINGLE *
FROM ztabla_usuarios
INTRO wa_usuarios
WHERE nombre_ape NE space.
TI_USUARIOS - es una tabla interna del mismo tipo que ZTABLA_USUARIOS.
* - El asterisco indica que se obtendran todos los campos de la tabla.
INTO TABLE - se utiliza cuando el resultado de la consulta se guarda en una tabla interna
Si queremos hacer la misma conulta anterior pero solo el campo DNI entonces ya no seria
necesario la estructura WA_USUARIOS si no la variable V_DNI
Ej.
CLEAR v_dni.
SELECT SINGLE dni
FROM ztabla_usuarios
INTRO v_dni
WHERE nombre_ape NE space.
Si queremos obtener de una tabla los registros que cumplan una condicion pero queremos guardarlos
en una tabla interna que no tiene la misma estructura que la tabla, usamos la cláusula
INTO CORRESPONDING FIELD OF TABLE.
Ej.
SELECT nombre_ape estado_usu
FROM ztabla_usuarios
INTRO CORRESPONDING FIELDS OF TABLE ti_usuarios2
WHERE nombre_ape NE space AND estado_usu = 'A'.
Supongamos que tenemos un reporte que tiene la pantalla seleccion:
Nombre y Apellido
Estado Usuario
Donde Nombre y Apellido es el parameter P_NOMAPE Y Estado Usuario es el select-options S_ESTADO
Si quisieramos hacer una selección a la tabla ZTABLA_USUARIOS en base a lo que los
usuarios ingresan por pantalla hariamos los sig.
Ej.
*Selecionamos los registros que cumplan con los parametros de pantalla
SELECT *
FROM ztabla_usuarios
INTRO 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.
Si quisieramos obtener el usuario activo con DNI mas alto tendriamos que usar la cláusula
MAX de la sig. forma:
*Obtengo el usuario activo con DNI mas alto
SELECT SINGLE MAX( dni )
INTO v_dni
FROM ztabla_usuarios
WHERE estado_usu = 'A' .
Saber la cantidad de usuarios con estado = "activo", usuamos la cláusula COUNT.
*Obtengo la cantidad de usuarios activos
SELECT COUNT(*)
INTO v_activos
FROM ztabla_usuarios
WHERE estado_usu = 'A'.
Si queremos obtenerde una tabla todos los registros que existen en una tabla interna
cargada de datos, entonces utilizamos la sentencia FOR ALL ENTRIES IN que nos permite
especificar condiciones en tiempo de ejecucion.
Ej.
*Obtengo los registros de los usuarios que exiten 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.
Si queremos obtener todos los registrosque cumplan con un patron de texto en alguno
de sus campos, utilizamos la sentencia LIKE .
Ej.
*Recupero el usuario cuyo nombre empiece con A
SELECT *
FROM ztabla_usuarios
INTO TABLE ti_usuarios
WHERE nombre_ape LIKE 'A%'.