Professional Documents
Culture Documents
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
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)
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)
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')
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