局方分配了一个任务,需要对30多万的数据,核查失败原因。而局方提供的号码是一个文本文件。用过Oracle数据库的人,都知道,使用PL/SQL Developer开发工具,打开一个SQL Windows ,写个带rowid的查询 语句如:select a.*,rowid from cxp_xuanling_error a;然后点开小锁按钮,将数据复制,粘贴到里面。当然了,如果数据量小,没啥问题。可当数据量多的时候,这样做会非常慢。
我首先想到的,就是先把文件进行切割,因为数据量大,不好加载。上网搜索,解决办法还真不少。文件切割的文章有很多,终于发现比较适合我的,我采用了,采用SHELL程序,进行对文件的切割。比如每5万行,进行文件切割, SHELL代码如下:
-
#!/bin/sh
-
-
name=$1
-
lines=`wc -l $name|awk '{print $1}'`
-
filename="_disk"
-
index=0
-
count=1
-
app=50000
-
while [ $count -lt $lines ]
-
do
-
end=`expr $count - 1 + $app`
-
sed -n "$count,${end}p" $name > $name${filename}${index}
-
count=`expr $count + $app`
-
index=`expr $index + 1`
-
done
执行这个Shell脚本,后面添加一个文件名即可。
把文件切割为小文件后,接下来的一部就是,将提供的数据,变成一个添加的sql语句。这一步可以使用工具,不过自己比较钟爱使用awk。
比如说,我想在每5000行处sql语句追加commit;进行数据的提交。那么用awk,将简单方便,使用如下awk语句:
awk -F " " '{if(NR%5000==0){print "insert into cxp_xuanling_error_base(serial_number) values('\''"$1"'\''); \r\ncommit;"} else{print "insert into cxp_xuanling_error_base(serial_number) values('\''"$1"'\'');"}}' xuanling_error_all.txt_disk0 > xuanling_error_all.txt_disk0.sql
将生成的文件,重新写入到xuanling_error_all.txt_disk0.sql文件中。
生成了SQL语句,下面就好操作了,登陆sqlplus,执行这个语句即可。
SplitFile.rar
阅读(3286) | 评论(0) | 转发(0) |