【问题标题】:Calling Database Procedure From Ruby on Rails从 Ruby on Rails 调用数据库过程
【发布时间】:2014-05-07 08:42:05
【问题描述】:

我正在使用 Ruby on Rails 和 NuoDB 开发一个应用程序,并且我正在尝试从数据库中调用过程。我正在使用 Rails 控制台对其进行测试,但是当我使用以下命令调用它时,我只会得到“TRUE”响应。

ActiveRecord::Base.connection.execute("CALL SHOW_FEEDBACKS_PRC( 'form_name' )")

我的存储过程是这样的:

CREATE PROCEDURE database_name.show_feedbacks_prc (IN P_IN_form string) 

     returns tmp_feedbacks (txt1 string, rating integer, comment string, created_at timestamp, updated_at timestamp)
     language sql
     security invoker

as
     insert into tmp_feedbacks 
       select txt1, rating, comment, created_at, updated_at
         from database_name.feedbacks
        where form = p_in_form;

END_PROCEDURE

这是一个简单的查询,仅返回特定“表单”下的“反馈”列表。

当我使用 NuoDB 的控制台时,该过程有效,它返回一个显示请求数据的表,但是当我使用 Rail 的控制台调用它时,它只会在我执行 SQL 命令时返回“真”响应。

是否有可能以请求数据数组的形式获得响应?我该怎么做?

我正在尝试在数据库中执行程序,而不是在 rails 控制器中创建循环。

【问题讨论】:

  • 凹凸。还有 11 个字符。
  • 你好,蒂姆,我忘记了这个问题。我已经发布了一个答案,以防有人需要。

标签: sql ruby-on-rails ruby stored-procedures nuodb


【解决方案1】:

所以我完全忘记了这一点,但我不久前解决了这个问题,这是我所做的一个示例:

SAMPLE_PROCEDURE:

CREATE PROCEDURE sample_procedure ( IN input_1 INTEGER ) 
    RETURNS return_msg ( col_1 STRING , col_2 INTEGER ) AS 
            VAR value_string STRING; 
            VAR value_integer INTEGER;
            value_string = input_1;
            value_integer = input_1+10;
        INSERT INTO return_msg VALUES ( value_string , value_integer);
    RETURN; 
END_PROCEDURE

我是这样称呼它的:

ActiveRecord::Base.connection.execute("call sample_procedure(1)")

Rails 将返回以下内容:

[{"col_1"=>"1", "col_2"=>11}]

我希望这会有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-04-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-02
    • 2016-04-25
    相关资源
    最近更新 更多