¿Cuál es la diferencia entre un procedimiento almacenado y una función?
Enviado por Miguel Madrid • 1 de Abril de 2016 • Ensayo • 816 Palabras (4 Páginas) • 7.981 Visitas
¿Cuál es la diferencia entre un procedimiento almacenado y una función?
Funciones y procedimientos
Una función y un procedimiento almacenado, son diferentes, aunque con ciertas similitudes. Pero cuando debemos de usar cada una. Generalmente se usa una función para calcular un valor y regresarlo para utilizarlo posteriormente en alguna expresión. Un procedimiento se usa para producir un efecto o una acción sin necesidad de regresar algún valor. Si se necesita regresar más de un valor, no se puede utilizar una función, sin embargo, se puede crear un procedimiento cuyos parámetros tengan la propiedad de OUT, los cuales puedan ser utilizados en expresiones una vez que el procedimiento se haya ejecutado.
Se usan las rutinas antes mencionadas, porque nos dejan hacer lo siguiente:
- Extienden la sintaxis de SQL
- Manejo de errores
- Como se almacenan en el servidor, el código de creación solo debe de ejecutarse una vez y no cada vez que se quiera ejecutar.
Para crear una función o un procedimiento se deben usar las instrucciones CREATE FUNCTION o CREATE PROCEDURE.
Por ejemplo:
delimiter $
CREATE FUNCTION age (date1 DATE, date2 DATE)
RETURNS INT
BEGIN
DECLARE age INT;
SET age = (YEAR(date2) - YEAR(date1)) - IF(RIGHT(date2,5) < RIGHT(date1,5),1,0);
RETURN age;
END$
delimiter ;
Hay que tener en cuenta cómo implementarla las funciones, ya que pueden tener un peligro oculto. Por ejemplo veamos este caso:
SELECT * FROM dbo.MyTable WHERE col1 = dbo.MyFunction(col2)
Ahora veamos el código que la implementa:
CREATE FUNCTION MyFunction (@someValue INTEGER) RETURNS INTEGER
AS
BEGIN
DECLARE @retval INTEGER
SELECT localValue
FROM dbo.localToNationalMapTable
WHERE nationalValue = @someValue
RETURN @retval
END
Lo que sucede aquí es que la función MyFunction es llamado para cada fila de la tabla MyTable. Si MyTable tiene 1000 filas, entonces ese es otro de las 1000 consultas contra la base de datos. Del mismo modo, si la función es llamada cuando se especifica en la columna de especificaciones, a continuación, la función se llama para cada fila devuelta por la función select.
En resumen me gustaría enumerar las diferencias entre una función y un store procedure:
Procedimiento Almacenado | Función |
Pueden retornar un valor, muchos valores o ningún valor | Es obligatorio retornar un valor |
Podemos usar transacciones | No podemos usar transacciones |
Puede tener parámetros de entrada y salida | Solamente parámetros de entrada |
Podemos llamar funciones dentro de un procedimiento almacenado | No podemos llamar procedimientos dentro de las funciones |
No podemos usar un procedimiento dentro de los select, where , having | Podemos usar una función dentro de los select, where , having |
Podemos usar manejo de excepciones usando bloques try, catch | No podemos usar bloques try catch |
Implementa un procedimiento almacenado que valide que la edad proporcionada sea la permitida para un trabajador
create procedure introduceEdad(in edad int,in nombre varchar(50))
begin
if edad < 18 then
insert into edadEmpleados values(nombre,edad);
else
select " la edad no es permitida ";
end if;
end;
La estructura de la tabla donde afectara es la siguiente:
...