
La actualización y la recuperación de una tabla base de datos
1 | La actualización y la recuperación de una tabla base de datos.
Cuando realizamos cambios a los datos que se encuentran almacenados en las tablas que forman la base de datos de SAP, estos cambios no se materializan en la base de datos hasta que son confirmados.
Para finalizar una unidad de procesamiento lógico LUW de base de datos se utiliza la sentencia COMMIT WORK, que realiza un update físico en la base de datos, haciendo irrevocable cualquier modificación en la misma.
Ejecutar un COMMIT WORK en SAP es sinónimo de confirmar los cambios realizados a las tablas de la base de datos.
Ahora bien si deseamos deshacer todas las operaciones realizadas sobre la base de datos desde la ejecución de la última sentencia COMMIT WORK entonces ejecutaremos la sentencia ROLLBACK WORK.
Analicemos lo que acabamos de mencionar con un ejemplo sencillo utilizando la tabla base de datos de usuarios Z_TABLA_USUARIOS con la que venimos trabajando desde el comienzo de esta unidad.
Luego de insertar un registro en la tabla base de datos ZTABLA USUARIOS debemos preguntar por el contenido de la variable del sistema SY-SUBRC: el cual será cero si el registro se insertó correctamente y en caso de producirse un error al momento de insertar, el contenido del SY-SUBRC será distinto de cero.
IMPORTANTE: Es sumamente conveniente, después de ejecutar las sentencias INSERT, MODIFY, UPDATE o DELETE realizar un COMMIT WORK y ROLLBACK WORK para confirmar IOS cambios realizados a la base de datos, en caso que el contenido de la variable del sistema SY-SUBRC sea cero o para volver atrás IOS cambios realizados, en caso que el contenido de la variable del sistema SY-SUBRC sea distinto de cero.
Ahora bien veamos que sucede cuando ejecutemos la lógica anterior y analizamos el paso a paso de la actualización en modo debugging.
Para ello vamos a colocar un breakpoint en la linea de código 25 del programa de prueba, que es donde se analiza el contenido de la variable del sistema SY-SUBRC, luego de la ejecución de la sentencia INSERT.
Al ejecutar el programa, el procesamiento se detiene en el breakpoint luego de la ejecución de la sentencia INSERT y verificamos que el contenido de la variable del sistema SY-SUBRC es cero por lo que la sentencia INSERT se ejecutó correctamente.
Si verificamos el contenido de la tabla base de datos ZTABLA USUARIOS en la transacción SE 16 comprobamos que todavía el cambio no impactó en la base de datos a pesar que ya se ejecutó la sentencia INSERT
Si hacemos clic en el icono refrescar comprobamos que no se actualiza el contenido de la tabla base de datos con el nuevo registro. Ejecutamos paso a paso el programa hasta pasar la línea correspondiente al COMMIT WORK.
Ahora volvemos a chequear el contenido de la tabla base de datos ZTABLA USUARIOS en la transacción SE16 correspondiente al browser de datos y verificamos que ahora si.
REFLEXIONES: Comprobamos que los datos se actualizan en la tabla base de datos ZTABLA USUARIOS luego de la ejecución de la sentencia COMMIT WORK.
Cuando un programa finaliza su ejecución se ejecuta automáticamente la sentencia COMMIT WORK por lo que en ese momento también se confirman los cambios a la base de datos.
Ahora veamos que sucede cuando se ejecuta la sentencia ROLLBACK WORK.
Para ello borramos de la tabla base de datos ZTABLA USUARIOS el nuevo registro que acabamos de insertar, volvemos ejecutar el programa de prueba y detenemos su ejecución en el breakpoint.
Vamos a modificar el contenido de la variable del sistema SY-SUBRC por debug y le vamos asignar 4 en lugar de cero.
Y esto hace que se ejecute la sentencia ROLLBACK WORK.
Si ahora verificamos el contenido de la tabla base de datos ZTABLA USUARIOS en el browser de datos correspondiente a la transacción SE16, vemos que no se actualizó el contenido de la tabla luego de la ejecución de la sentencia ROLLBACK WORK.