如何插入十六进制数据到oracle表



我有以下表格:

create table o_newstdata1 (
field1 raw(8)
);

下面的输入。数据文件:

0x12345678
0x1234
0x12

如何将这样的数据插入到o_newstdata1表中?

我已经尝试加载它作为一个varchar数据:

load data
INFILE '/export/home/mine/input.data'
replace
into table o_newstdata1
trailing nullcols
(
field1 varchar (8)
)

并像这样查询:

select field1 from o_newstdata1 where utl_raw.cast_to_raw(field1) like '0x1234';

但它不起作用,有什么建议吗?

可能有两种错误来源:

  1. 使用SQL*Loader加载原始数据
  2. 查询原始数据

要检查查询部分是否工作,使用如下命令:

CREATE TABLE o_newstdata1 (field1 RAW(8)); 
INSERT INTO o_newstdata1(field1) VALUES ('12AB');
INSERT INTO o_newstdata1(field1) VALUES ('34EF');

你不需要转换成raw格式,你可以直接使用Oracle的十六进制格式。版本1使用从RAWVARCHAR2的隐式转换,版本2使用显式转换:

SELECT * FROM o_newstdata1 WHERE field1 = '12AB';
SELECT * FROM o_newstdata1 WHERE rawtohex(field1)='12AB'; 

数据类型不应该指定为RAW吗?

From the docs:

当raw,二进制数据被"原样"加载到raw数据库列中时,它不会被Oracle数据库转换。如果它被加载到CHAR列中,那么Oracle数据库将其转换为十六进制。它不能加载到日期或数字列中。

该字段的长度是控制文件中指定的字节数。此长度仅受数据库中目标列的长度和内存资源的限制。长度总是以字节为单位,即使数据文件使用字符长度语义也是如此。RAW数据字段不能被分隔。

如果您的数据不是真正的二进制/原始数据(如列的大小所示),而只是一个数字,则可以将其存储为数字。

十六进制只是表示数字(符号)的一种方式。所以我只是把它存储为一个数字,并在上面放一个视图,这样你就可以直接看到/查询十六进制值。

这样您甚至可以在数据库中添加或比较这些值

最新更新