SlideShare a Scribd company logo
1 of 27
Download to read offline
Bases de Datos



                  Unidad


             El Lenguaje PL/SQL
                  (Triggers)




            2011  Erwin Fischer   2
Disparadores (Triggers)
• Un triggers define una acción que la BD debe realizar
  cuando tenga lugar un determinado suceso en la
  aplicación
• Un trigger, al igual que una función o procedimiento es
  un objeto de la base de datos.
• En la práctica es un procedimiento almacenado, pero de
  uso interno al DBMS, por lo cual no usa parámetros.
• Se asocian a tablas y operaciones de modificación
  básicas sobre ellas (Insert, Delete, Update).
• Se ejecuta automáticamente cuando alguna de estas
  operaciones básicas sucede, antes que la modificación
  se haga permanente en la base de datos.
• Puede incorporar cualquier tipo o agrupación de
  sentencias SQL, al igual que un procedimiento
  almacenado.



                        2011  Erwin Fischer                3
Disparadores (Triggers)
• Los triggers pueden utilizarse para imponer ciertas restricciones
  de integridad referencial, para imponer reglas de negocios
  complejas, o para auditar los cambios en los datos
• Los triggers se basan en el modelo ECA (Event-Condition-Action,
  evento-condición-acción)
• El Evento que dispara la regla especificada, en Oracle puede ser:
     • Una instrucción INSERT, UPDATE, DELETE
     • Una instrucción CREATE, ALTER o DROP
     • Un arranque de la BD o detención de la instancia
     • Un inicio o fin de sesión por parte del usuario
     • Un mensaje de Error
• La Condición que determina si la acción que debe
  ejecutarse. Es opcional, pero si se especifica, la acción
  se ejecutará si la condición se evalúa como verdadera
• La Acción que hay que llevar a cabo. Este bloque
  contiene el código y las instrucciones SQL que se
  ejecutan cuando se produce el evento y la condición es
  verdadera
                          2011  Erwin Fischer                        4
ECA-Rules (Event-Condition-Action rules)

• Una vez que un set de reglas ha sido definidas el
  ADBMS monitorea los eventos relevantes. Un evento
  relevante es aquel que tiene definida alguna regla.

• Cada vez que el ADBMS detecta la ocurrencia de un
  evento relevante, notifica al componente encargado de
  la ejecución de la regla asociada. Esta notificación se
  denomina “event signalling” o señalización de eventos.

• En consecuencia, todas las reglas definidas para
  responder a dicho evento se “disparan” (trigger), y
  deben ser ejecutadas.

• La ejecución de reglas incorpora la evaluación de
  condiciones, y si dichas condiciones satisfacen, se
  ejecuta la acción.


                         2011  Erwin Fischer               5
Disparadores (Triggers)
Aquí se presenta la sintaxis para crear un disparador en Oracle (que se
diferencia levemente de la sintaxis estándar de SQL):

CREATE [OR REPLACE] TRIGGER <trigger_name>
 {BEFORE|AFTER} {INSERT|DELETE|UPDATE} ON <table_name>
 [REFERENCING [NEW AS <new_row_name>] [OLD AS <old_row_name>]]
 [FOR EACH ROW [WHEN (<trigger_condition>)]]
<trigger_body>

Se puede usar solamente TRIGGERS BEFORE o AFTER para tablas INSTEAD
OF triggers son utilizados para vistas (típicamente para vistas de
actualización)

Se puede especificar hasta tres disparadores de eventos usando la palabra
clave OR.
... INSERT ON R ...
... INSERT OR DELETE OR UPDATE ON R ...
... UPDATE OF A, B OR INSERT ON R ...
                           2011  Erwin Fischer                             6
Disparadores (Triggers)
Se muestra la sintaxis de Oracle para crear triggers a través de un
  ejemplo basado en las dos tablas siguientes:

CREATE TABLE T4 (a INTEGER, b CHAR(10));
CREATE TABLE T5 (c CHAR(10), d INTEGER);

CREATE TRIGGER trig1
AFTER INSERT ON T4
REFERENCING NEW AS newRow
FOR EACH ROW
WHEN (newRow.a <= 10)
 BEGIN
  INSERT INTO T5 VALUES(:newRow.b, :newRow.a);
 END trig1;




                          2011  Erwin Fischer                        7
Disparadores (Triggers)
CREATE TRIGGER TopeDeManejoPropiedadEmpleado
BEFORE INSERT OR UPDATE ON Propiedad
FOR EACH ROW
DECLARE
 vcontP NUMBER;
