【发布时间】:2017-09-24 19:35:28
【问题描述】:
我在 mysql 上创建触发器时遇到异常,在下面粘贴我的触发器。我希望此触发器中的 prepare 语句抛出此异常,请纠正我的语法错误。
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 ;
【问题讨论】:
-
你想在这个触发器中完成什么?为什么要构建动态 SQL 语句? (这是相当不寻常和冒险的!)
-
我需要这个触发器来获取应用数据。
-
这真的不能解释你想要做什么。能举个更有代表性的例子吗? (当然,您的触发器不会在每次激活时都插入相同的数据……)
-
即样本触发,没有原始数据
-
SQL prepared statements (PREPARE, EXECUTE, DEALLOCATE PREPARE) can be used in stored procedures, but not stored functions or triggers.。见C.1 Restrictions on Stored Programs。
标签: mysql dynamic-sql database-trigger