这一段时间在把SQLSERVER迁移到ORASCLE,中间遇到了一系列的问题,通过查找资料和想办法,已经基本顺利解决,后面我会针对两个数据库迁移过程中我遇到的问题,整理汇总成一个个小问题,带着实例编码,给自己留个备份也同时对遇到类似问题的人做个参考。

这是第一个问题:关于sql server中的text字段如何导入的问题

在sql和oracle中,大字段的处理其实都不是很简单,在sql中有text、ntext、binary等,2005后新增加了varchar(max)和nvarchar(max),后面增加的这两个用起来非常爽,下面会提到;oracle中的blob、clob、nclob、nblob等类型。

下面的例子数据量不多,只有几千条数据,但是没有办法通过常规的方式进行处理,下面先说明下我尝试的过程。

1.使用常规方式,我基本采用toad的import table data的方式,具体使用很简单在database --import中,这种方式的好处是图形化操作,不用做字段的手工匹配,缺点是效率比较低,但是在数据量几万以下可以采用这种方式进行导入,比较方便。

我通过查询出的数据复制、粘贴到excel中,假死。

2.一个字段一个字段粘贴,对1000多条的text字段操作,8G内存的机器也会在执行很长时间后,excel进程假死,不知道这算不算微软的bug反正这样的方式是走不通了。

3.我通过导出txt文本的方式,数据是导出了,但是在导入的时候,toad界面中的列全乱了,无法操作。

4.sql developer的text importer手工做字段匹配,也不行。

说了这么多说下最后的方式吧。

========================================================
/*关于表中存在text字段的导入oracle
1.首先在sql原表中增加autoid自增字段唯一标识记录
2.替换text字段中的特殊字符(换行、回车、制表、逗号、单引号等)
3.先用常规方法导出非text字段然后导入(带着autoid)
4.分别导出各自的text字段,有几个text字段导出几个文件(带着autoid),并
把这些text字段导入临时处理的对应的临时表(需要在oracle中提前建立)
5.在oracle中通过更新的方式用autoid做关联标识进行数据更新
6.把特殊字符替换回字段并删除autoid
*/
----------------------sqlserver处理部分---------------------
--1.sql add autoid
alter table FORMLAYOUT add autoid int identity(1,1)

--2.export base column
select autoid,formid,nodeid,typeid,layoutname,isdefault,isdelete
 from dbo.FORMLAYOUT
 order by autoid

--3.repalce text info
--replace char(10) char(13)char(9)换行 回车 制表符tab
update formlayout
set LAYOUTINFO=REPLACE(LAYOUTINFO,CHAR(10),'**^^')
update formlayout
set LAYOUTINFO=REPLACE(LAYOUTINFO,CHAR(13),'^^**')
update formlayout
set LAYOUTINFO=REPLACE(LAYOUTINFO,',',',')
update formlayout
set LAYOUTINFO=REPLACE(LAYOUTINFO,CHAR(9),'^^^^')

update formlayout
set LAYOUTFORMATTED=REPLACE(LAYOUTFORMATTED,CHAR(10),'**^^')
update formlayout
set LAYOUTFORMATTED=REPLACE(LAYOUTFORMATTED,CHAR(13),'^^**')
update formlayout
set LAYOUTFORMATTED=REPLACE(LAYOUTFORMATTED,',',',')
update formlayout
set LAYOUTFORMATTED=REPLACE(LAYOUTFORMATTED,CHAR(9),'^^^^')
 
--4.export text1 column
select autoid,LAYOUTINFO
 from dbo.FORMLAYOUT
 order by autoid
--5.export text1 column
select autoid,LAYOUTFORMATTED
 from dbo.FORMLAYOUT
 order by autoid

----------------------oracle处理部分---------------------
--1.建立主表
CREATE TABLE "FORMLAYOUT" (
"AUTOID" number(4),
"ID" NVARCHAR2(32) NOT NULL,
"FORMID" NVARCHAR2(32),
"NODEID" NVARCHAR2(32),
"TYPEID" NUMBER(38),
"LAYOUTNAME" NVARCHAR2(256),
"ISDEFAULT" NUMBER(38),
"ISDELETE" NUMBER(38)
);
--2.建立临时处理的表
CREATE TABLE "TMP1" (
"AUTOID" number(4) not null,
"LAYOUTINFO" NCLOB
);

CREATE TABLE "TMP2" (
"AUTOID" number(4) not null,
"LAYOUTFORMATTED" NCLOB
);
--3.通过toad导入
--4.主表创建字段并通过关联更新
alter table FORMLAYOUT add LAYOUTINFO NCLOB;
alter table FORMLAYOUT add LAYOUTFORMATTED NCLOB;
UPDATE FORMLAYOUT
SET FORMLAYOUT.LAYOUTINFO=(SELECT TMP1.LAYOUTINFO FROM TMP1 WHERE TMP1.AUTOID=FORMLAYOUT.AUTOID) ;

UPDATE FORMLAYOUT
SET FORMLAYOUT.LAYOUTFORMATTED=(SELECT TMP2.LAYOUTFORMATTED FROM TMP2 WHERE TMP2.AUTOID=FORMLAYOUT.AUTOID) ;
--5.检查数据
--6.替换回特殊字符,注意sql和oracle关于字符的差异一个是char一个是chr
update FORMLAYOUT
set LAYOUTINFO=REPLACE(LAYOUTINFO,'**^^',chr(10));
update FORMLAYOUT
set LAYOUTINFO=REPLACE(LAYOUTINFO,'^^**',chr(13));
update formlayout
set LAYOUTINFO=REPLACE(LAYOUTINFO,',',',');
update formlayout
set LAYOUTINFO=REPLACE(LAYOUTINFO,'^^^^',chr(9));

