반응형
OLD에서 각각의 차이를 확인하는 방법.* MySQL 트리거에서 NEW.* 열로 이동하시겠습니까?
SQL에는 다음이 없기 때문에FOR-EACH
statement, 우리는 어떻게 각 값에 차이가 있는지 확인할 수 있습니까?OLD
에 반대하는NEW
a의 목적어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
반응형
'source' 카테고리의 다른 글
워드프레스 - 역할이 없는 모든 사용자 삭제 (0) | 2023.09.21 |
---|---|
MySQL 사용자 백업 (0) | 2023.09.21 |
내부에 추가할 수 있습니까?후손의 이벤트 청취자를 파괴하지 않고 HTML? (0) | 2023.09.21 |
Vim endent xml 파일 (0) | 2023.09.21 |
Oracle 19c에서 large json을 clob에 반환할 때 ORA-40478 (0) | 2023.09.21 |