Sql 如何将十六进制数据插入oracle表?

Sql 如何将十六进制数据插入oracle表?,sql,oracle,sql-loader,Sql,Oracle,Sql Loader,我有下表: 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

我有下表:

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';

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

是否应该将数据类型不指定为RAW

从:

当原始二进制数据按原样加载到原始数据库列中时,Oracle数据库不会对其进行转换。如果将其加载到CHAR列中,则Oracle数据库会将其转换为十六进制。无法将其加载到日期或数字列中

此字段的长度是控制文件中指定的字节数。此长度仅受数据库中目标列的长度和内存资源的限制。长度始终以字节为单位,即使数据文件使用了字符长度语义。无法分隔原始数据字段


数据类型是否应不指定为原始

从:

当原始二进制数据按原样加载到原始数据库列中时,Oracle数据库不会对其进行转换。如果将其加载到CHAR列中,则Oracle数据库会将其转换为十六进制。无法将其加载到日期或数字列中

此字段的长度是控制文件中指定的字节数。此长度仅受数据库中目标列的长度和内存资源的限制。长度始终以字节为单位,即使数据文件使用了字符长度语义。无法分隔原始数据字段


如果您的数据不是由列的大小指示的真正的二进制/原始数据,而是一个数字,那么您可以将其存储为一个数字

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


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

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

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


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

可能有两种错误来源:

使用SQL*加载器加载原始数据 查询原始数据 要检查查询部件是否正常工作,请使用以下命令:

CREATE TABLE o_newstdata1 (field1 RAW(8)); 
INSERT INTO o_newstdata1(field1) VALUES ('12AB');
INSERT INTO o_newstdata1(field1) VALUES ('34EF');
您不需要强制转换为原始格式,您可以直接使用Oracle的十六进制格式。版本1使用从RAW到VARCHAR2的隐式转换,版本2使用显式转换:

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

可能有两个错误来源:

使用SQL*加载器加载原始数据 查询原始数据 要检查查询部件是否正常工作,请使用以下命令:

CREATE TABLE o_newstdata1 (field1 RAW(8)); 
INSERT INTO o_newstdata1(field1) VALUES ('12AB');
INSERT INTO o_newstdata1(field1) VALUES ('34EF');
您不需要强制转换为原始格式,您可以直接使用Oracle的十六进制格式。版本1使用从RAW到VARCHAR2的隐式转换,版本2使用显式转换:

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

哪个部分不起作用,出现了哪些异常?SQL*加载器日志文件说了什么?您的演示与SQL*加载器无关,如果从查询中删除谓词,您会看到行已成功插入。能否将十六进制格式从0x1234ABCD更改为1234ABCD?哪个部分不起作用,您会遇到什么异常?SQL*加载器日志文件说了什么?您的演示与SQL*加载器无关,如果从查询中删除谓词,则可以看到行已成功插入。能否将十六进制格式从0x1234ABCD更改为1234ABCD?如何将该字符列中的数据查询为十六进制?如何将该字符列中的数据查询为十六进制?