gpt4 book ai didi

mysql - 通过 Rails 调用带 OUT 参数的 MySQL 存储过程

转载 作者:行者123 更新时间:2023-11-29 03:31:03 25 4
gpt4 key购买 nike

存储过程类似于:

CREATE PROCEDURE `manager`(IN amount decimal(9,2), IN list text, IN acc_id int(11), OUT return_code int(1))
BEGIN

DECLARE exit handler for sqlexception, sqlwarning
BEGIN
set return_code = 1;
rollback;
END;
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
--my code
set return_code = 0;
END

rails模型的方法是:

return_code = -1
return_code = self.connection.execute("call manager(#{amount}, '#{list}', #{acc_id}, #{return_code})")

但这会引发错误:

ActiveRecord::StatementInvalid: Mysql2::Error: OUT or INOUT argument 4 for routine staging.manager is not a variable or NEW pseudo-variable in BEFORE trigger: call manager(2222, 'list', 2, -1)

需要一些关于如何在从 Rails 调用存储过程时传递 OUT 参数的帮助。

最佳答案

下面的解决方案对我有用:

我刚刚用 @return_code 更改了#{return_code)(不需要传递 return_code = -1 作为输入,因为它是一个 OUT 参数):

return_code = self.connection.execute("call manager(#{amount}, '#{list}', #{acc_id}, @return_code)")

在存储过程中,我用@return_code替换了return_code,并在最后添加了一条select语句:

CREATE PROCEDURE `manager`(IN amount decimal(9,2), IN list text, IN acc_id int(11), OUT return_code int(1))
BEGIN

DECLARE exit handler for sqlexception, sqlwarning
BEGIN
set return_code = 1;
rollback;
END;
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
--my code
set return_code = 0;
SELECT @return_code;
END

关于mysql - 通过 Rails 调用带 OUT 参数的 MySQL 存储过程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30617336/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com