2013-04-16 5 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

Я не утверждаю, что это, как это сделать, но, похоже, работает, и будет признателен за любые мнения. Thanks

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 ; 
Смежные вопросы