TRIGGER (BASE DE DATOS) Un trigger (o disparador) en una Base de datos , es un procedimiento que se ejecuta cuando se cumple una condición establecida al realizar una operación. Dependiendo de la base de datos, los triggers pueden ser de inserción (INSERT), actualización (UPDATE) o borrado (DELETE). Algunas bases de datos pueden ejecutar triggers al crear, borrar o editar usuarios, tablas, bases de datos u otros objetos CARACTERISTICAS No aceptan parámetros o argumentos (pero podrían almacenar los datos afectados en tablas temporales) No pueden ejecutar las operaciones COMMIT o ROLLBACK por que estas son parte de la sentencia SQL del disparador (únicamente a través de transacciones autónomas) Pueden causar errores de mutaciones en las tablas, si se han escrito de manera deficiente. VENTAJAS Seguridad de los datos mejorada •Ofrecen chequeos de seguridad basada en valores.Integridad de los datos mejorada: •Fuerzan restricciones dinámicas de integridad de datos yde integridad referencial. •Aseguran que las operaciones relacionadas se realizan juntas de forma implícita. •Respuesta instantánea ante un evento auditado •Ofrece un mayor control sobre la B.D DESVANTAJAS •Hay que definir con anticipación la tarea querealizara el trigger •Peligro de pérdida en Reorganizaciones •Hay que programarlos para cada DBMS •Un Trigger nunca se llama directamente .•Los triggers no se desarrollan pensando en unsolo registro, los mismos deben funcionar enconjunto con los datos ya que se disparan por operación y no por registro .•Por funcionalidad, no hay que poner en uno sololas funciones de INSERT,UPDATE y DELETE .•Utilizar moderadamente los triggers .•No se pueden utilizar en tablas temporales. EJEMPLOS DE UN TRIGGER 1. Este es un ejercicio para realizar auditorias almacenando en una tabla los eventos de instrucciones DDL que se realicen en la base de datos: create or replace trigger ddltrigger after ddl on database begin insert into adm values ( ora_login_user, sysdate, ora_sysevent, ora_dict_obj_type, ora_dict_obj_owner, ora_dict_obj_name ); end; / 2. En este ejecicio obtendremos la sumatoria y el promedio de los saldos de los articulos: set serveroutput on; create or replace trigger esta_articulo after insert or delete or update on articulo declare cursor c_estadistico is select codtipo, avg(saldo) promedio,sum(saldo) sumatoria from articulo group by codtipo; begin for v_estadistica in c_estadistico loop update esta_articulo set prom= v_estadistica.promedio, sumatoria=v_estadistica.sumatoria where codtip=v_estadistica.codtipo; if sql%notfound then insert into esta_articulo values(v_estadistica.codtipo,v_estadistica.promedio, v_estadistica.sumatoria); end if; end loop; end; / 3. En este ejercicio trabajamos con los disparadores de sustitucion que trabajan solamente con vistas y la instruccion instead of: create view v_cliente as select codcli,nomcliefrom cliente; set serveroutput on; create or replace trigger v_cliente instead of delete or insert or update on v_cliente for each row begin if deleting then delete from cliente where codcli=:old.codcli; dbms_output.put_line('se borro el registro'); elsif inserting then dbms_output.put_line('se inserto un registro'); else dbms_output.put_line('se actualizo un registro'); end if; end; / PROCEDIMIENTO ALMACENADO Un procedimiento almacenado (stored procedure en inglés) es un programa (o procedimiento) el cual es almacenado físicamente en una base de datos. Su implementación varía de un gestor de bases de datos a otro. La ventaja de un procedimiento almacenado es que al ser ejecutado, en respuesta a una petición de usuario, es ejecutado directamente en el motor de bases de datos, el cual usualmente corre en un servidor separado. Como tal, posee acceso directo a los datos que necesita manipular y sólo necesita enviar sus resultados de regreso al usuario, deshaciéndose de la sobrecarga resultante de comunicar grandes cantidades de datos salientes y entrantes. Los procedimientos pueden ser ventajosos: Cuando una base de datos es manipulada desde muchos programas externos. Al incluir la lógica de la aplicación en la base de datos utilizando procedimientos almacenados, la necesidad de embeber la misma lógica en todos los programas que acceden a los datos es reducida. Esto puede simplificar la creación y, particularmente, el mantenimiento de los programas involucrados