ClubEnsayos.com - Ensayos de Calidad, Tareas y Monografias
Buscar

¿Cuál es la diferencia entre un procedimiento almacenado y una función?


Enviado por   •  1 de Abril de 2016  •  Ensayos  •  816 Palabras (4 Páginas)  •  7.912 Visitas

Página 1 de 4

¿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:

...

Descargar como (para miembros actualizados)  txt (6.1 Kb)   pdf (182.2 Kb)   docx (13.4 Kb)  
Leer 3 páginas más »
Disponible sólo en Clubensayos.com