mysql 存储过程中能动态创建触发器吗_mysql – 从Trigger调用包含动态SQL的存储过程...

我从Trigger调用存储过程,我收到以下错误:

Dynamic SQL is not allowed in stored function or trigger

为什么会发生这种情况,动态SQL正在存储过程中执行,该过程从触发器调用.也许这就是问题,如果有的话有什么办法吗?

编辑(添加代码):

这是主表中的Trigger:

-- Trigger DDL Statements

DELIMITER $$

USE `TestaDataBase`$$

CREATE TRIGGER `TestaDataBase`.`UpdateAuxilaryTable`

AFTER INSERT ON `MainTable` FOR EACH ROW

BEGIN

/* Here we call stored procedure with parameter id of newly inserted row. */

CALL TestProcedure('Year', 'Person', 'IdPerson', NEW.IdData);

END

$$

这是从触发器调用的存储过程:

DELIMITER $$

CREATE PROCEDURE `TestDataBase`.`TestProcedure` (IN attribute CHAR(64), IN tableName CHAR(64), IN IdTable CHAR(64), IN IdLastRow MEDIUMINT)

BEGIN

DECLARE selectedValue MEDIUMINT;

SET @statement = CONCAT('SELECT ', attribute, ' FROM ', tableName, ' WHERE ', IdTable, ' = ', IdLastRow, ' INTO selectedValue');

PREPARE statementExecute FROM @statement;

EXECUTE statementExecute ;

...

...

END

解决方法:

您无法使用触发器中的预准备语句调用存储过程

有一种可能的解决方法,但是需要您编写一个UDF来为您执行动态sql,然后从您的过程中调用UDF.你可以在mysql的src,sql / udf_example.c中找到一个示例UDF.

标签:mysql,stored-procedures,triggers,dynamic-sql

来源: https://codeday.me/bug/20190620/1248865.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值