【发布时间】:2012-01-13 11:34:49
【问题描述】:
我有一个在 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 管理游标的同时执行该过程。如果这不可能,是否有原因导致提取需要这么长时间?
谢谢
【问题讨论】:
-
嗯,速度慢肯定是我自己的错,而且是存储过程中的错误查询。问题仍然存在,有没有更好的方法在 SqlAlchemy 中调用存储过程,使用 Oracle
REF CURSOR?
标签: oracle stored-procedures sqlalchemy