Está en la página 1de 9

FUNCIONES CON DATOS

Cree una funcin de nombre launo la cual retorne el promedio aritmtico del nmero de
pginas de todos los libros

create or replace function launo()


returns varchar as $$
declare
prom numeric;

begin
select AVG (nro_paginas) into prom from libro ;

Return 'El promedio aritmtico del nmero de pginas es: '||round(prom,2);


end
$$
Language 'plpgsql';

Cree una funcin de nombre launo la cual retorne el promedio aritmtico del nmero de
pginas de todos los libros cuyo nombre tenga ms de x caracteres.

create or replace function launo(x int)


returns varchar as $$
declare
prom numeric;

begin
select AVG (nro_paginas) into prom from libro where length(nombre) > x ;

Return 'El promedio aritmtico del nmero de pginas es: '||round(prom,2);


end
$$
Language 'plpgsql';

select launo(12);
Cree una funcin de nombre launo la cual retorne el promedio aritmtico del nmero de
pginas de todos los libros cuyo nombre tenga ms de x caracteres y adems hayan
sido publicados antes del mes digitado en la variable y.

create or replace function launo(x int, y varchar)


returns varchar as $$
declare
prom numeric;

begin
select AVG (nro_paginas) into prom from libro where length(nombre) > x and
to_char(fecha_publicacion,'mm') < y;

Return 'El promedio aritmtico del nmero de pginas de los libros cuyo nombre tenga
ms de '||x||' caracteres y publicados antes del mes '||y||' es: '||round(prom,2);
end
$$
Language 'plpgsql';

select launo(12,'05');

RETORNANDO TUPLAS (setof)


Cree una funcin de nombre lados la cual retorne toda la informacin de los libros.

create or replace function lados()


returns setof libro as $$
declare

begin
return query
select * from libro;

end
$$
Language 'plpgsql';

select * from lados();

Cree una funcin de nombre lados la cual retorne toda la informacin de los libros cuyo
nombre comience por el o los caracteres digitados en la variable x.

create or replace function lados(x varchar)


returns setof libro as $$
declare

begin
return query
select * from libro where nombre LIKE x||'%';

end
$$
Language 'plpgsql';

select * from lados( 'a');

Cree una funcin de nombre lados la cual retorne toda la informacin de los libros que
contengan el o los caracteres digitados en la variable x y que tenga entre y y z pginas.
create or replace function lados(x varchar, y int, z int)
returns setof libro as $$
declare

begin
return query
select * from libro where nombre LIKE '%'||x||'%' and nro_paginas between y and z;

end
$$
Language 'plpgsql';

select * from lados('al', 5, 300);

Cree una funcin de nombre lados la cual retorne lo siguiente:

Si digito 1: Toda la info de los libros cuyo nombre empiece por lo digitado en x.
Si digito 2: Toda la info de los libros cuyo nombre contenga por lo digitado en x.
Si digito 3: Toda la info de los libros cuyo nombre termine por lo digitado en x.

create or replace function lados(x varchar, opcion int)


returns setof libro as $$
declare

begin

IF opcion = 1 then
return query
select * from libro where nombre LIKE x||'%';
Elseif opcion = 2 then
return query
select * from libro where nombre LIKE '%'||x||'%';
Elseif opcion = 3 then
return query
select * from libro where nombre LIKE '%'||x;
End if;

end
$$
Language 'plpgsql';

select * from lados('al', 1);

CONSULTA DE CAMPOS CON PARAMETROS DE SALIDA

Variables in - out
POR RECORD

create or replace function laseis(out "codigo libro" numeric, out "nombre del libro"
varchar, in x int)
returns setof record as $$

begin
return query
Select codigo, nombre from libro where nro_paginas > x;

end
$$
Language 'plpgsql';

select * from laseis(100);

POR TABLE

create or replace function lasiete(in x int)


returns table ("codigo libro" numeric, "nombre del libro" varchar)as $$

begin
return query
Select codigo, nombre from libro where nro_paginas > x;

end
$$
Language 'plpgsql';

CONSULTA EN FUNCIN CON JOIN IMPLICITO

Cree una funcion de nombre laocho, muestre toda la informacin de las categoras cuyo
nombre tenga ms de z caracteres en los que haya libros de ms de W paginas, muestre
adems el nombre del libro que pertenezca a dicha categora junto al nmero de paginas
Categoria nombre > z
Libros nro_paginas > w

Nombre categoria, nombre libro, numero de paginas

Select distinct categoria.nombre, libro.nombre, libro.nro_paginas from libro,


categoria where libro.nombre > z and libro.nro_paginas > w;

create or replace function lacatorce(in z numeric, in w numeric, out "Codigo categoria" numeric,
out "Nombre categoria" varchar, out "nombre del libro" varchar, out "Nmero de pginas"
numeric)
returns setof record as $$

begin
return query
Select distinct categoria.codigo, categoria.nombre, libro.nombre, libro.nro_paginas
from libro, categoria
where libro.cod_cat = categoria.codigo
and length(categoria.nombre) > z
and libro.nro_paginas > w;

end
$$
Language 'plpgsql';

CONSULTA GROUP BY

Muestre la cantidad de libros que hay en cada categora junto a toda la informacin de
ella.

Categoria nombre > z


Libros nro_paginas > w

Nombre categoria, nombre libro, numero de paginas

Select distinct categoria.nombre, libro.nombre, libro.nro_paginas from libro,


categoria where libro.nombre > z and libro.nro_paginas > w;

create or replace function laquince(out "Codigo categoria" numeric, out "Nombre categoria"
varchar, out "Cantidad" bigint)
returns setof record as $$

begin
return query
Select categoria.*, count(*)
from libro, categoria
where libro.cod_cat = categoria.codigo
group by categoria.codigo, categoria.nombre;

end
$$
Language 'plpgsql';

select * from laquince();

CONSULTA GROUP BY HAVING


Muestre la cantidad de libros que hay en cada categora junto a toda la informacin de
ella, muestre unicamente los que tienen ms de 5 libros.

create or replace function laquince(out "Codigo categoria" numeric, out "Nombre categoria"
varchar, out "Cantidad" bigint, in x numeric)
returns setof record as $$
begin
return query
Select categoria.*, count(*)
from libro, categoria
where libro.cod_cat = categoria.codigo
group by categoria.codigo, categoria.nombre
having count(*)>x;

end
$$
Language 'plpgsql';

También podría gustarte