关于hextoraw()与utl_raw.cast_to_raw及rawtohex()

本文详细介绍了Oracle数据库中RAW类型的使用方法,包括不同方式插入数据到RAW类型字段的区别,以及如何使用RAW类型进行数据存储。通过对比HEXTORAW与UTL_RAW.CAST_TO_RAW函数的使用效果,展示了不同类型数据转化为RAW类型的处理过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

来源:http://flysky0814.itpub.net/post/35477/413779
SQL> create table test_raw (raw_col raw(10));

表已创建。

SQL> insert into test_raw values (hextoraw('ff'));

已创建 1 行。

SQL> insert into test_raw values (hextoraw('0'));

已创建 1 行。

SQL> insert into test_raw values (hextoraw('23fc'));

已创建 1 行。

SQL> insert into test_raw values (hextoraw('fffffffffff'));

已创建 1 行。

SQL> insert into test_raw values (hextoraw('ffffffffffffffffffff'));

已创建 1 行。

SQL> insert into test_raw values (utl_raw.cast_to_raw('051'));

已创建 1 行。

SQL> select raw_col, dump(raw_col, 16) dump_raw from test_raw;

RAW_COL DUMP_RAW
-------------------- -----------------------------------------------
FF Typ=23 Len=1: ff
00 Typ=23 Len=1: 0
23FC Typ=23 Len=2: 23,fc
0FFFFFFFFFFF Typ=23 Len=6: f,ff,ff,ff,ff,ff
FFFFFFFFFFFFFFFFFFFF Typ=23 Len=10: ff,ff,ff,ff,ff,ff,ff,ff,ff,ff
303531 Typ=23 Len=3: 30,35,31

已选择6行。

RAW类型的存储很简单,对比字段的查询结果和DUMP的结果就一目了然了。

需要注意的是,两种转化为RAW的函数之间的差别。当使用HEXTORAW时,会把字符串中数据当作16进制数。而使用UTL_RAW.CAST_TO_RAW时,直接把字符串中每个字符的ASCII码存放到RAW类型的字段中。

---------------------------------------------------

SQL> select rawtohex(sysdate) from dual;

07D70B100A003100

SQL> select dump(sysdate,16) from dual;

Typ=13 Len=8: 7,d7,b,10,a,1,2,0

SQL> select rawtohex(12) from dual;

C10D

SQL> select dump(12,16) from dual;

Typ=2 Len=2: c1,d

SQL> select rawtohex('12') from dual;

3132

SQL> select dump('12',16) from dual;

Typ=96 Len=2: 31,32

可以看出rawtohex()函数参数可为date,number,char等类型,并自动转化为相应16进制数据.

而hextoraw()的参数只能为16进制.虽然最终结果还是用16进制数据表现出来,但在ORACLE内部是存储raw类型,具体内部怎么实现,小弟才舒学浅,就很难判断了!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值