`
爱像天空
  • 浏览: 205785 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

Oracle通过sqlplus spool导入/出数据

阅读更多
忙了一天终于把sqlloader导出数据和导入数据弄清楚了,累死俺了。。。
这个总结主要分为三个大部分,
第一部分(实例,主要分两步),第二部分(参数小总结),第三部分(完全参数总结)

第一部分
第一步 :这是我的导出数据的脚本call.sql
conn scott/tiger
set echo off
set term off
set line 1000 pages 0
set feedback off
set heading off
set trimspool on
spool /temp/test/ldr_test.csv
select a.empno||',"'||a.ename||'",'||to_char(a.hiredate,'yyyy-mm-dd hh24:mi:ss')||','||a.sal from test a;
spool off
set trimspool off
set heading on
set feedback on
set term on
set echo on
exit

注释:call.sql脚本执行方法 (1)sqlplus /nolog 先进入sqlplus命令模式
                                         (2)start call.sql  在sqlplus命令模式下执行

第二步 :导入数据的脚本add_test.ctl
LOAD DATA
INFILE ldr_test.csv
TRUNCATE INTO TABLE test
FIELDS TERMINATED BY","  OPTIONALLY ENCLOSED BY'"'
(EMPNO,ENAME,HIREDATE date 'yyyy-mm-dd hh24:mi:ss',SAL)

注释: 在第一步导出数据后,执行add_test.sql脚本命令为: sqlplus scott/tiger control=add_test.ctl

至此用sqlplus导入/出数据完成了,如果有些参数不明白,请看一下第二三部分。
哦..忘了说test测试表的结构了,create table test as select empno,ename,hiredate,sal from emp;
           
第二部分
spool本身其实没有啥难的 ,就是set参数的个数太太多啦!!!下面就是我网上Copy的,当然有一些是自己加上去的
SQL>set colsep' '; //-域输出分隔符

SQL>set newp none  //设置查询出来的数据分多少页显示,如果需要连续的数据,中间不要出现空行就把newp设置为none,这样输出的数据行都是连续的,中间没有空行之类的

SQL>set echo off; //显示start启动的脚本中的每个sql命令,缺省为on

SQL> set echo on               //设置运行命令是是否显示语句

SQL> set feedback on;       //设置显示“已选择XX行”

SQL>set feedback off;      //回显本次sql命令处理的记录条数,缺省为on即去掉最后的 "已经选择10000行"

SQL>set heading off;    //输出域标题,缺省为on 设置为off就去掉了select结果的字段名,只显示数据

SQL>set headsep off  //标题分隔符

SQL>set pagesize 0;     //输出每页行数,缺省为24,为了避免分页,可设定为0。(可以简写为:set pages 0)

SQL>set linesize 80;     //输出一行字符个数,缺省为80。(可以简写为:set line 80)

SQL>set numwidth 12;     //输出number类型域长度,缺省为10

SQL>set termout/term off;    //显示脚本中的命令的执行结果,缺省为on

SQL>set trimout on; //去除标准输出每行的拖尾空格,缺省为off

SQL>set trimspool on; //去除重定向(spool)输出每行的拖尾空格,缺省为off

SQL>set serveroutput on;  //设置允许显示输出类似dbms_output

SQL> set timing on;          //设置显示“已用时间:XXXX”

SQL> set autotrace on-;    //设置允许对执行的sql进行分析

SQL>set verify off                     //可以关闭和打开提示确认信息old 1和new 1的显示.



第三部分
这个是纯Copy的set命令全家福 ,呵呵,很专业,如果看不习惯的话可以全部改成小写
使用set命令的语法如下: SET 系统变量  值
其中系统变量及其可选值如下:
  ARRAY[SIZE]          {20(默认值)|n}
  AUTO[COMMIT]         {OFF(默认值)|ON|IMM[EDIATE]}
  BLO[CKTERMINATOR]    {.(默认值)|C}
  CMDS[EP]             {;|C|OFF(默认值)|ON}
  COM[PATIBILITY]      {V5|V6|V7|NATIVE(默认值)}
  CON[CAT]             {.(默认值)|C|OFF|ON(默认值)}
  COPYC[OMMIT]         {0(默认值)|n}
  CRT crt             
  DEF[INE]             {&|C|OFF|ON(默认值)}
  ECHO                 {OFF|ON}
  EMBEDDED             {OFF(默认值)|ON}
  ESC[APE]             {\(默认值)|C|OFF(默认值)|ON}
  FEED[BACK]           {6(默认值)|n|OFF|ON}
  FLU[SH]              {OFF|ON(默认值)}
  HEA[DING]            {OFF|ON(默认值)}
  HEADS[EP]            {|(默认值)|C|OFF|ON(默认值)}
  LIN[ESIZE]           {80(默认值)|n}
  LONG                 {80(默认值)|n}
  LONGC[HUNKSIZE]      {80(默认值)|n}
  MAXD[ATA]            n
  NEWP[AGE]            {1(默认值)|n}
  NULL text
  NUMF[ORMAT]          格式
  NUM[WIDTH]           {10(默认值)|n}
  PAGES[IZE]           {14(默认值)|n}
  PAU[SE]              {OFF(默认值)|ON|text}
  RECSEP               {WR[APPED](默认值)|EA[CH]|OFF}
  RECSEPCHAR           { |C}
  SCAN                 {OFF|ON(默认值)}
  SERVEROUT[PUT]       {OFF|ON} [SIZE n]
  SHOW[MODE]           {OFF(默认值)|ON}
  SPA[CE]              {1(默认值)|n}
  SQLC[ASE]            {MIX[ED](默认值)|LO[WER]|UP[PER]}
  SQLCO[NTINUE]        {>;(默认值)|文本}
  SQLN[UMBER]          {OFF|ON(默认值)}
  SQLPER[FIX]          {#(默认值)|C}
  SQLP[ROMPT]          {SQL>;(默认值)|文本}
  SQLT[ERMINATOR]      {;(默认值)|C|OFF|ON(默认值)}
  SUF[FIX]             {SQL(默认值)|文本}
  TAB                  {OFF|ON(默认值)}
  TERM[OUT]            {OFF|ON(默认值)}
  TI[ME]               {OFF(默认值)|ON}
  TIMI[NG]             {OFF(默认值)|ON}
  TRIM[OUT]            {OFF|ON(默认值)}
  UND[ERLINE]          {-(默认值)|C|OFF|ON(默认值)}
  VER[IFY]             {OFF|ON(默认值)}
  WRA[P]               {OFF|ON(默认值)}

系统变量说明:
  ARRAY[SIZE] {20(默认值)|n} 置一批的行数,是SQL*PLUS一次从数据库获取的行数,有效值为1至5000. 大的值可提高查询和子查询的有效性,可获取许多行,但也需要更多的内存.当超过1000时,其效果不大.

  AUTO[COMMIT] {OFF(默认值)|ON|IMM[EDIATE]} 控制ORACLE对数据库的修改的提交. 置ON时,在ORACLE执行每个SQL命令或PL/SQL块后对数据库提交修改;置OFF时则制止自动提交,需要手工地提交修改,例如用SQL的 COMMIT命令. IMMEDIATE功能同ON.

  BLO[CKTERMINATOR] {.(默认值)|C} 置非字母数字字符,用于结束PL/SQL块.要执行块时,必须发出RUN命令或/命令.

  CMDS[EP] {;|C|OFF(默认值)|ON} 置非字母数字字符,用于分隔在一行中输入的多个SQL/PLUS命令.ON或OFF控制在一行中是否能输入多个命令. ON时将自动地将命令分隔符设为分号(;).其中C表示所置字符.

  COM[PATIBILITY] {V5|V6|V7|NATIVE(默认值)} 指定当前所链接的ORACLE版本.如果当前ORACLE的版本为5,则置COMPATIBILITY为V5; 为版本6时置成V6; 为版本7时置成V7. 如果希望由数据库决定该设置,在置成NATIVE.

  CON[CAT] {.(默认值)|C|OFF|ON(默认值)}设置结束一替换变量引用的字符.在中止替换变量引用字符之后可跟所有字符,作为体会组成部分,否则 SQL*PLUS将解释为替换变量名的一部分.当CONCAT开关为ON时,SQL*PLUS可重置CONCAT的值为点(.).

  COPYC[OMMIT] {0(默认值)|n} 控制COPY命令提交对数据库修改的批数.每次拷贝n批后,将提交到目标数据库.有效值为0到5000. 可用变量ARRAYSIZE设置一批的大小.如果置COPYCOMMIT为0,则仅在COPY操作结束时执行一次提交.

  CRT crt  改变SQL*PLUS RUNFORM命令使用的缺省CRT文件.如果置CRT不包含什么,则crt仅包含''''.如果在一个Form的系统调用期间,要使用NEW.CRT(缺省CRT是OLD.CRT),可按下列形式调用Form:
    SQL>;RUNFORM -C NEW form名
    或者
    SQL>;SET CRT NEW
    SQL>;RUNFORM form名
第二中方法存储CRT选择,以致在下次运行RUNFORM命令(是在同一次SQL*PLUS交互中)时,不需要指定.

  DEF[INE] {&|C|OFF|ON(默认值)} 设置在替换变量时所使用的字符.ON或OFF控制SQL*PLUS是否扫描替换变量的命令及用他们的值代替. DEFINE的ON或OFF的设置控制SCAN变量的设置.

  ECHO {OFF|ON} 控制START命令是否列出命令文件中的每一命令.为ON时,列出命令;为OFF时,制止列清单.

  EMBEDDED {OFF(默认值)|ON} 控制每一报表在一页中开始的地方. 为OFF时,迫使每一报表是在新页的顶部开始;为ON时,运行一报表在一页的任何位置开始.

  ESC[APE] {\(默认值)|C|OFF(默认值)|ON} 定义作为Escape字符的字符.为OFF时,使Escape字符不起作用.为ON时,使Escape字符起作用.

  FEED[BACK] {6(默认值)|n|OFF|ON} 显示由查询返回的记录数.ON和OFF置显示为开或关.置FEEDBACK为ON时,等价于置n为1. 如果置FEEDBACK为0,等价于将它置成OFF.

  FLU[SH] {OFF|ON(默认值)} 控制输出送至用户的显示设备.为OFF时,运行操作系统做缓冲区输出;为ON时,不允许缓冲. 仅当非交互方式运行命令文件时使用OFF,这样可减少程序I/O总是,从而改进性能.

  HEA[DING] {OFF|ON(默认值)} 控制报表中列标题的打印.为ON时,在报表中打印列标题;为OFF时禁止打印列标题.

  HEADS[EP] {|(默认值)|C|OFF|ON(默认值)} 定义标题分隔字符.可在COLUMN命令中使用标题分隔符,将列标题分成多行.ON和OFF将标题分隔置成开或关.当标题分隔为关(OFF)时,SQL*PLUS打印标题分隔符像任何字符一样.

  LIN[ESIZE] {80(默认值)|n} 置SQL*PLUS在一行中显示的字符总数,它还控制在TTITLE和BTITLE中对准中心的文本和右对齐文本. 可定义LINESIZE为1至最大值,其最大值依赖于操作系统.

  LONG {80(默认值)|n} 为显示和拷贝LONG类型值的最大宽度的设置. 对于ORACLE7, n的最大值为2G字节;对于版本6,最大值为32767.

  LONGC[HUNKSIZE] {80(默认值)|n} 为SQL*PLUS检索LONG类型值的增量大小.由于内存的限制,可按增量检索,该变量仅应用于ORACLE7.

  MAXD[ATA] n  置SQL*PLUS可处理的最大行宽字符数,其缺省值和最大值在不同操作系统中是可变的.

  NEWP[AGE] {1(默认值)|n} 置每一页的头和顶部标题之间要打印的空行数.如果为0, 在页之间送一换号符,并在许多终端上清屏.

  NULL text 设置表示空值(null)的文本,如果NULL没有文本,则显示空格(缺省时). 使用COLUMN命令中的NULL子句可控制NULL变量对该列的设置.

  NUMF[ORMAT] 格式  设置显示数值的缺省格式,该格式是数值格式.

  NUM[WIDTH] {10(默认值)|n} 对显示数值设置缺省宽度.

  PAGES[IZE] {14(默认值)|n} 置从顶部标题至页结束之间的行数.在11英寸长的纸上打印报表,其值为54,上下各留一英寸(NEWPAGE值为6).

  PAU[SE] {OFF(默认值)|ON|text} 在显示报表时,控制终端滚动.在每一暂停时,必须按RETURN键.ON将引起SQL*PLUS在每一报表输出页开始时暂停.所指定的文本是每一次 SQL*PLUS暂停时显示的文本.如果要键入多个词,必须用单引号将文本括起来.

  RECSEP {WR[APPED](默认值)|EA[CH]|OFF}
  RECSEPCHAR { |C}  指定显示或打印记录分行符的条件.一个记录分行符,是由RECSEPCHAR指定的字符组成的单行.空格为RECSEPCHAR的默认字符.
  RECSEP 告诉SQL*PLUS在哪儿做记录分隔.例如将RECSEP置成WRAPPED,在每一缠绕行之后,打印记录分行符.如果将RECSEP置成 EACH,SQL*PLUS在每一行后打印一记录分行符.如果将RECSEP置成OFF, SQL*PLUS不打印分行符.
分享到:
评论

相关推荐

    Oracle导出成csv格式后显示乱码的解决方法

    - 如果使用SQL*Plus,可以使用`SPOOL`命令导出数据,并通过`SET HEAD OFF`和`SET ECHO OFF`等选项来控制输出格式。 总之,解决Oracle导出CSV文件显示乱码的关键在于理解字符编码和数据解析的过程。通过正确设置...

    oracle导出数据生成excel

    Oracle数据库是全球广泛使用的大型关系型数据库管理系统,其在数据管理和分析方面有着强大的功能。...通过这些方法,即使没有编程经验,你也能轻松地将Oracle数据库中的数据导出到Excel文件,进行进一步的分析和处理。

    oracle导出txt文件方法

    Oracle 导出 txt 文件方法是指使用 spool 命令将 Oracle 数据库中的数据导出到 txt 文件中。这种方法可以自定义导出格式,以便于程序直接导入。 首先,我们需要了解 Oracle 文本导出的原理。Oracle 文本导出的原理...

    ORACLE SQLPLUS2

    通过“ORACLE SQLPLUS2”的压缩包,你将获得一个轻量级的Oracle环境,可以进行基本的数据库管理和查询工作,而无需完整安装客户端。这使得在不占用大量系统资源的情况下,仍然能高效地与Oracle数据库进行交互。

    Oracle SQLPlus导出数据到csv文件的方法

    Oracle SQLPlus是一款强大的数据库管理工具,它允许用户与Oracle数据库进行交互,执行SQL查询和脚本,以及进行数据导出等操作。在某些场景下,将数据导出为CSV(逗号分隔值)文件是一种常见需求,例如备份、数据分析...

    2020年(Oracle管理)ORACLE数据库sqlplus使用技巧.pdf

    【Oracle管理】ORACLE数据库sqlplus使用技巧 Sql*plus是Oracle数据库系统中的一款强大工具,用于交互式地执行SQL语句和PL/SQL块。它不仅提供了基本的查询功能,还包含了一些高级特性和技巧,能极大提高数据库管理员...

    oracle SQLPlus常用命令

    通过熟练掌握这些SQLPlus命令,你可以更高效地管理和操作Oracle数据库,无论是简单的查询还是复杂的业务逻辑处理,都能得心应手。记住,实践是检验理解和掌握这些知识的最佳方式,所以不妨立即在你的Oracle环境中...

    oracle-instantclient11.2-sqlplus-11.2.0.4.0-1.x86_64

    - **导出导入数据**:通过SQL*Plus的spool功能,可以将查询结果导出为文本文件,或从文件导入数据。 总之,Oracle Instant Client 11.2带有SQL*Plus的版本是开发人员和DBA在没有完整Oracle数据库安装的情况下进行...

    sqlplus11.2 rpm安装包

    此外,SQLPlus还支持脚本执行、数据导入导出、生成报表等功能。 2. **Oracle SQLPlus 11.2**: 这个版本是指Oracle SQLPlus的11.2版,是Oracle Database 11g Release 2的一部分。11.2版带来了许多增强的功能和性能...

    Oracle - SQLplus

    通过SQL*Plus,用户可以连接到Oracle数据库,管理数据,创建和维护数据库对象,并执行自动化任务。在本文中,我们将深入探讨Oracle SQL*Plus的一些核心功能和使用技巧。 1. **连接数据库** 使用SQL*Plus,用户可以...

    oracle 8i sqlplus 参考手册

    - **数据导入导出**:虽然不是 SQL*Plus 的核心功能,但可以通过调用其他 Oracle 工具(如 SQL*Loader 和 Export/Import)来实现数据的导入导出。 #### 三、SQL*Plus 常用命令详解 - **登录命令**:使用 `sqlplus ...

    2020年(Oracle管理)ORACLE数据库sqlplus使用技巧.docx

    运行此脚本后,你会得到一个`dept_data.csv`文件,其中DEPTNO和DNAME字段由逗号分隔,非常适合导入到电子表格或其他数据分析工具中。 总结起来,SQL*Plus提供了丰富的命令选项,可以帮助我们更高效地管理和操作...

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

    - **数据导入导出**:`SPOOL filename`将输出重定向到文件,`SPOOL OFF`关闭重定向。 - **异常处理**:`WHENEVER SQLERROR`定义在SQL错误发生时的动作,`WHENEVER OSERROR`处理操作系统错误。 4. **SQL*Plus交互...

    Oracle sqlplus 操作实践

    在这个实践操作中,我们将深入理解SQL*Plus的基本操作,包括数据库的启动和关闭、常用命令的使用以及如何通过Java连接Oracle数据库。 首先,了解如何启动和关闭数据库是至关重要的。在DOS或Windows环境下,可以通过...

    Oracle sqlplus中的命令大全总结,提升sqlplus操作水平

    用户可以通过ODBC驱动程序连接到Oracle数据库,执行SQL语句,将查询结果导入到Excel表格中,然后利用Excel的计算和图表功能进行数据分析。 在SQL*Plus中,还可以使用`SET`命令调整输出格式,如`SET COLSEP ' '`设置...

    Oracle資料如何匯出成文字檔

    综上所述,通过以上步骤,可以从Oracle数据库中导出数据并将其导入到DB2数据库中,从而实现两个不同数据库系统之间的数据迁移。在整个过程中,需要注意数据的一致性和完整性,确保迁移后的数据能够正常工作。

    oracle 导出xls文件数据的脚本

    - 表格结构:外部表的结构需要与源Oracle表匹配,否则可能导致数据导入错误。 - 文件大小:XLS文件有大小限制,如果数据量大,可能需要分批次导出或考虑使用其他格式如XLSX或CSV。 5. **优化和扩展:** - 对于大...

    关于spool 和 sqlldr 的实例代码

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

    使用sqlplus生成txt或者html报表

    在IT行业中,数据库管理和数据分析是至关重要的任务,而SQLPlus作为一个强大的命令行工具,它为Oracle数据库用户提供了方便的数据查询、处理以及报表生成能力。本文将深入探讨如何使用SQLPlus生成TXT或HTML报表,这...

Global site tag (gtag.js) - Google Analytics