Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Declare Table
Sintaxis:
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:
o Escalares
Sintaxis:
Create Function NombreFunción (@Parámetro1 tipo, @Parámetro 2 tipo...)
Returns Tipo
As
Begin
Sentencias
End
Ejemplo:
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.
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.
o Tabla
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)
En este caso introducimos como valor Ventas, y vemos como obtenemos todos los empleados
del departamento indicado.
Ejemplo 2:
Sintaxis:
Drop Function Funcion1, Funcion2 etc.
Ejemplo:
Crea funciones con dependencias, para poder proteger la estructura de las tablas usadas en
una función. Es decir usando with schemabinding, no se podrá usar Alter ni Drop en las
tablas de las que depende.
Como vemos en el ejemplo al crear las tablas con dependencias, hemos de indicar cuál es su
propietario.
Si intentamos borrar o modificar la tabla nos mostrará un error.
Funciones No deterministas:
Trabajan siempre con el mismo tipo de valor pero devuelven cada vez un valor diferente.
Ej. getdate() trabaja siempre con la fecha del sistema pero devuelve un valor diferente,
@@Error, siempre trabaja con los errores del sistema pero devuelve errores diferentes.
A la hora de crear funciones definidas por el usuario, no podemos usar funciones no
deterministas.
Ejercicios:
1. Crear una función que pasándole una fecha y un separador a elegir nos debe cambiar el
separador de la fecha que le estamos pasando por el separador elegido, ejemplo pasándole la
fecha 01/12/2001 y el separador “:” obtendremos 01:12:2001. Hemos de tener en cuenta que
la fecha que le pasemos no tiene por qué tener el separador /.
Para probar que la función es correcta, seleccionaremos todas las fechas de alta de la tabla
Empleados y le pasaremos el separador “:”
Create Function CambiaFecha(@fecha datetime, @separador nvarchar(1))
Returns nvarchar(10)
Begin
Return
(Convert(nvarchar(6),(Day(@fecha)))
+ @separador
+ Convert(nvarchar(6),(Month(@fecha)))
+ @separador
+ Convert(nvarchar(6),(Year(@fecha))))
End
Al declarar la función usamos convert para convertir el día, mes o año a caracter, ya que si
intentamos concatenar números con carácteres da error porque piensa que intentamos sumar.
3. Crear una función que dependiendo de los datos que le enviemos, nos devolverá un informe
sobre los empleados. Los parámetros que le podemos enviar a la función son: Nº
Departamento, Nº Empleado, Fecha u Oficio. Dependiendo del dato, mostraremos unos datos
u otros.