当前位置: 首页 > 面试题库 >

是否可以从Ruby调用MySQL存储过程?

子车新立
2023-03-14
问题内容

当我尝试从Rails调用存储过程时,出现以下异常:

ActiveRecord::StatementInvalid: Mysql::Error: PROCEDURE pipeline-ws_development.match_save_all can't return a result set in the given context: call match_save_all()
    from /Users/otto/Projects/Futures/src/pipeline-ws/vendor/rails/activerecord/lib/active_record/connection_adapters/abstract_adapter.rb:150:in `log'
    from /Users/otto/Projects/Futures/src/pipeline-ws/vendor/rails/activerecord/lib/active_record/connection_adapters/mysql_adapter.rb:281:in `execute'
    from (irb):3

Rails
Wiki中
有一个页面讨论用于解决此问题的MySQL适配器的修补程序,但是它已过时,似乎不再起作用。

配置代码正确地启用了存储过程,但是在存储过程调用之后连接仍然不同步并且新call_sp方法不再起作用,仍然存在问题。

关于如何使它工作的任何建议?

这是我正在使用的代码:

ActiveRecord::Base.connection("call storedproc()")

无论是否storedproc()返回任何结果,它都会引发相同的异常。


问题答案:

将程序包装到函数中是否可行?如果由于没有返回行而导致Ruby的倒入(...can't return a result set in the given context...),则可以解决此问题:

分隔符$

创建过程tProc()
开始
    SET @a ='测试';
结束;
$

创建函数tFunc()
返回整数
开始
    呼叫tProc();
    返回1;
结束;
$

定界符;

从双重选择tFunc();
>> 1

从双重选择@a;
>>“测试”

尽管实际上,这不是一个非常可扩展的解决方案。

后续:我在Ruby / ActiveRecord上相当不错,但是这个示例确实可以工作

ActiveRecord :: Base。Establishment_connection(authopts)

类TestClass <ActiveRecord :: Base
结束

test_class = TestClass.new
将%{#{test_class.connection.select_one('SELECT tFunc()AS tf FROM DUAL')}}放
>> tf1

使用会CALL tProc()导致与您类似的错误。



 类似资料:
  • 问题内容: 我在Google上搜索并不断提出“不,这是不可能的”,但是这些帖子的发布日期为2005-2007,所以我想知道是否已更改。一个代码示例: 解决方案之一是传递null,然后检查null并设置变量。我不想这样做,也不必这样做。如果这是真的,那么MySql开发人员需要唤醒,因为我可以用MSSQL做更多的事情。 问题答案: 仍然不可能。

  • 问题内容: 我想用。像这样从存储的过程中调用sql脚本… 我收到“无法打开’test.sql;’的消息” 我以这种方式运行时出错。我也尝试过!但随后出现权限被拒绝错误。但是,我无法消除;; 或整个事情坏了。有没有解决的办法? 我究竟做错了什么? 问题答案: mysql客户端内置了一组命令。它们记录在“ 命令 ” 下。这些包括DELIMITER,SOURCE,HELP,CONNECT,USE,QUI

  • 问题内容: 我在任何地方都找不到此答案,但是可以从MySQL中的另一个存储过程调用存储过程吗?我想找回标识值,并在父存储过程中使用它。我们不能再使用FUNCTIONS! 问题答案: 参数应该可以帮助您将值返回给调用过程。基于此,解决方案必须是这样的。

  • 阅读文档时,并不十分清楚。 我想要的是能够存储和检索简单的json文档。使用CloudSearch,似乎可以以SDF格式存储文档,然后搜索它们,但它只返回文档ID和指定字段的一小部分(我认为是200个字符)。 有没有一种方法来检索完整的文档ID只是使用CloudSearch?还是打算作为搜索和使用主存储服务的附加工具?

  • 问题内容: 是否可以从Java调用COM API(特别是HP / Mercury Quality Center OTA API)?如果是这样,最好的方法是什么? 像JACOB一样合适吗? 代码片段对于基础知识会有所帮助:-) 问题答案: jacob:是的,http://sourceforge.net/projects/jacob- project/ 是一个活跃的项目,可以很好地满足您的目的。 您可

  • 问题内容: 如何检查用户是否可以在MS SQL Server中执行存储过程? 我可以通过连接到master数据库并执行以下命令来查看用户是否具有显式执行权限: 但是,如果用户是具有执行权限的角色的成员,则sp_helprotect不会帮助我。 理想情况下,我希望能够打电话给类似 这将返回布尔值。 问题答案: 和