strano errore Oracle: “text formato non valido”
-
27-09-2019 - |
Domanda
sto cercando di recuperare alcuni dati da una colonna di cui DATA_TYPE = NUMERO (1,0) con questo pezzo di codice:
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])
che si lamenta così:
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
La sostituzione colonna 'CANCELLATO' con uno la cui DATA_TYPE = VARCHAR2 non gettare un tale denuncia.
Soluzione 3
Un work-around sta mettendo time.sleep(1)
prima cursor.fetchone()
:
...
cursor.execute("SELECT DELETED FROM SERVICEORDER WHERE ORDERID='TEST'")
time.sleep(1)
print(cursor.fetchone()[0])
Altri suggerimenti
Sono in esecuzione in questo problema ora usando cx_Oracle 5.0.4 con supporto Unicode. La soluzione accettata di cui sopra non ha funzionato per me. La colonna eliminata in questione è una colonna numerica, che è ciò che provoca questo bug.
Secondo la mailing list ( http: // commenti. gmane.org/gmane.comp.python.db.cx-oracle/2390 ) può essere un bug in Oracle che mostra solo in cx_Oracle con supporto Unicode.
dal link: "Quando costruisco cx_Oracle senza il supporto di Unicode, tutto funziona come previsto. Quando costruisco cx_Oracle con il supporto Unicode, il tentativo di utilizzare una query che restituisce un valore numerico (ad esempio):
con = Connection( ... )
cur = con.cursor()
cur.execute( 'SELECT 1 FROM DUAL' )
rows = cur.fetchall()
risultati in questa eccezione:
cx_Oracle.DatabaseError: OCI-22061: invalid format text [T
"
Quello che ho fatto per il lavoro intorno ad esso, è l'istruzione SELECT, fare:
cur.execute( 'SELECT to_char(1) FROM DUAL' )
rows = cur.fetchall()
for row in rows:
val = int(row[0])
E 'abbastanza brutto, ma funziona.
Questi tipi di errore è andato via quando ho aggiornato a cx_Oracle 5.1. Se il numero di giri non si installa (come è successo per me su Red Hat 5.5) poi di solito si può rpm2cpio il file, prendere la cx_Oracle.so e metterlo nella directory site-packages python.
Ho avuto lo stesso errore.
Commit mi ha aiutato:
conn = cx_Oracle.connect(...)
...
cursor.execute()
conn.commit()