将txt文本数据导入到Oracle数据库中去
2016-04-08 16:51
465 查看
如果是txt文件的数据导入oracle中,数据量大的话用pl/sql会卡死,那么就要用到sqlload命令
首先需要将建立ctl格式的文件:
load data
infile 'D:\rh2015_2.txt'
append into table jg_hum
fields terminated by '|'
OPTIONALLY ENCLOSED BY '"'
TRAILING NULLCOLS
(
rh,
stid,
FRCSTDATE date "yyyy-mm-dd",
FRCSTHOUR,
LON,
LAT
)
*.ctl格式为:
load data
infile "d://test.txt" 外部数据文件
infile "d://test1.txt" 可指定多个数据文件
append into table test 向表中追加数据
fields terminated by "," 外部文件的数据以“,”分隔
OPTIONALLY ENCLOSED
BY '"' 部分字段可以用双引号包起来
trailing nullcols 表中的字段没有对应的值时填充空值
(
id integer external, integer
external 表示插入的数据是string,如果只保留integer,表示插入的数据是二进制
name "upper(:name)", 将插入的值转换为大写
con ":id||:name", 表中CON列的值是ID和NAME的组合值
dt date"yyyy-mm-dd" 插入日期型数据
)
说明:
load data
告诉SQLLDR要做什么(在这个例子中,则指示要加载数据)。SQLLDR还可以执行CONTINUE_LOAD,也就是继续加载。只有在继续一个多表直接路径加载时才能使用后面这个选项
INFILE *
:如果是*号,这会告诉SQLLDR所要加载的数据实际上包含在控制文件本身上,例见下一文。如上例指定包含数据的另一个文件的文件名。如果愿意,可以使用一个命令行参数覆盖这个INFILE语句。要当心,命令行选项总会涵盖控制文件设置
在append的位置还可以用以下列表中的一个值:
insert 向表中插入值,但要求表开始时为空,默认的加载选项
replace delete表中的数据,然后插入新值,记录多时速度慢
append 向表中追加数据
truncate trunctate表,然后插入新值,不能回退
FIELDS TERMINATED BY ‘,’:告诉SQLLDR数据的形式应该是用逗号分隔的值。为SQLLDR描述输入数据的方式有数十种;这只是其中较为常用的方法之一。
TERMINATED
BY WHITESPACE会解析这个串,查找空白符(制表符、空格和换行符)的第一次出现,然后继续查找,直至找到下一个非空白符。
(id integer external,
.....
dt date"yyyy-mm-dd"):告诉SQLLDR所要加载的列、这些列在输入数据中的顺序以及数据类型。这是指输入流中数据的数据类型,而不是数据库中的数据类型。列的数据类型默认为CHAR(255)
加载这样的定界数据时,很可能想逃过输入记录中的某些列。例如,你可能加载字段1、3和5,而跳过第2列和第4列。为此,SQLLDR提供了FILLER关键字。这允许你映射一个输入记录中的一列,但不把它放在数据库中。
在cmd命令下,执行
sqlldr userid=test/test@106.37.200.200/test control=d:/sql2.ctl log=d:/sqlldr2.log
首先需要将建立ctl格式的文件:
load data
infile 'D:\rh2015_2.txt'
append into table jg_hum
fields terminated by '|'
OPTIONALLY ENCLOSED BY '"'
TRAILING NULLCOLS
(
rh,
stid,
FRCSTDATE date "yyyy-mm-dd",
FRCSTHOUR,
LON,
LAT
)
*.ctl格式为:
load data
infile "d://test.txt" 外部数据文件
infile "d://test1.txt" 可指定多个数据文件
append into table test 向表中追加数据
fields terminated by "," 外部文件的数据以“,”分隔
OPTIONALLY ENCLOSED
BY '"' 部分字段可以用双引号包起来
trailing nullcols 表中的字段没有对应的值时填充空值
(
id integer external, integer
external 表示插入的数据是string,如果只保留integer,表示插入的数据是二进制
name "upper(:name)", 将插入的值转换为大写
con ":id||:name", 表中CON列的值是ID和NAME的组合值
dt date"yyyy-mm-dd" 插入日期型数据
)
说明:
load data
告诉SQLLDR要做什么(在这个例子中,则指示要加载数据)。SQLLDR还可以执行CONTINUE_LOAD,也就是继续加载。只有在继续一个多表直接路径加载时才能使用后面这个选项
INFILE *
:如果是*号,这会告诉SQLLDR所要加载的数据实际上包含在控制文件本身上,例见下一文。如上例指定包含数据的另一个文件的文件名。如果愿意,可以使用一个命令行参数覆盖这个INFILE语句。要当心,命令行选项总会涵盖控制文件设置
在append的位置还可以用以下列表中的一个值:
insert 向表中插入值,但要求表开始时为空,默认的加载选项
replace delete表中的数据,然后插入新值,记录多时速度慢
append 向表中追加数据
truncate trunctate表,然后插入新值,不能回退
FIELDS TERMINATED BY ‘,’:告诉SQLLDR数据的形式应该是用逗号分隔的值。为SQLLDR描述输入数据的方式有数十种;这只是其中较为常用的方法之一。
TERMINATED
BY WHITESPACE会解析这个串,查找空白符(制表符、空格和换行符)的第一次出现,然后继续查找,直至找到下一个非空白符。
(id integer external,
.....
dt date"yyyy-mm-dd"):告诉SQLLDR所要加载的列、这些列在输入数据中的顺序以及数据类型。这是指输入流中数据的数据类型,而不是数据库中的数据类型。列的数据类型默认为CHAR(255)
加载这样的定界数据时,很可能想逃过输入记录中的某些列。例如,你可能加载字段1、3和5,而跳过第2列和第4列。为此,SQLLDR提供了FILLER关键字。这允许你映射一个输入记录中的一列,但不把它放在数据库中。
在cmd命令下,执行
sqlldr userid=test/test@106.37.200.200/test control=d:/sql2.ctl log=d:/sqlldr2.log
相关文章推荐
- 基于 Red Hat 的发行版 Oracle Linux 正式发布Oracle Linux 7.1
- Oracle Containers for J2EE远程安全漏洞(CVE-2014-0413)
- Oracle 10g R2不能使用EM的问题
- 表空间操作
- PreparedStatement中in子句的处理
- VMware下RedHat4.8_64位安装Oracle 10g RAC--简略脚本
- oracle sql日期比较
- 基于 Red Hat 的发行版 Oracle Linux 正式发布Oracle Linux 7.1
- OS block size和Oracle block size,查找OS Blocksize的方法
- oracle中创建数据库和表空间的几点总结
- 数据库自动备份脚本
- oracle的nvl函数的使用介绍
- 解决oracle用户连接失败的解决方法
- oracle的一些tips技巧
- Oracle 下的开发日积月累
- Oracle存储过程之数据库中获取数据实例
- Windows下ORACLE 10g完全卸载的方法分析
- Oracle 函数大全[字符串函数,数学函数,日期函数]第1/4页
- ORACLE LATERAL-SQL-INJECTION 个人见解