第一部分
第一步 : 这是我的导出数据的脚本 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导入导出数据的详细内容...