设为首页 收藏本站
查看: 1559|回复: 6

[经验分享] 将oracle库中表导出为外部文本并指定分隔符

[复制链接]

尚未签到

发表于 2013-3-25 09:03:41 | 显示全部楼层 |阅读模式

方法一:使用spool进行保存



  • SQL> spool emp.txt
  • SQL> select empno||','||ename||','||job||','||mgr||','||sal from emp;
  • EMPNO||','||ENAME||','||JOB||','||MGR||','||SAL
  • ----------------------------------------------------------------------------------------------------
  • 7369,SMITH,CLERK,7902,800
  • 7499,ALLEN,SALESMAN,7698,1600
  • 7521,WARD,SALESMAN,7698,1250
  • 7566,JONES,MANAGER,7839,2975
  • 7654,MARTIN,SALESMAN,7698,1250
  • 7698,BLAKE,MANAGER,7839,2850
  • 7782,CLARK,MANAGER,7839,2450
  • 7788,SCOTT,ANALYST,7566,3000
  • 7839,KING,PRESIDENT,,5000
  • 7844,TURNER,SALESMAN,7698,1500
  • 7876,ADAMS,CLERK,7788,1100
  • 7900,JAMES,CLERK,7698,950
  • 7902,FORD,ANALYST,7566,3000
  • 7934,MILLER,CLERK,7782,1300
  • 14 rows selected.
  • SQL> spool off;

自己写了简单脚本进行导出指定表到外部文本:



  • #!/bin/bash
  • ##jxp   
  • ##导出指定表结构
  • tname=$1
  • sqlplus -S scott/tiger <<EOF
  • spool tname1.txt
  • desc $tname
  • spool off
  • exit
  • EOF
  • ##截取表内字段名
  • sed -n '3,$p' tname1.txt| awk '{print$1}' |sed '$d' >tname2.txt
  • ##使用abcd.sed把字段名进行列转行输出并使用'||'作为分隔符传入tname_1
  • tname_1=`sed -f abcd.sed tname2.txt`
  • #echo $tname_1
  • ##传入表名,在sqlplus中进行选择数据
  • new_tname=$tname
  • sqlplus -S scott/tiger <<EOF
  • set pagesize 0;
  • set linesize 300;
  • set feedback off;
  • alter session set nls_date_format='YYYY-MM-DD hh24:mi:ss'
  • spool $new_tname.txt
  • select $tname_1  from  $new_tname;
  • spool off
  • exit;
  • EOF
  • ##删除产生的临时文件
  • rm -rf tname*.txt
  • #

需要修改的可能是登陆数据库的用户名了。其中脚本中用到了abcd.sed文件,下面列出此文件内容和作用:

  • {
  • N
  • s/\n/\|\|\'||\'\|\|/g
  • }
  • {
  • N
  • s/\n/\|\|\'||\'\|\|/g
  • }
  • {
  • N
  • s/\n/\|\|\'||\'\|\|/g
  • }
  • {
  • N
  • s/\n/\|\|\'||\'\|\|/g
  • }
  • {
  • N
  • s/\n/\|\|\'||\'\|\|/g
  • }
  • {
  • N
  • s/\n/\|\|\'||\'\|\|/g
  • }
此处指列出abcd.sed(abcd是随便起的名字)的简单几行,如果导出的表的字段较多的话,需要补充abcd.sed的内容,直接复制粘贴以上内容就Ok。
abcd.sed的主要作用就是把需要导出表的字段进行合并使用“||”连接为一行。分隔符“||”可以自己指定其他的符号替代。

脚本的使用:

把exp_table.sh和abcd.sed放到一个目录下直接运行sh脚本,后面跟用户下的表名

  • [oracle@jxpred test_dir]$ nohup ./exp_table.sh dept
  • [oracle@jxpred test_dir]$ cat dept.txt  
  • 10||ACCOUNTING||NEW YORK
  • 20||RESEARCH||DALLAS
  • 30||SALES||CHICAGO
  • 40||OPERATIONS||BOSTON


方法二:使用oracle中的UTL_FILE

conn sys/oracle as sysdba

--在初始化参数文件中加入下面一行

utl_file_dir=d:\bk

  • alter system set utl_file_dir='/home/oracle/exp' scope=spfile;

这个需要重启数据库,比较严重哦。


--其中\n为换行

--%s为替代字符,将来会被后面的1到5个参数替代,默认值为NULL

--NEW_LINE 过程建立一个新的空行


  • -------------------案例:将DEPT表的数据导入到文本中-----------------------------
  • declare
  • v_filehandle UTL_FILE.FILE_TYPE;
  • begin
  • v_filehandle:=utl_file.fopen('/home/oracle/exp','dept.txt','w');
  • UTL_FILE.PUTF (v_filehandle,'表DEPT的文本数据,导出时间为:%s\n', SYSDATE);
  • UTL_FILE.NEW_LINE (v_filehandle);
  • for i in(select * from scott.dept) loop
  • UTL_FILE.PUTF (v_filehandle, '%s ,%s, %s\n',i.deptno,i.dname,i.loc);
  • end loop;
  • UTL_FILE.FCLOSE (v_filehandle);
  • end;
  • /

此方法需要将表的所用的字段都写到UTL_FILE.PUTF后 :

  • UTL_FILE.PUTF (out_file, '%s||%s||%s||%s||%s||',i.TYPEID,i.SYSTEMID,i.SOURCEID,i.SOURCENAME,i.DESTINATIONID);
  • UTL_FILE.PUTF (out_file, '%s||%s||%s||%s||%s||',i.DESTINATIONNAME,i.REMARK,i.OPRTR,i.OPRT_TIME,i.SORT_NO);
  • UTL_FILE.PUTF (out_file, '%s\n',i.PARENTID);
而且每个UTL_FILE.PUTF中最多只能有5个%s替代符。多的字段需要换行继续写UTL_FILE.PUTF内容。此处使用的是“||”作为 分隔符,可以替换其他分隔符。

以上是oracle较常用的两种导出表到文本的方法。




运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-4332-1-1.html 上篇帖子: Windows下ORACLE 10g安装与操作图解 下篇帖子: oracle instantclient +plsql developer连接oracle数据库

尚未签到

发表于 2013-3-25 09:12:55 | 显示全部楼层
我是个凑数的。。。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

尚未签到

发表于 2013-5-18 10:16:24 | 显示全部楼层
生活***好玩,因为生活老***玩我!

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

尚未签到

发表于 2013-5-22 15:30:40 | 显示全部楼层
看尽天下A片,心中自然无码~

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

尚未签到

发表于 2013-5-29 22:41:40 | 显示全部楼层
勿以坑小而不灌,勿以坑大而灌之。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

尚未签到

发表于 2013-6-6 00:22:46 | 显示全部楼层
长得真有创意,活得真有勇气!

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

尚未签到

发表于 2013-6-14 10:01:43 | 显示全部楼层
我抢、我抢、我抢沙发~

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表