Está en la página 1de 6

Taller de Procedimientos Almacenados en Base de Datos

EurekaBank.
1. Consultar Ingresos, Salidas y su Saldo de una Cuenta
Crear Procedimiento.

Ejecutar Procedimiento.

2. Depsito de una Cuenta.

Ejecucin

3. Retiro de una Cuenta.


CREATE PROCEDURE [dbo].[usp_retiro](
@p_estado varchar(500), -- Parmetro de salida
@p_cuenta char(8),
@p_clave varchar(15),
@p_importe decimal(12,2),
@p_empleado char(4)
)
AS
BEGIN TRANSACTION
DECLARE @moneda char(2);
DECLARE @saldo decimal(12,2);
DECLARE @cargo decimal(12,2);
DECLARE @cont int;
DECLARE @claveDB varchar(15);
DECLARE @codigo varchar(8);
BEGIN TRY
set @p_estado = null;
-- Obtener Datos de la Cuenta
select @moneda=chr_monecodigo,@saldo=dec_cuensaldo,
@cont=int_cuencontmov,
@claveDB=chr_cuenclave
from cuenta where chr_cuencodigo = @p_cuenta;
if( @p_clave != @claveDB )
set @p_estado = 'Error, datos no son correctos.';
else
-- Obtener cargo por movimiento
select @cargo=dec_costimporte
from costomovimiento where chr_monecodigo = @moneda;
if( (@p_importe + @cargo) > @saldo )
set @p_estado = 'Error, saldo insuficiente.';
else
-- Se inicia la Transaccin
-- Actualizar Saldo de la Cuenta
update cuenta
set dec_cuensaldo = dec_cuensaldo - (@p_importe + @cargo),
int_cuencontmov = int_cuencontmov + 2
where chr_cuencodigo = @p_cuenta;
-- Registrar Importe
set @cont = @cont + 1;
insert into
movimiento(chr_cuencodigo,int_movinumero,dtt_movifecha,
chr_emplcodigo,chr_tipocodigo,dec_moviimporte,chr_cuenrefer
encia)
values(@p_cuenta,@cont,GETDATE(),@p_empleado,'004',@p_impor
te,null);
-- Registrar Cargo por Movimiento
set @cont=@cont + 1;
insert into
movimiento(chr_cuencodigo,int_movinumero,dtt_movifecha,
chr_emplcodigo,chr_tipocodigo,dec_moviimporte,chr_cuenreferencia
)
values(@p_cuenta,@cont,GETDATE(),@p_empleado,'010',@cargo,null);
-- Finalizar Transaccin

COMMIT TRANSACTION;
set @p_estado = 'ok'
END TRY
BEGIN CATCH
ROLLBACK TRANSACTION;
PRINT 'ERROR EN LA OPERACION'
set @p_estado = 'Error en el proceso de actualizaciOn.'
END CATCH

4. Transferencia de una Cuenta Origen a una Cuenta Destino

CREATE PROCEDURE [dbo].[usp_transferencia] (


@p_estado varchar(500), -- Parmetro de salida
@p_cuenta1 char(8),
@p_cuenta2 char(8),
@p_clave1 varchar(15),
@p_importe decimal(12,2),
@p_empleado char(4)
)
AS
BEGIN TRANSACTION
DECLARE @moneda1 char(2);
DECLARE @moneda2 char(2);
DECLARE @saldo1 decimal(12,2);
DECLARE @cargo decimal(12,2);
DECLARE @cont1 int;
DECLARE @cont2 int;
DECLARE @clave1 varchar(15);
DECLARE @codigo varchar(8);
set @p_estado = null;
BEGIN TRY
-- Verificar la moneda
select @moneda1=chr_monecodigo,
@saldo1=dec_cuensaldo,
@cont1=int_cuencontmov,
@clave1= chr_cuenclave
from cuenta where chr_cuencodigo = @p_cuenta1;
select @moneda2=chr_monecodigo,@cont2=int_cuencontmov
from cuenta where chr_cuencodigo = @p_cuenta2;
if ( @moneda1 != @moneda2 )
set @p_estado = 'Error, cuentas deben ser de la misma moneda';
else if( @p_clave1 != @clave1 )
set @p_estado = 'Error, datos no son correctos';
else
select @cargo=dec_costimporte
from costomovimiento where chr_monecodigo = @moneda1;
if( (@p_importe + @cargo) > @saldo1 )
set @p_estado = 'Error, saldo insuficiente.';
else
-- Registrar el retiro
update cuenta
set dec_cuensaldo = dec_cuensaldo - (@p_importe + @cargo),
int_cuencontmov = int_cuencontmov + 2
where chr_cuencodigo = @p_cuenta1;
set @cont1 = @cont1 + 1;
insert into
movimiento(chr_cuencodigo,int_movinumero,dtt_movifecha,
chr_emplcodigo,chr_tipocodigo,dec_moviimporte,chr_cuenreferencia)
values(@p_cuenta1,@cont1,GETDATE(),@p_empleado,'009',@p_importe,
@p_cuenta2);
set @cont1 = @cont1 + 1;
insert into
movimiento(chr_cuencodigo,int_movinumero,dtt_movifecha,
chr_emplcodigo,chr_tipocodigo,dec_moviimporte,chr_cuenreferencia)
values(@p_cuenta1,@cont1,GETDATE(),@p_empleado,'010',@cargo,null);
-- Registrar el deposito
update cuenta
set dec_cuensaldo = dec_cuensaldo + @p_importe,
int_cuencontmov = int_cuencontmov + 1
where chr_cuencodigo = @p_cuenta2;
set @cont2 = @cont2;

insert into
movimiento(chr_cuencodigo,int_movinumero,dtt_movifecha,chr_emplcodigo,
chr_tipocodigo,dec_moviimporte,chr_cuenreferencia)
values(@p_cuenta2,@cont2,GETDATE(),@p_empleado,'008',@p_importe,@p_cue
nta1);
COMMIT TRANSACTION;
set @p_estado = 'ok'
-- Finalizar Transaccin
END TRY
BEGIN CATCH
ROLLBACK TRANSACTION;
PRINT 'ERROR EN LA OPERACION'
set @p_estado = 'Error en el proceso de actualizaciOn.'
END CATCH

También podría gustarte