我正在尝试在 python 和 oracle db 之间调用存储过程。我遇到的问题是传递一个游标输出参数。
Oracle 存储过程本质上是:
create or replace procedure sp_procedure(
cid int,
rep_date date,
ret out sys_refcursor
) is
begin
open ret for
select
...
end;
调用数据库的python代码是:
import cx_Oracle
from datetime import date
connstr='user/pass@127.0.0.1:2521/XE'
conn = cx_Oracle.connect(connstr)
curs = conn.cursor()
cid = 1
rep_date = date(2011,06,30)
curs.callproc('sp_procedure', (cid, rep_date, curs))
错误是:
curs.callproc('sp_procedure', (cid, rep_date, curs))
cx_Oracle.DatabaseError: ORA-01036: illegal variable name/number
我还尝试将字典作为关键字参数传递:
cid = 1
rep_date = date(2011,06,30)
call_params = {'cid': cid, 'rep_date': rep_date, 'ret': curs}
curs.callproc('sp_procedure', (cid, rep_date, curs), call_params)
返回相同的错误。
谢谢。