SPOOL导出:
$cat spool.sql
set echo off #控制start命令不列出命令文件中的每一命令
set feedback off #显示由查询返回的记录数 off等价为0
set heading off #报表中列标题不打印
set verify off #不显示输入参数的变化过程
set trimspool on #去掉spool输出时每行末端空格
set pagesize 0 #置从顶部标题至页结束之间的行数
set term off #查询结果仅仅显示于假脱机文件中 on:查询结果既显示于假脱机文件中,又在SQLPLUS中显示
set linesize 150 #置一行中显示的字符总数
spool /ocfs/sql/sqlldrdata/test_spool_file.txt
select
empno||' '||ename||' '||job||' '||mgr||' '||to_char(hiredate,'yyyy-mm-dd')||'||sal||' '||comm||' '||deptno
from emp;
spool off
$cat test_spool.sh
#!/bin/bash
sqlplus -s yp/yp <<EOF
@/ocfs/sql/sqlldr/spool.sql
exit;
EOF
SQLLDR导入:
sqlldr参数:
userid -- Oracle 的 username/password[@servicename]
control -- 控制文件,可能包含表的数据
log -- 记录导入时的日志文件,默认为 控制文件(去除扩展名).log
bad -- 坏数据文件,默认为 控制文件(去除扩展名).bad
da
errors -- 允许的错误记录数,可以用他来控制一条记录都不能错
rows -- 多少条记录提交一次,默认为 64
skip -- 跳过的行数,比如导出的数据文件前面几行是表头或其他描述
$cat test_sqlldr.ctl
LOAD DA
infile "/ocfs/sql/sqlldrdata/test_spool_file.txt"
into table emp_test append
fields terminated by X'09'
(empno,ename,job,mgr,hiredate date 'yyyy-mm-dd',sal,comm,deptno)
//以下是4种装入表的方式
//APPEND // 原先的表有数据就加在后面
// INSERT // 装载空表,如果原先的表有数据SQLLOADER会停止默认值
// REPLACE // 删除旧记录(用 delete from table 语句),替换成新装载的记录
// TRUNCATE // 删除旧记录(用 truncate table 语句),替换成新装载的记录
// TERMINATED BY X'09' // 以十六进制格式'09'表示文本文件用TAB键分隔
$sqlldr yp/yp control='/ocfs/sql/sqlldr/test_sqlldr.ctl' log='/ocfs/sql/sqlldr/test_sqlldr.log' bad='/ocfs/sql/sqlldr/test_sqlldr.bad'