source

OLD에서 각각의 차이를 확인하는 방법.* MySQL 트리거에서 NEW.* 열로 이동하시겠습니까?

factcode 2023. 9. 21. 21:33
반응형

OLD에서 각각의 차이를 확인하는 방법.* MySQL 트리거에서 NEW.* 열로 이동하시겠습니까?

SQL에는 다음이 없기 때문에FOR-EACHstatement, 우리는 어떻게 각 값에 차이가 있는지 확인할 수 있습니까?OLD에 반대하는NEWa의 목적어AFTER UPDATE유형TRIGGER테이블 열 [및 테이블 이름]을 모르는 상태에서?

오늘의 예:

CREATE TRIGGER `audit_events_ugly`
AFTER UPDATE ON `accounts`
FOR EACH ROW
BEGIN
       DECLARE changes VARCHAR(8000);
       IF OLD.user_name <> NEW.user_name THEN
            SET changes = 'user_name from % to %';
       END IF;
       IF OLD.user_type <> NEW.user_type THEN
            SET changes = CONCAT(changes, ', user_type from % to %');
       END IF;
       IF OLD.user_email <> NEW.user_email THEN
            SET changes = CONCAT(changes, ', user_email from % to %');
       END IF;
       CALL reg_event(how_canI_get_tableName?, @user_id, changes);
       -- and that can go on and on... differently for every table.
END;

내가 원하는 예는 다음과 같습니다.

CREATE TRIGGER `audit_events_nice`
AFTER UPDATE ON `accounts`
FOR EACH ROW
BEGIN
       DECLARE changes VARCHAR(8000);
       DECLARE N INT DEFAULT 1;
       FOREACH OLD, NEW as OldValue, NewValue 
       BEGIN
              IF OldValue <> NewValue THEN
              SET changes = CONCAT(changes, ', column N: % to %');
              SET N = N + 1;
       END IF;
       CALL reg_event(how_canI_get_tableName?, @user_id, changes);
       -- now I can paste this code in every table that is audited..
END;

좋은 생각 있어요?그 동안에, 각자, 배열들...

트리거 레벨의 포루프에서는 직접 그렇게 할 수 없다고 생각합니다.

그러나 스크립트를 사용하여 트리거 코드를 생성할 수도 있습니다.테이블에 필드를 추가/제거할 때마다 필드를 다시 생성해야 합니다(보통 자주는 아님).

언급URL : https://stackoverflow.com/questions/35632152/how-to-check-difference-in-each-on-old-to-new-column-in-a-mysql-trigger

반응형