菜鸟个人总结之纯sql导入数据(oracle,pl/sql)

来源:互联网 发布:linux android 模拟器 编辑:程序博客网 时间:2024/04/27 11:11

sql简单入门之数据导入(主要针对oracle数据库工具为pl/sql)

最近遇到数据导入的问题,对付大批量的数据导入正式库的问题,总结经验如下:

主要针对要注意的问题和流程。

网上导入数据库采用的方法主为用pl/sqlodbc导入器,详见:

http://jingyan.baidu.com/article/6dad5075ce7261a123e36e0d.html

但是导入数据时候情况百出,及容易出现提供数据出现偏差等问题,因此可以采用纯sql的导入方式,很简单适用于各种情况。

首先要对数据库中各个表的关系充分了解,导入正式库之前必须在测试库(开发库进行测试,否则..呵呵)

废话不多说流程如下:

1.导入到数据库之前必须查询要导入的表(假如该表为crb)

Select * from crb ;

根据要插入的表和客户所提供的数据资料进行对比,建立一个临时表。

create table bm_crb_ls --建表

(

  Lie1      VARCHAR2(30) default ' ' not null, --创建列名和列的属性一般用null防止插入数据为空造成1.要插入表本来就为空,到时候报错。2.防止因客户工作失误造成的数据空缺,

可以及时沟通。3.对于确实为空的,可以在excel中替换为空格。

  Lie12     VARCHAR2(20) default ' ' not null,--字段的空间应比插入数据大,而比要插入的表中规定的空间小(含等于)。

Lie3              ........................

..............省略

 

);

插入到临时表

Select * from  bm_crl_ls for update ;

解锁,

复制,

粘贴,

保存数据操作,

上锁,

提交事务。

Ok.

更换数据表中的字段,如:

一般数据库中相关信息以数字保存代替汉字,如1代表男,2代表女。而且客户一般不了解数据库中的相关数字对应那些文字,所以我们来update一下吧。

update bm_crl_ls set xb=replace(xb,' ','');--这里是去空格,防止数据中违法空格的存在。

 

update bm_crl_ls a set a.xb=(select b.bm from bm_xb  b where a.xb=b.mc)--假如bm_xb为性别表。

where exists(select b.bm from bm_xb  b where a.xb=b.mc);--特别注意的是加这个限制条件

,是为了防止当数据库中字段没有对应数据时候会更换为null,当为null1.若可以插入null

会造成数据混乱,2.不可以插入null是会报错。

 

其他字段类似。

当字段更换完毕的时候我们就可以插入到正式表中了。(当然更换正式表中的某些字段也是可以的)。

但是插入前进行最后的检查。

检查一:

看看更换字段的情况。

比如汉字更换后字段应为纯特定位数的数字格式。我们可以

Select* from bm_crl_ls where translate(lie1,'0123456789','aaaaaaaaaa') <>'aa';

另外可以判断长度

and  length(lie2)>3

还可以判断是否有重复的数据,可根据唯一列判断(比如身份证号等,比如是lie3)

Select lie3 ,count(lie3)  from bm_crl_ls group by lie3

检查二:

看正式表中是已存在相关数据,及时与相关人员沟通。

select * from bm_crl  where lie3 not in(select lie3 from bm_crl_ls);

插入

insert into  bm_crl(lie1,lie2,...........)

 select (lie1,lie2,...........)from bm_crl_ls

where lie3 not in(select lie3 from bm_crl);--可以加限制条件等,比如过滤掉已经有的数据。

另外遇到要删数据等注意备份,不然出了问题(呵呵)。

create table bm_crl_bf  as select * from bm_crl;

也可以整个数据库本分,当改动巨大时候。

--登录需要导出的数据库,创建directory
create directory  as '路径';
expdp 数据库名/密码@ip:端口/实例 directory=你建的名 dumpfile=随便起名.dmp logfile=随便起名.log

当然实际情况中表的关联很复杂,需要注意的地方也很多,本文主要总结一些经验。

可能有些笨拙但能解决很多意外的情况,当然也要有基本的一些业务基础和sql基础才能上手。

当然还是现在你的测试库上试试吧。

1 0
原创粉丝点击