如何将oracle如何导出表数据表导出到文本

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
您的访问请求被拒绝 403 Forbidden - ITeye技术社区
您的访问请求被拒绝
亲爱的会员,您的IP地址所在网段被ITeye拒绝服务,这可能是以下两种情况导致:
一、您所在的网段内有网络爬虫大量抓取ITeye网页,为保证其他人流畅的访问ITeye,该网段被ITeye拒绝
二、您通过某个代理服务器访问ITeye网站,该代理服务器被网络爬虫利用,大量抓取ITeye网页
请您点击按钮解除封锁&怎样将oracle中某一张表的数据导出为dmp文件???
[问题点数:40分,结帖人pll0212]
怎样将oracle中某一张表的数据导出为dmp文件???
[问题点数:40分,结帖人pll0212]
不显示删除回复
显示所有回复
显示星级回复
显示得分回复
只显示楼主
2011年3月 Oracle大版内专家分月排行榜第二2011年2月 Oracle大版内专家分月排行榜第二
2010年10月 Oracle大版内专家分月排行榜第三
2011年4月 Oracle大版内专家分月排行榜第二
2011年2月 Oracle大版内专家分月排行榜第三2010年11月 Oracle大版内专家分月排行榜第三
本帖子已过去太久远了,不再提供回复功能。比特客户端
您的位置:
详解大数据
详解大数据
详解大数据
详解大数据
ORCLE如何导出大量数据到txt
  方法一:使用SQLPlus的spool命令
  操作步骤
  1. 新建一个脚本文件,存放起来,如D:\spool.sql,具体代码如下
  6Sql代码
  set echo off --在用start命令执行一个sql脚本时,是否显示脚本中正在执行的SQL语句
  set feedback off --是否显示当前sql语句查询或修改的行数
  set newpage none --会在页和页之间没有任何间隔
  set verify off --
  set pagesize 0 --分多少页
  9set term off --在用spool命令将一个大表中的内容输出到一个文件中时,将内容输出在屏幕上会耗费大量的时间,设置set termspool off后,则输出的内容只会保存在输出文件中,不会显示在屏幕上,极大的提高了spool的速度。
  set trims on --将SPOOL输出中每行后面多余的空格去掉
  set linesize 600 --设置屏幕显示行宽,默认100
  set heading off --禁止输出列标题
  set timing off --默认为OFF,设置查询耗时,可用来估计SQL语句的执行时间,测试性能
  set numwidth 38
  SPOOL D:\aaa.txt
  select UserTelNo || ',' || to_char(ReceiveTime,'yyyy-MM-dd HH24:MI:SS') || ',' || UserContent || ',' || ReplyContent FROM LogSMSHall_Mutual WHERE rownum&=100;
  SPOOL OFF
  注意如果有clob字段的话,最好用to_char函数进行转换。
  2. 用sqlplus登录到数据库
  如果是在本机,直接在命令行(WIN+R-&CMD)窗口,输入“SQLPlus [用户名]/[密码]”即可。
  如果远程登录,在命令行中输入“SQLPlus [用户名]/[密码]@[数据库IP地址:监听端口号]/[数据库实例名称]”,回车即可。如“sqlplus Ajita/1@192.168.85.136:1521/orcl”。
  3. 执行脚本文件
  在SQLPlus命令窗口中执行步骤1中的脚本文件。命令方式为“@[脚本文件位置]”,如“@D:\spool.sql”
  优点:简单易用
  缺点:不容易成过程
  方法二:使用UTL_FILE包的文件操作命令
  操作步骤(只需要一步,也可以封装成存储过程)
  编写PL/SQL过程,导出到txt即可。
  19Sql代码
  DECLARE
  row_result varchar2(1024);
  selectsql varchar2(1024);
  qrycursor SYS_REFCURSOR;
  txt_handle UTL_FILE.file_
  selectsql := ' select bizname ||'' ''|| bizstatus from bizbusinessbaseinfo ';
  txt_handle := UTL_FILE.FOPEN('D:/UTL','a.txt','w');
  open qry
  fetch qrycursor into row_
  exit when qrycursor%
  UTL_FILE.PUT_LINE(txt_handle,row_result);
  --关闭游标
  UTL_FILE.FCLOSE(txt_handle);
  注意事项:
  如果没有设置参数utl_file_dir参数,本方法会报ora 29280的错误,解决有两种。
  1. 设置utl_file_dir参数,两种方式:
  a) 在init.ora中设置,直接修改文件即可
  b) 在sqlplus命令行设置
  1alter system set utl_file_dir=* scope=
  注意设置utl_file_dir的要点:
  utl_file_dir=* 这表示你能操作任何目录,尽量不要用
  utl_file_dir=d:\ 这表示你能操作d:\目录下的文件,但你不能操作d:\目录下的子目录
  注意在设置 utl_file_dir=路径时,如果路径是长路径名,例如c:\my temp目录,则你必须加上'',例如: utl_file_dir='c:\my temp'
  utl_file_dir可以是多个路径 utl_file_dir=c:\,d:\,d:\temp,'c:\my temp'
  设置完必须重新启动数据库
  2. 创建自己的目录(不需要重启数据库)
  在命令行中执行命令create or replace directory MY_DIR as 'c:/abc';即可。然后调用的时候,把frw:=utl_file.fopen('c:\abc','emp.txt','w');改成frw:=utl_file.fopen('MY_DIR','emp.txt','w');注意MY_DIR要大写。
  优点:容易封装成存储过程
  缺点:要使用UTL_FILE配置,稍微复杂点
