设为首页 加入收藏

TOP

Oracle 中LONG RAW BLOB CLOB类型介绍(一)
2015-11-10 12:17:17 来源: 作者: 【 】 浏览:6
Tags:Oracle LONG RAW BLOB CLOB 类型 介绍

说明:


注意: LONG 和 LONG RAW在Oracle新版已不推荐使用(使用BLOB替代),只是为了向后兼容而保留着。


本文着重介绍:RAW/CLOB/BLOB


1、RAW类型
1.1 介绍
You use the RAW datatype to store binary data or byte strings. For example, a RAW
variable might store a sequence of graphics characters or a digitized picture. Raw data
is like VARCHAR2 data, except that PL/SQL does not interpret raw data. Likewise,
Oracle Net does no character set conversions when you transmit raw data from one
system to another.
The RAW datatype takes a required parameter that lets you specify a maximum size up
to 32767 bytes. The syntax follows:
RAW(maximum_size)
You cannot use a symbolic constant or variable to specify the maximum size; you must
use an integer literal in the range 1 .. 32767.
You cannot insert RAW values longer than 2000 bytes into a RAW column. You can insert
any RAW value into a LONG RAW database column because the maximum width of a
LONG RAW column is 2147483648 bytes or two gigabytes. However, you cannot retrieve
a value longer than 32767 bytes from a LONG RAW column into a RAW variable. Note
that the LONG RAW datatype is supported only for backward compatibility; see “LONG
and LONG RAW Datatypes” on page 3-5 for more information.


RAW英语的意思为:生的;未加工的;
你可以使用RAW类型存储二进制数据或字节符。例如,一个RAW变量可以存储一系列图形字符或一张数码照片。
RAW数据就像VARCHAR2数据,除了一点:PL/SQL不会对其进行解释。同样的,当你在传输RAW数据时,Oracle Net不会对其进行字符集转换。


RAW数据类型要求指定一个最大值到32767的参数;


声明格式如下: RAW(maximum_size)
你不能使用一个符号常量或变量来代替该参数而必须使用1..32767中的任一整数。


你不能往RAW列中插入超过2000字节的字符;
你可以往long raw列中插入任何raw数据,最大支持2G。然而,反过来则无法一次性取出超过32767字节的raw数据。


此处需要注意,long raw是早起版本的类型;现在已不建议使用;详细见以下内容:


1.2 相关工具
–包
utl_raw


–函数
utl_raw.cast_to_raw
utl_raw.cast_to_number
utl_raw.cast_to_varchar2
hextoraw


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


1.3 例子


drop table test_raw;
create table test_raw(msg? raw(2000));



SCOTT@orcl> insert into test_raw values('Dylan100');
insert into test_raw values('Dylan100')
? ? ? ? ? ? ? ? ? ? ? ? ? ? *
第 1 行出现错误:
ORA-01465: 无效的十六进制数字


--这个地方注意是十六进制
SCOTT@orcl> insert into test_raw values(utl_raw.cast_to_raw('Dylan100'));


已创建 1 行。


SCOTT@orcl> commit;


--查看
select msg from test_raw;
MSG
------------------------------------------------------------------------------
3C786D6C3E3C6E616D653E44796C616E3C2F6E616D653E3C73636F72653E3130303C2F73636F72
653E3C2F786D6C3E


0ABC


SCOTT@orcl> select utl_raw.cast_to_varchar2(msg) from test_raw;


UTL_RAW.CAST_TO_VARCHAR2(MSG)
------------------------------------------------------------------------------
Dylan1002、LONG和LONG RAW类型


可以使用LONG类型存储变长字符串。Long类型就像VARCHAR2一样,除了LONG的最大容量为32760;


使用LONG RAW类型存储二进制数据或字节字符串。LONG RAW数据就像LONG数据,除了LONG RAW数据不会被PL/SQL解释。
LONG RAW的最大容量也为32760.


你可以往LONG列中插入任何LONG数据,最大长度为2G。然而,PL/SQL中的LONG类型变量只能支持到32760。
这条规则同样适用于LONG RAW类型。


表中的LONG列可以存储文本,字符数组,甚至短文档。可以针对该类型列做UPDATE, INSERT, 和SELECT 操作。
但是无法再表达式,SQL函数调用或特定的SQL条件语句例如WHERE, GROUP BY和CONNECT BY。


In SQL statements, PL/SQL binds LONG values as VARCHAR2, not as LONG. However,
if the length of the bound VARCHAR2 exceeds the maximum width of a VARCHAR2
column (4000 bytes), Oracle converts the bind type to LONG automatically, then issues
an error message because you cannot pass LONG values to a SQL function


SQL语句中, PL/SQL将LONG类型作为VARCHAR2类型绑定。然而,如果所绑定的VARCHAR2长度超出了4000,ORACLE会自动转换到LONG,
然后抛出一个错误因为你不能将LONG值传递给SQL函数。


--例如:
SCOTT@orcl> create table long_test(id number, msg long);


表已创建。


SCOTT@orcl> insert into lo

首页 上一页 1 2 下一页 尾页 1/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇Oracle创建外部表 下一篇Oracle设置和删除不可用列

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: