node mysql数据库模块调用存储过程问题
发布于 17 天前 作者 SKandAV 1240 次浏览 最后一次编辑是 16 天前 来自 问答

小弟之前的连的数据库是sqlserver,所以连接模块用的mssql。这个连接模块对应存储过程的调用有很多资料。所以没啥问题。现在的需要是换成mysql,那我想,mysql应该更容易,因为npm上明显mysql的下载量比mssql多得多。然而一般的sql语句都没问题。但是到调用存储过程的时候就发现问题了。我找了一下发现都没有怎么写这方面的,包括输入参数和参数类型和输出参数。瞬间傻了。npm上的只有几句话,例子都没有。

这个就看不太出来输入参数和输出参数怎么定义。 然后我百度找了一下。也没找到啥。所以想问问老哥们。去哪找个demo之类。想知道一下调用过程是怎么样的,还有参数的定义,存储过程是已经写好了的。就是调用的事。

13 回复

如果用这个包的话,这样写

 conn.query(sql, args, (error, result) => {})
 args 是个数组

存储过程一样

@im-here 老哥,我在稍微问细一点啊,args这个数组是不是包括输入参数和输出参数呢,比如我要调用的存储过程名字是AAABBB,他需要3个输入参数,一个int型的 1,然后一个是字符串类型的 ’abc‘,还有一个是时间,然后输出的内容是int型的。我之所以怎么问是因为我用mssql的时候是需要怎么构造输入参数和输出参数的。还是说mysql模块里面不用呢 22222.png

@SKandAV 输出参数不清楚,之前用的存储过程都没有输出参数。 你测试一下不就知道了,我猜应该含输出参数的吧?

await conn.query(sql, args) 第一个参数的sql , 应该可以拼成 ‘call generate_xxxxNo("’ + prev + '");'括号里面传几个参数,你来定。

@zurmokeeper 谢谢大佬,已经解决了

@zurmokeeper 老哥,问个事。就是我调用之后现在没有吧输出参数输出出来。是这样的 147.png 258.jpg

@SKandAV 有什么问题吗?你的node版本是很低吗?怎么还不用await或者promise化,还用回调函数的形式呢?

不熟就得问 你很牛逼@zurmokeeper 回调除了地狱 有啥不好 执行效率? 异步?

@SKandAV var resultSet_=(JSON.stringify(results));//’[{“count”:“1”,“type”:“RangeError”},{“count”:“3”,“type”:“ReferenceError”}]' resultSet = JSON.parse(resultSet_);//把results字符串转为json对象 如果返回值没有格式化, 记得格式化一下返回值

最好不要用存储过程… 互联网公司基本上没有用存储过程的…

@nwljy 我就是问一下为什么不用而已,你又何必呢

@nwljy 已经解决了,谢谢。存储过程是遗留问题了。一直在用。我也没法改。刚刚接手的项目

回到顶部