Ahora que hemos aprendido a crear tablas Z, veremos como insertar, actualizar y eliminar registros en estas tablas. Esto debe aplicarse únicamente a tablas Z, actualizar tablas propias de SAP puede provocar inconsistencia en los datos y errores en las transacciones de SAP.

Opciones para insertar datos.

Para insertar un solo registro podemos utilizar esta sintaxis.

"Declaración de una variable del tipo de la tabla, puedes poner ln_ para indicar que es
"una linea a insertar en una tabla 
DATA: ln_tabla TYPE tabla.  

"Asignar los valores a insertar en el formato: variable-campo = valor
ln_tabla-campo = valor. 

"Realizar el insert de datos
INSERT into tabla values ln_tabla .

Para insertar más de una linea:

"Declarar una tabla interna con header line
DATA: it_tabla LIKE STANDARD TABLE OF ztabla WITH HEADER LINE. 

"Asignar valores
it_tabla-matnr = '00001'. 
"Agregar la linea en la tabla interna
APPEND it_tabla. 

"Asignar valores
it_tabla-matnr = '00002'. 
"Agregar otra linea en la tabla interna
APPEND it_tabla. 

"Ahora insertamos todas las lineas de la tabla interna en la
"tabla de la base de datos
INSERT ztabla FROM TABLE it_tabla.

Después de ejecutar la sentencia INSERT se actualizan las variables de sistema SY-SUBR y SY-DBCNT con los siguientes valores:

  • SY-SUBR: Guarda un 0 (cero) si todas las lineas fueron insertadas, o un 4 (cuatro) si alguna fila no pudo ser insertada por algún error en la integridad de datos generalmente por que ya existía un registro con la misma llave primaria.
  • SY-DBCNT: Guarda la cantidad de registros insertados.

Opciones para modificar datos.

Modificar un solo registro

UPDATE tabla 
SET campo = 'valor' 
WHERE llave = 'valorLllave'.

Modificar un solo registro

"Declarar una tabla interna con header line para guardar los datos originales
DATA: it_tabla LIKE STANDARD TABLE OF ztabla WITH HEADER LINE. 

"Cargar los datos en la tabla interna
SELECT * 
INTO TABLE it_tabla 
FROM ztabla. 

"Luego recorremos la tabla y actualizamos los campos que necesitemos
LOOP AT it_tabla. 
  "Actualizamos los campos que deseamos 
  it_tabla-campo = 'nuevo valor'. 

  "Con modify actualizamos la tabla interna
  MODIFY it_tabla. 
ENDLOOP. 

"Con esta sentencia se actualiza la base de datos para cada 
"fila de la tabla interna modificada.
MODIFY ztabla FROM TABLE it_tabla.

Después de ejecutar la sentencia MODIFY o UPDATE se actualizan las variables de sistema SY-SUBR y SY-DBCNT con los siguientes valores:

  • SY-SUBR: Guarda un 0 (cero) si todas las lineas fueron actualizadas, o un 4 (cuatro) si alguna fila no pudo ser actualizada por algún error en la integridad de datos generalmente por que ya existía un registro con la misma llave primaria.
  • SY-DBCNT: Guarda la cantidad de registros modificados.

La sentencia MODIFY también inserta filas en caso de que no exista alguna fila que actualizar.

Opciones para eliminar datos.

Para eliminar uno o pocos registros

"Elimina los registros que cumplen con la condición
DELETE FROM ztabla 
WHERE campo = valor.

"podemos extender los registros a eliminar con una clausula IN
DELETE FROM ztabla 
WHERE campo IN ('valor1', 'valor2', 'valor3').

También podemos eliminar varias filas de esta forma:

"Declarar una tabla interna
DATA: it_tabla LIKE STANDARD TABLE OF ztabla WITH HEADER LINE . 

"En la tabla interna definimos las llaves primarias de las filas a eliminar
it_tabla-matnr = '00001'. 
APPEND it_tabla. 

"Ejecutar la eliminacion en la base de datos
DELETE ztabla FROM TABLE it_tabla.

Después de ejecutar la sentencia MODIFY o UPDATE se actualizan las variables de sistema SY-SUBR y SY-DBCNT con los siguientes valores:

SY-SUBR: Guarda un 0 (cero) si todas las lineas fueron eliminadas, o un 4 (cuatro) si alguna fila no pudo ser eliminada por lo general cuando no existe en la base de datos.
SY-DBCNT: Guarda la cantidad de registros eliminados.