Material del curso de SQL de la UNACAR 2020
Non puoi selezionare più di 25 argomenti Gli argomenti devono iniziare con una lettera o un numero, possono includere trattini ('-') e possono essere lunghi fino a 35 caratteri.

procedimientos.md 3.3 KiB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. # Procedimientos almacenados
  2. Un procedimiento almacenado MySQL no es más que una porción de código que puedes guardar y reutilizar. Es útil cuando repites la misma tarea repetidas veces, siendo un buen método para encapsular el código. Al igual que ocurre con las funciones, también puede aceptar datos como parámetros, de modo que actúa en base a éstos.
  3. ### Ventajas
  4. - Al reducir la carga en las capas superiores de al aplicación, se reduce el tráfico de red y, si el uso de los procedimientos almacenados es el correcto, puede mejorar el rendimiento.
  5. - Al encapsular las operaciones en el propio código SQL, nos aseguramos de que el acceso a los datos es consistente entre todas las aplicaciones que hagan uso de ellos.
  6. - En cuanto a seguridad, es posible limitar los permisos de acceso de usuario a los procedimientos almacenados y no a las tablas directamente. Des este modo evitamos problemas derivados de una aplicación mal programada que haga un mal uso de las tablas.
  7. ### Desventajas
  8. - Al igual que ocurre con toda tecnología, tenemos que formarnos para aprender a crear procedimientos, por lo que existe cierta curva de aprendizaje.
  9. - Otro posible problema puede ocurrir con las migraciones. No todos los sistemas gestores de bases de datos usan los procedimientos del mismo modo, por lo que se reduce la portabilidad del código.
  10. - Al hacer cambios en las estructuras de datos habra que hacer modificaciones al codigo de los procedimientos.
  11. *Sintaxis*
  12. ```
  13. CREATE PROCEDURE nombre_procedimiento
  14. AS
  15. sentencias_sql
  16. GO;
  17. ```
  18. ## Parametros de entrada
  19. En los procedimientos almacenados podemos tener tres tipos de parámetros:
  20. - Entrada: Se indican poniendo la palabra reservada IN delante del nombre del parámetro. Estos parámetros no pueden cambiar su valor dentro del procedimiento, es decir, cuando el procedimiento finalice estos parámetros tendrán el mismo valor que tenían cuando se hizo la llamada al procedimiento. En programación sería equivalente al paso por valor de un parámetro.
  21. - Salida: Se indican poniendo la palabra reservada OUT delante del nombre del parametro. Estos parámetros cambian su valor dentro del procedimiento. Cuando se hace la llamada al procedimiento empiezan con un valor inicial y cuando finaliza la ejecución del procedimiento pueden terminar con otro valor diferente. En programación sería equivalente al paso por referencia de un parámetro.
  22. - Entrada/Salida: Es una combinación de los tipos IN y OUT. Estos parámetros se indican poniendo la palabra reservada IN/OUT delante del nombre del parámetro.
  23. ## Implementación
  24. Crearemos un procedimiento que retornara el stock de un producto.
  25. *Sintaxis*
  26. ```
  27. DROP PROCEDURE IF EXISTS puntodeventa.calcularStock;
  28. DELIMITER $$
  29. $$
  30. CREATE PROCEDURE puntodeventa.calcularStock(in id_producto int, out stock float)
  31. begin
  32. select sum(cantidad) into @altas
  33. from puntodeventa.movimientos
  34. where producto_id = id_producto and tipo = 1;
  35. select sum(cantidad) into @bajas
  36. from puntodeventa.movimientos
  37. where producto_id = id_producto and tipo != 1;
  38. set stock = @altas - @bajas;
  39. END$$
  40. DELIMITER ;
  41. ```
  42. ## LLamar a un procedimiento almacenado
  43. *Sintaxis*
  44. ```
  45. set @stock=0;
  46. CALL calcularStock(18, @stock);
  47. select @stock as stock;
  48. ```
  49. ## Borrar un procedimiento ya creado
  50. *Sintaxis*
  51. ```
  52. DROP PROCEDURE calcularStock;
  53. ```