RAW,近似于CHAR,声明体例RAW(L),L为长度,以字节为单元,作为数据库列最年夜2000,作为变量最年夜32767字节。 LONG RAW,近似于LONG,作为数据库列最年夜存储2G字节的数据,作为变量最年夜32760字节
0 t0 [& k# r2 X 建表操作:8 b9 O) v. F M& u" f* b% A
create table raw_test (id number, raw_date raw(10));0 R2 g4 U1 H X9 z+ u( P; k
插入raw数据操作:; W3 ]% X' E. Y0 Q
insert into raw_test values (1, hextoraw('ff'));& `& g# M ~3 n$ R; ?
insert into raw_test values (utl_raw.cast_to_raw('051'));( {5 _: R/ Z1 n+ }+ T- ^
删除表操作:6 K& D2 w0 H' s/ _& O1 U1 l1 R
drop table raw_test;
[! T$ L& a6 n4 V& ~2 K7 x, V 当使用HEXTORAW时,会把字符串中数据算作16进制数。而使用UTL_RAW.CAST_TO_RAW时,直接把字符串中每个字符的ASCII码存放到RAW类型的字段中.
" ?, K4 G/ U; x& ^1 i 可以使用dump函数,发芽存储情形:+ c7 o1 ^. m: \
select id,raw_date, dump(raw_date, 16) dump_raw from raw_test;
7 E+ o" R' W) |* | D+ f9 H: X2 B Oracle中RAW和Varchar2常用的两个转换函数
: O+ `7 }- \- K6 u5 q 1. UTL_RAW.CAST_TO_RAW
0 `! u" ~* d9 o 该函数按照缺省字符集(一般为GB2312),将VARCHAR2字符串转换为RAW。3 l3 N' o$ Y* N' d6 E5 J" J
insert into cmpp_submit (dest_terminal_id,msg_content) values('13001081371',UTL_RAW.CAST_TO_RAW('您好!'));. Q i' e1 k6 P' ^: c* s/ m
2. UTL_RAW.CAST_TO_VARCHAR2- _6 c' M$ S& g1 o" g, N7 X" S4 r* M
该函数按照缺省字符集结(一般为GB2312),将RAW转换为VARCHAR2。3 b: N% a8 e7 y1 Y: l$ |
select UTL_RAW.CAST_TO_VARCHAR2(msg_content) from cmpp_deliver;0 H, a) q! `* A3 |3 o) G- ?; z! w9 n9 r
其实RAW和VARCHAR是近似的,只是存储在RAW里的是二进制值,在任何时辰不会做自动的字符集转换,这是RAW和VARCHAR的分歧,RAW只是一种外部类型,其内部存储是VARRAW
% \: [: r9 D* Y5 `2 b6 U& P VARCHAR的Oracle内部界说是:struct { ub2 len; char arr[n] }8 K) {5 ~/ z* N% Z6 `% n
VARRAW的ORACLE内部界说是: struct { ub2 len; unsigned char arr[n] } |