Está en la página 1de 1

--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 medicamentos 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();

También podría gustarte