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