У меня быстрый вопрос о получении результатов от слабо набранного курсора, и мне было интересно, сталкивался ли кто-нибудь с этой проблемой раньше?
Моя установка выглядит следующим образом;
Внутренняя функция;
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: возвращаемые типы
Результат Переменные или запрос не
матч
Я не совсем уверен, что является причиной этого. Ошибка происходит в моем тестовом коде, но я использовал этот же метод сотни раз и не сталкивался с этой проблемой. Единственное отличие состоит в том, что курсор передается обратно через две функции вместо одной.
Кто-нибудь знает, в чем проблема? Я гуглил это, и все, что я могу найти, это предложения строго набирать курсоры, что, к сожалению, для меня не вариант.
Спасибо за любую помощь, кто-нибудь может оказать, ура.