2013-04-16 26 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 ; 
相關問題