使用游标作为返回变量
Posted
技术标签:
【中文标题】使用游标作为返回变量【英文标题】:Using cursor as a return variable 【发布时间】:2018-02-13 07:54:02 【问题描述】:我正在对我用 Python 3.6 编写的 Oracle 11g 运行查询:
# running CP_ALL_PCK.get_pr
# open conncetion
con_get_pr = cx_Oracle.connect("****", "****", "****")
pr_cursor = con_get_pr.cursor()
# set parameters
pCurs = pr_cursor.var(cx_Oracle.CURSOR)
pRetCode = pr_cursor.var(cx_Oracle.NUMBER)
# run cursor
try:
pr_cursor.callproc('CP_ALL_PCK.get_pr',(pCurs,pRetCode))
except cx_Oracle.DatabaseError as exception:
print ('Failed to call procedure')
print (exception)
exit (1)
pr_cursor.fetchall()
res = pCurs.fetchall()
for row in res:
print(row)
pr_cursor.close()
con.close()
当我尝试使用 pCurs 光标时出现此错误:
pr_cursor.fetchall()
cx_Oracle.InterfaceError: not a query
如何使用和遍历这个光标?我在 cx_oracle 的文档中搜索了答案,但找不到任何关于迭代作为过程变量返回的游标的参考。
【问题讨论】:
你说 "this error" 但你没有告诉我们错误是什么。如果没有重要的线索,很难告诉你哪里出了问题。 删除pr_cursor.fetchall()
这一行,因为错误提示它不是查询
@Plirkee,但我如何通过 pCurs 进行迭代?我做错了吗?
@neoghost for pCurs
你得到了res = pCurs.fetchall()
行,而不是pr_cursor
没有什么可取的。
【参考方案1】:
我解决了!
# run cursor
try:
res = pr_cursor.callproc('<name of procedure>',[pCurs,pRetCode])[0]
except cx_Oracle.DatabaseError as exception:
print ('Failed to call procedure')
print (exception)
exit (1)
i=0
for line in res:
i=i+1
print (") ".format(i,line))
pr_cursor.close()
con.close()
我在末尾缺少 [0] 表示我希望返回光标。 感谢大家的帮助。
找到它here
【讨论】:
以上是关于使用游标作为返回变量的主要内容,如果未能解决你的问题,请参考以下文章