Funciones de tabla en SQL
Las funciones de tabla devuelven un conjunto de resultados en forma de tabla. A continuación, vamos a ver con ejemplos las sentencias, para crear, ejecutar, invocar, modificar y eliminar funciones de tabla.
CREATE FUNCTION
La sentencia CREATE FUNCTION
permite crear nuevas funciones en base de datos. En el siguiente ejemplo vamos a crear una nueva función tabla llamada: devolverCliente
la cual devuelva un resultado en forma de tabla con información de la tabla: Clientes
.
CREATE FUNCTION dbo.devolverCliente (@id INT)
RETURNS TABLE
AS
RETURN (
SELECT nombre,
apellidos,
direccion,
cuenta
FROM Clientes
WHERE idClientes = @id);
GO
Esta función recibe como parámetro de entrada un id
, filtrando en la tabla Clientes
para devolver un registro con los campos especificados en la SELECT
interna.
También es posible declarar internamente una estructura TABLE
con sus columnas, que podremos rellenar con los datos de una SELECT
interna a través de un INSERT
:
CREATE FUNCTION dbo.devolverClienteAlternativo (@id INT)
RETURNS @resultadoCliente TABLE
(
nombre VARCHAR(50),
apellidos VARCHAR (255),
direccion VARCHAR (255),
cuenta INT
)
AS
BEGIN
INSERT @resultadoCliente
SELECT nombre,
apellidos,
direccion,
cuenta
FROM Clientes
WHERE idClientes=@id
RETURN
END
GO
Ejecución e invocación
Podemos ejecutar funciones directamente desde la sentencia SELECT
. Para ello, basta con que escribamos el nombre de la función después de la cláusula SELECT *
. Si nuestra función recibe parámetros de entrada, debemos introducir el valor respectivo dentro de los paréntesis de la función, respetando el orden en el que se declararon y el tipo de datos que pueden soportar.
SELECT *
FROM devolverCliente(2);
El resultado de la ejecución en forma de tabla sería:
nombre | apellidos | direccion | cuenta |
---|---|---|---|
María | López Ruiz | C/ de Alcalá 138 | 123456789 |
ALTER FUNCTION
ALTER FUNCTION
define la sentencia para modificar funciones de usuario ya declaradas. Las modificaciones podrán afectar a los argumentos o parámetros de entrada, la lógica interna…
Procedemos a modificar la función devolverCliente
para que reciba en lugar de un id
, el nombre y apellidos como parámetros de entrada:
ALTER FUNCTION dbo.devolverCliente (@nombre VARCHAR (50), @apellidos VARCHAR (50))
RETURNS TABLE
AS
RETURN (
SELECT nombre,
apellidos,
direccion,
cuenta
FROM Clientes
WHERE nombre = @nombre
AND apellidos = @apellidos);
GO
SELECT *
FROM devolverCliente('Fernando', 'García Rodríguez');
nombre | apellidos | direccion | cuenta |
---|---|---|---|
Fernando | García Rodríguez | C/ Virgen del rosal 28 | 111222333 |
DROP FUNCTION
La sentencia DROP FUNCTION
elimina del sistema la función específica.
La siguiente ejecución elimina de nuestra base de datos la función devolverCliente()
:
DROP FUNCTION IF EXISTS dbo.devolverCliente;
Como en otros tipos de DROP
, es recomendable utilizar siempre la cláusula IF EXISTS