Pergunta

Estou tentando buscar alguns dados de uma coluna cuja data_type = número (1,0) com este pedaço de código:

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

que reclama assim:

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

Substituindo a coluna 'excluída' por uma cujo data_type = varchar2 não lança essa reclamação.

Foi útil?

Solução 3

Uma articulação está colocando time.sleep(1) antes da cursor.fetchone():

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

Outras dicas

Estou sendo executado para esse problema agora usando o CX_ORACLE 5.0.4 com o suporte do Unicode. A solução aceita acima não funcionou para mim. A coluna excluída na pergunta é uma coluna numérica, que é o que causa esse bug.

De acordo com a lista de discussão ( http://comments.gmane.org/gmane.comp.python.db.cx-oracle/2390 ) pode ser um bug no Oracle que aparece apenas em cx_oracle com suporte Unicode.

A partir do link: "Quando eu construir CX_oracle sem suporte Unicode, tudo funciona como esperado. Quando eu construir CX_oracle com Suporte Unicode, tentando usar uma consulta que retorne um valor numérico (como):

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

Resultados nesta exceção:

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

"

O que fiz para contornar isso, está na declaração selecionada, faça:

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

É muito feio, mas funciona.

Esses tipos de erros desapareceram quando eu atualizei para CX_oracle 5.1. Se o RPM não instalar (como aconteceu para mim no Red Hat 5.5), geralmente você pode rpm2cpio o arquivo, pegue o cx_oracle.so e coloque-o no seu diretório de pacotes de sites python.

Eu tive o mesmo erro.

Commit me ajudou:

conn = cx_Oracle.connect(...)
...
cursor.execute()
conn.commit()
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top