Principales respuestas
me urge resolverlos siguiente es sobre un procedimiento almacenado

Pregunta
-
tengo el siguiente codigo del procedimiento almacenado
DECLARE @importe DECIMAL(18,2),
@CuentaOrigen VARCHAR(12),
@CuentaDestino VARCHAR(12)
SET @importe = 1000
SET @CuentaOrigen = '3000'
SET @CuentaDestino = '1000'
BEGIN TRANSACTION -- O solo BEGIN TRAN
BEGIN TRY
/* Descontamos el importe de la cuenta origen */
UPDATE CUENTA
SET SALDO = SALDO - @importe
WHERE NUMCUE = @CuentaOrigen
/* Incrementamos el importe de la cuenta destino */
UPDATE CUENTA
SET SALDO = SALDO + @importe
WHERE NUMCUE = @CuentaDestino
/* Confirmamos la transaccion*/
COMMIT TRANSACTION -- O solo COMMIT
END TRY
BEGIN CATCH
/* Hay un error, deshacemos los cambios*/
ROLLBACK TRANSACTION -- O solo ROLLBACK
PRINT 'Se ha producido un error!'
END CATCH-----------------------------------
lo que no se es como mandar un mensaje "Saldo insuficiente" cuando alguna cuenta no cuenta con el saldo
necesario para hacer la transferencia, esta transacción me pone numero negativos cuando no se debería de poder
martes, 10 de febrero de 2015 21:01
Respuestas
-
Hola,
En realidad no es algo que deba de validarse en la base de datos, quizá si como un segundo nivel de protección pero no como primera medida. Tu aplicación debería primero validar si existe saldo antes de proceder a realizar la transacción. Aún así y como segundo nivel de seguridad puedes hacerlo en el procedimiento:
DECLARE @importe DECIMAL(18,2), @CuentaOrigen VARCHAR(12), @CuentaDestino VARCHAR(12) SET @importe = 1000 SET @CuentaOrigen = '3000' SET @CuentaDestino = '1000' BEGIN TRANSACTION -- O solo BEGIN TRAN BEGIN TRY IF (Select SALDO from CUENTA WHERE NUMCUE = @CuentaOrigen) < @importe BEGIN PRINT 'No existe saldo suficiente para realizar la transacción' ELSE BEGIN /* Descontamos el importe de la cuenta origen */ UPDATE CUENTA SET SALDO = SALDO - @importe WHERE NUMCUE = @CuentaOrigen /* Incrementamos el importe de la cuenta destino */ UPDATE CUENTA SET SALDO = SALDO + @importe WHERE NUMCUE = @CuentaDestino /* Confirmamos la transaccion*/ COMMIT TRANSACTION -- O solo COMMIT END END TRY BEGIN CATCH /* Hay un error, deshacemos los cambios*/ ROLLBACK TRANSACTION -- O solo ROLLBACK PRINT 'Se ha producido un error!' END CATCH
Si la solución propuesta atendió su consulta no olvide marcarla como respuesta.
Willams Morales
Arequipa - PERÚ- Propuesto como respuesta Karen MalagónModerator miércoles, 11 de febrero de 2015 17:23
- Marcado como respuesta 0claire0 miércoles, 11 de febrero de 2015 18:19
martes, 10 de febrero de 2015 21:09
Todas las respuestas
-
Hola,
En realidad no es algo que deba de validarse en la base de datos, quizá si como un segundo nivel de protección pero no como primera medida. Tu aplicación debería primero validar si existe saldo antes de proceder a realizar la transacción. Aún así y como segundo nivel de seguridad puedes hacerlo en el procedimiento:
DECLARE @importe DECIMAL(18,2), @CuentaOrigen VARCHAR(12), @CuentaDestino VARCHAR(12) SET @importe = 1000 SET @CuentaOrigen = '3000' SET @CuentaDestino = '1000' BEGIN TRANSACTION -- O solo BEGIN TRAN BEGIN TRY IF (Select SALDO from CUENTA WHERE NUMCUE = @CuentaOrigen) < @importe BEGIN PRINT 'No existe saldo suficiente para realizar la transacción' ELSE BEGIN /* Descontamos el importe de la cuenta origen */ UPDATE CUENTA SET SALDO = SALDO - @importe WHERE NUMCUE = @CuentaOrigen /* Incrementamos el importe de la cuenta destino */ UPDATE CUENTA SET SALDO = SALDO + @importe WHERE NUMCUE = @CuentaDestino /* Confirmamos la transaccion*/ COMMIT TRANSACTION -- O solo COMMIT END END TRY BEGIN CATCH /* Hay un error, deshacemos los cambios*/ ROLLBACK TRANSACTION -- O solo ROLLBACK PRINT 'Se ha producido un error!' END CATCH
Si la solución propuesta atendió su consulta no olvide marcarla como respuesta.
Willams Morales
Arequipa - PERÚ- Propuesto como respuesta Karen MalagónModerator miércoles, 11 de febrero de 2015 17:23
- Marcado como respuesta 0claire0 miércoles, 11 de febrero de 2015 18:19
martes, 10 de febrero de 2015 21:09 -
me marco error por el else, lleva algo mas en el else?martes, 10 de febrero de 2015 21:30
-
Hola,
Antes del ELSE debería haber un END para cerrar el BEGIN del IF.
martes, 10 de febrero de 2015 21:38 -
ok muchas graciasmiércoles, 11 de febrero de 2015 18:20