【问题标题】:strange Oracle error: "invalid format text"奇怪的 Oracle 错误:“无效的格式文本”
【发布时间】:2010-08-12 00:42:45
【问题描述】:

我正在尝试使用这段代码从 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

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

【问题讨论】:

    标签: python-3.x cx-oracle


    【解决方案1】:

    我现在使用支持 Unicode 的 cx_Oracle 5.0.4 遇到了这个问题。上述接受的解决方案对我不起作用。问题中的 DELETED 列是 Numeric 列,这就是导致此错误的原因。

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

    来自链接: “当我在没有 Unicode 支持的情况下构建 cx_Oracle 时,一切都按预期工作。 当我构建 cx_Oracle with 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 站点包目录。

      【讨论】:

        【解决方案3】:

        解决方法是将time.sleep(1) 放在cursor.fetchone() 之前:

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

        【讨论】:

          【解决方案4】:

          我有同样的错误。

          提交帮助了我:

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2017-07-01
            • 2021-09-24
            • 2016-04-20
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多