मैं उपयोगकर्ता द्वारा परिभाषित ओरेकल फ़ंक्शन निष्पादित करने का प्रयास कर रहा हूं जो ODP.NET का उपयोग करके एक RefCursor देता है।ओरेकल फ़ंक्शन से RefCursor कैसे वापस करें?
CREATE OR REPLACE FUNCTION PKG.FUNC_TEST (ID IN TABLE.ID%type)
RETURN SYS_REFCURSOR
AS
REF_TEST SYS_REFCURSOR;
BEGIN
OPEN REF_TEST FOR
SELECT *
FROM TABLE;
RETURN REF_TEST;
END;
/
मैं टॉड में इस समारोह कॉल कर सकते हैं (func_test चयन (7) दोहरी से) और एक कर्सर वापस पाने: यहाँ कार्य है। लेकिन मुझे डेटासेट भरने के लिए सी # और ओडीपी.नेट का उपयोग कर कर्सर प्राप्त करने की आवश्यकता है, लेकिन मुझे एक NullReferenceException मिल रहा है - "ऑब्जेक्ट रेफरेंस ऑब्जेक्ट के इंस्टेंस पर सेट नहीं है"।
OracleConnection oracleCon = new OracleConnection(ConfigurationManager.ConnectionStrings["MyConnectionString"].ConnectionString);
OracleCommand sqlCom = new OracleCommand("select func_test(7) from dual", oracleCon);
sqlCom.Parameters.Add("REF_TEST", OracleDbType.RefCursor, ParameterDirection.ReturnValue);
OracleDataAdapter dataAdapter = new OracleDataAdapter();
dataAdapter.SelectCommand = sqlCom;
DataSet dataSet = new DataSet();
dataAdapter.Fill(dataSet); //FAILS HERE with NullReferenceException
मैं और संग्रहित प्रक्रियाओं और ODP.NET के प्रयोग पर जानकारी के बहुत सारे नमूने प्राप्त करने में सक्षम था, लेकिन नहीं कार्यों से RefCursors लौटने के लिए बहुत बहुत: यहाँ क्या मुझे लगता है कि के लिए है।
संपादित करें: मैं स्पष्ट रूप से OracleCommand वस्तु के लिए इनपुट पैरामीटर जोड़ने के लिए नहीं करना चाहते हैं (यानी sqlCom.Parameters.Add("id", OracleDbType.Int32,ParameterDirection.Input).Value = 7;
) के रूप में है कि यह मुश्किल एक सामान्य RESTful वेब सेवा के रूप में इस लागू करने के लिए, लेकिन मैं अपने अंतिम उपाय के रूप में यह आरक्षण हूँ बनाता है लेकिन बदले में संग्रहीत प्रक्रियाओं का उपयोग करेगा।
किसी भी मदद की बहुत सराहना की है!
आप पैरामीटर जोड़ रहे हैं लेकिन आप इसे एक क्वेरी के रूप में चला रहे हैं; क्या आप कुछ ऐसा नहीं करना चाहते हैं जैसे: REF_TEST: = func_test (7) '? –
यह सुनिश्चित नहीं है कि इसका उपयोग कहां करें। क्या यह पैरामीटर के बजाय प्रयोग किया जाता है? चुनने के बजाय – Gady
ओरेकल कॉमांड स्ट्रिंग के रूप में। (मुझे शायद यह इंगित करना चाहिए कि मुझे ओडीपी.Net के बारे में कुछ नहीं पता है, लेकिन यह अभी भी गलत दिखता है * 8-) –