Advertisement
jacknpoe

Como retornar valor de uma Stored Procedure com transação em MySQL

Jan 15th, 2024
1,061
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
MySQL 1.73 KB | Source Code | 0 0
  1. ###### FUNÇÃO QUE FUNCIONA
  2. DELIMITER |
  3. CREATE OR REPLACE FUNCTION Transfere(origem INT, destino INT) RETURNS DECIMAL(15,2) DETERMINISTIC MODIFIES SQL DATA
  4. BEGIN
  5.     DECLARE Total DECIMAL(15,2);
  6.  
  7.     SELECT saldo FROM conta WHERE codigo = origem INTO Total;
  8.     UPDATE conta SET saldo = saldo + Total WHERE codigo = destino;
  9.     UPDATE conta SET saldo = 0 WHERE codigo = origem;
  10.  
  11.     RETURN Total;
  12. END |
  13.  
  14.  
  15.  
  16. ###### PROCEDIMENTO QUE FUNCIONA
  17. DELIMITER |
  18. CREATE OR REPLACE PROCEDURE Transfere(origem INT, destino INT) DETERMINISTIC MODIFIES SQL DATA
  19. BEGIN
  20.     DECLARE Total DECIMAL(15,2);
  21.  
  22.     START TRANSACTION READ WRITE;
  23.     SELECT saldo FROM conta WHERE codigo = origem INTO Total;
  24.     UPDATE conta SET saldo = saldo + Total WHERE codigo = destino;
  25.     UPDATE conta SET saldo = 0 WHERE codigo = origem;
  26.     COMMIT;
  27. END |
  28.    
  29.  
  30. ###### FUNÇÃO QUE NÃO FUNCIONA
  31. DELIMITER |
  32. CREATE OR REPLACE FUNCTION Transfere(origem INT, destino INT) RETURNS DECIMAL(15,2) DETERMINISTIC MODIFIES SQL DATA
  33. BEGIN
  34.     DECLARE Total DECIMAL(15,2);
  35.  
  36.     START TRANSACTION READ WRITE;
  37.     SELECT saldo FROM conta WHERE codigo = origem INTO Total;
  38.     UPDATE conta SET saldo = saldo + Total WHERE codigo = destino;
  39.     UPDATE conta SET saldo = 0 WHERE codigo = origem;
  40.     COMMIT;
  41.  
  42.     RETURN Total;
  43. END |
  44.  
  45.  
  46. ###### PROCEDIMENTO QUE FUNCIONA COM RETORNO
  47. DELIMITER |
  48. CREATE OR REPLACE PROCEDURE Transfere(origem INT, destino INT, OUT Total DECIMAL(15,2)) DETERMINISTIC MODIFIES SQL DATA
  49. BEGIN
  50.     START TRANSACTION READ WRITE;
  51.     SELECT saldo FROM conta WHERE codigo = origem INTO Total;
  52.     UPDATE conta SET saldo = saldo + Total WHERE codigo = destino;
  53.     UPDATE conta SET saldo = 0 WHERE codigo = origem;
  54.     COMMIT;
  55. END |
  56.  
  57.  
  58. ###### COMO CHAMAR O PROCEDIMENTO
  59. CALL Transfere( 1, 2, @total);
  60. SELECT @total;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement