En PostgreSQL —para los usuarios que vienen de otros motores— no existe el concepto de Procedimientos Almacenados o Stored Procedures, simplemente existen las Funciones que hacen el papel de ambas cosas en otros motores más populares.
Otras de sus particularidades en PLPG/SQL es que éstos soportan sobrecarga (como en la orientación a objetos), es decir, pueden existir más de una función con el mismo nombre (a diferencia del resto) y ser diferenciados por la cantidad y tipos de parámetros recibidos. Vale recordar que este motor es sensible a las mayúsculas, cosa que a los que llegan recién les produce varios inconvenientes.
Básicamente lo que veremos en este post, es 3 ejemplos de funciones, los que retornan valores, los que no. Lo escribiremos en plpgsql y sql estándar también. Existen otros factores que debemos considerar, como los son el COSTO, VOLATILIDAD, etc. que veremos en una siguiente entrega..
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | -- Ejemplo en PLPGSQL sin retorno de valor CREATE OR REPLACE FUNCTION mischema.ins_personal_asfiles ( pid_nomina_asistencia public.entero, pfichero public.blob, pnombre_fichero public.memo_corto ) RETURNS void AS $$ begin insert into mischema.personal_asfiles (id_nomina_asistencia, fichero, nombre_fichero, fecha_hora_marcacion) values (pid_nomina_asistencia, pfichero, pnombre_fichero, null); end $$ LANGUAGE 'plpgsql' VOLATILE CALLED ON NULL INPUT SECURITY INVOKER COST 100; |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | -- Ejemplo en PLPGSQL con retorno de valores CREATE OR REPLACE FUNCTION mischema.slc_personal_asfiles ( pid_nomina_asistencia integer ) RETURNS SETOF mischema.personal_asfiles AS $$ begin return query(select * from mischema.personal_asfiles p where p.id_nomina_asistencia = pid_nomina_asistencia); end $$ LANGUAGE 'plpgsql' VOLATILE CALLED ON NULL INPUT SECURITY INVOKER; |
1 2 3 4 5 6 7 8 9 10 | -- Ejemplo en SQL Estándard con retorno de valores CREATE OR REPLACE FUNCTION mischema.slc_personal_asfiles() RETURNS SETOF mischema.personal_asfiles AS $$ select * from mischema.personal_asfiles; $$ LANGUAGE 'sql' VOLATILE CALLED ON NULL INPUT SECURITY INVOKER; |
Articulos Relacionados:









en
en
en
en
Buenos los temas de postgres pero busco informacion que tu lo indicas de algunos paramentros al crear la funciones como son volatile y cost, no e podido encontrar informacion al respecto a ver si me puedes guiar, por otro lado en otro funcion en contre otra restriccion que tampoco entiendo
BEGIN
PERFORM relname
FROM pg_class
WHERE relname = ‘tbl_session’
AND CASE WHEN has_schema_privilege(relnamespace, ‘USAGE’)
THEN pg_table_is_visible(oid) ELSE false END;