Está en la página 1de 30

GoBack

PostgreSQL Mdulo 1 - Funciones

Rodrigo Soliz Rocabado (rodrifer@gmail.com)


June 14, 2007

http://www.postgresql.org

PostgreSQL Mdulo 1 Slide 1

Funciones
Funciones en PostgreSQL
Funciones en PL/pgsql
Partes de una funcin
Invocando a una funcin
Variables
Estructuras de control
IF
WHILE
FOR

Funciones

Trabajando con tablas


Variables compuestas
SELECT INTO
Bucles en tablas

http://www.postgresql.org

PostgreSQL Mdulo 1 Slide 2

Funciones en PostgreSQL

Funciones
Funciones en PostgreSQL
Funciones en PL/pgsql
Partes de una funcin
Invocando a una funcin
Variables
Estructuras de control
IF

PostgreSQL viene con muchas funciones incorporadas, podemos verlas todas dentro del
psql con el comando
o examinando la tabla del sistema pg_proc

Pero nosotros podemos declarar nuestras propias funciones de acuerdo a las


necesidades de nuestra base de datos.

WHILE
FOR
Trabajando con tablas
Variables compuestas
SELECT INTO
Bucles en tablas

http://www.postgresql.org

PostgreSQL Mdulo 1 Slide 3

Funciones en PL/pgsql

Funciones
Funciones en PostgreSQL
Funciones en PL/pgsql
Partes de una funcin
Invocando a una funcin

Uno de los lenguajes soportados para programar funciones en PostgreSQL es el


PL/pgsql, se desarroll exclusivamente para l y es muy parecido al PL/SQL de Oracle.
Para poder utilizarlo primero debemos instalarlo en la base de datos que vayamos a
utilizar:

Variables
Estructuras de control

IF
WHILE

o si ya estamos conectados a la base de datos:

FOR
Trabajando con tablas

Variables compuestas
SELECT INTO
Bucles en tablas

http://www.postgresql.org

Nota: En la instalacin de PostgreSQL para Windows el lenguaje procedural Pl/pgsql esta


instalado desde el principio, en distribuciones GNU/Linux no.

PostgreSQL Mdulo 1 Slide 4

Partes de una funcin

Funciones
Funciones en PostgreSQL
Funciones en PL/pgsql
Partes de una funcin
Invocando a una funcin
Variables
Estructuras de control
IF
WHILE
FOR
Trabajando con tablas
Variables compuestas
SELECT INTO
Bucles en tablas

http://www.postgresql.org

PostgreSQL Mdulo 1 Slide 5

Ejemplo

Funciones
Funciones en PostgreSQL
Funciones en PL/pgsql
Partes de una funcin
Invocando a una funcin
Variables
Estructuras de control
IF
WHILE
FOR
Trabajando con tablas
Variables compuestas
SELECT INTO
Bucles en tablas

http://www.postgresql.org

PostgreSQL Mdulo 1 Slide 6

Invocando a una funcin

Funciones

Como es que se invoca a una funcin?

Funciones en PostgreSQL
Funciones en PL/pgsql
Partes de una funcin

Dentro una sentencia SELECT:

Invocando a una funcin


Variables

Estructuras de control
IF
WHILE

FOR
Trabajando con tablas
Variables compuestas
SELECT INTO
Bucles en tablas

http://www.postgresql.org

PostgreSQL Mdulo 1 Slide 7

Variables

Funciones

Como se asigna un valor a una variable?

Funciones en PostgreSQL
Funciones en PL/pgsql

Partes de una funcin

Invocando a una funcin


Variables
Estructuras de control

IF
WHILE
FOR
Trabajando con tablas
Variables compuestas
SELECT INTO
Bucles en tablas

Declarar una variable y asignarle un valor?


El uso de variables es idntico a los lenguajes de programacin que comunmente usamos.

http://www.postgresql.org

PostgreSQL Mdulo 1 Slide 8

Ejemplo (Recursin)

Funciones
Funciones en PostgreSQL
Funciones en PL/pgsql
Partes de una funcin
Invocando a una funcin
Variables
Estructuras de control
IF
WHILE
FOR
Trabajando con tablas
Variables compuestas
SELECT INTO
Bucles en tablas

Asi es, tenemos la posibilidad de utilizar funciones recursivas.

http://www.postgresql.org

PostgreSQL Mdulo 1 Slide 9

Probmoslo

Funciones

Hagamos la prueba:

Funciones en PostgreSQL
Funciones en PL/pgsql

Partes de una funcin


Invocando a una funcin
Variables

Estructuras de control
IF
WHILE
FOR

Recomendacin: dada la denicin de nuestra funcin b, no es recomendable calcular


nmeros muy elevados, si es que no queremos que nuestro servidor se colapse ;-)

Trabajando con tablas


Variables compuestas
SELECT INTO
Bucles en tablas

http://www.postgresql.org

PostgreSQL Mdulo 1 Slide 10

Estructuras de control

Funciones
Funciones en PostgreSQL
Funciones en PL/pgsql

