如何解决在MySQL触发器中循环以逗号分隔的列表
在mysql触发器中,我需要遍历逗号分隔的列表,并对列表中的每个项目执行查询
DELIMITER $$
DROP trigger IF EXISTS my_trigger $$
CREATE TRIGGER my_trigger AFTER UPDATE ON my_table
FOR EACH ROW BEGIN
SET @id = NEW.id;
SET @item_str = NEW.item_str; -- This is a comma separated list of integers like "34,1,200,99"
/*DYNAMIC SECTION*/
SET @item_list = CONCAT('''',REPLACE(REPLACE(@item_str,' ',''),',QUOTE(',')),'''');
SET @list_stub = REPLACE(@item_list,'');
SET @list_count = LENGTH(@item_list) - LENGTH(@list_stub) + 1;
-- Loop through list of items
SET @x = 0;
WHILE @x < @list_count DO
SET @x = @x + 1;
SET @sql = CONCAT('SELECT ELT(',@x,@item_list,') INTO @item');
PREPARE s FROM @sql; EXECUTE s; DEALLOCATE PREPARE s;
SET @sql = CONCAT('INSERT IGNORE INTO new_table (id,item) VALUES(',@id,@item,')' );
PREPARE s FROM @sql; EXECUTE s; DEALLOCATE PREPARE s;
END WHILE;
END $$
DELIMITER ;
这给了我错误:
ERROR 1336 (0A000): Dynamic SQL is not allowed in stored function or trigger
由于“动态部分”在存储过程中运行良好,因此我尝试将该部分移至单独的过程,然后从此触发器中调用它:
相同的错误!
我在主题(Loop in trigger with comma separated values mysql)上找到的最接近的问题看起来很苗条,没有帮助。该答案中包含的链接实际上是无效的。无论如何,它都会使用临时表的创建,我怀疑这会引发该用户的权限问题。
至少有解决方法?如何遍历此列表并使用每个值执行查询?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。