Está en la página 1de 9

TRIGGERS EN ORACLE 8 Iriarte J. Espaa S. Facultad de Informtica - Universidad Politcnica de Valencia email: jorirde@inf.upv.es, serescu@inf.upv.

es Resumen Nuestro objetivo para este artculo es intentar mostrar un breve panorama de cmo crear TRIGGERS (disparadores o gatilladores [1 ! para bases de datos bajo "racle #$ asi como describir la %uncionalidad tan versatil &ue proporcionan al programador' (or lo tanto es de esperar &ue el lector tenga un poco de e)periencia con entornos "racle * cono+ca la notacin b,sica de bases de datos$ de igual manera ser,n necesarios unos mnimos conocimientos del lenguaje (-.S/-' 1. Introduccin Todas las implementaciones ue !emos investi"ado soportan tri""ers de inserci#n, actuali$aci#n % &orrado' al"unos se disparan por operaci#n, otros saltan por tupla. (in"uno de los )*+, relacionales, e-cepto el Pro"ress )ata&ase ,erver, soportan tri""ers en operaciones de ,./.0T. 1a% un par de ra$ones para pensar ue esto ser2a 3til: implementar un control de se"uridad propio % llevar estad2stica de acceso a las ta&las de almacenamiento. 4ui$ 5racle se pon"a las pilas en su pr#-ima versi#n. )e momento, la funcionalidad ue nos proporcionan los disparadores !acen imprescindi&le su conocimiento por los desarrolladores de aplicaciones so&re *)s. 2. e!inicin de tri""er

/os disparadores son procedimientos ue se ejecutan cuando se produce un suceso de &ase de datos 6una operaci#n )+/: I(,.7T, UP)8T. o )./.T.9 en una ta&la espec2fica. .l acto de ejecutar un disparador se conoce como disparo. #. $so de %os tri""ers /os disparadores pueden emplearse para muc!as cosas diferentes, inclu%endo: .l mantenimiento de restricciones de inte"ridad complejas, ue no sean posi&les con las restricciones declarativas definidas en el momento de crear la ta&la. 1
/a&oratorio de ,istemas de Informaci#n Facultad de Informtica Universidad Politcnica de Valencia

/a auditor2a de la informaci#n contenida en una ta&la, re"istrando los cam&ios reali$ados % la identidad del ue los llev# a ca&o. .l aviso automtico a otros pro"ramas de ue !a% ue llevar a ca&o una determinada acci#n, cuando se reali$a un cam&io en una ta&la.

&. Sinta'is "enera% de tri""er /o presentado en este apartado se !a e-tra2do desde :;<. /a sintaxis "eneral para crear un disparador es: 07.8T. :57 7.P/80.< T7I==.7 nombre0disparador > *.F57. ? 8FT.7 } suceso0disparo 5( re%erencia0tabla :F57 .801 75@ : @1.( condicin0disparo << cuerpo0disparador, donde nombre0disparador es el nom&re del disparador, suceso0disparo especifica cundo se activa el disparador, re%erencia0tabla es la ta&la para la cual se define el disparador % cuerpo0disparador es el c#di"o principal del disparador. 8ntes se eval3a la condicin0disparo incluida en la clusula @1.(, si es ue est presente. .l cuerpo del disparador se ejecuta s#lo cuando dic!a condici#n se eval3a como verdadera.

(. Co)ponentes de un disparador /os componentes de un disparador son el nom&re, el suceso de disparo % el cuerpo. /a clusula @1.( es opcional. (.1 No)*res de disparadores .l espacio de nom&res para los disparadores es diferente del de otros su&pro"ramas. .l espacio de nom&res es el conjunto de identificadores vlidos ue pueden emplearse como nom&res de un o&jeto. /os disparadores e-isten en un espacio de nom&res separado del de los procedimientos, pa uetes % ta&las, por lo ue un disparador puede tener el mismo nom&re ue una ta&la o procedimiento. ,in em&ar"o dentro de un mismo es uema de&en tener nom&res diferentes entre s2. (.2 Tipos de disparadores 2
/a&oratorio de ,istemas de Informaci#n Facultad de Informtica Universidad Politcnica de Valencia

.l suceso de disparo determina el tipo de disparador. /os disparadores pueden definirse para las operaciones I(,.7T, UP)8T. o )./.T., % pueden dispararse antes o despus de la operaci#n. Finalmente, el nivel de los disparadores puede ser la fila o la orden. /a Fi"ura A muestra los tipos de disparadores: Categora Orden Valores I(,.7T, )./.T., UP)8T. Temporiza *.F57. cin 8FT.7 Comentarios )efine u tipo de orden )+/ provoca la activaci#n del disparador.

o )efine si el disparador se activa antes o despus de ue se ejecute la orden 6disparador previo o posterior9. Nivel Fila u orden /os disparadores con nivel de fila se activan una ve$ por cada fila afectada por la orden ue provoc# el disparo. /os disparadores con nivel de orden se activan s#lo una ve$, antes o despus de la orden. /os disparadores con nivel de fila se identifican por la clusula F57 .801 75@ en la definici#n del disparador. Fi"ura A. Tipos de disparadores :;< isparadores de sustitucin 5racle B proporciona un tipo adicional de disparador. /os disparadores de sustituci#n 6 I(,T.8) 5F 9 pero tienen una serie de restricciones :C<: I(,T.8) 5F es una clusula vlida solo para vistas' no se puede especificar un disparador I(,T.8) 5F en una ta&la. ,i una vista tiene un disparador I(,T.8) 5F, cual uier vista creada so&re sta de&e tener a su ve$ un disparador I(,T.8) 5F. 0uando definimos disparadores I(,T.8) 5F para columnas /5*, podemos leer tanto el seudo-re"istro :5/) como el seudore"istro :(.@, pero no se puede modificar sus valores. (.# Restricciones de %os disparadores

3
/a&oratorio de ,istemas de Informaci#n Facultad de Informtica Universidad Politcnica de Valencia

.l cuerpo de un disparador es un &lo ue P/D,4/. 0ual uier orden ue sea le"al en un &lo ue P/D,4/, es le"al en el cuerpo de un disparador, con las si"uientes restricciones: A. Un disparador no puede emitir nin"una orden de control de transacciones: 05++IT, 75//*80E o ,8V.P5I(T. .l disparador se activa como parte de la ejecuci#n de la orden ue provoc# el disparo, % forma parte de la misma transacci#n ue dic!a orden. 0uando la orden ue provoca el disparo es confirmada o cancelada, se confirma o cancela tam&in el tra&ajo reali$ado por el disparador. ;. Por ra$ones idnticas, nin"3n procedimiento o funci#n llamado por el disparador puede emitir #rdenes de control de transacciones. C. .l cuerpo del disparador no puede contener nin"una declaraci#n de varia&les /5(= o /5(= 78@. F. .-isten restricciones acerca de a u ta&las puede acceder el cuerpo de un disparador. )ependiendo del tipo de disparador % de las restricciones ue afecten a las ta&las. +. E%i)inacin , des-a*i%itacin de %os disparadores /a sintaxis de la orden ue elimina un disparador es :F<: )75P T7I==.7 nombre0disparador' donde nombre0disparador es el nom&re del disparador ue se desea eliminar. .sta orden elimina el disparador de forma permanente del diccionario de datos. /a sintaxis de la orden ue des!a&ilita un disparador es :F<: 8/T.7 T7I==.7 nombre0disparador :)I,8*/. ? .(8*/.< donde nombre0disparador es el nom&re del disparador. Todos los disparadores estn !a&ilitados en el momento de su creaci#n. 0uando se des!a&ilita un disparador continua e-istiendo en el diccionario de datos. Tam&in se puede !a&ilitar o des!a&ilitar todos los disparadores de una ta&la determinada, utili$ando la orden 8/T.7 T8*/. con la clusula .(8*/. 8// T7I==.7, o )I,8*/. 8// T7I==.7,. .. Orden de acti/acin de %os disparadores /o presentado en este apartado se !a e-tra2do desde :;<. 4
/a&oratorio de ,istemas de Informaci#n Facultad de Informtica Universidad Politcnica de Valencia

/os disparadores se activan al ejecutarse la orden )+/. .l al"oritmo de ejecuci#n de una orden )+/ es el si"uiente: A. .jecutar, si e-iste, el disparador de tipo *.F57. 6disparador previo9 con nivel de orden. ;. Para cada fila a la ue afecte la orden: a. .jecutar, si e-iste, el disparador de tipo *.F57. con nivel de fila. &. .jecutar la propia orden. c. .jecutar, si e-iste, el disparador de tipo 8FT.7 6disparador posterior9 con nivel de fila. C. .jecutar, si e-iste, el disparador de tipo 8FT.7 con nivel de orden. 8. $ti%i0acin de 1o%d , 1ne2 en %os disparadores con ni/e% de !i%a Un disparador con nivel de fila se ejecuta una ve$ por cada fila procesada por la orden ue provoca el disparo. )entro del disparador puede accederse a la fila ue est siendo actualmente procesada utili$ando, para ello, dos seudo1registros, :old % :neG. /a Fi"ura ; muestra este concepto: Orden disparo INS RT de :old :new Valores ue sern insertados cuando se complete la orden. (uevos valores ue sern escritos cuando se complete la orden. (o definidos' todos los campos toman el valor (U//.

