PL/PgSQL
![](http://upload.wikimedia.org/wikipedia/commons/thumb/2/29/Postgresql_elephant.svg/220px-Postgresql_elephant.svg.png)
PL/pgSQL (Procedural Language/PostgreSQL Structured Query Language) es un lenguaje imperativo provisto por el gestor de base de datos PostgreSQL. Permite ejecutar comandos SQL mediante un lenguaje de sentencias imperativas y uso de funciones, dando mucho más control automático que las sentencias SQL básicas.
Desde PL/pgSQL se pueden realizar cálculos complejos y crear nuevos tipos de datos de usuario. Como un verdadero lenguaje de programación, dispone de estructuras de control repetitivas y condicionales, además de la posibilidad de creación de funciones que pueden ser llamadas en sentencias SQL normales o ejecutadas en eventos de tipo disparador (trigger).
Una de las principales ventajas de ejecutar programación en el servidor de base de datos es que las consultas y el resultado no tienen que ser transportadas entre el cliente y el servidor, ya que los datos residen en el propio servidor. Además, el gestor de base de datos puede planificar optimizaciones en la ejecución de la búsqueda y actualización de datos.
Las funciones escritas en PL/pgSQL aceptan argumentos y pueden devolver valores de tipo básico o de tipo complejo (por ejemplo, registros, vectores, conjuntos o incluso tablas), permitiéndose tipificación polimórfica para funciones abstractas o genéricas (referencia a variables de tipo objeto).
Ejemplo de código PL/pgSQL
[editar]CREATE OR REPLACE FUNCTION llamada_no_interesa(integer) RETURNS integer AS ' DECLARE _llamada_id ALIAS FOR $1; _contacto_id integer; BEGIN -- buscar el contacto relacionado SELECT _contacto_id INTO _contacto_id FROM llamadas WHERE id = _llamada_id; -- actualizar atendida en llamadas UPDATE llamadas SET atendida = true WHERE id = _llamada_id; -- actualizar no_interesa en contactos UPDATE contactos SET no_interesado = true WHERE id = _contacto_id; RETURN _contacto_id; END; '
Enlaces externos
[editar]- PL/pgSQL en el manual de PostgreSQL (en inglés)