Tag: 存储过程

通过Rails调用存储过程?

如何通过rails代码访问在Mysql中创建的存储过程? 我目前正在使用以下版本的rails应用程序: – Rails 2.1.0 Ruby Enterprise Edition 2010.01 谢谢….

如何在rails上的ruby中调用存储过程?

我是ROR的新手。 我想在单击VIEW中的提交按钮时调用存储过程进行处理。 Model: ——- class Pro::DataImport < ActiveRecord::Base attr_accessible :file_name, :process_name, :updated_by, :validates end Controller: —————– class Pro::DataImportsController < ApplicationController before_filter :authenticate_user! layout "layouts/enr/energy_master" def index @pro_data_imports = Pro::DataImport.all end def new @pro_data_import = Pro::DataImport.new end end View ———- Browse the file to upload: Stored Proc ————— ALTER PROCEDURE “DBA”.”my_enr_test”(file_name long varchar) BEGIN INSERT INTO […]

如何从Rails中的MySQL存储过程中获取输出参数?

我试图从MySQL存储过程中获取输出参数,让我们看一下下面的例子: 1在mysql中我创建了这个过程并且它可以工作。 CREATE PROCEDURE sp_name (out id int) Begin select id into @id from table order by id desc limit 1; End mysql> call sp_deduct_credit_and_money(@id); Query OK, 0 rows affected (0.01 sec) mysql> select @id; +————–+ | @id | +————–+ | 24 | +————–+ 1 row in set (0.00 sec) 2因此,它也适用于Rails,但它不会为我返回任何值: ActiveRecord::Base.connection.execute(“call sp_name(@id)”) ActiveRecord::Base.connection.execute(“select @id”) […]

为什么Rails(3+)中仍然不支持存储过程?

我熟悉Ruby on Rails,DB(MS)驱动程序和存储过程之间长期以来爱恨交织的关系,我从版本2.3.2开始就开发了Rails应用程序。 然而,每隔一段时间出现一种情况,其中SP只是比(更慢)应用程序级别上的数据组合更好的选择。 具体而言,运行组合来自多个表的数据的报告通常更适合SP。 为什么存储过程仍然很难集成到Rails或MySQL gem中。 我目前正在开发一个使用Rails 3.0.10和MySQL2 gem 0.2.13的项目,但据我所知,即使最新的Edge Rails和MySQL gem 0.3+仍然在使用SP时发脾气。 过去和现在仍然存在的问题是在调用SP后数据库连接丢失。 >> ActiveRecord::Base.connection.execute(“CALL stored_proc”) => # >> ActiveRecord::Base.connection.execute(“CALL stored_proc”) ActiveRecord::StatementInvalid: Mysql::Error: Commands out of sync; […] >> ActiveRecord::Base.connection.active? => false >> ActiveRecord::Base.connection.reconnect! => nil >> ActiveRecord::Base.connection.execute(“CALL proc01”) => # >> ActiveRecord::Base.connection.active? => false 从技术上讲,这是一个非常难以解决的问题,还是Rails的设计选择?

存储过程中非法混合的排序规则

MySQL中的存储过程失败,出现Mysql::Error: Illegal mix of collations (utf8_general_ci,IMPLICIT) and (utf8_unicode_ci,IMPLICIT) for operation ‘=’ 。 在SELECT子句中,它尝试将VARCHAR列与传递给此过程的VARCHAR参数进行比较时,该过程失败。 我表中的所有列都有utf8_unicode_ci排序规则。 数据库整理是一样的。 我甚至在`/config/database.yml中指定了排序规则。 但是,当我运行/script/console我设置了以下变量: >> ActiveRecord::Base.connection.select_rows “show variables like ‘%colla%'” => [[“collation_connection”, “utf8_general_ci”], [“collation_database”, “utf8_unicode_ci”], [“collation_server”, “utf8_general_ci”]] 可能最有趣的事实是我在相同的MySQL服务器上有另一个数据库具有相同的排序规则(甚至从Rails控制台查询排序规则变量给出相同的结果),它运行这个存储过程没有任何问题。 谢谢你的帮助。

在Rails中使用存储过程

正如我在上一篇文章中所说,我们的Rails应用程序必须与我们从中提取数据的第三方应用程序中的EAV类型的表进行交互。 我创建了一个View以使数据正常,但运行时间过长。 我们有一位离岸PHP开发人员创建了一个存储过程来帮助加快速度。 现在我们遇到了我们需要从Rails应用程序调用此存储过程的问题,以及提供搜索和过滤。 视图可以这样做,因为Rails将其视为传统的Rails模型。 我怎么能用存储过程做到这一点? 我们需要编写自定义搜索和排序(我们使用的是Searchlogic)吗? 管理层无法理解使用Rails存储过程的缺点; 他们所说的是当前的方法加载数据需要很长时间并且需要修复,但搜索和过滤是关键function。 编辑我在这里发布了这个查询的代码: 优化一个奇怪的MySQL查询 。 有趣的是,当我在GUI(Navicat)中运行此查询时,它运行大约5秒钟,但在网页上运行需要一分钟; 由于我在原帖中概述的原因,视图很复杂,但我认为MySQL会优化和缓存像SQL Server这样的视图(或者更确切地说,我是如何阅读SQL Server的),以提高性能。

如何从Rails调用MySQL存储过程?

MySQL中的一个简单存储过程 : CREATE PROCEDURE `proc01`() BEGIN SELECT * FROM users; END 启动Rails控制台: $ script/console Loading development environment (Rails 2.3.5) >> User.connection.execute(“CALL proc01”) => # 看起来不错。 但是,通过现有连接再次调用同一存储过程将导致命令不同步错误: >> User.connection.execute(“CALL proc01”) ActiveRecord::StatementInvalid: Mysql::Error: Commands out of sync; you can’t run this command now: CALL proc01 from /Library/Ruby/Gems/1.8/gems/activerecord-2.3.5/lib/active_record/connection_adapters/abstract_adapter.rb:219:in `log’ from /Library/Ruby/Gems/1.8/gems/activerecord-2.3.5/lib/active_record/connection_adapters/mysql_adapter.rb:323:in `execute’ from (irb):2 可以通过“重新加载”清除错误! 控制台中的命令: >> reload! […]

Ruby on Rails中的存储过程

我是一个有6年经验的.net人。 最近我开始研究ROR项目,并意识到存储过程/ sql函数根本没有被使用。 在询问它时我知道这是常见的做法,一般来说团队中没有人写一个SQL查询,一切都是使用ActiveRecord完成的。 我搜索了任何可能的原因,但没有找到太多信息。 所以我只是好奇才知道 通常的做法是不首选使用存储过程/ sql函数吗? 使用存储过程有哪些优缺点?

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

当我尝试从Rails调用存储过程时,我得到以下exception: 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()是否返回任何结果,它都会抛出相同的exception。

如何在Ruby中运行Oracle存储过程

我获得了对Oracle数据库的读访问权,以获取我自己的数据库的数据。 DBA给了我一个存储过程,他向我保证是我所需要的,但我还是无法从Ruby运行它。 我安装了ruby-oci8 gem和oracle即时客户端。 这是我到目前为止所管理的内容。 require ‘oci8’ conn = OCI8.new(‘user’,’pass’,’//remoteora1:1521/xxxx’) => # cursor = conn.parse(“call REPOSITORY.GET_PMI_ADT( ‘722833’, ‘W’, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, […]