2010-08-12 65 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()