我有一个存储过程,它连接sql以执行插入/更新等操作。然而,我不喜欢它的调用方式(它的OT,但我使用node.js和调用存储过程是很难完成的,而且似乎没有太多的支持/文档)。
因此,我决定创建一个“简单的”mysql存储函数,它将基本上调用存储过程(使用几个IN参数调用函数,使用相同的IN参数加上OUT参数调用过程(来自函数) )。
但是,我得到一个错误:
Dynamic SQL is not allowed in stored function or trigger是的,我读过关于函数和动态sql是不允许的。但是:我正在从过程中执行动态sql,而不是从函数中。但是mysql仍然不喜欢它。对此有解决方案吗?我不认为我的代码有什么问题...
CREATE FUNCTION my_func(a varchar(50), b varchar(50), c varchar(50), d integer, e integer)
RETURNS INT(10)
DETERMINISTIC
BEGIN
set @theid = 0;
call my_proc(a, b, c, d, e, @theid);
RETURN (@theid);发布于 2014-08-16 02:58:27
Q:,但MySQL仍然不喜欢它。对此有解决方案吗?
不是的。
“函数中不允许使用动态SQL”限制也扩展到该函数调用的任何存储过程。
没有解决方案。没有解决方法。
这是不可能做到的:您不能在函数或触发器的上下文中使用动态SQL。
发布于 2014-08-16 03:00:09
我现在不能在代码中确认这一点,但我假设在给定的MySQL线程中,有一些与准备好的查询相关联的数据结构,每次只能存在一个。由于存储的函数或触发器是从查询(可能是动态SQL本身)中调用的,因此该函数或触发器不能启动新的动态SQL查询。
因此,动态SQL在过程中并不重要。您不能创建准备和执行动态SQL的存储函数,无论是目录还是间接的。
您可能正在尝试为已解决的问题找到解决方法。请参阅Is there a driver for mysql on nodejs that supports stored procedures?
https://stackoverflow.com/questions/25332353
复制相似问题