菜鸟个人总结之纯sql导入数据(oracle,pl/sql)
来源:互联网 发布:linux android 模拟器 编辑:程序博客网 时间:2024/04/27 11:11
sql简单入门之数据导入(主要针对oracle数据库,工具为pl/sql):
最近遇到数据导入的问题,对付大批量的数据导入正式库的问题,总结经验如下:
主要针对要注意的问题和流程。
网上导入数据库采用的方法主为用pl/sql的odbc导入器,详见:
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,当为null时1.若可以插入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基础才能上手。
当然还是现在你的测试库上试试吧。
- 菜鸟个人总结之纯sql导入数据(oracle,pl/sql)
- PL/SQL导出导入Oracle表数据
- PL/SQL 导入excel表数据总结
- 向oracle中导入数据(利用pl/sql工具)
- oracle 之 pl/sql
- Oracle之pl/sql
- PL/SQL developer将excel数据导入Oracle
- Oracle pl/sql 复制表 数据导入 导出
- 通过PL/SQL导入数据到oracle数据库
- 利用PL/SQL从oracle中导入导出数据
- PL/SQL导入Oracle sql脚本
- PL/SQL将txt(csv)文件导入数据到oracle
- Oracle pl/sql学习总结
- ORACLE PL/SQL语法总结
- oracle大数据导入之sql load
- 用PL/SQL 将excel 导入Oracle
- Oracle PL/SQL之EXCEPTION
- 学习ORACLE之PL/SQL
- Oracle sqlplus中常用的set命令
- jstack jstat jmap
- 《合成孔径雷达成像——算法与实现》之【6】仿真图3.6加窗
- 扩展欧几里德算法模版题 POJ 1061青蛙的约会
- zookeeper 集群配置
- 菜鸟个人总结之纯sql导入数据(oracle,pl/sql)
- tomcat启动时检测到循环继承而栈溢出的问题
- 单源最短路径<队列><可以返回再找>
- c++ 异常处理 的不足
- 堆和栈访问效率
- PL/SQL 基础
- nsoj 4714 次方求模
- Weka源码分析(4)——算法系统
- 慎用MySQL replace语句