使用python调用oracle存储过程,返回值是游标结果集 出参:PO_CURSOR OUT SYS_REFCURSOR

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了














  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值