Ver Mensaje Individual
  #9 (permalink)  
Antiguo 11/04/2011, 22:57
sterlingdiazd
 
Fecha de Ingreso: junio-2009
Mensajes: 88
Antigüedad: 14 años, 10 meses
Puntos: 4
Respuesta: Stored Procedure para registrar prestamos segun limite de credito

Gracias Josh_pa por tu disposicion para ayudar. En realidad, lo que necesito es un poco de orientacion, porque no se como hacer nada, el profesor solo charlaba y nunca ponia ejercicios, luego deja una practica enorme que uno no tiene ni idea de como hacerla. Son muchas cosas que debo hacer con estos datos, pero aun no consigo la primera, que es:

En este proceso se debe controlar que el cliente no tome prestamos mas alla de su limite de credito. Eje: si el limite es 100, los prestamos no debe pasar de este monto.

Para eso me aconsejaron un trigger, y lei hasta que aprendi a hacer trigger, pero sospecho que es por eso que cuando inserto, el exec del procedimiento, me da error, pero si inserto de la forma normal, se ingresan bien los datos.

Muchas Gracias!!!!!

-- ************************************************** ***
--Creacion de Tabla Cliente

CREATE TABLE CLIENTE (
id_cliente int identity primary key,
nombre nvarchar (100),
apellido nvarchar (100),
direccion nvarchar (100),
tel_celular nvarchar (100),
tel_casa nvarchar (100),
tel_oficina nvarchar (100),
limite_credito int)

-- ************************************************** ************
--Poblar la Tabla Cliente

insert into cliente values ('Sterling', 'Diaz', 'C/Mantesa A. #2','829-592-0579','809-537-3930','N/A',50000)

-- ************************************************** *********
--Procedimiento Almacenado para registrar datos en la tabla CLIENTE

CREATE PROCEDURE Procedimiento_cliente
@id_cliente int,
@nombre nvarchar (100),
@apellido nvarchar (100),
@direccion nvarchar (100),
@tel_celular nvarchar (100),
@tel_casa nvarchar (100),
@tel_oficina nvarchar (100),
@limite_credito int
AS
BEGIN TRANSACTION Reg_Cliente
BEGIN TRY
--Si el usuario existe, será actualizado
if exists (select id_cliente from CLIENTE where id_cliente = @id_cliente)
begin
print 'Este usario existe y será actualizado.'
update CLIENTE
set
/* id_cliente = @id_cliente, No se pone porque tiene un tipo de datos Identity*/
nombre = @nombre,
apellido = @apellido,
direccion = @direccion,
tel_celular = @tel_celular,
tel_casa = @tel_casa,
tel_oficina = @tel_oficina,
limite_credito = @limite_credito
where id_cliente = @id_cliente
print 'Usuario actualizado correctamente.'
end
--Si no existe, entonces se inserta por primera vez
else
begin
insert into cliente (Nombre,Apellido,Direccion,tel_celular,tel_casa,te l_oficina,
limite_credito)
values (@nombre,@apellido,@direccion,@tel_celular,@tel_ca sa,
@tel_oficina,@limite_credito)
print 'Usuario creado'
end
COMMIT TRAN Reg_Cliente
END TRY

BEGIN CATCH
print 'Ocurrió un error durante la transaccion: ' + ERROR_MESSAGE()
ROLLBACK TRAN Reg_Cliente
END CATCH

GO
/* Para que el query del stored procedure me funcione bien, tengo que correrlo, hasta aqui, por eso le puse go. */

BEGIN TRY
EXECUTE Procedimiento_cliente 'Sterling','Diaz','C/Mantesa A. #2','829-592-0579','809-537-3930','N/A',50000
END TRY

BEGIN CATCH
PRINT 'Ocurrió un error durante la transaccion: ' +ERROR_MESSAGE()
END CATCH

/* Este begin try y catch me da el siguiente error, que no tengo idea de por qué:
Ocurrió un error durante la transaccion: Error al convertir el tipo de datos varchar a int. */



-- ************************************************** *******
--Creacion de Tabla Prestamos

CREATE TABLE PRESTAMOS (
id_cliente int FOREIGN KEY REFERENCES cliente (id_cliente),
num_prestamo int IDENTITY PRIMARY KEY,
fecha_solicitud nvarchar (100),
monto_solicitado int,
fecha_desembolso nvarchar (100),
monto_aprobado int, /* No se permiten subconsultas aqui */
balance int,
tipo_credito nvarchar (100) check (tipo_credito in ('CONSUMO','COMERCIAL','HIPOTECARIO')),
plazo nvarchar (100),
dia_pago nvarchar (100))

-- ************************************************** ***********
--Poblar la tabla Prestamos

insert into prestamos (id_cliente,fecha_solicitud,monto_solicitado,fecha _desembolso,monto_aprobado,balance,tipo_credito,pl azo,dia_pago)
values (1,'01/01/2011',90000,'01/02/2011',90000,0,'CONSUMO','30','01/03/2011')

-- ************************************************** ********
--Procedimiento Almacenado para registrar datos en la tabla PRESTAMOS

CREATE PROCEDURE Procedimiento_Prestamo
@id_cliente nvarchar (100),
@num_prestamo int,
@fecha_solicitud nvarchar (100),
@monto_solicitado int,
@fecha_desembolso nvarchar (100),
@monto_aprobado int,
@balance int,
@tipo_credito nvarchar (100),
@plazo nvarchar (100),
@dia_pago nvarchar (100)

AS
BEGIN TRANSACTION Reg_Prestamo

BEGIN TRY
--Si el prestamo existe, será actualizado
if exists (select num_prestamo from prestamo where num_prestamo = @num_prestamo)
begin
print 'Este prestamo ya existe y será actualizado.'
--Actualiza el prestamo
update prestamos
set
id_cliente = @id_cliente,
/* num_prestamo = @num_prestamo, Al ser identity, no se puede actualizar */
fecha_solicitud = @fecha_solicitud,
monto_solicitado = @monto_solicitado,
fecha_desembolso = @fecha_desembolso,
monto_aprobado = (select limite_credito from cliente),
balance = @balance,
tipo_credito = @tipo_credito,
plazo = @plazo,
dia_pago = @dia_pago
where num_prestamo = @num_prestamo
print 'Prestamo actualizado correctamente.'
end
--Si no existe, entonces se inserta por primera vez
else
begin
SET IDENTITY_INSERT PRESTAMOS ON
insert into prestamos (id_cliente,fecha_solicitud,monto_solicitado,fecha _desembolso,monto_aprobado,balance,tipo_credito,pl azo,dia_pago)
values (@id_cliente,@fecha_solicitud,@monto_solicitado,@f echa_desembolso,@monto_aprobado,@balance,@tipo_cre dito,@plazo,@dia_pago)
print 'Prestamo Registrado'
end
COMMIT TRAN Reg_Prestamo
END TRY

BEGIN CATCH
PRINT 'Ocurrió un error durante la transaccion: ' +ERROR_MESSAGE()
END CATCH

/* No se por qué no se insertan los datos del Execute. Me da el mismo error que arriba*/

BEGIN TRY
EXECUTE Procedimiento_prestamo '01/01/2011',10000,'01/02/2011',300000,0,'Consumo','01/03/2011','01/03/2011','gv'
END TRY

BEGIN CATCH
print 'Ocurrió un error durante la transaccion: ' + ERROR_MESSAGE()
END CATCH