post icon

Funciones en PostgreSQL

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;

Comentarios desde Facebook:

  1. avatar
    jzamb CHILE Internet Explorer Windows
    2 diciembre 2010 at 16:31 #

    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;

Responder