Bạn chắc chắn có thể. Có một số vấn đề cần phải cảnh giác nhưng đây là một trường hợp thử nghiệm
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;
- Tôi nhận thấy rằng các hàm thích có Giá trị trả về là GIÁ TRỊ ĐẦU TIÊN paramin bộ sưu tập
- BindByName theo mặc định là FALSE, vì vậy nó được mặc định là RẮN THEO VỊ TRÍ
Nếu không thì sẽ khá dễ dàng:
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));
}
} ...
Bây giờ để biết thêm mẫu, hãy truy cập Thư mục chính Oracle của bạn và xem @ các mẫu con trỏ Tham chiếu trong ODP.NET
ví dụ:% oracle client home% \ odp.net \ samples \ 4 \ RefCursor
hth