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

Entradas más populares de este blog

Sesion #14