sqlldr装载数据实现代码
ENTIRE_LINE position(1:29)
for i in 1 .. l_fmts.count
< 2 > 使用fix属性
INTO TABLE DEPT
ID NAME DAT1 DAT2 DAT3
60,"Finance",,Virginia // loc 列将为空
COMMENTS
demo18.dat
(DEPTNO,
20,Accounting,"Virginia,USA"
continueif this(1:1) = '-' // 找每行的开始是否有连接字符 - 有就把下一行连接为一行
40,Finance,Virginia,987268297,This is the Finance
LAST_UPDATED "my_to_date( :last_updated )",
// INFILE * // 要导入的内容就在control文件里 下面的BEGINDATA后面就是导入的内容
=====================================================================================
INFILE *
LAST_UPDATED "my_to_date( :last_updated )" // 使用自定义的函数
DNAME position(*:16), // 这个字段的开始位置在前一字段的结束位置
10,Sql,what
20,Accounting,Virginia,13/04/2001,"This is the Accounting
LOAD DATA
BEGINDATA
// )
DNAME "upper(:dname)",
LOAD DATA
l_return date;
TRAILING NULLCOLS
create or replace
trailing nullcols
// col_2 position(3:10),
Office in Virginia
TRAILING NULLCOLS
DNAME "upper(:dname)",
// col_1 position(1:2),
SQL*Loader: Release 9.2.0.6.0 - Production on 星期一 11月 7 20:20:00 2005
APPEND // 原先的表有数据 就加在后面
DNAME "upper(:dname)",
// col_2 [date "dd-mon-yyy"] TERMINATED BY ',' ,
(
2)SQL> create table t_load(
TRAILING NULLCOLS ************* 表的字段没有对应的值时允许为空
)
INFILE *
// 这样装载会把换行符装入数据库 下面的方法就不会 但要求数据的格式不同
LOC "upper(:loc)",
LAST_UPDATED "my_to_date( :last_updated )",
INTO TABLE table_name // 指定装入的表
Office in Virginia
BEGINDATA
INTO TABLE DEPT
// 当没声明FIELDS TERMINATED BY ','用位置告诉字段装载数据
REPLACE
5)SQL> select * from t_load;
达到提交点,逻辑记录计数3
7 ***** 合并多行记录为一行记录
< 3 > 使用var属性
INFILE demo19.dat "var 3"
badfile 't.bad'
Office in Virginia"
LAST_UPDATED "my_to_date( :last_updated )",
name varchar2(10),
// col_3 position(*:16), // 这个字段的开始位置在前一字段的结束位置
************* 指定的TERMINATED可以在表的开头 也可在表的内部字段部分
'dd/mm/yyyy',
-- FIELDS TERMINATED BY x'09'
3)控制文件 t.ctl 如下
DNAME,
sqlldr userid=lgone/tiger control=a.ctl
< 4 > 使用str属性
Finance,Virginia,13/04/2001
// 装载这种数据: 10,lg,"""lg""","lg,lg"
FIELDS TERMINATED BY ','
1 ***** 普通装载
EXIT when l_return is not null;
INTO TABLE DEPT
DNAME "upper(:dname)",
INFILE demo18.dat "fix 101"
id ,
REPLACE
col_1 , col_2 ,col_filler FILLER // FILLER 关键字 此列的数值不会被装载
if ( l_return is null )
// 下面是另一个列子 第一行的 1 在数据库中将成为 null
COMMENTS
then
dat1 date "mm/dd/yyyy hh24:mi:ss",
)
FIELDS TERMINATED BY ','
INFILE *
LOAD DATA
// 1/5/2000 就是一行 10,Sales,Virginia,1/5/2000
10Accounting Virginia,USA
// 3 告诉每个记录的前3个字节表示记录的长度 如第一个记录的 071 表示此记录有 71 个字节
p_string, 'GMT', 'EST' );
Office in Virginia"
// TRUNCATE // 指定的内容和replace的相同 会用truncate语句删除现存数据
(DEPTNO,
(DEPTNO,
INFILE *
// 当没声明FIELDS TERMINATED BY ',' 时
)
)
Office in Virginia
(DEPTNO,
20,Accounting,Virginia,13/04/2001,This is the Accounting
LOC "upper(:loc)",
Office in Virginia"
INFILE *
30,Consulting,Virginia,14/04/2001 12:02:02,This is the Consulting
// )
1/5/2000 1/5/2000
-40, 40,Finance,Virginia,13/04/2001
function my_to_date( p_string in varchar2 ) return date
REPLACE
LOC "upper(:loc)",
// TERMINATED BY X '09' // 以十六进制格式 '09' 表示的
concatenate 3 // 通过关键字concatenate 把几行的记录看成一行记录
)
BEGINDATA
Office in Virginia"
LOAD DATA
COMMENTS
REPLACE
LOAD DATA
30,Consulting,Virginia,14/04/2001 12:02:02,This is the Consulting\nOffice in Virginia
loop
INTO TABLE DEPT
BEGINDATA
1 jhchen 07-NOV-05 07-NOV-05
-10,Sales,Virginia, -10,Sales,Virginia,
DNAME,
DNAME "upper(:dname)",
(DEPTNO,
)
DNAME,
1)把 excel 数据存为 t.txt 文件,注意文件后缀名为 .txt
50,"Finance","",Virginia // loc 列将为空
INTO TABLE DEPT
30,Consulting,Virginia,14/04/2001 12:02:02,This is the Consulting
BEGINDATA
DNAME "upper(:dname)",
)
Table created.
LOAD DATA
)
告诉sqlldr在每行的末尾找逗号 找到逗号就把下一行附加到上一行
1 10
// INSERT // 装载空表 如果原先的表有数据 sqlloader会停止 默认值
INTO TABLE DEPT
10,Sales,Virginia,01-april-2001,This is the Sales
LOAD DATA
LOC "upper(:loc)",
// col_4 position(1:16),
REPLACE
DNAME "upper(:dname)",
20,Accounting,Virginia,21/6/1999
// col_3 [char] TERMINATED BY ',' OPTIONALLY ENCLOSED BY 'lg'
load data
(DEPTNO,
20lg demo17.dat
DNAME "upper(:dname)",
return l_return;
(DEPTNO,
REPLACE
50,Finance,Virginia,02-apr-2001
INFILE *
new_time( to_date('01011970','ddmmyyyy') + 1/24/60/60 *
10,Sales,Virginia,01-april-2001
// 的列的值的 如果第一行改为 10,Sales,Virginia,1/5/2000,, 就不用TRAILING NULLCOLS了
/
1 jhchen 11/07/2005 20:04:00 2005-11-7 20:04
Office in Virginia
as
demo20.dat
LOC "upper(:loc)",
结果 7C0D0A
REPLACE
FILLER_1 FILLER, // 下面的 "Something Not To Be Loaded" 将不会被装载
REPLACE
end;
)
40,Finance,Virginia
2 jhchen 07-NOV-05 07-NOV-05
TRAILING NULLCOLS
6 ***** 使用自定义的函数 // 解决的时间问题
);
LOC "upper(:loc)",
60,Finance,Virginia,Not a date
(
)
此列中记录是以 a|\r\n 结束的
// col_5 position(3:10) char(8) // 指定字段的类型
---------- ---------- --------- --------- ---------
REPLACE
10510-jan-200009945Spread over three meals.
into table t
FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"'
append into table t_load
4 ***** position的列子
Office in Virginia|
id position(1:3) nullif // 这里可以是blanks 或者别的表达式
TRAILING NULLCOLS
LAST_UPDATED date 'dd/mm/yyyy'
30,Consulting,Virginia,14/04/2001 12:02:02
BEGINDATA
//////////// 注意begindata后的数值前面不能有空格
9 ***** 载入有换行符的数据
end;
)
dat2 date,
type fmtArray is table of varchar2(25);
FIELDS TERMINATED BY ','
fsdfasj //自动分配一行号给载入 表t 的seqno字段 此行为 1
( seqno RECNUM //载入每行的行号
象这样的数据 用 nullif 子句
// 如: lg,lg,not 结果 lg lg
when others then null;
BADFILE 'c:\bad.txt' // 指定坏文件地址
// 最灵活的一中 可定义一个新的行结尾符 win 回车换行 : chr(13)||chr(10)
==============================================================================
FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"'
8 ***** 载入每行的行号
LOAD DATA
LOAD DATA
BEGINDATA // 对应开始的 INFILE * 要导入的内容就在control文件里
20,Accounting,Virginia,13/04/2001,This is the Accounting\nOffice in Virginia
10-jan-200002350Flipper seemed unusually hungry today.
INFILE *
INFILE demo20.dat "str X'7C0D0A'"
begin
Office in Virginia
LAST_UPDATED "my_to_date( :last_updated )",
10,Sales,"""USA"""
( DEPTNO,
fasdjfasdfl // 此行为 2 ...
text Position(1:1024))
LAST_UPDATED date 'dd/mm/yyyy'
LOC "upper(:loc)",
INTO TABLE DEPT
'dd/mm/yyyy hh24:mi:ss' );
FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"'
select utl_raw.cast_to_raw('|'||chr(13)||chr(10)) from dual;
)
(DEPTNO,
BEGINDATA
)
replace
10,Sales, // 其实这3行看成一行 10,Sales,Virginia,1/5/2000
end loop;
FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"'
07110,Sales,Virginia,01-april-2001,This is the Sales
40,Finance,Virginia,987268297,"This is the Finance
// REPLACE // 原先的表有数据 原先的数据会全部删除
LOAD DATA
40,Finance,Virginia,987268297,This is the Finance\nOffice in Virginia
30,Consulting,Virginia,14/04/2001 12:02:02,"This is the Consulting
(n position(1:2) integer external nullif n='1',
INFILE demo17.dat "fix 101"
LAST_UPDATED date 'dd/mm/yyyy', // 日期的一种表达方式 还有'dd-mon-yyyy' 等
Office in Virginia
INFILE *
LOAD DATA
l_return := to_date( p_string, l_fmts(i) );
LOC "upper(:loc)",
begin
TRAILING NULLCOLS
30,Consulting,Virginia,5/1/2000
************* 下面是表的字段
4)C:\Documents and Settings\cjh>sqlldr userid=jhchen/oracle control=t.ctl
INFILE *
// (
FIELDS TERMINATED BY ','
// (
// col_1 [interger external] TERMINATED BY ',' ,
exception
DNAME "upper(:dname)", // 使用函数
COMMENTS
注意: unix 和 windows 不同 \\n & /n
(DEPTNO,
v position(3:8)
Virginia,
(DEPTNO,
LOAD DATA
30,Consulting,Virginia
LAST_UPDATED "my_to_date( :last_updated )",
REPLACE
LOC
INTO TABLE DEPT
10,Sales,Virginia,01-april-2001,This is the Sales\nOffice in Virginia
INFILE 't.dat' // 要导入的文件
LOC
end if;
08730,Consulting,Virginia,14/04/2001 12:02:02,This is the Consulting
FIELDS TERMINATED BY ','
************* 以下是4种装入表的方式
20,Something Not To Be Loaded,Accounting,"Virginia,USA"
LOAD DATA
fields terminated by X'09'
(DEPTNO,
// 在表中结果: 10 lg "lg" lg,lg
20,lg,show
10,Sales,Virginia,01-april-2001,"This is the Sales
INFILE *
replace
// 这列子用 continueif list="," 也可以
// 其中1:1 表示从第一行开始 并在第一行结束 还有continueif next 但continueif list最理想
BEGINDATA
// 如 -10,Sales,Virginia,
// INFILE 'tt.date' // 导入多个文件
INTO TABLE DEPT
1/5/2000
5 ***** 使用函数 日期的一种表达 TRAILING NULLCOLS的使用
10,Sales,Virginia,01-april-2001,This is the Sales
20,Accounting,Virginia,13/04/2001
id number,
10,Sales,Virginia,1/5/2000
40,Finance,Virginia,987268297
// TERMINATED BY WRITESPACE // 装载这种数据: 10 lg lg
name ,
2 ***** FIELDS TERMINATED BY WHITESPACE 和 FIELDS TERMINATED BY x'09' 的情况
BEGINDATA
infile *
)
( DEPTNO position(1:2),
load data
Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved.
FIELDS TERMINATED BY ','
LOAD DATA
demo19.dat
Office in Virginia
l_return :=
INTO TABLE DEPT
INTO TABLE DEPT
FIELDS TERMINATED BY ','
Office in Virginia
LOAD DATA
40,Finance,Virginia,987268297,This is the Finance
dat1 date,
replace
infile 't.txt'
dat2 date "yyyy-mm-dd hh24:mi:ss"
TRAILING NULLCOLS // 其实下面的ENTIRE_LINE在BEGINDATA后面的数据中是没有直接对应
ENTIRE_LINE ":deptno||:dname||:loc||:last_updated"
这里用 excel 数据做个最简单的测试。
TRAILING NULLCOLS
REPLACE
3 ***** 指定不装载那一列
REPLACE
LOC
INTO TABLE T
07140,Finance,Virginia,987268297,This is the Finance
2 jhchen 11/07/2005 20:04:00 2005-11-7 20:04
LOC position(*:29),
FIELDS TERMINATED BY ','
Office in Virginia|
Office in Virginia|
l_fmts fmtArray := fmtArray( 'dd-mon-yyyy', 'dd-month-yyyy',
INTO TABLE DEPT
FIELDS TERMINATED BY WHITESPACE
< 1 > 使用一个非换行符的字符
)
BEGINDATA
INTO TABLE DEPT
3 jhchen 11/07/2005 20:04:00 2005-11-7 20:04
3 jhchen 07-NOV-05 07-NOV-05
20,Accounting,Virginia,13/04/2001,This is the Accounting
07820,Accounting,Virginia,13/04/2001,This is the Accounting
LOC "upper(:loc)",
Office in Virginia|
10 Sales Virginia
BEGINDATA // 但是好象不能象右面的那样使用
其中,X'09' 是制表符,TAB键,trailing nullcols 表示如表的字段没有对应的值时允许为空。
)
dat3 date
COMMENTS "replace(:comments,'\n',chr(10))" // replace 的使用帮助转换换行符
相关热词:
本站内容来源于网络,如有侵权请与我们联系,我们会及时删除,我们深感抱歉!
注:本站所有信息仅供用于网络技术学习参考,学习中请遵循相关法律法规!
本文地址: https://www.juheyunku.com/sql/mssql/2233.shtml
相关文章
热门TAG
命令 权重 外链 企业网站 白帽 php 织梦教程 dedecms修改内容 javascript 织梦 功能 标签 调用 详解 服务器 网站流量 实例解析 Dedecms 织梦cms HTML tags标签 python jquery教程 jquery windows SEO优化 蜘蛛 搜索引擎 网站收录 JSP最新文章
-
sql server 关于设置null的一
时间:2020-12-28
-
详解SQL游标的用法
时间:2020-12-27
-
vs code连接sql server数据库步
时间:2020-12-27
-
图书管理系统的sqlserver数
时间:2020-12-25
-
详解SQL 通配符
时间:2020-12-25
-
sql四大排名函数之ROW_NUM
时间:2020-12-25
-
SQLServer数据库处于恢复挂
时间:2020-12-24
-
Win10 64位安装个人版SQL20
时间:2020-12-24
热门文章
-
sqlserver中查询横表变竖表的sql语句简析
时间:2020-12-08
-
关于SQL Server查询语句的使用
时间:2020-12-13
-
SQL Server简单模式下误删除堆表记录恢复方
时间:2020-12-12
-
MSSQL教程_mssql数据库教程_MSSQL基础教程_第
时间:2020-12-13
-
详解SQL游标的用法
时间:2020-12-27
-
sql server 关于设置null的一些建议
时间:2020-12-28
-
jdbc连接sql server数据库问题分析
时间:2020-12-10
-
mssql关于一个表格结构的另外一种显示(表
时间:2020-12-11
-
SQL Server数据库入门学习总结
时间:2020-12-10
-
使用SqlBulkCopy时应注意Sqlserver表中使用缺
时间:2020-12-09
