`
zhb8015
  • 浏览: 390920 次
  • 性别: Icon_minigender_1
  • 来自: 北京
博客专栏
Group-logo
Spring Roo杂谈
浏览量:0
社区版块
存档分类
最新评论

oracle spool 导出文本两种方法比较

阅读更多

要输出符合要求格式的数据文件只需在select时用字符连接来规范格式。比如有如下表

SQL>; select id,username,password from myuser;//测试表
1 John       1234
2 Jack       12345
3 Rose       2345
4 Joe        384657
5 Tom        384655
6 Jordan     384455

要输出符合1,John,1234,这样的数据格式就用select id||','||username||','||password||',' from myuser这样的语句。

SQL>; select id||','||username||','||password||',' from myuser;
1,John,1234,
2,Jack,12345,

写个下面这样的脚本就行可以输出符合要求格式的数据至文件中,不会含有其它不需要东西,只有数据部分。

--脚本文件名为expmyusr.sql,存数据的文件名为e:\exp.txt

set echo on            --是否显示执行的命令内容  
set feedback off       --是否显示 *   rows   selected  
set heading off        --是否显示字段的名称
set verify off         --是否显示替代变量被替代前后的语句。fil
set trimspool off      --去字段空格
set pagesize 1000      --页面大小
set linesize 50//linesize设定尽量根据需要来设定,大了生成的文件也大
define fil= 'e:\exp.txt'
prompt *** Spooling to &fil
spool &fil
select id||','||username||','||'"'||password||'"' from myuser;
spool off;

--执行过程
SQL>; @e:\expmyusr.sql
*** Spooling to e:\exp.txt
1,John,"1234"
2,Jack,"12345"
3,Rose,"2345"
4,Joe,"384657"
5,Tom,"384655"
6,Jordan,"384455"

检查可知结果符合要求。

Oracle SPOOL的两种方法之对比 

通常情况下,我们使用SPOOL方法,将数据库中的表导出为文本文件的时候会采用两种方法,如下述:

方法一:采用以下格式脚本 

set colsep '' ------设置列分隔符
set trimspool on
set linesize 120
set pagesize 2000
set newpage 1
set heading off
set term off
spool 路径+文件名
select * from tablename;
spool off

方法二:采用以下脚本

set trimspool on
set linesize 120
set pagesize 2000
set newpage 1
set heading off
set term off
spool 路径+文件名
select col1||','||col2||','||col3||','||col4||'..' from tablename;
spool off

比较以上方法,即方法一采用设定分隔符然后由sqlplus自己使用设定的分隔符对字段进行分割,方法二将分隔符拼接在SELECT语句中,即手工控制输出格式。

在实践中,我发现通过方法一导出来的数据具有很大的不确定性,这种方法导出来的数据再由sql ldr导入的时候出错的可能性在95%以上,尤其对大批量的数据表,如100万条记录的表更是如此,而且导出的数据文件狂大。

而方法二导出的数据文件格式很规整,数据文件的大小可能是方法一的1/4左右。经这种方法导出来的数据文件再由sqlldr导入时,出错的可能性很小,基本都可以导入成功。

因此,实践中我建议大家使用方法二手工去控制spool文件的格式,这样可以减小出错的可能性,避免走很多弯路。

分享到:
评论

相关推荐

    oracle导出txt文件方法

    在实际应用中,我们可以使用两种方法来编写脚本。第一种方法是将 SQL 和执行脚本写到一个文件中,这种方法主要适用于 UNIX 系统中。例如: ``` #!/bin/sh send_day=`sqlplus -s $DB_USER/$DB_PWD@$DB_SERV SET TIME...

    spool导出与sqlldr导入

    在Oracle数据库管理中,"spool"和"sqlldr"是两种非常实用的工具,用于数据的导出和导入操作。下面将详细解释这两个概念及其使用方法。 **1. Spool导出** Spool是Oracle SQL*Plus中的一个功能,它允许用户将SQL*...

    Oracle 有 选择地导出数据 到 excel的方法

    本文将详细介绍一种使用SQL*Plus有选择地导出Oracle数据到Excel的方法,该方法已在实际环境中成功运行。 首先,我们需要了解SQL*Plus是Oracle提供的一款命令行工具,用于执行SQL查询和PL/SQL程序。通过它,我们可以...

    EXCEL,TXT文档数据和ORACLE数据互导的方法

    这两种工具都可以用来批量导入数据。例如,使用SQL*Loader命令行工具: ``` sqlldr userid=your_username/your_password control=c:\control_file.ctl log=c:\log_file.log data=c:\data.csv ``` 其中`control_...

    关于spool 和 sqlldr 的实例代码

    在数据库管理中,`Spool` 和 `SQL*Loader` 是两种非常重要的工具,尤其在数据导入导出和批量处理方面。本实例将探讨如何在Linux环境下利用Shell脚本配合这两种工具实现高效的数据操作。 首先,`Spool` 是Oracle SQL...

    oracle备份与恢复总结

    高级选项中包括了ConventionalPathLoad与DirectPathLoad两种加载方式的对比,以及如何使用SPOOL导出文本数据。 ### 用户管理的备份与恢复 在用户管理的备份与恢复中,涉及到设置ARCHIVELOG模式和NONARCHIVELOG模式...

    Oracle备份与恢复总结.pdf

    - **SPOOL导出文本数据方法**: 一种简便的数据导出方式。 **2.3 脚本** - **将表中数据记录导出为字段值用分隔符'|'分开的.dat文件**: 示例脚本展示如何导出数据。 - **将数据导入到相应表中**: 示例脚本介绍如何...

    Oracle中批量数据迁移的实现方案.pdf

    在实现这个方案时,通常有两种方法。第一种是使用SQL*PLUS的SPOOL命令,它可以将SQL查询的结果直接输出到文件中,但这种方法对复杂数据抽取和大量数据处理的能力有限。第二种方法是编写自定义程序,通过编程语言(如...

    Oracle数据加载和卸载的实现方法

    以下将详细讲解Oracle中数据加载和卸载的几种实现方法。 一、Oracle中的DBLINK DBLINK是Oracle提供的一种连接不同数据库的机制,它允许用户在不同的Oracle数据库之间建立连接,进行数据查询和交换。创建DBLINK的...

    oracle sql pl 基础学习

    标记选项包括ON/OFF开关、头部文本、主体文本、表格文本、实体映射开关、SPool开关和预格式化开关。 6. **-RESTRICT**:限制SQL*Plus的功能,提高安全性。1、2、3分别代表不同的限制级别,具体功能受限程度取决于所...

    第3章 Oracle管理工具.ppt

    SQL Plus支持两种类型的注释:使用`/*...*/`的块注释和`REMARK`命令添加单行注释,这些注释不会被解释执行,只供阅读者参考。 总结来说,SQL Developer和SQL Plus都是Oracle数据库的重要管理工具,它们各有侧重点,...

    Oracle9i数据库开发培训教材2011

    - 包含独特技巧,如导出触发器的方法等。 - 覆盖Oracle8i和Oracle9i OCP认证大纲内容。 - **适用范围**: 适用于Oracle数据库管理人员、应用开发人员、系统分析与设计人员以及高校计算机专业师生。 - **局限性**:...

    Oracle8i_9i数据库基础

    - **Oracle SQL*PLUS**:是Oracle数据库的一种交互式工具,用于执行SQL语句、脚本文件,并查看其结果。SQL*PLUS支持多种操作系统环境。 ##### 1.1 关系数据库系统 (RDBMS) - **关系模型**:关系模型是基于关系数学...

    各种oracle指南

    - **spool+路径**:用于将查询结果导出到文件。 - **连接操作符:||**:用于连接两个字符串值。 - **DISTINCT**:用于去除重复的记录,只显示不同的值。 **1.5 SQLPLUS与SQL的关系** SQLPLUS是Oracle提供的一个...

    Oracle常用命令

    在Oracle数据库中,角色是权限集合的一种抽象化表示形式。 **1. connect角色** - _说明_: 该角色允许用户登录到数据库,并执行基本的SELECT操作。 **2. resource角色** - _说明_: 除了connect角色的功能外,还...

    Oracle.zip_技术管理_SQL_

    总的来说,Oracle的热备份和逻辑备份是两种重要的数据保护手段,它们在数据库管理中扮演着不可或缺的角色。理解并熟练掌握这两种备份方式,对于保障业务连续性和数据安全性至关重要。通过阅读和学习“Oracle.doc”...

    SQLPLUS命令使用大全

    SQL*PLUS提供了两种方式来执行存储在文本文件中的SQL语句: - `START file_name` 或 `@ file_name`。这两个命令都可以用来运行包含SQL语句的文件,但`@`命令通常用于执行当前目录或通过`SQLPATH`环境变量指定路径...

    sql*loader 指南

    SQL*Loader有两种运行模式:基本模式(conventional path)和直接模式(direct path),根据不同的场景和性能需求选择合适的模式。 #### 二、SQL*Loader基础命令 ##### 基础命令格式: ``` sqlldr [username/...

Global site tag (gtag.js) - Google Analytics