Documente Academic
Documente Profesional
Documente Cultură
Repaso
A partir del ER, hicimos las tablas de la base de datos. Creamos en MySql las base de datos y las tablas Hicimos una aplicacin que se comunica con el motor de la BD y usamos la BD. Nos comunicamos directamente con el motor de la BD y creamos las tablas
Stored Procedures
Son un conjunto de sentencias SQL y sentencias SPL (stored procedure language) agrupadas como un objeto que se almacena en la base de datos en las tablas del sistema Son chequeadas sintcticamente y optimizadas en el momento de su creacin.
Ejemplo
Create procedure Asignar_org (p_uni int, p_cong int); update congreso set id_universidad = p_uni where id_congreso= p_cong; End procedure;
Sql en un Procedimiento
Sentencias SQL solas Aplicacin
Pasa las Sentencias SQL
Motor DB
Las SQL son parseadas, optimizadas y ejecutadas
Motor DB
Las SQL son recuperadas y ejecutadas
Compilacin
Un sp se compila cuando se ejecuta la sentencia create procedure
Las sentencias son chequeadas sintcticamente y optimizadas Se genera una lista de dependencias para el chequeo en ejecucin Se genera cdigo intermedio binario para la rpida ejecucin. Se guarda el cdigo, la lista de dependencias e informacin del sp en un tabla del sistema
Ejecucin
Un sp se ejecuta mediante la sentencia execute procedure
Se extrae de las tablas de catlogo el cdigo, la lista de dependencias y los atributos del procedimiento Se evalan los parmetros en entrada. Se chequea la lista de dependencias para las sentencias dentro del procedimiento, y si lo necesita hace una reoptimizacin El intrprete ejecuta el procedimiento
Ventajas
Reducir la complejidad de las aplicaciones que usan la base de datos Separar la lgica del programa de la interfaz del usuario Diferentes aplicaciones pueden compartir cdigo Mejorar la performance
Ventajas
Agregar un nivel extra de seguridad En un entorno de cliente/servidor no es necesario distribuir cdigo en muchos clientes. El cdigo es nico.
Uso de variables
Todas las variables en sp deben ser definidas
Las variables pasadas por parmetro se definen en el create procedure Las otras son definidas con la sentencia Define
Ejemplo
Create procedure proc1 (var1 int, var2 char(2)) returning int; Define var3 varchar(100); Define var4 like congresos.id_cong; .... return var1; End Procedure
Todos los tipos de datos excepto serial y blob pueden ser usados Se puede usar la clusula Like para el mismo tipo de dato de una columna de una tabla No existen estructuras de datos
Asignacin
Si una variable no est asignada, se le d el valor por defecto Se usa la palabra reservada LET seguida de cualquier expresin sql
Let Let Let Let a=10; Let b=a+1; a = (select colA from table1 where colA=10); a = proc_name(); a = c ||d;
Bloque de sentencias
Create procedure show_var() returning integer; Define var1 integer; Let var1=1; Begin define var1 integer; Bloque Explcito let var1=2; End Return var1; End procedure;
Bloque Implcito
Qu retorna ?
Sentencia IF
If exists (select id_cong from congresos where id_cong = 1) then ... Elif ... Else... End if; If nombre_universidad matches "A*" then ... End if;
Loop Foreach
Es una sentencia que declara y abre un cursor.
Foreach select id_cong into v_cong from congresos ... End foreach; Foreach execute procedure proc1 (var1,var2) into v_vary End foreach;
Sentencias de LOOP
While ... End While; For i=1 to n step m ... End for; Se puede salir del For, ForEach y del While con la sentencia exit Se puede saltear el resto de las sentencias y continuar con la prxima iteracin con la sentencia continue
Otras ...
Permite recursin
No tiene lmite en el nivel de anidamiento
Qu es un Trigger?
Triggers Evento Accin
Triggers
Un trigger es un mecanismo de la base de datos para ejecutar automticamente una sentencia SQL cuando ocurre un evento. Una tabla slo pueden tener trigger de INSERT o DELETE, y mas de uno de UPDATE mientras que las columnas intervenientes en el update sean disjuntas.
Ejecucin
La ejecucin se realiza cuando una tabla a la que esta asociada el trigger genera un evento, ya sea de insercin, eliminacin o actualizacin. Los triggers estn almacenados en una tabla de catlogo del sistema como parte de la propiedades de la tabla Son optimizados antes de la ejecucin
Clusula Referencing
Permite referenciar a los valores de las columnas dentro de una accin
Referencing new as post old as pre As las columnas pueden referenciarse como Pre.column_name Prost.column_name
Si un trigger falla
En bases de datos con no logging, no ocurre rollback.
Puede dejar a la base de datos en un estado inconsistente
Ejemplo de auditoria
-- DROP TRIGGER tu_envios ; CREATE TRIGGER tu_envios UPDATE on envios referencing old as vieja new as nueva FOR EACH ROW ( INSERT INTO log_envios (id_congreso, id_trabajo, fecha, usuario, fecha_act, oper) VALUES ( nueva.id_congreso,nueva.id_trabajo, nueva.fecha,User,today, 'U'); ); -- ********** Fin del trigger de Update tu_envios **********
En bases de datos con logging, ocurre un rollback automtico del evento y de la accin.
Ejemplo
Queremos modelar la restriccin del sistema de congresos (que no se puede modelar con ER) de no permitir que un evaluador sea el que escribi el trabajo.
Vamos a asociarlo al trigger de insert de la tabla evalua. Vamos a hacer un sp que controle esta restriccin.
Trigger
Create Trigger Ti_Evalua Insert on Evalua referencing new as nueva for each row (execute procedure spi_evalua(nueva.id_trabajo, nueva.id_investigador, nueva.id_congreso));
Stored Procedure
Create procedure spi_evalua (p_idTrabajo like evalua.id_trabajo,p_idInv like evalua.id_investigador, p_idCongreso like evalua.id_congreso) if (select count(*) from escrito where id_investigador = p_idInv and id_trabajo=p_idTrabajo)) <> 0 then raise exception -746,0, "El investigador escribio el trabajo" end if; end procedure;