2014-06-15 12 views
6

Có thể lặp qua tất cả các tên cột trong khi bên trong trình kích hoạt không?lặp qua các cột trong kích hoạt mysql

Kịch bản: Để ghi nhật ký tất cả các cột của bảng đã được sửa đổi. Nếu một số giá trị không thay đổi, không đăng nhập những giá trị đó.

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 $$ 

Đây là ví dụ về bản sao làm việc, bây giờ tôi cần lặp qua tất cả các cột có sẵn trong OLD hoặc MỚI.

Trả lời

-1

có, con trỏ có thể được thêm vào trong trình kích hoạt để lặp qua các cột. dưới đây là một vài liên kết:

mysql, iterate through column names

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

từ kinh nghiệm, nó có thể được dễ dàng hơn để tạo ra một thủ tục lưu trữ mà không được vòng lặp và chèn và gọi nó là từ cò

+1

Liên kết chỉ có câu trả lời được tán thành trên Stack Overflow. Nó sẽ là tốt hơn để bao gồm các điểm thích hợp trong bài này trong trường hợp các liên kết trở nên không hợp lệ. –

+0

Nó cũng không rõ ràng làm thế nào để sử dụng các giải pháp trong các liên kết bên trong một kích hoạt (nơi bạn cần truy cập OLD và NEW – adinas

Các vấn đề liên quan