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 コマンドを実行すると「true」の応答しか返されません。

要求されたデータの配列として応答を取得することは可能ですか?どうすればよいですか?

Railsコントローラー内でループを作成するのではなく、データベース内でプロシージャを実行しようとしています。

4

1 に答える 1

2

だから私はこれを完全に忘れていましたが、しばらく前にこの問題を解決しました。これが私がしたことのサンプルです:

サンプル_手順:

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 に答える