oracle系统中常说的大字段,有long、LOB(BLOB,CLOB,NLOB)类型。
Oracle 6/7版本支持LONG类型,但在Oracle 8时被LOB取代。
建议不要创建带long类型的表,应使用LOB字段。
看Tom大师对long和LOB对比总结,如图:
如果有遇到long怎么办,可以参考以下实操:
--创建long类型表
create table test_long_t
(
t_long_name varchar2(10),
t_long_column long
);
insert into test_long_t values('name_aaa','aaaaaaaaa'); --写入
select t_long_column from test_long_t where t_long_name = 'name_aaa'; --成功
--创建lob类型表
create table test_lob_t
(
t_lob_name varchar2(10),
t_lob_value clob
);
--单独查询LOB方法
select to_char(substr(t_lob_value,1,4000)) from test_lob_t;
--建议:long类型转存lob类型,再来做数据处理
insert into test_lob_t(t_lob_name,t_lob_value)
select t_long_name,to_lob(t_long_column) from test_long_t;
--用过程处理,可以取更多long/lob类型数据内容
declare
l_lob varchar2(32767);
l_long varchar2(32767);
begin
select t_lob_value into l_lob from test_lob_t where t_lob_name = 'name_aaa';
dbms_output.put_line(l_lob);
select t_long_column into l_long from test_long_t where t_long_name = 'name_aaa';
dbms_output.put_line(l_long);
--延伸:可以用这种方式写一个函数,这样,传至java用String类型处理
end;
--LOB的使用知多D
1.由于管理和性能原因,LOB数据使用另外一个表空间,不跟表数据放同一个表空间
2.出于i/o性能考虑,默认情况,LOB数据不放在缓冲区缓存中,这样不论是读还是写,都会带来物理i/o,所以尽量减少全量操作LOB数据