您的位置:首页 > 数据库 > MySQL

Write Trigger MySQL

2016-03-04 13:58 453 查看
When update Trigger,we should drop it and then ctreate it.

NEW==> prepare to write in db with data

OLD==>old data

-- TB_WH_INVENTORY create trigger, TRANSACTION_TYPE=I, DocumentReceive=Y
-- OR TB_WH_INVENTORY create trigger, TRANSACTION_TYPE=I, DocumentReceive=N
DROP TRIGGER
IF EXISTS TRG_WAREHOUSE_OPS_IMP_INSERT;
DELIMITER $$
CREATE TRIGGER TRG_WAREHOUSE_OPS_IMP_INSERT AFTER INSERT ON TB_WH_INVENTORY
FOR EACH ROW
BEGIN
DECLARE jobEventId INTEGER;
DECLARE jobParentId INTEGER;
DECLARE etaJobEventId INTEGER;
DECLARE transactionDate datetime;
-- TB_WH_INVENTORY create trigger, TRANSACTION_TYPE=I, DocumentReceive=Y
IF NEW.TRANSACTION_TYPE='I' AND NEW.IS_FILE='Y' AND NEW.JOB_ID IS NOT NULL THEN
SET @jobParentId=IF((@mapParentId:=(SELECT JE.PARENT_ID FROM TB_JOB JE WHERE JE.ID = NEW.JOB_ID)) IS NOT NULL,@mapParentId,-1);
IF @jobParentId>0 THEN

SET @transactionDate = (SELECT WH.TRANSACTION_DATE FROM TB_WH_INVENTORY WH WHERE WH.JOB_ID = NEW.JOB_ID AND WH.TRANSACTION_TYPE='I' AND WH.IS_FILE='Y' ORDER BY WH.TRANSACTION_DATE DESC LIMIT 0,1);
SET @jobEventId = IF((@mapCode:=(SELECT JE.ID FROM TB_JOB_EVENT JE WHERE JE.JOB_ID = @jobParentId AND JE.EVENT_CODE = 'FRD')) IS NOT NULL,@mapCode,-1);
IF @jobEventId > 0 THEN
UPDATE TB_JOB_EVENT SET EVENT_TIMESTAMP = @transactionDate,UPDATE_BY = NEW.UPDATE_BY,UPDATE_TIMESTAMP = NOW() WHERE ID = @jobEventId AND EVENT_CODE = 'FRD';
ELSE
INSERT INTO TB_JOB_EVENT(JOB_ID,EVENT_ID,EVENT_CODE,EVENT_TIMESTAMP,CREATE_BY,CREATE_TIMESTAMP,UPDATE_BY,UPDATE_TIMESTAMP)
VALUES(@jobParentId,(SELECT ID FROM TB_EVENT WHERE EVENT_CODE = 'FRD'),'FRD',@transactionDate,NEW.UPDATE_BY,NOW(),NEW.UPDATE_BY,NOW());
END IF;
END IF;
END IF;

-- TB_WH_INVENTORY create trigger, TRANSACTION_TYPE=I, DocumentReceive=N
IF NEW.TRANSACTION_TYPE='I' AND NEW.IS_FILE='N' AND NEW.JOB_ID IS NOT NULL THEN
SET @jobParentId=IF((@mapParentId:=(SELECT JE.PARENT_ID FROM TB_JOB JE WHERE JE.ID = NEW.JOB_ID)) IS NOT NULL,@mapParentId,-1);
IF @jobParentId>0 THEN
SET @transactionDate = (SELECT WH.TRANSACTION_DATE FROM TB_WH_INVENTORY WH WHERE WH.JOB_ID = NEW.JOB_ID AND WH.TRANSACTION_TYPE='I' AND WH.IS_FILE='N' ORDER BY WH.TRANSACTION_DATE DESC LIMIT 0,1);
SET @etaJobEventId = IF((@mapCode:=(SELECT JE.ID FROM TB_JOB_EVENT JE WHERE JE.JOB_ID = @jobParentId AND JE.EVENT_CODE = 'FND')) IS NOT NULL,@mapCode,-1);
IF @etaJobEventId > 0 THEN
UPDATE TB_JOB_EVENT SET EVENT_TIMESTAMP = @transactionDate,UPDATE_BY = NEW.UPDATE_BY,UPDATE_TIMESTAMP = NOW() WHERE ID = @etaJobEventId AND EVENT_CODE = 'FND';
ELSE
INSERT INTO TB_JOB_EVENT(JOB_ID,EVENT_ID,EVENT_CODE,EVENT_TIMESTAMP,CREATE_BY,CREATE_TIMESTAMP,UPDATE_BY,UPDATE_TIMESTAMP)
VALUES(@jobParentId,(SELECT ID FROM TB_EVENT WHERE EVENT_CODE = 'FND'),'FND',@transactionDate,NEW.UPDATE_BY,NOW(),NEW.UPDATE_BY,NOW());
END IF;
END IF;
END IF;
END $$

