lunes, 13 de marzo de 2017

Funciones definidas por el usuario en SQL Server - 1 de 2




  • Declare Table
Mediante esta sentencia, se pueden crear tablas temporales en memoria, y posteriormente manipularlas como si fueran tablas normales. 

Sintaxis:

Declare @Tabla Table
(Campo1 tipo, Campo2 tipo, Campo3 tipo...)

Estas tablas temporales solamente sirven para el momento de la ejecución, si se intentan utilizar en otro momento el sistema no las reconocerá.

El siguiente ejemplo crea la tabla temporal y después inserta en ella:

Declare @Emp Table
(Emp_no int Primary Key,
Apellidos nvarchar(25),
Salario Int)
Insert Into @Emp
Select Emp_No, Apellido,
Salario from Emp
Select * from @Emp



  • FUNCIONES DE USUARIO
Una función de usuario, se crea con el fin de automatizar una consulta que se realiza a menudo. Pueden usar uno o más parámetros de entrada y devuelven un valor o varios resultados. Existen dos tipos de funciones:
    • Escalares
Devuelven un solo valor. 

Sintaxis:

Create Function NombreFunción (@Parámetro1 tipo, @Parámetro 2 tipo...)
Returns Tipo
As
Begin
Sentencias
End

Ejemplo:

Create Function SalmedioDep (@Deptno int)
Returns int
As
Begin
Return(Select avg(salario) from Emp Where Dept_no = @Deptno)
End

Esta función devuelve el salario medio del departamento indicado.

Para ver si la función se ha creado, consultamos en la siguiente ruta del árbol "Hospital_BD > Programación > Funciones > Funciones Escalares". Si la función no aparece, pulsamos F5 para que refresque.


select * from Emp
where salario > dbo.salmediodep(30) and dept_no <> 30


Como vemos en el ejemplo, cuando ejecutemos la función hemos de poner también el usuario al que pertenece, en este caso es el dbo.
    • Tabla
Estas funciones devuelven una tabla. 

Sintaxis:

Create Function NombreFunción(Parámetro1 tipo, Parámetro2 tipo...)
Returns Table
As
Return(Sentencias)
/
Sentencias
Return 

Como vemos, en la sintaxis, esta sentencia puede construirse de diferentes maneras. Return indica que tiene que devolver un valor. Usaremos una sintaxis u otra en los siguientes casos:
Si tenemos que hacer una sola sentencia o una sentencia anidada, usaremos Return (Sentencia / Sentencias anidadas) en cambio si dependiendo de una serie de condiciones controladas mediante if, when, etc. realizamos unas sentencias u otras, incluiremos Return al final del todo.

Ejemplo 1:

Create Function Emp_Dept (@Ndept nvarchar(20))
Returns Table
As
Return(Select Emp_No, Apellido, Salario, DNombre From Emp
Inner Join Dept
On Dept.Dept_no = Emp.Dept_no
where DNombre = @NDept)

Si vamos a Funciones de Tabla veremos la función que hemos creado.



Después tratamos la función como si fuera una tabla, ej:

Select * from Emp_Dept ('Ventas')


En este caso introducimos como valor Ventas, y vemos como obtenemos todos los empleados del departamento indicado.

Ejemplo 2:

Create Function Emp_Dept2(@ndept nvarchar(20))
Returns @Emp Table(Emp_no int, Apellido nvarchar(20), Salario int,
Dnombre nvarchar(20))
As
Begin
Insert Into @Emp
Select Emp_no, Apellido, Salario, Dnombre from Emp
Inner Join Dept
On Dept.Dept_no = Emp.Dept_no
where Dnombre = @NDept
Return
End

Select * from Emp_dept2 ('Ventas')


  • Drop Function
Borra una o varias funciones. 

Sintaxis:

Drop Function Funcion1, Funcion2 etc.

Ejemplo:

Drop Function SalMedioDep, Emp_Dept, Emp_Dept2


Espero haber ayudado en algo. Hasta la próxima oportunidad!











  

No hay comentarios:

Publicar un comentario