在这一个上我的头靠在我的桌子上。
我的cx_Oracle游标没有为有效查询返回任何行,我无法弄清楚原因。
相同的连接返回同一模式中其他表的预期结果...例如,如果我只是将查询中引用的表名从TABLE_A更改为TABLE_B,它可以正常工作。
查询在SQL Developer / SQL Plus中使用相同的用户/连接字符串正常工作。 我在调试期间从cursor.statement复制/粘贴以验证完全相同的语句,没有拼写错误。
我已将查询缩减为最简单的形式;
1. select * from SCHEMA.TABLE_A
和
2. select * from SCHEMA.TABLE_B
使用cx_Oracle执行时,查询1不返回任何行,但是在SQLPlus / SQL Developer等中返回预期的行。
查询2使用cx_Oracle按预期工作
我已经验证了权限 - 但这显然有效,因为我正在使用(并验证)cx_Oracle中的用户/连接与SQL工具中的相同。
代码无法再减少/简化我不认为能够隔离问题 - 但我可能对一些非常明显的东西视而不见:
import cx_Oracle
db_conn=cx_Oracle.connect('user/password@localhost:1521/TEST_PDB')
cur = db_conn.cursor()
qry = 'select * from SCHEMA_NAME.TABLE_A'
cur.execute(qry)
{cx_Oracle.Cursor on {cx_Oracle.Connection to user @ localhost:1521 / TEST_PDB}}
cur.fetchall()
[]
cur.rowcount
0
然而,另一个表/查询工作:
qry = 'select * from SCHEMA_NAME.TABLE_B'
cur.execute(qry)
cur.fetchall()
[(12320573611891L,'23 .5.2126981',0,'NEW','UPDATE',datetime.datetime(2016,5,24,9,0),48,0,无,无)]
这是我遇到过这个问题的唯一表 - 我到目前为止都知道。
我使用的是Oracle 12c,python 2.7.11 64位,以及ojdbc6.jar和64位InstantClient
有任何想法吗 ? 发现我的眼睛或大脑看不到明显的东西?