oracle数据库提取数据为十六进制如何转换
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了oracle数据库提取数据为十六进制如何转换相关的知识,希望对你有一定的参考价值。
参考技术A 如果楼主的substr(XMXM,13,8)
格式完全标准,不存在非16进制的格式,则语句很简单
select
to_number(substr(XMXM,13,8),'xxxxxxxxxx')
from
sonz112;
但如果
substr(XMXM,13,8)
格式存在不标准的情况,则以上语句会报错,无法提出任何结果,这就需要用自定义函数来实现:
create
or
replace
function
test_fun_16to10(str_num
varchar2)
return
number
is
begin
return
to_number(str_num,'xxxxxxxxxx');
exception
when
others
then
return
'';
end;
select
test_fun_16to10(substr(XMXM,13,8),'xxxxxxxxxx')
from
sonz112;
这样对于格式不标准的行,就会返回NULL值。
如何在python中将十六进制字符串转换为二进制以使用cx_oracle插入
【中文标题】如何在python中将十六进制字符串转换为二进制以使用cx_oracle插入【英文标题】:How to convert hex string to binary in python for insert using cx_oracle 【发布时间】:2012-02-11 18:27:19 【问题描述】:我有一个包含 16 位十六进制数字列表的文本文件(例如“61C7393AA9B3474DB081C7B7CCE1C545”),我需要使用 cx_Oracle 将它们插入一个 Oracle RAW 列。 我试过这个:
sql = "INSERT INTO GUIDS VALUES (HEXTORAW(:1))"
ids = [l.strip() for l in guidfile.readlines()]
cursor.bindarraysize = len(ids)
cursor.setinputsizes(cx_Oracle.BINARY)
cursor.executemany(sql, ids)
但由于 cx_Oracle.DatabaseError: ORA-01036: 非法变量名称/编号而失败。 在调用 executemany 之前,我是否需要在 python 中将值转换为二进制?如果是这样怎么办?请注意,相同的 sql 适用于 cursor.execute 和单个值,它仅适用于我遇到问题的列表。
【问题讨论】:
【参考方案1】:嗯,我已经通过几种方式解决了这个问题。首先,上面的代码是不正确的,因为它创建了一个值列表,而它应该创建一个元组列表。即
ids = [(l.strip(),) for l in guidfile.readlines()]
然后使用
cursor.setinputsizes(cx_Oracle.STRING)
它有效。 在最初的问题上 - 如何摆脱 hextoraw,我发现这是可行的:
import base64
ids = [(base64.b16decode(l.strip()),) for l in guidfile.readlines()]
cursor.setinputsizes(cx_Oracle.BINARY)
【讨论】:
以上是关于oracle数据库提取数据为十六进制如何转换的主要内容,如果未能解决你的问题,请参考以下文章
Oracle - ORA-01422:精确提取返回的行数超过了请求的行数
如何将此混合行/列表转换为所需的输出。 (Oracle SQL/发行版:Ora12c)
Pentaho Spoon 转换抛出:ORA-01652:无法在表空间 TEMP 中将临时段扩展 128