• Funciones definidas por el usuario • CREATE FUNCTION [ owner_name. ] function_name ( [ { @parameter_name @parameter name [AS] scalar_parameter_data_type [ = default ] } [ ,...n ]]) • RETURNS scalar_return_data_type • [ AS ] • BEGIN function_body RETURN scalar_expression scalar e pression END • ALTER FUNCTION O FUNCTION U C O • DROP • sp sp_help help proporciona información acerca de las funciones definidas por el usuario. • sp_helptext proporciona información acerca del origen de las funciones definidas por el usuario. • CREATE FUNCTION dbo.Cubo( @Numero float) • RETURNS float • AS • BEGIN • RETURN(@fNumero * @fNumero * @fNumero) • END • CREATE FUNCTION dbo.Cubo( @Numero float) • RETURNS float • AS • BEGIN • declare @cubo float • set @cubo=(@Numero @cubo (@Numero * @Numero * @Numero) • return @cubo • END • Crear una tabla con Nombre, Nota 1, Nota 2, Nota 3. • Crear una función que calcule el promedio de estas 3 notas notas. • Notas con o sin decima? • create function promedio_normal (@n1 int, @n2 int,, @n3 @ int)) • returns int • as • begin • declare @prom int • set @prom=((@n1+@n2+@n3)/3) • return (@prom) • end • create t function f ti promedio_normal di l (@ (@n1 1 iint, t @n2 @ 2 int, @n3 int) • returns int • as • begin • declare @sum int declare a e @p @prom o intt • dec • set @sum=@n1+@n2+@n3 @p (@ ) • set @prom=(@sum/3) • return (@prom) • end • select dbo.promedio_normal (4,7,7) as promedio • select nombre, dbo.promedio_normal(nota1, nota2, nota3) as promedio from alumno • Promedio de notas con decimas… • create function promedio_normal_decima (@n1 float @n2 float float, float, @n3 float) • returns float • as • begin @prom float • declare @p • set @prom=((@n1+@n2+@n3)/3) • return (@prom) • end • Las notas tienen una decima… • create function promedio_normal_decimal (@n1 decimal(2,1), ( , ), @n2 @ decimal(2,1), ( , ), @n3 @ decimal(2,1)) • returns decimal(2,1) • as • begin • declare @prom decimal(2 decimal(2,1) 1) • set @prom=((@n1+@n2+@n3)/3) • return (@prom) • end • Crear una función que calcule el promedio ponderado de estas 3 notas (decimal). • Ponderacion: 20%, 30%, 50% • create function promedio_ponderado_decimas (@n1 decimal(2,1), @n2 decimal(2,1), @n3 d i l(2 1)) decimal(2,1)) • returns decimal(2,1) • as • begin • declare @p @prom decimal(2,1) ( , ) • set @prom=(@n1*0.2+@n2*0.3+@n3*0.5) • return (@prom) • end • Usando una ponderación cualquiera cualquiera.. • create function promedio_ponderado_decimas_pond (@n1 decimal(2 1) @n2 decimal(2 decimal(2,1), decimal(2,1), 1) @n3 decimal(2,1), @p1 decimal(2,1), @p2 decimal(2,1), @p3 decimal(2,1)) • returns t decimal(2,1) d i l(2 1) • as • begin • declare @prom decimal(2,1) • set @prom=(@n1*@p1+@n2*@p2+@n3*@p3) @p (@ @p @ @p @ @p ) • return (@prom) • end • Ponderaciones por defecto… • create function promedio_ponderado_decimas_pond_otro (@n1 decimal(2 1) @n2 decimal(2 decimal(2,1), decimal(2,1), 1) @n3 decimal(2,1), @p1 decimal(2,1)=0.2, @p2 decimal(2,1)=0.3, @p3 decimal(2,1)=0.5) • returns t decimal(2,1) d i l(2 1) • as • begin • declare @prom decimal(2,1) • set @prom=(@n1*@p1+@n2*@p2+@n3*@p3) @p (@ @p @ @p @ @p ) • return (@prom) • end • select dbo.promedio_ponderado_decimas_pond_otro p _p _ _p _ (4,5,6, default, default, default) • Ponderaciones suman 1… • create function promedio_ponderado_decimas_pond_val di d d d i d l (@ (@n1 1 decimal(2,1), @n2 decimal(2,1), @n3 decimal(2,1), @p1 decimal(2,1), @p2 decimal(2,1), @p3 decimal(2,1)) • returns decimal(2,1) • as • begin • declare @prom decimal(2,1) • if @p1+@p2+@p3=1 • begin • set @prom=(@n1*@p1+@n2*@p2+@n3*@p3) • end • return ret rn (@prom) • end • Ponderaciones suman 1…sino promedio=1 • • • • • • • • • • • • • • • create function promedio_ponderado_decimas_pond_val2 (@n1 decimal(2 1) @n2 decimal(2 decimal(2,1), decimal(2,1), 1) @n3 decimal(2 decimal(2,1), 1) @p1 decimal(2,1), @p2 decimal(2,1), @p3 decimal(2,1)) returns decimal(2,1) as begin declare @prom decimal(2,1) if @p1+@p2+@p3=1 begin set @prom=(@n1*@p1+@n2*@p2+@n3*@p3) @prom (@n1 @p1+@n2 @p2+@n3 @p3) end else b i begin set @prom=(1) end return (@prom) end • Para la BD Universidad crear una función que calcule la cantidad de horas semanales de una asignatura en función de sus creditos: • Cantidad de horas asignatura=creditos*3 • • • • • • • • create function horas_ramo (@creditos float) returns t float fl t as begin declare @horas float set @horas=(@creditos*3) return (@horas) end