Как вернуть RefCursor из функции Oracle?

Я пытаюсь выполнить определенную пользователем функцию Oracle, которая возвращает RefCursor, используя ODP.NET. Вот функция:

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;
/

Я могу вызвать эту функцию в Toad (выберите func_test (7) из двойного) и получить обратно КУРСОРОМ. Но мне нужно получить курсор с помощью C # и ODP.NET для заполнения DataSet, но я продолжаю получать исключение 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 из функций.

EDIT: Я знаю не требуется явно добавлять входные параметры к объекту OracleCommand (например, sqlCom.Parameters.Add ("id", OracleDbType.Int32, ParameterDirection.Input) .Value = 7; ), так как это затрудняет реализацию этого как универсального веб-сервиса RESTful, но я прибегаю к нему как к крайнему средству, но вместо этого буду использовать хранимые процедуры.

Любая помощь приветствуется!

9
задан Gady 8 November 2010 в 20:13
поделиться