(o definido' todos los campos toman valor (U//. !"#$T Valores ori"inales de la fila, antes de la actuali$aci#n. # % T Valores, antes del &orrado de la fila. Fi"ura ;. :old % :neG :;< .l tipo de estos seudo1registros es : tabla0disparoH75@TIP.'

donde tabla0disparo es la ta&la so&re la disparador.

ue se !a definido el

/os re"istros :neG % :old son s#lo vlidos dentro de los disparadores con nivel de fila. ,i se intenta 1acer referencia a 5
/a&oratorio de ,istemas de Informaci#n Facultad de Informtica Universidad Politcnica de Valencia

cual uiera de los dos dentro de un disparador con nivel de orden, se o&tendr un error de compilaci#n. Puesto ue un disparador con nivel de orden se ejecuta una sola ve$, incluso si la orden procesa varias filas, entonces :old % :neG no tienen nin"3n sentido %a ue no se sa&e a ue fila se estn refiriendo. 3. La c%4usu%a 56EN /o presentado en este apartado se !a e-tra2do desde :;<. /a clusula @1.( s#lo es vlida para los disparadores con nivel de fila. ,i est presente, el cuerpo del disparador s#lo se ejecutar para las filas ue cumplan la condici#n especificada en la clusula. /a clusula @1.( tiene la forma: @1.( condicin donde condicin es una e-presi#n &ooleana ue ser evaluada para cada fila. ,e puede !acer tam&in referencia a los re"istros :neG % :old dentro de la condici#n, pero en ese caso no se utili$an los dos puntos. 17. $ti%i0acin de predicados de INSERTING8 $9 ATING , ELETING %os disparadores1

)entro de un disparador en el ue se disparan distintos tipos de #rdenes )+/ 6I(,.7T, UP)8T. % )./.T.9, !a% tres funciones &ooleanas ue pueden emplearse para determinar de u operaci#n se trata. .stos predicados son I(,.7TI(=, UP)8TI(= % )./.TI(=. ,u comportamiento es el si"uiente: /a Fi"ura C muestra el comportamiento de I(,.7TI(=, UP)8TI(= % )./.TI(= "redicado INS RTIN & !"#$TIN & # % TIN& Comportamiento T7U. si la orden de disparo es I(,.7T' F8/,. en otro caso. T7U. si la orden de disparo es UP)8T.' F8/,. en otro caso. T7U. si la orden de disparo es )./.T.' F8/,. en otro caso. Fi"ura C. I(,.7TI(=, UP)8TI(= % )./.TI(= :;<

