PL / SQL: выборка из курсора, который передается между двумя функциями - PullRequest
1 голос
/ 28 ноября 2008

У меня быстрый вопрос о получении результатов от слабо набранного курсора, и мне было интересно, сталкивался ли кто-нибудь с этой проблемой раньше?

Моя установка выглядит следующим образом;

Внутренняя функция;

create or replace FUNCTION A_CURSOR_TEST_INNER
(
  varCursor OUT SYS_REFCURSOR
)
RETURN NUMBER
AS
  varStatus NUMBER;
BEGIN
  OPEN varCursor  FOR
  SELECT docid
  FROM DOCUMENT_TABLE;

  RETURN 0;
END;

Вызов функции;

create or replace FUNCTION A_CURSOR_TEST_OUTER
(
  varCursor  OUT SYS_REFCURSOR
)
RETURN NUMBER
AS
  varStatus NUMBER;
BEGIN
  varStatus := A_CURSOR_TEST_INNER(varCursor  => varCursor);
  RETURN 0;
END;

Код ремня безопасности;

DECLARE
  varCursor  SYS_REFCURSOR;
  v_Return NUMBER;
BEGIN
  v_Return := A_CURSOR_TEST_OUTER(varCursor  => varCursor);
    DECLARE
        docid_ NUMBER;
    BEGIN
        IF(varCursor %ISOPEN) THEN
            LOOP
                FETCH varCursor  INTO docid_ ;
                EXIT WHEN varCursor %NOTFOUND;
                DBMS_OUTPUT.PUT_LINE(' docid_:' || docid_ );
            END LOOP;
            CLOSE varCursor ;
        END IF;
    END;
END;

Ошибка, которую я получаю при запуске кода моего тестового жгута;

ORA-06504: PL / SQL: возвращаемые типы Результат Переменные или запрос не матч

Я не совсем уверен, что является причиной этого. Ошибка происходит в моем тестовом коде, но я использовал этот же метод сотни раз и не сталкивался с этой проблемой. Единственное отличие состоит в том, что курсор передается обратно через две функции вместо одной.

Кто-нибудь знает, в чем проблема? Я гуглил это, и все, что я могу найти, это предложения строго набирать курсоры, что, к сожалению, для меня не вариант.

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

1 Ответ

2 голосов
/ 28 ноября 2008

Я могу повторить вашу проблему, и мне кажется, что это ошибка Oracle. От Googling я нашел ошибку это обсуждение той же проблемы на OraFAQ .

...