【发布时间】:2017-02-28 16:51:46
【问题描述】:
在低于 12 的 Oracle 版本中调用存储过程后,如果不使用 OUT ref 游标参数,我将无法从 PL/SQL 块或过程中获得隐式结果。
我使用的cx_Oracle 版本是5.2.1。 Python 版本是 2.7。
connection = cx_Oracle.connect(con_param)
cursor_e = connection.cursor()
cursor_e.callproc('my_proc_name',(tstart,tend,falseVar))
我什至尝试过这个解决方案
plsql = """declare
c1 sys_refcursor;
begin
open c1 for
execute my_proc(tstart,tend,falseVar)
dbms_sql.return_result(c1);
end;"""
cursor_e.execute(plsql)
for ix, resultSet in enumerate(cursor_e.getimplicitresults()):
print("Result Set #" + str(ix + 1))
for row in resultSet:
print(row)
print()
上面的代码出现以下错误。 捕获的错误:ORA-06550:第 5 行,第 14 列: PLS-00103:在预期以下情况之一时遇到符号“my_proc_name”:
。 ( * @ % & = - + ; at in 是 mod 余数不是 rem or != or ~= >= and or like like2 like4 likec 在使用 || 之间multiset member submultiset 符号“.”被替换为“my_proc_name”以继续。
当我稍微改变上面的代码时
plsql = """declare
c1 sys_refcursor;
begin
open c1 for
my_proc(tstart,tend,falseVar);
dbms_sql.return_result(c1);
end;"""
cursor_e.execute(plsql)
我收到以下错误
捕获错误:ORA-06550:第 5 行,第 6 列: PLS-00222:此范围内不存在名为“my_proc_name”的函数 ORA-06550:第 4 行,第 16 列: PL/SQL:语句被忽略 ORA-06550:第 6 行,第 15 列: PLS-00302:必须声明组件“RETURN_RESULT” ORA-06550:第 6 行,第 6 列: PL/SQL:语句被忽略
这个过程大约有 300 行,包含大量逻辑。我不能只取出 SQL 并执行它。
【问题讨论】: