免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 4105 | 回复: 5
打印 上一主题 下一主题

请教:unix下将文本文件数据导入oracle脚本 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-03-08 11:43 |只看该作者 |倒序浏览
有个需求,unix服务器上有几个文本文件存放数据,数据量大,
head -4 /TMP/test.txt

1234|asdasd|sadasda|asdasd
1234|asdasd|asdA|sadd
1234|asdasd|asdasd|sdasd

由于文件多,数据量大,不想借助其它工具,想用shell脚本直接insert进oracle数据库,
写了如下脚本:
#!/bin/sh

FILENAME=/TMP/test.txt

TABLE=test

awk -F"|" '{print $1," ",$2," ",$3," ",$4}' $FILENAME | while read col1 col2 col3 col4
do
                                sqlplus -s test/test@test <<! #>/dev/null 2>&1
                                insert into $TABLE values('$col1','$col2','$col3','$col4');
                                commit;
!
done

exit 0

但想了想这样根本行不通,

请教能不能在与oracle只建立一次连接之后,不断开,里面再嵌入shell命令操作文件,
等数据全部insert 完之后再断开连接呢?

请高手指点了。。

论坛徽章:
0
2 [报告]
发表于 2008-03-08 11:57 |只看该作者
你有sqlplus,肯定应该有sqlldr,对于大数据量的导入,sqlldr是首选。
如果非要用sqlplus,只能用shell 先写好sql文本,然后再用sqlplus调用。

论坛徽章:
0
3 [报告]
发表于 2008-03-08 12:07 |只看该作者
楼上您说的sqlldr我没接触过,不知道有没有,怎么用。。
那就只能按您说的先生成好SQL文本,再调用了。
谢谢了。

论坛徽章:
0
4 [报告]
发表于 2008-03-08 12:12 |只看该作者
不会,就学啊。网上许多教材。

http://www.orafaq.com/wiki/SQL*Loader_FAQ

论坛徽章:
0
5 [报告]
发表于 2008-03-08 12:28 |只看该作者
我们这AIX服务器上好像没装 SQL*Loader,
我打sqlldr 这个命令说not found,
请问这是不是表示机器上没装?

论坛徽章:
0
6 [报告]
发表于 2008-03-08 12:49 |只看该作者
FILENAME=/tmp/test.txt
TABLE=test
awk -F"|" '{
  printf("insert into '$TABLE' values('\''%s'\'','\''%s'\'','\''%s'\'','\''%s'\'');\ncommit;\n",$1,$2,$3,$4);
}' $FILENAME |sqlplus -s test/test@test >/dev/null 2>&1
exit 0
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP