ctl文件语法

ads

简介

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


txt数据文件长这样


sqlldr命令

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


测试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文件。


test_control文件内容


test_control.ctl 文件语法解释


test_control.ctl文件语法解释
OPTIONS (skip=1,rows=128)这行可以不写可以直接写load dataskip跳过第一行数据,第一行数据一般是列头,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()")

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


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


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

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

OPTIONS (skip=1,rows=128)这行可以不写可以直接写load dataskip跳过第一行数据,第一行数据一般是列头,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()")

执行命令


成功执行命令



最后编辑于:2024/1/18 拔丝英语网

admin-avatar

英语作文代写、国外视频下载

高质量学习资料分享

admin@buzzrecipe.com