1|Que son las tablas internas.
TABLAS INTERNAS
Es un objeto de datos que permite guardar en memoria grandes cantidades de registros
de datos con la misma estructura.
La cantidad de registros máxima está relacionada con los limites especificados
en la instalación del sistema.
El uso tipo que se le da a una tabla interna es:
- Para almacenar temporalmente los datos de las BD para un proceso futuro.
- Para estructurar y formatear datos que se muestran como salida del programa.
- Para formatear datos para ser utilizados por otros servicios.
2|Como se declara una Tabla interna.
La sintaxis es la sig.
DATA:BEGIN OF <tabla> OCCURS <n>,
<Def.Campos>,
.....
ENDOF <tabla>.
De esta manera definiremos una tabla interna con n lineas en memoria mas una línea de
cabecera o área de trabajo.
La cantidad de lineas qe se especifican en OCCURS no limitan el tamaño sino la cantidad
de registros que se guardan en memoria.
Por lo general, en el parametro OCCURES se especifica la cantidad 0 lo que le permite
trabajar con tablas de gran cantidadde registros.
Ej. Declaramos una tabla interna.
* Tabla interna de provedores.
DATA: BEGIN OF ti_proveedores OCCURES 0,
nombre(30) TYPE c,
apellido(30) TYPE c,
dni(8) TYPE c,
ENF OF ti_proveedores.
Otra forma de declarar la misma tabla sería:
* Tabla interna de provedores
DATA: BEGIN OF wa_proveedores,
nombre(30) TYPE c,
apellido(30) TYPE c,
dni(8) TYPE c,
ENF OF wa_proveedores.
DATA: ti_proveedores LIKE STANDARD TABLE OF wa_proveedores.
3|Llenado de una tabla interna.
Para llenar con datos una tabla interna utilizamos:
-APPEND TO: se añade un registro en la tabla interna en la última posición con los
valores que tengamos en le area de trabajo.
Ej.
*Añado un registro a la tabla interna de proveedores
CLEAR wa_proveedores.
wa_proveedores-nombre = 'Ernesto'.
wa_proveedores-apellido = 'Villanueva'.
wa_proveedores-dni = '24987564'.
AAPEND wa_proveedores TO ti_proveedores
- Sentencia SELECT
4|Ordenamiento de una tabla interna.
Para ordenar una tabla interna utilizamos la sentencia SORT.
EJ.
*Ordeno los proveedores de mayor a menos por dni
SORT ti_proveedores BY dni DESCENDING.
Para cargar de menor a mayor utilizamos la cláusula ASENDING.
5|procesamiento de una tabla interna.
Para recorrer una tabla interna y procesar registro a registro utilizamos
la sentencia LOOP-ENDLOOP.
*Recorro los registros donde el nombre no es blanco
LOOP AT ti_proveedores INTO wa_proveedores
where NOT nombre IS INITIAL.
...
ENDLOOP.
Si no existe ningún registro que cumpla la condicion WHERE,
el SY-SUBRC será cero.
6| Lectura de una tabla interna.
Para leer una registro concreto de una tabla interna sin nececidad de reorrerla
utilizamos la sentencia READ TABLE.
* Leo los datos de un registro particular
READ TABLE ti_proveedores INTO wa_proveedores
WITH KEY nombre = 'Ariel'.
Si se desea leer los datos de una posición particular de la tabla se utilizá
INDEX .
*Leo el primer registro de la tabla
READ TABLE ti_proveedores INTO wa_proveedores INDEX 1.
El agregado de la cláusula BINARY SERACH en la sentencia READ TABLE hace que la busqueda
sea más eficiente.
7| Modificandouna tabla interna.
MODIFY para modificar el contenido de un registro de una tabla interna.
Ej.
* Modifico el primer registro dela tabla
wa_proveedores-dni = '24987500'.
MODIFY ti_proveedores FROM wa_proveedores INDEX 1.
INSERT- Para insertar un registro en una posicion determinada de una tabla interna.
* Inserto un regisktro en la segunda posicion de la tabla
wa_proveedores-nombre = ´Marcelo´.
wa_proveedores-apellido = ´Rivarola´.
wa_proveedores-dni = ´20857492´.
INSERT wa_proveedores INTO ti_proveedores INDEX 2.
DELETE- Para borra el registro de una tabla interna.
* Borro un registro de la tabla
DELETE TI_proveedores
WHERE dni = '20857492'.
REFRESH- Para borrar todo el contenido de una tabla interna.
* Inicializamos la tabla interna
REFRESH ti_proveedores.
DESCRIBE TABLE- Para saber cuantos registros tiene una tabla interna.
Ej.
* Averiguo la cantidad de entradas de una tabla
DATA: v_lineas TYPE i.
DESCRIBE TABLE ti_proveedores LINES v_lineas.