mysql 触发器写update_mysql 触发器 if 语句 update

满意答案

00e27ab806e4881f8254fe7ae8741834.png

udsar9431

2013.11.10

00e27ab806e4881f8254fe7ae8741834.png

采纳率:48%    等级:13

已帮助:12490人

@sqlz ='select asd from flkg';

EXECUTE(@sqlz);

----------

首先,mysql下动态语句不是这样写的,另外,触发器里不能允许返回结果集的.

这里我是希望他能中断更新!

---------------------

你的意思是不是要中断后面的

"

SET amount =@amountmm

WHERE CODE=new.code AND whcode = new.whcode ;

"

这部分?

如果是的话,那这样改下:

DELIMITER $$

USE `eerp`$$

DROP TRIGGER /*!50032 IF EXISTS */ `material_update`$$

CREATE TRIGGER `material_update` AFTER UPDATE ON `sf_material`

FOR EACH ROW BEGIN

IF new.auditing = 'Y' THEN

SET @amountmm = (SELECT amount-new.amount FROM warehouse WHERE CODE=new.code AND whcode = new.whcode);

IF @amountmm >=0 THEN

UPDATE warehouse

SET amount =@amountmm

WHERE CODE=new.code AND whcode = new.whcode ;

END IF ;

END IF;

END;

$$

DELIMITER ;

&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&

"我是要中断更新。。不是后面。。。严格说就是这个表sf_material更新和后面的那个表warehouse更新也一起中断!"

---------------------------------------------------------------

因为mysql下触发器内不支持rollback,所以,变换一个方式来处理,如下:

那触发器部分这么写(注意:一定要使表TB_error_rollback在你的库中不允许存在):

CREATE TRIGGER `material_update`

BEFORE UPDATE

ON `sf_material`

FOR EACH ROW

BEGIN

IF new.auditing = 'Y' THEN

SET @amountmm = (SELECT amount- new.amount FROM warehouse WHERE CODE=new.code AND whcode = new.whcode);

IF @amountmm <0 THEN

update TB_error_rollback set name=1;

END IF;

UPDATE warehouse

SET amount =@amountmm

WHERE CODE=new.code AND whcode = new.whcode;

END IF;

END;

00分享举报

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值