Получение выходных данных RefCursor и VarChar из одной и той же хранимой процедуры

Я новичок в Oracle, поэтому будьте осторожны...

Я запрашиваю существующую базу данных Oracle, используя C # и ODP11 в .NET 4. Все процедуры до этого момента были сначала болезненными для понимания, но в основном «просто работали», когда я понял, что я делаю... это отдельная история...

У меня есть хранимая процедура, которая принимает 4 параметра: 2 входа и 2 выхода... 2 входа велики. один из выходных данных — это Varchar2, а другой — refcursor.

Я использую OracleDataReader для запуска запроса, как и любой другой процесс, который возвращает RefCursor, но в этом случае reader.Read() постоянно возвращает false, и я не получаю данных. Однако другая выходная переменная содержит данные (строку).

Я пробовал использовать reader.NextResult(), но он тоже возвращает false, а мой reader.Read() по-прежнему возвращает false...

Я могу подтвердить, что запуск процедуры с помощью Toad возвращает правильный набор результатов...

Любые идеи? Что я делаю неправильно?

Спасибо.


person TiernanO    schedule 07.06.2013    source источник


Ответы (1)


Итак, после долгих копаний я нашел решение.

Исходный код использовал ExecuteReader. Я изменил его для запуска ExecuteNonQuery.

Я передаю те же параметры и типы, что и раньше (2 входа, 2 выхода, один из которых — строка, один — refcursor).

Когда ExecuteNonQuery запускается, я вижу значение третьего параметра (строка). то я делаю следующее:

OracleDataReader dr = ((OracleRefCursor)pRefcursor.Value).GetDataReader();

Тогда я могу делать свои обычные петли с доктором! Счастливые дни!

person TiernanO    schedule 07.06.2013
comment
Можешь скинуть ссылку откуда взял этот код? - person H.Wolper; 19.02.2015
comment
понятия не имею, откуда я это взял... прошло 18 месяцев или около того с тех пор, как я даже посмотрел на этот код. Я знаю, что это все еще работает и все еще находится в производстве! - person TiernanO; 20.02.2015
comment
@TiernanO, не могли бы вы помочь мне с этим stackoverflow.com/questions/41306344/ - person sam; 24.12.2016