Oracle 数据库中long,lob类型的区别及转换
?字符类:
LONG:可变长的字符串数据,最长2G,LONG具有V ARCHAR2列的特性,可以存储长文本,一个表中最多一个LONG列
?二进制类:
LONG RAW:可变长二进制数据,最长2G
?大对象类:
CLOB:用来存储单字节的字符数据
NCLOB:用来存储多字节的字符数据
BLOB:用于存储二进制数据
BFILE:存储在文件中的二进制数据,这个文件中的数据只能被只读访。但该文件不包含在数据库内。
CLOB,NCLOB,BLOB都是内部的LOB类型,最长4G,没有LONG只能有一列的限制,对于保存图片、文本文件、Word文件,用BLOB最好,LONG RAW也不错,但Long是oracle将要废弃的类型,因此建议用LOB。
对于包含long数据类型的表t1,不能用“create table t2 as select * from t1;”的方式予以复制,会报“非法使用long类型”的错误:
SQL>create table t1(myid number, mylong long);
SQL(c3prd)>create table t2 as select * from t1;
create table t2 as select * from t1
*
ERROR at line 1:
ORA-00997: illegal use of LONG datatype
解决的方法有:
1)将long类型先转换成clob类型,再用上述方法复制
SQL(c3prd)>create table t2 as select myid,to_lob(mylong) mylob from t1;
Table created.
SQL(c3prd)>desc t2
Name Null? Type
----------------------------------------------------- -------- ------------------------------------
MYID NUMBER
MYLOB CLOB
SQL(c3prd)>create table t3 as select * from t2;
Table created.
SQL(c3prd)>desc t3
Name Null? Type
----------------------------------------------------- -------- ------------------------------------
MYID NUMBER
MYLOB CLOB