[ 责任编辑:jj ]
SAPPHIRE NOW大会为…
甲骨文的云战略已经完成第一阶段…
软件信息化周刊
比特软件信息化周刊提供以数据库、操作系统和管理软件为重点的全面软件信息化产业热点、应用方案推荐、实用技巧分享等。以最新的软件资讯,最新的软件技巧,最新的软件与服务业内动态来为IT用户找到软捷径。
商务办公周刊
比特商务周刊是一个及行业资讯、深度分析、企业导购等为一体的综合性周刊。其中,与中国计量科学研究院合力打造的比特实验室可以为商业用户提供最权威的采购指南。是企业用户不可缺少的智选周刊!
比特网络周刊向企业网管员以及网络技术和产品使用者提供关于网络产业动态、技术热点、组网、建网、网络管理、网络运维等最新技术和实用技巧,帮助网管答疑解惑,成为网管好帮手。
服务器周刊
比特服务器周刊作为比特网的重点频道之一,主要关注x86服务器,RISC架构服务器以及高性能计算机行业的产品及发展动态。通过最独到的编辑观点和业界动态分析,让您第一时间了解服务器行业的趋势。
比特存储周刊长期以来,为读者提供企业存储领域高质量的原创内容,及时、全面的资讯、技术、方案以及案例文章,力求成为业界领先的存储媒体。比特存储周刊始终致力于用户的企业信息化建设、存储业务、数据保护与容灾构建以及数据管理部署等方面服务。
比特安全周刊通过专业的信息安全内容建设,为企业级用户打造最具商业价值的信息沟通平台,并为安全厂商提供多层面、多维度的媒体宣传手段。与其他同类网站信息安全内容相比,比特安全周刊运作模式更加独立,对信息安全界的动态新闻更新更快。
新闻中心热点推荐
新闻中心以独特视角精选一周内最具影响力的行业重大事件或圈内精彩故事,为企业级用户打造重点突出,可读性强,商业价值高的信息共享平台;同时为互联网、IT业界及通信厂商提供一条精准快捷,渗透力强,覆盖面广的媒体传播途径。
云计算周刊
比特云计算周刊关注云计算产业热点技术应用与趋势发展,全方位报道云计算领域最新动态。为用户与企业架设起沟通交流平台。包括IaaS、PaaS、SaaS各种不同的服务类型以及相关的安全与管理内容介绍。
CIO俱乐部周刊
比特CIO俱乐部周刊以大量高端CIO沙龙或专题研讨会以及对明星CIO的深入采访为依托,汇聚中国500强CIO的集体智慧。旨为中国杰出的CIO提供一个良好的互融互通 、促进交流的平台,并持续提供丰富的资讯和服务,探讨信息化建设,推动中国信息化发展引领CIO未来职业发展。
IT专家新闻邮件长期以来,以定向、分众、整合的商业模式,为企业IT专业人士以及IT系统采购决策者提供高质量的原创内容,包括IT新闻、评论、专家答疑、技巧和白皮书。此外,IT专家网还为读者提供包括咨询、社区、论坛、线下会议、读者沙龙等多种服务。
X周刊是一份IT人的技术娱乐周刊,给用户实时传递I最新T资讯、IT段子、技术技巧、畅销书籍,同时用户还能参与我们推荐的互动游戏,给广大的IT技术人士忙碌工作之余带来轻松休闲一刻。
微信扫一扫
关注Chinabyte我要将oracle中上亿条数据的表快速导出为固定格式的txt文件,有没有比较好的算法或工具推荐呢?
<dd style="float:cursor:" title="声誉值:
该问题被发起重新开启投票
投票剩余时间:
之前被关闭原因:
该问题被发起删除投票
投票剩余时间:
距离悬赏到期还有:
参与关闭投票者:
关闭原因:
该问题已经被锁定
锁定原因:()
保护原因:避免来自新用户不合宜或无意义的致谢、跟帖答案。
该问题已成功删除,仅对您可见,其他人不能够查看。
步骤如下:新建一个sql脚本 d:\czrk.sql,代码如下:SET echo offSET feedback offSET newpage noneSET pagesize 50000SET linesize 20000SET verify offSET pagesize 0SET term offSET trims ONSET heading offSET trimspool ONSET trimout ONSET timing offSET verify offSET colsep |spool d:\czrk.txtSELECT sfzh || ',' || xm || ',' || xb || ',' || csrq || ',' || mz|| ',' || xzqh|| ',' || jzdz FROM m_czrk WHERE rownum&=10000;spool offsqlplus连接上Oracle表中的数据库,执行脚本 sqlplus dc/dc@
推荐使用Ociuldr,速度超快,缺点是只能导出txt格式的;还有sqluldr2也可以试一下,
pl/sql developer 效率还可以。我用rapid SQL导出不了的(数据量太大导致死机,程序崩溃),用它就可以。效率最高的应该是Sql Loader(sqlldr)。
另外,你为什么不分批导出呢?
使用官方的Sqlloader,一般情况下,异构系统传输数据,可以考虑用。如果导出数据不是目的的话,可以考虑用Goldengate之类的数据同步软件,支持异构数据库,异构平台,异构版本,双向同步。
不是您所需,查看更多相关问题与答案
德问是一个专业的编程问答社区,请
后再提交答案
关注该问题的人
共被浏览 (4704) 次处理OracleERP导出的报表文件 - 开源中国社区
当前访客身份:游客 [
当前位置:
发布于 日 8时,
不少企业都在使用oracle ERP中的财务模块,这个财务模块导出的报表是excel格式的文件,里边内容排版相当怪异,所有的数据都填充在A列的每一行中,然后用空格等符号进行排版对齐。这样格式的文档,对于提取其中数据来说简直就是一场噩梦。往往财务人员基于此报表做另外的报表时,都会花上刷天的时间手工进行copy-parse,既费时又容易出错。所以财务总监找到了恺哥,看看恺哥有没有什么绝招来应付。在我分析文件格式之后,写下了如下代码,将混乱无规则的报表文件处理成了有序可操作的文件。
代码片段(6)
1.&[图片] mx.png&&&&
2.&[图片] mx2.png&&&&
3.&[图片] ok.png&&&&
4.&[图片] ui.png&&&&
5.&[代码][Java]代码&&&&
package k.
import java.io.F
import java.io.IOE
import java.util.ArrayL
import java.util.HashM
import java.util.L
import java.util.M
import jxl.S
import jxl.W
import jxl.read.biff.BiffE
import jxl.write.L
import jxl.write.WritableS
import jxl.write.WritableW
import jxl.write.WriteE
import mons.lang3.StringU
public class GetContentFromXls {
* @param args
public static void main(String[] args) {
String file = "d://cuc.xls";
GetContentFromXls.get(file);
public static void get(String file){
Workbook workbook =
workbook = Workbook.getWorkbook(new File(file));
Sheet sheet = workbook.getSheet(0);
//获得文件中一共有多少行
int totalRows = sheet.getRows();
System.out.println("总行数:" + totalRows);
//数据处理结果list
List&Map&String,String&& okList = new ArrayList&Map&String,String&&();
List&Map&String,Integer&& groupList = getGroupList(sheet, totalRows);
//得到每组的行数据
for(Map&String,Integer& groupMap : groupList){
int sIdx = groupMap.get("s");
int eIdx = groupMap.get("e");
//获得项目编号,在每组的第一行。用. split 之后 第5位是项目编号
String okProjCode = StringUtils.split(getCellValue2Trim(sheet, sIdx),".")[5];
System.out.println("项目编号str:" + okProjCode);
//获得科目,在每组的第二行。用. split 之后 第3位是科目
String okCostType = StringUtils.split(getCellValue2Trim(sheet, sIdx+1),".")[3];
System.out.println("科目str:" + okCostType);
//获得没项目的明细中,每组本月合计的开始、结束索引
List&Map&String,Integer&& byhjGroupIdxList = getSumIdxGroup(sheet, sIdx, eIdx);
for(Map&String,Integer& idxMap : byhjGroupIdxList){
Map&String,String& okMap = new HashMap&String,String&();
okMap.put("proj_code", okProjCode);
okMap.put("cost_type", okCostType);
String colYMStr = getCellValue2Trim(sheet, idxMap.get("s"));
String colMSumStr = getCellValue2Trim(sheet, idxMap.get("e"));
System.out.println("年月列str : " + colYMStr);
System.out.println("月合计列str : " + colMSumStr);
//获得你年月,取colYMStr前8位后trim
String[] ymVal = StringUtils.split(StringUtils.trimToEmpty(StringUtils.substring(colYMStr, 0, 8)),"-");
String okYear = ymVal[0];
String okMonth = ymVal[1];
okMap.put("year", okYear);
okMap.put("month", okMonth);
System.out.println("年:" + okYear + " - 月:" + okMonth);
//处理月合计列,按空格split
String[] sumVal = StringUtils.split(colMSumStr);
String okJie = sumVal[1];
String okDai = sumVal[2];
String okYe = sumVal[4];
okMap.put("jie", okJie);
okMap.put("dai", okDai);
okMap.put("ye", okYe);
System.out.println("借:" + okJie + " - 贷:" + okDai + " - 余额:" + okYe);
okList.add(okMap);
System.out.println(okList);
//write to xls
toXls(okList);
} catch (BiffException | IOException | WriteException e) {
e.printStackTrace();
workbook.close();
private static void toXls(final List&Map&String, String&& okList) throws WriteException, IOException {
WritableWorkbook workbook =
workbook = Workbook.createWorkbook(new File("d://output"+System.currentTimeMillis()+".xls"));
WritableSheet sheet = workbook.createSheet("sheet1", 0);
sheet.addCell(new Label(1, 0, "项目编号"));
sheet.addCell(new Label(2, 0, "成本类型"));
sheet.addCell(new Label(3, 0, "年"));
sheet.addCell(new Label(4, 0, "月"));
sheet.addCell(new Label(5, 0, "借"));
sheet.addCell(new Label(6, 0, "贷"));
sheet.addCell(new Label(7, 0, "本月余额"));
//写表格内容
for(int i=0;i&okList.size();i++){
Map&String,String& map = okList.get(i);
sheet.addCell(new Label(1, i+1, map.get("proj_code")));
sheet.addCell(new Label(2, i+1, map.get("cost_type")));
sheet.addCell(new Label(3, i+1, map.get("year")));
sheet.addCell(new Label(4, i+1, map.get("month")));
sheet.addCell(new Label(5, i+1, map.get("jie")));
sheet.addCell(new Label(6, i+1, map.get("dai")));
sheet.addCell(new Label(7, i+1, map.get("ye")));
workbook.write();
} finally{
workbook.close();
private static List&Map&String,Integer&& getSumIdxGroup(Sheet sheet, int sIdx, int eIdx) {
//合计组明细的开始索引
int sumGroupStartIdx = sIdx+4;
//将包含“本月合计”的行打包,开始索引+4,去除头部信息。并将包含本月合计的索引保存起来
List&Integer& byhjIdxList = new ArrayList&Integer&();
for(int i=sumGroupStartIi&=eIi++){
String byhjValStr = getCellValue2Trim(sheet, i);
System.out.println(byhjValStr);
if(StringUtils.contains(byhjValStr, "本月合计")){
System.out.println("本月合计所在行:A"+i);
byhjIdxList.add(i);
System.out.println(byhjIdxList);
//处理包含本月合计的组开始索引和组结束索引
List&Map&String,Integer&& byhjGroupIdxList = new ArrayList&Map&String,Integer&&();
for(int i=0;i&byhjIdxList.size();i++){
int e = byhjIdxList.get(i);
Map&String,Integer& map = new HashMap&String,Integer&();
map.put("s", sumGroupStartIdx);
map.put("e", e);
if(i+1 & byhjIdxList.size()){
if(StringUtils.contains(getCellValue2Trim(sheet,e+1),"本年累计")){
sumGroupStartIdx = e+2;
sumGroupStartIdx = e+1;
byhjGroupIdxList.add(map);
System.out.println(byhjGroupIdxList);
return byhjGroupIdxL
private static List&Map&String,Integer&& getGroupList(Sheet sheet, int totalRows) {
//containKEMUList存放所有包含【科
目:】的行号
List&Integer& containKEMUList = new ArrayList&Integer&();
//获得文件中有多少组项目
for(int i=1;i&=totalRi++){
//获得col-A中的内容并去除空格
String aVal = getCellValue2Trim(sheet,i);
//将col-A中包含【科
目:】字样的行提取出来
if(StringUtils.isNotBlank(aVal) && StringUtils.contains(aVal, "科
System.out.println("A" + i + " - " + aVal);
containKEMUList.add(i);
System.out.println(containKEMUList);
//定义存放组数据的开始行s和结束行e的list
List&Map&String,Integer&& groupList = new ArrayList&Map&String,Integer&&();
for(int i=0;i&containKEMUList.size();i++){
Map&String,Integer& groupMap = new HashMap&String,Integer&();
groupMap.put("s", containKEMUList.get(i));
//最后科目索引的结束等于总行数-2
groupMap.put("e", i+1==containKEMUList.size() ? totalRows-2 : containKEMUList.get(i+1)-2);
groupList.add(groupMap);
System.out.println(groupList);
return groupL
//获得指定cell索引的内容并去除空格
private static String getCellValue2Trim(Sheet sheet,int cellIdx){
return StringUtils.trimToEmpty(sheet.getCell("A"+cellIdx).getContents());
kFinance.jar&~&958KB&&&&
开源中国-程序员在线工具:
程序所需要的第三方jar有:
&负责读写excel文件
&负责处理一些常用操作,如判断,截取,分割,替换等
2楼:恺哥 发表于
顺道将可执行程序(jar)分享出来,在底部可以点击下载
3楼:周明瑞 发表于
学习了,好
开源从代码分享开始
恺哥的其它代码

我要回帖

更多关于 oracle 导出文本数据 的文章

 

随机推荐