У меня есть хранимая процедура, которую я определил в 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 управлять курсорами.Если это невозможно, есть ли причина, по которой выборка займет так много времени?
Спасибо,
Зак