import cx_Oracle #导包
#连接数据库
conn = cx_Oracle.connect('cheng/123456@192.168.3.201:1521/orcl')
# 使用cursor()方法获取操作游标
cursor = conn.cursor()
#初始化存储过程中in类型参数
PI_S_DATE = '2021070815'
PI_S_DEPARTMENT = '北京投资部'
PI_S_PORTNAME = '产品名称'
PI_S_RIVALNAME = '交易对手'
PI_S_TRANSAMT = '1000,2000,3000'
PI_S_MORTAGAGEAMT = '75000,46000,90000'
PI_S_WINDCODE = '145876.SH,151200.SH,162208.SH'
po_errcod = cursor.var(cx_Oracle.STRING) # 定义出参类型
po_errmsg = cursor.var(cx_Oracle.STRING) # 定义出参类型
po_cursor = cursor.var(cx_Oracle.CURSOR) # 定义出参类型,这个就是游标
#调用存储过程
data = cursor.callproc('az_wasp.PKG_CMWA_REPORT_SUPERVISE_CZR2.SP_REVERSE_REPO_SPREADSHEET',
[PI_S_DATE, PI_S_DEPARTMENT, PI_S_PORTNAME, PI_S_RIVALNAME, PI_S_TRANSAMT, PI_S_MORTAGAGEAMT, PI_S_WINDCODE,po_errcod, po_errmsg, po_cursor])
#po_cursor下标是9,取到po_cursor
ret_cursor = data[9]
#遍历取数,这个line就是结果集中的每一行数据了
for line in ret_cursor:
print(line)
print(line[1])
cursor.close()
conn.close()
#注:如果报错:connection cannot be closed when open statements or LOBs exist,说明是cx_oracle版本较低 ,请更换cx_oracle。我的是6.1有这个问题,后面换成8.多就OK了
使用python调用oracle存储过程,返回值是游标结果集 出参:PO_CURSOR OUT SYS_REFCURSOR
最新推荐文章于 2023-07-18 00:58:38 发布