關於hextoraw()與utl_raw.cast_to_raw及rawtohex()

flysky0814發表於2007-11-16

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型別,具體內部怎麼實現,小弟才舒學淺,就很難判斷了!

[@more@]

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/11423276/viewspace-982566/,如需轉載,請註明出處,否則將追究法律責任。

相關文章