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

来源: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类型,具体内部怎么实现,小弟才舒学浅,就很难判断了!

你可能感兴趣的:(cast)