in Oracle posso specificare le colonne, che dovrebbe indurre una cottura di un trigger:Oracle: escludendo gli aggiornamenti di una colonna per la cottura di un trigger
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;
Ora voglio fare quanto segue: I don' t desidera che il trigger si attivi, quando è stata aggiornata una sola colonna. Com'è possibile?
Potrei elencare tutte le colonne tranne quella, che non dovrebbe indurre un innesco del trigger. Questo è piuttosto ingombrante per le tabelle con molte colonne.
Un altro modo sarebbe quello di utilizzare la funzione AGGIORNAMENTO come questo:
if not updating('COL3') then ...
Ma se ho cambiato COL1 e COL3 in una sola volta, l'affermazione è falsa. Questo non è ciò che voglio poiché, voglio limitare l'esecuzione quando è stata aggiornata una sola colonna (COL3).
È meno ingombrante elencare tutte le colonne utilizzando il dizionario dati. 'SELECT nome_colonna FROM user_tab_columns WHERE table_name = 'MY_TABLE' AND column_name! = 'COL3';' –
È vero, ma qualcun altro dovrà mantenere il trigger. Se dovessimo aggiungere una nuova colonna o rinominarla ... posso già sentirlo esclamare ad alta voce. Mi piacerebbe trovare un modo affidabile con meno dolore per lui e soprattutto per me. ;-) –