miércoles, 25 de marzo de 2020

Taller de Funciones en PostgreSQL


Apreciados estudiantes, favor tener en cuenta el manual de instalación en sus casas de la herrameinta PostgreSQL, como lo tratamos en la clase de hoy jueves 19 de marzo de 2020 a las 7:30 am.

Una vez instalado, crear una base de datos y realizar las siguientes funciones (realizar las tablas respectivas de acuerdo a la función):


--Recorrer la tabla productos y mostrar los nombres.
CREATE or replace FUNCTION pro_funcion() RETURNS setof varchar AS $$
DECLARE
i record;
BEGIN
FOR i IN SELECT * FROM productos LOOP
                return next i.prod_nombre || '---' || i.prod_precio;
END LOOP;
END;
$$ LANGUAGE plpgsql;
select * from pro_funcion()

 ________________________________________________

--Buscar en la tabla productos por el nombre enviando un parámetro

CREATE OR REPLACE FUNCTION prod_funcion2(nom varchar) RETURNS SETOF varchar AS $$ BEGIN
    RETURN QUERY SELECT prod_nombre FROM productos WHERE prod_nombre LIKE nom || '%'; END;
$$ LANGUAGE plpgsql;
SELECT prod_funcion2('C');
DROP FUNCTION prod_funcion2(nom TEXT)


 ____________________________________________

--crear la tabla

CREATE or replace FUNCTION nuevosdatos() RETURNS TABLE(NOMBRE varchar, TOTAL real, FECHA timestamp) AS $$
DECLARE
i record;
BEGIN
drop table med;
create table med(id integer,nombre varchar,total real,fecha timestamp);
FOR i IN SELECT * FROM medicamentos LOOP
insert into med values(i.codigo,i.nombre,i.precio*i.cantidad,current_timestamp);
END LOOP;
return query select med.nombre,med.total,med.fecha from med;
END;
$$ LANGUAGE plpgsql;
--getpgusername()
--current_user
select * from nuevosdatos()
--ejemplo de asignar una consulta a una variable
create or replace function fn_categoria(id int) returns varchar as $$
declare
x varchar;
begin
x=(select cat_nombre from categorias where cat_id=id);
return x;
end;
$$ language plpgsql
select fn_categoria(5);
create or replace function fn_prod() returns int as $$
declare
x record;
prom decimal;
conta int;
begin
conta=0;
prom=(select avg(prod_precio) from productos);
for x in select * from productos loop
if x.prod_precio < prom then
update productos set prod_precio=prod_precio+2000 where prod_id=x.prod_id;
conta=conta+1;
end if;
end loop;
return conta;
end;
$$ language plpgsql
select fn_prod();

No hay comentarios.:

Publicar un comentario