0

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$$
4

1 に答える 1

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 ;
于 2013-04-18T01:11:10.243 に答える