【问题标题】:Using a stored proceedure in multiple triggers在多个触发器中使用存储过程
【发布时间】:2013-04-16 19:33:48
【问题描述】:

除了 notes 表之外,我还将这个相同的触发器应用于大约 15 个其他表。不确定,但似乎存储过程会消除重复的代码。这是存储过程的好应用程序吗?如果可以,如何实现?

CREATE TRIGGER tg_notes_ins BEFORE INSERT ON notes FOR EACH ROW
BEGIN
    IF NEW.created_by_user IS NULL OR NEW.created_by_user = '' THEN
        SET NEW.created_by_user = @users_id;
    END IF;
    IF NEW.modified_by_user IS NULL OR NEW.modified_by_user = '' THEN
        SET NEW.modified_by_user = @users_id;
    END IF;
END$$

CREATE TRIGGER tg_notes_upd BEFORE UPDATE ON notes FOR EACH ROW
BEGIN
    IF NEW.modified_by_user = OLD.modified_by_user THEN
        SET NEW.modified_by_user = @users_id;
    END IF;
END$$

【问题讨论】:

    标签: mysql sql stored-procedures triggers


    【解决方案1】:

    我并不是说这是如何做到的,但它似乎有效,并且希望得到任何意见。谢谢

    DELIMITER $$
    
    CREATE PROCEDURE `createRecord` ()
    BEGIN
        IF NEW.created_by_user IS NULL OR NEW.created_by_user = '' THEN
            SET NEW.created_by_user = @users_id;
        END IF;
        IF NEW.modified_by_user IS NULL OR NEW.modified_by_user = '' THEN
            SET NEW.modified_by_user = @users_id;
        END IF;
    END$$
    
    CREATE PROCEDURE `modifyRecord` ()
    BEGIN
        IF NEW.modified_by_user = OLD.modified_by_user THEN
            SET NEW.modified_by_user = @users_id;
        END IF;
    END$$
    
    CREATE TRIGGER tg_notes_upd BEFORE UPDATE ON notes FOR EACH ROW
    BEGIN
        CALL createRecord();
    END$$
    
    CREATE TRIGGER tg_notes_ins BEFORE INSERT ON notes FOR EACH ROW
    BEGIN
        CALL modifyRecord();
    END$$
    
    DELIMITER ;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-01-18
      • 2013-09-12
      • 1970-01-01
      • 1970-01-01
      • 2021-06-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多