Anda di halaman 1dari 6

Repaso

Laboratorio Informix
A partir del ER, hicimos las tablas de la
base de datos.
Creamos en MySql las base de datos y las
tablas
Stored Procedures Hicimos una aplicación que se comunica
con el motor de la BD y usamos la BD.
Triggers
Nos comunicamos directamente con el
motor de la BD y creamos las tablas

Stored Procedures Ejemplo

Son un conjunto de sentencias SQL y Create procedure Asignar_org (p_uni int,


sentencias SPL (stored procedure p_cong int);
language) agrupadas como un objeto que update congreso
se almacena en la base de datos en las
tablas del sistema set id_universidad = p_uni
Son chequeadas sintácticamente y where id_congreso= p_cong;
optimizadas en el momento de su End procedure;
creación.

Creación de stored
Sql en un Procedimiento procedures

Sentencias SQL solas create procedure <nombre>


(<nombre_par> <tipo>, ...) returning
Aplicación
Pasa las
Motor DB
<tipo>, ..;
Sentencias SQL Las SQL son parseadas,
optimizadas y ejecutadas .......
Sentencias SQL dentro de un procedimiento ...... Cuerpo del procedimiento
Aplicación Motor DB ..
Pasa execute
procedure Las SQL son recuperadas y
end procedure;
ejecutadas

1
Compilación Ejecución

Un sp se compila cuando se ejecuta la Un sp se ejecuta mediante la sentencia


sentencia create procedure execute procedure
Las sentencias son chequeadas sintácticamente y
Se extrae de las tablas de catálogo el código, la lista
optimizadas
de dependencias y los atributos del procedimiento
Se genera una lista de dependencias para el
Se evalúan los parámetros en entrada.
chequeo en ejecución
Se chequea la lista de dependencias para las
Se genera código intermedio binario para la
sentencias dentro del procedimiento, y si lo necesita
rápida ejecución. hace una reoptimización
Se guarda el código, la lista de dependencias e El intérprete ejecuta el procedimiento
información del sp en un tabla del sistema

Ejecución de los stored Ventajas


procedures
Execute procedure <nombre> ( Reducir la complejidad de las aplicaciones
<par_valor>,...); que usan la base de datos
Separar la lógica del programa de la
La salida va ser en forma de tabla, cada interfaz del usuario
columna se corresponde con un valor del Diferentes aplicaciones pueden compartir
retorno, como si hiciéramos un select código
Mejorar la performance

Ventajas Características del SPL

Agregar un nivel extra de seguridad Poseen un lenguaje procedimental que


En un entorno de cliente/servidor no es provee sentencias de loop y condicionales
necesario distribuir código en muchos Así como también el empleo de variables.
clientes. El código es único. Maneja métodos de programación de alto
nivel como son las excepciones

2
Uso de variables Ejemplo

Todas las variables en sp deben ser definidas Create procedure proc1 (var1 int,
Las variables pasadas por parámetro se definen en el var2 char(2))
create procedure
returning int;
Las otras son definidas con la sentencia Define
Define var3 varchar(100);
Todos los tipos de datos excepto serial y blob
pueden ser usados Define var4 like congresos.id_cong;
Se puede usar la cláusula Like para el mismo ....
tipo de dato de una columna de una tabla return var1;
No existen estructuras de datos End Procedure

Asignación Bloque de sentencias

Si una variable no está asignada, se le dá el Create procedure show_var()


valor por defecto returning integer;
Se usa la palabra reservada LET seguida de Define var1 integer;
cualquier expresión sql Let var1=1;
Let a=10; Let b=a+1; Begin Bloque
Let a = (select colA from table1 where colA=10); define var1 integer; Bloque Implícito
Let a = proc_name(); let var1=2; Explícito
Let a = c ||d; End
Return var1;
End procedure; Qué retorna ?

Sentencia IF Loop Foreach

If exists (select id_cong from congresos Es una sentencia que declara y abre un
where id_cong = 1) then cursor.
...
Foreach select id_cong into v_cong
Elif ...
from congresos
Else...
...
End if;
End foreach;
If nombre_universidad matches "A*" then
Foreach execute procedure proc1 (var1,var2)
...
into v_vary
End if;
End foreach;

