114 - Disparador de actualizacion - campos (updating)


En un trigger de actualización a nivel de fila, se puede especificar el nombre de un campo en la condición "updating" para determinar cuál campo ha sido actualizado.

Sintaxis básica:

 create or replace trigger NOMBRETRIGGER
 MOMENTO update...
 begin
  if updating ('CAMPO') then
   ...
  end if;
end NOMBREDISPARADOR;

El siguiente trigger se dispara cuando se actualiza la tabla "libros". Dentro del cuerpo del trigger se averigua el campo que ha sido modificado; en caso de modificarse el "precio", se ingresa en la tabla "controlPrecios" la fecha, el código del libro y el antiguo y nuevo precio; en caso de actualizarse cualquier otro campo, se almacena en la tabla "control" el nombre del usuario que realizó la modificación, la fecha y el código del libro modificado.

 create or replace trigger tr_actualizar_libros
 before update
 on libros
 for each row
 begin
  if updating ('precio') then
   insert into controlprecios values(sysdate,:old.codigo,:old.precio,:new.precio);
  else
   insert into control values(user,sysdate,:old.codigo);
  end if;
end tr_actualizar_libros;


Retornar