好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

Oracle通过sqlplus spool导入导出数据

主要分两步),第二部分(参数小总结),第三部分(完全参数总结)  


第一部分 
第一步 : 这是我的导出数据的脚本 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通过sqlplus spool导入导出数据

标签:

查看更多关于Oracle通过sqlplus spool导入导出数据的详细内容...

  阅读:26次