आप निश्चित रूप से कर सकते हैं। सावधान रहने के लिए कुछ गठिया हैं, लेकिन यहां एक परीक्षण मामला है
create or replace function testodpRefCursor(
uniqueId IN NUMBER
,resultItems OUT NOCOPY SYS_REFCURSOR) RETURN NUMBER
IS
BEGIN
OPEN resultItems for select level from dual connect by level < uniqueId ;
return 1;
END testodpRefCursor;
- मैंने पाया है कि फंक्शन्स रिटर्न वैल्यू को सबसे पहले . के रूप में रखना पसंद करते हैं पैरामिन संग्रह
- BindByName डिफ़ॉल्ट रूप से FALSE है, इसलिए यह डिफ़ॉल्ट रूप से BIND BY POSITION
अन्यथा यह बिल्कुल सीधा है:
OracleCommand cmd = new OracleCommand("TESTODPREFCURSOR", con);
cmd.CommandType = CommandType.StoredProcedure;
cmd.BindByName = true;
// Bind
OracleParameter oparam = cmd.Parameters.Add("ReturnValue", OracleDbType.Int64);
oparam.Direction = ParameterDirection.ReturnValue ;
OracleParameter oparam0 = cmd.Parameters.Add("uniqueId", OracleDbType.Int64);
oparam0.Value = 5 ;
oparam0.Direction = ParameterDirection.Input;
OracleParameter oparam1 = cmd.Parameters.Add("resultItems", OracleDbType.RefCursor);
oparam1.Direction = ParameterDirection.Output;
// Execute command
OracleDataReader reader;
try
{
reader = cmd.ExecuteReader();
while(reader.Read() ){
Console.WriteLine("level: {0}", reader.GetDecimal(0));
}
} ...
अब अधिक नमूनों के लिए अपनी Oracle होम निर्देशिका में जाएं और ODP.NET में Ref कर्सर नमूने देखें।
उदाहरण के लिए:%oracle क्लाइंट होम%\odp.net\samples\4\RefCursor
एचटीएच