2011-09-20 9 views
5

मैं MySQL संग्रहीत प्रक्रिया से आउटपुट पैरामीटर प्राप्त करने का प्रयास कर रहा हूं, आइए नीचे एक उदाहरण देखें:रेल में MySQL संग्रहीत प्रक्रिया से आउटपुट पैरामीटर कैसे प्राप्त करें?

1 mysql में मैंने इस प्रक्रिया को बनाया और यह काम करता है।

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 इसलिए, यह भी रेल में काम करता है, लेकिन यह मेरे लिए कोई मूल्य वापस नहीं होगा:

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

यहाँ रेल में लॉग

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

मेरा प्रश्न है है मैं आउटपुट पैरामीटर @id के वापसी मूल्य को कैसे प्राप्त कर सकता हूं?

+0

क्या संग्रहीत प्रक्रिया का उपयोग करने के वास्तविक कारण क्या है? क्या वहां विशिष्ट आवश्यकताएं हैं? यदि ऐसा है, तो विकास टीम में रखरखाव करना और रखरखाव करना मुश्किल नहीं है – Anatoly

+0

mysql के लिए आप किस मणि का उपयोग कर रहे हैं? – Fivell

+0

@Fivell मैं mysql2 –

उत्तर

3

मैं एक तरह से उत्पादन पैरामीटर प्राप्त करने के लिए, तुम लोगों के साथ साझा करने के लिए, नीचे देखें पाया:

1 एक कनेक्शन

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

2 उपयोग इस संबंध बनाने के लिए अपने कॉल करने के लिए एसपी

client.query "call sp_xxx" 

3 उत्पादन पैरामीटर प्राप्त करने के लिए

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

4 वापसी उत्पादन

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

का उपयोग कर रहा हूं भगवान इस समाधान को खोजने के लिए मुझे मार्गदर्शन करें। टिप के लिए – VvDPzZ

+0

धन्यवाद – Fivell

0

MySQL SQL सर्वर की तरह काम नहीं करता है। यदि आप एक वापसी प्रक्रिया के साथ एक स्टोर प्रक्रिया चाहते हैं, तो आप वास्तव में यह एक समारोह (यूडीएफ) चाहते हैं। आपको किसी भी C++ फ़ंक्शन की तरह रिटर्न निर्दिष्ट करने की आवश्यकता है। इसके अलावा आपको कॉल का उपयोग करने की आवश्यकता नहीं है, क्योंकि यह एक फ़ंक्शन है। बस SELECT फ़ंक्शन का उपयोग करें()

MySQL मैन्युअल में यूडीएफ के बारे में जानकारी देखने का प्रयास करें। ऐसा करने के लिए बहुत ही स्पष्टीकरण सहायता है।

संबंधित मुद्दे