先讲讲今天遇到的一个比较恶心的问题:为了在命令模式下有比较直观的视觉效果,把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中看到输出内容。
#说明:此文件可生成于客户端或者数据库服务器端。
分享到:
相关推荐
这个“Oracle帮助文档 带SQL*Plus命令”压缩包显然包含了关于Oracle数据库管理和SQL*Plus使用的详细指南。 首先,Oracle帮助文档通常会包含以下几个方面的内容: 1. **Oracle数据库架构**:讲解Oracle数据库的核心...
通过这个官方文档,无论是初学者还是经验丰富的DBA,都能深化对SQLPlus的理解,提高Oracle数据库管理的效率。记住,实践是最好的老师,结合实际操作来学习这些概念和命令,将使你更深入地掌握SQLPlus的精髓。
Oracle SQL*Plus是一款强大的命令行工具,用于与Oracle数据库交互,执行SQL查询、PL/SQL块以及管理数据库任务。...无论你是初学者还是经验丰富的Oracle用户,都能从中找到解决问题的方法和提升工作效率的技巧。
《SQLPLUS命令的使用大全:深入解析与应用》 ...无论是初学者还是资深DBA,深入理解和灵活运用SQLPLUS都将大有裨益。希望本文能成为您探索SQLPLUS奥秘的指南,助力您的数据库管理工作更上一层楼。
Oracle官方文档中文版是针对Oracle数据库系统的一份详尽学习资料,特别适合初学者入门。Oracle,作为全球广泛使用的数据库管理系统之一,拥有丰富的特性和功能,涵盖了数据存储、管理、查询、安全等多个方面。这份...
在IT领域,尤其是在数据库管理与开发中,Oracle的SQL*Plus工具是...以上总结的知识点涵盖了从基本操作到高级功能的广泛内容,对于学习和掌握Oracle SQL*Plus工具,无论是初学者还是经验丰富的数据库管理员都大有裨益。
Oracle是世界上最广泛使用的数据库管理系统之一,它在企业级应用中占据着重要的地位。这篇“Oracle学习一:安装配置,...对于初学者,建议多实践,理论与实战相结合,逐渐熟悉这些工具和概念,以提升自己的Oracle技能。
本文档旨在为Oracle初学者提供一个全面的指南,帮助他们理解并掌握SQL*Plus这一强大的工具。SQL*Plus是Oracle数据库系统提供的一个命令行界面工具,它允许用户执行SQL语句、脚本文件,并查看其结果。通过本文档的...
Oracle 10g 数据库基础教程中的SQL*PLUS是一个强大的管理与开发工具,它是Oracle数据库安装的一部分,无论是服务器端还是客户端。...对于初学者,理解并熟练运用这些命令是学习Oracle数据库的第一步。
对于初学者来说,掌握SQLPLUS的基本操作和常用命令是非常重要的。以下是一些关键的SQLPLUS命令及其用法: 1. **连接数据库**: 使用`sqlplus用户名/密码@连接字符串`来连接到数据库。例如,`sqlplus scott/tiger@...
### Oracle初学者使用手册知识点详解 ...以上内容为Oracle初学者使用手册的关键知识点概述,主要包括SQLPLUS的基本使用、SQL命令的执行、SQL语句的结构与语法等方面,旨在帮助初学者快速入门Oracle数据库的操作与管理。
通过深入阅读这两份文档,你可以全面了解SQL*Plus的各个方面,无论你是初学者还是有经验的DBA,都能从中获益良多。对于日常的数据库维护和开发工作,掌握SQL*Plus的技巧至关重要,因为它能够帮助你更高效地进行数据...
对于初学者而言,掌握Oracle的基本使用和SQLPLUS命令至关重要。 ##### SQLPLUS的命令与初始化设置 - **初始化表的位置与编码设置**:在使用SQLPLUS进行操作之前,需要确保环境变量`NLS_LANG`被正确设置,例如`set ...
在初学者的SQLPlus Demo中,可能包含了一些简化版的命令接口,用于模拟这些基本操作。这有助于新手在没有完整Oracle环境的情况下,理解SQL语句的工作原理和数据库操作流程。 通过这样的实践,初学者不仅能熟悉SQL...
### Oracle数据库概述与基础知识 #### Oracle公司的起源与发展 Oracle公司,又称为甲骨文公司...通过这些基础知识的学习,可以帮助初学者更好地理解Oracle数据库的架构和技术特点,为进一步深入学习打下坚实的基础。
中文教程通常会包含基础概念、安装配置、操作示例、常见问题解答等内容,帮助初学者快速上手。文档中可能还会涉及SQLPlus的实用技巧和最佳实践,以提高工作效率。 通过阅读提供的"sqlplus教程(中文.doc)",你应该...
### Oracle学习笔记知识点详解 #### 一、Oracle基础与SQLPLUS命令 - **初始化表的位置**: 使用`set NLS_LANG=american_...这些知识点对于初学者来说非常实用,可以帮助他们更好地理解和掌握Oracle数据库的使用方法。
总之,本教材为初学者到进阶用户提供了一个全面而系统的学习Oracle数据库的路径。通过逐步深入的讲解和大量实例演示,可以快速帮助学习者掌握Oracle数据库的关键技术和操作实践,成为数据库管理的专家。