Как увидеть результат / вывод рефкурсора в Oracle SQL Developer?

Возможный дубликат:
Лучший способ / инструмент для получения результатов процедуры пакета oracle
Oracle SQL Developer: Показать результаты REFCURSOR в таблице?

Я новичок в Oracle SQL Developer. Я использую Oracle SQL Developer версии 3.0. Я пытался протестировать свой SP, используя следующий запрос.

DECLARE
  type output_cursor is ref cursor;
  P_CURSOR output_cursor;
BEGIN
  P_CURSOR := NULL;
  myPackage.mySPTest (  P_NOTIFICATION_ID => 1975357,P_CURSOR => P_CURSOR) ;
END;

Когда я запустил вышеуказанный запрос в моем Oracle SQL Developer, я получаю сообщение «анонимный блок завершен» и не показываю никаких результатов.

Кто-нибудь может мне помочь, как посмотреть результат.

.


person Prabin Yovan    schedule 22.12.2011    source источник
comment
какой результат вы ожидаете? Куда делись «результаты» вашего sp? вы, вероятно, захотите написать оператор SELECT против этого ...   -  person Randy    schedule 23.12.2011
comment
Ожидается набор результатов из строк и столбцов. Результаты SP передаются в программу .NET. Как написать выделение напротив курсора ... неплохо бы какой-нибудь образец ..   -  person Prabin Yovan    schedule 23.12.2011
comment
Вместо этого используйте Toad, он отобразит вам содержимое рефкурсора.   -  person Igby Largeman    schedule 23.12.2011


Ответы (2)


Вы можете использовать переменную привязки, объявленную в SQL Developer, для хранения и отображения результатов:

var r refcursor;
exec myPackage.mySPTest(P_NOTIFICATION_ID => 1975357, P_CURSOR => :r);
print r;

exec - это сокращение для анонимного блока, поэтому это эквивалентно:

var r refcursor;
begin
    myPackage.mySPTest(P_NOTIFICATION_ID => 1975357, P_CURSOR => :r);
end;
/
print r;

Если P_CURSOR не объявлен чем-то бесполезным, возможно ...

person Alex Poole    schedule 23.12.2011
comment
А, я не заметил, что @sathya поместил две ссылки в свой комментарий к вопросу; вторая (и ссылка в первой) указывает на то, что Тони Эндрюс делает то же самое. Я собирался с старый ответ, хотя. - person Alex Poole; 23.12.2011
comment
Я знаю, что это действительно старый ответ, но он по-прежнему лучший результат в Google ... Это не работает в SQL Developer 18 с Oracle 11g. Просто выкидывает Ora-06550 - identifier 'R' must be declared. - person WSC; 11.03.2020
comment
@WSC - Я не могу проверить прямо сейчас, но я как минимум на 99% уверен, что сделал именно это и с этими версиями. Вы использовали двоеточие в нужном месте? - person Alex Poole; 11.03.2020
comment
@WSC - нет, определенно работает точно так же, как написано в 18.1, 18.2, 18.3 и 18.4 против 11.2.0.4 БД. Это версия 18.4. Ошибка действительно предполагает, что вы просто использовали r вместо :r в своем вызове. - person Alex Poole; 16.03.2020
comment
Ах, думаю, ты прав. Я только что попробовал еще раз в SQL Developer и SQL * Plus, и он работает, как вы сказали. Не совсем уверен, как мне это удалось, поскольку я мог поклясться, что скопировал и вставил его, чтобы убедиться, что формат был точно таким же ... - person WSC; 16.03.2020
comment
Первый блок с «exec» не работает для Oracle 19c в SQL Developer 3.2.20.10. Однако второй вариант с begin ...... end работает нормально. Спасибо - person Manoharan; 10.02.2021

Чтобы просмотреть результаты курсора, вам нужно перебрать курсор и распечатать значения. Вам нужно знать имена столбцов, которые возвращает ваш курсор. Вы можете сделать что-то вроде:

DECLARE
   type output_cursor is ref cursor;
   P_CURSOR output_cursor;
BEGIN
   P_CURSOR := NULL;
   DOCTORS_APP.get_reminders (  P_NOTIFICATION_ID => 1975357,P_CURSOR => P_CURSOR) ;
   //replace Column1 and Column2 with actual column names
   FOR CUR_VAL in P_CURSOR LOOP
        DBMS_OUTPUT.PUT_LINE(CUR_VAL.Column1||' '||CUR_VAL.Column2);
   END LOOP;
 END;
person Emmanuel N    schedule 22.12.2011
comment
Я пробовал образец, он дает ошибку. - person Prabin Yovan; 23.12.2011
comment
какая ошибка? Вы добавили в Column1 и Column2 настоящие имена столбцов? - person Emmanuel N; 23.12.2011
comment
error Ошибка запуска в строке 1 в команде: Отчет об ошибке: ORA-06550: строка 11, столбец 10: PLS-00221: «P_CURSOR» не является процедурой или не определен ORA-06550: строка 11, столбец 1: PL / SQL: Оператор игнорируется 06550. 00000 - строка% s, столбец% s: \ n% s * Причина: Обычно ошибка компиляции PL / SQL. *Действие: - person Prabin Yovan; 23.12.2011
comment
Приведенный выше код на самом деле не работает. - person OverMars; 04.11.2015