Funciones

Una función es un conjunto de sentencias que operan como una unidad lógica, una rutina que retorna un valor. Una función tiene un nombre, acepta parámetros de entrada y retorna un valor escalar o una tabla.
Los parámetros de entrada pueden ser de cualquier tipo, excepto timestamp, cursor y table.
Las funciones definidas por el usuario no permiten parámetros de salida.

Las funciones pueden clasificarse en:

Determinísticas: siempre retornan el mismo resultado si se las invoca enviando el mismo valor de entrada. Todas las funciones de agregado y string son determinísticas, excepto «charindex» y «patindex».

No Determinísticas: pueden retornar distintos resultados cada vez que se invocan con el mismo valor de entrada. Las siguientes son algunas de las funciones no deterministicas: getdate, datename, textptr, textvalid, rand. Todas las funciones de configuración, cursor, meta data, seguridad y estadísticas del sistema son no deterministicas.

SQL Server provee muchas funciones y además permite que el usuario pueda definir sus propias funciones.
Existen Reglas que se deben respetar al utilizar funciones:
No todas las sentencias SQL son válidas dentro de una función. 
NO es posible emplear en ellas funciones no determinísticas (como getdate()) ni sentencias de modificación o actualización de tablas o vistas. 
Si podemos emplear sentencias de asignación, de control de flujo (if), de modificación y eliminación de variables locales.
SQL Server admite 2 tipos de funciones definidas por el usuario clasificadas según el valor retornado:
Escalares: retornan un ùnico valor escalar
De tabla de varias instrucciones (retornan una tabla)

Las funciones definidas por el usuario se crean con la instrucción «create function» y se eliminan con «drop function». Luego del nombre se colocan (opcionalmente) los parámetros de entrada con su tipo. La cláusula «returns» indica el tipo de dato retornado.

Ejemplo 1 – Función Escalar: función denominada «f_promedio» que recibe 2 valores y retorna el promedio:

Create function f_promedio  (@valor1 decimal(4,2),   @valor2 decimal(4,2)  )
 returns decimal (6,2)  as
 begin 
   declare @resultado decimal(6,2)
   set @resultado=(@valor1+@valor2)/2
   return @resultado
 end;

Al hacer referencia a una función escalar, se debe especificar el propietario y el nombre de la función:

Select dbo.f_promedio(5.5,8.5);

Ejemplo 2 – Función de Tabla: función denominada «f_EmpleadosxCiudad» que recibe 1 valor de Localidad y devuelve una lista con los empleados que viven en esa ciudad:

Create function f_EmpleadosxCiudad (@ciudad varchar(30)=»)
 returns table
 as return (
  select Empleados.nombre
  from Empleados
  inner join Localidades on Empleados.Localidad=Localidades.codigo
  where Localidades.nombre like ‘%’+@ciudad+’%’
 );

Al hacer referencia a una función de Tabla, es:

Select *from f_EmpleadosxCiudad(‘Bell Ville’);

Tener en cuenta que un procedimiento almacenado  puede realizar una o más tareas, mientras que la función realiza una tarea específica. El procedimiento puede o no devolver un valor, mientras que la función debe devolver un valor. Además podemos llamar a funciones en la sentencia select mientras que en el procedimiento no podemos.

Deja un comentario

Esta página web utiliza cookies    Más información
Privacidad