2010-08-12 5 views
1

나는이 코드 조각 DATA_TYPE = NUMBER (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

업무와 주변 cursor.fetchone() 전에 time.sleep(1)을두고있다 :

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

내가 지금 유니 코드 지원 cx_Oracle과 5.0.4을 사용하여이 문제에 실행하고 있습니다. 위의 허용 된 솔루션은 나에게 적합하지 않았습니다. 질문의 DELETED 열은이 버그의 원인이되는 숫자 열입니다.

메일 링리스트 (http://comments.gmane.org/gmane.comp.python.db.cx-oracle/2390)에 따르면 오라클의 유니 코드 지원 cx_Oracle에만 표시되는 버그 일 수 있습니다. 링크에서

:. 내가 유니 코드 지원없이 cx_Oracle과를 만들 때 는 "그것은 예상 모든 작품은 제가 숫자 값 (예) 반환하는 쿼리 를 사용하려고 시도하는, 유니 코드 지원 cx_Oracle과 를 빌드 할 때 이 예외

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() 
관련 문제