奇妙なオラクルエラー:「無効なフォーマットテキスト」
-
27-09-2019 - |
質問
このコードを使用して、data_type = number(1,0)を使用した列からデータを取得しようとしています。
import cx_Oracle
conn = cx_Oracle.connect(usr, pwd, url)
cursor = conn.cursor()
cursor.execute("SELECT DELETED FROM SERVICEORDER WHERE ORDERID='TEST'")
print(cursor.fetchone()[0])
このように不平を言う:
Traceback (most recent call last):
File "main.py", line 247, in <module>
check = completed()
File "main.py", line 57, in completed
deleted = cursor.fetchone()[0]
cx_Oracle.DatabaseError: OCI-22061: invalid format text [T
data_type = varchar2がそのような苦情を投げかない「削除」列に置き換えます。
解決 3
回避策が出ています time.sleep(1)
前 cursor.fetchone()
:
...
cursor.execute("SELECT DELETED FROM SERVICEORDER WHERE ORDERID='TEST'")
time.sleep(1)
print(cursor.fetchone()[0])
他のヒント
Unicodeサポートを使用して、CX_ORACLE 5.0.4を使用してこの問題に取り組んでいます。上記の受け入れられた解決策は私にとってはうまくいきませんでした。質問の削除された列は数値列であり、これがこのバグを引き起こすものです。
メーリングリストによると( http://comments.gmane.org/gmane.comp.python.db.cx-oracle/2390 )それは、Unicodeサポートを備えたCX_ORACLEでのみ表示されるOracleのバグかもしれません。
リンクから:「UnicodeサポートなしでCX_ORACLEを構築するとき、それはすべて予想通りに機能します。CX_ORACLEを構築するとき と Unicodeサポート、数値(など)を返すクエリを使用しようとします。
con = Connection( ... )
cur = con.cursor()
cur.execute( 'SELECT 1 FROM DUAL' )
rows = cur.fetchall()
この例外の結果:
cx_Oracle.DatabaseError: OCI-22061: invalid format text [T
"
私がそれを回避するためにしたことは、Select Statementにあります。
cur.execute( 'SELECT to_char(1) FROM DUAL' )
rows = cur.fetchall()
for row in rows:
val = int(row[0])
それはかなり醜いですが、うまくいきます。
これらのタイプのエラーは、CX_ORACLE 5.1にアップグレードしたときに消えました。 RPMがインストールされていない場合(Red Hat 5.5で私のために起こったように)、通常はファイルをRPM2CPIOすることができます。CX_ORACLE.SOを使用して、Pythonサイトパッケージディレクトリに入れます。
同じエラーがありました。
コミットは私を助けてくれました:
conn = cx_Oracle.connect(...)
...
cursor.execute()
conn.commit()