• Funciones definidas por el usuario

Anuncio
• 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
Descargar