您的位置:首页 > 数据库 > Oracle

对Oracle Raw类型的详细解剖

2011-11-09 09:36 330 查看
RAW,类似于CHAR,声明方式RAW(L),L为长度,以字节为单位,作为数据库列最大2000,作为变量最大32767字节。

LONG RAW,类似于LONG,作为数据库列最大存储2G字节的数据,作为变量最大32760字节

建表操作:

create table raw_test (id number, raw_date raw(10));

插入raw数据操作:

insert into raw_test values (1, hextoraw('ff'));

insert into raw_test values (utl_raw.cast_to_raw('051'));

删除表操作:

drop table raw_test;

当使用HEXTORAW时,会把字符串中数据当作16进制数。而使用UTL_RAW.CAST_TO_RAW时,直接把字符串中每个字符的ASCII码存放到RAW类型的字段中.

Oracle中RAW和Varchar2常用的两个转换函数

1. UTL_RAW.CAST_TO_RAW

该函数按照缺省字符集(一般为GB2312),将VARCHAR2字符串转换为RAW。

insert into cmpp_submit (dest_terminal_id,msg_content) values('13001081371',UTL_RAW.CAST_TO_RAW('您好!'));

2. UTL_RAW.CAST_TO_VARCHAR2

该函数按照缺省字符集合(一般为GB2312),将RAW转换为VARCHAR2。

select UTL_RAW.CAST_TO_VARCHAR2(msg_content) from cmpp_deliver;
使用练习:
from:http://blog.sina.com.cn/s/blog_5c5d13650100cdwr.html
s
SQL> create table datatype_test_raw(paddr raw(8));

Table created

SQL> insert into datatype_test_raw(paddr) values(utl_raw.cast_to_raw('This is a raw type test!'));

insert into datatype_test_raw(paddr) values(utl_raw.cast_to_raw('This is a raw type test!'))

ORA-01401: inserted value too large for column

SQL> alter table datatype_test_raw modify paddr raw(20);

Table altered

SQL> insert into datatype_test_raw(paddr) values(utl_raw.cast_to_raw('This is a raw type test!'));

insert into datatype_test_raw(paddr) values(utl_raw.cast_to_raw('This is a raw type test!'))

ORA-01401: inserted value too large for column

SQL> insert into datatype_test_raw(paddr) values(utl_raw.cast_to_raw('This is a raw test!'));

1 row inserted

SQL> commit;

Commit complete

SQL> select * from datatype_test_raw;

PADDR

----------------------------------------

54686973206973206120726177207465737421

SQL> select utl_raw.cast_to_varchar2(paddr) from datatype_test_raw;

UTL_RAW.CAST_TO_VARCHAR2(PADDR

--------------------------------------------------------------------------------

This is a raw test!

SQL> insert into datatype_test_raw(paddr) values(utl_raw.cast_to_raw('中文测试'));

1 row inserted

SQL> commit;

Commit complete

SQL> select utl_raw.cast_to_varchar2(paddr) from datatype_test_raw;

UTL_RAW.CAST_TO_VARCHAR2(PADDR

--------------------------------------------------------------------------------

This is a raw test!

中文测试

SQL> select paddr, utl_raw.cast_to_varchar2(paddr) from datatype_test_raw;

PADDR UTL_RAW.CAST_TO_VARCHAR2(PADDR

---------------------------------------- --------------------------------------------------------------------------------

54686973206973206120726177207465737421 This is a raw test!

D6D0CEC4B2E2CAD4 中文测试

这里用到了两个函数:

utl_raw.cast_to_raw([varchar2]);--将varchar2转换为raw类型

utl_raw.cast_to_varchar2([raw]);--将raw转换为varchar2类型

这里varchar2的字符集一般是GB2312。

另外:

utl_raw包的几个其他的函数用法:

utl_raw.cast_from_number([number]);

utl_raw.cast_to_number([number]);

位操作:

utl_raw.bit_or();

utl_raw.bit_and();

utl_raw.bit_xor();

另外还有转换函数:

hextoraw(); --将对应16进制数转换为raw

当使用HEXTORAW时,会把字符串中数据当作16进制数。而使用UTL_RAW.CAST_TO_RAW时,直接把字符串中每个字符的ASCII码存放到RAW类型的字段中
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: