`
cwmdream
  • 浏览: 4082 次
  • 性别: Icon_minigender_1
  • 来自: 江西
最近访客 更多访客>>
社区版块
存档分类
最新评论

Oracle关于SPOOL的学习文档 (SQLPLUS的命令,对初学者比较有用)

 
阅读更多
先讲讲今天遇到的一个比较恶心的问题:为了在命令模式下有比较直观的视觉效果,把pagesize设置为了0(也就是不分页显示),linesize设置成了240.等一系列的参数设置.
结果吃完午饭回来,发现查询出来的结果没有表头,于是设置heading on ,无果.纠结,纳闷...
解决方法:pagesize不要设置为0,表头就会显示.想不通,pagesize 和表头显示竟然会有挂勾,估计这也许是oracle 的一小BUG....

对于SPOOL数据的SQL,最好要自己定义格式,以方便程序直接导入,SQL语句如:
select taskindex||'|'||commonindex||'|'||tasktype||'|'||to_number(to_char(sysdate,'YYYYMMDD')) from ssrv_sendsms_task;

spool常用的设置
set colsep' ';    //域输出分隔符
set echo off;    //显示start启动的脚本中的每个sql命令,缺省为on
set feedback off;  //回显本次sql命令处理的记录条数,缺省为on
set heading off;   //输出域标题,缺省为on
set pagesize 0;   //输出每页行数,缺省为24,为了避免分页,可设定为0。
set termout off;   //显示脚本中的命令的执行结果,缺省为on
set trimout on;   //去除标准输出每行的拖尾空格,缺省为off
set trimspool on;  //去除重定向(spool)输出每行的拖尾空格,缺省为off

导出文本数据的建议格式:
SQL*PLUS环境设置SET NEWPAGE NONE
                SET HEADING OFF
                SET SPACE 0
                SET PAGESIZE 0
                SET TRIMOUT ON
                SET TRIMSPOOL ON
                SET LINESIZE 2500

注:LINESIZE要稍微设置大些,免得数据被截断,它应和相应的TRIMSPOOL结合使用防止导出的文本有太多的尾部空格。但是如果 LINESIZE设置太大,会大大降低导出的速度,另外在WINDOWS下导出最好不要用PLSQL导出,速度比较慢,直接用COMMEND下的 SQLPLUS命令最小化窗口执行。

对于字段内包含很多回车换行符的应该给与过滤,形成比较规矩的文本文件。通常情况下,我们使用SPOOL方法,将数据库中的表导出为文本文件的时候会采用两种方法,如下述:

方法一:采用以下格式脚本 
        set colsep '|'               --设置|为列分隔符
  set trimspool on
  set linesize 120
  set pagesize 2000         
  set newpage 1
  set heading off           
  set term off
        set num 18                 
        set feedback 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语句中,即手工控制输出格式。

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

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

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


自测例:将ssrv_sendsms_task表中的数据导出到文本(数据库Oracle 9i  操作系统 SUSE LINUX Enterprise Server 9)

spool_test.sh脚本如下:
#!/bin/sh
DB_USER=zxdbm_ismp                               #DB USER
DB_PWD=zxin_smap                                 #DB PASSWORD
DB_SERV=zx10_40_43_133                           #DB SERVICE NAME

send_day=`sqlplus -s $DB_USER/$DB_PWD@$DB_SERV<<! #-s 参数屏蔽打印到屏幕上的其他信息,只显示sql执行信息
set trimspool on
set linesize 120
set pagesize 2000
set newpage 1
set heading off
set term off
spool sp_test.txt
select taskindex||'|'||commonindex||'|'||tasktype||'|'||to_number(to_char(sysdate,'YYYYMMDD')) from ssrv_sendsms_task;
spool off
/
!`


执行./spool_test.sh后生成sp_test.txt,内容如下:
83|115|1|20080307
85|115|11|20080307
86|115|10|20080307
84|115|2|20080307
6|5|14|20080307
7|5|12|20080307
9|5|15|20080307

set time off echo off head off
set trimspool on
set termout off
set pagesize 0
set colsep ","
set trims on
set trimout on;
set feedback off
spool d:\test.csv
select rownum||','||empno||','||ename from emp;
spool off

附:用spool导出数据库到文本

创建文件ex.sql

set heading off
set echo off
set term off
set line 0
set pages 0
set feed off
spool /users/oracle/outa.txt
select point_id,domain_id as newcloumn from cctv_di_point where domain_id<3;
spool off;
set heading on
set echo on
set term on
set feed on
quit

在CMD控制台打开SQL PLUS
输入 sqlplus name/passwd
@ex.sql
运行成功后,即可在/users/oracle/outa.txt中看到输出内容。
#说明:此文件可生成于客户端或者数据库服务器端。
1
3
分享到:
评论

相关推荐

    oracle 帮助文档 带sqlplus命令

    这个“Oracle帮助文档 带SQL*Plus命令”压缩包显然包含了关于Oracle数据库管理和SQL*Plus使用的详细指南。 首先,Oracle帮助文档通常会包含以下几个方面的内容: 1. **Oracle数据库架构**:讲解Oracle数据库的核心...

    Oracle官方文档中文版-SQLPlus入门

    通过这个官方文档,无论是初学者还是经验丰富的DBA,都能深化对SQLPlus的理解,提高Oracle数据库管理的效率。记住,实践是最好的老师,结合实际操作来学习这些概念和命令,将使你更深入地掌握SQLPlus的精髓。

    Oracle官方文档中文版-SQLPlus快速参考

    Oracle SQL*Plus是一款强大的命令行工具,用于与Oracle数据库交互,执行SQL查询、PL/SQL块以及管理数据库任务。...无论你是初学者还是经验丰富的Oracle用户,都能从中找到解决问题的方法和提升工作效率的技巧。

    SQLPLUS命令的使用大全

    《SQLPLUS命令的使用大全:深入解析与应用》 ...无论是初学者还是资深DBA,深入理解和灵活运用SQLPLUS都将大有裨益。希望本文能成为您探索SQLPLUS奥秘的指南,助力您的数据库管理工作更上一层楼。

    Oracle官方文档中文版

    Oracle官方文档中文版是针对Oracle数据库系统的一份详尽学习资料,特别适合初学者入门。Oracle,作为全球广泛使用的数据库管理系统之一,拥有丰富的特性和功能,涵盖了数据存储、管理、查询、安全等多个方面。这份...

    sqlplus命令记录

    在IT领域,尤其是在数据库管理与开发中,Oracle的SQL*Plus工具是...以上总结的知识点涵盖了从基本操作到高级功能的广泛内容,对于学习和掌握Oracle SQL*Plus工具,无论是初学者还是经验丰富的数据库管理员都大有裨益。

    Oracle学习一:安装配置,sqlplus ,使用em控制工具管理oracle

    Oracle是世界上最广泛使用的数据库管理系统之一,它在企业级应用中占据着重要的地位。这篇“Oracle学习一:安装配置,...对于初学者,建议多实践,理论与实战相结合,逐渐熟悉这些工具和概念,以提升自己的Oracle技能。

    sqlplus命令解释

    本文档旨在为Oracle初学者提供一个全面的指南,帮助他们理解并掌握SQL*Plus这一强大的工具。SQL*Plus是Oracle数据库系统提供的一个命令行界面工具,它允许用户执行SQL语句、脚本文件,并查看其结果。通过本文档的...

    SQLOracle-10g数据库基础教程 SQLPLUS工具介绍与常用命令.pptx

    Oracle 10g 数据库基础教程中的SQL*PLUS是一个强大的管理与开发工具,它是Oracle数据库安装的一部分,无论是服务器端还是客户端。...对于初学者,理解并熟练运用这些命令是学习Oracle数据库的第一步。

    SQLPLUS常用命令

    对于初学者来说,掌握SQLPLUS的基本操作和常用命令是非常重要的。以下是一些关键的SQLPLUS命令及其用法: 1. **连接数据库**: 使用`sqlplus用户名/密码@连接字符串`来连接到数据库。例如,`sqlplus scott/tiger@...

    oracle初学者使用手册

    ### Oracle初学者使用手册知识点详解 ...以上内容为Oracle初学者使用手册的关键知识点概述,主要包括SQLPLUS的基本使用、SQL命令的执行、SQL语句的结构与语法等方面,旨在帮助初学者快速入门Oracle数据库的操作与管理。

    oracle sqlplus用户指南与参考

    通过深入阅读这两份文档,你可以全面了解SQL*Plus的各个方面,无论你是初学者还是有经验的DBA,都能从中获益良多。对于日常的数据库维护和开发工作,掌握SQL*Plus的技巧至关重要,因为它能够帮助你更高效地进行数据...

    oracle学习资料

    对于初学者而言,掌握Oracle的基本使用和SQLPLUS命令至关重要。 ##### SQLPLUS的命令与初始化设置 - **初始化表的位置与编码设置**:在使用SQLPLUS进行操作之前,需要确保环境变量`NLS_LANG`被正确设置,例如`set ...

    sqlplus 控制台

    在初学者的SQLPlus Demo中,可能包含了一些简化版的命令接口,用于模拟这些基本操作。这有助于新手在没有完整Oracle环境的情况下,理解SQL语句的工作原理和数据库操作流程。 通过这样的实践,初学者不仅能熟悉SQL...

    Oracle数据库学习资料课件.doc

    ### Oracle数据库概述与基础知识 #### Oracle公司的起源与发展 Oracle公司,又称为甲骨文公司...通过这些基础知识的学习,可以帮助初学者更好地理解Oracle数据库的架构和技术特点,为进一步深入学习打下坚实的基础。

    sqlplus中文教程

    中文教程通常会包含基础概念、安装配置、操作示例、常见问题解答等内容,帮助初学者快速上手。文档中可能还会涉及SQLPlus的实用技巧和最佳实践,以提高工作效率。 通过阅读提供的"sqlplus教程(中文.doc)",你应该...

    Oracle学习笔记

    ### Oracle学习笔记知识点详解 #### 一、Oracle基础与SQLPLUS命令 - **初始化表的位置**: 使用`set NLS_LANG=american_...这些知识点对于初学者来说非常实用,可以帮助他们更好地理解和掌握Oracle数据库的使用方法。

    oracle 从入门到精通

    总之,本教材为初学者到进阶用户提供了一个全面而系统的学习Oracle数据库的路径。通过逐步深入的讲解和大量实例演示,可以快速帮助学习者掌握Oracle数据库的关键技术和操作实践,成为数据库管理的专家。

Global site tag (gtag.js) - Google Analytics