Oracle中表列由VARCHAR2类型改成CLOB : http://www.jb51.cc/article/p-bgtkrfwe-bct.html
MysqL中把一个表的数据批量导入另一个表中: http://blog.csdn.net/evan_endian/article/details/8652528
Oracle中表列由VARCHAR2类型改成CLOB文章中方式是,
假设要将test的表中col字段(VARCHAR2),改为CLOB,
以下所有测试在navicat环境下:表名带引号,在sqlPLUS,则不用,注意区分
首先将添加temp字段
alter table "test" add "temp" CLOB; UPDATE "test" SET "temp" = "col";
当表字段顺序无关时,则删除指定的列,
alter table "test" drop column "col";
然后修改temp字段为col
alter table "test" RENAME COLUMN "temp" TO "col";
这种方案,是在字段顺序无关,当与顺序有关,且col字段为主键不能为null,这时怎么办呢?
假设原表为product,product含有一个字段为fallTime(DATE),且为主键,不为空,现需要将fallTime字段改为
varchar类型;
如果直接导出sql脚本,修改表结构,及数据,任务繁琐,同时sql脚本中的,记录往往是分条insert
实例如下:
insert into product ....;
insert into product ....;
.....
这种脚本跑的相当慢,有人建议,将insert放在Begin和commit之间一次提交,
而不是insert一条记录,要commit一次;还有人建议修改为,如下形式:
insert into product values XXX,YYY,......
这两种方式我没用,你可以试试;
如果用临时字段转换,因为要修改字段fallTime的类型,而fallTime又是主键,不能直接修改fallTime字段类型
,这是因为修改fallTime字段,fallTime列值必须为null,而fallTime又是主键,又不能为空,这个如何是好?
下面将介绍一种方案:
首先将导出product结构,包括主键,索引,表注释和字段注释等信息,修改表结构,将fallTime的DATE类型修改为
varchar,根据修改后的表结构信息创建test表,注意test表中的fallTime字段为varchar
1.在test表中添加临时转化字段:
alter table "test" add "temp" varchar2(10);
2.然后将product的数据导入到test中:
INSERT INTO "test" SELECT t.*,"TO_CHAR"(t.fallTime,'YYYY-MM-DD') FROM product t;
3.如果fallTime可以为null则执行下面语句:
UPDATE "test" SET "fallTime" = NULL; UPDATE "test" SET "fallTime" = "temp";
不能为空则执行下面语句:
UPDATE "test" SET "fallTime" = "temp";
4.然后删除product,删除test的temp列:
alter table "test" drop column "temp";
5.重名test为product即可。
其中1,2的另一种方法:
先保证表结构相同,先插入数据
INSERT INTO "test" SELECT t.* FROM product t;
在添加列
alter table "test" add "temp" varchar2(10);
再更新列
UPDATE product SET "temp" = "TO_CHAR"(fallTime,'YYYY-MM-DD');
总结:
针对列顺序无关的,则直接新建临时字段,删除先前字段,重名临时字段即可;对于字段顺序有关,且字段不能为空的,copy表结构,并修改需要更改的字段的类型,新建临时字段,将需要转换的字段数据插入到临时字段,然后将临时字段,update and set到需要更改类型字段,删除临时字段,修改表名,即可。 原文链接:https://www.f2er.com/oracle/211942.html