MySQL存储过程中使用动态sql语句

MySQL存储过程中使用动态sql语句,第1张

MySQL的存储过程在5.0后的版本中支持了动态sql语句。也就是说我们可以通过传的参数不同拼接查询不同的表或执行不同的语句。

如:需要根据不同的游戏ID去增加 TGameData_ID 表中玩家对应的金币数。

如:需要根据不同的游戏ID去 TGameData_ID 表中查询玩家对应的金币数,数量足够减去,数量不够不减。

鉴于动态处理语句目前不能在MySQL的触发器或者存储函数中使用, 但是可以在存储过程里面使用。那么我们可以用通用的方法,但是可能要修改应用的部分SQL代码,不过改动量很小。

假如我们要使用表TB, 然后依次关联TB1,TB2,… , TBN进行删除。我们可以把做处理的动态语句写到存储过程里面,然后在对表TB进行写 *** 作(INSERT,UPDATE,DELETE)时, 加上对存储过程的调用即可。

我们来举个例子:

Delete from tb where id = 2本来只有这条语句,可我们修改为:

Delete from tb where id = 2call sp_delete_case()

@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

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


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/8626479.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-19
下一篇 2023-04-19

发表评论

登录后才能评论

评论列表(0条)

保存