Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Ya habamos comentado que las tablas internas sirven para almacenar informacin extrada
de la base de datos. En este ejemplo voy a utilizar una tabla interna que ya habamos
declarado previamente.
* Tabla de vuelos
DATA:
BEGIN OF i_vuelos OCCURS 0,
carrid LIKE sflight-carrid, "Cdigo de aerolnea
connid LIKE sflight-connid, "Nmero de vuelo
fldate LIKE sflight-fldate, "Fecha de vuelo
planetype LIKE sflight-planetype, "Tipo de avin
END OF i_vuelos.
La sentencia select...endselect
Esta sentencia realiza una lectura lineal de los datos de las tablas de la base de datos y los
asigna directamente a los campos de nuestra tabla interna. Pero atencin, para que queden
almacenados sobre la tabla interna para cada registro seleccionado debemos utilizar la
sentencia APPEND. As, haremos aadiremos los registros a nuestra tabla interna.
El smbolo (*) le indica a SAP que debe guardar en memoria absolutamente todos
los valores de todos los campos de cada registro de la tabla SAP.
La clusula WHERE nos permite indicar el filtro de seleccin. En este caso
utilizamos como filtro el rango de cdigos de aerolneas. De la tabla sflightslo
recuperaremos aquellos registros que cumplan con la condicin indicada en
el WHERE.
Seguidamente asignamos a cada campo de la tabla interna el valor del campo de la
tabla SAP, dejndolo a nivel de la cabecera de la tabla interna.
Finalmente, guardamos el registro en nuesta tabla interna mediante la sentencia
APPEND.
Con la sentencia CLEAR limpiamos la cabecera y la dejamos lista para el siguiente
registro.
La sentencia SELECT...ENDSELECT ir pasando uno a uno por cada uno de los registros
que cumplan la condicin de la clusula WHERE y los ir almacenando gracias a la
sentencia APPEND dentro de nuestra tabla interna.
Una forma de mejorar el rendimiento sera no utilizar la clusula (*) sino indicar
especficamente los campos que necesitamos llenar.
Al no usar todos los campos mejoramos el rendimiento y con la clusulo INTO asignamos
directamente el valor al campo de la tabla interna.
Evita el uso de (*) y en su lugar slo toma el valor de los campos que nos interesa
(carrid, connid, fldate y planetype).
La clusula INTO TABLE asigna estos cuatro campos a los cuatro primeros campos
de la tabla interna. As que, cuidado, el orden en que se hayan declarado estos
campos en la tabla interna es importante. Aqu no hay asignacin por nombre de
campo, sino por posicin, el valor del campo carrid de la tabla sflight se asignar al
primer campo de la tabla interna, el valor del campo connid de la tabla sflight se
asignar al segundo campo de la tabla interna, y as sucesivamente. Aqu ya no es
tan importante el nombre de los campos de la tabla interna, pero s la longitud y el
tipo de esos campos. Si no lo tenemos cuenta nuestro programa acabar
abruptamente con dump breve.
Se utiliza si lo que nos interesa es nicamente un registro de nuestra tabla de base de datos.
En en el ejemplo, me interesa un nmero de vuelo en concreto y utilizo la
sentencia SELECT con la clusula SINGLE. Es muy habitual que despus de escribir esta
sentencia se escriba una condicin del tipo IF sy-subrc ... ENDIF.
Por cierto, todo lo que se explica en este artculo se refiere a ABAP SQL. Ya sabis que
SAP admite tambin SQL nativo, aunque no lo recomienda, ni yo lo explico en este
artculo.
En el prximo artculo, el ltimo de esta serie, hablaremos de cmo presentar los datos por
pantalla.