3
Sentencias de LOOP Otras ...

While ... End While; Permite recursión


For i=1 to n step m ... End for; No tiene límite en el nivel de anidamiento
Se puede salir del For, ForEach y del Permite debugear los procedimientos
While con la sentencia exit Set debug file to "/tmp/traza.txt";
Se puede saltear el resto de las Trace on;Trace var;
sentencias y continuar con la próxima Trace off;
iteración con la sentencia continue Permite el manejo de excepciones

Qué es un Trigger? Triggers


Un trigger es un mecanismo de la base
Triggers de datos para ejecutar
Evento Acción automáticamente una sentencia SQL
cuando ocurre un evento.
INSERT INSERT Una tabla sólo pueden tener trigger de
UPDATE UPDATE INSERT o DELETE, y mas de uno de
DELETE DELETE
UPDATE mientras que las columnas
Tabla asociada Execute procedures intervenientes en el update sean
disjuntas.

Cuándo usar Triggers? Ejecución

Reglas de consistencia (no provistas por La ejecución se realiza cuando una tabla a
el modelo relacional) la que esta asociada el trigger genera un
Replicación de datos evento, ya sea de inserción, eliminación o
Auditoría actualización.
Acciones en cascada Los triggers están almacenados en una
tabla de catálogo del sistema como parte
Autorización de seguridad de la propiedades de la tabla
Son optimizados antes de la ejecución

4
Componentes del create
trigger Eventos del Trigger
Create trigger <nombre> insert on
Create trigger Nombre
<nombre_tabla>
<Evento del trigger> tabla
Create trigger <nombre> delete on
<Accion del Trigger> <nombre_tabla>
<Nombre correlacionado> Create trigger <nombre> update on
<nombre_tabla>
Create trigger <nombre> update of
<nombre_columna> on
<nombre_tabla>

Acciones del Trigger Cláusula Referencing

before (execute procedure proc1(..)) Permite referenciar a los valores de las


Ejecutado antes que las filas sean procesadas columnas dentro de una acción
for each row (execute procedure Referencing new as post old as pre
proc1(..)) Así las columnas pueden referenciarse como
Ejecutado después que cada fila sea procesada Pre.column_name
Prost.column_name
after (execute procedure <proc1(..))
Ejecutado después que todas las filas sean
procesadas

Si un trigger falla Ejemplo de auditoria


-- DROP TRIGGER tu_envios ;
En bases de datos con no logging, no CREATE TRIGGER tu_envios UPDATE on envios
ocurre rollback. referencing old as vieja new as nueva
FOR EACH ROW (
⌧Puede dejar a la base de datos en un estado INSERT INTO log_envios (id_congreso, id_trabajo, fecha, usuario,
inconsistente fecha_act, oper)
VALUES ( nueva.id_congreso,nueva.id_trabajo,
En bases de datos con logging, ocurre un nueva.fecha,User,today,
rollback automático del evento y de la 'U');

acción. );
-- ********** Fin del trigger de Update tu_envios **********

5
Ejemplo Trigger

Queremos modelar la restricción del Create Trigger Ti_Evalua Insert on Evalua


sistema de congresos (que no se puede referencing new as nueva
modelar con ER) de no permitir que un for each row (execute procedure
evaluador sea el que escribió el trabajo. spi_evalua(nueva.id_trabajo,
Vamos a asociarlo al trigger de insert de la
tabla evalua. nueva.id_investigador,
Vamos a hacer un sp que controle esta nueva.id_congreso));
restricción.

Stored Procedure Pasar archivos al servidor

Create procedure spi_evalua (p_idTrabajo like Guardar el archivo con extensión .sql
evalua.id_trabajo,p_idInv like evalua.id_investigador,
p_idCongreso like evalua.id_congreso) Hacer en la máquina local
ftp tulkas
if (select count(*) from escrito where id_investigador =
p_idInv and id_trabajo=p_idTrabajo)) <> 0 then username grupo.., pass ..
raise exception -746,0, "El investigador escribio el poner bin
trabajo"
end if;
put <nombre del archivo>.sql

end procedure;

Anda mungkin juga menyukai