Creación de procedimientos almacenados: ObtenerMensajeError y RegistrarBitacora
Fecha: sábado 18 de abril de 2026
Hora de inicio: 7:45 p.m.
Hora de finalización: 9:10 p.m.
Horas trabajadas: 1 h 25 min
El plan para esta sesión era implementar dos
de los procedimientos almacenados que me correspondían y que eran prioritarios:
ObtenerMensajeError y RegistrarBitacora. Acordé
con Johana que yo me encargaba de ambos completamente y que los haría de
primero ya que todas las funcionalidades los necesitan, tanto en capa de base
de datos como en capa lógica. Era importante tenerlos listos cuanto antes para
no bloquear el avance de las dos.
Actividades realizadas
7:45 p.m. – 8:10 p.m. — Investigación previa
Antes de escribir una sola línea de código, me
puse a investigar las funciones del sistema que necesitaba para llenar la tabla
DBError dentro del bloque CATCH. Sabía que
tenía que capturar información del error (número, mensaje, línea,
procedimiento, etc.), pero no conocía las funciones específicas de SQL Server
para obtener esos datos.
Las funciones que tuve que investigar fueron:
- ERROR_NUMBER(): retorna el número del error.
- ERROR_STATE(): retorna el estado del error.
- ERROR_SEVERITY(): retorna la severidad.
- ERROR_LINE(): retorna la línea donde ocurrió el
error.
- ERROR_PROCEDURE(): retorna el nombre del SP donde ocurrió.
- ERROR_MESSAGE(): retorna el mensaje descriptivo del
error.
- SUSER_NAME() / SUSER_SNAME(): retornan
el nombre de inicio de sesión del usuario actual. Noté que en distintos
ejemplos aparecían las dos versiones y tuve que investigar la diferencia: SUSER_NAME() acepta un parámetro opcional (el id del
usuario), mientras que SUSER_SNAME() sin
argumentos es equivalente, pero es la forma más común de verla en ejemplos
de manejo de errores.
8:10 p.m. – 8:40 p.m. — SP: ObtenerMensajeError
Este SP recibe un código de error como
parámetro y busca la descripción correspondiente en la tabla Error.
Después de crearlo lo probé con un EXEC desde SSMS
pasándole un código que existía en la tabla y uno que no, para verificar que
los dos casos funcionaran correctamente.
8:40 p.m. – 9:10 p.m. — SP: RegistrarBitacora
Este fue más directo de implementar una vez
que tenía clara la estructura de BitacoraEvento. Recibe
los cinco datos del evento (tipo, descripción, usuario, IP y timestamp) y los
inserta en la tabla. Si el INSERT falla, el CATCH registra
el error técnico en DBError.
Lo que me pareció importante destacar de este
SP es que no recibe el timestamp con GETDATE()
internamente, sino que lo recibe como parámetro (@inPostTime). Esto es
intencional, pues el timestamp lo captura el SP que llama a RegistrarBitacora, no este
SP en sí.
También lo probé con un EXEC básico
para asegurarme de que insertara correctamente en BitacoraEvento y que no
lanzara errores.
Forma de trabajo del equipo
Johana avanzó en paralelo con sus SPs (Login,
Logout, ListarEmpleados e InsertarEmpleado). Nos mantuvimos en contacto por
WhatsApp para coordinarnos, especialmente porque ella necesitaba que RegistrarBitacora estuviera
disponible para poder llamarlo desde sus propios procedimientos. Mientras yo
terminaba estos dos, ella fue avanzando en la lógica de los suyos.
Comentarios
Publicar un comentario