У меня есть хранимая процедура, которую я определил в Oracle. В этой процедуре мне нужно вернуть набор записей. Для этого я использую SYS_REFCURSOR, который отлично работает внутри Oracle (и с cx_Oracle, если уж на то пошло). В моем приложении я использую сеансы с областью действия SqlAlchemy для поддержки многопоточности.
Как я могу использовать сеанс с ограниченной областью действия, чтобы вернуть REF CURSOR? Единственный способ, которым я смог заставить это работать, — это объявить курсор вывода с курсором, который активен в сеансе, а затем выполнить хранимую процедуру, как показано ниже:
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 управлять курсорами. Если это невозможно, есть ли причина, по которой выборка займет так много времени?
Спасибо
REF CURSOR? - person zmouser   schedule 06.12.2011