You are on page 1of 17

FUNCIONES DEFINIDAS POR EL USUARIO

Ing. BETTY L. SUREZ TORRES

CONCEPTO DE FUNCIN
Las funciones se utilizan para realizar clculos que puedan ser devueltos a una aplicacin solicitante o integrados en un conjunto de resultados. Las funciones definidas por el usuario, en tiempo de ejecucin de lenguaje TRANSACT-SQL o comn (CLR), acepta parmetros, realiza una accin, como un clculo complejo, y devuelve el resultado de esa accin como un valor. El valor de retorno puede ser un escalar (nico) valor o una tabla. Funciones del sistema
Opcin Agregadas Funcin Combinan valores mltiples, tales como SUM, AVG, COUNT, VAR

Configuracin Devuelve informacin de configuracin del sistema como @@VERSION, @@SERVERNAME Y @@LANGUAGE

Las funciones de usuario son definidas para crear una rutina reutilizables que se pueden utilizar en las siguientes maneras: En TRANSACT-SQL como SELECT En las aplicaciones de llamar a la funcin En la definicin de otra funcin definida por el usuario Para parametrizar una vista o mejorar la funcionalidad de una vista indizada Para definir una columna en una tabla Para definir una restriccin CHECK en una columna Para reemplazar a un procedimiento almacenado Las funciones de usuario, segn el tipo de retorno se clasifican en las siguientes: 1. Funciones Escalares 2. Funciones con valores de tabla de varias instrucciones 3. Funciones con valores de tabla en lnea

FUNCIONES ESCALARES
Son aquellas funciones donde retornan un valor nico: tipo de datos como int, Money, varchar, real, etc. Pueden ser utilizadas en cualquier lugar, incluso, Incorporada dentro de las sentencias SQL.
CREATE FUNCTION [ schema_name. ] function_name ( [ { @parameter_name [ AS ] [ type_schema_name. ] parameter_data_type [ =default ] [READONLY] } [ ,...n ] ] ) RETURNS return_data_type [ WITH <function_option> [ ,...n ] ] [AS] BEGIN function_body RETURN scalar_expression END

EJERCICIOS FUNCIONES ESCALARES


Usando la BD Pedidos: 1. Mostrar el precio promedio de los productos create function preciopromedio() returns decimal as begin declare @prom decimal select @prom=avg(preciomin) from producto p, precio r where p.prodid=r.prodid return @prom end

2. Mostrar la cantidad de pedidos por empleado ingresado como parmetro create function pedidosxempleado(@id int) returns int as begin declare @q int select @q=count(*) from ordenpedido where empnro=@id if @q is null set @q=0 return @q end
print dbo.pedidosxempleado(2)

3.Funcin que muestra la fecha del pedido en caracteres (no usar datename) create function f_fechaCadena when 8 then 'Agosto' (@fecha datetime) when 9 then 'Setiembre' returns varchar(25) when 10 then 'Octubre' as when 11 then 'Noviembre' begin when 12 then 'Diciembre' declare @nombre varchar(25) end--case set @nombre='Fecha invlida' set if (isdate(@fecha)=1) @nombre=rtrim(cast(datepart(day,@fecha) as begin char(2)))+' de '+@nombre set @nombre= set @nombre=@nombre+' de '+ case month(@fecha) rtrim(cast(datepart(year,@fecha)as char(4))) when 1 then 'Enero' end--si es una fecha vlida when 2 then 'Febrero' return @nombre end when 3 then 'Marzo' when 4 then 'Abril select idpedido, when 5 then 'Mayo' dbo.f_fechaCadena(fechapedido) as 'f.pedido' when 6 then 'Junio' from pedidoscabe when 7 then 'Julio'

4.Tiempo transcurrido entre la fecha de pedido y la fecha de entrega de una orden de pedido create function f_tiempotrans (@id int) returns int as begin declare @tiempo int -- restar las fechas select @tiempo = datediff(day, p.fechapedido, p.fechaentrega) from pedidoscabe p where p.idpedido = @id; return @tiempo end

print dbo.f_tiempotrans(100)

FUNCIONES DE TABLA EN LNEA


Las funciones de tabla en lnea son las funciones que devuelven la salida de una simple declaracin SELECT. La salida se puede utilizar dentro de JOINS o querys como si fuera una tabla de estndar.

1. Funcin que muestra los datos de las rdenes emitidos por un empleado create function f_pedxemp(@ide int) returns table as return (select * from pedidoscabe where idempleado=@ide)

--ejecutar select * from f_pedxemp(1)

2.Mostrar en una tabla los clientes que no han realizado un pedido create function f_clientes() returns table as return (select c.idcliente as 'codigo', nomcliente as 'nombres', dircliente 'direccin' from venta.clientes c left join pedidoscabe p on c.idcliente = p.idcliente where idpedido is null) -- ejecutando la funcion select * from f_clientes()

4.Mostrar los pases cuyo nombre empieza con una letra ingresada como parmetro, almacenar los datos en una tabla create function fn_paises (@letra char(1)) returns table as return ( select idpais, nombrepais from paises where nombrepais like @letra+'%' ) -select * from fn_paises('c')

FUNCIONES DE TABLAS DE MULTISENTENCIAS


Son similares a los procedimientos almacenados excepto que vuelven una tabla. Este tipo de funcin se usa en situaciones donde se requiere ms lgica y proceso.

1.Muestra el total acumulado a partil del detalle de pedidos create function fn_totalpedidos() -- recorremos el cursor returns @datos table while (@@fetch_status = 0) ( -- estructura de la tabla begin idpedido int, -- insertamos la cuenta en la variable de salida total decimal(10,2) ) insert into @datos(idpedido, as total) values(@id, @tot) begin -- vamos a la siguiente cuenta declare @id int, @tot decimal(10,2) fetch cdatos into @id, @tot -- cursor con las 3 cuentas de mayor saldo end close cdatos declare cdatos cursor for select idpedido, sum(preciounidad-descuento) deallocate cdatos return from pedidosdeta group by idpedido end order by idpedido open cdatos --ejecutar select * from fn_totalpedidos() fetch cdatos into @id, @tot

2.Crear una funcin que almacene en una tabla los datos de los productos que estn en oferta (id, nombre del producto, nombre de la categora y precio) y cuyo precio es menor al mnimo exigido.
create function f_ofertas (@minimo decimal(6,2)) returns @ofertas table-- nombre de la tabla --formato de la tabla (idproducto int, select * from dbo.f_ofertas(2) nomproducto varchar(80), categoria varchar(40), precio decimal(10,2) ) as begin insert @ofertas select idproducto, nomproducto, nombrecategoria, preciounidad from productos p, categorias c where p.idcategoria=c.idcategoria and preciounidad < @minimo return end

3.Crear una funcin con valores de tabla de varias instrucciones que devuelve el id y nombres de un proveedor create function fn_proveedores() returns @fn_proveedores table (idproveedor int primary key not null, nomproveedor varchar(80) not null) as begin insert @fn_proveedores select idproveedor, nomproveedor from proveedores return end ---puede llamar a la funcin en lugar de una tabla o vista. select * from dbo.fn_proveedores()

EJERCICIOS
1. Disear una funcin que muestre el total de empleados que han realizado ms de 1 venta 2. Crear una funcin que reciba un parmetro correspondiente a una cantidad mxima de artculos y retorne una tabla con cdigo, nombre y cantidad de artculos. La cantidad debe ser mayor al parmetro 3. Disear una funcin que muestre el total de empleados que han realizado menos de 2 ventas

You might also like