आप के साथ इकाई की रूपरेखा 4.1 संहिता सबसे पहले काम कर रहे हैं, तो आप कोशिश कर सकते हैं Database.SqlQuery Method का उपयोग कर। उदाहरण के लिए, इस समारोह
CREATE OR REPLACE FUNCTION USERNAME_CTX.FUNCTION1 (param number)
RETURN number
AS
BEGIN
return param + 1;
END;
आप इस कोड का उपयोग कर सकते हैं के लिए:
using (var ctx = new Model()) {
var result = ctx.Database.SqlQuery<int>("select username_ctx.FUNCTION1(:p0) from dual",1).FirstOrDefault();
}
संपादित:
कृपया dotConnect Oracle के लिए के लिए इस समाधान ध्यान दें (शायद यह ODP.NET के लिए एक समान समाधान को लागू करने के लिए उपयोगी होगा)
इस समारोह के लिए:
CREATE OR REPLACE FUNCTION USERNAME_CTX.FUNCTION2 (param number, int_param out number, str_param out varchar2)
RETURN number
AS
BEGIN
int_param := param + 2;
str_param := 'value';
return param + 1;
END;
आप नीचे दिए गए कोड का उपयोग कर सकते हैं:
using (var ctx = new Model()) {
var firstParam = new Devart.Data.Oracle.OracleParameter("p0", OracleDbType.Number, 1, ParameterDirection.Input);
var secondParam = new Devart.Data.Oracle.OracleParameter("p1", OracleDbType.Number, ParameterDirection.Output);
var thirdParam = new Devart.Data.Oracle.OracleParameter("p2", OracleDbType.VarChar, ParameterDirection.Output);
var cursorParam = new Devart.Data.Oracle.OracleParameter("cursor_param", OracleDbType.Cursor, ParameterDirection.Output);
var result = ctx.Database.SqlQuery<int>(
@"declare
res number;
begin
res := username_ctx.FUNCTION2(:p0, :p1, :p2);
open :cursor_param for select res from dual;
end;", firstParam, secondParam, thirdParam, cursorParam).FirstOrDefault();
Console.WriteLine("Return value: {0}; int_param: {1}; str_param: '{2}'", result, secondParam.Value, thirdParam.Value);
}
संपादित 2
या इस कोड का उपयोग:
using (var ctx = new Model()) {
var firstParam = new Devart.Data.Oracle.OracleParameter("p0", OracleDbType.Number, 1, ParameterDirection.Input);
var secondParam = new Devart.Data.Oracle.OracleParameter("p1", OracleDbType.Number, ParameterDirection.Output);
var thirdParam = new Devart.Data.Oracle.OracleParameter("p2", OracleDbType.VarChar, ParameterDirection.Output);
var resultParam = new Devart.Data.Oracle.OracleParameter("res", OracleDbType.Number, 1, ParameterDirection.Output);
ctx.Database.ExecuteSqlCommand(@"begin :res := username_ctx.FUNCTION2(:p0, :p1, :p2); end;", firstParam, secondParam, thirdParam, resultParam);
Console.WriteLine("Return value: {0}; int_param: {1}; str_param: '{2}'", resultParam.Value, secondParam.Value, thirdParam.Value);
}
+1 धन्यवाद , लेकिन अगर यह काम नहीं करेगा फ़ंक्शन में 'आउट' पैरामीटर है। ': (' – gdoron
मैंने उत्तर – Devart
संपादित किया है, कृपया ध्यान दें कि उत्तर एक बार फिर से संशोधित किया गया है – Devart