Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Funciones en PostgreSQL
Funciones en PL/pgsql
Variables
Estructuras de control
IF
WHILE
FOR
Funciones
Trabajando con tablas
Variables compuestas
SELECT INTO
Bucles en tablas
Funciones
PostgreSQL viene con muchas funciones incorporadas, podemos verlas todas dentro del
psql con el comando \df o examinando la tabla del sistema pg_proc
Funciones en PostgreSQL
Funciones en PL/pgsql
Variables
Estructuras de control
Pero nosotros podemos declarar nuestras propias funciones de acuerdo a las
IF necesidades de nuestra base de datos.
WHILE
FOR
Variables compuestas
SELECT INTO
Bucles en tablas
Funciones
Uno de los lenguajes soportados para programar funciones en PostgreSQL es el
Funciones en PostgreSQL
Funciones en PL/pgsql
PL/pgsql, se desarrolló exclusivamente para él y es muy parecido al PL/SQL de Oracle.
Partes de una función Para poder utilizarlo primero debemos instalarlo en la base de datos que vayamos a
Invocando a una función utilizar:
Variables
SELECT INTO
Nota: En la instalación de PostgreSQL para Windows el lenguaje procedural Pl/pgsql esta
Bucles en tablas
instalado desde el principio, en distribuciones GNU/Linux no.
Funciones
Funciones
Funciones
Como es que se invoca a una función?
Funciones en PostgreSQL
Funciones en PL/pgsql
Dentro una sentencia SELECT:
Partes de una función
Variables
SELECT suma(3, 4);
Estructuras de control
IF suma
WHILE ------
FOR 7
Trabajando con tablas
Variables compuestas
SELECT INTO
Bucles en tablas
Funciones
Como se asigna un valor a una variable?
Funciones en PostgreSQL
Funciones
Funciones
Hagamos la prueba:
Funciones en PostgreSQL
Variables compuestas
SELECT INTO
Bucles en tablas
Funciones
Podemos usar las estructuras de control más comunes disponibles en otros lenguajes de
Funciones en PostgreSQL
Funciones en PL/pgsql
programación:
Partes de una función
WHILE
Adicionalmente tenemos el LOOP (ver documentación), pero no hace nada que las
FOR
SELECT INTO
Bucles en tablas
Funciones
Funciones
Funciones
Funciones
Pero lo que nos interesa es trabajar con los datos de una tabla. Entonces veamos un
Funciones en PostgreSQL
ejemplo más práctico.
Funciones en PL/pgsql
Partes de una función Supongamos que tenemos una tabla ítem que almacena la información de piezas de
Invocando a una función hardware vendidas por una tienda de computadoras.
Variables
SELECT INTO
CONSTRAINT item_id_pk PRIMARY KEY (item_id)
Bucles en tablas
);
Funciones
Queremos que haya un función comprar_item() que haga lo siguiente:
Funciones en PostgreSQL
Funciones en PL/pgsql
1. Cree una tabla nueva llamada item_por_comprar que almacene los datos de los
Partes de una función
IF 2. Busque en la tabla item todos los items que ya no estén en stock y los inserte en
WHILE
la tabla item_por_comprar
FOR
Variables compuestas
3. Nos devuelva la cantidad de items que ya no se encuentran en stock
SELECT INTO
Bucles en tablas
Funciones
Primero creamos una tabla para almacenar los items que ya no hay disponibles en stock,
Funciones en PostgreSQL
la tabla item_por_comprar:
Funciones en PL/pgsql
WHILE
Esta tabla contiene información que solo es importante momentáneamente, no nos
FOR
Bucles en tablas
Funciones
Empezamos a definir la función:
Funciones en PostgreSQL
Variables compuestas
Language 'plpgsql';
SELECT INTO
Bucles en tablas
Declaramos dos variables, cont_item que tendrá el número de items que tengan
cantidad = 0 y fila_item que tendrá como campos, los atributos de la tabla item.
Funciones
Podemos declarar variables compuestas que puedan almacenar los campos de una
Funciones en PostgreSQL
determinada fila de una determinada tabla.
Funciones en PL/pgsql
Variables
Estructuras de control
Indica que la variable fila_item podrá almacenar los campos de cualquier fila de la tabla
IF item.
WHILE Para acceder a los valores de la variable fila_item usamos una notación ya conocida:
FOR
Funciones
Cada vez que vayamos a ejecutar la función borraremos la anterior tabla y crearemos una
nueva con datos actualizados. No nos interesa almacenar la información que se genera
cada vez que ejecutamos la función, solo la información más reciente.
Funciones
Funciones
Podemos asignar un valor a una variable directamente dentro de una consulta SQL
Funciones en PostgreSQL
Funciones en PL/pgsql SELECT COUNT(*) INTO cont_item FROM item WHERE cantidad = 0;
Partes de una función
Estructuras de control
lo tanto en cont_item tendremos un valor correcto.
IF
WHILE
FOR
Variables compuestas
SELECT INTO
Bucles en tablas
Funciones
Definimos un bucle que recorra la tabla temporal que tiene los items con cantidad = 0 y
por cada una insertamos una fila en la tabla item_por_comprar
Funciones
Vimos que podiamos definir un bucle con la sentencia FOR de esta forma:
Funciones en PostgreSQL
Estructuras de control
variable compuesta y en rango una tabla cualquiera (o un subconjunto), la variable
IF compuesta recorrerá toda la tabla tomando los valores de cada una de las filas, si tienen
WHILE los mismos atributos por supuesto.
FOR
Trabajando con tablas FOR fila_item IN SELECT * FROM item WHERE cantidad = 0;
Variables compuestas
SELECT INTO
Bucles en tablas
Funciones
Finalmente retornamos cont_item para saber cuantos items han sido insertados.
Funciones
Probemos insertando algunas filas en la tabla item:
Funciones en PostgreSQL
Funciones en PL/pgsql INSERT INTO item (nombre, tipo, cantidad, precio_compra, precio_venta)
Partes de una función VALUES ('Switch Dlink 8 puertos', 'Switch', 2, 32.5, 45.6);
Invocando a una función INSERT INTO item (nombre, tipo, cantidad, precio_compra, precio_venta)
Variables VALUES ('Dlink 56K', 'Modem', 0, 10.5, 15.5);
Estructuras de control INSERT INTO item (nombre, tipo, cantidad, precio_compra, precio_venta)
IF VALUES ('Samsung 17', 'Monitor', 0, 100.0, 120.0);
WHILE
INSERT INTO item (nombre, tipo, cantidad, precio_compra, precio_venta)
FOR
VALUES ('DDR2 512/533', 'RAM', 15, 40.0, 45.0);
INSERT INTO item (nombre, tipo, cantidad, precio_compra, precio_venta)
VALUES ('NVIDIA GEFORCE FX 5200', 'Tarjeta de Video', 7, 40.0, 48.5);
Trabajando con tablas
Variables compuestas
INSERT INTO item (nombre, tipo, cantidad, precio_compra, precio_venta)
SELECT INTO
VALUES ('Pentium 4 3.2 GHZ 800/2MB', 'Procesador', 7, 200.0, 230.0);
Bucles en tablas
Funciones
Ejecutemos la función:
Funciones en PostgreSQL
WHILE
FOR
Variables compuestas
SELECT INTO
Bucles en tablas
Funciones
Utilicemos la misma tabla item y hagamos una función patrimonio() que nos retorne:
Funciones en PostgreSQL
Funciones en PL/pgsql
El valor total de todos los items disponibles en la tienda.
Partes de una función
Variables
o sea :
Estructuras de control
FOR
Variables compuestas
SELECT INTO
Bucles en tablas
Funciones