Podemos usar las estructuras de control ms comunes disponibles en otros lenguajes de


programacin:

Partes de una funcin


Invocando a una funcin
Variables
Estructuras de control

IF - THEN - ELSE
FOR
WHILE

IF
WHILE
FOR
Trabajando con tablas

Adicionalmente tenemos el LOOP (ver documentacin), pero no hace nada que las
anteriores no puedan lograr.

Variables compuestas
SELECT INTO
Bucles en tablas

http://www.postgresql.org

PostgreSQL Mdulo 1 Slide 11

IF

Funciones
Funciones en PostgreSQL
Funciones en PL/pgsql
Partes de una funcin
Invocando a una funcin
Variables
Estructuras de control
IF
WHILE
FOR
Trabajando con tablas
Variables compuestas
SELECT INTO
Bucles en tablas

http://www.postgresql.org

PostgreSQL Mdulo 1 Slide 12

WHILE

Funciones
Funciones en PostgreSQL
Funciones en PL/pgsql
Partes de una funcin
Invocando a una funcin
Variables
Estructuras de control
IF
WHILE
FOR
Trabajando con tablas
Variables compuestas
SELECT INTO
Bucles en tablas

http://www.postgresql.org

PostgreSQL Mdulo 1 Slide 13

FOR

Funciones
Funciones en PostgreSQL
Funciones en PL/pgsql
Partes de una funcin
Invocando a una funcin
Variables
Estructuras de control
IF
WHILE
FOR
Trabajando con tablas
Variables compuestas
SELECT INTO
Bucles en tablas

http://www.postgresql.org

PostgreSQL Mdulo 1 Slide 14

Trabajando con tablas

Funciones
Funciones en PostgreSQL
Funciones en PL/pgsql
Partes de una funcin
Invocando a una funcin

Pero lo que nos interesa es trabajar con los datos de una tabla. Entonces veamos un
ejemplo ms prctico.
Supongamos que tenemos una tabla tem que almacena la informacin de piezas de
hardware vendidas por una tienda de computadoras.

Variables

Estructuras de control
IF
WHILE
FOR
Trabajando con tablas
Variables compuestas
SELECT INTO
Bucles en tablas

http://www.postgresql.org

PostgreSQL Mdulo 1 Slide 15

Trabajando con tablas

Funciones

Queremos que haya un funcin comprar_item() que haga lo siguiente:

Funciones en PostgreSQL
Funciones en PL/pgsql
Partes de una funcin
Invocando a una funcin
Variables

1. Cree una tabla nueva llamada item_por_comprar que almacene los datos de los
items que tengan cantidad = 0, o sea los items que hay que renovar para luego
poner a la venta.

Estructuras de control
IF
WHILE

2. Busque en la tabla item todos los items que ya no estn en stock y los inserte en
la tabla item_por_comprar

FOR
Trabajando con tablas
Variables compuestas

3. Nos devuelva la cantidad de items que ya no se encuentran en stock

SELECT INTO
Bucles en tablas

http://www.postgresql.org

PostgreSQL Mdulo 1 Slide 16

Primeros pasos

Funciones
Funciones en PostgreSQL
Funciones en PL/pgsql

Primero creamos una tabla para almacenar los items que ya no hay disponibles en stock,
la tabla item_por_comprar:

Partes de una funcin


Invocando a una funcin
Variables
Estructuras de control

IF
WHILE
FOR
Trabajando con tablas
Variables compuestas

Esta tabla contiene informacin que solo es importante momentneamente, no nos


interesa almacenarla permanentemente en la base de datos, por lo que la
reemplazaremos cada vez que ejecutemos la funcin.

SELECT INTO
Bucles en tablas

http://www.postgresql.org

PostgreSQL Mdulo 1 Slide 17

La funcin

Funciones

Empezamos a denir la funcin:

Funciones en PostgreSQL
Funciones en PL/pgsql
Partes de una funcin
Invocando a una funcin
Variables
Estructuras de control
IF
WHILE
FOR
Trabajando con tablas
Variables compuestas
SELECT INTO
Bucles en tablas

http://www.postgresql.org

Declaramos dos variables, cont_item que tendr el nmero de items que tengan
cantidad = 0 y la_item que tendr como campos, los atributos de la tabla item.

PostgreSQL Mdulo 1 Slide 18

Variables compuestas

Funciones
Funciones en PostgreSQL
Funciones en PL/pgsql
Partes de una funcin
Invocando a una funcin
Variables
Estructuras de control
IF
WHILE

Podemos declarar variables compuestas que puedan almacenar los campos de una
determinada la de una determinada tabla.

Indica que la variable la_item podr almacenar los campos de cualquier la de la tabla
item.
Para acceder a los valores de la variable la_item usamos una notacin ya conocida:

FOR
Trabajando con tablas
Variables compuestas
SELECT INTO

Bucles en tablas

http://www.postgresql.org

PostgreSQL Mdulo 1 Slide 19

Continuamos con la funcin

