SELECT SINGLE es la instrucción Open SQL utilizada para leer un registro de una tabla de base de datos. La sentencia permite leer el valor de una columna, de varias columnas o de todas las columnas. Esta lección trata de explicarle cómo leer un registro obteniendo los valores de varias columnas.
SELECT SINGLE col1 col2…|*
FROM source
INTO target
WHERE sql_cond.
- Comportamiento de las variables de sistema
- SY-SUBRC:
- 0 La sentencia SELECT establece SY-SUBRC en 0 para cada valor pasado a un objeto de datos ABAP. La sentencia SELECT también establece SY-SUBRC en 0 antes de que salga de un bucle SELECT con ENDSELECT si se pasó al menos una fila.
- 4 La instrucción SELECT establece SY-SUBRC en 4 si el conjunto de resultados está vacío, es decir, si no se encontraron datos en la base de datos. Se aplican reglas especiales cuando sólo se utilizan expresiones agregadas en el resultado.
- Aplicación práctica
En un programa ejecutable creamos el tipo local GTY_FLIGHTS con los siguientes componentes:
Nombre campo | Tipo |
CARRID | S_CARR_ID |
CITYFROM | S_FROM_CIT |
AIRPFROM | S_FROMAIRP |
CITYTO | S_TO_CITY |
AIRPTO | S_TOAIRP |
En base al tipo declarado definimos un área de trabajo y realizamos una lectura en la tabla ZSPFLISA00001 obteniendo los campos correspondientes al área de trabajo con la adición INTO CORRESPONDING FIELDS OF. Al finalizar mostramos en la salida utilizando la sentencia WRITE los valores obtenidos de la base de datos.
- Implementamos el código fuente.
- Ejecutamos el programa.
- Notas
Las variantes con la adición INTO CORRESPONDING FIELDS requieren un tiempo de ejecución mayor que las variantes correspondientes sin INTO CORRESPONDING FIELDS, sin embargo, el tiempo de ejecución es menos dependiente del volumen.
Las variantes con la adición INTO CORRESPONDING FIELDS corren el riesgo de tener áreas de trabajo wa con más componentes que los que realmente se llenan. Esto sólo debería ser el caso si los componentes que no están llenos se llenan en el programa. De lo contrario, deben utilizarse áreas de trabajo de tamaño adecuado para evitar que se llene una gran cantidad de memoria por los valores iniciales (especialmente en las tablas internas).