为提高效率,提问时请提供以下信息,问题描述清晰可优先响应。
【DM版本】: DM8 Build 2022.09.14
【操作系统】:Windows11
【CPU】: x86
【问题描述】*:因为业务需要,在Python程序中,需要从Oracle读取表的内容,再写入达梦的表中。
从Oracle读取的数据放在一个tuple数据中
oracle_cur = oracle_conn.cursor()
oracle_cur.execute(sql)
oracle_rows = oracle_cur.fetchall()
由于该表在两个数据库中是完全一致的,读取的数据没有进行数据类型转换,
cursor.executemany(insert_sql, oracle_rows)
cursor.execute("commit")
以上代码对于没有CLOB字段的表运行正常,但是遇到含有CLOB字段的表,在写入时发生错误。
dmPython.NotSupportedError: Variable_TypeByValue(): unhandled data type LOB
在Oracle数据库中select该表发现,该CLOB字段实际上最长的数据也只有200字符,也包括一些为NULL的数据。很显然并不是由于数据溢出造成的错误。
该系统中有相当数量的CLOB和BLOB字段,如何在代码中处理类似的错误?
从github上找到一个解决方案,增加了这么一个函数,把LOB类型强制转换成string,毕竟目前碰到的CLOB实际上是个备注字段,放了比较长的文字。
然后在获取数据之后,进行了数据处理,不用fetchall而是换了一个方法进行预处理。
暂时解决了这个问题,但是引发了一个新的疑问。如果碰上BLOB类型的字段又该怎么办?