2

我正在使用 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 控制器中创建循环。

4

1 回答 1

2

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

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}]

我希望这有帮助。

于 2015-02-20T07:34:23.650 回答