Хранимые процедуры Oracle - возврат курсора из процедуры, которая открывает курсор - PullRequest
4 голосов
/ 05 марта 2010

Использование .Net и Oracle 11g - я возвращал dataTables из процедуры внутри пакета, открывая курсор.

IE - 'OPEN TABLEREF FOR SOMESQL; Где TableRef является параметром «OUT». Работает отлично.

Я пытаюсь сделать так, чтобы первый Proc вызвал другой Proc и позволил второму Proc открыть курсор.

Внутри Proc1 (который имеет TableRef в качестве параметра OUT) - я выполняю команду Execute Immediate для вызова Proc2. Proc2 также имеет TableRef, определенный как выходной параметр, делает OPEN TABLEREF FOR SOMESQL. Все это прекрасно компилируется - но когда я пытаюсь запустить его; Я получаю следующую ошибку:

ORA-00604: ошибка произошла на рекурсивном уровне SQL 1 ORA-01001: неверный курсор

Может кто-нибудь сказать мне, что я делаю не так?

EDIT Если я изменю свой оператор немедленного выполнения для включения «OUT TABLEREF» вместо «TABLEREF», моя ошибка изменится на ... ORA-03113: конец файла в канале связи

1 Ответ

1 голос
/ 05 марта 2010

При передаче переменных курсора между динамическими SQL может потребоваться объявить его как IN OUT:

BEGIN
    EXECUTE IMMEDIATE '
    BEGIN
        EXECUTE IMMEDIATE ''BEGIN OPEN :tableRef FOR SELECT 1 FROM dual; END;'' USING IN OUT :tableRef;
    END;
    ' USING IN OUT :tableRef;
END;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...