在存储函数或触发器问题中,不允许动态SQL,但在mysql上创建触发器时
我在mysql上创建触发器时发生异常,粘贴下面的触发器片段。我希望在这个触发器中的prepare语句抛出这个异常,请纠正我语法中的任何错误。在存储函数或触发器问题中,不允许动态SQL,但在mysql上创建触发器时
DELIMITER $$
CREATE DEFINER=`root`@`localhost` TRIGGER mysql_common.mysql_alert_trigger after insert on mysql_common.alert FOR EACH ROW
BEGIN
set @col_string = "col1,col2,col3";
set @val_string = "('val1','val2','val3')";
SET @s := CONCAT('INSERT into msql_common.seperated_processlist(',@col_string,') values ', @val_string);
PREPARE dynamic_statement FROM @s;
EXECUTE dynamic_statement;
DEALLOCATE PREPARE dynamic_statement;
END $$
DELIMITER ;
DELIMITER $$
CREATE DEFINER=`root`@`localhost` TRIGGER mysql_common.mysql_alert_trigger after insert on mysql_common.alert FOR EACH ROWEACH ROW
BEGIN
call SOME_PROC();
END $$
DELIMITER ;
你可以写一个程序与您的业务逻辑,并呼吁从触发这一程序,如上面的code.with特定的输入和输出参数。
DELIMITER $$
CREATE DEFINER=`root`@`localhost` PROCEDURE `SOME_PROC`()
BEGIN
set @col_string = "col1,col2,col3";
set @val_string = "('val1','val2','val3')";
SET @s := CONCAT('INSERT into msql_common.seperated_processlist(',@col_string,') values ', @val_string);
PREPARE dynamic_statement FROM @s;
EXECUTE dynamic_statement;
DEALLOCATE PREPARE dynamic_statement;
END$$
DELIMITER ;
希望这会有所帮助。
感谢您的建议 –
@AshokSri是否解决了您的问题? –
虽然您可以在存储过程中创建预准备语句,但在触发器的上下文中,您无法调用执行预准备语句的存储过程,但会抛出问题中指示的错误。 – wchiquito
你想在这个触发器中完成什么?你为什么要构造一个动态的SQL语句? (这是非常不寻常的和冒险的!) – duskwuff
我需要这个触发器来处理应用程序数据。 –
这实际上并不能解释你想要做什么。你能举一个更具代表性的例子吗? (当然,触发器在每次激活时都不插入相同的数据...) – duskwuff