![](/cvo_files/imgs_sap_abap/logos/logo_cvo_academy_it.png)
✒️ABAP Las tablas internas
ABAP Las tablas internas
![ABAP Las tablas internas ABAP Las tablas internas](https://www.cvosoft.com/cvo_files/imgs_sap_abap/og-images/328.jpg)
Tablas Interna
Equivalen a las estructuras de datos
Se usa para almacenar temporalmente los datos de las bases de datos, para estructurar y formatear datos que se mostrarán como salida del programa y para formatear datos para ser utilizados por otros programas.
Declaración
DATA: BEGIN OF <tabla> OCCURS <n>,
<Def Campo>,
END OF <tabla>
Poseen n lineas en memoria más una línea de cabecera o área de trabajo (contiene el registro que se está trabajando)
La cantidad de lineas que se especifican en el OCCURS no limitan el tamaño de la tabla sino la cantidad de registros que se guardan en memoria al mismo tiempo.
Comúnmente se pone OCCURS = 0 para permitir trabajar con tablas de gran tamaño
BEGIN OF ti_proveedores OCCURS 0,
nombre(30) type c,
apellido(30) type c,
dni(8) type c,
END OF ti_proveedores.
BEGIN OF wa_proveedores ,
nombre(30) type c,
apellido(30) type c,
dni(8) type c,
END OF wa_proveedores.
ti_proveedores LIKE STANDARD TABLE OF wa_proveedores.
ti_vuelos LIKE STANDARD TABLE OF fly_vuelos WITH HEADER LINE
wa_proveedores LIKE LINE OF ti_proveedores : crea una estructura basado un registro de la tabla interna proveedores
Llenado de una tabla interna
APPEND TO: Se añade un registro a la tabla interna en la última posición con los valores que tengamos en el área de trabajo.
CLEAR wa_proveedores
wa_proveedores-nombre = 'Ernesto'.
wa_proveedores-apellido = 'Villanueva'.
wa_proveedoores-dni = '23498765'.
APPEND wa_proveedores TO ti_proveedores.
Ordenamiento de una tabla interna
SORT
Para ordenar una tabla interna se utiliza la sentencia SORT
SORT ti_proveedores BY dni DESCENDING.
SORT ti_proveedores BY dni ASCENDING.
Procesamiento de una tabla interna
LOOP AT ti_proveedores INTO wa_proveedores
WHERE NOT nombre IS INITIAL.
ENDLOOP.
Si no hay ningún registro la palabra SY-SUBRC será diferente de cero
Lectura de una tabla interna
Para leer un registro especifico de la tabla interna se hace lo siguiente:
READ TABLE ti_proveedores INTO wa_proveedores
WITH KEY nombre = 'Ariel'.
Para leer una posición de la tabla interna se hace así:
READ TABLE ti_proveedores INTO wa_proveedores INDEX 1.
Si se usa BINARY SEARC en la sentencia READ TABLE la hace más eficiente.
Modificación de una tabla interna
wa_proveedores-dni = '345678'
MODIFY ti_proveedores FROM wa_proveedores INDEX 1.
MODIFY TI_USUARIOS INDEX idx FROM WA_USUARIOS
TRANSPORTING DNI.
De esta forma solo se modifica el campo que especificamos a la derecha de TRANSPORTING.
Inserción en una tabla interna
wa_proveedores-nombre = 'Marcelo'.
wa_proveddores-apellido = 'Cardona'.
wa_proveedores-dni = '34567'.
INSERT wa_proveedores INTO ti_proveedores INDEX 2.
Eliminación en una tabla interna
DELETE ti_proveedores
Where dni = '876543'
Limpiar una tabla interna (Solo la limpia no la elimina)
REFRESH ti_proveedores.
Para conocer el numero de lineas de una tabla interna
DATA: v_lineas type i
DESCRIBE TABLE ti_proveedores LINES v_lineas
Para limpiar de memoria el contenido de una tabla interna se hace con FREE nombre de la tabla interna
Hay varios tipos de tablas internas
Por defecto una tabla interna tiene el tipo STANDRAD TABLE
Hay tablas internas tipo SORTED y HASHED
SORTED TABLE: Las líneas o registros tienen asignado un índice interno, pero aparecen ordenados en orden ascendente de acuerdo con la clave.
La clave puede ser simple (UNIQUE) o múltiple (NON-UNIQUE). o El acceso a este tipo de tablas se puede hacer a través de un índice o a través de la clave.
El tiempo de búsqueda se incrementa de forma logarítmica a medida que añadimos más registros a la tabla.
Para insertar líneas en una tabla ordenada usamos la instrucción INSERT.
HASHED TABLE: En este tipo de tabla no podemos acceder a una entrada mediante el índice. El orden de los registros de este tipo de tablas no se hace mediante un índice sino a través de un algoritmo de tipo numérico (hashed function) que calcula la posición de un determinado registro partiendo de una determinada clave.
La clave siempre tiene que ser única.
También está el problema de la fragmentación de la memoria, es decir que la función hashed sea tal que nunca dé como resultado una determinada posición de la tabla, y por lo tanto ese área de memoria quede en blanco.
La modificación de la tabla es más lenta que una tabla estándar ya que para cada nuevo registro el sistema tiene que calcular antes mediante la función hashed el lugar que debe de ocupar.
El tiempo de acceso a un determinado registro es constante (independiente del número de entradas que tenga la base de datos) y es siempre menor que el de los otros tipos de tablas. Tan sólo depende del algoritmo y de la rapidez del
sistema, y suele ser muy pequeño, unos 17 nanosegundos.
Este tipo de tablas es el más adecuado si la acción más frecuente es acceder a una línea por la clave. Esto será así cuando queramos crear una tabla interna que se parezca a una tabla de la base de datos.
También es el más adecuado si deseamos procesar grandes cantidades de datos.
 
 
 
Sobre el autor
Publicación académica de James Johan Cardona Quinchia, en su ámbito de estudios para la Carrera Consultor ABAP.
James Johan Cardona Quinchia
Profesión: Gerente de Proyectos - Colombia - Legajo: VB54F
✒️Autor de: 41 Publicaciones Académicas
🎓Cursando Actualmente: Consultor ABAP Nivel Avanzado
Certificación Académica de James Cardona