странная ошибка Оракула:“неверный формат текста”

StackOverflow https://stackoverflow.com/questions/3463919

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

Другие советы

Сейчас я решаю эту проблему, используя cx_Oracle 5.0.4 с поддержкой Unicode.Приведенное выше принятое решение у меня не сработало.УДАЛЕННЫЙ столбец в вопросе - это числовой столбец, который и является причиной этой ошибки.

Согласно списку рассылки ( http://comments.gmane.org/gmane.comp.python.db.cx-oracle/2390 ) возможно, это ошибка в Oracle, которая отображается только в cx_Oracle с поддержкой Unicode.

по ссылке:"Когда я создаю cx_Oracle без поддержки Unicode, все работает так, как ожидалось.Когда я создаю 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 выполните:

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()
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top