2011-09-20 23 views
5

Tôi đang cố lấy thông số đầu ra từ thủ tục lưu sẵn của MySQL, hãy xem ví dụ bên dưới:Làm cách nào để lấy thông số đầu ra từ thủ tục lưu sẵn MySQL trong Rails?

1 Trong mysql tôi đã tạo quy trình này và nó hoạt động.

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 Vì vậy, nó cũng làm việc trong Rails, NHƯNG nó sẽ không trả lại bất kỳ giá trị cho tôi:

ActiveRecord::Base.connection.execute("call sp_name(@id)") 
ActiveRecord::Base.connection.execute("select @id") 

Dưới đây là các bản ghi trong Rails

(2.0ms) call sp_name(@id) 
(0.1ms) select @id 

Câu hỏi của tôi là làm thế nào tôi có thể nhận được giá trị trả về của tham số đầu ra @id?

+0

Lý do thực sự để sử dụng thủ tục lưu sẵn là gì? Có yêu cầu cụ thể không? Nếu vậy, đừng quên khó giữ phiên bản và bảo trì qua nhóm phát triển – Anatoly

+0

bạn đang sử dụng đá quý nào cho mysql? – Fivell

+0

@Fivell Tôi đang sử dụng mysql2 –

Trả lời

3

Tôi tìm thấy một cách để có được các thông số đầu ra, để chia sẻ với các bạn, xem dưới đây:

1 để tạo ra một kết nối

client = Mysql2::Client.new(ActiveRecord::Base.configurations[Rails.env.to_s].symbolize_keys) 

2 sử dụng kết nối này để gọi sp của bạn

client.query "call sp_xxx" 

3 để lấy thông số đầu ra

result = client.query("select @output_parameter") 

4 trả lại kết quả

return !result.first["@output_parameter"].nil? 
+0

Chúa hướng dẫn tôi tìm giải pháp này. – VvDPzZ

+0

cảm ơn mẹo – Fivell

0

MySQL không hoạt động như SQL Server. Nếu bạn muốn một thủ tục lưu trữ với một giá trị trả về, bạn thực sự muốn nó là một hàm (UDF). Bạn cần chỉ định RETURN giống như bất kỳ hàm C++ nào. Ngoài ra bạn không cần sử dụng cuộc gọi, bởi vì nó là một chức năng. Chỉ cần sử dụng hàm SELECT()

Cố tìm kiếm thông tin về UDF trong hướng dẫn sử dụng MySQL. Có rất giúp đỡ để làm điều đó.

Các vấn đề liên quan