Entrada 8
Fecha: 24/03/2025
Inicio: [13:30] | Fin: [14:30] y Inicio: [18:30] | Fin: [21:25] || Total: [4 horas]
Presentes: Matías Benavides Sandoval y Sebastián Ramírez Abarca
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
¿QUÉ HICIMOS HOY?
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Sesión de cierre:
Ajuste de SPs según estándares
de la rúbrica y revisión del documento de análisis.
1. Reescribimos ambos SPs con todos los estándares
que exige la rúbrica:
- Parámetros con prefijos @in y @out
- BEGIN TRY / END TRY + BEGIN CATCH / END CATCH
- Códigos de error semánticos (0 = éxito, 50001 = duplicado, 50099 = error inesperado)
- SET NOCOUNT ON / OFF
- Alias para tablas (AS e)
- Una declaración por línea
- Palabras reservadas en MAYÚSCULAS
- Comentarios internos explicando cada bloque
2. Actualizamos empleadoController.ts para que use los nuevos nombres de parámetros:
- @inNombre, @inSalario, @outResultCode
- Manejo de los tres códigos de retorno posibles
3. Revisamos el documento de análisis de resultados
contra la rúbrica del profesor. Se identificaron
los pendientes: llenar la tabla de resultados,
agregar los diagramas de arquitectura y completar
las métricas.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
PROBLEMAS ENCONTRADOS Y CÓMO SE RESOLVIERON
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Problema 1:
Descripción: Error de sintaxis en sp_InsertEmpleado y sp_GetEmpleados
"message": "Incorrect syntax near 'ERROR_MESSAGE'.",
"message": "Incorrect syntax near ')'. Expecting '(', or SELECT.",
Es exactamente el mismo en ambos
Solucion: Lo que importa es SSMS, donde no salta ningun error al ser ejecutado y el SP se ve bien. Ignorár esos errores rojos en VS Code, no afectan nada.
Solucion: Lo que importa es SSMS, donde no salta ningun error al ser ejecutado y el SP se ve bien. Ignorár esos errores rojos en VS Code, no afectan nada.
Causa: Son falsos positivos de VS Code no entiende bien la sintaxis de RAISEERROR con variables
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
DUDAS Y DIVERGENCIAS DE CRITERIO
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Discutimos si el sp_GetEmpleados necesitaba el
parámetro @outResultCode dado que solo hace un SELECT. Decidimos mantenerlo para seguir el mismo
estándar que el SP de inserción y demostrar manejo
consistente de códigos de retorno.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
AVANCE DEL CÓDIGO
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
USE EmpleadosDB;
GO
-- =====================================================
-- SP 1: Obtiene la lista de empleados ordenada por
-- nombre de forma ascendente
-- =====================================================
DROP PROCEDURE IF EXISTS dbo.sp_GetEmpleados;
GO
CREATE PROCEDURE dbo.sp_GetEmpleados
@outResultCode INT OUTPUT
AS
BEGIN
SET NOCOUNT ON;
BEGIN TRY
-- Retorna todos los empleados en orden alfabético
SELECT
e.Id
, e.Nombre
, e.Salario
FROM dbo.Empleado AS e
ORDER BY e.Nombre ASC;
SET @outResultCode = 0;
END TRY
BEGIN CATCH
DECLARE @ErrorMsg NVARCHAR(4000);
SET @ErrorMsg = ERROR_MESSAGE();
SET @outResultCode = 50099;
RAISERROR(
'Error en sp_GetEmpleados: %s',
16,
1,
@ErrorMsg
);
END CATCH;
SET NOCOUNT OFF;
END;
GO
USE EmpleadosDB;
GO
-- =====================================================
-- SP 2: Inserta un nuevo empleado validando que el
-- nombre no esté duplicado en la BD
-- =====================================================
DROP PROCEDURE IF EXISTS dbo.sp_InsertEmpleado;
GO
CREATE PROCEDURE dbo.sp_InsertEmpleado
@inNombre VARCHAR(128)
, @inSalario MONEY
, @outResultCode INT OUTPUT
AS
BEGIN
SET NOCOUNT ON;
DECLARE
@ERROR_EXITO INT = 0
, @ERROR_DUPLICADO INT = 50001
, @ERROR_INESPERADO INT = 50099;
BEGIN TRY
-- Validar duplicado (sin distinguir mayúsculas/minúsculas o espacios extra)
IF (
EXISTS (
SELECT 1
FROM dbo.Empleado AS e
WHERE (LOWER(LTRIM(RTRIM(e.Nombre))) = LOWER(LTRIM(RTRIM(@inNombre))))
)
)
BEGIN
SET @outResultCode = @ERROR_DUPLICADO;
RETURN;
END
-- Insertar el nuevo empleado
INSERT INTO dbo.Empleado
( Nombre
, Salario )
VALUES
( @inNombre
, @inSalario );
SET @outResultCode = @ERROR_EXITO;
END TRY
BEGIN CATCH
DECLARE @ErrorMsg NVARCHAR(4000);
SET @ErrorMsg = ERROR_MESSAGE();
SET @outResultCode = @ERROR_INESPERADO;
RAISERROR(
'Error en sp_InsertEmpleado: %s',
16,
1,
@ErrorMsg
);
END CATCH;
SET NOCOUNT OFF;
END;
GO
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
MORALEJAS / BUENAS PRÁCTICAS
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- Usar códigos de error semánticos (50001, 50099)
hace el código más mantenible
y autodocumentado. Ademas de seguir los estandares
- No siempre lo que es un error en VS Code es un error, a veces son falsos positivos, y hay que verificar que en el SMSS no salten los errores
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
PRÓXIMA SESIÓN: ¿QUÉ SIGUE?
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- Sebastián termina index.html e index.js con
la tabla de empleados funcionando.
- Llenar la tabla de resultados del documento
con los porcentajes reales de cada ítem.
- Agregar los diagramas de arquitectura al documento.
- Completar las métricas finales (horas totales,
commits, líneas de código).
Comentarios
Publicar un comentario