Sesion #3
Duración 3 horas 6:00pm - 9:00pm
Se inicia con la carga masiva de operaciones desde el xml adjunto en el chat de Whatsapp del curso.
Se crea una version inicial del sp de carga.
Se crean 3 Stored Proccedures:
Sp Crear Cuenta Tarjeta Maestra.
CREATE PROCEDURE [dbo].[SP_CrearCuentaTarjetaMaestra]
@codigo_tcm VARCHAR(32),
@tipo_tcm INT, -- Referencia a TipoCuentaMaestra
@limite_credito DECIMAL(18,2),
@id_th INT, -- Tarjetahabiente al que se asocia la cuenta
@OutResulTCode INT OUTPUT
AS
BEGIN
SET NOCOUNT ON;
BEGIN TRY
SET @OutResulTCode = 0;
-- Validación: Verificar si el código de la cuenta maestra ya existe
IF EXISTS (SELECT 1 FROM dbo.CuentaTarjetaMaestra WHERE codigo_tcm = @codigo_tcm)
BEGIN
SET @OutResulTCode = 50007; -- Código de error para código de cuenta duplicado
RETURN;
END
-- Validación: Verificar que el tarjetahabiente exista
IF NOT EXISTS (SELECT 1 FROM dbo.Tarjetahabiente WHERE id = @id_th)
BEGIN
SET @OutResulTCode = 50009; -- Código de error para tarjetahabiente no encontrado
RETURN;
END
-- Validación: Verificar que el tipo de cuenta maestra exista
IF NOT EXISTS (SELECT 1 FROM dbo.TipoCuentaMaestra WHERE id = @tipo_tcm)
BEGIN
SET @OutResulTCode = 50010; -- Código de error para tipo de cuenta maestra no encontrado
RETURN;
END
-- Comienza la transacción
BEGIN TRANSACTION;
-- Inserción de la nueva cuenta de tarjeta maestra
INSERT INTO dbo.CuentaTarjetaMaestra (
codigo_tcm,
tipo_tcm,
limite_credito,
saldo_actual,
id_th,
fecha_creacion
) VALUES (
@codigo_tcm,
@tipo_tcm,
@limite_credito,
0, -- Saldo inicial en cero
@id_th,
GETDATE()
);
-- Confirmar la transacción
COMMIT TRANSACTION;
-- Código de salida en caso de éxito
SET @OutResulTCode = 0;
END TRY
BEGIN CATCH
-- Manejo de errores
IF XACT_STATE() <> 0
BEGIN
ROLLBACK TRANSACTION;
END
-- Registrar error en tabla de errores
INSERT INTO dbo.DBErrors VALUES (
SUSER_SNAME(),
ERROR_NUMBER(),
ERROR_STATE(),
ERROR_SEVERITY(),
ERROR_LINE(),
ERROR_PROCEDURE(),
ERROR_MESSAGE(),
GETDATE()
);
-- Código de error estándar
SET @OutResulTCode = 50008;
END CATCH;
SET NOCOUNT OFF;
END;
GO
SP Crear Tarjeta Habiente
CREATE PROCEDURE [dbo].[SP_CrearTarjetahabiente]
@nombre VARCHAR(128),
@id_tipo_documento INT,
@documento_identidad VARCHAR(32),
@nombre_usuario VARCHAR(64),
@password VARCHAR(128),
@OutResulTCode INT OUTPUT
AS
BEGIN
SET NOCOUNT ON;
BEGIN TRY
SET @OutResulTCode = 0;
IF EXISTS (SELECT 1 FROM dbo.Tarjetahabiente WHERE documento_identidad = @documento_identidad)
BEGIN
SET @OutResulTCode = 50006; -- Código de error para documento duplicado
RETURN;
END
IF EXISTS (SELECT 1 FROM dbo.Tarjetahabiente WHERE nombre_usuario = @nombre_usuario)
BEGIN
SET @OutResulTCode = 50005; -- Código de error para nombre de usuario duplicado
RETURN;
END
-- Comienza la transacción
BEGIN TRANSACTION;
-- Inserción del nuevo tarjetahabiente
INSERT INTO dbo.Tarjetahabiente (
nombre,
id_tipo_documento,
documento_identidad,
nombre_usuario,
password
) VALUES (
@nombre,
@id_tipo_documento,
@documento_identidad,
@nombre_usuario,
@password
);
-- Confirma la transacción
COMMIT TRANSACTION;
-- Código de salida en caso de éxito
SET @OutResulTCode = 0;
END TRY
BEGIN CATCH
-- Manejo de errores
IF XACT_STATE() <> 0
BEGIN
ROLLBACK TRANSACTION;
END
INSERT INTO dbo.DBErrors VALUES (
SUSER_SNAME(),
ERROR_NUMBER(),
ERROR_STATE(),
ERROR_SEVERITY(),
ERROR_LINE(),
ERROR_PROCEDURE(),
ERROR_MESSAGE(),
GETDATE()
);
-- Código de error estándar
SET @OutResulTCode = 50008;
END CATCH;
SET NOCOUNT OFF;
END;
GO
SP GET Tarjeta Habientes:
CREATE PROCEDURE [dbo].[getTHs]
AS
BEGIN
SELECT id,
nombre,
documento_identidad
FROM Tarjetahabiente
ORDER BY nombre;
END
Comentarios
Publicar un comentario