SlideShare ist ein Scribd-Unternehmen logo
1 von 27
Downloaden Sie, um offline zu lesen
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

Weitere ähnliche Inhalte

Was ist angesagt?

Triggers o disparadores en MySQL
Triggers o disparadores en MySQL Triggers o disparadores en MySQL
Triggers o disparadores en MySQL Jair Ospino Ardila
 
Triggers en BD mysql
Triggers en BD mysqlTriggers en BD mysql
Triggers en BD mysqlEmerson Garay
 
Stored-Procedures-Presentation
Stored-Procedures-PresentationStored-Procedures-Presentation
Stored-Procedures-PresentationChuck Walker
 
Manejo de triggers en sql server
Manejo de triggers en sql server Manejo de triggers en sql server
Manejo de triggers en sql server Dheeyi William
 
Modul praktikum java pemrograman berorientasi objek
Modul praktikum java pemrograman berorientasi objekModul praktikum java pemrograman berorientasi objek
Modul praktikum java pemrograman berorientasi objekimam arifin
 
Triggers o disparadores
Triggers o disparadoresTriggers o disparadores
Triggers o disparadoresPablo Jose
 
Métodos POO
Métodos POOMétodos POO
Métodos POO1da4
 
Programacion de base de datos - unidad 3 Programacion de base de datos
Programacion de base de datos - unidad 3 Programacion de base de datosProgramacion de base de datos - unidad 3 Programacion de base de datos
Programacion de base de datos - unidad 3 Programacion de base de datosJosé Antonio Sandoval Acosta
 
Normalización de la base de datos (3 formas normales)
Normalización de la base de datos (3 formas normales)Normalización de la base de datos (3 formas normales)
Normalización de la base de datos (3 formas normales)michell_quitian
 
10 Creating Triggers
10 Creating Triggers10 Creating Triggers
10 Creating Triggersrehaniltifat
 
5. Ejercicios normalización
5. Ejercicios normalización5. Ejercicios normalización
5. Ejercicios normalizaciónMarcelo Herrera
 
İleri Seviye T-SQL Programlama - Chapter 12
İleri Seviye T-SQL Programlama - Chapter 12İleri Seviye T-SQL Programlama - Chapter 12
İleri Seviye T-SQL Programlama - Chapter 12Cihan Özhan
 

Was ist angesagt? (20)

Triggers o disparadores en MySQL
Triggers o disparadores en MySQL Triggers o disparadores en MySQL
Triggers o disparadores en MySQL
 
Triggers en BD mysql
Triggers en BD mysqlTriggers en BD mysql
Triggers en BD mysql
 
Stored-Procedures-Presentation
Stored-Procedures-PresentationStored-Procedures-Presentation
Stored-Procedures-Presentation
 
Manejo de triggers en sql server
Manejo de triggers en sql server Manejo de triggers en sql server
Manejo de triggers en sql server
 
Modul praktikum java pemrograman berorientasi objek
Modul praktikum java pemrograman berorientasi objekModul praktikum java pemrograman berorientasi objek
Modul praktikum java pemrograman berorientasi objek
 
Ejercicio 11
Ejercicio 11Ejercicio 11
Ejercicio 11
 
Triggers o disparadores
Triggers o disparadoresTriggers o disparadores
Triggers o disparadores
 
Métodos POO
Métodos POOMétodos POO
Métodos POO
 
Programacion de base de datos - unidad 3 Programacion de base de datos
Programacion de base de datos - unidad 3 Programacion de base de datosProgramacion de base de datos - unidad 3 Programacion de base de datos
Programacion de base de datos - unidad 3 Programacion de base de datos
 
Normalización de la base de datos (3 formas normales)
Normalización de la base de datos (3 formas normales)Normalización de la base de datos (3 formas normales)
Normalización de la base de datos (3 formas normales)
 
10 Creating Triggers
10 Creating Triggers10 Creating Triggers
10 Creating Triggers
 
5. Ejercicios normalización
5. Ejercicios normalización5. Ejercicios normalización
5. Ejercicios normalización
 
İleri Seviye T-SQL Programlama - Chapter 12
İleri Seviye T-SQL Programlama - Chapter 12İleri Seviye T-SQL Programlama - Chapter 12
İleri Seviye T-SQL Programlama - Chapter 12
 
Java colecciones
Java coleccionesJava colecciones
Java colecciones
 
TRIGGERS
TRIGGERSTRIGGERS
TRIGGERS
 
Clases Genéricas en Java
Clases Genéricas en JavaClases Genéricas en Java
Clases Genéricas en Java
 
Pengenalan Framework CodeIgniter
Pengenalan Framework CodeIgniterPengenalan Framework CodeIgniter
Pengenalan Framework CodeIgniter
 
LISTAS
LISTASLISTAS
LISTAS
 
Abstract Factory
Abstract FactoryAbstract Factory
Abstract Factory
 
Sql presentacion
Sql presentacionSql presentacion
Sql presentacion
 

Andere mochten auch

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
 

Andere mochten auch (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
 

Ähnlich wie 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
 
Trigger Data Base
Trigger Data BaseTrigger Data Base
Trigger Data Base
 
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
 

Mehr von 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
 

Kürzlich hochgeladen

Kirpi-el-erizo libro descargar pdf 1 link
Kirpi-el-erizo libro descargar pdf 1 linkKirpi-el-erizo libro descargar pdf 1 link
Kirpi-el-erizo libro descargar pdf 1 linkMaximilianoMaldonado17
 
la forma de los objetos expresión gráfica preescolar
la forma de los objetos expresión gráfica preescolarla forma de los objetos expresión gráfica preescolar
la forma de los objetos expresión gráfica preescolarCa Ut
 
CIENCIAS SOCIALES SEGUNDO TRIMESTRE CUARTO
CIENCIAS SOCIALES SEGUNDO TRIMESTRE CUARTOCIENCIAS SOCIALES SEGUNDO TRIMESTRE CUARTO
CIENCIAS SOCIALES SEGUNDO TRIMESTRE CUARTOCEIP TIERRA DE PINARES
 
Herbert James Drape. Erotismo y sensualidad.pptx
Herbert James Drape. Erotismo y sensualidad.pptxHerbert James Drape. Erotismo y sensualidad.pptx
Herbert James Drape. Erotismo y sensualidad.pptxArs Erótica
 
Concurso de Innovación Pedagógica T2 FONDEP 2024 Ccesa007.pdf
Concurso de Innovación Pedagógica  T2  FONDEP 2024 Ccesa007.pdfConcurso de Innovación Pedagógica  T2  FONDEP 2024 Ccesa007.pdf
Concurso de Innovación Pedagógica T2 FONDEP 2024 Ccesa007.pdfDemetrio Ccesa Rayme
 
Presentación contribuciones socioeconómicas del SUPV 2023
Presentación contribuciones socioeconómicas del SUPV 2023Presentación contribuciones socioeconómicas del SUPV 2023
Presentación contribuciones socioeconómicas del SUPV 2023Ivie
 
La Gatera de la Villa nº 51. Revista cultural sobre Madrid..
La Gatera de la Villa nº 51. Revista cultural sobre Madrid..La Gatera de la Villa nº 51. Revista cultural sobre Madrid..
La Gatera de la Villa nº 51. Revista cultural sobre Madrid..La Gatera de la Villa
 
Tema 4 Rocas sedimentarias, características y clasificación
Tema 4 Rocas sedimentarias, características y clasificaciónTema 4 Rocas sedimentarias, características y clasificación
Tema 4 Rocas sedimentarias, características y clasificaciónIES Vicent Andres Estelles
 
La poesía del encarcelamiento de Raúl Zurita en el aula: una propuesta didáctica
La poesía del encarcelamiento de Raúl Zurita en el aula: una propuesta didácticaLa poesía del encarcelamiento de Raúl Zurita en el aula: una propuesta didáctica
La poesía del encarcelamiento de Raúl Zurita en el aula: una propuesta didácticaIGNACIO BALLESTER PARDO
 
CIENCIAS SOCIALES SEGUNDO TRIMESTRE TERCERO
CIENCIAS SOCIALES SEGUNDO TRIMESTRE TERCEROCIENCIAS SOCIALES SEGUNDO TRIMESTRE TERCERO
CIENCIAS SOCIALES SEGUNDO TRIMESTRE TERCEROCEIP TIERRA DE PINARES
 
Ejemplo de trabajo de TIC´s CON VARIAS OPCIONES DE LAS TAREAS
Ejemplo de trabajo de TIC´s CON VARIAS OPCIONES DE LAS TAREASEjemplo de trabajo de TIC´s CON VARIAS OPCIONES DE LAS TAREAS
Ejemplo de trabajo de TIC´s CON VARIAS OPCIONES DE LAS TAREASJavier Sanchez
 
21 MARZO DIA INTERNACIONAL DOS BOSQUES.pdf
21 MARZO DIA INTERNACIONAL DOS BOSQUES.pdf21 MARZO DIA INTERNACIONAL DOS BOSQUES.pdf
21 MARZO DIA INTERNACIONAL DOS BOSQUES.pdfceeabarcia
 
La Congregación de Jesús y María, conocida también como los Eudistas, fue fun...
La Congregación de Jesús y María, conocida también como los Eudistas, fue fun...La Congregación de Jesús y María, conocida también como los Eudistas, fue fun...
La Congregación de Jesús y María, conocida también como los Eudistas, fue fun...Unidad de Espiritualidad Eudista
 
U2_EA2_descargable TICS PRESENCIAL 2.pdf
U2_EA2_descargable TICS PRESENCIAL 2.pdfU2_EA2_descargable TICS PRESENCIAL 2.pdf
U2_EA2_descargable TICS PRESENCIAL 2.pdfJavier Correa
 
5°-CARPETA PEDAGÓGICA 2024-MAESTRAS DE PRIMARIA PERÚ-978387435.doc
5°-CARPETA PEDAGÓGICA 2024-MAESTRAS DE PRIMARIA PERÚ-978387435.doc5°-CARPETA PEDAGÓGICA 2024-MAESTRAS DE PRIMARIA PERÚ-978387435.doc
5°-CARPETA PEDAGÓGICA 2024-MAESTRAS DE PRIMARIA PERÚ-978387435.docGLADYSPASTOR
 
Xardín de San Carlos (A Coruña) IES Monelos
Xardín de San Carlos (A Coruña) IES MonelosXardín de San Carlos (A Coruña) IES Monelos
Xardín de San Carlos (A Coruña) IES MonelosAgrela Elvixeo
 
explicacionsobrelasemanasanta-190411100653.ppt
explicacionsobrelasemanasanta-190411100653.pptexplicacionsobrelasemanasanta-190411100653.ppt
explicacionsobrelasemanasanta-190411100653.pptjosemanuelcremades
 
Escrito administrativo técnico y comerciales
Escrito administrativo técnico y comercialesEscrito administrativo técnico y comerciales
Escrito administrativo técnico y comercialesmelanieteresacontrer
 
GUÍA SIANET - Agenda - Tareas - Archivos - Participaciones - Notas.pdf
GUÍA SIANET - Agenda - Tareas - Archivos - Participaciones - Notas.pdfGUÍA SIANET - Agenda - Tareas - Archivos - Participaciones - Notas.pdf
GUÍA SIANET - Agenda - Tareas - Archivos - Participaciones - Notas.pdfNELLYKATTY
 

Kürzlich hochgeladen (20)

Kirpi-el-erizo libro descargar pdf 1 link
Kirpi-el-erizo libro descargar pdf 1 linkKirpi-el-erizo libro descargar pdf 1 link
Kirpi-el-erizo libro descargar pdf 1 link
 
la forma de los objetos expresión gráfica preescolar
la forma de los objetos expresión gráfica preescolarla forma de los objetos expresión gráfica preescolar
la forma de los objetos expresión gráfica preescolar
 
CIENCIAS SOCIALES SEGUNDO TRIMESTRE CUARTO
CIENCIAS SOCIALES SEGUNDO TRIMESTRE CUARTOCIENCIAS SOCIALES SEGUNDO TRIMESTRE CUARTO
CIENCIAS SOCIALES SEGUNDO TRIMESTRE CUARTO
 
Herbert James Drape. Erotismo y sensualidad.pptx
Herbert James Drape. Erotismo y sensualidad.pptxHerbert James Drape. Erotismo y sensualidad.pptx
Herbert James Drape. Erotismo y sensualidad.pptx
 
Concurso de Innovación Pedagógica T2 FONDEP 2024 Ccesa007.pdf
Concurso de Innovación Pedagógica  T2  FONDEP 2024 Ccesa007.pdfConcurso de Innovación Pedagógica  T2  FONDEP 2024 Ccesa007.pdf
Concurso de Innovación Pedagógica T2 FONDEP 2024 Ccesa007.pdf
 
Presentación contribuciones socioeconómicas del SUPV 2023
Presentación contribuciones socioeconómicas del SUPV 2023Presentación contribuciones socioeconómicas del SUPV 2023
Presentación contribuciones socioeconómicas del SUPV 2023
 
La Gatera de la Villa nº 51. Revista cultural sobre Madrid..
La Gatera de la Villa nº 51. Revista cultural sobre Madrid..La Gatera de la Villa nº 51. Revista cultural sobre Madrid..
La Gatera de la Villa nº 51. Revista cultural sobre Madrid..
 
Tema 4 Rocas sedimentarias, características y clasificación
Tema 4 Rocas sedimentarias, características y clasificaciónTema 4 Rocas sedimentarias, características y clasificación
Tema 4 Rocas sedimentarias, características y clasificación
 
Tema 6.- La identidad visual corporativa y el naming.pdf
Tema 6.- La identidad visual corporativa y el naming.pdfTema 6.- La identidad visual corporativa y el naming.pdf
Tema 6.- La identidad visual corporativa y el naming.pdf
 
La poesía del encarcelamiento de Raúl Zurita en el aula: una propuesta didáctica
La poesía del encarcelamiento de Raúl Zurita en el aula: una propuesta didácticaLa poesía del encarcelamiento de Raúl Zurita en el aula: una propuesta didáctica
La poesía del encarcelamiento de Raúl Zurita en el aula: una propuesta didáctica
 
CIENCIAS SOCIALES SEGUNDO TRIMESTRE TERCERO
CIENCIAS SOCIALES SEGUNDO TRIMESTRE TERCEROCIENCIAS SOCIALES SEGUNDO TRIMESTRE TERCERO
CIENCIAS SOCIALES SEGUNDO TRIMESTRE TERCERO
 
Ejemplo de trabajo de TIC´s CON VARIAS OPCIONES DE LAS TAREAS
Ejemplo de trabajo de TIC´s CON VARIAS OPCIONES DE LAS TAREASEjemplo de trabajo de TIC´s CON VARIAS OPCIONES DE LAS TAREAS
Ejemplo de trabajo de TIC´s CON VARIAS OPCIONES DE LAS TAREAS
 
21 MARZO DIA INTERNACIONAL DOS BOSQUES.pdf
21 MARZO DIA INTERNACIONAL DOS BOSQUES.pdf21 MARZO DIA INTERNACIONAL DOS BOSQUES.pdf
21 MARZO DIA INTERNACIONAL DOS BOSQUES.pdf
 
La Congregación de Jesús y María, conocida también como los Eudistas, fue fun...
La Congregación de Jesús y María, conocida también como los Eudistas, fue fun...La Congregación de Jesús y María, conocida también como los Eudistas, fue fun...
La Congregación de Jesús y María, conocida también como los Eudistas, fue fun...
 
U2_EA2_descargable TICS PRESENCIAL 2.pdf
U2_EA2_descargable TICS PRESENCIAL 2.pdfU2_EA2_descargable TICS PRESENCIAL 2.pdf
U2_EA2_descargable TICS PRESENCIAL 2.pdf
 
5°-CARPETA PEDAGÓGICA 2024-MAESTRAS DE PRIMARIA PERÚ-978387435.doc
5°-CARPETA PEDAGÓGICA 2024-MAESTRAS DE PRIMARIA PERÚ-978387435.doc5°-CARPETA PEDAGÓGICA 2024-MAESTRAS DE PRIMARIA PERÚ-978387435.doc
5°-CARPETA PEDAGÓGICA 2024-MAESTRAS DE PRIMARIA PERÚ-978387435.doc
 
Xardín de San Carlos (A Coruña) IES Monelos
Xardín de San Carlos (A Coruña) IES MonelosXardín de San Carlos (A Coruña) IES Monelos
Xardín de San Carlos (A Coruña) IES Monelos
 
explicacionsobrelasemanasanta-190411100653.ppt
explicacionsobrelasemanasanta-190411100653.pptexplicacionsobrelasemanasanta-190411100653.ppt
explicacionsobrelasemanasanta-190411100653.ppt
 
Escrito administrativo técnico y comerciales
Escrito administrativo técnico y comercialesEscrito administrativo técnico y comerciales
Escrito administrativo técnico y comerciales
 
GUÍA SIANET - Agenda - Tareas - Archivos - Participaciones - Notas.pdf
GUÍA SIANET - Agenda - Tareas - Archivos - Participaciones - Notas.pdfGUÍA SIANET - Agenda - Tareas - Archivos - Participaciones - Notas.pdf
GUÍA SIANET - Agenda - Tareas - Archivos - Participaciones - Notas.pdf
 

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