en Oracle puedo especificar las columnas, lo que debería inducir un disparo de un disparador:Oracle: excluyendo las actualizaciones de una columna para disparar un gatillo
create or replace trigger my_trigger
before update of col1, col2, col3 on my_table for each row
begin
// the trigger code will be executed only if col1 or col2 or col3 was updated
end;
Ahora quiero hacer lo siguiente: I don' t desea que se dispare el disparador, cuando se actualizó una sola columna. ¿Cómo es esto posible?
Pude enumerar todas las columnas excepto la que no debe inducir un disparo del gatillo. Esto es bastante engorroso para tablas con muchas columnas.
Otra forma sería la de utilizar la función de actualización de esta manera:
if not updating('COL3') then ...
Pero si cambiaba col1 y COL3 a la vez, la declaración se evalúa como falsa. Eso no es lo que quiero, ya que quiero restringir la ejecución cuando se actualizó una sola columna (COL3).
Es menos engorroso enumerar todas las columnas con el diccionario de datos. 'SELECCIONAR column_name FROM user_tab_columns WHERE table_name = 'MY_TABLE' AND column_name! = 'COL3';' –
Eso es cierto, pero alguien más tendrá que mantener el activador. Si agregamos una nueva columna o la cambiamos de nombre ... ya puedo escucharlo exclamar en voz alta. Me gustaría encontrar una manera confiable con menos dolor para él y especialmente para mí. ;-) –