将表列数据类型从blob转换为raw

时间:2015-07-21 05:18:47

标签: sql oracle blob oracle12c

我有一个设计的表,

create table tbl ( 
  id number(5),
  data blob
);

它发现列data有 非常小的数据,可以存储在raw(200)

所以新表将是,

create table tbl ( 
  id number(5),
  data raw(200)
);

如何将此表格迁移到新设计 而不会丢失其中的数据

1 个答案:

答案 0 :(得分:1)

这是一种有点冗长的方法,但如果您确定data列值的长度不超过200,则可以使用。

  
      
  1. 创建一个暂时保存tbl
  2. 内容的表格   
create table tbl_temp as select * from tbl;
Rem -- Ensure that tbl_temp contains all the contents
select * from tbl_temp;
Rem -- Double verify by subtracting the contents
select * from tbl minus select * from tbl_temp;
  
      
  1. 删除tbl
  2. 中的内容   
delete from tbl;
commit;
  
      
  1. 删除列data
  2.   
alter table tbl drop column data;
  
      
  1. 使用data类型
  2. 创建列raw(200)   
alter table tbl add data raw(200);
  
      
  1. 选择&从创建的临时表中插入
  2.   
insert into tbl select id, dbms_lob.substr(data,200,1) from tbl_temp;
commit;

我们正在使用substr包的dbms_lob方法返回raw类型数据。因此,可以直接插入结果值。