2. Funciones escalares devuelven un valor sencillo
CREATE FUNCTION nombre_función (
[parámetro1, parámetro2,...]) RETURNS
tipo_de_dato [WITH ENCRYPTION | WITH
SCHEMABINDING] [AS]
BEGIN<bloque_de_instrucciones> RETURN
valor_retornado END
3. CREATE FUNCTION cuanto_ha_viajado(@idpasajero INT,
@fecha_inicio DATE , @fecha_final DATE) RETURNS INT
AS BEGIN DECLARE @cantidad_ocasiones INT; SELECT
@cantidad_ocasiones = COUNT(a.idpasajero) FROM
Aerolinea.Boleto AS a WHERE a.idpasajero = @idpasajero
AND (fecha_compra BETWEEN @fecha_inicio AND
@fecha_final); IF ( @cantidad_ocasiones IS NULL) SET
@cantidad_ocasiones = 0; RETURN @cantidad_ocasiones;
END
4. Funciones con Valores de Tabla
en Línea
Este tipo de función tiene la misma sintaxis que una función escalar,
la única diferencia está en que retorna un tipo de dato TABLE, es
decir, una tabla compuesta de registros. Veamos la variación de la
sintaxis:
CREATE FUNCTION nombre_función ( [parámetro1,
parámetro2,...]) RETURNS TABLE [WITH ENCRYPTION |
WITH SCHEMABINDING] [AS] RETURN
(consulta_SELECT)
5. Consulte todas las compras realizadas de un producto específico. Use el código del
producto para generar los resultados y muestre el nombre del cliente que compro ese
producto, la fecha en que se compro, el precio que tenia en ese momento y la cantidad
comprada.
CREATE FUNCTION ventas_producto(@idproducto INT) RETURNS
TABLE AS RETURN( SELECT C.NOMBRE, F.FECHA, DF.CANTIDAD,
DF.PRECIO,P.IDPRODUCTO FROM CLIENTE AS C JOIN FACTURA AS
F ON C.IDCLIENTE = F.IDCLIENTE JOIN DETALLEFACTURA AS DF ON
DF.IDFACTURA = F.IDFACTURA JOIN PRODUCTO AS P ON
P.IDPRODUCTO = DF.IDPRODUCTO WHERE P.IDPRODUCTO =
@idproducto)
SELECT SUM(CANTIDAD*PRECIO) FROM ventas_producto(1003)
6. Funciones con Valores de Tabla y Múltiples Instrucciones
Este tipo de funciones son similares a las funciones de tabla en linea, solo que incluyen un
bloque de sentencias para manipular la información antes de retornar la tabla. Su sintaxis de
creación es la siguiente:
CREATE FUNCTION nombre_función ( [parámetro1, parámetro2,...]) RETURNS @variable_tabla TABLE
(nombre_columna tipo,...) [WITH ENCRYPTION | WITH SCHEMABINDING] [AS] BEGIN <bloque de
instrucciones> RETURN END
7. muestre todos los registros de la tabla EMPLEADO que tengan un salario mayor o
igual a un valor establecido como parámetro . Además de ello combine en un solo
campo el nombre y apellido del empleado y agregue un nuevo atributo que
muestre la cantidad de días que lleva el empleado desde su fecha de ingreso.
CREATE FUNCTION reporte1_empleados(@salarioemp INT) RETURNS @tabla
TABLE ( IDEMPLEADO INT PRIMARY KEY NOT NULL IDENTITY, NOMBRE
VARCHAR(200) NOT NULL, SALARIO INT NOT NULL, DIASLABORANDO INT
NOT NULL) AS BEGIN INSERT @tabla SELECT E.NOMBRE+'
'+E.APELLIDO,E.SALARIO, DATEDIFF(DAY,E.FECHA_INGRESO,GETDATE())
FROM EMPLEADO AS E WHERE E.SALARIO >= @salarioemp; RETURN; END
SELECT * FROM reporte1_empleados(1000);