Question

Je suis en train de chercher des données d'une colonne dont DATA_TYPE = NUMBER (1,0) avec ce morceau de code:

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])

qui se plaint ainsi:

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

Remplacement colonne « SUPPRIME » avec celui dont DATA_TYPE = VARCHAR2 ne jette pas une telle plainte.

Était-ce utile?

La solution 3

met au travail autour time.sleep(1) avant cursor.fetchone():

...
cursor.execute("SELECT DELETED FROM SERVICEORDER WHERE ORDERID='TEST'")
time.sleep(1)
print(cursor.fetchone()[0])

Autres conseils

Je suis en cours d'exécution pour ce problème en utilisant maintenant cx_Oracle 5.0.4 avec le support Unicode. La solution ci-dessus acceptée n'a pas fonctionné pour moi. La colonne SUPPRIME dans la question est une colonne numérique, qui est ce qui provoque ce bogue.

D'après la liste de diffusion ( http: // commentaires. gmane.org/gmane.comp.python.db.cx-oracle/2390 ), il peut être un bogue dans Oracle qui ne montre que dans cx_Oracle avec le support Unicode.

à partir du lien: « Quand je construis cx_Oracle sans support Unicode, tout fonctionne comme prévu. Quand je construis cx_Oracle avec support Unicode, essayez d'utiliser une requête qui retourne une valeur numérique (par exemple):

con = Connection( ... )
cur = con.cursor()
cur.execute( 'SELECT 1 FROM DUAL' )
rows = cur.fetchall()

résultats dans cette exception:

cx_Oracle.DatabaseError: OCI-22061: invalid format text [T

"

Ce que je faisais au travail autour d'elle, est sur l'instruction select, faites:

cur.execute( 'SELECT to_char(1) FROM DUAL' )
rows = cur.fetchall()
for row in rows:
    val = int(row[0])

Il est assez laid, mais ça fonctionne.

Ces types d'erreurs a disparu quand je suis passé à cx_Oracle 5.1. Si le RPM n'installe pas (comme il est arrivé pour moi sur Red Hat 5.5), vous pouvez généralement rpm2cpio le fichier, prenez le cx_Oracle.so et la mettre dans votre python répertoire site-packages.

J'ai eu la même erreur.

commit m'a aidé:

conn = cx_Oracle.connect(...)
...
cursor.execute()
conn.commit()
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top