Listado completo de tutoriales

74 - Función SQL que retorna un dato compuesto.


Hemos visto que una función puede no retornar dato, retornar un dato simple (integer, varchar etc.) Ahora veremos como retornar toda una fila de una tabla.

Para indicar que una función retorna una fila de una tabla debemos indicar luego de la palabra returns el nombre de la tabla. Por ejemplo si creamos la tabla libros y cargamos algunos registros:

 create table libros(
  codigo serial,
  titulo varchar(40) not null,
  autor varchar(20) default 'Desconocido',
  editorial varchar(20),
  precio decimal(6,2),
  primary key (codigo)
 );

 insert into libros (titulo,autor,editorial,precio)
  values('El aleph','Borges','Emece',25.33);
 insert into libros (titulo,autor,editorial,precio)
  values('Java en 10 minutos','Mario Molina','Siglo XXI',50.65);
 insert into libros (titulo,autor,editorial,precio)
  values('Alicia en el pais de las maravillas','Lewis Carroll','Emece',19.95);
 insert into libros (titulo,autor,editorial,precio)
  values('Alicia en el pais de las maravillas','Lewis Carroll','Planeta',15);

Luego al definir la función indicamos el nombre de la tabla como dato que devuelve:

 create or replace function retornarlibro(int) returns libros 
 as
 'select * from libros where codigo=$1 ;'
 language sql;

Debemos siempre disponer un comando SQL que retorne una fila de la tabla. Luego al llamar la función con un código de libro:

 select retornarlibro(4);

Tenemos como resultado un dato compuesto con todos los campos de dicha fila:

(3,"Alicia en el pais de las maravillas","Lewis Carroll",Emece,19.95)

Ingresemos el siguiente lote de comandos SQL en pgAdmin:

 drop table if exists libros cascade;
 
 create table libros(
  codigo serial,
  titulo varchar(40) not null,
  autor varchar(20) default 'Desconocido',
  editorial varchar(20),
  precio decimal(6,2),
  primary key (codigo)
 );

 insert into libros (titulo,autor,editorial,precio)
  values('El aleph','Borges','Emece',25.33);
 insert into libros (titulo,autor,editorial,precio)
  values('Java en 10 minutos','Mario Molina','Siglo XXI',50.65);
 insert into libros (titulo,autor,editorial,precio)
  values('Alicia en el pais de las maravillas','Lewis Carroll','Emece',19.95);
 insert into libros (titulo,autor,editorial,precio)
  values('Alicia en el pais de las maravillas','Lewis Carroll','Planeta',15);

 -- Implementamos una función que reciba un código de libro y
 -- retorne toda el registro que coincida con dicho código:
 create or replace function retornarlibro(int) returns libros 
 as
 'select * from libros where codigo=$1 ;'
 language sql;

 -- Llamamos a la función:
 select retornarlibro(4);

La ejecución de este lote de comandos SQL genera una salida similar a:

PostgreSQL pgAdmin


Retornar