2014-03-28 68 views
2

我正在開發一個使用Ruby on Rails和NuoDB的應用程序,我試圖從數據庫調用過程。我正在使用Rails控制檯進行測試,但當我使用以下命令調用它時,我只得到一個「TRUE」響應。從Ruby on Rails調用數據庫過程

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」響應。

是否可以獲取響應作爲請求的數據數組,我該如何做到這一點?

我試圖執行數據庫內的程序,而不是在軌道控制器內製作循環。

+0

碰撞。還有11個角色要去。 – Tim

+0

你好蒂姆,我忘了這個問題。我已經發布了一個答案,以防有人需要它。 –

回答

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

我希望這有助於。

+0

很好的例子,謝謝 – Tim