Listado completo de tutoriales

137 - Funciones con valores de tabla en línea


Una función con valores de tabla en línea retorna una tabla que es el resultado de una única instrucción "select".

Es similar a una vista, pero más flexible en el empleo de parámetros. En una vista no se puede incluir un parámetro, lo que hacemos es agregar una cláusula "where" al ejecutar la vista. Las funciones con valores de tabla en línea funcionan como una vista con parámetros.

Sintaxis:

 create function NOMBREFUNCION
 (@PARAMETRO TIPO=VALORPORDEFECTO)
 returns table
 as
 return (
  select CAMPOS
  from TABLA
  where CONDICION
 );

Como todas las funciones definidas por el usuario, se crea con "create function" seguido del nombre que le damos a la función; luego declaramos los parámetros de entrada con su tipo de dato entre paréntesis. El valor por defecto es opcional.

"returns" especifica "table" como el tipo de datos a retornar. No se define el formato de la tabla a retornar porque queda establecido en el "select".

El cuerpo de la función no contiene un bloque "begin...end" como las otras funciones.

La cláusula "return" contiene una sola instrucción "select" entre paréntesis. El resultado del "select" es la tabla que se retorna. El "select" está sujeto a las mismas reglas que los "select" de las vistas.

Creamos una función con valores de tabla en línea que recibe un valor de autor como parámetro:

 create function f_libros
 (@autor varchar(30)='Borges')
 returns table
 as
 return (
  select titulo,editorial
  from libros
  where autor like '%'+@autor+'%'
 );

Estas funciones retornan una tabla y se hace referencia a ellas en la cláusula "from", como una vista:

 select *from f_libros('Bach');

Recuerde a que todas las funciones que tienen definidos parámetros se les DEBE suministrar valores para ellos al invocarse.

Recuerde que para que el parámetro tome el valor por defecto (si lo tiene) DEBE enviarse "default" al llamar a la función; si no le enviamos parámetros, SQL Server muestra un mensaje de error.

--incorrecto: select *from f_libros();
 select *from f_libros(default);--correcto

Retornar