Laboratorio 8 Profesora: Andrea Rodrı́guez Ayudante: Daniel Campos Bases de Datos I Universidad de Concepción 19 de octubre de 2012 PL/SQL - Functions CREATE OR REPLACE FUNCTION nombrefuncion(param, ...) RETURNS tiporetorno AS $$ DECLARE variable1; variable2; BEGIN sentencia; -- Linea de comentario sentencia; /*Bloque de comentarios*/ RETURN retorno; END; $$ Language ’plpgsql’; [Ciclos] While WHILE (condicion) LOOP ... sentencia; ... END LOOP; For FOR cont IN 1 .. 10 LOOP ... sentencia; ... END LOOP; PL/SQL - Triggers Los triggers son funciones que se ejecutan de forma automática en respuesta a ciertos eventos (insert, update, delete). CREATE OR REPLACE FUNCTION nombrefuncion(param, ...) RETURNS trigger AS $$ DECLARE variable1; variable2; BEGIN sentencia; -- Linea de comentario sentencia; /*Bloque de comentarios*/ RETURN retorno; END; $$ Language ’plpgsql’; PL/SQL - Triggers [2] CREATE OR REPLACE TRIGGER nombretrigger [AFTER|BEFORE] [INSERT|UPDATE|DELETE] ON nombretabla FOR EACH [ROW | STATEMENT] EXECUTE PROCEDURE nombrefuncion; PL/SQL - Triggers - Ejemplo [Variables] Postgres I current user: usuario que actualmente está accediendo a la base de datos I current date: fecha actual I current time: hora actual Triggers I NEW: almacena los nuevos valores de la tupla que se está modificando I OLD: almacena los antiguos valores de la tupla que se está modificando I TG OP: Tipo de evento que esta ocurriendo (insert, update o delete) p I TG ARGV: Parámetros de la función del TRIGGER (TG ARGV[0], ... ) Ejercicio Se desea que las etiquetas asociadas a un mensaje sean ingresadas automaticamente, si es que estas etiquetas no existen en la base de datos. Ejercicio - Respuesta CREATE OR REPLACE FUNCTION insertar_etiqueta() RETURNS trigger AS $$ BEGIN IF (TG_OP = ’INSERT’) THEN IF( (SELECT nombre FROM etiqueta WHERE NEW.etiqueta = nombre) IS NULL ) THEN INSERT INTO etiqueta VALUES (NEW.etiqueta); RETURN NEW; END IF; END IF; RETURN NEW; END; $$ Language ’plpgsql’; Ejercicio - Respuesta [2] CREATE TRIGGER insertar_etiqueta_mensaje BEFORE INSERT ON etiqueta_mensaje FOR EACH ROW EXECUTE PROCEDURE insertar_etiqueta(); Ejercicio Se desea mantener un registro de los mensajes eliminados por los usuarios. PHP - Introducción I Se puede incluir codigo PHP dentro de HTML usando las etiquetas <?php ... ?> I Las variables no tienen tipo declarado, se le asigna cuando se le asigna un valor y son nombradas con un $ PHP - Introducción [2] Funciones de Postgres I pg connect: Permite establecer una conexión con la base de datos. I pg query: Ejecuta una consulta de cualquier tipo en la base de datos ( insert, update o delete). I pg close: Cierra la conexión con la base de datos. I pg fetch array: Convierte cada fila devuelta por una consulta en un Array. I pg fetch assoc: Convierte cada fila devuelta por una consulta en una Array Asociativo. PHP - Introducción [3] <?php $conexion = pg_connect("host=plop.inf.udec.cl port=5432 dbname=BDIG15 user=bdg15 password=bdg1515") $resultado = pg_query($conexion, "SELECT .... "); while ( $fila = mysql_fetch_array($resultado) ) { echo .... ; } pg_close($conexion); ?> Referencias Manual de PostgreSQL http://www.postgresql.org/docs/9.1/static/ Manual de PHP sobre PostgreSQL http://www.php.net/manual/en/ref.pgsql.php