2013-04-16 24 views
0

除了笔记表之外,我将这个相同的触发器应用于大约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$$ 

回答

0

我不是声称这是如何做到这一点,但它似乎工作,并会感谢任何意见。谢谢

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 ; 
相关问题