Funciones
Funciones en PostgreSQL
Funciones en PL/pgsql
Partes de una funcin
Invocando a una funcin
Variables
Estructuras de control
IF
WHILE
FOR
Trabajando con tablas
Variables compuestas
SELECT INTO

Bucles en tablas

Cada vez que vayamos a ejecutar la funcin borraremos la anterior tabla y crearemos una
nueva con datos actualizados. No nos interesa almacenar la informacin que se genera
cada vez que ejecutamos la funcin, solo la informacin ms reciente.

http://www.postgresql.org

PostgreSQL Mdulo 1 Slide 20

Continuamos con la funcin

Funciones
Funciones en PostgreSQL
Funciones en PL/pgsql
Partes de una funcin
Invocando a una funcin
Variables
Estructuras de control
IF
WHILE
FOR
Trabajando con tablas
Variables compuestas
SELECT INTO
Bucles en tablas

Almacenamos en cont_item la cantidad de items que tienen cantidad = 0

http://www.postgresql.org

PostgreSQL Mdulo 1 Slide 21

SELECT INTO

Funciones

Podemos asignar un valor a una variable directamente dentro de una consulta SQL

Funciones en PostgreSQL
Funciones en PL/pgsql

Partes de una funcin


Invocando a una funcin
Variables
Estructuras de control

cont_item es una variable tipo int4 y la consulta tambin devuelve un tipo compatible, por
lo tanto en cont_item tendremos un valor correcto.

IF
WHILE
FOR
Trabajando con tablas
Variables compuestas
SELECT INTO
Bucles en tablas

http://www.postgresql.org

PostgreSQL Mdulo 1 Slide 22

Continuamos con la funcin

Funciones
Funciones en PostgreSQL
Funciones en PL/pgsql
Partes de una funcin
Invocando a una funcin
Variables
Estructuras de control
IF
WHILE
FOR
Trabajando con tablas
Variables compuestas
SELECT INTO
Bucles en tablas

Denimos un bucle que recorra la tabla temporal que tiene los items con cantidad = 0 y
por cada una insertamos una la en la tabla item_por_comprar

http://www.postgresql.org

PostgreSQL Mdulo 1 Slide 23

Bucles en tablas

Funciones

Vimos que podiamos denir un bucle con la sentencia FOR de esta forma:

Funciones en PostgreSQL
Funciones en PL/pgsql

Partes de una funcin


Invocando a una funcin
Variables
Estructuras de control
IF
WHILE

Si trabajamos con variables compuestas y tablas, podemos colocar en variable una


variable compuesta y en rango una tabla cualquiera (o un subconjunto), la variable
compuesta recorrer toda la tabla tomando los valores de cada una de las las, si tienen
los mismos atributos por supuesto.

FOR
Trabajando con tablas

Variables compuestas
SELECT INTO
Bucles en tablas

http://www.postgresql.org

PostgreSQL Mdulo 1 Slide 24

Continuamos con la funcin

Funciones
Funciones en PostgreSQL
Funciones en PL/pgsql
Partes de una funcin
Invocando a una funcin
Variables
Estructuras de control
IF
WHILE
FOR
Trabajando con tablas
Variables compuestas
SELECT INTO
Bucles en tablas

Finalmente retornamos cont_item para saber cuantos items han sido insertados.

http://www.postgresql.org

PostgreSQL Mdulo 1 Slide 25

Probando la funcin

Funciones

Probemos insertando algunas las en la tabla item:

Funciones en PostgreSQL
Funciones en PL/pgsql
Partes de una funcin
Invocando a una funcin
Variables
Estructuras de control
IF
WHILE
FOR
Trabajando con tablas
Variables compuestas
SELECT INTO

Bucles en tablas

http://www.postgresql.org

PostgreSQL Mdulo 1 Slide 26

Probando la funcin

Funciones

Ejecutemos la funcin:

Funciones en PostgreSQL
Funciones en PL/pgsql

Partes de una funcin


Invocando a una funcin

Vemos el contenido de la tabla item_por_comprar:

Variables
Estructuras de control

IF
WHILE
FOR
Trabajando con tablas
Variables compuestas
SELECT INTO
Bucles en tablas

http://www.postgresql.org

PostgreSQL Mdulo 1 Slide 27

Una variante de la funcion anterior

Funciones

Utilicemos la misma tabla item y hagamos una funcin 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 funcin


Invocando a una funcin
Variables

o sea :

Estructuras de control
IF

cantidad x precio_venta (de cada item)

WHILE
FOR
Trabajando con tablas
Variables compuestas
SELECT INTO
Bucles en tablas

http://www.postgresql.org

PostgreSQL Mdulo 1 Slide 28

Una variante de la funcin anterior

Funciones
Funciones en PostgreSQL
Funciones en PL/pgsql
Partes de una funcin
Invocando a una funcin
Variables
Estructuras de control
IF
WHILE
FOR
Trabajando con tablas
Variables compuestas
SELECT INTO
Bucles en tablas

Veamos como el tipo de retorno de la funcion ha cambiado, ya no es int4 sino numeric.

http://www.postgresql.org

PostgreSQL Mdulo 1 Slide 29

También podría gustarte