update FORMLAYOUT
set LAYOUTFORMATTED=REPLACE(LAYOUTFORMATTED,'**^^',chr(10));
update FORMLAYOUT
set LAYOUTFORMATTED=REPLACE(LAYOUTFORMATTED,'^^**',chr(13));
update formlayout
set LAYOUTFORMATTED=REPLACE(LAYOUTFORMATTED,',',',');
update formlayout
set LAYOUTFORMATTED=REPLACE(LAYOUTFORMATTED,'^^^^',chr(9));
--7.删除多余表和列
alter table FORMLAYOUT drop column AUTOID;

drop table "TMP1";
drop table "TMP2";

select * from FORMLAYOUT;

sql中的text字段如何导入oracle相关推荐

  1. 在pl/sql中使用exp/imp工具实现oracle数据导出/导入

    在pl/sql中使用exp/imp工具实现oracle数据导出/导入 2006年11月19日 星期日 10:59 Oracle 数据导入导出imp/exp就相当于oracle数据还原与备份.exp命令 ...

  2. Sqlserver别太信任SysComments表中的text字段

    1.用SysComments的原因 最近新模块的开发,需要更改和新增的存储过程比较多,为了同步开发环境和测试环境的存储过程,能在更新程序后,马上能整理出更改的存储过程脚本,并更新到测试DB服务器上,我 ...

  3. SQL Server 2008带字段注释导入Power Designer 9.5

    需要注意的Power Designer 首先得注册到本机连接数据库 具体实现方法如下:首先新建DBMS方便起见,可以先复制Microsoft SQL Server 2000,可以这样操作(tools- ...

  4. sql中按照指定字段排序失效

    场景描述: 按照查询指定类型的运动勋章,并按照勋章对应的天数进行升序排序,但是查询出来的结果是按照降序进行排序. 原因: 查看数据类型发现数据库中的days字段是varchar类型,对于mysql来说 ...

  5. 从sql中image类型字段中导出图片

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.I ...

  6. Mysql 中的Text字段的范围

    text:存储可变长度的非Unicode数据,最大长度为2^31-1个字符.text列不能有默认值,存储或检索过程中,不存在大小写转换,后面如果指定长度,不会报错误,但是这个长度是不起作用的,意思就是 ...

  7. mysql text 独立表,当您在MySQL或PostgreSQL中拥有TEXT字段时,是否应该将其放在单独的表中?...

    I've heard that if you have a table with a TEXT column that will hold a large chunk of text data, it ...

  8. sql中两个字段进行拼接用concat()函数

    多个字段进行拼接: 注意:如果有一个字段为空值,那拼接之后的字段为空值. 示例: 原始数据表为: select * from test_1 对"姓名"和"薪水" ...

  9. php在sql中添加数据,使用php在oracle数据库中插入数据

    以下代码生成此代码 Warning: oci_execute() [function.oci-execute]: ORA-00911: invalid character in F:\wamp\www ...

最新文章

  1. 【C++】用类来处理排序问题
  2. @卡尔曼滤波 跑通调参
  3. javascript闭包-全局变量与局部变量
  4. lua-5.2.3编译问题记录quot;libreadline.so: undefined reference to `PC#39;quot;
  5. open-fopen read-fread等的不同 .
  6. Educational Codeforces Round 33 (Rated for Div. 2) E. Counting Arrays
  7. Spring boot项目集成Sharding Jdbc
  8. 天池 在线编程 布尔表达式求值(栈)
  9. 苹果决定不修复 Big Sur 和 Catalina 中的这两个0day
  10. Windows 环境变量的两点说明
  11. 最新上市公司商誉减值损失数据
  12. mediawiki mysql配置_安装MediaWiki
  13. 简单三步下载网页微博中的视频
  14. 天线越大越好吗_路由器的天线是不是越多越好?告知你真实答案,很多人都买错了...
  15. 2020-10-06
  16. 菜鸡哈屠教你合并果子
  17. html邢台模板,邢台水泥预制件定制
  18. 20分钟搞定平衡二叉树(AVL树)【超详细】
  19. 最小二乘法拟合椭圆(椭圆拟合线)
  20. zk的session

热门文章

  1. 波士顿动力警犬遭禁用!反对呼声太高,纽约警局认怂
  2. 4个轮子+1部手机=长城眼里的智能汽车现状
  3. 更精准地生成字幕!哥大Facebook开发AI新框架,多模态融合,性能更强
  4. 谷歌上线AI新玩法:随手乱涂鸦,一键变怪兽
  5. 10亿美元卖身!腾讯IDG投资的无人车独角兽Zoox,被曝归入贝佐斯麾下
  6. AI替你接电话、老电影变4k画质、基于自研芯片服务器,百度智能云一口气发了20款产品...
  7. 隔空操控iPhone!苹果新获悬停手势专利
  8. 海思全力部署智能城市NB-IoT应用
  9. [转]MySQL 5.6 my.cnf配置优化
  10. 第十七课:js数据缓存系统的原理