窗体顶端
窗体底端
Oracle二进制类型和大对象类型基础
2013-08-0813:35:47 我来说两句 作者:媛媛小译
收藏 我要投稿
Oracle二进制类型和大对象类型基础
一、类型区分
NCLOB 存储单字节的字符数据
CLOB 存储多字节的字符数据
BFILE 存储OS文件系统中的二进制文件的指针,文件不存储在数据库里。
BLOB 存储二进制数据
RAW 存储定长二进制数据,需要定义长度,如:
?
1 |
create table t(s raw(2000); |
LONG RAW 存储可变长二进制数据
二、类型在数据库中的使用
?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 |
NCLOB
create table t(id int,cont NCLOB);
Insert into t(id,cont) values(1,’hello’);
select * from t;
ID CONT
-------------------------
1 hello
CLOB 同NCLOB。
BLOB 暂未找到能直接插入的值的方法。
BFILE
Conn lyy/lyy
Create table bfiletable(id int,obj BFILE);
Create or replace directory dir AS ‘d:\’;
Conn / as sysdba
Grant read directpry dir to lyy;
Conn lyy/lyy Insert into bfiletable(id,obj) values(1,filename(‘DIR’,’1.jpg’));
Select * from filetable;
ID OBJ
-------------------------------------------------
1 filename(‘DIR’,’1.JPG’)
RAW
Create table rawtable(id int,obj raw(2000));
Insert into rawtable(id,obj) values(1, uti_raw.cast_to_raw(‘hello’));
Select * from rawtable;
ID OBJ
-------------------------------------------------
1 68656C6C6F
LONG RAW
Create table lrawtable(id int,obj long raw);
Insert into lrawtable(id,obj) values(1, uti_raw.cast_to_raw(‘hello’));
Select * from lrawtable;
ID OBJ
-------------------------------------------------
1 6 |
SQL> desc utl_raw
FUNCTION CAST_TO_NVARCHAR2 RETURNS NVARCHAR2
参数名称 类型 输入/输出默认值?
------------------------------ ----------------------- ------ --------
R RAW IN
FUNCTION CAST_TO_RAW RETURNS RAW
参数名称 类型 输入/输出默认值?
------------------------------ ----------------------- ------ --------
C VARCHAR2 IN
CAST_TO_VARCHAR2 Function:
Converts a RAW represented using n data bytes into VARCHAR2 with n data bytes
CAST_TO_RAW Function
Converts a VARCHAR2 represented using n data bytes into a RAW with n data bytes
SQL> col name for a40;
SQL> select utl_raw.cast_to_raw('甲骨文') name fromdual;
NAME
----------------------------------------
E794B2E9AAA8E69687
SQL> select utl_raw.cast_to_varchar2('E794B2E9AAA8E69687') name from dual;
NAME
----------------------------------------
甲骨文
SQL> select dump('甲骨文' ,16) namefrom dual;
NAME
----------------------------------------
Typ=96 Len=9: e7,94,b2,e9,aa,a8,e6,96,87
下面是常用到了两个函数:
utl_raw.cast_to_raw([varchar2]);--将varchar2转换为raw类型
utl_raw.cast_to_varchar2([raw]);--将raw转换为varchar2类型(是将raw数据类型的数据而不是其他数据类型的数据转换为varchar2类型?)