BEGIN
  SELECT COUNT(*) INTO vcontP
  FROM Propiedad
  WHERE numEmpleado = new.numEmpleado;
  IF vcontP = 100
        Raise_application_error(-2000, („Empleado „||
        new.numEmpleado|| „ ya administra 100 propiedades‟);
  END IF
END




                       2011  Erwin Fischer                    8
Disparadores (Triggers)
create table Person (age int);

CREATE TRIGGER PersonCheckAge
  AFTER INSERT OR UPDATE OF age ON Person
  FOR EACH ROW
  BEGIN
     IF (:new.age < 0) THEN
      RAISE_APPLICATION_ERROR(-20000, 'no negative age
  allowed');
     END IF;
  END;
  .
  RUN;

Si intentamos ejecutar la inserción:

insert into Person values (-3);
                          2011  Erwin Fischer           9
Create Sequence

 • Es un objeto de base de datos
 • Se utiliza para crear
   una secuencia, para
   generar enteros únicos.
 • Por ejemplo se puede
   utilizar secuencias para generar
   automáticamente valores de clave
   principal.


              2011  Erwin Fischer    10
Create Sequence un ejemplo

 CREATE SEQUENCE seqCliente
 START WITH 1000
 INCREMENT BY 1
 NOCACHE
 NOCYCLE;

 La primera referencia a seqCliente.nextval retorna 1000. la
 segunda retorna 1001.
 Cada consulta posterior devolverá un valor mayor en 1 que
 la referencia anterior.


                       2011  Erwin Fischer                    11
Un Trigger con Sequence

 • Supongamos que tenemos la
   siguiente tabla cliente
   Create table Cliente(
   idCliente number,
   Nombre     varchar2(30)
   )
 • utilizando la secuencia
   seqCliente, podemos crear el
   siguiente trigger.

              2011  Erwin Fischer   12
El trigger


Create or Replace trigger trClienteId
Before insert on Cliente
for each row
begin
 Select seqCliente.nextval into :new.idCliente
 from dual;
end;




                 2011  Erwin Fischer            13
Insertando registros



 • Luego para insertar un registro en
   la tabla cliente, bastaría hacer el
   siguiente insert:
   insert into Cliente (nombre)
   Values (‘Juan Perez’)

   – Observe que no hemos insertado el
     atributo idCliente

               2011  Erwin Fischer      14
Consultando Cliente



 • Si consultamos la tabla cliente
   Select * from Cliente




   Vemos que se ha insertado el Idcliente 1000

                    2011  Erwin Fischer         15
Predicados
 • Dentro de un trigger se pueden utilizar
   predicados, que retornan valores booleanos,
   para identificar la acción que esta realizando
 • Inserting: Devuelve verdadero si la
   instrucción que disparó el trigger fue un
   «Insert»
 • Updating: Devuelve verdadero si la
   instrucción que disparó el trigger fue un
   «Update»
 • Deleting: Devuelve verdadero si la
   instrucción que disparó el trigger fue un
   «Delete»

                   2011  Erwin Fischer             16
Trigger con predicado

 Create or Replace trigger trClienteId
 Before insert on Cliente
 for each row
 begin
  if inserting then
   Select seqCliente.nextval into :new.idCliente
  from dual;
  else
   :new.idCliente = 0;
  end if;
 End trClienteId;

                     2011  Erwin Fischer          17
• Ahora tomar en cuenta que el
  siguiente insert obtiene el mismo
  resultado del trigger, pero sin
  activar el trigger.
• Desactivando el trigger
 Alter trigger trClienteId disable;


  insert into Cliente
  Values (seqCliente.nextval, ‘Juan
   Perez’)
              2011  Erwin Fischer    18
Consultando cliente
nuevamente
INSERT   into Cliente Values (seqCliente.nextval, ‘Juan Perez’)



   • Select * from Cliente




                         2011  Erwin Fischer                     19
Disparadores (Triggers)
Exhibiendo errores de la definición del disparador

Como para los procedimientos PL/SQL si obtiene un mensaje de
  error en la creación del triggers, puede ver el error con:

show errors trigger <trigger_name>;

Alternativamente se puede usar,

SHO ERR (short for SHOW ERRORS)


Notar que los números de líneas reportados no son exactos.




                         2011  Erwin Fischer                  20
Disparadores (Triggers)

Para ver una lista de los triggers definidos usar:

select trigger_name
from user_triggers;

Para mas detalles de un trigger en particular:

select trigger_type, triggering_event, table_name,
  referencing_names, trigger_body
from user_triggers
where trigger_name = '<trigger_name>';



                   2011  Erwin Fischer              21
Eliminación y desactivación de Triggers
• Para eliminar un trigger se utiliza:
   Drop trigger «nombre_trigger»;
• Para desactivar un trigger se utiliza
   Alter trigger «nombre_trigger» disable;
• Para activar un trigger se utiliza
   Alter trigger «nombre_trigger» enable;
• Para activar todos los trigger de una tabla se
  utiliza
   Alter table «nombre_tabla» enable all
     triggers;


                     2011  Erwin Fischer          22
Triggers

                                                     Autor
Ejercicio (eliminación en cascada)                IdAutor


Cree un trigger que cada vez que se elimine
un autor, elimine todos los registros de
libros asociados a ese autor
                                                     Libro
                                                  IdLibro
                                                  IdAutor




                           2011  Erwin Fischer              23
Triggers
                                                                         Compra

Ejercicio 1
                                                                      IdCompra
                                                                      Fecha


•   Para un sistema de Administración de
    stock en Bodega, se requiere
    implementar la siguiente funcionalidad                             DetalleCompra
                                                        Producto
    activa a través de Triggers:                     IdProducto       IdCompra
                                                     NombreProducto   IdProducto
                                                     StockActual      Cantidad
    Cada vez que se agregue un registro de
    detalle de compra, se deberá actualizar
    en forma automática la existencia en
    Stock actual.

Evento: DetalleCompra.Insert
Condición: -
Acción: Producto.Update(StockActual)




                              2011  Erwin Fischer                                     24
Triggers
                                                                         Compra
                                                                      IdCompra
Ejercicio 2                                                           Fecha



•    Ampliar el Sistema, agregando registro
     de mermas (pérdidas)
                                                                      DetalleCompra
                                                        Producto
                                                     IdProducto       IdCompra
     Cada vez que se registre una merma,             NombreProducto
                                                                      IdProducto
                                                                      Cantidad
     se deberá actualizar en forma
                                                     StockActual

     automática la existencia en Stock
     actual.
                                                         Merma
                                                     IdMerma
Evento: Merma.Insert                                 Fecha
Condición: -                                         IdProducto
                                                     Cantidad
Acción: Producto.Update(StockActual)




                              2011  Erwin Fischer                                    25
Triggers
                                                                          Cliente
                                                                       IdCliente
Ejercicio 3

•   Autómata de Giro Bancario

    Cada vez que un cliente quiere hacer un             LineaCredito      Cuenta
                                                                       IdCuenta
    giro, el sistema deberá verificar que su           IdLinea
                                                                       IdCliente
                                                       IdCuenta
    saldo de cuenta corriente o en su defecto su       Saldo           Saldo
    cupo de línea de crédito sea suficiente para
    cubrir la operación.
    Si la suma del saldo disponible en la cuenta
    y el saldo de la línea no logra cubrir, se            UsoLinea           Giro
                                                                        IdGiro
    deberá anular la transacción, en caso               IdUso
                                                                        IdCuenta
                                                        IdLinea
    contrario, se deberá registrar el nuevo saldo       Fecha           Fecha
    y/o nuevo cupo de línea de crédito y detalle        Monto           Monto

    de la utilización de la línea.

Solución:   TAREA, grupal y publicar en su blog


                                2011  Erwin Fischer                                26
Investigar o Identificar Triggers

• Con su grupo de trabajo, identifique las situaciones en
  que seria deseable algún tipo de funcionalidad activa o
  autonomía.

• Para cada uno de ellos defina el evento, condición y
  acción.

• Publique en su blog, las situaciones y el o los triggers
  asociados que resuelven dicha situación.




                          2011  Erwin Fischer               27
Unidad - PL/SQL - Triggers



 • Si tiene una sugerencia, comentario
   u observación para mejorar este
   material, agradecería me envíe un
   mail a erfisch@gmail.com.

 Atentamente
 Profesor Erwin Fischer

               2011  Erwin Fischer      28

More Related Content

What's hot

Triggers o disparadores
Triggers o disparadoresTriggers o disparadores
Triggers o disparadoresPablo Jose
 
Métricas de calidad de software
Métricas de calidad de softwareMétricas de calidad de software
Métricas de calidad de softwaredaners08
 
Tipos de prueba de software
Tipos de prueba de softwareTipos de prueba de software
Tipos de prueba de softwareTensor
 
Cuadro comparativo algoritmos de busqueda
Cuadro comparativo algoritmos de busquedaCuadro comparativo algoritmos de busqueda
Cuadro comparativo algoritmos de busquedaCristopher Morales Ruiz
 
Tópicos Avanzados de Programación - Unidad 3 programacion concurrente
Tópicos Avanzados de Programación - Unidad 3 programacion concurrenteTópicos Avanzados de Programación - Unidad 3 programacion concurrente
Tópicos Avanzados de Programación - Unidad 3 programacion concurrenteJosé Antonio Sandoval Acosta
 
calidad de los sistemas de informacion
calidad de los sistemas de informacioncalidad de los sistemas de informacion
calidad de los sistemas de informacionErika Vazquez
 
Comandos ddl y dml
Comandos ddl y dmlComandos ddl y dml
Comandos ddl y dmlGerardo
 
Creación de tablas y relaciones en mysql workbench
Creación de tablas y relaciones en mysql workbenchCreación de tablas y relaciones en mysql workbench
Creación de tablas y relaciones en mysql workbenchJair Ospino Ardila
 
3. algoritmos de ordenamiento interno
3. algoritmos de ordenamiento interno3. algoritmos de ordenamiento interno
3. algoritmos de ordenamiento internoFernando Solis
 
GUI Salario en java con NetBeans
GUI Salario en java con NetBeansGUI Salario en java con NetBeans
GUI Salario en java con NetBeansEmerson Garay
 

What's hot (20)

Triggers o disparadores
Triggers o disparadoresTriggers o disparadores
Triggers o disparadores
 
TRIGGERS O DISPARADORES
TRIGGERS O DISPARADORESTRIGGERS O DISPARADORES
TRIGGERS O DISPARADORES
 
Colecciones en Python
Colecciones en PythonColecciones en Python
Colecciones en Python
 
Ejemplo de Trigger en Mysql
Ejemplo de Trigger en MysqlEjemplo de Trigger en Mysql
Ejemplo de Trigger en Mysql
 
Métricas de calidad de software
Métricas de calidad de softwareMétricas de calidad de software
Métricas de calidad de software
 
Tipos de prueba de software
Tipos de prueba de softwareTipos de prueba de software
Tipos de prueba de software
 
proceso unificado de desarrollo
proceso unificado de desarrollo proceso unificado de desarrollo
proceso unificado de desarrollo
 
Trigger Data Base
Trigger Data BaseTrigger Data Base
Trigger Data Base
 
Cuadro comparativo algoritmos de busqueda
Cuadro comparativo algoritmos de busquedaCuadro comparativo algoritmos de busqueda
Cuadro comparativo algoritmos de busqueda
 
Taller de Base de Datos - Unidad 6 SQL procedural
Taller de Base de Datos - Unidad 6 SQL proceduralTaller de Base de Datos - Unidad 6 SQL procedural
Taller de Base de Datos - Unidad 6 SQL procedural
 
Tópicos Avanzados de Programación - Unidad 3 programacion concurrente
Tópicos Avanzados de Programación - Unidad 3 programacion concurrenteTópicos Avanzados de Programación - Unidad 3 programacion concurrente
Tópicos Avanzados de Programación - Unidad 3 programacion concurrente
 
Metodologia estructurada
Metodologia estructuradaMetodologia estructurada
Metodologia estructurada
 
calidad de los sistemas de informacion
calidad de los sistemas de informacioncalidad de los sistemas de informacion
calidad de los sistemas de informacion
 
Comandos ddl y dml
Comandos ddl y dmlComandos ddl y dml
Comandos ddl y dml
 
Creación de tablas y relaciones en mysql workbench
Creación de tablas y relaciones en mysql workbenchCreación de tablas y relaciones en mysql workbench
Creación de tablas y relaciones en mysql workbench
 
3. algoritmos de ordenamiento interno
3. algoritmos de ordenamiento interno3. algoritmos de ordenamiento interno
3. algoritmos de ordenamiento interno
 
GUI Salario en java con NetBeans
GUI Salario en java con NetBeansGUI Salario en java con NetBeans
GUI Salario en java con NetBeans
 
TRIGGERS
TRIGGERSTRIGGERS
TRIGGERS
 
Prueba software orientado a objetos
Prueba software orientado a objetosPrueba software orientado a objetos
Prueba software orientado a objetos
 
Calidad de software
Calidad de softwareCalidad de software
Calidad de software
 

Viewers also liked

Sesión12 - Trigger (Oracle)
Sesión12 - Trigger (Oracle)Sesión12 - Trigger (Oracle)
Sesión12 - Trigger (Oracle)José Toro
 
Commit&rollback
Commit&rollbackCommit&rollback
Commit&rollbackArchCHUZ
 
Disparadores Trigger En Sql Y My Sql
Disparadores Trigger En Sql Y My SqlDisparadores Trigger En Sql Y My Sql
Disparadores Trigger En Sql Y My Sqlyareli
 
Programación MySQL-Ejercicios
Programación MySQL-EjerciciosProgramación MySQL-Ejercicios
Programación MySQL-Ejerciciostestgrupocomex
 
My sql para principiantes
My sql para principiantesMy sql para principiantes
My sql para principiantesMichelle Torres
 
Integridad Y Seguridad En Las Bases De Datos
Integridad Y Seguridad En Las Bases De DatosIntegridad Y Seguridad En Las Bases De Datos
Integridad Y Seguridad En Las Bases De DatosDrakonis11
 
Triggers
TriggersTriggers
Triggersbdatos
 
La formulacion de un problema en un Proyecto de Investigacion
 La formulacion de un problema en un Proyecto de Investigacion La formulacion de un problema en un Proyecto de Investigacion
La formulacion de un problema en un Proyecto de Investigacioncarmencordones2013
 
La pregunta de investigación
La pregunta de investigaciónLa pregunta de investigación
La pregunta de investigaciónCarlos Crespo
 

Viewers also liked (12)

Sesión12 - Trigger (Oracle)
Sesión12 - Trigger (Oracle)Sesión12 - Trigger (Oracle)
Sesión12 - Trigger (Oracle)
 
Commit&rollback
Commit&rollbackCommit&rollback
Commit&rollback
 
Oracle Database Trigger
Oracle Database TriggerOracle Database Trigger
Oracle Database Trigger
 
Disparadores Trigger En Sql Y My Sql
Disparadores Trigger En Sql Y My SqlDisparadores Trigger En Sql Y My Sql
Disparadores Trigger En Sql Y My Sql
 
Trigger
TriggerTrigger
Trigger
 
Programación MySQL-Ejercicios
Programación MySQL-EjerciciosProgramación MySQL-Ejercicios
Programación MySQL-Ejercicios
 
Introducción a la investigación en Ingeniería
Introducción a la investigación en IngenieríaIntroducción a la investigación en Ingeniería
Introducción a la investigación en Ingeniería
 
My sql para principiantes
My sql para principiantesMy sql para principiantes
My sql para principiantes
 
Integridad Y Seguridad En Las Bases De Datos
Integridad Y Seguridad En Las Bases De DatosIntegridad Y Seguridad En Las Bases De Datos
Integridad Y Seguridad En Las Bases De Datos
 
Triggers
TriggersTriggers
Triggers
 
La formulacion de un problema en un Proyecto de Investigacion
 La formulacion de un problema en un Proyecto de Investigacion La formulacion de un problema en un Proyecto de Investigacion
La formulacion de un problema en un Proyecto de Investigacion
 
La pregunta de investigación
La pregunta de investigaciónLa pregunta de investigación
La pregunta de investigación
 

Similar to Triggers (20)

Semana 12 y 13 subprogramas triggers
Semana 12 y 13 subprogramas triggersSemana 12 y 13 subprogramas triggers
Semana 12 y 13 subprogramas triggers
 
Tutorial disparadores
Tutorial disparadoresTutorial disparadores
Tutorial disparadores
 
Triggers
TriggersTriggers
Triggers
 
CREACION DE TRIGGERS.pptx
CREACION DE TRIGGERS.pptxCREACION DE TRIGGERS.pptx
CREACION DE TRIGGERS.pptx
 
database trig
database trigdatabase trig
database trig
 
Procedimientos y excepciones
Procedimientos y excepcionesProcedimientos y excepciones
Procedimientos y excepciones
 
Trigger activadores
Trigger activadoresTrigger activadores
Trigger activadores
 
Dbd triggers
Dbd triggersDbd triggers
Dbd triggers
 
Bd L8 Eq9 Pre Rosa Triggers
Bd L8 Eq9 Pre Rosa TriggersBd L8 Eq9 Pre Rosa Triggers
Bd L8 Eq9 Pre Rosa Triggers
 
Transacciones y sql procedural EN MySQL
Transacciones y sql procedural EN MySQLTransacciones y sql procedural EN MySQL
Transacciones y sql procedural EN MySQL
 
Sql triggers v3
Sql triggers v3Sql triggers v3
Sql triggers v3
 
51191625 triggers
51191625 triggers51191625 triggers
51191625 triggers
 
San triggers
San triggersSan triggers
San triggers
 
Postgres trigger
Postgres triggerPostgres trigger
Postgres trigger
 
Triggers-Activadores
Triggers-ActivadoresTriggers-Activadores
Triggers-Activadores
 
Trigger activadores
Trigger    activadoresTrigger    activadores
Trigger activadores
 
TRIGGERS-ACTIVADORES
TRIGGERS-ACTIVADORESTRIGGERS-ACTIVADORES
TRIGGERS-ACTIVADORES
 
TRIGGER-ACTIVADORES
TRIGGER-ACTIVADORESTRIGGER-ACTIVADORES
TRIGGER-ACTIVADORES
 
Trabajo grupal - Base de Datos
Trabajo grupal - Base de DatosTrabajo grupal - Base de Datos
Trabajo grupal - Base de Datos
 
Xilinx aprender abrirlo
Xilinx aprender abrirloXilinx aprender abrirlo
Xilinx aprender abrirlo
 

More from Fabián Alexander Moya (7)

Tarea 1 – investigación bpmn
Tarea 1 – investigación bpmnTarea 1 – investigación bpmn
Tarea 1 – investigación bpmn
 
Taller 1 bdd
Taller 1 bddTaller 1 bdd
Taller 1 bdd
 
PLSQL y paquetes
PLSQL y paquetesPLSQL y paquetes
PLSQL y paquetes
 
Packages pl sql
Packages pl sqlPackages pl sql
Packages pl sql
 
Sql
SqlSql
Sql
 
Funciones
FuncionesFunciones
Funciones
 
Plsql y paquetes
Plsql y paquetesPlsql y paquetes
Plsql y paquetes
 

Recently uploaded

Catálogo general de libros de la Editorial Albatros
Catálogo general de libros de la Editorial AlbatrosCatálogo general de libros de la Editorial Albatros
Catálogo general de libros de la Editorial AlbatrosGustavoCanevaro
 
Actividades eclipse solar 2024 Educacion
Actividades eclipse solar 2024 EducacionActividades eclipse solar 2024 Educacion
Actividades eclipse solar 2024 Educacionviviantorres91
 
BOCA Y NARIZ (2).pdf....................
BOCA Y NARIZ (2).pdf....................BOCA Y NARIZ (2).pdf....................
BOCA Y NARIZ (2).pdf....................ScarletMedina4
 
BITÁCORA DE ESTUDIO DE PROBLEMÁTICA. TUTORÍA V. PDF 2 UNIDAD.pdf
BITÁCORA DE ESTUDIO DE PROBLEMÁTICA. TUTORÍA V. PDF 2 UNIDAD.pdfBITÁCORA DE ESTUDIO DE PROBLEMÁTICA. TUTORÍA V. PDF 2 UNIDAD.pdf
BITÁCORA DE ESTUDIO DE PROBLEMÁTICA. TUTORÍA V. PDF 2 UNIDAD.pdfsolidalilaalvaradoro
 
LOS AMBIENTALISTAS todo por un mundo mejor
LOS AMBIENTALISTAS todo por un mundo mejorLOS AMBIENTALISTAS todo por un mundo mejor
LOS AMBIENTALISTAS todo por un mundo mejormrcrmnrojasgarcia
 
Descripción del Proceso de corte y soldadura
Descripción del Proceso de corte y soldaduraDescripción del Proceso de corte y soldadura
Descripción del Proceso de corte y soldaduraJose Sanchez
 
Biografía del General Eloy Alfaro Delgado
Biografía del General Eloy Alfaro DelgadoBiografía del General Eloy Alfaro Delgado
Biografía del General Eloy Alfaro DelgadoJosé Luis Palma
 
Apunte de clase Pisos y Revestimientos 1
Apunte de clase Pisos y Revestimientos 1Apunte de clase Pisos y Revestimientos 1
Apunte de clase Pisos y Revestimientos 1Gonella
 
Salvando mi mundo , mi comunidad , y mi entorno
Salvando mi mundo , mi comunidad  , y mi entornoSalvando mi mundo , mi comunidad  , y mi entorno
Salvando mi mundo , mi comunidad , y mi entornoday561sol
 
HISTORIETA: AVENTURAS VERDES (ECOLOGÍA).
HISTORIETA: AVENTURAS VERDES (ECOLOGÍA).HISTORIETA: AVENTURAS VERDES (ECOLOGÍA).
HISTORIETA: AVENTURAS VERDES (ECOLOGÍA).hebegris04
 
4° SES COM MAR 09 Leemos una noticia del dengue e identificamos sus partes (1...
4° SES COM MAR 09 Leemos una noticia del dengue e identificamos sus partes (1...4° SES COM MAR 09 Leemos una noticia del dengue e identificamos sus partes (1...
4° SES COM MAR 09 Leemos una noticia del dengue e identificamos sus partes (1...MagalyDacostaPea
 
4° SEM23 ANEXOS DEL DOCENTE 2023-2024.pptx
4° SEM23 ANEXOS DEL DOCENTE 2023-2024.pptx4° SEM23 ANEXOS DEL DOCENTE 2023-2024.pptx
4° SEM23 ANEXOS DEL DOCENTE 2023-2024.pptxfotofamilia008
 
DIGNITAS INFINITA - DIGNIDAD HUMANA; Declaración del dicasterio para la doctr...
DIGNITAS INFINITA - DIGNIDAD HUMANA; Declaración del dicasterio para la doctr...DIGNITAS INFINITA - DIGNIDAD HUMANA; Declaración del dicasterio para la doctr...
DIGNITAS INFINITA - DIGNIDAD HUMANA; Declaración del dicasterio para la doctr...Martin M Flynn
 

Recently uploaded (20)

Catálogo general de libros de la Editorial Albatros
Catálogo general de libros de la Editorial AlbatrosCatálogo general de libros de la Editorial Albatros
Catálogo general de libros de la Editorial Albatros
 
Actividades eclipse solar 2024 Educacion
Actividades eclipse solar 2024 EducacionActividades eclipse solar 2024 Educacion
Actividades eclipse solar 2024 Educacion
 
BOCA Y NARIZ (2).pdf....................
BOCA Y NARIZ (2).pdf....................BOCA Y NARIZ (2).pdf....................
BOCA Y NARIZ (2).pdf....................
 
BITÁCORA DE ESTUDIO DE PROBLEMÁTICA. TUTORÍA V. PDF 2 UNIDAD.pdf
BITÁCORA DE ESTUDIO DE PROBLEMÁTICA. TUTORÍA V. PDF 2 UNIDAD.pdfBITÁCORA DE ESTUDIO DE PROBLEMÁTICA. TUTORÍA V. PDF 2 UNIDAD.pdf
BITÁCORA DE ESTUDIO DE PROBLEMÁTICA. TUTORÍA V. PDF 2 UNIDAD.pdf
 
LOS AMBIENTALISTAS todo por un mundo mejor
LOS AMBIENTALISTAS todo por un mundo mejorLOS AMBIENTALISTAS todo por un mundo mejor
LOS AMBIENTALISTAS todo por un mundo mejor
 
Descripción del Proceso de corte y soldadura
Descripción del Proceso de corte y soldaduraDescripción del Proceso de corte y soldadura
Descripción del Proceso de corte y soldadura
 
Biografía del General Eloy Alfaro Delgado
Biografía del General Eloy Alfaro DelgadoBiografía del General Eloy Alfaro Delgado
Biografía del General Eloy Alfaro Delgado
 
Apunte de clase Pisos y Revestimientos 1
Apunte de clase Pisos y Revestimientos 1Apunte de clase Pisos y Revestimientos 1
Apunte de clase Pisos y Revestimientos 1
 
Mimos _
Mimos                                       _Mimos                                       _
Mimos _
 
Acuerdo segundo periodo - Grado Once.pptx
Acuerdo segundo periodo - Grado Once.pptxAcuerdo segundo periodo - Grado Once.pptx
Acuerdo segundo periodo - Grado Once.pptx
 
Sesión ¿Amor o egoísmo? Esa es la cuestión
Sesión  ¿Amor o egoísmo? Esa es la cuestiónSesión  ¿Amor o egoísmo? Esa es la cuestión
Sesión ¿Amor o egoísmo? Esa es la cuestión
 
Salvando mi mundo , mi comunidad , y mi entorno
Salvando mi mundo , mi comunidad  , y mi entornoSalvando mi mundo , mi comunidad  , y mi entorno
Salvando mi mundo , mi comunidad , y mi entorno
 
HISTORIETA: AVENTURAS VERDES (ECOLOGÍA).
HISTORIETA: AVENTURAS VERDES (ECOLOGÍA).HISTORIETA: AVENTURAS VERDES (ECOLOGÍA).
HISTORIETA: AVENTURAS VERDES (ECOLOGÍA).
 
Unidad 1 | Metodología de la Investigación
Unidad 1 | Metodología de la InvestigaciónUnidad 1 | Metodología de la Investigación
Unidad 1 | Metodología de la Investigación
 
4° SES COM MAR 09 Leemos una noticia del dengue e identificamos sus partes (1...
4° SES COM MAR 09 Leemos una noticia del dengue e identificamos sus partes (1...4° SES COM MAR 09 Leemos una noticia del dengue e identificamos sus partes (1...
4° SES COM MAR 09 Leemos una noticia del dengue e identificamos sus partes (1...
 
4° SEM23 ANEXOS DEL DOCENTE 2023-2024.pptx
4° SEM23 ANEXOS DEL DOCENTE 2023-2024.pptx4° SEM23 ANEXOS DEL DOCENTE 2023-2024.pptx
4° SEM23 ANEXOS DEL DOCENTE 2023-2024.pptx
 
DIGNITAS INFINITA - DIGNIDAD HUMANA; Declaración del dicasterio para la doctr...
DIGNITAS INFINITA - DIGNIDAD HUMANA; Declaración del dicasterio para la doctr...DIGNITAS INFINITA - DIGNIDAD HUMANA; Declaración del dicasterio para la doctr...
DIGNITAS INFINITA - DIGNIDAD HUMANA; Declaración del dicasterio para la doctr...
 
El Bullying.
El Bullying.El Bullying.
El Bullying.
 
AO TEATRO, COM ANTÓNIO MOTA! _
AO TEATRO, COM ANTÓNIO MOTA!             _AO TEATRO, COM ANTÓNIO MOTA!             _
AO TEATRO, COM ANTÓNIO MOTA! _
 
Unidad 2 | Teorías de la Comunicación | MCDIU
Unidad 2 | Teorías de la Comunicación | MCDIUUnidad 2 | Teorías de la Comunicación | MCDIU
Unidad 2 | Teorías de la Comunicación | MCDIU
 

Triggers

  • 1. Bases de Datos Unidad El Lenguaje PL/SQL (Triggers) 2011  Erwin Fischer 2
  • 2. Disparadores (Triggers) • Un triggers define una acción que la BD debe realizar cuando tenga lugar un determinado suceso en la aplicación • Un trigger, al igual que una función o procedimiento es un objeto de la base de datos. • En la práctica es un procedimiento almacenado, pero de uso interno al DBMS, por lo cual no usa parámetros. • Se asocian a tablas y operaciones de modificación básicas sobre ellas (Insert, Delete, Update). • Se ejecuta automáticamente cuando alguna de estas operaciones básicas sucede, antes que la modificación se haga permanente en la base de datos. • Puede incorporar cualquier tipo o agrupación de sentencias SQL, al igual que un procedimiento almacenado. 2011  Erwin Fischer 3
  • 3. Disparadores (Triggers) • Los triggers pueden utilizarse para imponer ciertas restricciones de integridad referencial, para imponer reglas de negocios complejas, o para auditar los cambios en los datos • Los triggers se basan en el modelo ECA (Event-Condition-Action, evento-condición-acción) • El Evento que dispara la regla especificada, en Oracle puede ser: • Una instrucción INSERT, UPDATE, DELETE • Una instrucción CREATE, ALTER o DROP • Un arranque de la BD o detención de la instancia • Un inicio o fin de sesión por parte del usuario • Un mensaje de Error • La Condición que determina si la acción que debe ejecutarse. Es opcional, pero si se especifica, la acción se ejecutará si la condición se evalúa como verdadera • La Acción que hay que llevar a cabo. Este bloque contiene el código y las instrucciones SQL que se ejecutan cuando se produce el evento y la condición es verdadera 2011  Erwin Fischer 4
  • 4. ECA-Rules (Event-Condition-Action rules) • Una vez que un set de reglas ha sido definidas el ADBMS monitorea los eventos relevantes. Un evento relevante es aquel que tiene definida alguna regla. • Cada vez que el ADBMS detecta la ocurrencia de un evento relevante, notifica al componente encargado de la ejecución de la regla asociada. Esta notificación se denomina “event signalling” o señalización de eventos. • En consecuencia, todas las reglas definidas para responder a dicho evento se “disparan” (trigger), y deben ser ejecutadas. • La ejecución de reglas incorpora la evaluación de condiciones, y si dichas condiciones satisfacen, se ejecuta la acción. 2011  Erwin Fischer 5
  • 5. Disparadores (Triggers) Aquí se presenta la sintaxis para crear un disparador en Oracle (que se diferencia levemente de la sintaxis estándar de SQL): CREATE [OR REPLACE] TRIGGER <trigger_name> {BEFORE|AFTER} {INSERT|DELETE|UPDATE} ON <table_name> [REFERENCING [NEW AS <new_row_name>] [OLD AS <old_row_name>]] [FOR EACH ROW [WHEN (<trigger_condition>)]] <trigger_body> Se puede usar solamente TRIGGERS BEFORE o AFTER para tablas INSTEAD OF triggers son utilizados para vistas (típicamente para vistas de actualización) Se puede especificar hasta tres disparadores de eventos usando la palabra clave OR. ... INSERT ON R ... ... INSERT OR DELETE OR UPDATE ON R ... ... UPDATE OF A, B OR INSERT ON R ... 2011  Erwin Fischer 6
  • 6. Disparadores (Triggers) Se muestra la sintaxis de Oracle para crear triggers a través de un ejemplo basado en las dos tablas siguientes: CREATE TABLE T4 (a INTEGER, b CHAR(10)); CREATE TABLE T5 (c CHAR(10), d INTEGER); CREATE TRIGGER trig1 AFTER INSERT ON T4 REFERENCING NEW AS newRow FOR EACH ROW WHEN (newRow.a <= 10) BEGIN INSERT INTO T5 VALUES(:newRow.b, :newRow.a); END trig1; 2011  Erwin Fischer 7
  • 7. Disparadores (Triggers) CREATE TRIGGER TopeDeManejoPropiedadEmpleado BEFORE INSERT OR UPDATE ON Propiedad FOR EACH ROW DECLARE vcontP NUMBER; BEGIN SELECT COUNT(*) INTO vcontP FROM Propiedad WHERE numEmpleado = new.numEmpleado; IF vcontP = 100 Raise_application_error(-2000, („Empleado „|| new.numEmpleado|| „ ya administra 100 propiedades‟); END IF END 2011  Erwin Fischer 8
  • 8. Disparadores (Triggers) create table Person (age int); CREATE TRIGGER PersonCheckAge AFTER INSERT OR UPDATE OF age ON Person FOR EACH ROW BEGIN IF (:new.age < 0) THEN RAISE_APPLICATION_ERROR(-20000, 'no negative age allowed'); END IF; END; . RUN; Si intentamos ejecutar la inserción: insert into Person values (-3); 2011  Erwin Fischer 9
  • 9. Create Sequence • Es un objeto de base de datos • Se utiliza para crear una secuencia, para generar enteros únicos. • Por ejemplo se puede utilizar secuencias para generar automáticamente valores de clave principal. 2011  Erwin Fischer 10
  • 10. Create Sequence un ejemplo CREATE SEQUENCE seqCliente START WITH 1000 INCREMENT BY 1 NOCACHE NOCYCLE; La primera referencia a seqCliente.nextval retorna 1000. la segunda retorna 1001. Cada consulta posterior devolverá un valor mayor en 1 que la referencia anterior. 2011  Erwin Fischer 11
  • 11. Un Trigger con Sequence • Supongamos que tenemos la siguiente tabla cliente Create table Cliente( idCliente number, Nombre varchar2(30) ) • utilizando la secuencia seqCliente, podemos crear el siguiente trigger. 2011  Erwin Fischer 12
  • 12. El trigger Create or Replace trigger trClienteId Before insert on Cliente for each row begin Select seqCliente.nextval into :new.idCliente from dual; end; 2011  Erwin Fischer 13
  • 13. Insertando registros • Luego para insertar un registro en la tabla cliente, bastaría hacer el siguiente insert: insert into Cliente (nombre) Values (‘Juan Perez’) – Observe que no hemos insertado el atributo idCliente 2011  Erwin Fischer 14
  • 14. Consultando Cliente • Si consultamos la tabla cliente Select * from Cliente Vemos que se ha insertado el Idcliente 1000 2011  Erwin Fischer 15
  • 15. Predicados • Dentro de un trigger se pueden utilizar predicados, que retornan valores booleanos, para identificar la acción que esta realizando • Inserting: Devuelve verdadero si la instrucción que disparó el trigger fue un «Insert» • Updating: Devuelve verdadero si la instrucción que disparó el trigger fue un «Update» • Deleting: Devuelve verdadero si la instrucción que disparó el trigger fue un «Delete» 2011  Erwin Fischer 16
  • 16. Trigger con predicado Create or Replace trigger trClienteId Before insert on Cliente for each row begin if inserting then Select seqCliente.nextval into :new.idCliente from dual; else :new.idCliente = 0; end if; End trClienteId; 2011  Erwin Fischer 17
  • 17. • Ahora tomar en cuenta que el siguiente insert obtiene el mismo resultado del trigger, pero sin activar el trigger. • Desactivando el trigger Alter trigger trClienteId disable; insert into Cliente Values (seqCliente.nextval, ‘Juan Perez’) 2011  Erwin Fischer 18
  • 18. Consultando cliente nuevamente INSERT into Cliente Values (seqCliente.nextval, ‘Juan Perez’) • Select * from Cliente 2011  Erwin Fischer 19
  • 19. Disparadores (Triggers) Exhibiendo errores de la definición del disparador Como para los procedimientos PL/SQL si obtiene un mensaje de error en la creación del triggers, puede ver el error con: show errors trigger <trigger_name>; Alternativamente se puede usar, SHO ERR (short for SHOW ERRORS) Notar que los números de líneas reportados no son exactos. 2011  Erwin Fischer 20
  • 20. Disparadores (Triggers) Para ver una lista de los triggers definidos usar: select trigger_name from user_triggers; Para mas detalles de un trigger en particular: select trigger_type, triggering_event, table_name, referencing_names, trigger_body from user_triggers where trigger_name = '<trigger_name>'; 2011  Erwin Fischer 21
  • 21. Eliminación y desactivación de Triggers • Para eliminar un trigger se utiliza: Drop trigger «nombre_trigger»; • Para desactivar un trigger se utiliza Alter trigger «nombre_trigger» disable; • Para activar un trigger se utiliza Alter trigger «nombre_trigger» enable; • Para activar todos los trigger de una tabla se utiliza Alter table «nombre_tabla» enable all triggers; 2011  Erwin Fischer 22
  • 22. Triggers Autor Ejercicio (eliminación en cascada) IdAutor Cree un trigger que cada vez que se elimine un autor, elimine todos los registros de libros asociados a ese autor Libro IdLibro IdAutor 2011  Erwin Fischer 23
  • 23. Triggers Compra Ejercicio 1 IdCompra Fecha • Para un sistema de Administración de stock en Bodega, se requiere implementar la siguiente funcionalidad DetalleCompra Producto activa a través de Triggers: IdProducto IdCompra NombreProducto IdProducto StockActual Cantidad Cada vez que se agregue un registro de detalle de compra, se deberá actualizar en forma automática la existencia en Stock actual. Evento: DetalleCompra.Insert Condición: - Acción: Producto.Update(StockActual) 2011  Erwin Fischer 24
  • 24. Triggers Compra IdCompra Ejercicio 2 Fecha • Ampliar el Sistema, agregando registro de mermas (pérdidas) DetalleCompra Producto IdProducto IdCompra Cada vez que se registre una merma, NombreProducto IdProducto Cantidad se deberá actualizar en forma StockActual automática la existencia en Stock actual. Merma IdMerma Evento: Merma.Insert Fecha Condición: - IdProducto Cantidad Acción: Producto.Update(StockActual) 2011  Erwin Fischer 25
  • 25. Triggers Cliente IdCliente Ejercicio 3 • Autómata de Giro Bancario Cada vez que un cliente quiere hacer un LineaCredito Cuenta IdCuenta giro, el sistema deberá verificar que su IdLinea IdCliente IdCuenta saldo de cuenta corriente o en su defecto su Saldo Saldo cupo de línea de crédito sea suficiente para cubrir la operación. Si la suma del saldo disponible en la cuenta y el saldo de la línea no logra cubrir, se UsoLinea Giro IdGiro deberá anular la transacción, en caso IdUso IdCuenta IdLinea contrario, se deberá registrar el nuevo saldo Fecha Fecha y/o nuevo cupo de línea de crédito y detalle Monto Monto de la utilización de la línea. Solución: TAREA, grupal y publicar en su blog 2011  Erwin Fischer 26
  • 26. Investigar o Identificar Triggers • Con su grupo de trabajo, identifique las situaciones en que seria deseable algún tipo de funcionalidad activa o autonomía. • Para cada uno de ellos defina el evento, condición y acción. • Publique en su blog, las situaciones y el o los triggers asociados que resuelven dicha situación. 2011  Erwin Fischer 27
  • 27. Unidad - PL/SQL - Triggers • Si tiene una sugerencia, comentario u observación para mejorar este material, agradecería me envíe un mail a erfisch@gmail.com. Atentamente Profesor Erwin Fischer 2011  Erwin Fischer 28