Saltar al contenido principal
Avanzado
20 min de lectura

Functions

Funciones definidas por el usuario en PostgreSQL

Las funciones en PostgreSQL permiten encapsular lógica reutilizable que devuelve un valor.

Tipos de funciones

#

Función escalar

sql
1CREATE OR REPLACE FUNCTION calcular_iva(precio DECIMAL)2RETURNS DECIMAL3LANGUAGE plpgsql4AS $$5BEGIN6    RETURN precio * 1.21;7END;8$$;9 10-- Uso11SELECT nombre, precio, calcular_iva(precio) as precio_con_iva12FROM productos;

#

Función con tabla

sql
1CREATE OR REPLACE FUNCTION obtener_usuarios_activos()2RETURNS TABLE(id INT, nombre TEXT, email TEXT)3LANGUAGE plpgsql4AS $$5BEGIN6    RETURN QUERY7    SELECT u.id, u.nombre, u.email8    FROM usuarios u9    WHERE u.activo = true;10END;11$$;12 13-- Uso14SELECT * FROM obtener_usuarios_activos();

#

Función con INOUT

sql
1CREATE OR REPLACE FUNCTION intercambiar(INOUT a INT, INOUT b INT)2LANGUAGE plpgsql3AS $$4BEGIN5    -- Intercambia valores6    SELECT b, a INTO a, b;7END;8$$;

Sintaxis

Sintaxis
sql
1CREATE [OR REPLACE] FUNCTION nombre(parámetros)2RETURNS tipo_retorno3LANGUAGE plpgsql4AS $$5BEGIN6    -- lógica7    RETURN valor;8END;9$$;

Ejemplos

Función de utilidad

Calcular edad a partir de fecha de nacimiento

Ejemplo
sql
1CREATE OR REPLACE FUNCTION calcular_edad(fecha_nac DATE)2RETURNS INT3LANGUAGE plpgsql4AS $$5BEGIN6    RETURN EXTRACT(YEAR FROM AGE(fecha_nac))::INT;7END;8$$;9 10SELECT nombre, calcular_edad(fecha_nacimiento) as edad11FROM usuarios;

Resultado:

| nombre | edad |
|--------|------|
| Ana    | 28   |
| Carlos | 35   |