2008-11-28 5 views
1

У меня есть быстрый вопрос о получении результатов от слабо типизированного курсора и было интересно, если кто-нибудь столкнулся с этой проблемой раньше?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: типы Возвращение Результирующий набор переменных или запрос сделать не матч

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

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

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

+0

Попробуйте изменить параметры `OUT` на` IN OUT` и посмотрите, не заботится ли об этом. – 2014-10-18 03:22:47

ответ