【问题标题】:How do you receive a MySQL Stored Procedure OUT parameter as a variable in Javascript?您如何在 Javascript 中接收 MySQL 存储过程 OUT 参数作为变量?
【发布时间】:2020-05-01 17:56:43
【问题描述】:

免责声明;我的背景是 C#,所以我对 JavaScript 的熟悉程度并不高;然而,我今天和我们的一位开发人员一起审查了一些代码,他收到了一些奇怪的返回结果与预先存在的返回结果“合并”的行为。看到调用存储过程的每个 JavaScript 示例都在 MySQL 端使用全局变量来存储 out 参数,我感到非常惊讶!这让我大吃一惊,相对于编写代码,IMO 是一个很大的“不可以”。举个例子:

exports.updateRasSql = 'CALL update_ras_data(?, ?, @out_result, @out_result_value);

归结为我们不想将 OUT 参数变量分配给 MySQL 全局变量。我们希望将 OUT 值分配给内部 JavaScript 变量,但无论何时我们尝试这样做(使用 var 或 let 作为定义器),MySQL 都会返回:

Error: ER_SP_NOT_VAR_ARG: OUT or INOUT argument 3 for routine empowercrm_main.update_ras_data is not a variable or NEW pseudo-variable in BEFORE trigger

那么问题来了:我们如何从 Node/JavaScript 调用 MySQL 存储过程,并让它将 OUT 变量返回到内部 JavaScript 变量而不是 MySQL 全局变量?

【问题讨论】:

  • @nbk 有趣;因此该示例显示他使用 object.xx 作为接收方法;但我在其他任何地方都找不到这样的例子。您对此有更多详细信息吗?
  • 不,我查看了一些搜索结果,这似乎可以理解且易于实施。但是寻找你自己,看看其他人写了什么。但是 javascript 支持多种类型,因此很容易理解和使用。如果程序有这样的返回,您也可以返回 3 或 4 个用户定义的变量或两个表。

标签: javascript mysql


【解决方案1】:

您应该返回一个结果集(在过程中进行查询)而不是使用OUT-variables。获取 OUT 变量值的唯一方法是在执行过程后选择它。只处理结果集更容易。

【讨论】:

  • 我们的许多存储过程执行业务逻辑并且不返回结果集,而是返回结果详细信息 - 我们使用 JSON 来封装这些结果,因此您的建议不适用于我们众多的存储过程仅执行业务逻辑,并以 JSON 格式执行该执行的详细信息。无论如何,核心问题是否可以让 OUT 参数直接写入 JavaScript 变量以进行服务器端代码处理?
  • 不是。您可以做的是在过程执行后执行select @out_result_value 或创建一个包装过程,该过程首先调用您的原始过程,然后选择 OUT 变量。将来,您应该考虑使用结果集或 OUT 变量。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-01-09
  • 2012-11-29
  • 1970-01-01
  • 1970-01-01
  • 2014-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多