oracle insert语句_Oracle的sqlldr命令的简单使用

简介

假如你需要把一个大小为10G左右带固定格式的txt数据文件导入到你指定的Oracle数据表中,你可以使用Oracle的sqlldr命令。

c365ae267a51052a0a80824eda4e773f.png

txt数据文件长这样

sqlldr命令

sqlldr是Oracle数据库提供的一个命令,所以如果要使用sqlldr命令,你得找一台成功安装Oracle数据库的电脑。然后输入sqlldr命令

c536994f7bfb4d4a39e995e3be67894f.png

测试sqlldr命令是否可以使用

sqlldr的简单使用命令如下:

sqlldr 用户名/密码@127.0.0.1:1521/DBName control=test_control.ctl log=/home/controlInfo.log

准备工作

1.首先需要自己编写test_contol.ctl文件。这个是控制文件,控制Oracle怎么处理数据。2.test_control.ctl文件长下面这个样子,你需要结合上面的txt数据文件的样子来理解并编写这个ctl文件。

62aa63ec49197d92359dbb818db09c70.png

test_control文件内容

test_control.ctl 文件语法解释

bb292e04c535ff295775371f067d6438.png

test_control.ctl文件语法解释
OPTIONS (skip=1,rows=128)这行可以不写可以直接写load data,skip跳过第一行数据,第一行数据一般是列头,rows128行提交一次load data  加载数据infile '/data/你要处理的数据文件data.txt'BADFILE '/data/坏数据文件_出错时ORACLE会自动创建.bad'DISCARDFILE '/data/ORACLE丢弃的数据.dis'append 表示往表里面追加数据,这里可以是insert(为缺省方式,在数据装载开始时要求表为空),append(在表中追加新记录)或者可以是replace(删除旧记录(用 delete from table 语句),替换成新装载的记录)或者可以是truncate (删除旧记录(用 truncate table 语句),替换成新装载的记录)into table "TABLE_NAME"  指定你自己的表名fields terminated by '|' 告诉ORACLE用什么分割数据trailing nullcols  表的字段没有对应的值时允 许为空 (列名3, 这里写你自己表的列名,注意这里的列名要跟你的数据文件里面的数据对应,数据文件里面第一列对应你表的哪一列列名2,列名1, "'Hi '||upper(:user_name)",还能用SQL函数或运算对数据进行加工处理列名4, "user_seq.nextval", --这一列直接取序列的下一值,而不用数据中提供的值  ,列名5,列名日期6 TIMESTAMP "YYYYMMDDHH24MISSff3" NULLIF (last_login="NULL"), 当字段为"NULL"时就是 NULL  列名日期7 TIMESTAMP "YYYYMMDDHH24MISSff3",列名主键 "SYS_GUID()")

还有一种情况就是:数据文件里面带双引号“”或者你数据文件第一列是没有意义的行号

84405a76961de4dc593071108083a5ca.png

数据文件里面带双引号“”或者你数据文件第一列是没有意义的行号

你可以编写下面这种ctl文件处理:

6fbda9686869d696ee001b0b44f93b4f.png

数据文件里面带双引号“”或者你数据文件第一列是没有意义的行号
OPTIONS (skip=1,rows=128)这行可以不写可以直接写load data,skip跳过第一行数据,第一行数据一般是列头,rows128行提交一次load data  加载数据infile '/data/你要处理的数据文件data.txt'BADFILE '/data/坏数据文件_出错时ORACLE会自动创建.bad'DISCARDFILE '/data/ORACLE丢弃的数据.dis'append 表示往表里面追加数据,这里可以是insert(为缺省方式,在数据装载开始时要求表为空),append(在表中追加新记录)或者可以是replace(删除旧记录(用 delete from table 语句),替换成新装载的记录)或者可以是truncate (删除旧记录(用 truncate table 语句),替换成新装载的记录)into table "TABLE_NAME"  指定你自己的表名fields terminated by ',' 告诉ORACLE用什么分割数据Optionally enclosed by '"' 这行也可以不写,数据文件中每列的数据用"框起为一个完整的数据,当字段中有 "," 分隔符时trailing nullcols  表的字段没有对应的值时允 许为空 (virtual_column FILLER, 这是一个虚拟字段,用来跳过第一列是没有意义的行号列名3, 这里写你自己表的列名,注意这里的列名要跟你的数据文件里面的数据对应,数据文件里面第一列对应你表的哪一列列名2,列名1, "'Hi '||upper(:user_name)",还能用SQL函数或运算对数据进行加工处理列名4, "user_seq.nextval", --这一列直接取序列的下一值,而不用数据中提供的值  ,列名5,列名日期6 TIMESTAMP "YYYYMMDDHH24MISSff3" NULLIF (last_login="NULL"), 当字段为"NULL"时就是 NULL  列名日期7 TIMESTAMP "YYYYMMDDHH24MISSff3",列名主键 "SYS_GUID()")

执行命令

824ef36393a55ac561eab21399bdbc98.png

成功执行命令
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值