我可以在 TRIGGER 中创建一个 MYSQL TRIGGER WITH 或条件吗
Posted
技术标签:
【中文标题】我可以在 TRIGGER 中创建一个 MYSQL TRIGGER WITH 或条件吗【英文标题】:Can I create a MYSQL TRIGGER WITH or condition in TRIGGER 【发布时间】:2017-12-18 06:34:30 【问题描述】:我可以创建一个 MYSQL 带 OR 条件的触发器
创建或替换触发器名称 在插入之前或更新或删除
喜欢这个(下面是一个 ORACLE 触发器):
CREATE OR REPLACE TRIGGER TRIGERNAME_XYZ
BEFORE INSERT OR UPDATE OR DELETE
ON TABLE_NAME_ABC
REFERENCING OLD as OLD NEW as NEW
FOR EACH ROW
DECLARE
mAppUserCode VARCHAR2(50);
mOSUser VARCHAR2(100);
mAppUserName VARCHAR2(100);
mModuleName VARCHAR2(100);
mChangeID NUMBER;
BEGIN
SELECT APP_USERCODE, OS_USER, APP_USERNAME, MODULE_NAME INTO mAppUserCode, mOSUser, mAppUserName, mModuleName FROM DB_SESSION_VIEW;
SELECT CHANGE_ID_SEQ.NEXTVAL INTO mChangeID FROM DUAL;
IF INSERTING THEN
:NEW.CREATED_BY_MODULE := mModuleName;
:NEW.CREATED_BY_USER_CODE := mAppUserCode;
:NEW.CREATED_BY_OS_USER := mOSUser;
:NEW.CREATED_BY_USER_NAME := mAppUserName;
:NEW.CREATED_ON := sysdate;
:NEW.CHG_ID := mChangeID ;
ELSIF UPDATING THEN
:NEW.CHANGED_BY_MODULE := mModuleName;
:NEW.CHANGED_BY_USER_CODE := mAppUserCode;
:NEW.CHANGED_BY_OS_USER := mOSUser;
:NEW.CHANGED_BY_USER_NAME := mAppUserName;
:NEW.CHANGED_ON := sysdate;
:NEW.CHG_ID := mChangeID ;
END IF;
END;
/
在 MYSQL 中是否可以使用 OR 条件创建触发器??
同样在 phpmyadmin 中,事件部分没有添加 or 条件的选项,即选择 INSERT ,UPDATE AND DELETE 没有规定放置在插入或更新或删除之前 所以我的问题是,是否有可能像上面的 Oracle 触发器一样?
【问题讨论】:
试一试,亲眼看看 【参考方案1】:我认为 mysql 没有为单个触发器提供多个事件。你能做什么。您只需创建一个 procedure
并在该过程中按原样编写整个逻辑。
将 NEW 和 OLD 值作为该过程的参数。
并从所有三个触发器中调用该过程。
【讨论】:
以上是关于我可以在 TRIGGER 中创建一个 MYSQL TRIGGER WITH 或条件吗的主要内容,如果未能解决你的问题,请参考以下文章