Использование ref-курсора в качестве типа ввода в ODP.NET - PullRequest
2 голосов
/ 01 июня 2009

Я пытаюсь использовать RefCursor в качестве входного параметра для хранимой процедуры Oracle. Идея состоит в том, чтобы выбрать группу записей, передать их в хранимую процедуру, а затем SP зацикливается на вводе RefCursor, выполняя некоторые операции с его записями. Нет, я не могу выбрать записи внутри SP и, таким образом, избегать использования RefCursor в качестве типа ввода.

Я нашел пример того, как это сделать (здесь будет ссылка, но, похоже, я пока не могу их использовать) в документации Oracle, но для заполнения ввода используется SELECT RefCursor ; и в этом заключается загвоздка: я должен заполнить его из кода.

Видите ли, в коде у меня есть это:

[OracleDataParameter("P_INPUT", OracleDbType.RefCursor, ParameterDirection.Input)]
private List<MiObject> cursor;

И я попытался заполнить курсор List<T>, DataTable, даже простым массивом MyObject, и ничего не работает. Когда я пытаюсь запустить свои тесты, я получаю сообщение об ошибке:

«Недопустимое связывание параметров»

Возможно, не точная формулировка, так как я перевожу с испанского, но это сообщение

Есть идеи?

Ответы [ 3 ]

2 голосов
/ 01 июня 2009

Я также общаюсь с Марком Уильямсом, автором статьи, на которую я пытался дать ссылку в своем посте, и он любезно ответил так:

» Это не проблема, чтобы отправить мне письмо; однако я думаю, что разочарую вас своим ответом на этот вопрос.

К сожалению, вы не можете делать то, что пытаетесь сделать (создайте рефкурсор из клиента таким образом).

Пара проблем с этим заключается в том, что refcursor ссылается на память, принадлежащую Oracle на сервере, и Oracle не имеет понятия клиентских элементов, таких как DataTable или .NET List и т. Д.

Есть ли у вас другие варианты, кроме использования рефкурсора? «

Так что в основном я облажался, и этот вопрос закрыт. Спасибо, что прочитали и / или пытаетесь помочь, вы все.

0 голосов
/ 09 августа 2009

Посмотрите на этот образец для refcursor в качестве входных данных для pl / sql из Oracle Technet.

Обман состоит в том, что входной объект refcursor должен быть создан самим оракулом. Вы не можете преобразовать список или что-либо еще в refcursor.

0 голосов
/ 01 июня 2009

Из памяти, нет ли где-нибудь в библиотеке ODP.NET класса OracleCursor, который работает?

...