seltsame Oracle-Fehler: „ungültiges Format Text“
-
27-09-2019 - |
Frage
Ich versuche, einige Daten aus einer Spalte, deren DATA_TYPE = NUMBER (1,0) mit diesem Stück Code zu holen:
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])
, die so klagt:
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
Ersetzen 'deleted' Spalte mit einer, dessen DATA_TYPE = VARCHAR2 nicht werfen, eine solche Beschwerde.
Lösung 3
Ein Work-around ist time.sleep(1)
vor cursor.fetchone()
setzen:
...
cursor.execute("SELECT DELETED FROM SERVICEORDER WHERE ORDERID='TEST'")
time.sleep(1)
print(cursor.fetchone()[0])
Andere Tipps
Ich arbeite jetzt in dieses Problem mit cx_Oracle 5.0.4 mit Unicode-Unterstützung. Die oben akzeptierte Lösung nicht für mich arbeiten. Die DELETED Spalte in der Frage ist eine numerische Spalte, das ist, was diesen Fehler verursacht.
Nach der Mailing-Liste ( http: // Kommentare. gmane.org/gmane.comp.python.db.cx-oracle/2390 ) kann es ein Fehler in Oracle sein, dass zeigt nur in cx_Oracle mit Unicode-Unterstützung.
über den Link: „Wenn ich cx_Oracle ohne Unicode-Unterstützung bauen, es funktioniert alles wie erwartet. Als ich cx_Oracle bauen mit Unicode-Unterstützung, zu versuchen, eine Abfrage verwenden dass gibt einen numerischen Wert (wie):
con = Connection( ... )
cur = con.cursor()
cur.execute( 'SELECT 1 FROM DUAL' )
rows = cur.fetchall()
Ergebnisse in dieser Ausnahme:
cx_Oracle.DatabaseError: OCI-22061: invalid format text [T
"
Was ich um es an die Arbeit getan hat, ist auf der Select-Anweisung, zu tun:
cur.execute( 'SELECT to_char(1) FROM DUAL' )
rows = cur.fetchall()
for row in rows:
val = int(row[0])
Es ist ziemlich hässlich, aber es funktioniert.
Diese Arten von Fehlern ging weg, als ich 5,1 bis cx_Oracle aufgewertet. Wenn die RPM nicht installiert (wie es für mich auf Red Hat 5.5 passiert), dann können Sie in der Regel die Datei rpm2cpio, die cx_Oracle.so nehmen und es in Ihre Python site-packages-Verzeichnis.
Ich hatte den gleichen Fehler.
Commit mir geholfen:
conn = cx_Oracle.connect(...)
...
cursor.execute()
conn.commit()