4

これで私の机に頭をぶつけます。

cx_Oracle カーソルが有効なクエリに対して行を返さず、その理由がわかりません。

同じ接続は、同じスキーマ内の他のテーブルから期待される結果を返します...たとえば、クエリで参照されるテーブル名を TABLE_A から TABLE_B に変更すると、正常に動作します。

クエリは、同じユーザー/接続文字列を使用して SQL Developer/SQL Plus で正常に動作します。デバッグ中にcursor.statementからコピー/貼り付けして、まったく同じステートメントでタイプミスがないことを確認しました。

クエリを可能な限り単純な形式に減らしました。

1. select * from SCHEMA.TABLE_A

2. select * from SCHEMA.TABLE_B

クエリ 1 は、cx_Oracle を使用して実行すると行を返しませんが、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 を使用しています。

何か案は ?私の目や脳が明らかに見えていない場所を見つけますか?

4

1 に答える 1