6
/a&oratorio de ,istemas de Informaci#n Facultad de Informtica Universidad Politcnica de Valencia

11.

E:e)p%o

Un ejemplo de su uso es proporcionar una facilidad de auditor2a donde se reali$a automticamente un re"istro de actividades siempre ue se cam&ia una fila de una ta&la. ,in los disparadores de &ases de datos esta funcion ser2a implementada en los pro"ramas de seccion de entrada 6front-end9 ue reali$an el cam&io en la &ase de datos' sin em&ar"o al"uien ue se pase por alto el c#di"o de los pro"ramas de secci#n de entrada 6utili$ando ,4/JPlus, por ejemplo9 no pasar2a por las compro&aciones % el procesamiento definidos. ,up#n"ase ue tenemos una ta&la llamada ,8/ 6en la ue almacenamos los salarios de los empleados de la empresa9 % resulta necesario conocer cundo esta siendo accedida la ta&la % el tipo de operaci#n ue se reali$a. .l ejemplo ue presentamos a continuaci#n contiene un pa uete de muestra ue rastrea esta informaci#n re"istrando la !ora % la accion ejecutada 6UP)8T., )./.T., o I(,.7T9 en la ta&la ,8/. +ediante una varia&le "lo&al, ,T8T.75@0(T, iniciali$ada a cero por el tri""er *.F57. e incrementada cada ve$ ue un disparador con nivel de fila es ejecutado, tenemos la informacion estad2stica ue necesitamos salvar en el disparador 8FT.7. )75P T8*/. statKta&' 07.8T. T8*/. statKta&6ut%pe 01876B9, roGcnt I(T.=.7, u!our I(T.=.79' 07.8T. 57 7.P/80. P80E8=. stat I, roGcnt I(T.=.7' .()' 07.8T. T7I==.7 &t *.F57. UP)8T. 57 )./.T. 57 I(,.7T 5( sal *.=I( stat.roGcnt :L M' .()' 07.8T. T7I==.7 rt *.F57. UP)8T. 57 )./.T. 57 I(,.7T 5( sal F57 .801 75@ *.=I( stat.roGcnt :L stat.roGcnt N A' .()' 07.8T. T7I==.7 at 8FT.7 UP)8T. 57 )./.T. 57 I(,.7T 5( sal ).0/87. 7
/a&oratorio de ,istemas de Informaci#n Facultad de Informtica Universidad Politcnica de Valencia

t%p 01876B9' !our (U+*.7' *.=I( IF updatin" T1.( t%p :L OupdateO' .() IF' IF deletin" T1.( t%p :L OdeleteO' .() IF' IF insertin" T1.( t%p :L OinsertO' .() IF' !our :L T7U(066,I,)8T. - T7U(06,I,)8T.99 J ;F9' UP)8T. statKta& ,.T roGcnt L roGcnt N stat.roGcnt @1.7. ut%pe L t%p 8() u!our L !our' IF ,4/H75@05U(T L M T1.( I(,.7T I(T5 statKta& V8/U., 6t%p, stat.roGcnt, !our9' .() IF' .P0.PTI5( @1.( dupKvalKonKinde- T1.( UP)8T. statKta& ,.T roGcnt L roGcnt N stat.roGcnt @1.7. ut%pe L t%p 8() u!our L !our' .()' 12. Conc%usiones

/as restriciones de inte"ridad complejas ue refieren a varias ta&las % atri&utos no pueden ser especificadas en las definiciones de ta&las. .n cam&io, los tri""ers proveen una tcnica procedural para especificar % mantener restricciones de inte"ridad. Permiten especificar restricciones ms complejas %a ue un tri""er es esencialmente un procedimiento P/D,4/. 8!ora &ien, si es posi&le, de&en usarse restricciones para la compro&acion' son ms rpidas ue usar disparadores de &ase de datos. =racias a la posi&ilidad de tener multiples disparadores del mismo tipo para el mismo comando so&re cual uier ta&la se permite la instalacion modular de aplicaciones ue tienen tri""ers so&re las mismas ta&las. .n un tri""er no se de&e incluir muc!o codi"o sino ue resulta mas eficiente poner los se"mentos de codi"o mas lar"os dentro de un procedimiento %, despus, llamar al procedimiento desde el 8
/a&oratorio de ,istemas de Informaci#n Facultad de Informtica Universidad Politcnica de Valencia

disparador de la &ase de datos 6los procedimientos son almacenados en una forma compilada9. /os tri""ers son administrados de manera centrali$ada. ,e codifican una sola ve$, se prue&an % se fuer$a a ue todas las aplicaciones pasen por su control. /os tri""ers de&en ser controlados, o al menos auditados, por un administrador de *)s

1#.

Re!erencias

:A< !ttp:DDsol.inf.udec.clDQmvarasDpapersDvaldiviaDvaldivia.!tm Una Propuesta para la .specificaci#n de 7estricciones )inmicas en .s uemas 0onceptuales de *ases de )atos. :;< Urman, ,. 6ARRB9. 5780/. B. Pro"ramaci#n en P/D,4/. 5s&orne +c=raG-1ill, +adrid. :C< !ttp:DDoradoc.p!oto.netDoraBAD)50Dserver.BASDaTUUURDc!F!.!tm 5racleBi ,4/ 7eference 7elease B.A.S. :F< /a *i&lia de 5racleB, 8dvanced Information ,%stems, Inc. 8na%a +ultimedia. :S< !ttp:DDGGG.d&maVer.comDreferenceDmanualsDd&aDd&aKc!apKMR.!tml )ata&ase 8dministratorOs 7eference - )*+aVer 5nline D +anuals.

9
/a&oratorio de ,istemas de Informaci#n Facultad de Informtica Universidad Politcnica de Valencia

También podría gustarte