| 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. |