RAW,近似于CHAR,声明体例RAW(L),L为长度,以字节为单元,作为数据库列最年夜2000,作为变量最年夜32767字节。 LONG RAW,近似于LONG,作为数据库列最年夜存储2G字节的数据,作为变量最年夜32760字节
, A/ J) p3 A. ?. b; Q4 n! c% |, c 建表操作:
$ U: h( Y9 @# R/ Z5 }5 G0 R create table raw_test (id number, raw_date raw(10));% D" j5 k t. \, u9 H R& T
插入raw数据操作:6 [! r0 l' ^, G$ N, S* U" g v
insert into raw_test values (1, hextoraw('ff'));
1 I% I/ H! G5 T8 ^% [ insert into raw_test values (utl_raw.cast_to_raw('051'));! m) a ]: O9 ]& t
删除表操作:: A* J: B3 R2 x- ]5 ^6 E& H0 A
drop table raw_test;
4 _7 K: j, T) z. d9 e! { 当使用HEXTORAW时,会把字符串中数据算作16进制数。而使用UTL_RAW.CAST_TO_RAW时,直接把字符串中每个字符的ASCII码存放到RAW类型的字段中.
9 H6 s8 d" d7 J4 A! q% b. ? 可以使用dump函数,发芽存储情形: ?6 ^5 ?- o( T j( ~
select id,raw_date, dump(raw_date, 16) dump_raw from raw_test;) z# d! a& N, z C0 W. e6 Q
Oracle中RAW和Varchar2常用的两个转换函数
# x, _6 S' S: [+ e& ? 1. UTL_RAW.CAST_TO_RAW" o( A$ O3 {- t0 `7 |- A, q. k! R
该函数按照缺省字符集(一般为GB2312),将VARCHAR2字符串转换为RAW。
3 T2 r* W( y) i0 a insert into cmpp_submit (dest_terminal_id,msg_content) values('13001081371',UTL_RAW.CAST_TO_RAW('您好!'));
% H) O& ]' T7 Q$ F- U a 2. UTL_RAW.CAST_TO_VARCHAR2
9 P2 A7 b8 z- t3 f 该函数按照缺省字符集结(一般为GB2312),将RAW转换为VARCHAR2。$ U; `5 p* q3 k) X+ f8 A- q$ _6 M
select UTL_RAW.CAST_TO_VARCHAR2(msg_content) from cmpp_deliver;- \0 T/ k" h' l6 V9 j% n
其实RAW和VARCHAR是近似的,只是存储在RAW里的是二进制值,在任何时辰不会做自动的字符集转换,这是RAW和VARCHAR的分歧,RAW只是一种外部类型,其内部存储是VARRAW9 Q+ i0 A i/ `$ c3 M$ U
VARCHAR的Oracle内部界说是:struct { ub2 len; char arr[n] }" f; l' h) a" f
VARRAW的ORACLE内部界说是: struct { ub2 len; unsigned char arr[n] } |