2010-08-12 17 views
1

我试图获取从其DATA_TYPE = NUM​​BER(1,0)的柱用这段代码一些数据:奇怪Oracle错误:“无效格式文本”

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 

将'DELETED'列替换为其DATA_TYPE = VARCHAR2的列不会引发此类投诉。

回答

0

一个变通办法是把time.sleep(1)cursor.fetchone()前:

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

我在这个问题上运行,现在使用cx_Oracle 5.0.4支持Unicode。上述接受的解决方案并不适合我。问题中的DELETED列是一个数字列,这是导致此错误的原因。

根据邮件列表(http://comments.gmane.org/gmane.comp.python.db.cx-oracle/2390),它可能是Oracle中的一个错误,它只在具有Unicode支持的cx_Oracle中显示。

从链接: “当我建立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]) 

这实在是太丑陋,但它的工作原理。

2

当我升级到cx_Oracle 5.1时,这些类型的错误消失了。如果RPM没有安装(就像我在Red Hat 5.5上发生的那样),那么你通常可以使用rpm2cpio这个文件,把cx_Oracle.so放到你的python site-packages目录中。

0

我有同样的错误。

凯明帮我:

conn = cx_Oracle.connect(...) 
... 
cursor.execute() 
conn.commit()