Workaround for dynamic statements in stored procedures called from triggers(从触发器调用的存储过程中的动态语句的解决方法)
问题描述
Mysql PREPARE
和 EXECUTE
语句不能在触发器调用的存储过程中使用.结果将是 Error Code: 1336. Dynamic SQL is not allowed in stored function or trigger
.
Mysql PREPARE
and EXECUTE
statements can not be used in a stored procedure that is being called by a trigger. The result would be Error Code: 1336. Dynamic SQL is not allowed in stored function or trigger
.
有人知道可行的解决方法吗?
Does anyone know a plausible work around to this?
推荐答案
你不能从 TRIGGER
内部运行 PREPARE
/EXECUTE
,但您可以从 EVENT
(如果您运行的是 MySQL 5.5 或更高版本).
You can't run PREPARE
/EXECUTE
from inside a TRIGGER
, but you can from an EVENT
(if you are running MySQL 5.5 or greater).
以下是从 EVENT
运行 PREPARE
/EXECUTE
的示例:
Here's an example of running PREPARE
/EXECUTE
from an EVENT
:
然后运行这个:
将产生此输出:
如果你不想使用 EVENT
,或者等待第二个左右让它触发,你可以在每个命令之后添加一个 CALL proc()
这会导致 TRIGGER
触发.
If you don't want to use an EVENT
, or wait the second or so for it to fire, you could add a CALL proc()
after every command that would cause a TRIGGER
to fire.
这篇关于从触发器调用的存储过程中的动态语句的解决方法的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!