我有下表:
create table o_newstdata1 (
field1 raw(8)
);
以下input.data文件:
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';
但它没有用,有什么建议吗?
答案 0 :(得分:4)
可能有两个错误来源:
要检查查询部分是否有效,请使用以下内容:
CREATE TABLE o_newstdata1 (field1 RAW(8));
INSERT INTO o_newstdata1(field1) VALUES ('12AB');
INSERT INTO o_newstdata1(field1) VALUES ('34EF');
您不需要强制转换为raw,您可以直接使用Oracle的十六进制格式。版本1使用从RAW
到VARCHAR2
的隐式转换,版本2显式转换:
SELECT * FROM o_newstdata1 WHERE field1 = '12AB';
SELECT * FROM o_newstdata1 WHERE rawtohex(field1)='12AB';
答案 1 :(得分:1)
数据类型是否应指定为RAW?
来自docs:
当原始二进制数据“按原样”加载到RAW数据库列中时,Oracle数据库不会转换它。如果将其加载到CHAR列,则Oracle数据库会将其转换为十六进制。它无法加载到DATE或数字列中。
此字段的长度是控制文件中指定的字节数。此长度仅受数据库中目标列的长度和内存资源的限制。即使字符长度语义用于数据文件,长度也始终以字节为单位。 RAW数据字段无法分隔。
答案 2 :(得分:1)
如果您的数据不是真正的二进制/原始数据(由列的大小指示),而只是一个数字,您可以将其存储为数字。
Hex只是代表数字(符号)的一种方式。因此,我只是将其存储为数字,并在其上放置视图,以便您可以直接查看/查询十六进制值。
这样您甚至可以在数据库中添加或比较这些值。