2014-06-15 28 views
6

È possibile eseguire il ciclo di tutti i nomi di colonna all'interno di un trigger?loop in colonne nel trigger mysql

Scenario: Per registrare tutte le colonne di una tabella che sono state modificate. Se alcuni valori non sono cambiati, non registrare quelli.

DROP TRIGGER IF EXISTS t_before_update_test; 
DELIMITER $$ 
CREATE TRIGGER t_before_update_test 
BEFORE UPDATE ON test 
FOR EACH ROW 
BEGIN 
    -- Loop here for all columns, not just col1 
    IF OLD.col1 <> NEW.col1 THEN 
     INSERT INTO change_logs(
      log_on, user_id, 
      table_name, colum_name, 
      old_data, new_data 
     ) VALUES (
      UNIX_TIMESTAMP(NOW()), '0', 
      'test', 'col1', 
      OLD.col1, NEW.col1 
     ); 
    END IF; 
    -- process looping all columns 
    -- col1, col2, ... should be dynamic per loop 
END $$ 

Questo è un esempio di copia funzionante, dove ora ho bisogno di scorrere tutte le colonne disponibili in OLD o NEW.

risposta

-1

sì, un cursore può essere aggiunto all'interno di un trigger per scorrere le colonne. qui sono un paio di link:

mysql, iterate through column names

https://dba.stackexchange.com/questions/22925/mysql-loop-over-cursor-results-ends-ahead-of-schedule

per esperienza, potrebbe essere più facile per creare una stored procedure che fa le looping e gli inserti e chiamarlo dal grilletto

+1

link solo le risposte sono disapprovate su Stack Overflow. Sarebbe meglio includere i punti pertinenti in questo post nel caso in cui i link diventino non validi. –

+0

Inoltre non è chiaro come utilizzare la soluzione in questi collegamenti all'interno di un trigger (dove è necessario accedere a OLD e NEW – adinas

Problemi correlati