En aquest tema, explorarem PL/pgSQL, el llenguatge procedimental natiu de PostgreSQL, així com altres llenguatges procedimentals que es poden utilitzar dins de PostgreSQL. Els llenguatges procedimentals permeten escriure funcions i procediments que poden executar-se dins de la base de dades, proporcionant una gran flexibilitat i potència per a la manipulació de dades i la lògica de negoci.
Continguts
Introducció a PL/pgSQL
PL/pgSQL és un llenguatge procedimental dissenyat per a PostgreSQL que permet escriure funcions i procediments emmagatzemats. Aquest llenguatge és similar a PL/SQL d'Oracle i proporciona estructures de control de flux, variables, i la capacitat de gestionar errors.
Característiques clau de PL/pgSQL:
- Variables i tipus de dades: Permet declarar variables i utilitzar tipus de dades de PostgreSQL.
- Control de flux: Suporta estructures de control com
IF,LOOP,WHILE,FOR, etc. - Gestió d'errors: Proporciona mecanismes per capturar i gestionar errors.
- Integració amb SQL: Permet executar consultes SQL dins de les funcions.
Creació de funcions amb PL/pgSQL
Sintaxi bàsica
CREATE OR REPLACE FUNCTION nom_funció(paràmetres)
RETURNS tipus_de_retorn AS $$
BEGIN
-- Cos de la funció
RETURN valor;
END;
$$ LANGUAGE plpgsql;Exemple pràctic
Creem una funció que calcula el descompte aplicat a un preu:
CREATE OR REPLACE FUNCTION calcular_descompte(preu NUMERIC, descompte NUMERIC)
RETURNS NUMERIC AS $$
BEGIN
RETURN preu - (preu * descompte / 100);
END;
$$ LANGUAGE plpgsql;Explicació del codi
CREATE OR REPLACE FUNCTION: Crea una nova funció o reemplaça una existent.calcular_descompte(preu NUMERIC, descompte NUMERIC): Defineix el nom de la funció i els seus paràmetres.RETURNS NUMERIC: Especifica el tipus de retorn de la funció.BEGIN ... END;: Defineix el cos de la funció.RETURN preu - (preu * descompte / 100);: Calcula el descompte i retorna el resultat.LANGUAGE plpgsql: Especifica que la funció està escrita en PL/pgSQL.
Control de flux en PL/pgSQL
PL/pgSQL proporciona diverses estructures de control de flux per gestionar la lògica dins de les funcions.
Estructura IF
IF condició THEN
-- Codi a executar si la condició és certa
ELSIF altra_condició THEN
-- Codi a executar si l'altra condició és certa
ELSE
-- Codi a executar si cap condició és certa
END IF;Exemple pràctic
CREATE OR REPLACE FUNCTION categoritzar_preu(preu NUMERIC)
RETURNS TEXT AS $$
BEGIN
IF preu < 10 THEN
RETURN 'Barat';
ELSIF preu BETWEEN 10 AND 50 THEN
RETURN 'Mitjà';
ELSE
RETURN 'Car';
END IF;
END;
$$ LANGUAGE plpgsql;Gestió d'errors en PL/pgSQL
PL/pgSQL permet capturar i gestionar errors utilitzant blocs EXCEPTION.
Exemple pràctic
CREATE OR REPLACE FUNCTION dividir(numerador NUMERIC, denominador NUMERIC)
RETURNS NUMERIC AS $$
BEGIN
RETURN numerador / denominador;
EXCEPTION
WHEN division_by_zero THEN
RETURN NULL; -- Retorna NULL si es produeix una divisió per zero
END;
$$ LANGUAGE plpgsql;Altres llenguatges procedimentals
A més de PL/pgSQL, PostgreSQL suporta altres llenguatges procedimentals com PL/Python, PL/Perl, i PL/Tcl. Aquests llenguatges permeten escriure funcions en llenguatges de programació diferents, proporcionant més flexibilitat.
Exemple amb PL/Python
CREATE OR REPLACE FUNCTION sumar(a INTEGER, b INTEGER)
RETURNS INTEGER AS $$
return a + b
$$ LANGUAGE plpythonu;Exercicis pràctics
Exercici 1: Crear una funció per calcular l'IVA
Crea una funció anomenada calcular_iva que prengui un preu i un percentatge d'IVA com a paràmetres i retorni el preu amb l'IVA inclòs.
CREATE OR REPLACE FUNCTION calcular_iva(preu NUMERIC, iva NUMERIC)
RETURNS NUMERIC AS $$
BEGIN
RETURN preu + (preu * iva / 100);
END;
$$ LANGUAGE plpgsql;Exercici 2: Crear una funció per categoritzar edats
Crea una funció anomenada categoritzar_edat que prengui una edat com a paràmetre i retorni una categoria (Infant, Adolescent, Adult, Sènior).
CREATE OR REPLACE FUNCTION categoritzar_edat(edat INTEGER)
RETURNS TEXT AS $$
BEGIN
IF edat < 13 THEN
RETURN 'Infant';
ELSIF edat BETWEEN 13 AND 19 THEN
RETURN 'Adolescent';
ELSIF edat BETWEEN 20 AND 64 THEN
RETURN 'Adult';
ELSE
RETURN 'Sènior';
END IF;
END;
$$ LANGUAGE plpgsql;Conclusió
En aquest tema, hem explorat PL/pgSQL, el llenguatge procedimental natiu de PostgreSQL, i hem vist com crear funcions, utilitzar estructures de control de flux i gestionar errors. També hem introduït altres llenguatges procedimentals com PL/Python. Amb aquests coneixements, pots començar a escriure funcions i procediments més complexos per a les teves aplicacions de bases de dades.
Curs de PostgreSQL
Mòdul 1: Introducció a PostgreSQL
Mòdul 2: Operacions bàsiques de SQL
Mòdul 3: Consultes SQL avançades
Mòdul 4: Disseny de bases de dades i normalització
Mòdul 5: Funcionalitats avançades de PostgreSQL
Mòdul 6: Optimització i millora del rendiment
- Optimització de consultes
- Estratègies d'indexació
- Analitzant el rendiment de les consultes
- Vacuuming i manteniment
Mòdul 7: Seguretat i gestió d'usuaris
- Rols d'usuari i permisos
- Mètodes d'autenticació
- Encriptació de dades
- Còpia de seguretat i restauració
Mòdul 8: Treballant amb JSON i funcionalitats NoSQL
Mòdul 9: Extensions i eines avançades
- PostGIS per a dades geoespacials
- Cerca de text complet
- Wrappers de dades externes
- PL/pgSQL i altres llenguatges procedimentals
