Avanzado
20 min de lecturaFunctions
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 |