RAW,近似于CHAR,声明体例RAW(L),L为长度,以字节为单元,作为数据库列最年夜2000,作为变量最年夜32767字节。 LONG RAW,近似于LONG,作为数据库列最年夜存储2G字节的数据,作为变量最年夜32760字节
) W4 I, _0 ~+ |& \9 C3 h9 Y P" ?( L 建表操作:8 f! L1 I6 M+ H- ^# X
create table raw_test (id number, raw_date raw(10));
- Z( D% H. T; o9 K0 @5 d 插入raw数据操作:: j x+ S9 e8 ^$ u |" z/ |6 T) p
insert into raw_test values (1, hextoraw('ff'));& K, D' b! y8 d* W& B
insert into raw_test values (utl_raw.cast_to_raw('051'));7 M0 c; O8 U c7 v* X
删除表操作:
% B+ u0 f+ x% _# H* @* E1 U drop table raw_test;0 y, i) ?9 i0 Z; x; N7 g
当使用HEXTORAW时,会把字符串中数据算作16进制数。而使用UTL_RAW.CAST_TO_RAW时,直接把字符串中每个字符的ASCII码存放到RAW类型的字段中.( J% {4 V9 m9 }$ C/ {
可以使用dump函数,发芽存储情形:! w# U% A' I$ G: ] k6 F' \
select id,raw_date, dump(raw_date, 16) dump_raw from raw_test;
# ~) v0 Q4 c/ [3 a8 A Oracle中RAW和Varchar2常用的两个转换函数# c0 F1 J3 F. v6 R+ I
1. UTL_RAW.CAST_TO_RAW
# Q. U5 }8 ~4 ]5 M/ } 该函数按照缺省字符集(一般为GB2312),将VARCHAR2字符串转换为RAW。
0 N- }* Q& R. c! y insert into cmpp_submit (dest_terminal_id,msg_content) values('13001081371',UTL_RAW.CAST_TO_RAW('您好!'));/ t# j4 o- W7 S3 p+ j" o
2. UTL_RAW.CAST_TO_VARCHAR2
% t9 M9 w' L6 x+ `# o" Z 该函数按照缺省字符集结(一般为GB2312),将RAW转换为VARCHAR2。' q+ I# N1 e' R8 f8 l9 k
select UTL_RAW.CAST_TO_VARCHAR2(msg_content) from cmpp_deliver;
* d" J ]# U+ N+ ]5 V 其实RAW和VARCHAR是近似的,只是存储在RAW里的是二进制值,在任何时辰不会做自动的字符集转换,这是RAW和VARCHAR的分歧,RAW只是一种外部类型,其内部存储是VARRAW, Y$ i2 s: J' e- ^: ?4 n9 X, e
VARCHAR的Oracle内部界说是:struct { ub2 len; char arr[n] }# S# Y9 S o* U# T* x4 W+ B R8 J% j
VARRAW的ORACLE内部界说是: struct { ub2 len; unsigned char arr[n] } |