将 table 列数据类型从 blob 转换为原始
Convert table column data type from blob to raw
我有一个 table 设计的,
create table tbl (
id number(5),
data blob
);
发现第data
列有
非常小的数据,可以存储在 raw(200)
:
所以新的 table 会是,
create table tbl (
id number(5),
data raw(200)
);
我如何才能将此 table 迁移到新设计 而不会丢失其中的数据。
这个方法有点冗长,但如果您确定 data
列值的长度不超过 200,它就可以使用。
- Create a table to hold the contents of
tbl
temporarily
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;
- Delete the contents in
tbl
delete from tbl;
commit;
- Drop column
data
alter table tbl drop column data;
- Create a column
data
with raw(200)
type
alter table tbl add data raw(200);
- Select & insert from the temporary table created
insert into tbl select id, dbms_lob.substr(data,200,1) from tbl_temp;
commit;
我们正在使用 dbms_lob
包的 substr
方法,其中 returns raw
类型数据。因此,可以直接插入结果值。
我有一个 table 设计的,
create table tbl (
id number(5),
data blob
);
发现第data
列有
非常小的数据,可以存储在 raw(200)
:
所以新的 table 会是,
create table tbl (
id number(5),
data raw(200)
);
我如何才能将此 table 迁移到新设计 而不会丢失其中的数据。
这个方法有点冗长,但如果您确定 data
列值的长度不超过 200,它就可以使用。
- Create a table to hold the contents of
tbl
temporarily
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;
- Delete the contents in
tbl
delete from tbl;
commit;
- Drop column
data
alter table tbl drop column data;
- Create a column
data
withraw(200)
type
alter table tbl add data raw(200);
- Select & insert from the temporary table created
insert into tbl select id, dbms_lob.substr(data,200,1) from tbl_temp;
commit;
我们正在使用 dbms_lob
包的 substr
方法,其中 returns raw
类型数据。因此,可以直接插入结果值。