-- TB_WH_INVENTORY create trigger, TRANSACTION_TYPE=I, DocumentReceive=Y
-- OR TB_WH_INVENTORY create trigger, TRANSACTION_TYPE=I, DocumentReceive=N
DROP TRIGGER
IF EXISTS TRG_WAREHOUSE_OPS_IMP_UPDATE_FRD_OR_FND;
DELIMITER $$
CREATE TRIGGER TRG_WAREHOUSE_OPS_IMP_UPDATE_FRD_OR_FND AFTER UPDATE ON TB_WH_INVENTORY
FOR EACH ROW
BEGIN
DECLARE jobEventId INTEGER;
DECLARE jobParentId INTEGER;
DECLARE etaJobEventId INTEGER;
DECLARE transactionDate datetime;
-- TB_WH_INVENTORY create trigger, TRANSACTION_TYPE=I, DocumentReceive=Y
IF NEW.TRANSACTION_TYPE='I' AND NEW.IS_FILE='Y' AND NEW.JOB_ID <> OLD.JOB_ID THEN
SET @jobParentId=IF((@mapParentId:=(SELECT JE.PARENT_ID FROM TB_JOB JE WHERE JE.ID = NEW.JOB_ID)) IS NOT NULL,@mapParentId,-1);
IF @jobParentId>0 THEN
SET @transactionDate = (SELECT WH.TRANSACTION_DATE FROM TB_WH_INVENTORY WH WHERE WH.JOB_ID = NEW.JOB_ID AND NEW.TRANSACTION_TYPE='I' AND NEW.IS_FILE='Y' ORDER BY WH.TRANSACTION_DATE DESC LIMIT 0,1);
SET @jobEventId = IF((@mapCode:=(SELECT JE.ID FROM TB_JOB_EVENT JE WHERE JE.JOB_ID = @jobParentId AND JE.EVENT_CODE = 'FRD')) IS NOT NULL,@mapCode,-1);
IF @jobEventId > 0 THEN
UPDATE TB_JOB_EVENT SET EVENT_TIMESTAMP = @transactionDate,UPDATE_BY = NEW.UPDATE_BY,UPDATE_TIMESTAMP = NOW() WHERE ID = @jobEventId AND EVENT_CODE = 'FRD';
ELSE
INSERT INTO TB_JOB_EVENT(JOB_ID,EVENT_ID,EVENT_CODE,EVENT_TIMESTAMP,CREATE_BY,CREATE_TIMESTAMP,UPDATE_BY,UPDATE_TIMESTAMP)
VALUES(@jobParentId,(SELECT ID FROM TB_EVENT WHERE EVENT_CODE = 'FRD'),'FRD',@transactionDate,NEW.UPDATE_BY,NOW(),NEW.UPDATE_BY,NOW());
END IF;
END IF;
END IF;

-- TB_WH_INVENTORY create trigger, TRANSACTION_TYPE=I, DocumentReceive=N
IF NEW.TRANSACTION_TYPE='I' AND NEW.IS_FILE='N' AND NEW.JOB_ID <> OLD.JOB_ID THEN
SET @jobParentId=IF((@mapParentId:=(SELECT JE.PARENT_ID FROM TB_JOB JE WHERE JE.ID = NEW.JOB_ID)) IS NOT NULL,@mapParentId,-1);
IF @jobParentId>0 THEN
SET @transactionDate = (SELECT WH.TRANSACTION_DATE FROM TB_WH_INVENTORY WH WHERE WH.JOB_ID = NEW.JOB_ID AND NEW.TRANSACTION_TYPE='I' AND NEW.IS_FILE='N' ORDER BY WH.TRANSACTION_DATE LIMIT 0,1);
SET @etaJobEventId = IF((@mapCode:=(SELECT JE.ID FROM TB_JOB_EVENT JE WHERE JE.JOB_ID = @jobParentId AND JE.EVENT_CODE = 'FND')) IS NOT NULL,@mapCode,-1);
IF @etaJobEventId > 0 THEN
UPDATE TB_JOB_EVENT SET EVENT_TIMESTAMP = @transactionDate,UPDATE_BY = NEW.UPDATE_BY,UPDATE_TIMESTAMP = NOW() WHERE ID = @etaJobEventId AND EVENT_CODE = 'FND';
ELSE

INSERT INTO TB_JOB_EVENT(JOB_ID,EVENT_ID,EVENT_CODE,EVENT_TIMESTAMP,CREATE_BY,CREATE_TIMESTAMP,UPDATE_BY,UPDATE_TIMESTAMP)
VALUES(@jobParentId,(SELECT ID FROM TB_EVENT WHERE EVENT_CODE = 'FND'),'FND',@transactionDate,NEW.UPDATE_BY,NOW(),NEW.UPDATE_BY,NOW());
END IF;
END IF;
END IF;
END $$
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: