SlideShare ist ein Scribd-Unternehmen logo
1 von 13
Subprogramas: Triggers
      Semana 11/1
Aprendizajes esperados

• Construye procedimientos almacenados, triggers de base de
  datos, cursores y funciones que ayuden o implementen
  directamente soluciones a la lógica de negocio recogida en la
  captura de requerimientos de un sistema
• Discernir cuando usar un procedimientos almacenados, trigger de
  base de datos, cursor y función para implementar una solución a
  la lógica de negocio recogida en la captura de requerimientos de
  un sistema
Conceptos Claves
• Los triggers (disparadores) son bloques asociados a una tabla y que se
  ejecutan automáticamente cuando ocurre una operación DML (Insert,
  Delete, Update) sobre esa tabla
• No es recomendable crear triggers muy complejos o una cantidad
  numerosa para una tabla, ya que la performance puede verse afectada
• Un trigger no puede llevar el comando Commit o Rollback (ni los bloques
  que dicho trigger invoque)
• Los triggers sobre tablas no son los únicos existentes. También existen
  sobre vistas, o sobre base de datos o esquema
Sintáxis
CREATE [OR REPLACE] TRIGGER «nombre_trigger»{BEFORE|AFTER}
{DELETE|INSERT|UPDATE [OF col1, col2, ..., colN]
[OR {DELETE|INSERT|UPDATE [OF col1, col2, ..., colN]...]}
ON «nombre_tabla»
[REFERENCING OLD as «nombre_anterior», NEW as «nombre_nuevo»]
[FOR EACH ROW [WHEN («condicion»)]]
DECLARE …….BEGIN ......
[EXCEPTION]
….
 END «nombre_trigger»;
Sintaxis
• Donde:
• {BEFORE|AFTER} : Indica si el trigger se ejecuta antes o después de la sentencia que disparó al trigger
•    {DELETE|INSERT|UPDATE [OF col1, col2, ..., colN]
    [OR {DELETE|INSERT|UPDATE [OF col1, col2, ..., colN]...]}: Indica cual (o cuales) evento está asociado al trigger.
    Opcionalmente, para el caso de actualización se puede especificar las columnas cuya modificación dispara al trigger
• [REFERENCING OLD as «nombre_anterior», NEW as «nombre_nuevo»]: Opcional. Asigna nombre a la forma como se
  referenciará a los registros antes o despues de la ejecución del (los) evento asociado
• [FOR EACH ROW [WHEN («condicion»)]]: Indica si el trigger se ejecuta a nivel de fila, es decir, por cada registro afectado por
  el trigger. Opcionalmente se puede agregar una condición para filtrar los registros afectados
Ejemplo de trigger




       Trigger
      Declarado
Ejemplo de trigger
• Para que se ejecute el trigger, debemos invocar la
  sentencia DML asociada (insert). Consideremos que
  dicho trigger asigna un identificador cada vez se ingresa
  un nuevo registro a la tabla auto




 • Fijarse que en el insert no
   se asignó valor al campo
   «auto_id». Sin embargo,
   en la tabla aparece un
   valor. Eso implica que
   nuestro trigger ha
Variables OLD y NEW
• Dentro del ámbito de un trigger existen dos variables que no es necesario
  declararlas y ambas son de tipo %ROWTYPE
• Dichas variables contienen una copia del registro antes (OLD) y después
  (NEW) de la acción de la sentencia DML asociada (ver ejemplo del trigger
  anterior)
• Para modificar el nombre de dichas variables se utiliza la clausula
  «REFERENCING» del trigger
• Estas variables son sólo válidas cuando el trigger es a nivel de fila
Variables OLD y NEW

Sentencia     OLD          NEW


Insert      Null         Valores a
                         insertar

Delete      Valores      Null
            originales

Update      Valores      Valores
            Originales   modificad
                         os
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»
Ejemplo de predicados
Eliminación y Desactivación
• 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;
Tablas Mutantes
• Uno de los errores mas comunes que se producen en la ejecución de un trigger es
  el de tabla mutante
• Una tabla mutante es aquella que está siendo modificada por una sentencia SQL
  (insert, delete, update)
• Lo anterior implica que dicha tabla no puede ser consultada
• La solución general mas recurrente (no siempre se puede aplicar) es realizar una
  copia de los registros que se modificarán por el trigger en una tabla temporal y
  luego sobre esta tabla temporal realizar las acciones requeridas

Weitere ähnliche Inhalte

Was ist angesagt? (20)

TRIGGERS
TRIGGERSTRIGGERS
TRIGGERS
 
Tutorial disparadores
Tutorial disparadoresTutorial disparadores
Tutorial disparadores
 
Ejemplo de Trigger en Mysql
Ejemplo de Trigger en MysqlEjemplo de Trigger en Mysql
Ejemplo de Trigger en Mysql
 
Trigger-activadores en sql server
Trigger-activadores en sql serverTrigger-activadores en sql server
Trigger-activadores en sql server
 
Disparadores - base de datos
Disparadores - base de datosDisparadores - base de datos
Disparadores - base de datos
 
Postgres trigger
Postgres triggerPostgres trigger
Postgres trigger
 
Trigger activadores
Trigger activadoresTrigger activadores
Trigger activadores
 
Disparadores 1213820550525607-9
Disparadores 1213820550525607-9Disparadores 1213820550525607-9
Disparadores 1213820550525607-9
 
TRIGGERS Cliente - servidor
TRIGGERS Cliente - servidorTRIGGERS Cliente - servidor
TRIGGERS Cliente - servidor
 
Disparadores
DisparadoresDisparadores
Disparadores
 
Disparadores
DisparadoresDisparadores
Disparadores
 
Commit&rollback
Commit&rollbackCommit&rollback
Commit&rollback
 
Sesión12 - Trigger (Oracle)
Sesión12 - Trigger (Oracle)Sesión12 - Trigger (Oracle)
Sesión12 - Trigger (Oracle)
 
Triggers o disparadores en MySQL
Triggers o disparadores en MySQL Triggers o disparadores en MySQL
Triggers o disparadores en MySQL
 
51191625 triggers
51191625 triggers51191625 triggers
51191625 triggers
 
Triggers disparador
Triggers disparadorTriggers disparador
Triggers disparador
 
TRANSACCIONES, TRIGGERS, PROCEDIMIENTOS ALMACENADOS: DB2/IBM
TRANSACCIONES, TRIGGERS, PROCEDIMIENTOS ALMACENADOS: DB2/IBM   TRANSACCIONES, TRIGGERS, PROCEDIMIENTOS ALMACENADOS: DB2/IBM
TRANSACCIONES, TRIGGERS, PROCEDIMIENTOS ALMACENADOS: DB2/IBM
 
Curso de SQL Server: implementacion (T-SQL)
Curso de SQL Server: implementacion (T-SQL)Curso de SQL Server: implementacion (T-SQL)
Curso de SQL Server: implementacion (T-SQL)
 
Expo base
Expo baseExpo base
Expo base
 
Programación MySQL-Ejercicios
Programación MySQL-EjerciciosProgramación MySQL-Ejercicios
Programación MySQL-Ejercicios
 

Andere mochten auch

Resumen delo que se ha instruido a la hermandad SOBRE LA CLAUSULA DE EXCEPCION
Resumen delo que se ha instruido a la hermandad SOBRE LA CLAUSULA DE EXCEPCIONResumen delo que se ha instruido a la hermandad SOBRE LA CLAUSULA DE EXCEPCION
Resumen delo que se ha instruido a la hermandad SOBRE LA CLAUSULA DE EXCEPCIONEliud Gamez Gomez
 
Estadisticas puente alto violencia
Estadisticas puente alto violenciaEstadisticas puente alto violencia
Estadisticas puente alto violenciadcmartin1893
 
GRAVES DAÑOS ECONOMICOS EN LA EJECUCIÓN DEL ‘’PROYECTO OLMOS’’
GRAVES DAÑOS ECONOMICOS EN LA EJECUCIÓN DEL ‘’PROYECTO OLMOS’’GRAVES DAÑOS ECONOMICOS EN LA EJECUCIÓN DEL ‘’PROYECTO OLMOS’’
GRAVES DAÑOS ECONOMICOS EN LA EJECUCIÓN DEL ‘’PROYECTO OLMOS’’Colectivo Toleranciaydemocracia
 
Da silva correa_contreras_presentaciónfinal
Da silva correa_contreras_presentaciónfinalDa silva correa_contreras_presentaciónfinal
Da silva correa_contreras_presentaciónfinaldanicorrear
 
Abf lec dictionary
Abf lec dictionaryAbf lec dictionary
Abf lec dictionaryvictdiazm
 
Gabriel García Márquez se ha retirado de la vida pública
Gabriel García Márquez se ha retirado de la vida públicaGabriel García Márquez se ha retirado de la vida pública
Gabriel García Márquez se ha retirado de la vida públicaColectivo Toleranciaydemocracia
 
Ccna exploration routing_protocols_and_concepts_-_chapter_10_overview_es
Ccna exploration routing_protocols_and_concepts_-_chapter_10_overview_esCcna exploration routing_protocols_and_concepts_-_chapter_10_overview_es
Ccna exploration routing_protocols_and_concepts_-_chapter_10_overview_esvictdiazm
 
NOVEDADES CONTENIDAS EN LA LEY 22/2013, DE 23 DE DICIEMBRE, DE PRESUPUESTOS G...
NOVEDADES CONTENIDAS EN LA LEY 22/2013, DE 23 DE DICIEMBRE, DE PRESUPUESTOS G...NOVEDADES CONTENIDAS EN LA LEY 22/2013, DE 23 DE DICIEMBRE, DE PRESUPUESTOS G...
NOVEDADES CONTENIDAS EN LA LEY 22/2013, DE 23 DE DICIEMBRE, DE PRESUPUESTOS G...Juan Carlos M
 

Andere mochten auch (20)

Un nuevo amanecer para el mundo y el peru
Un nuevo amanecer para el mundo y el peruUn nuevo amanecer para el mundo y el peru
Un nuevo amanecer para el mundo y el peru
 
nstalacion de software
nstalacion de softwarenstalacion de software
nstalacion de software
 
Resumen delo que se ha instruido a la hermandad SOBRE LA CLAUSULA DE EXCEPCION
Resumen delo que se ha instruido a la hermandad SOBRE LA CLAUSULA DE EXCEPCIONResumen delo que se ha instruido a la hermandad SOBRE LA CLAUSULA DE EXCEPCION
Resumen delo que se ha instruido a la hermandad SOBRE LA CLAUSULA DE EXCEPCION
 
Clase 16
Clase 16Clase 16
Clase 16
 
Clase 20
Clase 20Clase 20
Clase 20
 
Clase6
Clase6Clase6
Clase6
 
Estadisticas puente alto violencia
Estadisticas puente alto violenciaEstadisticas puente alto violencia
Estadisticas puente alto violencia
 
GRAVES DAÑOS ECONOMICOS EN LA EJECUCIÓN DEL ‘’PROYECTO OLMOS’’
GRAVES DAÑOS ECONOMICOS EN LA EJECUCIÓN DEL ‘’PROYECTO OLMOS’’GRAVES DAÑOS ECONOMICOS EN LA EJECUCIÓN DEL ‘’PROYECTO OLMOS’’
GRAVES DAÑOS ECONOMICOS EN LA EJECUCIÓN DEL ‘’PROYECTO OLMOS’’
 
Da silva correa_contreras_presentaciónfinal
Da silva correa_contreras_presentaciónfinalDa silva correa_contreras_presentaciónfinal
Da silva correa_contreras_presentaciónfinal
 
752
752752
752
 
Injusticia de la justicia
Injusticia de la justiciaInjusticia de la justicia
Injusticia de la justicia
 
Abf lec dictionary
Abf lec dictionaryAbf lec dictionary
Abf lec dictionary
 
2.8.2
2.8.22.8.2
2.8.2
 
Gabriel García Márquez se ha retirado de la vida pública
Gabriel García Márquez se ha retirado de la vida públicaGabriel García Márquez se ha retirado de la vida pública
Gabriel García Márquez se ha retirado de la vida pública
 
Rusia12
Rusia12Rusia12
Rusia12
 
Caja negra.. tony
Caja negra.. tonyCaja negra.. tony
Caja negra.. tony
 
2016 1 28 material de seminario
2016 1 28 material de seminario2016 1 28 material de seminario
2016 1 28 material de seminario
 
11.6.2
11.6.211.6.2
11.6.2
 
Ccna exploration routing_protocols_and_concepts_-_chapter_10_overview_es
Ccna exploration routing_protocols_and_concepts_-_chapter_10_overview_esCcna exploration routing_protocols_and_concepts_-_chapter_10_overview_es
Ccna exploration routing_protocols_and_concepts_-_chapter_10_overview_es
 
NOVEDADES CONTENIDAS EN LA LEY 22/2013, DE 23 DE DICIEMBRE, DE PRESUPUESTOS G...
NOVEDADES CONTENIDAS EN LA LEY 22/2013, DE 23 DE DICIEMBRE, DE PRESUPUESTOS G...NOVEDADES CONTENIDAS EN LA LEY 22/2013, DE 23 DE DICIEMBRE, DE PRESUPUESTOS G...
NOVEDADES CONTENIDAS EN LA LEY 22/2013, DE 23 DE DICIEMBRE, DE PRESUPUESTOS G...
 

Ähnlich wie Semana 12 y 13 subprogramas triggers

Ähnlich wie Semana 12 y 13 subprogramas triggers (18)

CREACION DE TRIGGERS.pptx
CREACION DE TRIGGERS.pptxCREACION DE TRIGGERS.pptx
CREACION DE TRIGGERS.pptx
 
TRIGGERS O DISPARADORES
TRIGGERS O DISPARADORESTRIGGERS O DISPARADORES
TRIGGERS O DISPARADORES
 
Bd L8 Eq9 Pre Rosa Triggers
Bd L8 Eq9 Pre Rosa TriggersBd L8 Eq9 Pre Rosa Triggers
Bd L8 Eq9 Pre Rosa Triggers
 
Dbd triggers
Dbd triggersDbd triggers
Dbd triggers
 
Sql triggers v3
Sql triggers v3Sql triggers v3
Sql triggers v3
 
Triggers-Activadores
Triggers-ActivadoresTriggers-Activadores
Triggers-Activadores
 
Triggers o disparadores
Triggers o disparadoresTriggers o disparadores
Triggers o disparadores
 
Transacciones y sql procedural EN MySQL
Transacciones y sql procedural EN MySQLTransacciones y sql procedural EN MySQL
Transacciones y sql procedural EN MySQL
 
San triggers
San triggersSan triggers
San triggers
 
TRIGGERS-ACTIVADORES
TRIGGERS-ACTIVADORESTRIGGERS-ACTIVADORES
TRIGGERS-ACTIVADORES
 
TRIGGER-ACTIVADORES
TRIGGER-ACTIVADORESTRIGGER-ACTIVADORES
TRIGGER-ACTIVADORES
 
Formacion critica
Formacion criticaFormacion critica
Formacion critica
 
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 - Activadores
Trigger - ActivadoresTrigger - Activadores
Trigger - Activadores
 
Triggr
TriggrTriggr
Triggr
 
Disparadores.pptx
Disparadores.pptxDisparadores.pptx
Disparadores.pptx
 
Funciones store proc_triggers
Funciones store proc_triggersFunciones store proc_triggers
Funciones store proc_triggers
 
Aniuska programación
Aniuska programaciónAniuska programación
Aniuska programación
 

Mehr von victdiazm

Semana 2 y_3_-_file_ownerships_and_permissions
Semana 2 y_3_-_file_ownerships_and_permissionsSemana 2 y_3_-_file_ownerships_and_permissions
Semana 2 y_3_-_file_ownerships_and_permissionsvictdiazm
 
Semana 9 standard io and pipes guia de ejercicios resuelta
Semana 9   standard io and pipes  guia de ejercicios resueltaSemana 9   standard io and pipes  guia de ejercicios resuelta
Semana 9 standard io and pipes guia de ejercicios resueltavictdiazm
 
Semana 7 y 8 the linux filesystem guia de ejercicios resuelta
Semana 7 y 8   the linux filesystem guia de ejercicios resueltaSemana 7 y 8   the linux filesystem guia de ejercicios resuelta
Semana 7 y 8 the linux filesystem guia de ejercicios resueltavictdiazm
 
Semana 4 y 5 la shell bash guia de ejercicios resuelta
Semana 4 y 5  la shell bash guia de ejercicios resueltaSemana 4 y 5  la shell bash guia de ejercicios resuelta
Semana 4 y 5 la shell bash guia de ejercicios resueltavictdiazm
 
Semana 2 y 3 file ownerships and permissions guia de ejercicios resuelta
Semana 2 y 3   file ownerships and permissions guia de ejercicios resueltaSemana 2 y 3   file ownerships and permissions guia de ejercicios resuelta
Semana 2 y 3 file ownerships and permissions guia de ejercicios resueltavictdiazm
 
Semana 1 quick tours guia de ejercicios resuelta
Semana 1   quick tours guia de ejercicios resueltaSemana 1   quick tours guia de ejercicios resuelta
Semana 1 quick tours guia de ejercicios resueltavictdiazm
 
Semana 10 -_managing_processes_guia_de_ejercicios_resuelta
Semana 10 -_managing_processes_guia_de_ejercicios_resueltaSemana 10 -_managing_processes_guia_de_ejercicios_resuelta
Semana 10 -_managing_processes_guia_de_ejercicios_resueltavictdiazm
 
Semana 4 y_5_-_la_shell_bash
Semana 4 y_5_-_la_shell_bashSemana 4 y_5_-_la_shell_bash
Semana 4 y_5_-_la_shell_bashvictdiazm
 
Semana 2 y_3_-_file_ownerships_and_permissions
Semana 2 y_3_-_file_ownerships_and_permissionsSemana 2 y_3_-_file_ownerships_and_permissions
Semana 2 y_3_-_file_ownerships_and_permissionsvictdiazm
 
Semana 1 -_quick_tours_guia_de_ejercicios_resuelta
Semana 1 -_quick_tours_guia_de_ejercicios_resueltaSemana 1 -_quick_tours_guia_de_ejercicios_resuelta
Semana 1 -_quick_tours_guia_de_ejercicios_resueltavictdiazm
 
Semana 1 -_quick_tours
Semana 1 -_quick_toursSemana 1 -_quick_tours
Semana 1 -_quick_toursvictdiazm
 
Semana 16 usuarios y grupos
Semana 16 usuarios y gruposSemana 16 usuarios y grupos
Semana 16 usuarios y gruposvictdiazm
 
Semana 13 y 14 aplicaciones de redes
Semana 13 y 14 aplicaciones de redesSemana 13 y 14 aplicaciones de redes
Semana 13 y 14 aplicaciones de redesvictdiazm
 
Semana 12 filesystem basico
Semana 12  filesystem basicoSemana 12  filesystem basico
Semana 12 filesystem basicovictdiazm
 
Semana 10 administracion de procesos
Semana 10 administracion de procesosSemana 10 administracion de procesos
Semana 10 administracion de procesosvictdiazm
 
Semana 9 entradas salidas estandar y pipes
Semana 9 entradas salidas estandar y pipesSemana 9 entradas salidas estandar y pipes
Semana 9 entradas salidas estandar y pipesvictdiazm
 
Semana 8 herramientas de procesos de string
Semana 8  herramientas de procesos de stringSemana 8  herramientas de procesos de string
Semana 8 herramientas de procesos de stringvictdiazm
 
Semana 7 y 8 sistemas de archivos linux
Semana 7 y 8 sistemas de archivos linuxSemana 7 y 8 sistemas de archivos linux
Semana 7 y 8 sistemas de archivos linuxvictdiazm
 
Control1 victoria diaz
Control1   victoria diazControl1   victoria diaz
Control1 victoria diazvictdiazm
 

Mehr von victdiazm (20)

Semana 2 y_3_-_file_ownerships_and_permissions
Semana 2 y_3_-_file_ownerships_and_permissionsSemana 2 y_3_-_file_ownerships_and_permissions
Semana 2 y_3_-_file_ownerships_and_permissions
 
Semana 9 standard io and pipes guia de ejercicios resuelta
Semana 9   standard io and pipes  guia de ejercicios resueltaSemana 9   standard io and pipes  guia de ejercicios resuelta
Semana 9 standard io and pipes guia de ejercicios resuelta
 
Semana 7 y 8 the linux filesystem guia de ejercicios resuelta
Semana 7 y 8   the linux filesystem guia de ejercicios resueltaSemana 7 y 8   the linux filesystem guia de ejercicios resuelta
Semana 7 y 8 the linux filesystem guia de ejercicios resuelta
 
Semana 4 y 5 la shell bash guia de ejercicios resuelta
Semana 4 y 5  la shell bash guia de ejercicios resueltaSemana 4 y 5  la shell bash guia de ejercicios resuelta
Semana 4 y 5 la shell bash guia de ejercicios resuelta
 
Semana 2 y 3 file ownerships and permissions guia de ejercicios resuelta
Semana 2 y 3   file ownerships and permissions guia de ejercicios resueltaSemana 2 y 3   file ownerships and permissions guia de ejercicios resuelta
Semana 2 y 3 file ownerships and permissions guia de ejercicios resuelta
 
Semana 1 quick tours guia de ejercicios resuelta
Semana 1   quick tours guia de ejercicios resueltaSemana 1   quick tours guia de ejercicios resuelta
Semana 1 quick tours guia de ejercicios resuelta
 
Semana 10 -_managing_processes_guia_de_ejercicios_resuelta
Semana 10 -_managing_processes_guia_de_ejercicios_resueltaSemana 10 -_managing_processes_guia_de_ejercicios_resuelta
Semana 10 -_managing_processes_guia_de_ejercicios_resuelta
 
Semana 4 y_5_-_la_shell_bash
Semana 4 y_5_-_la_shell_bashSemana 4 y_5_-_la_shell_bash
Semana 4 y_5_-_la_shell_bash
 
Semana 2 y_3_-_file_ownerships_and_permissions
Semana 2 y_3_-_file_ownerships_and_permissionsSemana 2 y_3_-_file_ownerships_and_permissions
Semana 2 y_3_-_file_ownerships_and_permissions
 
Semana 1 -_quick_tours_guia_de_ejercicios_resuelta
Semana 1 -_quick_tours_guia_de_ejercicios_resueltaSemana 1 -_quick_tours_guia_de_ejercicios_resuelta
Semana 1 -_quick_tours_guia_de_ejercicios_resuelta
 
Semana 1 -_quick_tours
Semana 1 -_quick_toursSemana 1 -_quick_tours
Semana 1 -_quick_tours
 
Semana 16 usuarios y grupos
Semana 16 usuarios y gruposSemana 16 usuarios y grupos
Semana 16 usuarios y grupos
 
Semana 13 y 14 aplicaciones de redes
Semana 13 y 14 aplicaciones de redesSemana 13 y 14 aplicaciones de redes
Semana 13 y 14 aplicaciones de redes
 
Semana 12 filesystem basico
Semana 12  filesystem basicoSemana 12  filesystem basico
Semana 12 filesystem basico
 
Semana 10 administracion de procesos
Semana 10 administracion de procesosSemana 10 administracion de procesos
Semana 10 administracion de procesos
 
Semana 9 entradas salidas estandar y pipes
Semana 9 entradas salidas estandar y pipesSemana 9 entradas salidas estandar y pipes
Semana 9 entradas salidas estandar y pipes
 
Semana 8 herramientas de procesos de string
Semana 8  herramientas de procesos de stringSemana 8  herramientas de procesos de string
Semana 8 herramientas de procesos de string
 
Semana 7 y 8 sistemas de archivos linux
Semana 7 y 8 sistemas de archivos linuxSemana 7 y 8 sistemas de archivos linux
Semana 7 y 8 sistemas de archivos linux
 
Script
ScriptScript
Script
 
Control1 victoria diaz
Control1   victoria diazControl1   victoria diaz
Control1 victoria diaz
 

Semana 12 y 13 subprogramas triggers

  • 2. Aprendizajes esperados • Construye procedimientos almacenados, triggers de base de datos, cursores y funciones que ayuden o implementen directamente soluciones a la lógica de negocio recogida en la captura de requerimientos de un sistema • Discernir cuando usar un procedimientos almacenados, trigger de base de datos, cursor y función para implementar una solución a la lógica de negocio recogida en la captura de requerimientos de un sistema
  • 3. Conceptos Claves • Los triggers (disparadores) son bloques asociados a una tabla y que se ejecutan automáticamente cuando ocurre una operación DML (Insert, Delete, Update) sobre esa tabla • No es recomendable crear triggers muy complejos o una cantidad numerosa para una tabla, ya que la performance puede verse afectada • Un trigger no puede llevar el comando Commit o Rollback (ni los bloques que dicho trigger invoque) • Los triggers sobre tablas no son los únicos existentes. También existen sobre vistas, o sobre base de datos o esquema
  • 4. Sintáxis CREATE [OR REPLACE] TRIGGER «nombre_trigger»{BEFORE|AFTER} {DELETE|INSERT|UPDATE [OF col1, col2, ..., colN] [OR {DELETE|INSERT|UPDATE [OF col1, col2, ..., colN]...]} ON «nombre_tabla» [REFERENCING OLD as «nombre_anterior», NEW as «nombre_nuevo»] [FOR EACH ROW [WHEN («condicion»)]] DECLARE …….BEGIN ...... [EXCEPTION] …. END «nombre_trigger»;
  • 5. Sintaxis • Donde: • {BEFORE|AFTER} : Indica si el trigger se ejecuta antes o después de la sentencia que disparó al trigger • {DELETE|INSERT|UPDATE [OF col1, col2, ..., colN] [OR {DELETE|INSERT|UPDATE [OF col1, col2, ..., colN]...]}: Indica cual (o cuales) evento está asociado al trigger. Opcionalmente, para el caso de actualización se puede especificar las columnas cuya modificación dispara al trigger • [REFERENCING OLD as «nombre_anterior», NEW as «nombre_nuevo»]: Opcional. Asigna nombre a la forma como se referenciará a los registros antes o despues de la ejecución del (los) evento asociado • [FOR EACH ROW [WHEN («condicion»)]]: Indica si el trigger se ejecuta a nivel de fila, es decir, por cada registro afectado por el trigger. Opcionalmente se puede agregar una condición para filtrar los registros afectados
  • 6. Ejemplo de trigger Trigger Declarado
  • 7. Ejemplo de trigger • Para que se ejecute el trigger, debemos invocar la sentencia DML asociada (insert). Consideremos que dicho trigger asigna un identificador cada vez se ingresa un nuevo registro a la tabla auto • Fijarse que en el insert no se asignó valor al campo «auto_id». Sin embargo, en la tabla aparece un valor. Eso implica que nuestro trigger ha
  • 8. Variables OLD y NEW • Dentro del ámbito de un trigger existen dos variables que no es necesario declararlas y ambas son de tipo %ROWTYPE • Dichas variables contienen una copia del registro antes (OLD) y después (NEW) de la acción de la sentencia DML asociada (ver ejemplo del trigger anterior) • Para modificar el nombre de dichas variables se utiliza la clausula «REFERENCING» del trigger • Estas variables son sólo válidas cuando el trigger es a nivel de fila
  • 9. Variables OLD y NEW Sentencia OLD NEW Insert Null Valores a insertar Delete Valores Null originales Update Valores Valores Originales modificad os
  • 10. 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»
  • 12. Eliminación y Desactivación • 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;
  • 13. Tablas Mutantes • Uno de los errores mas comunes que se producen en la ejecución de un trigger es el de tabla mutante • Una tabla mutante es aquella que está siendo modificada por una sentencia SQL (insert, delete, update) • Lo anterior implica que dicha tabla no puede ser consultada • La solución general mas recurrente (no siempre se puede aplicar) es realizar una copia de los registros que se modificarán por el trigger en una tabla temporal y luego sobre esta tabla temporal realizar las acciones requeridas