mysql存储函数调用动态存储过程

时间:2014-08-15 18:48:48

标签: mysql node.js stored-procedures stored-functions

我有一个存储过程,它连接sql以进行插入/更新等。 存储过程有效。 但是,我不喜欢它所调用的方式(它的OT但我使用node.js并调用存储过程很难完成,并且似乎没有太多的支持/文档​​)。

所以我决定创建一个“简单”的mysql存储函数,它基本上会调用存储过程(用几个IN参数调用函数,程序(来自函数)用相同的IN参数调用PLUS 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);

2 个答案:

答案 0 :(得分:0)

问:但MySQL仍然不喜欢它。有解决方案吗?

没有

“函数中不允许动态SQL”限制也扩展到函数调用的任何存储过程。

没有解决方案。没有解决方法。

这根本无法完成:您无法在函数或触发器的上下文中使用动态SQL。

答案 1 :(得分:0)

我现在无法在代码中确认这一点,但我认为有一些数据结构与准备好的查询相关联,这些数据结构在给定的MySQL线程中一次只能存在一个。由于从查询(可能是动态SQL本身)调用存储的函数或触发器,因此函数或触发器无法启动新的动态SQL查询。

因此动态SQL在一个过程中并不重要。您无法创建准备和执行动态SQL的存储函数,无论是目录还是间接。

您可能正在尝试找到已解决问题的解决方法。见Is there a driver for mysql on nodejs that supports stored procedures?