Я пытаюсь выполнить пользовательскую функцию 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) из dual) и вернуть CURSOR.Но мне нужно получить курсор, используя 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 из функций.
РЕДАКТИРОВАТЬ: Я не хочу явно добавлять входные параметры к объекту OracleCommand (например, sqlCom.Parameters.Add("id", OracleDbType.Int32,ParameterDirection.Input).Value = 7;
), так как это затрудняет реализацию этого как универсальный веб-сервис RESTful, но я резервируюкак последнее средство, но вместо этого я использую хранимые процедуры.
Любая помощь очень ценится!