我有一个设计的表,
create table tbl (
id number(5),
data blob
);
它发现列data
有
非常小的数据,可以存储在raw(200)
:
所以新表将是,
create table tbl (
id number(5),
data raw(200)
);
如何将此表格迁移到新设计 而不会丢失其中的数据 。
答案 0 :(得分:1)
这是一种有点冗长的方法,但如果您确定data
列值的长度不超过200,则可以使用。
- 创建一个暂时保存
内容的表格 醇>tbl
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;
- 删除
中的内容 醇>tbl
delete from tbl;
commit;
- 删除列
醇>data
alter table tbl drop column data;
- 使用
创建列data
类型raw(200)
醇>
alter table tbl add data raw(200);
- 选择&从创建的临时表中插入
醇>
insert into tbl select id, dbms_lob.substr(data,200,1) from tbl_temp;
commit;
我们正在使用substr
包的dbms_lob
方法返回raw
类型数据。因此,可以直接插入结果值。