После обновления триггер не работает соответственно, если нулевые значения в столбце - PullRequest
1 голос
/ 12 декабря 2011

Я создаю триггер, подобный этому

CREATE TRIGGER trigger_academictermregistration AFTER UPDATE ON academictermregistration FOR EACH ROW
BEGIN
    DECLARE summary TEXT(65535);
    SET summary = '';
    IF(NEW.version <> OLD.version) THEN
        SET summary = concat(summary, '    @VER: ', OLD.version, '-->', NEW.version);
    END IF;
    IF(NEW.isDeleted <> OLD.isDeleted) THEN
        SET summary = concat(summary, '    @IS_DELETED: ', OLD.isDeleted, '-->', NEW.isDeleted);
    END IF;

    INSERT INTO auditinfo (entityId, entityName, importance, details, modifiedOn, modifiedBy)
        VALUE (NEW.id, 'AcademicTermRegistration', 1, summary, NOW(), NEW.modifiedBy);

    IF(NEW.id <> OLD.id) THEN
        INSERT INTO auditinfo (entityId, entityName, importance, details, timestamp, user_id)
        VALUE (OLD.id, 'AcademicTermRegistration', 5, concat('ID: ', OLD.id, '-->', NEW.id), NOW(), 'backend');
    END IF;
END

У меня есть триггер, подобный этому, и он отслеживает изменения, внесенные в значения столбцов после обновления таблицы, но если какое-либо из значений является нулевым (скажем, isDeleted), то после обновления этого значения до ненулевого значения В таблице audinfo нет подробной информации

1 Ответ

1 голос
/ 12 декабря 2011

Из ссылки - CONCAT () возвращает NULL, если какой-либо аргумент равен NULL.

Используйте функцию COALESCE , например, -

SET summary = CONCAT(summary, '    @IS_DELETED: ', COALESCE(OLD.isDeleted, 'NULL'), '-->', COALESCE(NEW.isDeleted, 'NULL'));

Также вы можете использовать функцию CONCAT_WS () , она пропускает любые значения NULL после аргумента разделителя -

SET summary = CONCAT_WS('', summary, '    @IS_DELETED: ', OLD.isDeleted, '-->', NEW.isDeleted);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...