मैं ऐसे उत्पाद का उपयोग कर रहा हूं जो ओरेकल फ़ंक्शंस के आधार पर डेटाबेस API प्रदान करता है और मैं सामान्य रूप से ODP.NET के माध्यम से फ़ंक्शंस कॉल करने में सक्षम हूं। हालांकि, मैं यह नहीं समझ सकता कि एक फ़ंक्शन को कैसे कॉल करें जिसमें रेफ कर्सर आउट-पैरामीटर के रूप में शामिल है। अब तक पाए गए सभी नमूने या तो आउट-पैरामीटर या रिफ कर्सर के साथ फ़ंक्शन मान के रूप में एक प्रक्रिया को कॉल करते हैं। मैंने पैरामीटर को समान रूप से परिभाषित करने का प्रयास किया, लेकिन त्रुटि प्राप्त करना जारी रखें कि गलत संख्या या पैरामीटर के प्रकार की आपूर्ति की जाती है।सी # से आउट पैरामीटर के रूप में एक रेफ कर्सर के साथ ओरेकल फ़ंक्शन को कैसे कॉल करें?
FUNCTION GetXYZ(
uniqueId IN somepackage.Number_Type,
resultItems OUT somepackage.Ref_Type)
RETURN somepackage.Error_Type;
ये "somepackage" में टाइप परिभाषाएं दी गई हैं:
यहाँ समारोह हैडर (स्पष्ट रूप से समझ से परे) है
SUBTYPE Number_Type IS NUMBER(13);
TYPE Ref_Type IS REF CURSOR;
SUBTYPE Error_Type IS NUMBER;
और यह कोड है कि मैं कोशिश की है है:
string sql = "otherpackage.GetXYZ";
var getXYZCmd = OracleCommand oracleConnection.CreateCommand(sql);
getXYZCmd.CommandType = CommandType.StoredProcedure;
getXYZCmd.Parameters.Add("uniqueId", OracleDbType.Int32).Value = uniqueExplosionId;
getXYZCmd.Parameters.Add("resultItems", OracleDbType.RefCursor).Direction = ParameterDirection.Output;
getXYZCmd.Parameters.Add("return_value", OracleDbType.Int32).Direction = ParameterDirection.ReturnValue;
मैंने फ़ंक्शन को कॉल करने के लिए निम्नलिखित विभिन्न तरीकों का प्रयास किया (निश्चित रूप से केवल एक समय में):
var result = getXYZCmd.ExecuteNonQuery();
var reader = getXYZCmd.ExecuteReader();
var scalarResult = getXYZCmd.ExecuteScalar();
लेकिन उनमें से प्रत्येक त्रुटि संदेश के साथ विफल रहता है:
Oracle.DataAccess.Client.OracleException: ORA-06550: line 1, column 15:
PLS-00306: wrong number or types of arguments in call to 'GETXYZ'
ORA-06550: line 1, column 15:
PLS-00306: wrong number or types of arguments in call to 'GETXYZ'
ORA-06550: line 1, column 7:
PL/SQL: Statement ignored.
तो यह आम तौर पर ODP.NET के साथ सी # से बाहर पैरामीटर के रूप में एक रेफरी कर्सर के साथ एक समारोह कॉल करने के लिए संभव है? मैं बिना किसी समस्या के रेफ कर्सर के बजाय वर्चर 2-आउट-पैरामीटर के साथ एक ही संरचना के साथ एक फ़ंक्शन को कॉल कर सकता हूं ...
बीटीडब्ल्यू, मैं दृश्य में सी # .NET 3.5 से ODP.NET संस्करण 2.112.2.0 का उपयोग कर रहा हूं स्टूडियो 2008.
आपकी मदद के लिए अग्रिम धन्यवाद!
नमूने निर्देशिका प्रदान करने के लिए धन्यवाद। आपने दिन बचा लिया है:] –