Выполнение хранимой процедуры Oracle, возвращающей REF CURSOR с использованием SqlAlchemy - PullRequest
7 голосов
/ 05 декабря 2011

У меня есть хранимая процедура, которую я определил в Oracle.В этой процедуре мне нужно вернуть набор записей.Чтобы сделать это, я использую SYS_REFCURSOR, который прекрасно работает внутри Oracle (и в этом случае с cx_Oracle).В моем приложении я использую сеансы SqlAlchemy с областью действия для поддержки многопоточности.

Как я могу использовать сессию с областью действия, чтобы вернуть REF CURSOR?Единственный способ заставить это работать - это объявить курсор out с курсором, который активен в сеансе, и затем выполнить хранимую процедуру, как показано ниже:

sql = """
    BEGIN
        example('%s', '%s', '%s', :cur);
    END;
""" % (cid, show, type)

conn = sa_tool.session.connection()
in_cur = conn._Connection__connection.cursor()
out_cur = conn._Connection__connection.cursor()
in_cur.execute(sql, cur=out_cur)
results = out_cur.fetchall()

В идеале, я быЯ хотел бы избежать использования объекта подключения таким образом и выполнять процедуру, позволяя SqlAlchemy управлять курсорами.Если это невозможно, есть ли причина, по которой выборка займет так много времени?

Спасибо,

Зак

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...