目录
导入实例
打开命令提示符,执行命令
sqlplus username/[email protected]:1521/orcl
--执行sql脚本
@E:\2019_transdata\adlib4_db\建库脚本\Oracle\0_基础.sql
--导入
sqlldr "'username/[email protected]:1521/orcl'" control=E:/1_exp_test.ctl log=E:/1_exp_test.log direct=true bad=E:/log/1_exp_test.bad rows=10000 errors=1000
1_exp_test.ctl内容如下:
LOAD DATA
INFILE 'E:/1_exp_test.data' --修改对应的路径和文件名
TRUNCATE INTO TABLE exp_test --修改对应的表名
FIELDS TERMINATED BY x'1B' --修改对应的分割符
TRAILING NULLCOLS
(
filed1 ,
filed2 char(100000000)
)
常见问题解决办法
1 导出大字段
ctl文件中“TRAILING NULLCOLS”中对应的clob字段添加char(1000000000),括号数字大小要比clob字符长度大。
2 换号符处理
replace(a.filed2,'0x0a',chr(10))
3 数据文件的字段超出最大长度
sqlldr对于字符类型默认长度为255,如果超过255需要指定长度,见红色下面ctl文件中的红色字体:
LOAD DATA
INFILE 'data_cn_01.dat' "STR X'0D0A232323230D0A'"
INTO TABLE tpis_pat_cn
APPEND
FIELDS TERMINATED BY '||||'
TRAILING NULLCOLS
(
an,
pn,
ab CHAR(4000),
source CONSTANT 'SIPO',
patent_id "seq_tpis_pat_base.NEXTVAL"
)
4 ORA-12899: 列的值太大
其错误原因在于从文本中读取的字段值超过了数据库表字段的长度,需要用Oracle函数解决,如下红色字体:
LOAD DATA
...
TRAILING NULLCOLS
(
...
ab CHAR(4000) "SUBSTRB(:ab,1,2000)",
...
)
5 遇到特殊字符&处理
原SQL如:update trans_record set params = 'service=standard_bail&xxx=112' where trans_record_id = '3041';
执行时执行出现问题,提示输入对应参数的值。
经查,问题就出在字符&上,他是一个控制参数传入的字符,要解决执行的问题,有如下几种方式:
1、在sqlplus中执行set define off关闭特殊字符,关闭前可用show define查看有哪些特殊字符;
2、update trans_record set params = 'service=standard_bail'||'&'||'xxx=112' where trans_record_id = '3041';
3、update trans_record set params = 'service=standard_bail'||chr(38)||'xxx=112' where trans_record_id = '3041';
4、update trans_record set params = 'service=standard_bail/&xxx=112' where trans_record_id = '3041';
以上4种方式推荐使用第一种方式,简单,彻底解决特殊字符问题(前提是看清到底关闭了哪些特殊字符);因为特殊字符不止有&,还有%等;
参考网址
sqlldr 数据类型
http://www.anguora.com/20140729/
sqlldr 配置参数
https://blog.csdn.net/lwei_998/article/details/7730025
qlplus 中执行sql 遇到特殊字符&处理
https://blog.csdn.net/happyqwz/article/details/8443576