Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Extensiones SQL-
SQL-99
PL/pgSQL
PL/pgSQL Un paso previo a usar PL/pgSQL
PL/pgSQL
Permite crear funciones que se ejecutan en el Cuando se crea una base de datos nueva hace falta
servidor (versus otras aproximaciones como "autorizar" el uso de pl/pgSQL (a menos que template1
ya este autorizada)
JDBC que se ejecutan en el cliente con
"overhead" de comunicaciones). createdb mydatab
La propia base de datos se encarga de createlang plpgsql mydatab
compilar y gestionar estas funciones con lo que En los laboratorios debería estar "autorizado" por
suelen ser eficientes defecto
proporciona:
– variables
– bucles Ojo: no se comprueba la sintaxis de las funciones hasta
que no son ejecutadas. (Es difícil depurar el código)
– evaluación condicional
2005/2006 2005/2006
PL/PGSQL 3 PL/PGSQL 4
PL/pgSQL
PL/pgSQL:: Estructura de las funciones PL/pgSQL
PL/pgSQL estructura
PL/pgSQL presenta una estructura en "Bloques".
CREATE FUNCTION nombre_función (argumentos)
Cada bloque se define usando RETURNS type AS '
DECLARE DECLARE
--variables inicializada con NULL cada vez declaracion; --variables
--que se entra en el bloque [...]
[...] BEGIN
BEGIN statement; --comandos
--comandos; [...]
[...] END;
END; ' LANGUAGE 'plpgsql';
No se pueden definir transacciones dentro de una Una función puede constar de varios bloques y estos
función pueden estar anidados
2005/2006 2005/2006
PL/PGSQL 5 PL/PGSQL 6
PL/pgSQL
PL/pgSQL:: Generalidades
Ejemplo trivial sin pasar parámetros
¿Qué hace esta función?
Los tipos de datos pasados a la función se dan en CREATE OR REPLACE FUNCTION una_funcion () RETURNS
paréntesis int4 AS
El cuerpo de la función se pasa a la base de datos ' DECLARE
como una cadena de caracteres (véase, que el cuerpo an_integer int4; --variables
empieza y acaba con comillas simples) BEGIN
an_integer := 10 * 10; --comandos
Tras la cadena el lenguaje usado para crear la función
RETURN an_integer;
se define usando la orden "LANGUAJE" (otros
END;
lenguajes posibles son PL/PERL, PL/TCL, C, etc)
' LANGUAGE 'plpgsql';
____________________________
select una_funcion();
una_funcion
------------
100
(1 row)
2005/2006 2005/2006
PL/PGSQL 7 PL/PGSQL 8
Tipos de Variables-
Variables-I Tipos de Variables II
Ejemplos de variables: Todos los tipos de variable definidos para SQL son
válidos en PL/pgSQL
id_usuario INTEGER;
cantidad NUMERIC(5); No es imprescindible conocer el tipo de variables de los
url VARCHAR; atributos
– Ejemplos usando %TYPE
-- Mas sobre los tipos siguientes más adelante DECLARE … mivar tabla.salario%TYPE;
micampo mitabla.campo%TYPE; BEGIN … RETURN mivar*2;
mitupla mitabla%ROWTYPE; – %ROWTYPE reserva sitio para toda la tupla
– Reteniendo la estructura de los datos
The general syntax of a variable declaration is: DECLARE … mivar tabla%ROWTYPE;
BEGIN … RETURN mivar.salario*2;
name [ CONSTANT ] type [ NOT NULL ] [ { DEFAULT | :=
} expression ];
2005/2006 2005/2006
PL/PGSQL 9 PL/PGSQL 10
2005/2006 2005/2006
PL/PGSQL 13 PL/PGSQL 14
--SELECT cuenta_letra('A');
2005/2006 2005/2006
PL/PGSQL 21 PL/PGSQL 22