You are on page 1of 6

Laboratorio Informix

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 Triggers

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

Creacin de stored procedures


create procedure <nombre> (<nombre_par> <tipo>, ...) returning <tipo>, ..; ....... ...... Cuerpo del procedimiento .. end procedure;

Motor DB
Las SQL son parseadas, optimizadas y ejecutadas

Sentencias SQL dentro de un procedimiento Aplicacin


Pasa execute procedure

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

Ejecucin de los stored procedures


Execute procedure <nombre> ( <par_valor>,...); La salida va ser en forma de tabla, cada columna se corresponde con un valor del retorno, como si hiciramos un select

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.

Caractersticas del SPL


Poseen un lenguaje procedimental que provee sentencias de loop y condicionales As como tambin el empleo de variables. Maneja mtodos de programacin de alto nivel como son las excepciones

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

Permite debugear los procedimientos


Set debug file to "/tmp/traza.txt"; Trace on;Trace var; Trace off;

Permite el manejo de excepciones

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.

INSERT UPDATE DELETE Tabla asociada

INSERT UPDATE DELETE Execute procedures

Cundo usar Triggers?


Reglas de consistencia (no provistas por el modelo relacional) Replicacin de datos Auditora Acciones en cascada Autorizacin de seguridad

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

Componentes del create trigger


Create trigger Nombre <Evento del trigger> tabla <Accion del Trigger> <Nombre correlacionado>

Eventos del Trigger


Create trigger <nombre> <nombre_tabla> Create trigger <nombre> <nombre_tabla> Create trigger <nombre> <nombre_tabla> Create trigger <nombre> <nombre_columna> on <nombre_tabla> insert on delete on update on update of

Acciones del Trigger


before (execute procedure proc1(..))
Ejecutado antes que las filas sean procesadas

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

for each row (execute procedure proc1(..))


Ejecutado despus que cada fila sea procesada

after (execute procedure <proc1(..))


Ejecutado despus que todas las filas sean procesadas

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;

Pasar archivos al servidor


Guardar el archivo con extensin .sql Hacer en la mquina local ftp tulkas username grupo.., pass .. poner bin put <nombre del archivo>.sql

You might also like