2011-01-06 2 views
0

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

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

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

+2

Вы можете разместить спецификацию пакета для «DASHBOARD_PACKAGE». «GETSUMMARYDATA»? – Harrison

ответ

0

Если вы используете 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 зависит от определение вашей процедуры.
Но как вы не показали нам исходный код ...

Редактировать
Чтобы покрыть все possibilies (как уже упоминалось APC): Если функция действительно возвращает реф курсор, то синтаксис немного разные, как объяснено в следующей главе руководства:
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 
+0

OP говорит, что они определили функцию, которая возвращает курсор ref, и их опубликованный SQL-вызов, похоже, подтверждает это. SQL * Plus поддерживает курсоры ref в операторах SELECT без необходимости в переменных - по крайней мере, в более поздних версиях. См. Мой ответ на их другой вопрос: http://stackoverflow.com/questions/4614475/how-to-call-a-function-in-a-package/4615302#4615302 – APC

+0

Это все предположения, пока мы не увидим настоящий источник код ... –

+0

Я, безусловно, согласен с тем, что ваше предложение является весьма спекулятивным решением для ошибки ORA-00904;) – APC

0

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

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