Курсор возвращенной ссылки не поддерживается

Я пытаюсь сделать диаграмму в программном обеспечении для создания отчетов на панели инструментов базы данных (Logi Info). У меня есть пакет PL SQL, который возвращает курсор ref с несколькими значениями, но кажется, что Logi Info не поддерживает это и выдает ошибку ORA-00904: "DASHBOARD_PACKAGE"."GETSUMMARYDATA": invalid identifier. Я думаю, что он либо не поддерживается, либо мой запрос неверен. Это мой запрос:

выберите dashboard_package.getSummaryData(1,sysdate) из двойного

Это как вызвать функцию, которая возвращает несколько значений? если да, то есть ли решение этой проблемы (тип возврата не поддерживается)?


person code511788465541441    schedule 06.01.2011    source источник
comment
Вы можете опубликовать спецификацию пакета для DASHBOARD_PACKAGE.GETSUMMARYDATA?   -  person Harrison    schedule 06.01.2011


Ответы (2)


Это ошибка компиляции. Ваша функция GETSUMMARYDATA() ссылается на недопустимое имя объекта, таблицу, столбец или что-то еще. Если вы используете динамический SQL, вы не получите эту ошибку компиляции до времени выполнения.

Итак, вам нужно закодировать источник вашей функции и найти неправильно названную вещь. Номер строки, который идет с сообщением об ошибке, должен помочь вам здесь.

person APC    schedule 06.01.2011

Если вы используете SQL*Plus, вам нужно использовать специальный синтаксис для доступа к REF CURSORS.

Это подробно описано в руководстве по SQL*Plus:
http://download.oracle.com/docs/cd/B19306_01/server.102/b14357/ch5.htm#sthref1127

Так что в вашем случае это будет примерно так:

VARIABLE cv REFCURSOR
EXECUTE dashboard_package.getSummaryData(1, sysdate, :cv)
print cv

Обратите внимание, что положение переменной :cv зависит от определения вашей процедуры.
Но поскольку вы не показали нам исходный код...

Изменить
Чтобы охватить все возможности (как указано APC): если функция действительно возвращает курсор ref, то синтаксис немного отличается, как описано в следующей главе руководства:
http://download.oracle.com/docs/cd/B19306_01/server.102/b14357/ch5.htm#sthref1128

VARIABLE cv REFCURSOR
execute :cv := dashboard_package.getSummaryData(1, sysdate);
print cv
person a_horse_with_no_name    schedule 06.01.2011
comment
ОП говорит, что они определили функцию, которая возвращает курсор ref, и их опубликованный вызов SQL, похоже, подтверждает это. SQL*Plus поддерживает курсоры ref в операторах SELECT без необходимости использования переменных — по крайней мере, в более поздних версиях. См. мой ответ на их другой вопрос: stackoverflow.com/questions/4614475/ - person APC; 06.01.2011
comment
Я, конечно, согласен с тем, что ваше предложение является весьма спекулятивным решением ошибки ORA-00904;) - person APC; 06.01.2011